Применение языков программирования PHP, JS для разработки программного продукта «аис «ассистент»» для ГАПОУ СО «нижнетагильского торгово-экономического колледжа»

 

При разработке информационной системы АИС «Ассистент» был определен начальный уровень библиотек:

1. Серверная часть:

1.1. PHPMailer – PHP-библиотека, предназначенная для рассылки электронных писем через протокол SMTP;

1.2. FPDF – библиотека, которая генерирует из PHP-кода PDF-документацию;

1.3. Petrovich – лингвистическая библиотека, которая склоняет фамилию, имя, отчество по разным падежам;

1.4. PHPQRCode – библиотека, которая генерирует QR-код и выдает их как изображениями на сервер, так и в RAW-представлении;

2. Клиентская часть:

2.1. Bootstrap – фреймворк, служащий для отрисовки пользовательского интерфейса в браузере;

2.2. jQuery – JS-библиотека, которая используется фреймворком Bootstrap, а также для создания AJAX-функционала в системе;

2.3. Download.js – библиотека, используемая для того, чтобы реализовать возможность скачивать документы из страницы, не переходя на новую или перезагружая страницу;

2.4. JQuery.mask.js – JS-библиотека, необходимая для создания масок для ввода в пользовательских полях ввода

2.5. Fontawesome – библиотека иконок для создания интуитивного интерфейса;

2.6. Emojicss – библиотека, служащая для вывода эмоджи в информационной системе.

Также были написаны следующие библиотеки для работоспособности системы:

 

1. files – библиотека, необходимая для работоспособности файловой системы информационной системы;

2. template-engine – библиотека, которая необходима для отрисовки пользовательского интерфейса, а также для того, чтобы обособить гипертекстовую разметку от PHP-кода;

3. users – библиотека, служащая для авторизации, регистрации, удаления и прочих действий над пользователями.

Дополнительный исходный код в этой работе представлен не будет из-за ограничения заказчика.

Библиотека Files имеет следующие функции:

- __construct() – конструктор, который запускается при инициализации объекта. В функции определяется системный путь до хранилища файлов, загружается список уровней доступа к системе, MIME-типы файлов;

- setPath() – функция, которая определяет путь для записи файлов в новое хранилище;

- upload() – функция, которая отвечает за загрузку новых файлов в систему;

- delete() – функция, которая отвечает за удаление файлов из системы;

- update() – функция, которая отвечает за обновление файла в системе;

- get() – функция, которая отвечает за предоставление данные о файле. Если файл приватный, то проверяет уровень пользователя и если уровень некорректный, доступ отклоняется;

- download() – функция, которая дает пользователю скачать файл (получение RAW-представление файла);

- createFolder() – функция, которая создает папку во внутреннем хранилище.

Библиотека Template-engine имеет следующие функции:

- __construct() – конструктор, который устанавливает путь до хранилища шаблонов;

- set() – функция, которая устанавливает данные для доступа в шаблонах;

- delete() – функция, которая удаляет установленные данные для доступа в шаблонах;

- __get() – функция-указатель на наименование переменной, к которой можно обратиться из шаблона;

- display() – функция на отображение шаблона пользователю.

Библиотека Users имеет следующие функции:

- __construct() – конструктор, который запускает подключение к базе данных, устанавливает ключи шифрования, и, если был передан токен, проверяет актуальность токена;

- c() – функция закрытия подключения к базе данных;

- auth() – функция авторизации пользователя;

- exit() – функция выхода пользователя из системы;

- edit() – функция изменения пользовательских данных в системе (функционал доступен для администраторов);

- check_level() – функция проверки уровня доступа к системе;

- getDecrypted() – функция, которая служит для получения расшифрованных пользовательских данных;

- register() – функция, которая нужна для регистрации пользователей (функционал доступен для администраторов);

- delete() – удаление пользователей из системы (функционал доступен для администраторов);

- get_all_users() – получить список всех пользователей (функционал доступен для администраторов);

- check_login() – проверка логина на его уникальность (функционал доступен для администраторов).


ЗАКЛЮЧЕНИЕ

 

При разработке информационной системы АИС «Ассистент» были созданы схемы данных в базе данных, разработан программный продукт, который используется заказчиком – ГАПОУ СО «Нижнетагильским торгово-экономическим колледжем».

