diff --git a/fields/doc_files/field.php b/fields/doc_files/field.php index 5933cf2..bdc5bb9 100644 --- a/fields/doc_files/field.php +++ b/fields/doc_files/field.php @@ -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); - } -?> \ No newline at end of file + } \ No newline at end of file diff --git a/fields/doc_files/lang/ru.txt b/fields/doc_files/lang/ru.txt index a3f7243..9e45350 100644 --- a/fields/doc_files/lang/ru.txt +++ b/fields/doc_files/lang/ru.txt @@ -1,5 +1,5 @@ [admin] -name = "Файлы документов" +name = "Мультизагрузка файлов" delete = "Удалить элемент" param_name = "Наименование" param_desc = "Описание" diff --git a/fields/doc_files/tpl/field-doc.tpl b/fields/doc_files/tpl/field-doc.tpl index ef6968b..ef2ab8a 100644 --- a/fields/doc_files/tpl/field-doc.tpl +++ b/fields/doc_files/tpl/field-doc.tpl @@ -1,5 +1,7 @@ \ No newline at end of file diff --git a/fields/doc_files/tpl/field-req.tpl b/fields/doc_files/tpl/field-req.tpl index ef6968b..ef2ab8a 100644 --- a/fields/doc_files/tpl/field-req.tpl +++ b/fields/doc_files/tpl/field-req.tpl @@ -1,5 +1,7 @@ \ No newline at end of file