From d0aacab6a86a66c8a5fce9b2417d1c8c4fa6ff12 Mon Sep 17 00:00:00 2001 From: Repellent Date: Wed, 3 Dec 2025 20:09:37 +0500 Subject: [PATCH] =?UTF-8?q?+++++=20fix=20=D0=BA=D1=83=D0=BA=D0=B8=20=D1=81?= =?UTF-8?q?=D0=B5=D1=81=D1=81=D0=B8=D0=B8=20=D0=B4=D0=BE=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BF=D1=80=D0=B5=D0=B4=D0=BC=D0=B5=D1=82=20?= =?UTF-8?q?=D0=BE=D0=B4=D0=B8=D0=BD=D0=BE=D1=87=D0=BD=D1=8B=D1=85=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D0=B5=D0=B9=20=D0=B2=20=D1=80=D1=83=D0=B1=D1=80?= =?UTF-8?q?=D0=B8=D0=BA=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- class/class.docs.php | 44 ++++++++++++++++++++---------- functions/func.login.php | 59 ++++++++++++++++++++-------------------- 2 files changed, 59 insertions(+), 44 deletions(-) diff --git a/class/class.docs.php b/class/class.docs.php index c614b30..4249172 100644 --- a/class/class.docs.php +++ b/class/class.docs.php @@ -1065,7 +1065,7 @@ // Начинаем с предположения, что ревизия не нужна $dorev = false; - // ИСПРАВЛЕНИЕ: Если $last_rev не массив (т.е. ревизия первая), форсируем запись. + // Если $last_rev не массив (т.е. ревизия первая), форсируем запись. if (!is_array($last_rev)) { $dorev = true; } @@ -2128,7 +2128,7 @@ $document->rubric_title = $AVE_Rubric->rubricNameByIdGet($rubric_id)->rubric_title; //Устарело в PHP - 8.4 //$document->rubric_url_prefix = strftime(str_ireplace("%id", $maxId+1, $AVE_Rubric->rubricNameByIdGet($rubric_id)->rubric_alias)); - // ИСПРАВЛЕНИЕ: Замена устаревшей strftime() на безопасные date() и str_ireplace() + // Замена устаревшей strftime() на безопасные date() и str_ireplace() $alias_template = $AVE_Rubric->rubricNameByIdGet($rubric_id)->rubric_alias; $alias_template = str_ireplace( array('%Y', '%y', '%m', '%d'), // Шаблоны strftime @@ -2182,11 +2182,11 @@ { global $AVE_DB, $AVE_Rubric, $AVE_Template; - // --- ИНИЦИАЛИЗАЦИЯ ДЛЯ НОВЫХ ДОКУМЕНТОВ (Id=0) --- - - // определение $rubric_id из входящего запроса. + // --- ИНИЦИАЛИЗАЦИЯ ДЛЯ НОВЫХ ДОКУМЕНТОВ (Id=0) --- + + // определение $rubric_id из входящего запроса. - $rubric_id = isset($_REQUEST['rubric_id']) ? (int)$_REQUEST['rubric_id'] : 0; + $rubric_id = isset($_REQUEST['rubric_id']) ? (int)$_REQUEST['rubric_id'] : 0; // 2. Выполняем запрос к БД на получение данных о документе $document = $AVE_DB->Query(" @@ -2223,8 +2223,8 @@ $document->group_position = 0; $document->group_title = ""; } - // ------------------------------------------------------------- - + // ------------------------------------------------------------- + // Определяем действие, выбранное пользователем switch ($_REQUEST['sub']) { @@ -2282,7 +2282,7 @@ // Если пользователь не выполнял никаких действий, а просто открыл документ для редактирования case '': - + $lang_pack = array(); $sql = $AVE_DB->Query(" @@ -2415,7 +2415,8 @@ foreach ($fields as $field_id => $row) { // если в документе поле есть, то записываем его - if ($doc_fields[$field_id]) + // Проверяем существование ключа. + if (isset($doc_fields[$field_id])) { $fields[$field_id] = $doc_fields[$field_id]; } @@ -2427,6 +2428,11 @@ $fields[$field_id] = $row; + // Инициализируем свойства группы для полей, отсутствующих в документе, чтобы избежать Undefined property в следующем цикле. + $fields[$field_id]->group_id = ($row->rubric_field_group) ? $row->rubric_field_group : 0; + $fields[$field_id]->group_position = 100; + $fields[$field_id]->group_title = ''; + $AVE_DB->Query(" INSERT INTO " . PREFIX . "_document_fields SET @@ -2436,14 +2442,22 @@ } } + // Переменная $row в этом цикле не определена, ее нужно заменить на $field. + // Также добавлена проверка isset() для свойств группы на случай, если предыдущая инициализация не сработала. foreach ($fields as $field) { $group_id = ($field->rubric_field_group) ? $field->rubric_field_group : 0; - $fields_list[$group_id]['group_id'] = $field->group_id; - $fields_list[$group_id]['group_position'] = ($field->group_position) ? $field->group_position : 100; - $fields_list[$group_id]['group_title'] = $field->group_title; + + // Проверяем существование свойства перед использованием, чтобы избежать Undefined property. + $fields_list[$group_id]['group_id'] = isset($field->group_id) ? $field->group_id : $group_id; + $fields_list[$group_id]['group_position'] = (isset($field->group_position) && $field->group_position) ? $field->group_position : 100; + $fields_list[$group_id]['group_title'] = isset($field->group_title) ? $field->group_title : ''; + $fields_list[$group_id]['fields'][$field->Id]['Id'] = $field->Id; - $fields_list[$group_id]['fields'][$field->Id]['rubric_id'] = $row->rubric_id; + + // Заменяем $row->rubric_id на $document->rubric_id, поскольку $row в этом месте уже содержит последнее поле, а не документ. + $fields_list[$group_id]['fields'][$field->Id]['rubric_id'] = $document->rubric_id; + $fields_list[$group_id]['fields'][$field->Id]['rubric_field_title'] = $field->rubric_field_title; $fields_list[$group_id]['fields'][$field->Id]['rubric_field_alias'] = $field->rubric_field_alias; $fields_list[$group_id]['fields'][$field->Id]['rubric_field_description'] = $field->rubric_field_description; @@ -2812,7 +2826,7 @@ $document->rubric_title = $AVE_Rubric->rubricNameByIdGet($_REQUEST['rubric_id'])->rubric_title; //Устарело в PHP - 8.4 //$document->rubric_url_prefix = strftime(str_ireplace("%id", $maxId+1, $AVE_Rubric->rubricNameByIdGet($_REQUEST['rubric_id'])->rubric_alias)); - // ИСПРАВЛЕНИЕ: Замена устаревшей strftime() на безопасные date() и str_ireplace() + // Замена устаревшей strftime() на безопасные date() и str_ireplace() $alias_template = $AVE_Rubric->rubricNameByIdGet($_REQUEST['rubric_id'])->rubric_alias; $alias_template = str_ireplace( array('%Y', '%y', '%m', '%d'), // Шаблоны strftime diff --git a/functions/func.login.php b/functions/func.login.php index 914bc5e..48b0def 100644 --- a/functions/func.login.php +++ b/functions/func.login.php @@ -87,23 +87,23 @@ " . PREFIX . "_users SET last_visit = '" . $time . "', - password = '" . $hash . "', - salt = '" . $salt . "', - user_ip = '" . (int)$u_ip . "' + password = '" . $hash . "', + salt = '" . $salt . "', + user_ip = '" . (int)$u_ip . "' WHERE Id = '" . $row->Id . "' "); - $_SESSION['user_id'] = $row->Id; - $_SESSION['user_name'] = get_username($row->user_name, $row->firstname, $row->lastname); - $_SESSION['user_firstname'] = $row->firstname; - $_SESSION['user_lastname'] = $row->lastname; - $_SESSION['user_pass'] = $hash; - $_SESSION['user_group'] = $row->user_group; - $_SESSION['user_email'] = $row->email; - $_SESSION['user_country'] = strtoupper($row->country); - $_SESSION['user_language'] = strtolower($row->country); - $_SESSION['user_ip'] = addslashes($_SERVER['REMOTE_ADDR']); + $_SESSION['user_id'] = $row->Id; + $_SESSION['user_name'] = get_username($row->user_name, $row->firstname, $row->lastname); + $_SESSION['user_firstname'] = $row->firstname; + $_SESSION['user_lastname'] = $row->lastname; + $_SESSION['user_pass'] = $hash; + $_SESSION['user_group'] = $row->user_group; + $_SESSION['user_email'] = $row->email; + $_SESSION['user_country'] = strtoupper($row->country); + $_SESSION['user_language'] = strtolower($row->country); + $_SESSION['user_ip'] = addslashes($_SERVER['REMOTE_ADDR']); $user_group_permissions = explode('|', preg_replace('/\s+/', '', $row->user_group_permission)); @@ -200,9 +200,9 @@ $_SESSION['user_ip'] = addslashes($_SERVER['REMOTE_ADDR']); } - define('UID', $_SESSION['user_id']); + define('UID', $_SESSION['user_id']); define('UGROUP', $_SESSION['user_group']); - define('UNAME', $_SESSION['user_name']); + define('UNAME', $_SESSION['user_name']); return true; } @@ -250,6 +250,7 @@ usr.password, usr.status, usrs.ip AS ip, + usrs.Id AS session_id, grp.user_group_permission FROM " . PREFIX . "_users AS usr @@ -293,30 +294,30 @@ " . PREFIX . "_users_session SET last_activ = '" . time() . "', - ip = '" . (int)ip2long($_SERVER['REMOTE_ADDR']) . "' + ip = '" . (int)ip2long($_SERVER['REMOTE_ADDR']) . "' WHERE - Id = '" . $row->Id . "' + Id = '" . $row->session_id . "' "); - $_SESSION['user_id'] = (int)$user_id; - $_SESSION['user_name'] = get_username($row->user_name, $row->firstname, $row->lastname); - $_SESSION['user_firstname'] = $row->firstname; - $_SESSION['user_lastname'] = $row->lastname; - $_SESSION['user_pass'] = $row->password; - $_SESSION['user_group'] = (int)$row->user_group; - $_SESSION['user_email'] = $row->email; - $_SESSION['user_country'] = strtoupper($row->country); - $_SESSION['user_language'] = strtolower($row->country); - $_SESSION['user_ip'] = addslashes($_SERVER['REMOTE_ADDR']); + $_SESSION['user_id'] = (int)$user_id; + $_SESSION['user_name'] = get_username($row->user_name, $row->firstname, $row->lastname); + $_SESSION['user_firstname'] = $row->firstname; + $_SESSION['user_lastname'] = $row->lastname; + $_SESSION['user_pass'] = $row->password; + $_SESSION['user_group'] = (int)$row->user_group; + $_SESSION['user_email'] = $row->email; + $_SESSION['user_country'] = strtoupper($row->country); + $_SESSION['user_language'] = strtolower($row->country); + $_SESSION['user_ip'] = addslashes($_SERVER['REMOTE_ADDR']); $user_group_permissions = explode('|', preg_replace('/\s+/', '', $row->user_group_permission)); foreach ($user_group_permissions as $user_group_permission) $_SESSION[$user_group_permission] = 1; - define('UID', $_SESSION['user_id']); + define('UID', $_SESSION['user_id']); define('UGROUP', $_SESSION['user_group']); - define('UNAME', $_SESSION['user_name']); + define('UNAME', $_SESSION['user_name']); return true; }