Поставленная цель работы – разработка модульного программного продукта (начального скелета) для автоматизации процессов ГАПОУ СО «Нижнетагильского торгово-экономического колледжа» – была успешно решена.

Поставленные задачи для достижения цели:

1. анализ источников с целью изучения особенностей разработки пользовательского интерфейса;

2. использование программных продуктов для проектирования АИС «Ассистент» для ГАПОУ СО «Нижнетагильского торгово-экономического колледжа»;

3. разработка программного продукта АИС «Ассистент» для ГАПОУ СО «Нижнетагильского торгово-экономического колледжа», который позволяет разворачивать дополнительные модули, которые автоматизируют процессы с заданными условиями к модулям.

Были успешно освоены и решены.


СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ

 

1. 8 Характеристик удачного пользовательского интерфейса // Хабрахабр URL: https://habr.com/ru/post/58023/ (дата обращения: 16.06.2020).

2. SDI- и MDI-приложения в Qt // qt-doc.ru URL: http://qt-doc.ru/sdi-i-mdi-prilozhenia.html (дата обращения: 16.06.2020).

3. ГОСТ Р ИСО/МЭК 15910-2002. Информационная технология. Процесс создания документации пользователя программного средства // Техэксперт URL: http://docs.cntd.ru/document/gost-r-iso-mek-15910-2002 (дата обращения: 18.06.2020).

4. Интерфейс // Ingate URL: https://promo.ingate.ru/seo-wikipedia/interface/ (дата обращения: 16.06.2020).

5. Критерии качества интерфейса пользователя // StudFiles URL: https://studfile.net/preview/952367/ (дата обращения: 16.06.2020).

6. Обзор графических библиотек C++ // Tproger URL: https://tproger.ru/digest/cpp-best-gui/ (дата обращения: 16.06.2020).

7. Основные элементы пользовательского интерфейса // srd18 URL: https://sites.google.com/site/srd18docs/graficeskij-interfejs/osnovnye-elementy-polzovatelskogo-interfejsa (дата обращения: 16.06.2020).

 


 


ПРИЛОЖЕНИЕ

 

Рис. 6 – главная страница системы

 

Рис. 7 – страница авторизации пользователей


Рис. 8 – страница, принявшая вид для авторизованного пользователя

 

Рис. 9 – страница личного кабинета пользователя

 

Рис. 10 – изменение логина пользователя

 

Рис. 11 – изменение пароля пользователя

 

Рис. 12 – «Администраторская панель». Управление пользователями

 

Рис. 13 – модальное окно регистрации новых пользователей

Рис. 14 – «Администраторская панель». Конфигурация системы

 

Листинг 1

<?php

class files {

   private $absolute = "";

   private $trueAbsolute = "";

   private $mimes = [];

   private $levels = [];

 

   public function __construct(string $path = "") {

       if (!empty($path))

           $this -> absolute = json_decode(file_get_contents(__DIR__. "/../configurations/json/about.json")) -> absolutePath. $path;

       else

           $this -> absolute = json_decode(file_get_contents(__DIR__. "/../configurations/json/about.json")) -> absolutePath;

       $this -> mimes = json_decode(file_get_contents(__DIR__. "/../configurations/json/mimes.json"));

       $this -> levels = json_decode(file_get_contents(__DIR__. "/../configurations/json/levels.json"));

       $this -> trueAbsolute = json_decode(file_get_contents(__DIR__. "/../configurations/json/about.json")) -> absolutePath;

       $thumb = [];

       foreach ($this -> levels as $value)

           $thumb[] = $value -> level;

       $this -> levels = $thumb;

   }

 

   public function setPath(string $path = "") {

       if (!empty($path)) {

           $this -> absolute = $this -> trueAbsolute. $path;

           return true;

       } else

           return false;

   }

 

