From 3c46200790b0e0871331b8ecce7a845c60d38c88 Mon Sep 17 00:00:00 2001 From: Repellent Date: Thu, 27 Nov 2025 01:18:25 +0500 Subject: [PATCH] =?UTF-8?q?big=20fix=20fields=20for=20=D0=97=D0=A0=D0=97-8?= =?UTF-8?q?.4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin/templates/rubs/tmpls_form.tpl | 14 ++-- fields/doc_from_rub_all/field.php | 8 +- fields/doc_from_rub_check/field.php | 8 +- fields/image_mega/tpl/field.tpl | 2 +- fields/multi_select/field.php | 21 ++++-- fields/multi_select/tpl/field.tpl | 2 +- fields/rubrics/field.php | 28 +++---- fields/single_line_numeric_three/field.php | 38 +++++++--- .../tpl/field-doc.tpl | 2 +- fields/single_line_numeric_two/field.php | 36 ++++++--- .../single_line_numeric_two/tpl/field-doc.tpl | 2 +- fields/tags/field.php | 73 ++++++++++++------- fields/text_to_image/class.txtimage.php | 4 +- fields/youtube/tpl/field-doc.tpl | 8 +- .../functions/func.parserequest.php | 11 ++- 15 files changed, 168 insertions(+), 89 deletions(-) diff --git a/admin/templates/rubs/tmpls_form.tpl b/admin/templates/rubs/tmpls_form.tpl index d87728b..de7c2bd 100644 --- a/admin/templates/rubs/tmpls_form.tpl +++ b/admin/templates/rubs/tmpls_form.tpl @@ -5,7 +5,7 @@
{#RUBRIK_TEMPLATE_EDIT#}
{/if}
- {#RUBRIC_TMPLS_BUTTON#} + {#RUBRIK_TMPLS_BUTTON#}   {#RUBRIK_EDIT#}   @@ -25,7 +25,7 @@
  • {#MAIN_PAGE#}
  • {#RUBRIK_SUB_TITLE#}
  • {$rubric->rubric_title|escape}
  • -
  • {#RUBRIC_TMPLS_BUTTON#}
  • +
  • {#RUBRIK_TMPLS_BUTTON#}
  • {if $smarty.request.action != 'tmpls_edit'}
  • {#RUBRIK_TEMPLATE_NEW#}
  • {else} @@ -54,13 +54,13 @@
    -
    {#RUBRIC_TMPLS_NAME_FULL#}
    +
    {#RUBRIK_TMPLS_NAME_FULL#}
    - +
    - +
    @@ -268,7 +268,7 @@ {/if} - {foreach from=$field_group.fields item=field} + {foreach from=$field_group.fields item=field} {$field.Id} @@ -304,7 +304,7 @@
    - + {if $smarty.request.action == 'tmpls_edit'} {#RUBRIK_OR#} diff --git a/fields/doc_from_rub_all/field.php b/fields/doc_from_rub_all/field.php index aa7b1f8..c5f4a72 100644 --- a/fields/doc_from_rub_all/field.php +++ b/fields/doc_from_rub_all/field.php @@ -16,8 +16,8 @@ { global $AVE_DB, $AVE_Template; - $fld_dir = dirname(__FILE__) . '/'; - $tpl_dir = $fld_dir . 'tpl/'; + $fld_dir = dirname(__FILE__) . '/'; + $tpl_dir = $fld_dir . 'tpl/'; $lang_file = $fld_dir . 'lang/' . (defined('ACP') ? $_SESSION['admin_language'] : $_SESSION['user_language']) . '.txt'; @@ -30,7 +30,8 @@ switch ($action) { case 'edit': - if (isset($default)) + + if (!empty($default)) { $sql = $AVE_DB->Query(" SELECT @@ -55,6 +56,7 @@ } else { + // Если $default пуст, выводим ошибку, а не выполняем SQL $AVE_Template->assign('error', $AVE_Template->get_config_vars('error')); } diff --git a/fields/doc_from_rub_check/field.php b/fields/doc_from_rub_check/field.php index fa6dab4..63bcc31 100644 --- a/fields/doc_from_rub_check/field.php +++ b/fields/doc_from_rub_check/field.php @@ -16,8 +16,8 @@ { global $AVE_DB, $AVE_Template; - $fld_dir = dirname(__FILE__) . '/'; - $tpl_dir = $fld_dir . 'tpl/'; + $fld_dir = dirname(__FILE__) . '/'; + $tpl_dir = $fld_dir . 'tpl/'; $fld_name = basename($fld_dir); $lang_file = $fld_dir . 'lang/' . (defined('ACP') ? $_SESSION['admin_language'] : $_SESSION['user_language']) . '.txt'; @@ -31,7 +31,8 @@ switch ($action) { case 'edit': - if (isset($default)) + + if (!empty($default)) { $parent = $AVE_DB->Query(" SELECT @@ -71,6 +72,7 @@ } else { + // Этот блок выполняется, если $default пуст. $AVE_Template->assign('error', $AVE_Template->get_config_vars('error')); } diff --git a/fields/image_mega/tpl/field.tpl b/fields/image_mega/tpl/field.tpl index 243f19e..8a88513 100644 --- a/fields/image_mega/tpl/field.tpl +++ b/fields/image_mega/tpl/field.tpl @@ -25,7 +25,7 @@ {assign var=mega_new value="load" scope="global"} {/if} -
    +
    {if $show_upload} diff --git a/fields/multi_select/field.php b/fields/multi_select/field.php index 4b093fa..162dd27 100644 --- a/fields/multi_select/field.php +++ b/fields/multi_select/field.php @@ -16,8 +16,8 @@ { global $AVE_Template; - $fld_dir = dirname(__FILE__) . '/'; - $tpl_dir = $fld_dir . 'tpl/'; + $fld_dir = dirname(__FILE__) . '/'; + $tpl_dir = $fld_dir . 'tpl/'; $fld_name = basename($fld_dir); $lang_file = $fld_dir . 'lang/' . (defined('ACP') ? $_SESSION['admin_language'] : $_SESSION['user_language']) . '.txt'; @@ -37,7 +37,12 @@ $items = array_diff($items, array('')); - @$field_value = unserialize($field_value); + // ✅ ИСПРАВЛЕНИЕ 1: Безопасная десериализация + if (!empty($field_value)) { + $field_value = @unserialize($field_value); + } else { + $field_value = array(); + } $AVE_Template->assign('items', $items); $AVE_Template->assign('field_id', $field_id); @@ -48,8 +53,9 @@ break; case 'doc': - $items = (isset($field_value)) - ? unserialize($field_value) + // ✅ ИСПРАВЛЕНИЕ 2: Безопасная десериализация (устранение unserialize error) + $items = (!empty($field_value)) + ? @unserialize($field_value) : array(); if ($items != false) @@ -101,7 +107,7 @@ break; case 'req': - $items = (isset($field_value)) ? unserialize($field_value) : array(); + $items = (!empty($field_value)) ? @unserialize($field_value) : array(); if ($items != false) { @@ -149,10 +155,11 @@ break; case 'api': + // ✅ ИСПРАВЛЕНИЕ 3: Безопасная десериализация if (empty($field_value)) return $field_value; - return unserialize($field_value); + return @unserialize($field_value); break; case 'name': diff --git a/fields/multi_select/tpl/field.tpl b/fields/multi_select/tpl/field.tpl index 027c0da..96bb5c8 100644 --- a/fields/multi_select/tpl/field.tpl +++ b/fields/multi_select/tpl/field.tpl @@ -1,7 +1,7 @@ {if $items} {else} diff --git a/fields/rubrics/field.php b/fields/rubrics/field.php index bc7a030..6d66bbe 100644 --- a/fields/rubrics/field.php +++ b/fields/rubrics/field.php @@ -1,23 +1,23 @@ Query(" SELECT @@ -57,6 +58,7 @@ function get_field_rubrics($field_value, $action, $field_id = 0, $tpl = '', $tpl } else { + // Если $default пуст, выводим ошибку, а не выполняем SQL $AVE_Template->assign('error', $AVE_Template->get_config_vars('error')); } diff --git a/fields/single_line_numeric_three/field.php b/fields/single_line_numeric_three/field.php index ac85871..4dd2828 100644 --- a/fields/single_line_numeric_three/field.php +++ b/fields/single_line_numeric_three/field.php @@ -11,13 +11,13 @@ * @license GPL v.2 */ - // Однострочное числовое + // Однострочное числовое (Три значения) function get_field_single_line_numeric_three ($field_value, $action, $field_id = 0, $tpl = '', $tpl_empty = 0, &$maxlength = null, $document_fields = array(), $rubric_id = 0, $default = null, $_tpl=null) { global $AVE_Template; - $fld_dir = dirname(__FILE__) . '/'; - $tpl_dir = $fld_dir . 'tpl/'; + $fld_dir = dirname(__FILE__) . '/'; // Убрал невидимый пробел + $tpl_dir = $fld_dir . 'tpl/'; $fld_name = basename($fld_dir); $lang_file = $fld_dir . 'lang/' . (defined('ACP') ? $_SESSION['admin_language'] : $_SESSION['user_language']) . '.txt'; @@ -29,12 +29,26 @@ switch ($action) { case 'edit': + + // Инициализируем $field_value как массив с 3-мя пустыми строками по умолчанию. + $safe_values = ['', '', '']; + if (! empty($field_value)) - $field_value = explode('|', $field_value); + { + // Если значение не пусто, разделяем его на элементы + $values = explode('|', $field_value); + + // Гарантируем, что массив содержит минимум 3 элемента, используя безопасный доступ (?? '') + $safe_values = [ + $values[0] ?? '', + $values[1] ?? '', + $values[2] ?? '' + ]; + } $AVE_Template->assign('field_dir', $fld_name); $AVE_Template->assign('field_id', $field_id); - $AVE_Template->assign('field_value', $field_value); + $AVE_Template->assign('field_value', $safe_values); // Присваиваем гарантированный массив $tpl_file = get_field_tpl($tpl_dir, $field_id, 'admin', $_tpl); @@ -113,15 +127,21 @@ break; case 'save': + // Обрабатываем массив из трех значений, очищаем и собираем в строку '|' $save = array(); if (is_array($field_value)) { - foreach ($field_value AS $k => $v) - { - $save[] = preg_replace('/[^\d.]/', '', $v); - } + // Очищаем каждое из трех значений и сохраняем + $value_0 = preg_replace('/[^\d.]/','', $field_value[0] ?? ''); + $value_1 = preg_replace('/[^\d.]/','', $field_value[1] ?? ''); + $value_2 = preg_replace('/[^\d.]/','', $field_value[2] ?? ''); + $save = [$value_0, $value_1, $value_2]; } + elseif (!empty($field_value)) { + // Если не массив, но не пусто, сохраняем как есть (для совместимости) + $save[] = preg_replace('/[^\d.]/','', $field_value); + } return empty($save) ? '' : implode('|', $save); diff --git a/fields/single_line_numeric_three/tpl/field-doc.tpl b/fields/single_line_numeric_three/tpl/field-doc.tpl index e0b3cf7..16b7d92 100644 --- a/fields/single_line_numeric_three/tpl/field-doc.tpl +++ b/fields/single_line_numeric_three/tpl/field-doc.tpl @@ -1 +1 @@ -{$field_value.0} - {$field_value.1} - {$field_value.2} \ No newline at end of file +{$field_value.0|default:''} - {$field_value.1|default:''} - {$field_value.2|default:''} \ No newline at end of file diff --git a/fields/single_line_numeric_two/field.php b/fields/single_line_numeric_two/field.php index 94b3d57..062a6d0 100644 --- a/fields/single_line_numeric_two/field.php +++ b/fields/single_line_numeric_two/field.php @@ -11,13 +11,13 @@ * @license GPL v.2 */ - // Однострочное числовое + // Однострочное числовое (Два значения) function get_field_single_line_numeric_two ($field_value, $action, $field_id = 0, $tpl = '', $tpl_empty = 0, &$maxlength = null, $document_fields = array(), $rubric_id = 0, $default = null, $_tpl=null) { global $AVE_Template; - $fld_dir = dirname(__FILE__) . '/'; - $tpl_dir = $fld_dir . 'tpl/'; + $fld_dir = dirname(__FILE__) . '/'; + $tpl_dir = $fld_dir . 'tpl/'; $fld_name = basename($fld_dir); $lang_file = $fld_dir . 'lang/' . (defined('ACP') ? $_SESSION['admin_language'] : $_SESSION['user_language']) . '.txt'; @@ -29,12 +29,25 @@ switch ($action) { case 'edit': + + // Инициализируем $field_value как массив с 2-мя пустыми строками по умолчанию. + $safe_values = ['', '']; + if (! empty($field_value)) - $field_value = explode('|', $field_value); + { + // Если значение не пусто, разделяем его на элементы + $values = explode('|', $field_value); + + // Гарантируем, что массив содержит минимум 2 элемента, используя безопасный доступ + $safe_values = [ + $values[0] ?? '', + $values[1] ?? '' + ]; + } $AVE_Template->assign('field_dir', $fld_name); $AVE_Template->assign('field_id', $field_id); - $AVE_Template->assign('field_value', $field_value); + $AVE_Template->assign('field_value', $safe_values); // Присваиваем гарантированный массив $tpl_file = get_field_tpl($tpl_dir, $field_id, 'admin', $_tpl); @@ -113,15 +126,20 @@ break; case 'save': + // Обрабатываем массив из двух значений, очищаем и собираем в строку '|' $save = array(); if (is_array($field_value)) { - foreach ($field_value AS $k => $v) - { - $save[] = preg_replace('/[^\d.]/', '', $v); - } + // Очищаем каждое из двух значений и сохраняем + $value_0 = preg_replace('/[^\d.]/','', $field_value[0] ?? ''); + $value_1 = preg_replace('/[^\d.]/','', $field_value[1] ?? ''); + $save = [$value_0, $value_1]; } + // Если пришла не строка, но не массив, возвращаем то, что есть (для совместимости) + elseif (!empty($field_value)) { + $save[] = preg_replace('/[^\d.]/','', $field_value); + } return empty($save) ? '' : implode('|', $save); diff --git a/fields/single_line_numeric_two/tpl/field-doc.tpl b/fields/single_line_numeric_two/tpl/field-doc.tpl index a992a59..d33aee1 100644 --- a/fields/single_line_numeric_two/tpl/field-doc.tpl +++ b/fields/single_line_numeric_two/tpl/field-doc.tpl @@ -1 +1 @@ -{$field_value.0} - {$field_value.1} \ No newline at end of file +{$field_value.0|default:''} - {$field_value.1|default:''} \ No newline at end of file diff --git a/fields/tags/field.php b/fields/tags/field.php index 90d8055..f33e988 100644 --- a/fields/tags/field.php +++ b/fields/tags/field.php @@ -16,15 +16,19 @@ { global $AVE_DB, $AVE_Template; - $fld_dir = dirname(__FILE__) . '/'; - $tpl_dir = $fld_dir . 'tpl/'; + $fld_dir = dirname(__FILE__) . '/'; + $tpl_dir = $fld_dir . 'tpl/'; $fld_name = basename($fld_dir); $rubric_id = ($rubric_id > 0) ? $rubric_id - : ($_REQUEST['rubric_id'] + : (isset($_REQUEST['rubric_id']) && $_REQUEST['rubric_id'] ? (int)$_REQUEST['rubric_id'] - : $AVE_DB->Query("SELECT rubric_id FROM ".PREFIX."_documents WHERE Id = '".$_REQUEST['Id']."'")->GetCell()); + : (isset($_REQUEST['Id']) + ? $AVE_DB->Query("SELECT rubric_id FROM ".PREFIX."_documents WHERE Id = '".$_REQUEST['Id']."'")->GetCell() + : 0 + ) + ); $lang_file = $fld_dir . 'lang/' . (defined('ACP') ? $_SESSION['admin_language'] @@ -181,28 +185,34 @@ { function tagsValue ($field_value) { - // Если есть выделенные теги - if (! empty($field_value['tags'])) - $tags = $field_value['tags']; - else - $tags = array(); + $tags = array(); - unset ($tags['other']); - - // Если есть теги через зяпятую - if (! empty($field_value['tags']['other'])) + // 1. Собираем теги по галочкам (если есть) + if (isset($field_value['tags']) && is_array($field_value['tags'])) + { + $tags_checked = $field_value['tags']; + unset ($tags_checked['other']); + $tags = $tags_checked; + } + + // 2. Собираем новые теги через запятую + if (isset($field_value['tags']['other']) && ! empty($field_value['tags']['other'])) { $tags_new = explode(',', $field_value['tags']['other']); $tags_new = array_map('trim', $tags_new); + $tags_new = array_diff($tags_new, array('')); } else $tags_new = array(); - // Совмещаем массивы + // 3. Совмещаем массивы и делаем значения уникальными $tags = array_merge($tags, $tags_new); - - // Делаем уникальные значения $field_value = array_unique($tags); + + // Если все теги пусты, возвращаем пустой массив + if (empty($field_value)) { + return array(); + } return $field_value; } @@ -221,19 +231,26 @@ $AVE_Document = new AVE_Document(); } - foreach ($data['feld'] AS $_k => $_v) - { - if (array_key_exists('tags', $_v)) - { - $tags = tagsValue($_v); + $document_id = isset($data['document_id']) ? (int)$data['document_id'] : 0; + $rubric_id = isset($data['rubric_id']) ? (int)$data['rubric_id'] : 0; + + if ($document_id > 0 && $rubric_id > 0) + { + foreach ($data['feld'] AS $_k => $_v) + { + if (is_array($_v) && array_key_exists('tags', $_v)) + { + $tags = tagsValue($_v); - if (! empty($tags)) - { - $tags = implode(',', $tags); - $AVE_Document->saveTags($data['document_id'], $data['rubric_id'], $tags); - } - } - } + if (! empty($tags)) + { + $tags = implode(',', $tags); + // Используем безопасные переменные $document_id и $rubric_id + $AVE_Document->saveTags($document_id, $rubric_id, $tags); + } + } + } + } } } ?> \ No newline at end of file diff --git a/fields/text_to_image/class.txtimage.php b/fields/text_to_image/class.txtimage.php index c00f629..e07b84e 100644 --- a/fields/text_to_image/class.txtimage.php +++ b/fields/text_to_image/class.txtimage.php @@ -10,7 +10,9 @@ ob_start(); ob_implicit_flush(0); -define('BASE_DIR', str_replace("\\", "/", dirname(dirname(dirname(__FILE__))))); +if (!defined('BASE_DIR')) { + define('BASE_DIR', str_replace("\\", "/", dirname(dirname(dirname(__FILE__))))); +} require_once(BASE_DIR . '/inc/init.php'); diff --git a/fields/youtube/tpl/field-doc.tpl b/fields/youtube/tpl/field-doc.tpl index fb8cc42..4c43d69 100644 --- a/fields/youtube/tpl/field-doc.tpl +++ b/fields/youtube/tpl/field-doc.tpl @@ -1,14 +1,14 @@ {if isset($param.4) && $param.4 == 'embed'} - + - + - + {else} - + {/if} \ No newline at end of file diff --git a/inc/query_variants/original_files/functions/func.parserequest.php b/inc/query_variants/original_files/functions/func.parserequest.php index 752f347..054a175 100644 --- a/inc/query_variants/original_files/functions/func.parserequest.php +++ b/inc/query_variants/original_files/functions/func.parserequest.php @@ -359,6 +359,15 @@ return $params_of_teaser[$id_param_array][$num]; } + +// Функция получения уникальных параметров для каждого тизера + function f_params_of_teaser ($id_param_array,$num) + { + global $params_of_teaser; + return $params_of_teaser[$id_param_array][$num]; + } + + // Функция получения элемента запроса function showrequestelement ($mixed, $template = '', $tparams = '') { @@ -579,7 +588,7 @@ $item = str_replace('[tag:link]', $link, $item); $item = str_replace('[tag:docid]', $row->Id, $item); $item = str_replace('[tag:itemid]', $row->Id, $item); - $item = str_replace('[tag:docitemnum]', $req_item_num, $item); + $item = str_replace('[tag:docitemnum]', (string)$req_item_num, $item); $item = str_replace('[tag:adminlink]', 'index.php?do=docs&action=edit&rubric_id=' . $row->rubric_id . '&Id=' . $row->Id . '&cp=' . session_id() . '', $item); $item = str_replace('[tag:doctitle]', stripslashes(htmlspecialchars_decode($row->document_title)), $item); $item = str_replace('[tag:docparent]', $row->document_parent, $item);