diff --git a/admin/rubs.php b/admin/rubs.php index ccf378e..6257d7b 100644 --- a/admin/rubs.php +++ b/admin/rubs.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 * @@ -645,7 +645,8 @@ case 'ftsave': if (check_permission('rubric_edit')) { - $AVE_Rubric->SaveFieldTpl((int)$_REQUEST['field_id'], $_REQUEST['field_name'], $_REQUEST['field_type'], $_REQUEST['func']); + $AVE_Rubric->SaveFieldTpl( + (int)($_REQUEST['field_id'] ?? 0), $_REQUEST['field_name'] ?? '', $_REQUEST['field_type'] ?? '', $_REQUEST['func'] ?? ''); } else { diff --git a/fields/date_unix_time/field.php b/fields/date_unix_time/field.php index 90acf79..28971a1 100644 --- a/fields/date_unix_time/field.php +++ b/fields/date_unix_time/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 * diff --git a/fields/drop_down_key/field.php b/fields/drop_down_key/field.php index c6a9f95..394c260 100644 --- a/fields/drop_down_key/field.php +++ b/fields/drop_down_key/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 * @@ -19,19 +19,19 @@ $fld_dir = dirname(__FILE__) . '/'; $tpl_dir = $fld_dir . 'tpl/'; - $lang_file = $fld_dir . 'lang/' . (defined('ACP') ? $_SESSION['admin_language'] : $_SESSION['user_language']) . '.txt'; - - $AVE_Template->config_load($lang_file, 'lang'); - $AVE_Template->assign('config_vars', $AVE_Template->get_config_vars()); - $AVE_Template->config_load($lang_file, 'admin'); - - $res = 0; + // Загружаем языки только для админки + if (defined('ACP')) { + $lang_file = $fld_dir . 'lang/' . $_SESSION['admin_language'] . '.txt'; + $AVE_Template->config_load($lang_file, 'lang'); + $AVE_Template->assign('config_vars', $AVE_Template->get_config_vars()); + $AVE_Template->config_load($lang_file, 'admin'); + } switch ($action) { case 'edit': $items = explode(',', $default); - $items = array_diff($items, array('')); + $items = array_diff(array_map('trim', $items), array('')); $tpl_file = get_field_tpl($tpl_dir, $field_id, 'admin'); @@ -43,89 +43,35 @@ break; case 'doc': - if ($tpl_empty) - { - $key = (int)$field_value; - $items = explode(',', $default); - $items = array_diff($items, array('')); - $field_value = isset($items[$key]) - ? trim($items[$key]) - : ''; - } - else - { - $field_param = explode('|', $field_value); - $field_value = preg_replace_callback( - '/\[tag:parametr:(\d+)\]/i', - function($data) use($field_param) - { - if (isset($data[1])) { - $index = (int)$data[1]; - if (isset($field_param[$index])) { - return $field_param[$index]; - } - } - return ''; - }, - $tpl - ); - } - - $tpl_file = get_field_tpl($tpl_dir, $field_id, 'doc'); - - if ($tpl_empty && $tpl_file) - { - $AVE_Template->assign('field_value', $field_value); - $AVE_Template->assign('key', $key); - $AVE_Template->assign('default', $default); - $AVE_Template->assign('field_value', $field_value); - return $AVE_Template->fetch($tpl_file); - } - - $res = $field_value; - break; - case 'req': + // Ключ — это само сохраненное значение (число) + $key = (trim($field_value) !== '') ? (int)$field_value : ''; + + // Если выбран режим "Без шаблона" (tpl_empty = 1), выводим просто цифру if ($tpl_empty) { - $key = (int)$field_value; - $items = explode(',', $default); - $items = array_diff($items, array('')); - $field_value = isset($items[$key]) - ? trim($items[$key]) - : ''; + return $key; } - else - { - $field_param = explode('|', $field_value); - $field_value = preg_replace_callback( + + // Если есть шаблон оформления (tpl_empty = 0) + if (!empty($tpl)) + { + // Если в шаблоне есть тег [tag:parametr:0], заменяем его на число + if (preg_match('/\[tag:parametr:(\d+)\]/i', $tpl)) { + return preg_replace_callback( '/\[tag:parametr:(\d+)\]/i', - function($data) use($field_param) - { - if (isset($data[1])) { - $index = (int)$data[1]; - if (isset($field_param[$index])) { - return $field_param[$index]; - } - } - return ''; + function($data) use($key) { + return $key; }, $tpl ); } - - $tpl_file = get_field_tpl($tpl_dir, $field_id, 'req'); - - if ($tpl_empty && $tpl_file) - { - $AVE_Template->assign('field_value', $field_value); - $AVE_Template->assign('key', $key); - $AVE_Template->assign('default', $default); - $AVE_Template->assign('field_value', $field_value); - return $AVE_Template->fetch($tpl_file); + // Если тегов нет, но шаблон не пуст, выводим содержимое шаблона + return $tpl; } - $res = $field_value; + // Если шаблона нет и tpl_empty=0, по умолчанию выводим ключ + return $key; break; case 'api': @@ -133,10 +79,10 @@ break; case 'name': - return $AVE_Template->get_config_vars('name'); + return (defined('ACP')) ? $AVE_Template->get_config_vars('name') : 'Drop Down Key'; break; - } - return ($res ? $res : $field_value); + + return $field_value; } ?> \ No newline at end of file diff --git a/fields/image_cascade/field.php b/fields/image_cascade/field.php index 2a6d575..7a6627c 100644 --- a/fields/image_cascade/field.php +++ b/fields/image_cascade/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 * @@ -75,11 +75,8 @@ } $show_upload = true; - - // Строка 76: разделяем строку на массив $default = explode('|', $default); - // Строка 78: используем оператор объединения с null (??) для безопасного извлечения значений $path = $default[0] ?? ''; $watermark = $default[1] ?? ''; $position = $default[2] ?? ''; @@ -128,20 +125,17 @@ break; case 'doc': - $items = array(); - if (!empty($field_value)) { $temp_items = @unserialize($field_value); - if ($temp_items !== false) + if ($temp_items !== false && is_array($temp_items)) { $items = $temp_items; } } $res = array(); - if (!empty($items)) { foreach ($items as $image_item) @@ -161,23 +155,23 @@ '/\[tag:parametr:(\d+)\]/i', function($data) use($field_param) { - return $field_param[(int)$data[1]]; + $idx = (int)$data[1]; + return isset($field_param[$idx]) ? $field_param[$idx] : ''; }, $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); } } - $res[] = $image_item; } } @@ -195,26 +189,22 @@ return $AVE_Template->fetch($tpl_file); } - return (! empty($res)) - ? implode(PHP_EOL, $res) - : $tpl; - + // ИСПРАВЛЕНО: Возвращаем пустую строку вместо $tpl, если картинок нет + return (! empty($res)) ? implode(PHP_EOL, $res) : ''; break; case 'req': $items = array(); - if (!empty($field_value)) { $temp_items = @unserialize($field_value); - if ($temp_items !== false) + if ($temp_items !== false && is_array($temp_items)) { $items = $temp_items; } } $res = array(); - if (!empty($items)) { foreach ($items as $image_item) @@ -234,23 +224,23 @@ '/\[tag:parametr:(\d+)\]/i', function($data) use($field_param) { - return $field_param[(int)$data[1]]; + $idx = (int)$data[1]; + return isset($field_param[$idx]) ? $field_param[$idx] : ''; }, $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); } } - $res[] = $image_item; } } @@ -268,73 +258,42 @@ return $AVE_Template->fetch($tpl_file); } - return (! empty($res)) - ? implode(PHP_EOL, $res) - : $tpl; - + // ИСПРАВЛЕНО: Возвращаем пустую строку вместо $tpl, если картинок нет + return (! empty($res)) ? implode(PHP_EOL, $res) : ''; break; -case 'save': - // Инициализируем $field_value_new как пустой массив. - $field_value_new = []; - - // Гарантируем, что $field_value является массивом перед foreach - $field_value = is_array($field_value) ? $field_value : []; - - foreach ($field_value as $k => $v) // Добавлен $k для проверки заглушки - { - // Игнорируем элемент-заглушку - if ($k === '__empty__') { - continue; - } - - 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; - - case 'api': - if (empty($field_value)) - return $field_value; - - $items = []; - - if (! empty($field_value)) + case 'save': + $field_value_new = []; + $field_value = is_array($field_value) ? $field_value : []; + + foreach ($field_value as $k => $v) { - $images = @unserialize($field_value); + if ($k === '__empty__') continue; - if ($images === false) // Проверка на неудачную десериализацию - return false; - - foreach ($images AS $k => $v) + if (! empty($v['url'])) { - $_item = explode('|', $v); - - $items[$k] = [ - 'url' => $_item[0], - // Проверка на существование индекса [1] - 'descr' => (isset($_item[1]) ? $_item[1] : ''), - ]; + $description = !empty($v['descr']) ? stripslashes(htmlspecialchars($v['descr'], ENT_QUOTES)) : ''; + $field_value_new[] = $v['url'] . ($description !== '' ? '|' . $description : ''); } } + return empty($field_value_new) ? '' : @serialize($field_value_new); + break; + + case 'api': + if (empty($field_value)) return $field_value; + $images = @unserialize($field_value); + if ($images === false || !is_array($images)) return false; + + $items = []; + foreach ($images AS $k => $v) + { + $_item = explode('|', $v); + $items[$k] = [ + 'url' => $_item[0], + 'descr' => (isset($_item[1]) ? $_item[1] : ''), + ]; + } return $items; break; @@ -344,96 +303,57 @@ case 'save': case 'upload': $error = false; - - $search = array(); - $replace = array(); + $search = array('%d', '%m', '%Y'); + $replace = array(date('d'), date('m'), date('Y')); $files_unput = 'cascade_files'.'_'.$_REQUEST['field_id'].'_'.$_REQUEST['doc_id']; - $search[] = '%d'; - $replace[] = date('d'); - $search[] = '%m'; - $replace[] = date('m'); - $search[] = '%Y'; - $replace[] = date('Y'); - $default = explode('|', $default); - // извлечение элементов массива $default $path_upload = $default[0] ?? ''; $watermark = $default[1] ?? false; - $position = $default[2] ?? null; - $transparency = $default[3] ?? null; + $position = $default[2] ?? 'center'; + $transparency = $default[3] ?? '100'; if (! empty($path_upload)) $path_upload = str_replace($search, $replace, $path_upload); - if(preg_match("/%id/i", $path_upload)) - { - $path = trim(@str_replace('%id', $_REQUEST['doc_id'], $path_upload), '/'); - } - else - { - $path = (! empty($path_upload)) - ? $path_upload - : ''; - } + $path = preg_match("/%id/i", $path_upload) + ? trim(@str_replace('%id', $_REQUEST['doc_id'], $path_upload), '/') + : $path_upload; if (! function_exists('getExtension')) { - function getExtension($file) - { - $file = pathinfo($file); - return $file['extension']; + function getExtension($file) { + return pathinfo($file, PATHINFO_EXTENSION); } } $valid_formats = array("jpg", "png", "gif", "bmp","jpeg", "webp"); - - $dir = '/' . UPLOAD_DIR . '/' . ((! empty($path)) - ? trim($path, '/') . '/' - : ''); - + $dir = '/' . UPLOAD_DIR . '/' . ((! empty($path)) ? trim($path, '/') . '/' : ''); $dir_abs = BASE_DIR . $dir; - if (! is_dir($dir_abs)) - @mkdir($dir_abs, 0777, true); + if (! is_dir($dir_abs)) @mkdir($dir_abs, 0777, true); - foreach ($_FILES[$files_unput]['name'] as $name => $value) + $new_files = array(); + if (!empty($_FILES[$files_unput]['name'])) { - $filename = strtolower(stripslashes(prepare_url($_FILES[$files_unput]['name'][$name]))); - - $ext = getExtension($filename); - $ext = strtolower($ext); - - if(in_array($ext, $valid_formats)) + foreach ($_FILES[$files_unput]['name'] as $name => $value) { - if (file_exists($dir_abs . $filename)) + $filename = strtolower(stripslashes(prepare_url($_FILES[$files_unput]['name'][$name]))); + $ext = strtolower(getExtension($filename)); + + if(in_array($ext, $valid_formats)) { - $filename = rand(1000, 9999) . '_' . $filename; - } + if (file_exists($dir_abs . $filename)) $filename = rand(1000, 9999) . '_' . $filename; - if (@move_uploaded_file($_FILES[$files_unput]['tmp_name'][$name], $dir_abs . $filename)) - { - $new_files[] = $filename; - $error = false; - - if ((bool)$watermark) + if (@move_uploaded_file($_FILES[$files_unput]['tmp_name'][$name], $dir_abs . $filename)) { - $position = ($position != '') ? $position : 'center'; - $transparency = ($transparency != '') ? $transparency : '100'; - - watermarks($dir . $filename, $position, $transparency); + $new_files[] = $filename; + if ((bool)$watermark) watermarks($dir . $filename, $position, $transparency); } + else { $error = true; } } - else - { - $error = true; - } + else { $error = true; @unlink($_FILES[$files_unput]['tmp_name'][$name]); } } - else - { - $error = true; - @unlink($_FILES[$files_unput]['tmp_name'][$name]); - } } if ($error !== true) @@ -445,20 +365,17 @@ case 'save': 'message' => $AVE_Template->get_config_vars('resp_s_m'), 'header' => $AVE_Template->get_config_vars('resp_s_h'), 'theme' => 'accept' - ) - ); + )); } else - { - echo json_encode(array( - 'respons' => 'error', - 'message' => $AVE_Template->get_config_vars('resp_e_m'), - 'header' => $AVE_Template->get_config_vars('resp_e_h'), - 'theme' => 'error' - ) - ); - } - + { + echo json_encode(array( + 'respons' => 'error', + 'message' => $AVE_Template->get_config_vars('resp_e_m'), + 'header' => $AVE_Template->get_config_vars('resp_e_h'), + 'theme' => 'error' + )); + } exit; } diff --git a/fields/image_mega/field.php b/fields/image_mega/field.php index 4ae75d6..4e716ca 100644 --- a/fields/image_mega/field.php +++ b/fields/image_mega/field.php @@ -4,26 +4,14 @@ * AVE.cms * * @package AVE.cms - * @version 3.x + * @version 4.x * @filesource * @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru * * @license GPL v.2 */ - - /* - | Разделитель в значении по умолчанию - | - | DIR|WATERMARKS|POSITION|TRANSPARENCY - | - | DIR - папка, куда загружать с компьютера (значение от /uploads) - | WATERMARKS - true/false (вкл/выкл) - | POSITION - Позиция, если WATERMARKS true, и тут пусто будет center - | TRANSPARENCY - Прозрачность. Тоже что и выше, только 50 - */ - - - // Изображение (Каскад) + // Изображение (Каскад / Мега) function get_field_image_mega($field_value, $action, $field_id = 0, $tpl = '', $tpl_empty = 0, &$maxlength = null, $document_fields = array(), $rubric_id = 0, $default = null, $_tpl=null) { @@ -42,13 +30,11 @@ $AVE_Template->config_load($lang_file, 'admin'); $res = 0; - $iniset_count = ini_get('max_file_uploads'); switch ($action) { case 'edit': - $items = array(); $image_items = array(); @@ -68,9 +54,7 @@ : $img_pixel; $image[$k]['title'] = $image_item[1] ?? ''; - $image[$k]['description'] = $image_item[2] ?? ''; - $image[$k]['link'] = (isset($image_item[3])) ? htmlspecialchars($image_item[3], ENT_QUOTES) : ''; @@ -84,7 +68,6 @@ } $show_upload = true; - $default = explode('|', $default); if (count($default) > 1) @@ -106,33 +89,23 @@ } else { - $path_upload = (! empty($path)) - ? trim($default, '/') - : ''; - + $path_upload = (! empty($path)) ? trim($default[0], '/') : ''; $show_upload = false; } } else { - $path_upload = (! empty($path)) - ? trim($path, '/') - : ''; - + $path_upload = (! empty($path)) ? trim($path, '/') : ''; $show_upload = true; } - $dir_upload = '/' . UPLOAD_DIR . '/' . ((! empty($path_upload)) - ? $path_upload . '/' - : ''); - + $dir_upload = '/' . UPLOAD_DIR . '/' . ((! empty($path_upload)) ? $path_upload . '/' : ''); $tpl_file = get_field_tpl($tpl_dir, $field_id, 'admin', $_tpl); $AVE_Template->assign('max_files', $AVE_Template->get_config_vars('max_f_f') . $iniset_count); $AVE_Template->assign('dir_upload', $AVE_Template->get_config_vars('upl_dir') . $dir_upload); $AVE_Template->assign('dir_uploaded', $dir_upload); $AVE_Template->assign('show_upload', $show_upload); - $AVE_Template->assign('field_dir', $fld_name); $AVE_Template->assign('images', $image_items); $AVE_Template->assign('field_id', $field_id); @@ -142,14 +115,12 @@ break; case 'doc': - $items = (isset($field_value) && trim($field_value) !== '') ? @unserialize($field_value) : []; $res = []; - - if ($items != false) + if ($items !== false && is_array($items)) { foreach ($items as $image_item) { @@ -159,21 +130,17 @@ { if ($tpl_empty) { - $image_item = array(); - - $image_item['url'] = $field_data[0]; - $image_item['title'] = isset($field_data[1]) ? $field_data[1] : ''; - $image_item['description'] = isset($field_data[2]) ? $field_data[2] : ''; - $image_item['link'] = isset($field_data[3]) ? $field_data[3] : ''; - - if (! empty($image_item['link'])) - $image_item['http'] = (preg_match('/^(http|https)/', $image_item['link']) ? true : false); - else - $image_item['http'] = false; + $image_obj = array(); + $image_obj['url'] = $field_data[0]; + $image_obj['title'] = isset($field_data[1]) ? $field_data[1] : ''; + $image_obj['description'] = isset($field_data[2]) ? $field_data[2] : ''; + $image_obj['link'] = isset($field_data[3]) ? $field_data[3] : ''; + $image_obj['http'] = (!empty($image_obj['link']) && preg_match('/^(http|https)/', $image_obj['link'])); + $res[] = $image_obj; } else { - $image_item = preg_replace_callback( + $rendered_item = preg_replace_callback( '/\[tag:parametr:(\d+)\]/i', function($data) use($field_data) { @@ -182,19 +149,16 @@ $tpl ); - $image_item = preg_replace_callback( + $rendered_item = preg_replace_callback( '/\[tag:watermark:(.+?):([a-zA-Z]+):([0-9]+)\]/', - function($m) { - return watermarks($m[1], $m[2], $m[3]); - }, - $image_item + function($m) { return watermarks($m[1], $m[2], $m[3]); }, + $rendered_item ); - $image_item = preg_replace_callback('/\[tag:([r|c|f|t|s]\d+x\d+r*):(.+?)]/', 'callback_make_thumbnail', $image_item); + $rendered_item = preg_replace_callback('/\[tag:([r|c|f|t|s]\d+x\d+r*):(.+?)]/', 'callback_make_thumbnail', $rendered_item); + $res[] = $rendered_item; } } - - $res[] = $image_item; } } @@ -207,25 +171,20 @@ $AVE_Template->assign('field_count', count($res)); $AVE_Template->assign('rubric_id', $rubric_id); $AVE_Template->assign('default', $default); - return $AVE_Template->fetch($tpl_file); } - return (! empty($res)) - ? implode(PHP_EOL, $res) - : $tpl; - + // Если картинок нет, возвращаем пустую строку, а не шаблон с тегами + return (! empty($res)) ? implode(PHP_EOL, $res) : ''; break; case 'req': - - $items = (trim($field_value) !== '') - ? @unserialize($field_value) + $items = (isset($field_value) && trim($field_value) !== '') + ? @unserialize($field_value) : []; $res = array(); - - if ($items != false) + if ($items !== false && is_array($items)) { foreach ($items as $image_item) { @@ -235,21 +194,17 @@ { if ($tpl_empty) { - $image_item = array(); - - $image_item['url'] = $field_data[0]; - $image_item['title'] = isset($field_data[1]) ? $field_data[1] : ''; - $image_item['description'] = isset($field_data[2]) ? $field_data[2] : ''; - $image_item['link'] = isset($field_data[3]) ? $field_data[3] : ''; - - if (! empty($image_item['link'])) - $image_item['http'] = (preg_match('/^(http|https)/', $image_item['link']) ? true : false); - else - $image_item['http'] = false; + $image_obj = array(); + $image_obj['url'] = $field_data[0]; + $image_obj['title'] = isset($field_data[1]) ? $field_data[1] : ''; + $image_obj['description'] = isset($field_data[2]) ? $field_data[2] : ''; + $image_obj['link'] = isset($field_data[3]) ? $field_data[3] : ''; + $image_obj['http'] = (!empty($image_obj['link']) && preg_match('/^(http|https)/', $image_obj['link'])); + $res[] = $image_obj; } else { - $image_item = preg_replace_callback( + $rendered_item = preg_replace_callback( '/\[tag:parametr:(\d+)\]/i', static function($data) use($field_data) { @@ -257,19 +212,16 @@ }, $tpl ); - $image_item = preg_replace_callback( + $rendered_item = preg_replace_callback( '/\[tag:watermark:(.+?):([a-zA-Z]+):([0-9]+)\]/', - function($m) { - return watermarks($m[1], $m[2], $m[3]); - }, - $image_item + function($m) { return watermarks($m[1], $m[2], $m[3]); }, + $rendered_item ); - $image_item = preg_replace_callback('/\[tag:([r|c|f|t|s]\d+x\d+r*):(.+?)]/', 'callback_make_thumbnail', $image_item); + $rendered_item = preg_replace_callback('/\[tag:([r|c|f|t|s]\d+x\d+r*):(.+?)]/', 'callback_make_thumbnail', $rendered_item); + $res[] = $rendered_item; } } - - $res[] = $image_item; } } @@ -282,24 +234,21 @@ $AVE_Template->assign('field_count', count($res)); $AVE_Template->assign('rubric_id', $rubric_id); $AVE_Template->assign('default', $default); - return $AVE_Template->fetch($tpl_file); } - return (! empty($res)) - ? implode(PHP_EOL, $res) - : $tpl; - + // Если данных нет, возвращаем пустую строку + return (! empty($res)) ? implode(PHP_EOL, $res) : ''; break; case 'save': + $field_value_new = []; if (is_array($field_value)) { foreach ($field_value as $v) { if (! empty($v['url'])) { - $field_value_new[] = $v['url'] . ($v['title'] ? '|' . stripslashes(htmlspecialchars($v['title'], ENT_QUOTES)) : '|') . ($v['description'] ? '|' . stripslashes(htmlspecialchars($v['description'], ENT_QUOTES)) : '|') @@ -307,40 +256,24 @@ } } } - - if (isset($field_value_new)) - return serialize($field_value_new); - else - return $field_value_new = ''; - + return (!empty($field_value_new)) ? serialize($field_value_new) : ''; break; case 'api': - if (empty($field_value)) - return $field_value; - + if (empty($field_value)) return $field_value; + $images = @unserialize($field_value); + if (!$images) return false; $items = []; - - if (! empty($field_value)) + foreach ($images AS $k => $v) { - $images = @unserialize($field_value); // Добавлено @ - - if (! $images) - return false; - - foreach ($images AS $k => $v) - { - $_item = explode('|', $v); - - $items[$k] = [ - 'url' => $_item[0], - 'title' => (isset($_item[1]) ? $_item[1] : ''), - 'description' => (isset($_item[2]) ? $_item[2] : ''), - 'link' => (isset($_item[3]) ? $_item[3] : '') - ]; - } + $_item = explode('|', $v); + $items[$k] = [ + 'url' => $_item[0], + 'title' => ($_item[1] ?? ''), + 'description' => ($_item[2] ?? ''), + 'link' => ($_item[3] ?? '') + ]; } - return $items; break; @@ -350,133 +283,72 @@ case 'upload': $error = false; - - $search = []; - $replace = []; + $search = ['%d', '%m', '%Y']; + $replace = [date('d'), date('m'), date('Y')]; $files_input = 'mega_files' . '_' . $_REQUEST['field_id'] . '_' . $_REQUEST['doc_id']; - - $search[] = '%d'; - $replace[] = date('d'); - $search[] = '%m'; - $replace[] = date('m'); - $search[] = '%Y'; - $replace[] = date('Y'); - $default = explode('|', $default); - - // извлечение элементов массива $default $path_upload = $default[0] ?? ''; $watermark = $default[1] ?? false; - $position = $default[2] ?? null; - $transparency = $default[3] ?? null; + $position = $default[2] ?? 'center'; + $transparency = $default[3] ?? '50'; - if (! empty($path_upload)) - $path_upload = str_replace($search, $replace, $path_upload); + if (! empty($path_upload)) $path_upload = str_replace($search, $replace, $path_upload); if(preg_match("/%id/i", $path_upload)) - { $path = trim(@str_replace('%id', $_REQUEST['doc_id'], $path_upload), '/'); - } else - { - $path = (! empty($path_upload)) - ? $path_upload - : ''; - } + $path = (! empty($path_upload)) ? $path_upload : ''; if (! function_exists('getExtension')) { - function getExtension($file) - { - $file = pathinfo($file); - return $file['extension']; + function getExtension($file) { + return pathinfo($file, PATHINFO_EXTENSION); } } $valid_formats = array("jpg", "png", "gif", "bmp", "jpeg", "webp"); - - $dir = '/' . UPLOAD_DIR . '/' . ((! empty($path)) - ? trim($path, '/') . '/' - : ''); - + $dir = '/' . UPLOAD_DIR . '/' . ((! empty($path)) ? trim($path, '/') . '/' : ''); $dir_abs = BASE_DIR . $dir; if (!is_dir($dir_abs) && !mkdir($dir_abs, 0777, true) && !is_dir($dir_abs)) { throw new \RuntimeException(sprintf('Directory "%s" was not created', $dir_abs)); } - $new_files = []; - $thumbs = []; - + $new_files = []; $thumbs = []; foreach ($_FILES[$files_input]['name'] as $name => $value) { $filename = strtolower(stripslashes(prepare_url($_FILES[$files_input]['name'][$name]))); - - $ext = getExtension($filename); - $ext = strtolower($ext); + $ext = strtolower(getExtension($filename)); if (in_array($ext, $valid_formats)) { - if (file_exists($dir_abs . $filename)) - { - $filename = rand(1000, 9999) . '_' . $filename; - } - + if (file_exists($dir_abs . $filename)) $filename = rand(1000, 9999) . '_' . $filename; if (@move_uploaded_file($_FILES[$files_input]['tmp_name'][$name], $dir_abs . $filename)) { $new_files[] = $filename; - $thumbs[] = make_thumbnail(array('link' => $dir . $filename, 'size' => 't128x128')); - - if ((bool)$watermark) - { - $position = ($position != '') ? $position : 'center'; - $transparency = ($transparency != '') ? $transparency : '50'; - - watermarks($dir . $filename, $position, $transparency); - } - - $error = false; - } - else - { - $error = true; - } - } - else - { - $error = true; - @unlink($_FILES[$files_input]['tmp_name'][$name]); - } + if ((bool)$watermark) watermarks($dir . $filename, $position, $transparency); + } else { $error = true; } + } else { $error = true; @unlink($_FILES[$files_input]['tmp_name'][$name]); } } if ($error !== true) { echo json_encode(array( - 'files' => $new_files, - 'thumbs' => $thumbs, - 'dir' => $dir, - 'respons' => 'success', + 'files' => $new_files, 'thumbs' => $thumbs, 'dir' => $dir, 'respons' => 'success', 'message' => $AVE_Template->get_config_vars('resp_s_m'), 'header' => $AVE_Template->get_config_vars('resp_s_h'), 'theme' => 'accept' - ) - ); + )); + } else { + echo json_encode(array( + 'respons' => 'error', 'message' => $AVE_Template->get_config_vars('resp_e_m'), + 'header' => $AVE_Template->get_config_vars('resp_e_h'), 'theme' => 'error' + )); } - else - { - echo json_encode(array( - 'respons' => 'error', - 'message' => $AVE_Template->get_config_vars('resp_e_m'), - 'header' => $AVE_Template->get_config_vars('resp_e_h'), - 'theme' => 'error' - ) - ); - } - exit; } - return $res ?: $field_value; + return $res ?: ''; } \ No newline at end of file diff --git a/fields/image_single/field.php b/fields/image_single/field.php index 2fe0d8c..a52bc42 100644 --- a/fields/image_single/field.php +++ b/fields/image_single/field.php @@ -4,14 +4,14 @@ * AVE.cms * * @package AVE.cms - * @version 3.x + * @version 4.x * @filesource * @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru * * @license GPL v.2 */ - // Изображение + // Изображение (Одиночное) function get_field_image_single($field_value, $action, $field_id = 0, $tpl = '', $tpl_empty = false, &$maxlength = null, $document_fields = array(), $rubric_id = 0, $default = null, $_tpl = null) { global $AVE_Template; @@ -46,7 +46,7 @@ $AVE_Template->assign('default', $default); $AVE_Template->assign('field_dir', $fld_name); $AVE_Template->assign('image', $image); - $AVE_Template->assign('doc_id', isset($_REQUEST['Id']) ? (int)$_REQUEST['Id'] : 0); + $AVE_Template->assign('doc_id', isset($_REQUEST['Id']) ? (int)$_REQUEST['Id'] : 0); $AVE_Template->assign('field', $field); $AVE_Template->assign('field_id', $field_id); $AVE_Template->assign('field_value', $field_value); @@ -56,9 +56,11 @@ case 'doc': $field_value = clean_php($field_value); - $field_param = explode('|', $field_value); + // Если путь к изображению пуст — ничего не выводим + if (empty($field_param[0])) return ''; + if ($tpl_empty) { $field_value = '' . (isset($field_param[1]) ? $field_param[1] : '')
@@ -70,18 +72,19 @@
 						'/\[tag:parametr:(\d+)\]/i',
 						function($data) use($field_param)
 						{
-							return $field_param[(int)$data[1]];
+							$index = isset($data[1]) ? (int)$data[1] : null;
+							return ($index !== null && isset($field_param[$index])) ? $field_param[$index] : '';
 						},
 						$tpl
 					);
 