   public function upload(array $_file = [], string $_name = "", bool $_isCommon = true, array $_shared = []) {

       if (!empty($_file)) {

           if (!empty($_name)) {

               $mime = [

                   "ok" => false,

                   "extension" => NULL,

               ];

               foreach ($this -> mimes as $value)

                   if ($value -> mime == $_file["type"])

                       $mime = [

                           "ok" => true,

                           "extension" => $value -> extension,

                       ];

               if ($mime["ok"]) {

                   if ($_file["size"] > 2000 && $_file["size"] < 15000000) {

                       if ($_isCommon) {

                           $thumbname = md5(strval(time()). $_name. strval(microtime())). $mime["extension"];

                           if (move_uploaded_file($_file["tmp_name"], $this -> absolute. "/{$thumbname}")) {

                               require __DIR__. "/../configurations/database/class.php";

                               $_name = strval($database -> real_escape_string($_name));

                               $database -> query("INSERT INTO `main_files` (`name`, `mime`, `path`, `isCommon`) VALUES ('{$_name}', '{$_file["type"]}', '{$this -> absolute}/{$thumbname}', 1);");

                               if (empty($database -> error))

                                   return $database -> insert_id;

                               else {

                                   unlink($this -> absolute. "/{$thumbname}");

                                   return $database -> error;

                               }

                               $database -> close();

                           } else

                               return "FILE_DOES_NOT_UPLOAD";

                       } else {

                           $levels_ok = true;

                           foreach ($_shared as $value)

                               if (!in_array($value, $this -> levels))

                                   $levels_ok = false;

                           if ($levels_ok) {

                               $thumbname = md5(strval(time()). $_name. strval(microtime())). $mime["extension"];

                               if (move_uploaded_file($_file["tmp_name"], $this -> absolute. "/{$thumbname}")) {

                                   require __DIR__. "/../configurations/database/class.php";

                                   $_name = strval($database -> real_escape_string($_name));

                                   $_isCommon = 1;

                                   $_shared = $database -> real_escape_string(json_encode($_shared));

                                   $database -> query("INSERT INTO `main_files` (`name`, `mime`, `path`, `isCommon`, `shared`) VALUES ('{$_name}', '{$_file["type"]}', '{$this -> absolute}/{$thumbname}', 0, '{$_shared}');");

                                   if (empty($database -> error))

                                       return $database -> insert_id;

                                   else {

                                       unlink($this -> absolute. "/{$thumbname}");

                                       return $database -> error;

                                   }

                                   $database -> close();

                               } else

                                   return "FILE_DOES_NOT_UPLOAD";

                           } else

                               return "LEVELS_DOES_NOT_CORRECT";

                       }

                   } else

                       return "WRONG_FILE_SIZE";

               } else

                   return "NOT_GRANTED_MIME_TYPE";

           } else

               return "EMPTY_FILE_NAME";

       } else

           return "EMPTY_FILE_DATA";

   }

 

   public function delete(int $_id) {

       if (!empty($_id)) {

           require __DIR__. "/../configurations/database/class.php";

           $file = $database -> query("SELECT `path` FROM `main_files` WHERE `id` = {$_id};");

           if ($file -> num_rows!= 0) {

               $file = $file -> fetch_assoc()["path"];

               $database -> query("DELETE FROM `main_files` WHERE `id` = {$_id};");

               unlink($file);

               return "OK";

           } else

               return "FILE_IS_NOT_FOUND";

           $database -> close();

       } else

             return "ID_IS_EMPTY";

   }

 

