From ebe1f5bd00e90b740abf6f654be43deef92a01d3 Mon Sep 17 00:00:00 2001 From: sadmin Date: Tue, 13 Jan 2026 12:36:57 +0300 Subject: [PATCH] sync --- .htaccess | 2 + _api_server_vue_20.11.2020.rar | Bin 0 -> 28039 bytes api_24.10.2018.rar | Bin 0 -> 16032 bytes connection.php | 41 ++ core.php | 44 ++ core__.php | 65 +++ index.php | 8 + libs/JWT.php | 379 ++++++++++++++++++ libs/hs256.php | 79 ++++ modules/BOFHeatPhase/BOFHeatPhase.php | 21 + .../BOFHeatPhaseAllStatus.php | 15 + modules/BOFReport/BOFReport.php | 111 +++++ modules/HMCarReport/HMCarReport.php | 119 ++++++ modules/HM_DC/HM_DC.php | 15 + modules/KKC.rar | Bin 0 -> 2997 bytes modules/KKC/app.php | 50 +++ modules/KKC/dashboard.php | 300 ++++++++++++++ modules/KKC/mega_report.php | 256 ++++++++++++ modules/LadleUse/LadleUse.php | 14 + modules/PRB_FileControl/File_Upload.php | 141 +++++++ modules/PRB_FileControl/PRB_FileControl.php | 81 ++++ modules/Pasport_KRO/Pasport_KRO.php | 14 + .../crewAggregateWeight.php | 14 + modules/prohodnaya/prohodnaya.php | 57 +++ modules/stat/stat.php | 52 +++ modules/tundishSample/tundishSample.php | 36 ++ modules/weatherAvg/weatherAvg.php | 17 + server.php | 195 +++++++++ server__.php | 169 ++++++++ 29 files changed, 2295 insertions(+) create mode 100644 .htaccess create mode 100644 _api_server_vue_20.11.2020.rar create mode 100644 api_24.10.2018.rar create mode 100644 connection.php create mode 100644 core.php create mode 100644 core__.php create mode 100644 index.php create mode 100644 libs/JWT.php create mode 100644 libs/hs256.php create mode 100644 modules/BOFHeatPhase/BOFHeatPhase.php create mode 100644 modules/BOFHeatPhaseAllStatus/BOFHeatPhaseAllStatus.php create mode 100644 modules/BOFReport/BOFReport.php create mode 100644 modules/HMCarReport/HMCarReport.php create mode 100644 modules/HM_DC/HM_DC.php create mode 100644 modules/KKC.rar create mode 100644 modules/KKC/app.php create mode 100644 modules/KKC/dashboard.php create mode 100644 modules/KKC/mega_report.php create mode 100644 modules/LadleUse/LadleUse.php create mode 100644 modules/PRB_FileControl/File_Upload.php create mode 100644 modules/PRB_FileControl/PRB_FileControl.php create mode 100644 modules/Pasport_KRO/Pasport_KRO.php create mode 100644 modules/crewAggregateWeight/crewAggregateWeight.php create mode 100644 modules/prohodnaya/prohodnaya.php create mode 100644 modules/stat/stat.php create mode 100644 modules/tundishSample/tundishSample.php create mode 100644 modules/weatherAvg/weatherAvg.php create mode 100644 server.php create mode 100644 server__.php diff --git a/.htaccess b/.htaccess new file mode 100644 index 0000000..bd7405a --- /dev/null +++ b/.htaccess @@ -0,0 +1,2 @@ +RewriteEngine on +RewriteRule .? - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] \ No newline at end of file diff --git a/_api_server_vue_20.11.2020.rar b/_api_server_vue_20.11.2020.rar new file mode 100644 index 0000000000000000000000000000000000000000..5381d9c76ee2c7dae371880e5232d2f6a9f02c4f GIT binary patch literal 28039 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 en|I1e+gr1iGHul-`AOY0lo5~+-~10jU848^ literal 0 HcmV?d00001 diff --git a/api_24.10.2018.rar b/api_24.10.2018.rar new file mode 100644 index 0000000000000000000000000000000000000000..260a3f7a1be536e3ff91b1964024124ae48c5af1 GIT binary patch literal 16032 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 $Database, 'UID' => $UID, 'PWD' => $PWD); +$conn = sqlsrv_connect($serverName, $connectionInfo); +if ($conn) { + header('Content-Type:text/html; charset=UTF-8', true, 200); +} else { + header('Content-Type:text/html; charset=UTF-8', true, 301); + if (($errors = sqlsrv_errors()) != null) { + foreach ($errors as $error) { + echo "SQLSTATE: ".$error[ 'SQLSTATE']."
"; + echo "code: ".$error[ 'code']."
"; + echo "message: ".iconv('windows-1251', 'UTF-8', $error['message'])."
"; + } + } +} + diff --git a/core.php b/core.php new file mode 100644 index 0000000..9a5b18f --- /dev/null +++ b/core.php @@ -0,0 +1,44 @@ + + * @author Anant Narayanan + * @license http://opensource.org/licenses/BSD-3-Clause 3-clause BSD + * @link https://github.com/firebase/php-jwt + */ +class JWT +{ + + /** + * When checking nbf, iat or expiration times, + * we want to provide some extra leeway time to + * account for clock skew. + */ + public static $leeway = 0; + + /** + * Allow the current timestamp to be specified. + * Useful for fixing a value within unit testing. + * + * Will default to PHP time() value if null. + */ + public static $timestamp = null; + + public static $supported_algs = array( + 'HS256' => array('hash_hmac', 'SHA256'), + 'HS512' => array('hash_hmac', 'SHA512'), + 'HS384' => array('hash_hmac', 'SHA384'), + 'RS256' => array('openssl', 'SHA256'), + 'RS384' => array('openssl', 'SHA384'), + 'RS512' => array('openssl', 'SHA512'), + ); + + /** + * Decodes a JWT string into a PHP object. + * + * @param string $jwt The JWT + * @param string|array $key The key, or map of keys. + * If the algorithm used is asymmetric, this is the public key + * @param array $allowed_algs List of supported verification algorithms + * Supported algorithms are 'HS256', 'HS384', 'HS512' and 'RS256' + * + * @return object The JWT's payload as a PHP object + * + * @throws UnexpectedValueException Provided JWT was invalid + * @throws SignatureInvalidException Provided JWT was invalid because the signature verification failed + * @throws BeforeValidException Provided JWT is trying to be used before it's eligible as defined by 'nbf' + * @throws BeforeValidException Provided JWT is trying to be used before it's been created as defined by 'iat' + * @throws ExpiredException Provided JWT has since expired, as defined by the 'exp' claim + * + * @uses jsonDecode + * @uses urlsafeB64Decode + */ + public static function decode($jwt, $key, array $allowed_algs = array()) + { + $timestamp = is_null(static::$timestamp) ? time() : static::$timestamp; + + if (empty($key)) { + throw new InvalidArgumentException('Key may not be empty'); + } + $tks = explode('.', $jwt); + if (count($tks) != 3) { + throw new UnexpectedValueException('Wrong number of segments'); + } + list($headb64, $bodyb64, $cryptob64) = $tks; + if (null === ($header = static::jsonDecode(static::urlsafeB64Decode($headb64)))) { + throw new UnexpectedValueException('Invalid header encoding'); + } + if (null === $payload = static::jsonDecode(static::urlsafeB64Decode($bodyb64))) { + throw new UnexpectedValueException('Invalid claims encoding'); + } + if (false === ($sig = static::urlsafeB64Decode($cryptob64))) { + throw new UnexpectedValueException('Invalid signature encoding'); + } + if (empty($header->alg)) { + throw new UnexpectedValueException('Empty algorithm'); + } + if (empty(static::$supported_algs[$header->alg])) { + throw new UnexpectedValueException('Algorithm not supported'); + } + if (!in_array($header->alg, $allowed_algs)) { + throw new UnexpectedValueException('Algorithm not allowed'); + } + if (is_array($key) || $key instanceof \ArrayAccess) { + if (isset($header->kid)) { + if (!isset($key[$header->kid])) { + throw new UnexpectedValueException('"kid" invalid, unable to lookup correct key'); + } + $key = $key[$header->kid]; + } else { + throw new UnexpectedValueException('"kid" empty, unable to lookup correct key'); + } + } + + // Check the signature + if (!static::verify("$headb64.$bodyb64", $sig, $key, $header->alg)) { + throw new SignatureInvalidException('Signature verification failed'); + } + + // Check if the nbf if it is defined. This is the time that the + // token can actually be used. If it's not yet that time, abort. + if (isset($payload->nbf) && $payload->nbf > ($timestamp + static::$leeway)) { + throw new BeforeValidException( + 'Cannot handle token prior to ' . date(DateTime::ISO8601, $payload->nbf) + ); + } + + // Check that this token has been created before 'now'. This prevents + // using tokens that have been created for later use (and haven't + // correctly used the nbf claim). + if (isset($payload->iat) && $payload->iat > ($timestamp + static::$leeway)) { + throw new BeforeValidException( + 'Cannot handle token prior to ' . date(DateTime::ISO8601, $payload->iat) + ); + } + + // Check if this token has expired. + if (isset($payload->exp) && ($timestamp - static::$leeway) >= $payload->exp) { + throw new ExpiredException('Expired token'); + } + + return $payload; + } + + /** + * Converts and signs a PHP object or array into a JWT string. + * + * @param object|array $payload PHP object or array + * @param string $key The secret key. + * If the algorithm used is asymmetric, this is the private key + * @param string $alg The signing algorithm. + * Supported algorithms are 'HS256', 'HS384', 'HS512' and 'RS256' + * @param mixed $keyId + * @param array $head An array with header elements to attach + * + * @return string A signed JWT + * + * @uses jsonEncode + * @uses urlsafeB64Encode + */ + public static function encode($payload, $key, $alg = 'HS256', $keyId = null, $head = null) + { + $header = array('typ' => 'JWT', 'alg' => $alg); + if ($keyId !== null) { + $header['kid'] = $keyId; + } + if ( isset($head) && is_array($head) ) { + $header = array_merge($head, $header); + } + $segments = array(); + $segments[] = static::urlsafeB64Encode(static::jsonEncode($header)); + $segments[] = static::urlsafeB64Encode(static::jsonEncode($payload)); + $signing_input = implode('.', $segments); + + $signature = static::sign($signing_input, $key, $alg); + $segments[] = static::urlsafeB64Encode($signature); + + return implode('.', $segments); + } + + /** + * Sign a string with a given key and algorithm. + * + * @param string $msg The message to sign + * @param string|resource $key The secret key + * @param string $alg The signing algorithm. + * Supported algorithms are 'HS256', 'HS384', 'HS512' and 'RS256' + * + * @return string An encrypted message + * + * @throws DomainException Unsupported algorithm was specified + */ + public static function sign($msg, $key, $alg = 'HS256') + { + if (empty(static::$supported_algs[$alg])) { + throw new DomainException('Algorithm not supported'); + } + list($function, $algorithm) = static::$supported_algs[$alg]; + switch($function) { + case 'hash_hmac': + return hash_hmac($algorithm, $msg, $key, true); + case 'openssl': + $signature = ''; + $success = openssl_sign($msg, $signature, $key, $algorithm); + if (!$success) { + throw new DomainException("OpenSSL unable to sign data"); + } else { + return $signature; + } + } + } + + /** + * Verify a signature with the message, key and method. Not all methods + * are symmetric, so we must have a separate verify and sign method. + * + * @param string $msg The original message (header and body) + * @param string $signature The original signature + * @param string|resource $key For HS*, a string key works. for RS*, must be a resource of an openssl public key + * @param string $alg The algorithm + * + * @return bool + * + * @throws DomainException Invalid Algorithm or OpenSSL failure + */ + private static function verify($msg, $signature, $key, $alg) + { + if (empty(static::$supported_algs[$alg])) { + throw new DomainException('Algorithm not supported'); + } + + list($function, $algorithm) = static::$supported_algs[$alg]; + switch($function) { + case 'openssl': + $success = openssl_verify($msg, $signature, $key, $algorithm); + if ($success === 1) { + return true; + } elseif ($success === 0) { + return false; + } + // returns 1 on success, 0 on failure, -1 on error. + throw new DomainException( + 'OpenSSL error: ' . openssl_error_string() + ); + case 'hash_hmac': + default: + $hash = hash_hmac($algorithm, $msg, $key, true); + if (function_exists('hash_equals')) { + return hash_equals($signature, $hash); + } + $len = min(static::safeStrlen($signature), static::safeStrlen($hash)); + + $status = 0; + for ($i = 0; $i < $len; $i++) { + $status |= (ord($signature[$i]) ^ ord($hash[$i])); + } + $status |= (static::safeStrlen($signature) ^ static::safeStrlen($hash)); + + return ($status === 0); + } + } + + /** + * Decode a JSON string into a PHP object. + * + * @param string $input JSON string + * + * @return object Object representation of JSON string + * + * @throws DomainException Provided string was invalid JSON + */ + public static function jsonDecode($input) + { + if (version_compare(PHP_VERSION, '5.4.0', '>=') && !(defined('JSON_C_VERSION') && PHP_INT_SIZE > 4)) { + /** In PHP >=5.4.0, json_decode() accepts an options parameter, that allows you + * to specify that large ints (like Steam Transaction IDs) should be treated as + * strings, rather than the PHP default behaviour of converting them to floats. + */ + $obj = json_decode($input, false, 512, JSON_BIGINT_AS_STRING); + } else { + /** Not all servers will support that, however, so for older versions we must + * manually detect large ints in the JSON string and quote them (thus converting + *them to strings) before decoding, hence the preg_replace() call. + */ + $max_int_length = strlen((string) PHP_INT_MAX) - 1; + $json_without_bigints = preg_replace('/:\s*(-?\d{'.$max_int_length.',})/', ': "$1"', $input); + $obj = json_decode($json_without_bigints); + } + + if (function_exists('json_last_error') && $errno = json_last_error()) { + static::handleJsonError($errno); + } elseif ($obj === null && $input !== 'null') { + throw new DomainException('Null result with non-null input'); + } + return $obj; + } + + /** + * Encode a PHP object into a JSON string. + * + * @param object|array $input A PHP object or array + * + * @return string JSON representation of the PHP object or array + * + * @throws DomainException Provided object could not be encoded to valid JSON + */ + public static function jsonEncode($input) + { + $json = json_encode($input); + if (function_exists('json_last_error') && $errno = json_last_error()) { + static::handleJsonError($errno); + } elseif ($json === 'null' && $input !== null) { + throw new DomainException('Null result with non-null input'); + } + return $json; + } + + /** + * Decode a string with URL-safe Base64. + * + * @param string $input A Base64 encoded string + * + * @return string A decoded string + */ + public static function urlsafeB64Decode($input) + { + $remainder = strlen($input) % 4; + if ($remainder) { + $padlen = 4 - $remainder; + $input .= str_repeat('=', $padlen); + } + return base64_decode(strtr($input, '-_', '+/')); + } + + /** + * Encode a string with URL-safe Base64. + * + * @param string $input The string you want encoded + * + * @return string The base64 encode of what you passed in + */ + public static function urlsafeB64Encode($input) + { + return str_replace('=', '', strtr(base64_encode($input), '+/', '-_')); + } + + /** + * Helper method to create a JSON error. + * + * @param int $errno An error number from json_last_error() + * + * @return void + */ + private static function handleJsonError($errno) + { + $messages = array( + JSON_ERROR_DEPTH => 'Maximum stack depth exceeded', + JSON_ERROR_STATE_MISMATCH => 'Invalid or malformed JSON', + JSON_ERROR_CTRL_CHAR => 'Unexpected control character found', + JSON_ERROR_SYNTAX => 'Syntax error, malformed JSON', + JSON_ERROR_UTF8 => 'Malformed UTF-8 characters' //PHP >= 5.3.3 + ); + throw new DomainException( + isset($messages[$errno]) + ? $messages[$errno] + : 'Unknown JSON error: ' . $errno + ); + } + + /** + * Get the number of bytes in cryptographic strings. + * + * @param string + * + * @return int + */ + private static function safeStrlen($str) + { + if (function_exists('mb_strlen')) { + return mb_strlen($str, '8bit'); + } + return strlen($str); + } +} diff --git a/libs/hs256.php b/libs/hs256.php new file mode 100644 index 0000000..c89a038 --- /dev/null +++ b/libs/hs256.php @@ -0,0 +1,79 @@ + 'HS256', + 'typ' => 'JWT', +]; + +// JWT Payload data +// $payload = [ +// 'sub' => '1234567890', +// 'name' => 'John Doe', +// 'admin' => true, +// ]; + +// Create the JWT +// $jwt = generateJWT('sha256', $header, $payload, $secret); +//var_dump($jwt); // string(149) "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.6pteLozCETeYDL9Dgm-k4INQ1oEsUf0nFy8Tn2OIxgo" + + +// if (strlen($jwtToken)!==0) { + +// } + + +function verifyJWT(string $algo, string $jwt, string $secret): bool +{ + list($headerEncoded, $payloadEncoded, $signatureEncoded) = explode('.', $jwt); + + $dataEncoded = "$headerEncoded.$payloadEncoded"; + + $signature = base64UrlDecode($signatureEncoded); + + $rawSignature = hash_hmac($algo, $dataEncoded, $secret, true); + + return hash_equals($rawSignature, $signature); +} diff --git a/modules/BOFHeatPhase/BOFHeatPhase.php b/modules/BOFHeatPhase/BOFHeatPhase.php new file mode 100644 index 0000000..6f330db --- /dev/null +++ b/modules/BOFHeatPhase/BOFHeatPhase.php @@ -0,0 +1,21 @@ += '".$params['dateStart']."') + AND (HEAT_END < '".$params['dateEnd']."') + ORDER BY [SHOW_AGGREGATE_ID], [HEAT_START]"; + select($query); + + + + // $query = " + // SET NOCOUNT ON + // DECLARE + // @BD DATETIME = '06.03.2024', + // @ED DATETIME = '08.03.2024' + // SELECT + // PBHR.HEAT_START + // ,HB.[HM_Ladle] as [КЧ] + // ,HB.[TorpNO] as [МП350 №] + // ,HB.[DC_Tap_NO] as [Номер выпуска ДЦ] + // ,HB.[HEAT_NUMBER] as [Номер плавки ККЦ] + // ,HB.[RL_Tare] as [Тара, т] + // ,HB.[RL_Gross] as [Брутто, т] + // ,HB.[RL_Net] as [Нетто, т] + // ,round([RL_Net]-([RL_Net]*0.6/100),0) as [Вес со снятием, т] + // ,0.6 as [Снятие, %] + // ,HB.[AFTDS_CRANEWT_Tare] as [Тара, т ] + // ,HB.[AFTDS_CRANEWT_Gross] as [Брутто, т ] + // ,HB.[AFTDS_CRANEWT_Net] as [Нетто, т ] + // ,HB.[DS_LOSS_wt] as [Снятие на десульфурации, т] + // FROM [PasportBOF].[dbo].[PASPORT_BOFHEATREPORT] PBHR + // INNER JOIN [Level3_KKC].[dbo].[HM_BALANCE] HB + // ON PBHR.HEAT_NUMBER=HB.HEAT_NUMBER + // WHERE (ISNULL(DELETED,0)=0) AND + // (HEAT_START >= '".$params['dateStart']."') + // AND (HEAT_START < '".$params['dateEnd']."') + // ORDER BY [SHOW_AGGREGATE_ID], [HEAT_START]"; + // select($query); + + + // $query = " + // SELECT + // [HM_Ladle] as [КЧ] + // ,[TorpNO] as [МП350 №] + // ,[DC_Tap_NO] as [Номер выпуска ДЦ] + // ,[HEAT_NUMBER] as [Номер плавки ККЦ] + // ,[RL_Tare] as [Тара, т] + // ,[RL_Gross] as [Брутто, т] + // ,[RL_Net] as [Нетто, т] + // ,round([RL_Net]-([RL_Net]*0.6/100),0) as [Вес со снятием, т] + // ,0.6 as [Снятие, %] + // ,[AFTDS_CRANEWT_Tare] as [Тара, т ] + // ,[AFTDS_CRANEWT_Gross] as [Брутто, т ] + // ,[AFTDS_CRANEWT_Net] as [Нетто, т ] + // ,[DS_LOSS_wt] as [Снятие на десульфурации, т] + // FROM [Level3_KKC].[dbo].[HM_BALANCE] + // Where [RL_WT_TIME]>='".$params['dateStart']."' and [RL_WT_TIME] <='".$params['dateEnd']."'"; + // select($query); + + } + public function getData_HMCarReport_SUM($params) + { + $query = " + SELECT + sum([RL_Tare]) [RL_Tare] + ,sum([RL_Gross])[RL_Gross] + ,sum([RL_Net]) [RL_Net] + ,sum(round([RL_Net]-([RL_Net]*0.6/100),0)) [RL_Net1] + ,sum([AFTDS_CRANEWT_Tare])[AFTDS_CRANEWT_Tare] + ,sum([AFTDS_CRANEWT_Gross]) [AFTDS_CRANEWT_Gross] + ,sum([AFTDS_CRANEWT_Net])[AFTDS_CRANEWT_Net] + ,sum([DS_LOSS_wt]) [DS_LOSS_wt] + FROM [Level3_KKC].[dbo].[HM_BALANCE] + Where [RL_WT_TIME]>='".$params['dateStart']."' and [RL_WT_TIME] <='".$params['dateEnd']."'"; + select($query); + } + public function getData_HMCarReport_AVG($params) + { + $query = " + SELECT + avg([RL_Tare]) [RL_Tare] + ,avg([RL_Gross])[RL_Gross] + ,avg([RL_Net]) [RL_Net] + ,avg(round([RL_Net]-([RL_Net]*0.6/100),0)) [RL_Net1] + ,avg([AFTDS_CRANEWT_Tare])[AFTDS_CRANEWT_Tare] + ,avg([AFTDS_CRANEWT_Gross]) [AFTDS_CRANEWT_Gross] + ,avg([AFTDS_CRANEWT_Net])[AFTDS_CRANEWT_Net] + ,avg([DS_LOSS_wt]) [DS_LOSS_wt] + FROM [Level3_KKC].[dbo].[HM_BALANCE] + Where [RL_WT_TIME]>='".$params['dateStart']."' and [RL_WT_TIME] <='".$params['dateEnd']."'"; + select($query); + } +} diff --git a/modules/HM_DC/HM_DC.php b/modules/HM_DC/HM_DC.php new file mode 100644 index 0000000..e17db19 --- /dev/null +++ b/modules/HM_DC/HM_DC.php @@ -0,0 +1,15 @@ +RB1%OLvg8mF!C60k@{Tp^6C2}_Y3&-HM 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 literal 0 HcmV?d00001 diff --git a/modules/KKC/app.php b/modules/KKC/app.php new file mode 100644 index 0000000..fe1c9b5 --- /dev/null +++ b/modules/KKC/app.php @@ -0,0 +1,50 @@ + 1"; + select($query); + } + + public function appHeadersById($params) + { + if ($params['isAdmin']) { + $query = "SELECT * + FROM [SITE].[dbo].[kkc_headers] + ORDER BY id"; + } else { + $query = "SELECT * FROM [SITE].[dbo].[get_headers_by_user_id] ('".$params['id_user']."')"; + } + select($query); + } + + public function appAllSubheaders($params) + { + $query = "SELECT * + FROM [SITE].[dbo].[kkc_headers] + WHERE isHeader is not null + and idSubHeader is null + "; + select($query); + } + + public function appVisits($params) + { + $query = "SELECT count([isVisit]) countVisits + FROM [SITE].[dbo].[kkc_stat] + where [isVisit]=1"; + select($query); + } +} diff --git a/modules/KKC/dashboard.php b/modules/KKC/dashboard.php new file mode 100644 index 0000000..66130e2 --- /dev/null +++ b/modules/KKC/dashboard.php @@ -0,0 +1,300 @@ +='".$params['dateStart']."' and date <='".$params['dateEnd']." 23:59:59' + order by date desc"; + select($query); + } + public function dashboardStatCounts($params) + { + $query = "SELECT + count(id) as visit_counts + FROM [SITE].[dbo].[kkc_stat] + where [isVisit]=1 + and DATEDIFF(day, date, GETDATE()) = 0 + union all + SELECT + count(id) as visit_counts + FROM [SITE].[dbo].[kkc_stat] + where [isVisit]=1 + and DATEDIFF(day, date, GETDATE()) = 1 + union all + SELECT + count(id) as visit_counts + FROM [SITE].[dbo].[kkc_stat] + where [isVisit]=1 + and DATEDIFF(day, date, GETDATE()) <= 7 + union all + SELECT + count(id) as visit_counts + FROM [SITE].[dbo].[kkc_stat] + where [isVisit]=1 + and DATEDIFF(month, date, GETDATE()) = 0 + union all + SELECT + count(id) as visit_counts + FROM [SITE].[dbo].[kkc_stat] + where [isVisit]=1 + and DATEDIFF(month, date, GETDATE()) = 1 + union all + SELECT + count(id) as visit_counts + FROM [SITE].[dbo].[kkc_stat] + where [isVisit]=1"; + select($query); + } + ////////////////////////////ITEMS///////////////////////////////////////// + public function dashboardItemsAllHeaders($params) + { + $query = "SELECT * + FROM [SITE].[dbo].[kkc_headers] + ORDER BY id"; + select($query); + } + public function dashboardItemsAdd($params) + { + $convName = iconv('UTF-8', 'windows-1251', $params['data']['name']); + global $conn; + $query = "SET NOCOUNT ON + DECLARE @insert_id int + INSERT INTO [SITE].[dbo].[kkc_headers] + VALUES(".$params['data']['idSubHeader'].", + ".$params['data']['parent'].", + '$convName', + '".$params['data']['path']."', + '".$params['data']['pathFrame']."', + ".$params['data']['isFrame'].", + ".$params['data']['isHeader'].") + SELECT SCOPE_IDENTITY() as insert_id; + SET @insert_id=(SELECT SCOPE_IDENTITY())"; + $result = sqlsrv_query($conn, $query); + sqlsrv_fetch($result); + + if ($params['data']['isFrame']===1) { + $id_insert = sqlsrv_get_field($result, 0); + $query = "UPDATE [SITE].[dbo].[kkc_headers] + SET path='".$params['data']['path']."'+'$id_insert' + WHERE id=$id_insert"; + $result = sqlsrv_query($conn, $query); + sqlsrv_fetch($result); + } + } + public function dashboardItemsEdit($params) + { + $convName = iconv('UTF-8', 'windows-1251', $params['data']['name']); + $query = "UPDATE [SITE].[dbo].[kkc_headers] + SET name='$convName', + path='".$params['data']['path']."', + pathFrame='".$params['data']['pathFrame']."' + WHERE id=".$params['data']['id'].""; + update($query); + } + public function dashboardItemsDelete($params) + { + $query = "DELETE [SITE].[dbo].[kkc_groups_roles] + WHERE id_header in + (select id from [SITE].[dbo].[kkc_headers] + where idSubHeader=".$params['data']['id'].") + + DELETE [SITE].[dbo].[kkc_groups_roles] + WHERE id_header=".$params['data']['id']." + + DELETE [SITE].[dbo].[kkc_headers] + WHERE id=".$params['data']['id']." + OR idSubHeader=".$params['data']['id']." + "; + delete($query); + } + ////////////////////////////USERS///////////////////////////////////////// + public function dashboardUsers($params) + { + $query = "SELECT [id] + ,[ip] + ,[user_desc] + ,[isAdmin] + ,[isBan] + FROM [SITE].[dbo].[kkc_users]"; + select($query); + } + + public function dashboardUsersWithoutAdmin($params) + { + $query = "SELECT [id] + ,[ip] + ,[user_desc] + ,[isAdmin] + ,[isBan] + FROM [SITE].[dbo].[kkc_users] + WHERE isAdmin=0 and isBan=0"; + select($query); + } + + public function dashboardGroups($params) + { + $query = "SELECT + g.id, + g.name, + users.id as user_id, + users.user_desc as user_name, + users.ip as user_ip, + users.isAdmin as isAdmin + FROM [SITE].[dbo].[kkc_groups] g + inner join [SITE].[dbo].[kkc_users_groups] ug on + g.id=ug.group_id + inner join [SITE].[dbo].[kkc_users] users on + ug.user_id=users.id"; + select($query); + } + + public function dashboardUsersAdmin($params) + { + $query = "UPDATE [SITE].[dbo].[kkc_users] + SET isAdmin='".$params['data']['value']."' + WHERE id=".$params['data']['id'].""; + update($query); + } + public function dashboardUsersBan($params) + { + $query = "UPDATE [SITE].[dbo].[kkc_users] + SET isBan='".$params['data']['value']."' + WHERE id=".$params['data']['id'].""; + update($query); + } + + + public function dashboardUsersAdd($params) + { + $name = iconv('UTF-8', 'windows-1251', $params['data']['user_desc']); + $query = "INSERT INTO [SITE].[dbo].[kkc_users] + VALUES('".$params['data']['ip']."', + '$name', + 0,0)"; + insert($query); + } + + public function dashboardUsersEdit($params) + { + $name = iconv('UTF-8', 'windows-1251', $params['data']['user_desc']); + $query = "UPDATE [SITE].[dbo].[kkc_users] + SET [user_desc]='$name', + ip='".$params['data']['ip']."' + WHERE id=".$params['data']['id'].""; + update($query); + } + + public function dashboardUsersDelete($params) + { + $query = "DELETE [SITE].[dbo].[kkc_users] + WHERE id=".$params['data']['id']." + + DELETE [SITE].[dbo].[kkc_users_groups] + WHERE [user_id]=".$params['data']['id'].""; + delete($query); + } + + + ////////////////////////////////GROUPS////////////////////////////////////////////////// + public function dashboardGroupsAll($params) + { + $query = "SELECT g.id, + g.name, + count(ug.id) as group_count + FROM [SITE].[dbo].[kkc_groups] g + left join [SITE].[dbo].[kkc_users_groups] ug on + g.id=ug.group_id + left join [SITE].[dbo].[kkc_users] users on + ug.user_id=users.id + group by g.id, g.name"; + select($query); + } + + public function dashboardUsersGroupsAdd($params) + { + $name = iconv('UTF-8', 'windows-1251', $params['data']['name']); + $query = "INSERT INTO [SITE].[dbo].[kkc_groups] + VALUES('$name')"; + insert($query); + } + + public function dashboardUsersGroupsEdit($params) + { + $name = iconv('UTF-8', 'windows-1251', $params['data']['name']); + $query = "UPDATE [SITE].[dbo].[kkc_groups] + SET [name]='$name' + WHERE id=".$params['data']['id'].""; + update($query); + } + + public function dashboardUsersGroupsDelete($params) + { + $query = "DELETE [SITE].[dbo].[kkc_groups] + WHERE id=".$params['data']['id']." + + DELETE [SITE].[dbo].[kkc_users_groups] + WHERE [group_id]=".$params['data']['id']." + + DELETE [SITE].[dbo].[kkc_groups_roles] + WHERE [id_group]=".$params['data']['id']." + "; + delete($query); + } + + ////////////////////////////////ROLES////////////////////////////////////////////////// + public function dashboardRoles($params) + { + $query = "SELECT [id] + ,[id_group] + ,[id_header] + FROM [SITE].[dbo].[kkc_groups_roles]"; + select($query); + } + + public function dashboardGroupsCheckUser($params) + { + $query = "INSERT INTO [SITE].[dbo].[kkc_users_groups] + VALUES(".$params['data']['userID'].", + ".$params['data']['groupID'].")"; + insert($query); + } + + public function dashboardGroupsUnCheckUser($params) + { + $query = "DELETE [SITE].[dbo].[kkc_users_groups] + WHERE [user_id] =".$params['data']['userID']." + AND [group_id]=".$params['data']['groupID'].""; + delete($query); + } + + public function dashboardRolesDel($params) + { + $query = "DELETE [SITE].[dbo].[kkc_groups_roles] + WHERE [id_group] =".$params['data']['groupId'].""; + delete($query); + } + + public function dashboardRolesAdd($params) + { + foreach ($params['data']['values'] as $key => $value) { + $query = "INSERT INTO [SITE].[dbo].[kkc_groups_roles] + VALUES(".$params['data']['groupId'].", + ".$value['id'].")"; + insert($query); + } + } +} diff --git a/modules/KKC/mega_report.php b/modules/KKC/mega_report.php new file mode 100644 index 0000000..898912b --- /dev/null +++ b/modules/KKC/mega_report.php @@ -0,0 +1,256 @@ +='".$params['dateStart']."' and DT <='".$params['dateEnd']."' + --and BOF_AGGREGATE_ID = 1 + order by HEAT_NUMBER,CCM_ccm,CCM_TREATMENTNO,LF_TREATMENTNO"; + select($query); + } + public function getSteelData($params) + { + $query = "SELECT distinct + hm.[HEAT_NUMBER] + ,[Name] [Установка] + ,convert(varchar, cast(ANALYSISDATE as datetime),108) as 'Время' + ,[Sample_number] [№] + ,[value_1] Fe + ,[value_2] P + ,[value_3] S + ,[value_4] Al + ,[value_5] Cu + ,[value_6] Cr + ,[value_7] N + ,[value_8] V + ,[value_9] Nb + ,[value_10] Ti + ,[value_11] Sn + ,[value_12] C + ,[value_13] Mo + ,[value_14] Si + ,[value_15] W + ,[value_16] Ni + ,[value_17] Mn + ,[value_18] Pb + ,[value_19] Sb + ,[value_20] B + ,[value_21] Zr + ,[value_22] Co + ,[value_23] [As] + ,[value_24] Zn + ,[value_25] Ca + from( + (select distinct HEAT_NUMBER + FROM Level3_KKC.dbo.BOF_CCM_TOTAL_REPORT + Where DT>='".$params['dateStart']."' and DT <='".$params['dateEnd']."')) tr + left join [ANA_Operator].[dbo].[ANA_ALL_TRU] hm + on tr.HEAT_NUMBER=hm.Heat_number + where Sample_number<>0 + and (Name IN ('LF', 'CCM1', 'CCM2', 'VD', 'BOF1', 'BOF2','AS1','AS2', 'DS', 'RL', 'ВАК')) + order by hm.HEAT_NUMBER, hm.Sample_number, Name"; + select($query); + } + public function getHmData($params) + { + $query = "SELECT distinct + hm.[HEAT_NUMBER] + ,[Name] [Установка] + ,convert(varchar, cast(ANALYSISDATE as datetime),108) as 'Время' + ,[Sample_number] [№] + ,[value_1] C + ,[value_2] Si + ,[value_3] Mn + ,[value_4] P + ,[value_5] S + ,[value_6] Cr + ,[value_7] Mo + ,[value_8] Ni + ,[value_9] V + ,[value_10] Al + ,[value_11] Cu + ,[value_12] Ti + ,[value_13] Nb + ,[value_14] W + ,[value_15] [As] + ,[value_16] Sn + ,[value_17] Co + ,[value_18] Pb + ,[value_19] B + ,[value_20] Sb + ,[value_21] Bi + ,[value_22] Zn + ,[value_23] Ce + ,[value_24] Fe + from( + (select distinct HEAT_NUMBER + FROM Level3_KKC.dbo.BOF_CCM_TOTAL_REPORT + Where DT>='".$params['dateStart']."' and DT <='".$params['dateEnd']."')) tr + left join [ANA_Operator].[dbo].[ANA_CHUGUN_ALL_TRU] hm + on tr.HEAT_NUMBER=hm.Heat_number + where Sample_number<>0 + and (Name IN ('LF', 'CCM1', 'CCM2', 'VD', 'BOF1', 'BOF2', 'DS', 'RL', 'ВАК')) + order by hm.HEAT_NUMBER, hm.Sample_number, Name"; + select($query); + } + public function getSlgData($params) + { + $query = "SELECT distinct + hm.[HEAT_NUMBER] + ,[Name] [Установка] + ,convert(varchar, cast(ANALYSISDATE as datetime),108) as 'Время' + ,[Sample_number] [№] + ,[value_1] Al2O3 + ,[value_2] CaO + ,[value_3] MgO + ,[value_4] MnO + ,[value_5] P + ,[value_6] S + ,[value_7] SiO2 + ,[value_8] Fe + ,[value_9] FeOp + ,[value_10] Fe2O3p + ,[value_11] P2O5p + ,[value_12] [Основнось] + from( + (select distinct HEAT_NUMBER + FROM Level3_KKC.dbo.BOF_CCM_TOTAL_REPORT + Where DT>='".$params['dateStart']."' and DT <='".$params['dateEnd']."')) tr + left join + (select * from (select heatno as HEAT_NUMBER + , sampleno as Sample_number + ,ANALYSISDATE, 'LF' as Name + ,[VALUEELEM1] as value_1 + ,[VALUEELEM2] as value_2 + ,[VALUEELEM4] as value_3 + ,[VALUEELEM5] as value_4 + ,'' as value_5 + ,[VALUEELEM7] as value_6 + ,[VALUEELEM8] as value_7 + ,'' as value_8 + ,[VALUEELEM3] as value_9 + ,'' as value_10 + ,[VALUEELEM6] as value_11 + ,'' as value_12 + from [Level3_KKC].[dbo].[QLC_PRO_SLAGANALYSISHEADER_VD_L3] where [PLANTNO] IN (3,4) + union all + SELECT Heat_number as HEAT_NUMBER + , Sample_number as Sample_number + ,ANALYSISDATE as 'ДАТА', name + , value_1 + , value_2 + , value_3 + , value_4 + , value_5 + , value_6 + , value_7 + , value_8 + , value_9 + , value_10 + , value_11 + , value_12 + FROM [ANA_Operator].[dbo].[ANA_SLG_ALL_TRU])a) hm + on tr.HEAT_NUMBER=hm.Heat_number + where Sample_number<>0 + order by hm.HEAT_NUMBER, hm.Sample_number, Name"; + select($query); + } +} diff --git a/modules/LadleUse/LadleUse.php b/modules/LadleUse/LadleUse.php new file mode 100644 index 0000000..022e5ac --- /dev/null +++ b/modules/LadleUse/LadleUse.php @@ -0,0 +1,14 @@ + $l) { + foreach($l as $i => $v) { + $files[$i][$k] = $v; + } + } + } + + foreach ($files as $file) { + $error = $success = ''; + + // Проверим на ошибки загрузки. + if (!empty($file['error']) || empty($file['tmp_name'])) { + switch (@$file['error']) { + case 1: + case 2: $error = 'Превышен размер загружаемого файла.'; break; + case 3: $error = 'Файл был получен только частично.'; break; + case 4: $error = 'Файл не был загружен.'; break; + case 6: $error = 'Файл не загружен - отсутствует временная директория.'; break; + case 7: $error = 'Не удалось записать файл на диск.'; break; + case 8: $error = 'PHP-расширение остановило загрузку файла.'; break; + case 9: $error = 'Файл не был загружен - директория не существует.'; break; + case 10: $error = 'Превышен максимально допустимый размер файла.'; break; + case 11: $error = 'Данный тип файла запрещен.'; break; + case 12: $error = 'Ошибка при копировании файла.'; break; + default: $error = 'Файл не был загружен - неизвестная ошибка.'; break; + } + } elseif ($file['tmp_name'] == 'none' || !is_uploaded_file($file['tmp_name'])) { + $error = 'Не удалось загрузить файл.'; + } else { + // Оставляем в имени файла только буквы, цифры и некоторые символы. + $pattern = "[^a-zа-яё0-9,~!@#%^-_\$\?\(\)\{\}\[\]\.]"; + $name = mb_eregi_replace($pattern, '-', $file['name']); + $name = mb_ereg_replace('[-]+', '-', $name); + + // Т.к. есть проблема с кириллицей в названиях файлов (файлы становятся недоступны). + // Сделаем их транслит: + // $converter = array( + // 'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', + // 'ё' => 'e', 'ж' => 'zh', 'з' => 'z', 'и' => 'i', 'й' => 'y', 'к' => 'k', + // 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r', + // 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c', + // 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sch', 'ь' => '', 'ы' => 'y', 'ъ' => '', + // 'э' => 'e', 'ю' => 'yu', 'я' => 'ya', + + // 'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D', 'Е' => 'E', + // 'Ё' => 'E', 'Ж' => 'Zh', 'З' => 'Z', 'И' => 'I', 'Й' => 'Y', 'К' => 'K', + // 'Л' => 'L', 'М' => 'M', 'Н' => 'N', 'О' => 'O', 'П' => 'P', 'Р' => 'R', + // 'С' => 'S', 'Т' => 'T', 'У' => 'U', 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'C', + // 'Ч' => 'Ch', 'Ш' => 'Sh', 'Щ' => 'Sch', 'Ь' => '', 'Ы' => 'Y', 'Ъ' => '', + // 'Э' => 'E', 'Ю' => 'Yu', 'Я' => 'Ya', + // ); + + // $name = strtr($name, $converter); + $parts = pathinfo($name); + + if (empty($name) || empty($parts['extension'])) { + $error = 'Недопустимое тип файла'; + + } elseif (!empty($allow) && !in_array(strtolower($parts['extension']), $allow)) { + $error = 'Недопустимый тип файла'; + + } elseif (!empty($deny) && in_array(strtolower($parts['extension']), $deny)) { + $error = 'Недопустимый тип файла'; + + } else { + //Чтобы не затереть файл с таким же названием, добавим префикс. + // $i = 0; + // $prefix = ''; + // while (is_file($path . $parts['filename'] . $prefix . '.' . $parts['extension'])) { + // $prefix = '(' . ++$i . ')'; + // } + // $name = $parts['filename'] . $prefix . '.' . $parts['extension']; + + date_default_timezone_set('Europe/Moscow'); + $i = 0; + $prefix = '_(' . date("d-m-Y") . ')'; + while (is_file($path . $parts['filename'] . $prefix . '.' . $parts['extension'])) { + $prefix = '_(' . date("d-m-Y") . ')(' . ++$i . ')'; + } + $name = $parts['filename'] . $prefix . '.' . $parts['extension']; + + // Перемещаем файл в директорию. + if (move_uploaded_file($file['tmp_name'], $path . $name)) { + // Далее можно сохранить название файла в БД и т.п. + + $success = 'Файл «' . $name . '» успешно загружен.'; + } else { + $error = 'Не удалось загрузить файл.'; + var_dump(http_response_code(300)); + } + } + } + + // Выводим сообщение о результате загрузки. + if (!empty($success)) { + $post_data = array( + 'success'=>$success, + 'uploadIP'=>$_SERVER['REMOTE_ADDR'], + 'fileName'=>$name, + 'filePATH'=> $path . $name + ); + echo json_encode(array('item' => $post_data), JSON_FORCE_OBJECT); + } else { + var_dump(http_response_code(300)); + } + } +} + +?> \ No newline at end of file diff --git a/modules/PRB_FileControl/PRB_FileControl.php b/modules/PRB_FileControl/PRB_FileControl.php new file mode 100644 index 0000000..db2e279 --- /dev/null +++ b/modules/PRB_FileControl/PRB_FileControl.php @@ -0,0 +1,81 @@ +=ts.datetime + where CAST([CLOSE_TIME] as DATE) between'".$params['dateStart']."' and '".$params['dateEnd']."' + order by [OPEN_TIME] desc, [CLOSE_TIME] desc"; + select($query); + } + public function getDataValues($params) + { + + $query = "SELECT distinct + [HEAT_NAME] + ,[button_all] + ,[opc_T_sample_value] + ,[count] + ,convert(varchar, [datetime], 104) +' '+convert(varchar, [datetime], 108) as [datetime] + FROM [Level3_KKC].[dbo].[HEAT_CCM1_L3] ccm + inner join [Pasport_CCM].[dbo].[OPC_T_Tundish_sample_VALUES] ts + on [OPEN_TIME]<=ts.datetime and CLOSE_TIME>=ts.datetime + where CAST([CLOSE_TIME] as DATE) between'".$params['dateStart']."' and '".$params['dateEnd']."' + order by [datetime] desc"; + select($query); + } +} diff --git a/modules/weatherAvg/weatherAvg.php b/modules/weatherAvg/weatherAvg.php new file mode 100644 index 0000000..1ca831c --- /dev/null +++ b/modules/weatherAvg/weatherAvg.php @@ -0,0 +1,17 @@ + $query, + )); +} +function select($query) +{ + global $sql; + array_push($sql, array( + 'select' => $query, + )); +} +function select_ru($query) +{ + global $sql; + array_push($sql, array( + 'select_ru' => $query, + )); +} +function update($query) +{ + global $sql; + array_push($sql, array( + 'update' => $query, + )); +} +function delete($query) +{ + global $sql; + array_push($sql, array( + 'delete' => $query, + )); +} +function querySelect_ru($sql_query) +{ + global $conn; + global $response; + global $multiSelect; + $result = sqlsrv_query($conn, $sql_query); + $items = array(); + while ($row = sqlsrv_fetch_object($result)) { + foreach ($row as $key=> &$value) { + if (is_string($value)) { + $value = iconv('windows-1251', 'UTF-8', $value); + } + if (is_numeric($value)) { + $value = round($value, 4); + } + $key = iconv('windows-1251', 'UTF-8', $key); + $a[$key]=$value; + } + unset($value); + unset($key); + array_push($items, $a); + } + if (true == $multiSelect) { + array_push($response, $items); + } else { + echo json_encode($items); + } + + if (false === $result) { + if (null != ($errors = sqlsrv_errors())) { + header('Content-Type:text/html; charset=UTF-8', true, 301); + } + } +} + +function querySelect($sql_query) +{ + global $conn; + global $response; + global $multiSelect; + $result = sqlsrv_query($conn, $sql_query); + $items = array(); + while ($row = sqlsrv_fetch_object($result)) { + foreach ($row as &$value) { + if (is_string($value)) { + $value = iconv('windows-1251', 'UTF-8', $value); + } + if (is_numeric($value)) { + $value = round($value, 4); + } + } + unset($value); + $items[] = $row; + } + if (true == $multiSelect) { + array_push($response, $items); + } else { + echo json_encode($items); + } + + if (false === $result) { + if (null != ($errors = sqlsrv_errors())) { + header('Content-Type:text/html; charset=UTF-8', true, 301); + } + } +} +function queryOther($sql_query) +{ + global $conn; + $result = sqlsrv_query($conn, $sql_query); + $rows_affected = sqlsrv_rows_affected($result); + //if (false === $rows_affected) { + if ($rows_affected >= 1) { + header('Content-Type:text/html; charset=UTF-8', true, 200); + } else { + header('Content-Type:text/html; charset=UTF-8', true, 301); + } + //} +} + +// include("libs/hs256.php"); +// include("libs/JWT.php"); +// use \Firebase\JWT\JWT; + +// try { +// $JWTdecoded = JWT::decode($jwtToken, $secret, array('HS256')); +// } catch (\Throwable $th) { + +// } + +include_once 'connection.php'; +include_once 'core.php'; + +$multiSelect = false; +if (isset($params['multiSelect'])) { + $multiSelect = $params['multiSelect']; + if (true == $multiSelect) { + $response = array(); + } +} + +try { + // $query="SELECT id FROM [dbo].[users] where id=$JWTdecoded->id AND is_logged=1"; + // $params = array(); + // $options = array( "Scrollable" => SQLSRV_CURSOR_KEYSET ); + // $stmt = sqlsrv_query($conn, $query, $params, $options); + // $row_count = sqlsrv_num_rows($stmt); + + // if ($row_count === false || $row_count ===0) { + // header('HTTP/1.0 401 Unauthorized'); + // exit; + // } else { + // $verify = verifyJWT('sha256', $jwtToken, $secret); + // if ($verify) { + foreach ($sql as $key => $value) { + $sql_key = array_keys(array_filter($value))[0]; + $sql_query = array_values(array_filter($value))[0]; + if ('select' === $sql_key) { + querySelect($sql_query); + } elseif ('select_ru' === $sql_key) { + querySelect_ru($sql_query); + } else { + //if ($JWTdecoded->role===1) { + queryOther($sql_query); + // } + } + } + // } else { + // header('HTTP/1.0 401 Unauthorized'); + // } + //} +} catch (Throwable $t) { + header($t); +} + +if (true == $multiSelect) { + echo json_encode($response); +} diff --git a/server__.php b/server__.php new file mode 100644 index 0000000..05535a2 --- /dev/null +++ b/server__.php @@ -0,0 +1,169 @@ + $query, + )); +}; +function select($query) +{ + global $sql; + array_push($sql, array( + 'select' => $query, + )); +}; +function update($query) +{ + global $sql; + array_push($sql, array( + 'update' => $query, + )); +}; +function delete($query) +{ + global $sql; + array_push($sql, array( + 'delete' => $query, + )); +}; + +function querySelect($sql_query) +{ + global $conn; + global $response; + global $multiSelect; + $result = sqlsrv_query($conn, $sql_query); + $items=array(); + while ($row = sqlsrv_fetch_object($result)) { + foreach ($row as &$value) { + //if (gettype($value)=="string") { //Бодавский, не удалять!!! + if (is_string($value)) { //added samofalov + $value = iconv('windows-1251', 'UTF-8', $value); + } + if (is_numeric($value)) { //added samofalov + $value =round($value, 3); + } + } + unset($value); + $items[] = $row; + } + if ($multiSelect==true) { + array_push($response, $items); + } else { + echo json_encode($items); + // $test=json_encode($items); + } + + if ($result === false) { + if (($errors = sqlsrv_errors()) != null) { + header('Content-Type:text/html; charset=UTF-8', true, 301); + } + } +}; + +function queryOther($sql_query) +{ + global $conn; + $result = sqlsrv_query($conn, $sql_query); + $rows_affected = sqlsrv_rows_affected($result); + if ($rows_affected === false) { + if ($rows_affected >= 1) { + header('Content-Type:text/html; charset=UTF-8', true, 200); + } else { + header('Content-Type:text/html; charset=UTF-8', true, 301); + } + } +} + + + + + + + +include("libs/hs256.php"); +include("libs/JWT.php"); +use \Firebase\JWT\JWT; + +try { + $JWTdecoded = JWT::decode($jwtToken, $secret, array('HS256')); +} catch (\Throwable $th) { + +} + + +include("connection.php"); + +include("api.php"); + + +$multiSelect=false; +if (isset($params['multiSelect'])) { + $multiSelect=$params['multiSelect']; + if ($multiSelect==true) { + $response=array(); + } +} + + +try { + $query="SELECT id FROM [dbo].[users] where id=$JWTdecoded->id AND is_logged=1"; + $params = array(); + $options = array( "Scrollable" => SQLSRV_CURSOR_KEYSET ); + $stmt = sqlsrv_query($conn, $query, $params, $options); + $row_count = sqlsrv_num_rows($stmt); + + if ($row_count === false || $row_count ===0) { + header('HTTP/1.0 401 Unauthorized'); + exit; + } else { + $verify = verifyJWT('sha256', $jwtToken, $secret); + if ($verify) { + foreach ($sql as $key => $value) { + $sql_key=array_keys(array_filter($value))[0]; + $sql_query=array_values(array_filter($value))[0]; + if ($sql_key==='select') { + querySelect($sql_query); + } else { + if ($JWTdecoded->role===1) { + queryOther($sql_query); + } + } + } + } else { + header('HTTP/1.0 401 Unauthorized'); + } + } +} catch (Throwable $t) { + header($t); +} + +if ($multiSelect==true) { + echo json_encode($response); +}