From 667c7d3fede82465cfc1ce1f3a0fc27d0112229d Mon Sep 17 00:00:00 2001 From: Repellent Date: Wed, 3 Dec 2025 22:19:18 +0500 Subject: [PATCH] =?UTF-8?q?fix=20=D0=BF=D0=BE=D0=BB=D1=8F=20=D0=98=D0=B7?= =?UTF-8?q?=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=9A?= =?UTF-8?q?=D0=B0=D1=81=D0=BA=D0=B0=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fields/image_cascade/field.php | 148 +++++++++++++++++++-------------- 1 file changed, 84 insertions(+), 64 deletions(-) diff --git a/fields/image_cascade/field.php b/fields/image_cascade/field.php index 5d2e78e..15a9295 100644 --- a/fields/image_cascade/field.php +++ b/fields/image_cascade/field.php @@ -17,8 +17,8 @@ global $AVE_Template, $img_pixel; - $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') @@ -42,9 +42,12 @@ if ($_REQUEST['action'] != 'new') { - $items = unserialize($field_value); - - if($items != false) + if (!empty($field_value)) + { + $items = @unserialize($field_value); + } + + if($items !== false && is_array($items)) { foreach($items as $k => $v) { @@ -73,7 +76,7 @@ $show_upload = true; - // Строка 76: разделяем строку на массив + // Строка 76: разделяем строку на массив $default = explode('|', $default); // Строка 78: используем оператор объединения с null (??) для безопасного извлечения значений @@ -125,14 +128,21 @@ break; case 'doc': + + $items = array(); - $items = (isset($field_value)) - ? unserialize($field_value) - : array(); + if (!empty($field_value)) + { + $temp_items = @unserialize($field_value); + if ($temp_items !== false) + { + $items = $temp_items; + } + } $res = array(); - if ($items != false) + if (!empty($items)) { foreach ($items as $image_item) { @@ -156,13 +166,13 @@ $tpl ); - $image_item = preg_replace_callback( - '/\[tag:watermark:(.+?):([a-zA-Z]+):([0-9]+)\]/', - function($m) { - return watermarks($m[1], $m[2], $m[3]); - }, - $image_item - ); + $image_item = preg_replace_callback( + '/\[tag:watermark:(.+?):([a-zA-Z]+):([0-9]+)\]/', + function($m) { + return watermarks($m[1], $m[2], $m[3]); + }, + $image_item + ); $image_item = preg_replace_callback('/\[tag:([r|c|f|t|s]\d+x\d+r*):(.+?)]/', 'callback_make_thumbnail', $image_item); } @@ -192,11 +202,20 @@ break; case 'req': - $items = unserialize($field_value); + $items = array(); + + if (!empty($field_value)) + { + $temp_items = @unserialize($field_value); + if ($temp_items !== false) + { + $items = $temp_items; + } + } $res = array(); - if ($items != false) + if (!empty($items)) { foreach ($items as $image_item) { @@ -220,13 +239,13 @@ $tpl ); - $image_item = preg_replace_callback( - '/\[tag:watermark:(.+?):([a-zA-Z]+):([0-9]+)\]/', - function($m) { - return watermarks($m[1], $m[2], $m[3]); - }, - $image_item - ); + $image_item = preg_replace_callback( + '/\[tag:watermark:(.+?):([a-zA-Z]+):([0-9]+)\]/', + function($m) { + return watermarks($m[1], $m[2], $m[3]); + }, + $image_item + ); $image_item = preg_replace_callback('/\[tag:([r|c|f]\d+x\d+r*):(.+?)]/', 'callback_make_thumbnail', $image_item); } @@ -255,36 +274,36 @@ break; -case 'save': - // Инициализируем $field_value_new как пустой массив. - $field_value_new = []; - - // Гарантируем, что $field_value является массивом перед foreach - $field_value = is_array($field_value) ? $field_value : []; - - foreach ($field_value as $v) - { - if (! empty($v['url'])) - { - // Убедимся, что данные очищены перед сериализацией - $description = $v['descr'] ? stripslashes(htmlspecialchars($v['descr'], ENT_QUOTES)) : ''; - - // Собираем элемент в строку: URL|DESCR - $field_value_new[] = $v['url'] . ($description ? '|' . $description : ''); - } - } + case 'save': + // Инициализируем $field_value_new как пустой массив. + $field_value_new = []; + + // Гарантируем, что $field_value является массивом перед foreach + $field_value = is_array($field_value) ? $field_value : []; + + foreach ($field_value as $v) + { + if (! empty($v['url'])) + { + // Убедимся, что данные очищены перед сериализацией + $description = $v['descr'] ? stripslashes(htmlspecialchars($v['descr'], ENT_QUOTES)) : ''; + + // Собираем элемент в строку: URL|DESCR + $field_value_new[] = $v['url'] . ($description ? '|' . $description : ''); + } + } - // Если массив картинок пуст (все удалено), возвращаем пустую строку для сохранения в БД - if (empty($field_value_new)) - { - return ''; - } - else - { - // Если картинки есть, сериализуем массив строк и сохраняем - return @serialize($field_value_new); - } - break; + // Если массив картинок пуст (все удалено), возвращаем пустую строку для сохранения в БД + if (empty($field_value_new)) + { + return ''; + } + else + { + // Если картинки есть, сериализуем массив строк и сохраняем + return @serialize($field_value_new); + } + break; case 'api': if (empty($field_value)) @@ -294,9 +313,9 @@ case 'save': if (! empty($field_value)) { - $images = unserialize($field_value); + $images = @unserialize($field_value); - if (! $images) + if ($images === false) // Проверка на неудачную десериализацию return false; foreach ($images AS $k => $v) @@ -304,8 +323,9 @@ case 'save': $_item = explode('|', $v); $items[$k] = [ - 'url' => $_item[0], - 'descr' => (isset($_item[1]) ? $_item[2] : ''), + 'url' => $_item[0], + // Проверка на существование индекса [1] + 'descr' => (isset($_item[1]) ? $_item[1] : ''), ]; } } @@ -333,11 +353,11 @@ case 'save': $replace[] = date('Y'); $default = explode('|', $default); - // извлечение элементов массива $default - $path_upload = $default[0] ?? ''; - $watermark = $default[1] ?? false; - $position = $default[2] ?? null; - $transparency = $default[3] ?? null; + // извлечение элементов массива $default + $path_upload = $default[0] ?? ''; + $watermark = $default[1] ?? false; + $position = $default[2] ?? null; + $transparency = $default[3] ?? null; if (! empty($path_upload)) $path_upload = str_replace($search, $replace, $path_upload);