   public function update(int $_id = 0, $_file = [], string $_name = "", $_isCommon = NULL, array $_shared = []) {

       if (!empty($_id)) {

           require __DIR__. "/../configurations/database/class.php";

           $file = $database -> query("SELECT `path` FROM `main_files` WHERE `id` = {$_id};");

           if ($file -> num_rows!= 0) {

               $file = $file -> fetch_assoc()["path"];

               $returned = [];

               if (!empty($_file)) {

                   $mime = [

                       "ok" => false,

                       "extension" => NULL,

                   ];

                   foreach ($this -> mimes as $value)

                       if ($value -> mime == $_file["type"])

                           $mime = [

                               "ok" => true,

                               "extension" => $value -> extension,

                           ];

                   if ($mime["ok"]) {

                       if ($_file["size"] > 2000 && $_file["size"] < 15000000) {

                           $thumbname = md5(strval(time()). $_name. strval(microtime())). $mime["extension"];

                           if (move_uploaded_file($_file["tmp_name"], $this -> absolute. "/{$thumbname}")) {

                               $database -> query("UPDATE `main_files` SET `path` = '{$this -> absolute}/{$thumbname}', `mime` = '{$_file["type"]}' WHERE `id` = {$_id};");

                               if (!empty($database -> error))

                                   $returned[] = $database -> error;

                               unlink($file);

                           } else

                               $returned[] = "FILE_DOES_NOT_UPLOAD";

                       } else

                           $returned[] = "WRONG_FILE_SIZE";

                   } else

                       $returned[] = "NOT_GRANTED_MIME_TYPE";

               }

               if (!empty($_name)) {

                   $_name = $database -> real_escape_string(strval($_name));

                   $database -> query("UPDATE `main_files` SET `name` = '$_name' WHERE `id` = {$_id};");

                   if (!empty($database -> error))

                       $returned[] = "NAME_IS_NOT_EDITED";

               }

               if (!empty($_isCommon)) {

                   if ($_isCommon) {

                       $database -> query("UPDATE `main_flies` SET `isCommon` = 1, `shared` = NULL WHERE `id` = {$_id};");

                       if (!empty($database -> error))

                           $returned[] = "COMMON_ATTRIBUTE_IS_NOT_SET";

                   } else {

                       if (!empty($_shared)) {

                           $levels_ok = true;

                           foreach ($_shared as $value)

                               if (!in_array($value, $this -> levels))

                                   $levels_ok = false;

                           if ($levels_ok) {

                               $_shared = json_encode($_shared);

                               $database -> query("UPDATE `main_files` SET `isCommon` = 0, `levels` = '{$_shared}' WHERE `id` = {$_id};");

                           } else

                               $returned[] = "LEVELS_DOES_NOT_CORRECT";

                       } else

                           $returned[] = "LEVELS_ARE_EMPTY";

                   }

               }

               if (!empty($returned))

                   return [

                       "status" => "ERRORS",

                       "errors" => $returned,

                   ];

               else

                   return "OK";

           } else

               return "FILE_IS_NOT_FOUND";

           $database -> close();

       } else

           return "ID_IS_EMPTY";

   }

 

   public function get(int $_id = 0, int $_level = -1) {

       if (!empty($_id)) {

           require __DIR__. "/../configurations/database/class.php";

           $f = $database -> query("SELECT * FROM `main_files` WHERE `id` = {$_id};");

           if ($f -> num_rows!= 0) {

               $f = $f -> fetch_assoc();

               if (!boolval($f["isCommon"])) {

                   if (in_array($_level, json_decode($f["shared"])))

                       return [

                           "id" => $f["id"],

                           "name" => $f["name"],

                           "mime" => $f["mime"],

                           "path" => $f["path"],

                       ];

                   else

                       return "ACCESS_DENIED";

               } else

                   return [

                       "id" => $f["id"],

                       "name" => $f["name"],

                       "mime" => $f["mime"],

                       "path" => $f["path"],

                   ];

           } else

               return "FILE_IS_NOT_FOUND";

           $database -> close();

       } else

           return "ID_IS_EMPTY";

   }

   public function download(int $_id = 0, int $_level = -1) {

       $f = $this -> get($_id, $_level);

       if (is_array($f)) {

           if (ob_get_level())

               ob_end_clean();

           header("Content-Description: File Transfer");

           header("Content-Type: {$f["mime"]}");

           header("Content-Disposition: inline; filename=". basename($f["path"]));

           header("Content-Transfer-Encoding: binary");

           header("Expires: 0");

           header("Cache-Control: must-revalidate");

           header("Pragma: public");

           header("Content-Length: ". filesize($f["path"]));

           if ($fd = fopen($f["path"], 'rb')) {

               while (!feof($fd))

                   echo fread($fd, 1024);

               fclose($fd);

           }

       } else

           switch ($f) {

               case "ACCESS_DENIED":

                   http_response_code(403);

              break;

               case "FILE_IS_NOT_FOUND":

                   http_response_code(404);

               break;

               case "ID_IS_EMPTY":

                   http_response_code(500);

               break;

           }

   }

   public function createFolder(string $_path = "") {

       if (!empty($_path)) {

           if (!file_exists($this -> absolute. $_path))

               return mkdir($this -> absolute. $_path, 0777, true);

       } else

           return false;

   }

}

?>

 

Листинг 2

<?php

class template {

   public $dirTemplates;

   public $data = array();

 

   public function __construct(string $dirTemplates) {

       $this -> dirTemplates = $dirTemplates;

   }

 

   public function set(string $name, $values) {

       $this -> data[$name] = $values;

   }

 

