fix for PHP-8,4 --- поле "Мультизагрузка файлов"

This commit is contained in:
2025-11-25 19:56:23 +05:00
parent 9a3a9b0479
commit b4a3d2fe4e
4 changed files with 70 additions and 29 deletions

View File

@@ -4,7 +4,7 @@
* AVE.cms
*
* @package AVE.cms
* @version 3.x
* @version 4.x
* @filesource
* @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru
*
@@ -34,18 +34,28 @@
$items = [];
$items = unserialize($field_value);
if (trim($field_value) !== '') {
$items = @unserialize($field_value);
}
if ($items != false)
{
foreach($items as $k => $v)
{
$list_item = explode('|', $v);
$list[$k]['name'] = (isset($list_item[0])) ? htmlspecialchars($list_item[0], ENT_QUOTES) : '';
$list[$k]['descr'] = (isset($list_item[1])) ? htmlspecialchars($list_item[1], ENT_QUOTES) : '';
$list[$k]['url'] = (isset($list_item[2])) ? htmlspecialchars($list_item[2], ENT_QUOTES) : '';
// Если данные в БД сохраняются как строки: 'Название|Описание|URL'
if (is_string($v)) {
$list_item = explode('|', $v);
$list[$k]['name'] = (isset($list_item[0])) ? htmlspecialchars($list_item[0], ENT_QUOTES) : '';
$list[$k]['descr'] = (isset($list_item[1])) ? htmlspecialchars($list_item[1], ENT_QUOTES) : '';
$list[$k]['url'] = (isset($list_item[2])) ? htmlspecialchars($list_item[2], ENT_QUOTES) : '';
} else {
// Если данные приходят в виде ассоциативного массива (новый формат)
$list[$k]['name'] = (isset($v['name'])) ? htmlspecialchars($v['name'], ENT_QUOTES) : '';
$list[$k]['descr'] = (isset($v['descr'])) ? htmlspecialchars($v['descr'], ENT_QUOTES) : '';
$list[$k]['url'] = (isset($v['url'])) ? htmlspecialchars($v['url'], ENT_QUOTES) : '';
}
}
$items = $list;
@@ -77,16 +87,24 @@
break;
case 'doc':
$items = unserialize($field_value);
$items = (trim($field_value) !== '') ? @unserialize($field_value) : [];
if ($items != false)
{
foreach($items as $list_item)
{
$list_item = clean_php($list_item);
$field_param = explode('|', $list_item);
// Если данные в БД - ассоциативный массив, работаем с ним напрямую
if (is_array($list_item)) {
$field_param = [$list_item['name'], $list_item['descr'], $list_item['url']];
} else {
// Иначе (старый формат), разбиваем строку
$field_param = explode('|', $list_item);
}
if ($list_item)
if (!empty($field_param))
{
if ($tpl_empty)
{
@@ -125,16 +143,24 @@
break;
case 'req':
$items = unserialize($field_value);
$items = (trim($field_value) !== '') ? @unserialize($field_value) : [];
if ($items != false)
{
foreach($items as $list_item)
{
$list_item = clean_php($list_item);
$field_param = explode('|', $list_item);
if ($list_item)
// Если данные в БД - ассоциативный массив, работаем с ним напрямую
if (is_array($list_item)) {
$field_param = [$list_item['name'], $list_item['descr'], $list_item['url']];
} else {
// Иначе (старый формат), разбиваем строку
$field_param = explode('|', $list_item);
}
if (!empty($field_param))
{
if ($tpl_empty)
{
@@ -172,25 +198,29 @@
break;
case 'save':
$field_value_new = [];
$field_value = is_array($field_value) ? $field_value : [];
foreach ($field_value AS $v)
{
if (! empty($v['url']))
{
$field_value_new[] = [
'name' => (isset($v['name']) ? $v['name'] : ''),
'descr' => (isset($v['descr']) ? $v['descr'] : ''),
'url' => $v['url']
'name' => (isset($v['name']) ? stripslashes(htmlspecialchars($v['name'], ENT_QUOTES)) : ''),
'descr' => (isset($v['descr']) ? stripslashes(htmlspecialchars($v['descr'], ENT_QUOTES)) : ''),
'url' => $v['url']
];
}
}
if (isset($field_value_new))
if (!empty($field_value_new))
{
return @serialize($field_value_new);
}
else
{
return $field_value_new = '';
return '';
}
break;
@@ -198,18 +228,26 @@
if (empty($field_value))
return $field_value;
$items = unserialize($field_value);
$items = (trim($field_value) !== '') ? @unserialize($field_value) : [];
if ($items != false)
{
$list = [];
foreach($items as $k => $v)
{
$list_item = explode('|', $v);
// Если данные в БД сохраняются как строки: 'Название|Описание|URL'
if (is_string($v)) {
$list_item = explode('|', $v);
$list[$k]['name'] = (isset($list_item[0])) ? htmlspecialchars($list_item[0], ENT_QUOTES) : '';
$list[$k]['descr'] = (isset($list_item[1])) ? htmlspecialchars($list_item[1], ENT_QUOTES) : '';
$list[$k]['url'] = (isset($list_item[2])) ? htmlspecialchars($list_item[2], ENT_QUOTES) : '';
$list[$k]['name'] = (isset($list_item[0])) ? htmlspecialchars($list_item[0], ENT_QUOTES) : '';
$list[$k]['descr'] = (isset($list_item[1])) ? htmlspecialchars($list_item[1], ENT_QUOTES) : '';
$list[$k]['url'] = (isset($list_item[2])) ? htmlspecialchars($list_item[2], ENT_QUOTES) : '';
} else {
// Если данные приходят в виде ассоциативного массива (новый формат)
$list[$k]['name'] = (isset($v['name'])) ? htmlspecialchars($v['name'], ENT_QUOTES) : '';
$list[$k]['descr'] = (isset($v['descr'])) ? htmlspecialchars($v['descr'], ENT_QUOTES) : '';
$list[$k]['url'] = (isset($v['url'])) ? htmlspecialchars($v['url'], ENT_QUOTES) : '';
}
}
$items = $list;
@@ -225,5 +263,4 @@
}
return ($res ? $res : $field_value);
}
?>
}

View File

@@ -1,5 +1,5 @@
[admin]
name = "Файлы документов"
name = "Мультизагрузка файлов"
delete = "Удалить элемент"
param_name = "Наименование"
param_desc = "Описание"

View File

@@ -1,5 +1,7 @@
<ul>
{foreach from=$field_value item=list}
<li>{$list[0]}: {$list[1]}</li>
<li>
<a href="{$list[2]}" alt="{$list[0]}" title="{$list[1]}" target="_blank">{$list[0]}</a>
</li>
{/foreach}
</ul>

View File

@@ -1,5 +1,7 @@
<ul>
{foreach from=$field_value item=list}
<li>{$list[0]}: {$list[1]}</li>
<li>
<a href="{$list[2]}" alt="{$list[0]}" title="{$list[1]}" target="_blank">{$list[0]}</a>
</li>
{/foreach}
</ul>