-                $field_value = preg_replace_callback(
-                    '/\[tag:watermark:(.+?):([a-zA-Z]+):([0-9]+)\]/',
-                    function($m) {
-                        return watermarks($m[1], $m[2], $m[3]);
-                    },
-                    $field_value
-                );
+					$field_value = preg_replace_callback(
+						'/\[tag:watermark:(.+?):([a-zA-Z]+):([0-9]+)\]/',
+						function($m) {
+							return watermarks($m[1], $m[2], $m[3]);
+						},
+						$field_value
+					);
 
 					$field_value = preg_replace_callback('/\[tag:([r|c|f|t|s]\d+x\d+r*):(.+?)]/', 'callback_make_thumbnail', $field_value);
 				}
@@ -99,9 +102,18 @@
 
 			case 'req':
 				$field_value = clean_php($field_value);
-
 				$field_param = explode('|', $field_value);
+				
+				// Если путь к изображению пуст — ничего не выводим
+				if (empty($field_param[0])) return '';
+
 				$field_param['name'] = preg_replace('/\\.[^.\\s]{3,4}$/', '', $field_param[0]);
+				
+				if (!function_exists('getExtension')) {
+					function getExtension($file) {
+						return pathinfo($file, PATHINFO_EXTENSION);
+					}
+				}
 				$field_param['ext'] = getExtension($field_param[0]);
 
 				if ($tpl_empty)