   public function delete(string $name) {

       unset($this -> $data[$name]);

   }

 

   public function __get(string $name) {

       if (isset($this -> data[$name]))

           return $this -> data[$name];

       else

           return null;

   }

 

   public function display(string $template) {

       $template = $this -> dirTemplates. $template. ".tpl";

       ob_start();

       include($template);

       echo ob_get_clean();

   }

}

?>

 

Листинг 3

<?php

class user {

   private $_db;

   public $_authId;

   private $_encrypt;

   private $_cipher_key;

   public $_isFound = true;

   public function __construct(string $_token = "") {

       require __DIR__. "/../configurations/database/class.php";

       require __DIR__. "/../configurations/main.php";

       require __DIR__. "/../configurations/cipher-keys.php";

       $this -> _encrypt = new cryptService($ciphers["database"]);

       $this -> _cipher_key = $ciphers["database"];

       $this -> _db = $database;

       if (!empty($_token)) {

           $_tkn = $this -> _encrypt -> decrypt($_token);

           $user = $this -> _db -> query("SELECT `id` FROM `main_user_auth` WHERE `token` = '$_tkn';");

           if ($user -> num_rows!= 0)

               $this -> _authId = $user -> fetch_assoc()["id"];

           else

               $this -> _isFound =!$this -> _isFound;

       }

   }

   public function c() {

       $this -> _db -> close();

   }

   public function auth(string $login, string $password) {

       if (!empty($login) &&!empty($password)) {

           $login = hash("SHA256", $login);

           $user = $this -> _db -> query("SELECT `id`, `password`, `token` FROM `main_user_auth` WHERE `login` = '$login';");

           if ($user -> num_rows == 1) {

               $user = $user -> fetch_assoc();

               if (password_verify($password, $user["password"])) {

                   $this -> _authId = $user["id"];

                   if (!empty($user["token"]))

                       return $this -> _encrypt -> encrypt($user["token"]);

                   else {

                       $thumb_token = bin2hex(random_bytes(256));

                       while ($this -> _db -> query("SELECT `id` FROM `main_user_auth` WHERE `token` = '$thumb_token';") -> num_rows!= 0)

                            $thumb_token = bin2hex(random_bytes(256));

                       $this -> _db -> query("UPDATE `main_user_auth` SET `token` = '$thumb_token' WHERE `id` = {$this -> _authId};");

                       return $this -> _encrypt -> encrypt($thumb_token);

                   }

               } else

                   return "PASSWORD_DO_NOT_MATCH";

           } else

               return "USER_NOT_FOUND";

       } else

           return "EMPTY_LOGIN_OR_PASSWORD";

   }

   public function exit() {

       if (!empty($this -> _authId)) {

           $this -> _db -> query("UPDATE `main_user_auth` SET `token` = NULL WHERE `id` = {$this -> _authId};");

           $this -> _authId = NULL;

           return true;

       } else

           return false;

   }

   public function edit(array $data, int $userId = 0) {

       if (!empty($this -> _authId)) {

           if ($userId == 0)

               $userId = $this -> _authId;

           $userId = intval($userId);

           $user = $this -> _db -> query("SELECT `main_users`.`id`, `lastname`, `firstname`, `patronymic`, `birthday`, `email`, `telephone`, `login`, `password`, `levels` FROM `main_users` INNER JOIN `main_user_auth` ON `main_user_auth`.`usersId` = `main_users`.`id` WHERE `main_user_auth`.`id` = {$userId};");

           if ($user -> num_rows!= 0) {

               $sql = [

                   "auth" => "",

                   "user" => "",

               ];

               $user = $user -> fetch_assoc();

               if (!empty($data["login"])) {

                   $data["login"] = hash("SHA256", $data["login"]);

                   if ($this -> _db -> query("SELECT `id` FROM `main_user_auth` WHERE `login` = '{$data["login"]}';") -> num_rows!= 0) {

                       return "LOGIN_IS_NOT_UNIQUE";

                       exit;

                     }

                   $sql["auth"].= "`login` = '{$data["login"]}', ";

               }

               if (!empty($data["password"])) {

                   if (strlen($data["password"]) < 8) {

                       return "PASSWORD_IS_TINY";

                       exit;

                   }

                   $data["password"] = password_hash($data["password"], PASSWORD_DEFAULT);

                   $sql["auth"].= "`password` = '{$data["password"]}', ";

               }

               if (!empty($data["levels"]) && $this -> _authId!= 1) {

                   if (!is_array($data["levels"])) {

                       return "LEVELS_MUST_BE_ARRAY";

                       exit;

                   }

                   $data["levels"] = $this -> _encrypt -> encrypt(json_encode($data["levels"]));

                   $sql["auth"].= "`levels` = '{$data["levels"]}', ";

               }

               if (!empty($data["lastname"])) {

                   $data["lastname"] = $this -> _encrypt -> encrypt($data["lastname"]);

                   $sql["user"].= "`lastname` = '{$data["lastname"]}', ";

               }

                if (!empty($data["firstname"])) {

                   $data["firstname"] = $this -> _encrypt -> encrypt($data["firstname"]);

                   $sql["user"].= "`firstname` = '{$data["firstname"]}', ";

               }

               if (!empty($data["patronymic"])) {

                   $data["patronymic"] = $this -> _encrypt -> encrypt($data["patronymic"]);

                   $sql["user"].= "`patronymic` = '{$data["patronymic"]}', ";

               }

               if (!empty($data["birthday"])) {

                   $data["birthday"] = $this -> _encrypt -> encrypt($data["birthday"]);

                   $sql["user"].= "`birthday` = '{$data["birthday"]}', ";

               }

               if (!empty($data["email"])) {

                   $data["email"] = $this -> _encrypt -> encrypt($data["email"]);

                   $sql["user"].= "`email` = '{$data["email"]}', ";

               }

               if (!empty($data["telephone"])) {

                   $data["telephone"] = $this -> _encrypt -> encrypt($data["telephone"]);

                   $sql["user"].= "`telephone` = '{$data["telephone"]}', ";

               }

                 if (!empty($sql["auth"])) {

                   $sql["auth"] = substr($sql["auth"], 0, -2);

                   $this -> _db -> query("UPDATE `main_user_auth` SET {$sql["auth"]} WHERE `id` = {$userId};");

               }

                if (!empty($sql["user"])) {

                   $sql["user"] = substr($sql["user"], 0, -2);

                   $this -> _db -> query("UPDATE `main_users` SET {$sql["user"]} WHERE `id` = {$user["id"]};");

               }

               return "OK";

           } else

               return "USER_IS_NOT_FOUND";

       } else

           return false;

   }

   public function check_level(int $level) {

       if (!empty($this -> _authId)) {

            $levels = json_decode($this -> _encrypt -> decrypt($this -> _db -> query("SELECT `levels` FROM `main_user_auth` WHERE `id` = {$this -> _authId};") -> fetch_assoc()["levels"]));

           return in_array($level, $levels);

       } else

           return false;

   }

   public function getDecrypted() {

       if (!empty($this -> _authId)) {

           $user = $this -> _db -> query("SELECT `firstname`, `lastname`, `patronymic`, `birthday`, `email`, `telephone`, `levels` FROM `main_users` INNER JOIN `main_user_auth` ON `main_users`.`id` = `main_user_auth`.`usersId` WHERE `main_user_auth`.`id` = {$this -> _authId};");

           $user = $user -> fetch_assoc();

           $thumb = [

               "firstname" => $this -> _encrypt -> decrypt($user["firstname"]),

               "lastname" => $this -> _encrypt -> decrypt($user["lastname"]),

               "patronymic" => $this -> _encrypt -> decrypt($user["patronymic"]),

               "birthday" => $this -> _encrypt -> decrypt($user["birthday"]),

               "email" => $this -> _encrypt -> decrypt($user["email"]),

               "telephone" => $this -> _encrypt -> decrypt($user["telephone"]),

               "levels" => json_decode($this -> _encrypt -> decrypt($user["levels"])),

           ];

           return $thumb;

       } else

           return false;

   }