@@ -115,24 +127,24 @@
 						'/\[tag:parametr:(\d+)\]/i',
 						function($data) use($field_param)
 						{
-							return $field_param[(int)$data[1]];
+							$index = isset($data[1]) ? (int)$data[1] : null;
+							return ($index !== null && isset($field_param[$index])) ? $field_param[$index] : '';
 						},
 						$tpl
 					);
 
-                $field_value = preg_replace_callback(
-                    '/\[tag:watermark:(.+?):([a-zA-Z]+):([0-9]+)\]/',
-                    function($m) {
-                        return watermarks($m[1], $m[2], $m[3]);
-                    },
-                    $field_value
-                );
+					$field_value = preg_replace_callback(
+						'/\[tag:watermark:(.+?):([a-zA-Z]+):([0-9]+)\]/',
+						function($m) {
+							return watermarks($m[1], $m[2], $m[3]);
+						},
+						$field_value
+					);
 
 					$field_value = preg_replace_callback('/\[tag:([r|c|f|t|s]\d+x\d+r*):(.+?)]/', 'callback_make_thumbnail', $field_value);
 				}
 
 				$maxlength = null;
-
 				$tpl_file = get_field_tpl($tpl_dir, $field_id, 'req', $_tpl);
 
 				if ($tpl_empty && $tpl_file)
@@ -145,7 +157,7 @@
 				break;
 
 			case 'save':
-				if (isset($field_value) && $field_value['img'] != '' )
+				if (isset($field_value) && is_array($field_value) && !empty($field_value['img']))
 				{
 					$field_value = htmlspecialchars(implode( $image[0], 'descr' => isset($image[1]) ? $image[1] : '']; break; @@ -170,5 +182,4 @@ } return ($res ? $res : $field_value); - } -?> \ No newline at end of file + } \ No newline at end of file