   public function register(array $data) {

       if (!empty($this -> _authId)) {

           if ($this -> check_level(0)) {

               if (!empty($data["login"]) &&!empty($data["password"]) &&!empty($data["levels"]) &&!empty($data["firstname"]) &&!empty($data["lastname"]) &&!empty($data["birthday"]) &&!empty($data["email"]) &&!empty($data["telephone"])) {

                   if (strlen($data["password"]) > 8) {

                       $login = hash("SHA256", $data["login"]);

                       if ($this -> _db -> query("SELECT `id` FROM `main_user_auth` WHERE `login` = '$login';") -> num_rows == 0) {

                           $valid = [];

                           foreach (json_decode(file_get_contents(__DIR__. "/../configurations/json/levels.json")) as $value)

                               $valid[] = $value -> level;

                           $levels = [];

                           foreach ($data["levels"] as $value) {

                               if (in_array($value, $valid))

                                   $levels[] = intval($value);

                               else {

                                   return "LEVEL_OUT_OF_RANGE";

                                   exit;

                               }

                           }

                           $thumb = [

                               "login" => $login,

                               "password" => password_hash($data["password"], PASSWORD_DEFAULT),

                               "levels" => $this -> _encrypt -> encrypt(json_encode($levels)),

                               "firstname" => $this -> _encrypt -> encrypt($data["firstname"]),

                               "lastname" => $this -> _encrypt -> encrypt($data["lastname"]),

                               "patronymic" => $this -> _encrypt -> encrypt($data["patronymic"]),

                               "birthday" => $this -> _encrypt -> encrypt($data["birthday"]),

                               "email" => $this -> _encrypt -> encrypt($data["email"]),

                               "telephone" => $this -> _encrypt -> encrypt($data["telephone"]),

                           ];

                           $this -> _db -> query("INSERT INTO `main_users` (`firstname`, `lastname`, `patronymic`, `birthday`, `email`, `telephone`) VALUES ('$thumb[firstname]', '$thumb[lastname]', '$thumb[patronymic]', '$thumb[birthday]', '$thumb[email]', '$thumb[telephone]');");

                           $t_id = $this -> _db -> insert_id;

                           $this -> _db -> query("INSERT INTO `main_user_auth` (`login`, `password`, `levels`, `usersId`) VALUES ('$thumb[login]', '$thumb[password]', '$thumb[levels]', $t_id);");

                           return true;

                       } else

                           return "LOGIN_IS_NOT_UNIQUE";

                   } else

                       return "TINY_PASSWORD";

               } else

                    return "SOME_DATA_IS_EMPTY";

           } else

               return "ACCESS_DENIED";

       } else

           return false;

   }

   public function delete($id) {

       if (!empty($this -> _authId)) {

           if ($this -> check_level(0)) {

               $parsed = intval($id);

               if ($parsed!= 1)

                   $this -> _db -> multi_query("DELETE FROM `main_user_auth` WHERE `usersId` = $parsed; DELETE FROM `main_users` WHERE `id` = $parsed;");

               return true;

           } else

               return false;

       } else

           return false;

   }

 

   public function get_all_users() {

       if (!empty($this -> _authId)) {

           if ($this -> check_level(0)) {

               $users = $this -> _db -> query("SELECT `main_users`.`id`, `firstname`, `lastname`, `patronymic`, `birthday`, `email`, `telephone`, `levels` FROM `main_users` INNER JOIN `main_user_auth` ON `main_users`.`id` = `main_user_auth`.`usersId`;");

               $return = [];

               while ($row = $users -> fetch_assoc()) {

                   $return[] = [

                       "id" => $row["id"],

                       "firstname" => $this -> _encrypt -> decrypt($row["firstname"]),

                       "lastname" => $this -> _encrypt -> decrypt($row["lastname"]),

                       "patronymic" => $this -> _encrypt -> decrypt($row["patronymic"]),

                       "birthday" => $this -> _encrypt -> decrypt($row["birthday"]),

                       "email" => $this -> _encrypt -> decrypt($row["email"]),

                       "telephone" => $this -> _encrypt -> decrypt($row["telephone"]),

                       "levels" => json_decode($this -> _encrypt -> decrypt($row["levels"])),

                   ];

               }

               return $return;

           } else

               return false;

       } else

           return false;

   }

 

   public function check_login(string $_login) {

       if (!empty($this -> _authId)) {

           if ($this -> check_level(0)) {

               $login = hash("SHA256", $data["login"]);

               if ($this -> _db -> query("SELECT `id` FROM `main_user_auth` WHERE `login` = '$login';") -> num_rows == 0)

                   return true;

               else

                   return false;

           } else

               return false;

       } else

           return false;

   }

}

?>



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: