diff --git a/README.md b/README.md index 5ca895d..ae6d27c 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# AVE.cms v3.27 +# AVE.cms v3.28 ###### Многофункциональная, система управления сайтом. ## Оглавление @@ -33,10 +33,6 @@ 6. Следуйте инструкциям. 7. После установки системы настоятельно рекомендуем устанавливать права доступа на папку uploads не выше CHMOD 755. -## MySQL >= 5.7 -Cекция [mysqld] - * sql_mode = "NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" - ## Ресурсы Сайт: [ave-cms.ru](https://ave-cms.ru/) diff --git a/admin/groups.php b/admin/groups.php index a6b28bd..d4f9c91 100644 --- a/admin/groups.php +++ b/admin/groups.php @@ -20,6 +20,7 @@ if (!defined('ACP')) global $AVE_Template; require(BASE_DIR . '/class/class.user.php'); + $AVE_User = new AVE_User; $AVE_Template->config_load(BASE_DIR . '/admin/lang/' . $_SESSION['admin_language'] . '/groups.txt', 'groups'); diff --git a/admin/templates/css/color_default.css b/admin/templates/css/color_default.css index 24a36f8..95054a2 100644 --- a/admin/templates/css/color_default.css +++ b/admin/templates/css/color_default.css @@ -889,7 +889,7 @@ div.jGrowl div.accept { box-sizing:border-box; border:1px solid #d9dee9; color:#177bbb!important; - padding:0 5px; + padding:3px 5px; border-radius:3px; -moz-border-radius:3px; -webkit-border-radius:3px; @@ -899,6 +899,41 @@ div.jGrowl div.accept { color:#177bbb!important; } +.code.green { + background-color:#1aae88; + + border:1px solid #199875; + color:#fff!important; +} + +.code.green > a { + color:#fff!important; +} + + +.code.red { + background-color:#dd1e32; + + border:1px solid #ce1e31; + color:#fff!important; +} + +.code.red > a { + color:#fff!important; +} + + +.code.yellow { + background-color: #dda70e; + + border:1px solid #db9a01; + color:#fff!important; +} + +.code.yellow > a { + color:#fff!important; +} + .docaction .code { background-color:#f2f4f8; color:#7f88b4!important; diff --git a/admin/templates/main.tpl b/admin/templates/main.tpl index 868a435..b2afd00 100644 --- a/admin/templates/main.tpl +++ b/admin/templates/main.tpl @@ -244,7 +244,7 @@ {if check_permission('cache_clear')} {/if} diff --git a/admin/templates/pop.tpl b/admin/templates/pop.tpl index db1816c..10f89c2 100644 --- a/admin/templates/pop.tpl +++ b/admin/templates/pop.tpl @@ -11,7 +11,7 @@ - + @@ -38,30 +38,28 @@ - - - - -
- - -
- {$content} -
- -
-
- - - - - - - + + +
+ + +
+ {$content} +
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/class/class.docs.php b/class/class.docs.php index 5d10637..05bf1ac 100755 --- a/class/class.docs.php +++ b/class/class.docs.php @@ -1268,6 +1268,8 @@ // Запускаем триггер перед сохранением, возвращаем $data для дальнейшего сохранения $data = Hooks::trigger('DocumentBeforeSave', $data); + $data['rubric_id'] = $rubric_id; + // Выполняем стартовый код рубрики if ($rubric_code) eval (' ?'.'>' . $_rubric->rubric_code_start . '' . $_rubric->rubric_code_end . 'clearDocument($document_id); @@ -3808,8 +3809,9 @@ exit; } - $search_query = $_SESSION['search_query'][$document_id] ? true : false; + $search_query = isset($_SESSION['search_query'][$document_id]) ? true : false; + $AVE_Template->assign('rubric_id', $rubric_id); $AVE_Template->assign('search_query', $search_query); $AVE_Template->assign($document); $AVE_Template->assign('content', $AVE_Template->fetch('documents/form_after.tpl')); diff --git a/class/class.registry.php b/class/class.registry.php new file mode 100644 index 0000000..cd50893 --- /dev/null +++ b/class/class.registry.php @@ -0,0 +1,147 @@ + \ No newline at end of file diff --git a/class/class.rubs.php b/class/class.rubs.php index 1e98017..f9adb11 100755 --- a/class/class.rubs.php +++ b/class/class.rubs.php @@ -954,7 +954,7 @@ $AVE_DB->clearCache('rub_' . $rubric_id); $this->clearChanges(); - if ($sql->_result === false) + if ($sql !== true) { $message = $AVE_Template->get_config_vars('RUBRIK_CODE_SAVED_ERR'); $header = $AVE_Template->get_config_vars('RUBRIK_CODE_ERROR'); diff --git a/fields/checkbox/field.php b/fields/checkbox/field.php index 280e5fc..9b76c3f 100644 --- a/fields/checkbox/field.php +++ b/fields/checkbox/field.php @@ -90,6 +90,11 @@ : null; break; + case 'api': + $field_value = clean_php($field_value); + $res = ((int)$field_value === 1) ? '1' : '0'; + break; + case 'name': return $AVE_Template->get_config_vars('name'); break; diff --git a/fields/code/field.php b/fields/code/field.php index acafcf7..6ab4c71 100644 --- a/fields/code/field.php +++ b/fields/code/field.php @@ -102,6 +102,10 @@ return $field_value; break; + case 'api': + return $field_value; + break; + case 'name': return $AVE_Template->get_config_vars('name'); break; diff --git a/fields/date/field.php b/fields/date/field.php index a320ac8..d08a08e 100644 --- a/fields/date/field.php +++ b/fields/date/field.php @@ -115,6 +115,9 @@ $res = $field_value; break; + case 'api': + return clean_php($field_value); + break; case 'name': return $AVE_Template->get_config_vars('name'); diff --git a/fields/doc_files/css/field.css b/fields/doc_files/css/field.css new file mode 100644 index 0000000..856996c --- /dev/null +++ b/fields/doc_files/css/field.css @@ -0,0 +1,56 @@ +.doc_files { + position: relative; +} + +.doc_files > .ui-state-highlight { + display: inline-block; + margin: 3px; + width: 450px; + height: 26px; + background-color: rgba(255,255,255,0.5); !important; + border: solid 1px #eaeaea; + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + position: relative; + text-align: center; + padding: 0 !important; +} + +.doc_files .doc_file { + border: 1px solid #d9dee9; + display: block; + overflow: hidden; + padding: 10px; + width: auto; + border-radius: 5px; +} + +.doc_files .doc_file .file_block { + display: block; + float: left; +} + +.doc_files .doc_file .handle { + float: left; + display: inline-block; + margin: 4px 7px; + cursor: move; +} + +.doc_files .doc_file .file_block .docs_name { + display: block; + width: 400px; + margin-bottom: 5px; +} + +.doc_files .doc_file .file_block .docs_desc { + display: block; + width: 400px; + height: 40px; + margin-bottom: 5px; +} + +.doc_files .doc_file .file_block .docs_url { + width: 400px; +} \ No newline at end of file diff --git a/fields/doc_files/field.php b/fields/doc_files/field.php new file mode 100644 index 0000000..5933cf2 --- /dev/null +++ b/fields/doc_files/field.php @@ -0,0 +1,229 @@ +config_load($lang_file, 'lang'); + $AVE_Template->assign('config_vars', $AVE_Template->get_config_vars()); + $AVE_Template->config_load($lang_file, 'admin'); + + $res = array(); + + switch ($action) + { + case 'edit': + + $items = []; + + $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) : ''; + } + + $items = $list; + } + else + { + $items = explode(',', $default); + + 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) : ''; + } + + $items = $list; + } + + $AVE_Template->assign('doc_id', $_REQUEST['Id']); + $AVE_Template->assign('field_dir', $fld_name); + $AVE_Template->assign('items', $items); + $AVE_Template->assign('field_id', $field_id); + + $tpl_file = get_field_tpl($tpl_dir, $field_id, 'admin'); + + return $AVE_Template->fetch($tpl_file); + break; + + case 'doc': + $items = 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 ($tpl_empty) + { + $list_item = $field_param; + } + else + { + $list_item = preg_replace_callback( + '/\[tag:parametr:(\d+)\]/i', + function($data) use($field_param) + { + return $field_param[(int)$data[1]]; + }, + $tpl + ); + } + } + + $res[] = $list_item; + } + } + + $tpl_file = get_field_tpl($tpl_dir, $field_id, 'doc'); + + if ($tpl_empty && $tpl_file) + { + $AVE_Template->assign('field_id', $field_id); + $AVE_Template->assign('field_value', $res); + $AVE_Template->assign('field_count', count($res)); + $AVE_Template->assign('default', $default); + + return $AVE_Template->fetch($tpl_file); + } + + return (! empty($res)) ? implode(PHP_EOL, $res) : $tpl; + break; + + case 'req': + $items = 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 ($tpl_empty) + { + $list_item = $field_param; + } + else + { + $list_item = preg_replace_callback( + '/\[tag:parametr:(\d+)\]/i', + function($data) use($field_param) + { + return $field_param[(int)$data[1]]; + }, + $tpl + ); + } + } + $res[] = $list_item; + } + } + + $tpl_file = get_field_tpl($tpl_dir, $field_id, 'req'); + + if ($tpl_empty && $tpl_file) + { + $AVE_Template->assign('field_id', $field_id); + $AVE_Template->assign('field_value', $res); + $AVE_Template->assign('field_count', count($res)); + $AVE_Template->assign('default', $default); + + return $AVE_Template->fetch($tpl_file); + } + + return (!empty($res)) ? implode(PHP_EOL, $res) : $tpl; + break; + + case 'save': + 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'] + ]; + } + } + + if (isset($field_value_new)) + { + return @serialize($field_value_new); + } + else + { + return $field_value_new = ''; + } + break; + + case 'api': + if (empty($field_value)) + return $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) : ''; + } + + $items = $list; + } + + return $items; + break; + + case 'name': + return $AVE_Template->get_config_vars('name'); + break; + + } + + return ($res ? $res : $field_value); + } +?> \ No newline at end of file diff --git a/fields/doc_files/js/field.js b/fields/doc_files/js/field.js new file mode 100644 index 0000000..06d3503 --- /dev/null +++ b/fields/doc_files/js/field.js @@ -0,0 +1,83 @@ +var DocFiles = { + + init: false, + + init: function() { + if (this.initialized) return; + this.initialized = true; + + this.lists(); + }, + + lists: function() { + this.lists_sortable(); + this.lists_del_item(); + this.lists_add(); + }, + + lists_update: function() { + this.lists_maxid(); + this.lists_del_item(); + AveAdmin.tooltip(); + }, + + lists_maxid: function(id) { + var maxid = 1; + $('#doc_files_' + id).children('.doc_file').each(function() { + maxid = Math.max(maxid, parseInt($(this).attr("data-id")) + 1); + }); + return maxid; + }, + + lists_del_item: function() { + $('.doc_file .DelButton').on('click', function(event) { + event.preventDefault(); + var id = $(this).attr('data-id'); + jConfirm( + links_del_conf, + links_del_head, + function(b) { + if (b) { + $('#link_' + id).remove(); + } + } + ); + }); + }, + + lists_add: function() { + $('.doc_files .AddButton').on('click', function(event) { + event.preventDefault(); + + c_id = $(this).parent().parent().parent('.doc_files').attr("data-id"); + iid = DocFiles.lists_maxid(c_id); + + $('#doc_files_' + c_id + ':last').append( + '' + ); + + DocFiles.lists_update(); + }); + }, + + lists_sortable: function() { + $('.doc_files').sortable({ + handle: ".handle", + placeholder: "ui-state-highlight grey_bg" + }); + } +} + +$(document).ready(function() { + DocFiles.init(); +}); \ No newline at end of file diff --git a/fields/doc_files/lang/ru.txt b/fields/doc_files/lang/ru.txt new file mode 100644 index 0000000..a3f7243 --- /dev/null +++ b/fields/doc_files/lang/ru.txt @@ -0,0 +1,9 @@ +[admin] +name = "Файлы документов" +delete = "Удалить элемент" +param_name = "Наименование" +param_desc = "Описание" +param_url = "Ссылка" +del_conf = "Вы уверены, что хотите удалить данный элемент?" +del_head = "Удаление элемента..." +add = "Добавить" \ No newline at end of file diff --git a/fields/doc_files/tpl/field-doc.tpl b/fields/doc_files/tpl/field-doc.tpl new file mode 100644 index 0000000..ef6968b --- /dev/null +++ b/fields/doc_files/tpl/field-doc.tpl @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/fields/doc_files/tpl/field-req.tpl b/fields/doc_files/tpl/field-req.tpl new file mode 100644 index 0000000..ef6968b --- /dev/null +++ b/fields/doc_files/tpl/field-req.tpl @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/fields/doc_files/tpl/field.tpl b/fields/doc_files/tpl/field.tpl new file mode 100644 index 0000000..903d04d --- /dev/null +++ b/fields/doc_files/tpl/field.tpl @@ -0,0 +1,33 @@ +{if $doc_files != load} + {assign var=doc_files value='' scope="global"} + + + + {assign var=doc_files value="load" scope="global"} +{/if} + +
+{foreach from=$items key=key item=item} + + + +{/foreach} +
\ No newline at end of file diff --git a/fields/doc_from_rub/field.php b/fields/doc_from_rub/field.php index b0a2e10..0f17a42 100644 --- a/fields/doc_from_rub/field.php +++ b/fields/doc_from_rub/field.php @@ -148,6 +148,10 @@ $res = $field_value; break; + case 'api': + return $field_value; + break; + case 'name': return $AVE_Template->get_config_vars('name'); break; diff --git a/fields/doc_from_rub_all/field.php b/fields/doc_from_rub_all/field.php index cfcfc74..aa7b1f8 100644 --- a/fields/doc_from_rub_all/field.php +++ b/fields/doc_from_rub_all/field.php @@ -137,6 +137,10 @@ $res = $field_value; break; + case 'api': + return $field_value; + break; + case 'name': return $AVE_Template->get_config_vars('name'); break; diff --git a/fields/doc_from_rub_check/field.php b/fields/doc_from_rub_check/field.php index 60495d3..fa6dab4 100644 --- a/fields/doc_from_rub_check/field.php +++ b/fields/doc_from_rub_check/field.php @@ -170,6 +170,10 @@ return (!empty($res)) ? implode(PHP_EOL, $res) : $tpl; break; + case 'api': + return $field_value; + break; + case 'name' : return $AVE_Template->get_config_vars('name'); break; diff --git a/fields/doc_from_rub_search/field.php b/fields/doc_from_rub_search/field.php index 9232794..de4a13d 100644 --- a/fields/doc_from_rub_search/field.php +++ b/fields/doc_from_rub_search/field.php @@ -172,6 +172,34 @@ return (! empty($res)) ? implode(PHP_EOL, $res) : $tpl; break; + case 'api' : + $items = []; + + if ($field_value != '' && $field_value != $default) + { + $items = explode('|', $field_value); + $items = array_values(array_diff($items, array(''))); + } + + if (! empty($items)) + { + foreach($items as $k => $v) + { + $list[$k]['param'] = htmlspecialchars_decode(get_document($v, 'document_title'), ENT_QUOTES); + $list[$k]['value'] = $v; + } + + $items = $list; + } + else + { + $items[0]['param'] = ''; + $items[0]['value'] = ''; + } + + return $items; + break; + case 'name' : return $AVE_Template->get_config_vars('name'); break; diff --git a/fields/download/field.php b/fields/download/field.php new file mode 100644 index 0000000..2077aff --- /dev/null +++ b/fields/download/field.php @@ -0,0 +1,81 @@ +config_load($lang_file, 'lang'); + $AVE_Template->assign('config_vars', $AVE_Template->get_config_vars()); + $AVE_Template->config_load($lang_file, 'admin'); + + $res=0; + + switch ($action) + { + case 'edit': + $field_value = !empty($field_value) ? htmlspecialchars($field_value, ENT_QUOTES) : ''; + + $AVE_Template->assign('field_id', $field_id); + $AVE_Template->assign('field_value', $field_value); + + $tpl_file = get_field_tpl($tpl_dir, $field_id, 'admin'); + + return $AVE_Template->fetch($tpl_file); + break; + + case 'doc': + $field_value = clean_php($field_value); + $field_param = explode('|', $field_value); + if ($tpl_empty) + { + $field_value = (!empty($field_param[1]) ? $field_param[1] . '
' : '') + . '
'; + } + else + { + $field_value = preg_replace_callback( + '/\[tag:parametr:(\d+)\]/i', + function($data) use($field_param) + { + return $field_param[(int)$data[1]]; + }, + $tpl + ); + } + $res = $field_value; + break; + + case 'req': + $res=get_field_default($field_value,$action,$field_id,$tpl,$tpl_empty,$maxlength,$document_fields,$rubric_id); + break; + + case 'api' : + return htmlspecialchars_decode($field_value, ENT_QUOTES); + break; + + case 'name' : + return $AVE_Template->get_config_vars('name'); + break; + } + + return ($res ? $res : $field_value); + } +?> \ No newline at end of file diff --git a/fields/download/lang/bg.txt b/fields/download/lang/bg.txt new file mode 100644 index 0000000..568adeb --- /dev/null +++ b/fields/download/lang/bg.txt @@ -0,0 +1,3 @@ +[admin] + +name = "Линк към файл" diff --git a/fields/download/lang/cz.txt b/fields/download/lang/cz.txt new file mode 100644 index 0000000..b7dcd65 --- /dev/null +++ b/fields/download/lang/cz.txt @@ -0,0 +1,2 @@ +[admin] +name = "Soubor ke stažení" diff --git a/fields/download/lang/en.txt b/fields/download/lang/en.txt new file mode 100644 index 0000000..4936e36 --- /dev/null +++ b/fields/download/lang/en.txt @@ -0,0 +1,2 @@ +[admin] +name = "Download file" diff --git a/fields/download/lang/pl.txt b/fields/download/lang/pl.txt new file mode 100644 index 0000000..7d0ef7d --- /dev/null +++ b/fields/download/lang/pl.txt @@ -0,0 +1,2 @@ +[admin] +name = "Pobierz plik" diff --git a/fields/download/lang/ru.txt b/fields/download/lang/ru.txt new file mode 100644 index 0000000..91e422e --- /dev/null +++ b/fields/download/lang/ru.txt @@ -0,0 +1,2 @@ +[admin] +name = "Загрузить файл" diff --git a/fields/download/lang/ua.txt b/fields/download/lang/ua.txt new file mode 100644 index 0000000..eef181e --- /dev/null +++ b/fields/download/lang/ua.txt @@ -0,0 +1,2 @@ +[admin] +name = "Завантажити файл" diff --git a/fields/download/tpl/field.tpl b/fields/download/tpl/field.tpl new file mode 100644 index 0000000..b0f38cc --- /dev/null +++ b/fields/download/tpl/field.tpl @@ -0,0 +1,7 @@ +
+ + +  +  +? \ No newline at end of file diff --git a/fields/drop_down/field.php b/fields/drop_down/field.php index 1dc2422..0917498 100644 --- a/fields/drop_down/field.php +++ b/fields/drop_down/field.php @@ -12,7 +12,7 @@ */ // Выпадающий список - function get_field_drop_down($field_value, $action, $field_id=0, $tpl='', $tpl_empty=0, &$maxlength=null, $document_fields=array(), $rubric_id=0, $default=null, $_tpl=null) + function get_field_drop_down($field_value, $action, $field_id=0, $tpl='', $tpl_empty=0, &$maxlength=null, $document_fields=array(), $rubric_id=0, $default=null) { global $AVE_Template; @@ -34,7 +34,7 @@ $items = explode(',', $default); $items = array_diff($items, array('')); - $tpl_file = get_field_tpl($tpl_dir, $field_id, 'admin', $_tpl); + $tpl_file = get_field_tpl($tpl_dir, $field_id, 'admin'); $AVE_Template->assign('items', $items); $AVE_Template->assign('field_id', $field_id); @@ -45,8 +45,7 @@ case 'doc': @$field_value = clean_php($field_value); - - if (! $tpl_empty) + if (!$tpl_empty) { $field_param = explode('|', $field_value); $field_value = preg_replace_callback( @@ -58,14 +57,12 @@ $tpl ); } - $res = $field_value; break; case 'req': @$field_value = clean_php($field_value); - - if (! $tpl_empty) + if (!$tpl_empty) { $field_param = explode('|', $field_value); $field_value = preg_replace_callback( @@ -77,10 +74,13 @@ $tpl ); } - $res = $field_value; break; + case 'api': + return $field_value; + break; + case 'name': return $AVE_Template->get_config_vars('name'); break; @@ -88,4 +88,4 @@ } return ($res ? $res : $field_value); } -?> \ No newline at end of file +?> diff --git a/fields/drop_down_key/field.php b/fields/drop_down_key/field.php index 34c149c..9d442d5 100644 --- a/fields/drop_down_key/field.php +++ b/fields/drop_down_key/field.php @@ -12,7 +12,7 @@ */ // Выпадающий список (Ключ) - function get_field_drop_down_key($field_value, $action, $field_id=0, $tpl='', $tpl_empty=0, &$maxlength=null, $document_fields=array(), $rubric_id=0, $default=null, $_tpl=null) + function get_field_drop_down_key($field_value, $action, $field_id=0, $tpl='', $tpl_empty=0, &$maxlength=null, $document_fields=array(), $rubric_id=0, $default=null) { global $AVE_Template; @@ -33,7 +33,7 @@ $items = explode(',', $default); $items = array_diff($items, array('')); - $tpl_file = get_field_tpl($tpl_dir, $field_id, 'admin', $_tpl); + $tpl_file = get_field_tpl($tpl_dir, $field_id, 'admin'); $AVE_Template->assign('items', $items); $AVE_Template->assign('field_id', $field_id); @@ -43,29 +43,81 @@ break; case 'doc': - case 'req': - @$field_value = clean_php($field_value); - - if (!$tpl_empty) + if ($tpl_empty) { - $field_param = explode('|', $field_value); - $field_value = preg_replace_callback( - '/\[tag:parametr:(\d+)\]/i', - function($data) use($field_param) - { - return $field_param[(int)$data[1]]; - }, - $tpl - ); + $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) + { + return $field_param[(int)$data[1]]; + }, + $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': + if ($tpl_empty) + { + $key = (int)$field_value; $items = explode(',', $default); $items = array_diff($items, array('')); - $field_value = $items[$field_value]; + $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) + { + return $field_param[(int)$data[1]]; + }, + $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); + } + + $res = $field_value; + break; - return $field_value = ($field_value != '') ? $field_value : ''; + case 'api': + return $field_value; break; case 'name': @@ -75,4 +127,4 @@ } return ($res ? $res : $field_value); } -?> \ No newline at end of file +?> diff --git a/fields/image_mega/field.php b/fields/image_mega/field.php index 559f252..a189920 100755 --- a/fields/image_mega/field.php +++ b/fields/image_mega/field.php @@ -318,6 +318,35 @@ break; + case 'api': + if (empty($field_value)) + return $field_value; + + $items = []; + + if (! empty($field_value)) + { + $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] : '') + ]; + } + } + + return $items; + break; + case 'name' : return $AVE_Template->get_config_vars('name'); break; diff --git a/fields/image_multi/field.php b/fields/image_multi/field.php index c32e933..4576baa 100755 --- a/fields/image_multi/field.php +++ b/fields/image_multi/field.php @@ -272,6 +272,33 @@ break; + case 'api': + if (empty($field_value)) + return $field_value; + + $items = []; + + if (! empty($field_value)) + { + $images = unserialize($field_value); + + if (! $images) + return false; + + foreach ($images AS $k => $v) + { + $_item = explode('|', $v); + + $items[$k] = [ + 'url' => $_item[0], + 'descr' => (isset($_item[1]) ? $_item[2] : ''), + ]; + } + } + + return $items; + break; + case 'name' : return $AVE_Template->get_config_vars('name'); break; diff --git a/fields/image_single/field.php b/fields/image_single/field.php index d2cb039..3c914fe 100644 --- a/fields/image_single/field.php +++ b/fields/image_single/field.php @@ -12,7 +12,7 @@ */ // Изображение - function get_field_image_single($field_value, $action, $field_id=0, $tpl='', $tpl_empty=0, &$maxlength=null, $document_fields=array(), $rubric_id=0, $default=null, $_tpl=null) + 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; @@ -64,21 +64,28 @@ { $field_value = preg_replace_callback( '/\[tag:parametr:(\d+)\]/i', - function($data) use ($field_param) + function($data) use($field_param) { return $field_param[(int)$data[1]]; }, $tpl ); - $field_value = preg_replace_callback('/\[tag:watermark:(.+?):([a-zA-Z]+):([0-9]+)\]/', 'watermarks', $field_value); + $field_value = preg_replace_callback( + '/\[tag:watermark:(.+?):([a-zA-Z]+):([0-9]+)\]/', + create_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); } - $tpl_file = get_field_tpl($tpl_dir, $field_id, 'doc', $_tpl); + $tpl_file = get_field_tpl ($tpl_dir, $field_id, 'doc', $_tpl); - if($tpl_empty && $tpl_file) + if ($tpl_empty && $tpl_file) { $AVE_Template->assign('image', $field_param); return $AVE_Template->fetch($tpl_file); @@ -91,6 +98,8 @@ $field_value = clean_php($field_value); $field_param = explode('|', $field_value); + $field_param['name'] = preg_replace('/\\.[^.\\s]{3,4}$/', '', $field_param[0]); + $field_param['ext'] = getExtension($field_param[0]); if ($tpl_empty) { @@ -101,14 +110,21 @@ { $field_value = preg_replace_callback( '/\[tag:parametr:(\d+)\]/i', - function($data) use ($field_param) + function($data) use($field_param) { return $field_param[(int)$data[1]]; }, $tpl ); - $field_value = preg_replace_callback('/\[tag:watermark:(.+?):([a-zA-Z]+):([0-9]+)\]/', 'watermarks', $field_value); + $field_value = preg_replace_callback( + '/\[tag:watermark:(.+?):([a-zA-Z]+):([0-9]+)\]/', + create_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); } @@ -117,7 +133,7 @@ $tpl_file = get_field_tpl($tpl_dir, $field_id, 'req', $_tpl); - if($tpl_empty && $tpl_file) + if ($tpl_empty && $tpl_file) { $AVE_Template->assign('image', $field_param); return $AVE_Template->fetch($tpl_file); @@ -137,6 +153,15 @@ } break; + case 'api': + if (empty($field_value)) + return $field_value; + + $image = explode('|', $field_value); + + return ['img' => $image[0], 'descr' => isset($image[1]) ? $image[1] : '']; + break; + case 'name' : return $AVE_Template->get_config_vars('name'); break; diff --git a/fields/link/field.php b/fields/link/field.php index ec9d622..0ab8bfa 100644 --- a/fields/link/field.php +++ b/fields/link/field.php @@ -90,6 +90,10 @@ $res = $field_value; break; + case 'api' : + return clean_php($field_value); + break; + case 'name' : return $AVE_Template->get_config_vars('name'); break; diff --git a/fields/link_multi/field.php b/fields/link_multi/field.php index f62c7eb..19a57d9 100644 --- a/fields/link_multi/field.php +++ b/fields/link_multi/field.php @@ -184,6 +184,28 @@ } break; + case 'api': + if (empty($field_value)) + return $field_value; + + $items = unserialize($field_value); + + if ($items != false) + { + + foreach($items as $k => $v){ + $list_item = explode('|', $v); + + $list[$k]['param'] = (isset($list_item[0])) ? htmlspecialchars($list_item[0], ENT_QUOTES) : ''; + $list[$k]['value'] = (isset($list_item[1])) ? htmlspecialchars($list_item[1], ENT_QUOTES) : ''; + } + + $items = $list; + } + + return $items; + break; + case 'name': return $AVE_Template->get_config_vars('name'); break; diff --git a/fields/multi_checkbox/field.php b/fields/multi_checkbox/field.php index 579e154..ff1e79b 100644 --- a/fields/multi_checkbox/field.php +++ b/fields/multi_checkbox/field.php @@ -153,11 +153,16 @@ function get_field_multi_checkbox($field_value, $action, $field_id=0, $tpl='', $ break; + case 'api': + return $field_value; + break; + case 'name': return $AVE_Template->get_config_vars('name'); break; } + return ($res ? $res : $field_value); } ?> \ No newline at end of file diff --git a/fields/multi_line/field.php b/fields/multi_line/field.php index 18c3ee6..23e99db 100644 --- a/fields/multi_line/field.php +++ b/fields/multi_line/field.php @@ -62,6 +62,10 @@ $res = get_field_default($field_value, $action, $field_id, $tpl, $tpl_empty, $maxlength, $document_fields, $rubric_id); break; + case 'api': + $res = get_field_default($field_value, $action, $field_id, $tpl, $tpl_empty, $maxlength, $document_fields, $rubric_id); + break; + case 'name' : return $AVE_Template->get_config_vars('name'); break; diff --git a/fields/multi_line_simple/field.php b/fields/multi_line_simple/field.php index a2bd923..b150b81 100644 --- a/fields/multi_line_simple/field.php +++ b/fields/multi_line_simple/field.php @@ -62,6 +62,10 @@ $res = get_field_default($field_value,$action,$field_id,$tpl,$tpl_empty,$maxlength,$document_fields,$rubric_id); break; + case 'api': + $res = get_field_default($field_value, $action, $field_id, $tpl, $tpl_empty, $maxlength, $document_fields, $rubric_id); + break; + case 'name' : return $AVE_Template->get_config_vars('name'); break; diff --git a/fields/multi_line_slim/field.php b/fields/multi_line_slim/field.php index abb1ade..fd0b81e 100644 --- a/fields/multi_line_slim/field.php +++ b/fields/multi_line_slim/field.php @@ -62,6 +62,10 @@ $res = get_field_default($field_value,$action,$field_id,$tpl,$tpl_empty,$maxlength,$document_fields,$rubric_id); break; + case 'api': + $res = get_field_default($field_value, $action, $field_id, $tpl, $tpl_empty, $maxlength, $document_fields, $rubric_id); + break; + case 'name' : return $AVE_Template->get_config_vars('name'); break; diff --git a/fields/multi_links/field.php b/fields/multi_links/field.php index 8a74709..1a74662 100644 --- a/fields/multi_links/field.php +++ b/fields/multi_links/field.php @@ -184,6 +184,28 @@ function get_field_multi_links($field_value, $action, $field_id=0, $tpl='', $tpl } break; + case 'api': + if (empty($field_value)) + return $field_value; + + $items = unserialize($field_value); + + if ($items != false) + { + + foreach($items as $k => $v){ + $list_item = explode('|', $v); + + $list[$k]['param'] = (isset($list_item[0])) ? htmlspecialchars_decode($list_item[0], ENT_QUOTES) : ''; + $list[$k]['value'] = (isset($list_item[1])) ? htmlspecialchars_decode($list_item[1], ENT_QUOTES) : ''; + } + + $items = $list; + } + + return $items; + break; + case 'name': return $AVE_Template->get_config_vars('name'); break; diff --git a/fields/multi_list/field.php b/fields/multi_list/field.php index 6d8442e..72156c0 100644 --- a/fields/multi_list/field.php +++ b/fields/multi_list/field.php @@ -184,6 +184,28 @@ } break; + case 'api': + if (empty($field_value)) + return $field_value; + + $items = unserialize($field_value); + + if ($items != false) + { + foreach($items as $k => $v) + { + $list_item = explode('|', $v); + + $list[$k]['param'] = (isset($list_item[0])) ? htmlspecialchars_decode($list_item[0], ENT_QUOTES) : ''; + $list[$k]['value'] = (isset($list_item[1])) ? htmlspecialchars_decode($list_item[1], ENT_QUOTES) : ''; + } + + $items = $list; + } + + return $items; + break; + case 'name': return $AVE_Template->get_config_vars('name'); break; diff --git a/fields/multi_list_single/field.php b/fields/multi_list_single/field.php index 0718e76..842da1a 100644 --- a/fields/multi_list_single/field.php +++ b/fields/multi_list_single/field.php @@ -167,6 +167,13 @@ } break; + case 'api': + if (empty($field_value)) + return $field_value; + + return unserialize($field_value); + break; + case 'name': return $AVE_Template->get_config_vars('name'); break; diff --git a/fields/multi_list_triple/field.php b/fields/multi_list_triple/field.php index 5502b05..050487d 100644 --- a/fields/multi_list_triple/field.php +++ b/fields/multi_list_triple/field.php @@ -189,6 +189,30 @@ } break; + case 'api': + if (empty($field_value)) + return $field_value; + + $items = unserialize($field_value); + + if ($items != false) + { + + foreach($items as $k => $v) + { + $list_item = explode('|', $v); + + $list[$k]['param'] = (isset($list_item[0])) ? htmlspecialchars_decode($list_item[0], ENT_QUOTES) : ''; + $list[$k]['value'] = (isset($list_item[1])) ? htmlspecialchars_decode($list_item[1], ENT_QUOTES) : ''; + $list[$k]['value2'] = (isset($list_item[2])) ? htmlspecialchars_decode($list_item[2], ENT_QUOTES) : ''; + } + + $items = $list; + } + + return $items; + break; + case 'name': return $AVE_Template->get_config_vars('name'); break; diff --git a/fields/multi_select/field.php b/fields/multi_select/field.php index d877d66..4b093fa 100644 --- a/fields/multi_select/field.php +++ b/fields/multi_select/field.php @@ -148,6 +148,13 @@ return (!empty($res)) ? implode(PHP_EOL, $res) : $tpl; break; + case 'api': + if (empty($field_value)) + return $field_value; + + return unserialize($field_value); + break; + case 'name': return $AVE_Template->get_config_vars('name'); break; diff --git a/fields/rubrics/field.php b/fields/rubrics/field.php index b700869..bc7a030 100644 --- a/fields/rubrics/field.php +++ b/fields/rubrics/field.php @@ -73,6 +73,10 @@ function get_field_rubrics($field_value, $action, $field_id = 0, $tpl = '', $tpl $res = $field_value; break; + case 'api': + return $field_value; + break; + case 'name': return $AVE_Template->get_config_vars('name'); break; diff --git a/fields/single_line/field.php b/fields/single_line/field.php index be8c512..487d48a 100644 --- a/fields/single_line/field.php +++ b/fields/single_line/field.php @@ -113,6 +113,9 @@ case 'save': return $field_value; + case 'api': + return $field_value; + case 'name': return $AVE_Template->get_config_vars('name'); diff --git a/fields/single_line_numeric/field.php b/fields/single_line_numeric/field.php index 4be1485..5f7e96b 100644 --- a/fields/single_line_numeric/field.php +++ b/fields/single_line_numeric/field.php @@ -106,6 +106,9 @@ $field_value = preg_replace('/[^\d.]/','',$field_value); return $field_value; + case 'api': + return $field_value; + case 'name': return $AVE_Template->get_config_vars('name'); diff --git a/fields/single_line_numeric_three/field.php b/fields/single_line_numeric_three/field.php index 0a6d36b..ac85871 100644 --- a/fields/single_line_numeric_three/field.php +++ b/fields/single_line_numeric_three/field.php @@ -125,6 +125,12 @@ return empty($save) ? '' : implode('|', $save); + case 'api': + if (! empty($field_value)) + $field_value = explode('|', $field_value); + + return $field_value; + case 'name': return $AVE_Template->get_config_vars('name'); diff --git a/fields/single_line_numeric_two/field.php b/fields/single_line_numeric_two/field.php index 2f90c99..94b3d57 100644 --- a/fields/single_line_numeric_two/field.php +++ b/fields/single_line_numeric_two/field.php @@ -125,6 +125,12 @@ return empty($save) ? '' : implode('|', $save); + case 'api': + if (! empty($field_value)) + $field_value = explode('|', $field_value); + + return $field_value; + case 'name': return $AVE_Template->get_config_vars('name'); diff --git a/fields/tags/field.php b/fields/tags/field.php index 6d05fec..43fb7fc 100644 --- a/fields/tags/field.php +++ b/fields/tags/field.php @@ -161,6 +161,14 @@ return $field_value; + case 'api': + if (! empty($field_value)) + { + $field_value = explode('|', $field_value); + $field_value = array_diff($field_value, ['']); + } + return $field_value; + case 'name': return $AVE_Template->get_config_vars('name'); diff --git a/fields/teasers/field.php b/fields/teasers/field.php index 3429ce7..a2fac27 100644 --- a/fields/teasers/field.php +++ b/fields/teasers/field.php @@ -90,6 +90,13 @@ case 'req': return get_field_default($field_value, $action, $field_id, $tpl, $tpl_empty); + case 'api' : + if (! empty($field_value)) + return unserialize($field_value); + + return $field_value; + break; + case 'name' : return $AVE_Template->get_config_vars('name'); break; diff --git a/fields/text_to_image/field.php b/fields/text_to_image/field.php index 4905048..d4c3896 100644 --- a/fields/text_to_image/field.php +++ b/fields/text_to_image/field.php @@ -119,6 +119,9 @@ case 'name': return $AVE_Template->get_config_vars('name'); + case 'api': + return $field_value; + default: return $field_value; } } diff --git a/fields/youtube/field.php b/fields/youtube/field.php index 1860728..96efd84 100644 --- a/fields/youtube/field.php +++ b/fields/youtube/field.php @@ -134,6 +134,23 @@ } break; + case 'api': + if (empty($field_value)) + return $field_value; + + $_video = explode('|', $field_value); + + $video = [ + 'url' => (isset($_video[0]) ? $_video[0] : ''), + 'width' => (isset($_video[1]) ? $_video[1] : ''), + 'height' => (isset($_video[2]) ? $_video[2] : ''), + 'fullscreen' => (isset($_video[3]) ? $_video[3] : ''), + 'source' => (isset($_video[4]) ? $_video[4] : '') + ]; + + return $video; + break; + // Тип/Имя поля в административной части case 'name' : return $AVE_Template->get_config_vars('name'); diff --git a/functions/func.common.php b/functions/func.common.php index 181da9e..d9e8894 100755 --- a/functions/func.common.php +++ b/functions/func.common.php @@ -1116,6 +1116,9 @@ if (defined('HTML_COMPRESSION') && HTML_COMPRESSION) $data = compress_htlm($data); + if (isset($_REQUEST['sysblock'])) + define('ONLYCONTENT', true); + //-- Вывод статистики загрузки и запросов SQL (только для администраторов) if (! defined('ONLYCONTENT') && UGROUP == 1) { @@ -1380,7 +1383,7 @@ return false; } - if (!function_exists('getExtension')) + if (! function_exists('getExtension')) { function getExtension($path) { diff --git a/functions/func.documents.php b/functions/func.documents.php index da2729c..9812292 100644 --- a/functions/func.documents.php +++ b/functions/func.documents.php @@ -87,26 +87,32 @@ if ($doc_id < 1) return []; - +/* if (defined('USE_STATIC_DATA') && USE_STATIC_DATA) static $get_documents_data = []; else $get_documents_data = []; +*/ - if (! isset ($get_documents_data[$doc_id])) - { - $get_documents_data[$doc_id] = getDocument($doc_id); - $get_documents_data[$doc_id] = object2array($get_documents_data[$doc_id]); + if (! (Registry::stored('documents', $doc_id))) + $documents_data = getDocument($doc_id); + else + $documents_data = Registry::get('documents', $doc_id); - $get_documents_data[$doc_id]['doc_title'] = $get_documents_data[$doc_id]['document_title'] = htmlspecialchars_decode($get_documents_data[$doc_id]['document_title'], ENT_QUOTES); - $get_documents_data[$doc_id]['feld'] = []; - } + if (! is_object($documents_data)) + return false; + + $documents_data = object2array($documents_data); + + $documents_data['doc_title'] = $documents_data['document_title'] = htmlspecialchars_decode($documents_data['document_title'], ENT_QUOTES); + + $documents_data['feld'] = []; if (isset($key) && $key != '') - return $get_documents_data[$doc_id][$key]; + return $documents_data[$key]; else - return $get_documents_data[$doc_id]; + return $documents_data; } @@ -121,11 +127,16 @@ { global $AVE_DB; + if (! defined('USE_STATIC_DATA') || ! USE_STATIC_DATA) + Registry::clean(); + $doc_id = (int)$doc_id; if ($doc_id < 1) return false; + $documents = Registry::get('documents'); + $sql = " SELECT # DOCUMENT = $doc_id @@ -145,7 +156,16 @@ $data = $AVE_DB->Query($sql, $cache_time, 'dat_' . $doc_id, true, '.data')->FetchRow(); - return $data; + if (! is_object($data)) + return false; + + $documents[$data->Id] = $data; + + Registry::set('documents', $documents); + + unset ($documents); + + return Registry::get('documents', $doc_id); } diff --git a/functions/func.fields.php b/functions/func.fields.php index 7fcaa5d..12e8078 100644 --- a/functions/func.fields.php +++ b/functions/func.fields.php @@ -155,19 +155,16 @@ * @param $id * @return string */ - function get_field_alias ($id) + function get_field_alias ($field_id) { - global $AVE_DB, $fields_data; + if (! Registry::stored('fields_params', $field_id)) + _get_field_params($field_id); - if (! isset($fields_data)) - static $fields_data = []; + $alias = Registry::get('fields_params', $field_id); - if (isset($fields_data[$id])) - return $fields_data[$id]['alias']; + $alias = $alias['rubric_field_alias'] ? $alias['rubric_field_alias'] : $field_id; - $fields_data[$id]['alias'] = $AVE_DB->Query("SELECT rubric_field_alias FROM " . PREFIX . "_rubric_fields WHERE Id=" . intval($id))->GetCell(); - - return $fields_data[$id]['alias']; + return $alias; } @@ -247,29 +244,29 @@ * * @return string */ - function get_field_tpl($dir = '', $field_id = 0, $type = 'admin', $_tpl = null) + function get_field_tpl ($dir = '', $field_id = 0, $type = 'admin', $_tpl = null) { if (! $type) return false; $alias_field_id = get_field_alias($field_id); - // Если существет файл с ID поля и ID шаблона + // Если существует файл с ID поля и ID шаблона if (file_exists($dir.'field-'.$type.'-'.$field_id.'-'.$_tpl.'.tpl')) $tpl = $dir.'field-'.$type.'-'.$field_id.'-'.$_tpl.'.tpl'; - // Если существет файл с аласом поля и ID шаблона + // Если существует файл с аласом поля и ID шаблона else if (file_exists($dir.'field-'.$type.'-'.$alias_field_id.'-'.$_tpl.'.tpl')) $tpl = $dir.'field-'.$type.'-'.$alias_field_id.'-'.$_tpl.'.tpl'; - // Если существет файл с ID поля + // Если существует файл с ID поля else if (file_exists($dir.'field-'.$type.'-'.$field_id.'.tpl')) $tpl = $dir.'field-'.$type.'-'.$field_id.'.tpl'; - // Если существет файл с алиасом поля + // Если существует файл с алиасом поля else if (file_exists($dir.'field-'.$type.'-'.$alias_field_id.'.tpl')) $tpl = $dir.'field-'.$type.'-'.$alias_field_id.'.tpl'; - // Если существет файл c типом поля + // Если существует файл c типом поля else if (file_exists($dir.'field-'.$type.'.tpl')) $tpl = $dir.'field-'.$type.'.tpl'; - // Если существет файл c ID поля + // Если существует файл c ID поля else if (file_exists($dir.'field-'.$field_id.'.tpl')) $tpl = $dir.'field-'.$field_id.'.tpl'; // Иначе @@ -393,7 +390,10 @@ */ function get_document_field ($document_id, $field) { - $document_fields = get_document_fields($document_id); + if (Registry::stored($document_id, $field)) + $document_fields = Registry::get($document_id, $field); + else + $document_fields = get_document_fields($document_id); if (! is_array($document_fields[$field])) $field = intval($document_fields[$field]); @@ -417,25 +417,30 @@ */ function get_document_fields ($document_id, $values = null) { - global $AVE_DB, $AVE_Core, $fields_data; //$request_documents - - if (defined('USE_STATIC_DATA') && USE_STATIC_DATA) - static $document_fields = []; - else - $document_fields = []; + global $AVE_DB, $AVE_Core; //$request_documents if (! is_numeric($document_id)) return false; - static $rubric_changed_fields = []; + if (! defined('USE_STATIC_DATA') || ! USE_STATIC_DATA) + Registry::clean(); + + if (Registry::stored('fields', $document_id)) + return Registry::get('fields', $document_id); + + $document_fields = Registry::get('fields'); + $fields_param = Registry::get('fields_param'); + + if (Registry::stored('rubric_changeds')) + $rubric_changed_fields = Registry::get('rubric_changeds'); + else + $rubric_changed_fields = get_rubrics_changes(); if (! isset($AVE_Core) || $AVE_Core->curentdoc->Id != $document_id) { - if (! isset($rubric_changed_fields[$document_id])) - $rubric_id = get_document($document_id, 'rubric_id'); - $rubric_changed_fields[$document_id] = get_rubrics_changes($rubric_id, 'rubric_changed_fields'); + $rubric_id = get_document($document_id, 'rubric_id'); - $cache_time = $rubric_changed_fields[$document_id]; + $cache_time = $rubric_changed_fields[$rubric_id]['rubric_changed_fields']; } else { @@ -459,9 +464,11 @@ doc_field.rubric_field_id, doc_field.field_value, text_field.field_value AS field_value_more, + rub_field.rubric_id, rub_field.rubric_field_alias, rub_field.rubric_field_type, rub_field.rubric_field_default, + rub_field.rubric_field_numeric, rub_field.rubric_field_title, rub_field.rubric_field_template, rub_field.rubric_field_template_request @@ -518,7 +525,9 @@ $row['field_value'] = (string)$row['field_value'] . (string)$row['field_value_more']; if ($values) - $row['field_value'] = (isset($values[$row['rubric_field_id']]) ? $values[$row['rubric_field_id']] : $row['field_value']); + $row['field_value'] = (isset($values[$row['rubric_field_id']]) + ? $values[$row['rubric_field_id']] + : $row['field_value']); if ($row['field_value'] === '') { @@ -537,14 +546,49 @@ $row['rubric_field_template'] = trim(str_replace(['[tag:if_notempty]','[/tag:if_notempty]'], '', $row['rubric_field_template'])); } - $document_fields[$row['document_id']][$row['rubric_field_id']] = $row; + + //$document_fields[$row['document_id']][$row['rubric_field_id']] = $row; $document_fields[$row['document_id']][$row['rubric_field_alias']] = $row['rubric_field_id']; - - $fields_data[$row['rubric_field_id']]['alias'] = $row['rubric_field_alias']; + + + $document_fields[$document_id][$row['rubric_field_id']] = [ + 'Id' => $row['Id'], + 'document_id' => $row['document_id'], + 'document_author_id' => $row['document_author_id'], + 'rubric_field_id' => $row['rubric_field_id'], + 'field_value' => $row['field_value'], + 'field_value_more' => $row['field_value_more'], + 'tpl_req_empty' => $row['tpl_req_empty'], + 'tpl_field_empty' => $row['tpl_field_empty'], + 'rubric_id' => $row['rubric_id'], + 'rubric_field_alias' => $row['rubric_field_alias'], + 'rubric_field_type' => $row['rubric_field_type'], + 'rubric_field_default' => $row['rubric_field_default'], + 'rubric_field_numeric' => $row['rubric_field_numeric'], + 'rubric_field_title' => $row['rubric_field_title'], + 'rubric_field_template' => $row['rubric_field_template'], + 'rubric_field_template_request' => $row['rubric_field_template_request'], + ]; + + $fields_param[$row['rubric_field_id']] = [ + 'rubric_id' => $row['rubric_id'], + 'rubric_field_alias' => $row['rubric_field_alias'], + 'rubric_field_type' => $row['rubric_field_type'], + 'rubric_field_default' => $row['rubric_field_default'], + 'rubric_field_numeric' => $row['rubric_field_numeric'], + 'rubric_field_title' => $row['rubric_field_title'], + ]; } } - return $document_fields[$document_id]; + Registry::set('fields', $document_fields); + + if (! Registry::stored('fields_param', $row['rubric_field_id'])) + Registry::set('fields_param', $fields_param); + + unset ($document_fields, $rubric_changed_fields, $fields_param); + + return Registry::get('fields', $document_id); } @@ -791,6 +835,55 @@ } + /** + * Возвращает параметры поля + * + * @param int $field_id ([tag:fld:X]) - номер поля + * + * @return void + */ + function _get_field_params ($field_id) + { + global $AVE_DB; + + if (Registry::stored('fields_params', $field_id)) + return Registry::get('fields_params', $field_id); + + $fields_param = Registry::get('fields_params'); + + $query = " + SELECT + rubric_id, + rubric_field_alias, + rubric_field_type, + rubric_field_default, + rubric_field_numeric, + rubric_field_title + FROM + " . PREFIX . "_rubric_fields + WHERE + Id = '" . $field_id . "' + LIMIT 0,1 + # FIELDS PARAMS = $field_id + "; + + $row = $AVE_DB->Query($query)->FetchAssocArray(); + + $fields_param[$field_id] = [ + 'rubric_id' => $row['rubric_id'], + 'rubric_field_alias' => $row['rubric_field_alias'], + 'rubric_field_type' => $row['rubric_field_type'], + 'rubric_field_default' => $row['rubric_field_default'], + 'rubric_field_numeric' => $row['rubric_field_numeric'], + 'rubric_field_title' => $row['rubric_field_title'], + ]; + + Registry::set('fields_params', $fields_param); + + unset ($query, $row, $fields_param); + } + + /** * Возвращает поле документа по номеру * diff --git a/functions/func.parserequest.php b/functions/func.parserequest.php index 257a41f..e2e6e8e 100755 --- a/functions/func.parserequest.php +++ b/functions/func.parserequest.php @@ -19,7 +19,7 @@ * * @return string */ - function request_get_settings($id) + function request_get_settings ($id) { global $AVE_DB; @@ -53,7 +53,7 @@ * * @return array */ - function request_get_condition_sql_string($id, $update_db = false) + function request_get_condition_sql_string ($id, $update_db = false) { global $AVE_DB, $AVE_Core; @@ -270,6 +270,7 @@ $document_fields = get_document_fields($document_id); + // ToDo if (! is_array($document_fields[$field_id])) $field_id = intval($document_fields[$field_id]); @@ -325,7 +326,7 @@ $maxlength = abs($maxlength); } - // ToDo - сделать настройки окончаний + // ToDo - сделать настройки окончаний = Уже есть в Доп настройках if ($maxlength != 0) { $field_value = truncate($field_value, $maxlength, REQUEST_ETC, REQUEST_BREAK_WORDS); @@ -339,7 +340,7 @@ return $field_value; } - function showteaser($id, $tparams = '') + function showteaser ($id, $tparams = '') { $item = showrequestelement($id, '', $tparams); $item = str_replace('[tag:path]', ABS_PATH, $item); @@ -350,7 +351,7 @@ // Функция получения уникальных параметров для каждого тизера - function f_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]; @@ -358,7 +359,7 @@ // Функция получения элемента запроса - function showrequestelement($mixed, $template = '', $tparams = '') + function showrequestelement ($mixed, $template = '', $tparams = '') { global $AVE_DB, @@ -388,7 +389,7 @@ if ($tparams != '') { $tparams_id = $row->Id . md5($tparams); // Создаем уникальный id для каждого набора параметров - $params_of_teaser[$tparams_id] = []; // Для отмены лишних ворнингов + $params_of_teaser[$tparams_id] = []; // Для отмены лишних ворнингов $tparams = trim($tparams,'[]:'); // Удаляем: слева ':[', справа ']' $params_of_teaser[$tparams_id] = explode('|',$tparams); // Заносим параметры в массив уникального id } @@ -610,7 +611,11 @@ // Кол-во просмотров $item = str_replace('[tag:docviews]', $row->document_count_view, $item); - unset($row); + Registry::remove('documents', $row->Id); + Registry::remove('fields', $row->Id); + Registry::remove('fields_param', $row->Id); + + unset($row, $template); return $item; } @@ -625,7 +630,7 @@ * * @return string */ - function request_parse($id, $params = []) + function request_parse ($id, $params = []) { global $AVE_Core, $AVE_DB, $request_documents; @@ -862,7 +867,7 @@ $sql = " ?> SELECT STRAIGHT_JOIN SQL_CALC_FOUND_ROWS #REQUEST = $request->Id - a.* + a.Id " . $request_select_str . " FROM " . $where_cond['from'] . " @@ -1060,7 +1065,7 @@ Debug::startTime('ELEMENTS_ALL'); - foreach ($rows as $row) + foreach ($rows AS $row) { $x++; $last_item = ($x == $items_count ? true : false); @@ -1069,7 +1074,7 @@ Debug::startTime('ELEMENT_' . $item_num); - $item = showrequestelement($row, $request->request_template_item); + $item = showrequestelement($row->Id, $request->request_template_item); $GLOBALS['block_generate']['REQUESTS'][$id]['ELEMENTS'][$item_num] = Debug::endTime('ELEMENT_' . $item_num); @@ -1085,6 +1090,10 @@ $item = str_replace('[tag:/if]', '<'.'?php } ?>', $item); $item = str_replace('[tag:if_else]', '<'.'?php }else{ ?>', $item); $items .= $item; + + Registry::remove('documents', $row->Id); + Registry::remove('fields', $row->Id); + Registry::remove('fields_param', $row->Id); } $GLOBALS['block_generate']['REQUESTS'][$id]['ELEMENTS']['ALL'] = Debug::endTime('ELEMENTS_ALL'); @@ -1208,7 +1217,7 @@ * содержимое поля будет очищено от HTML-тегов. * @return string */ - function request_get_document_field_value($rubric_id, $document_id, $maxlength = 0) + function request_get_document_field_value ($rubric_id, $document_id, $maxlength = 0) { if (! is_numeric($rubric_id) || $rubric_id < 1 || ! is_numeric($document_id) || $document_id < 1) return ''; diff --git a/functions/func.rubrics.php b/functions/func.rubrics.php index bb34c1e..a6a841a 100644 --- a/functions/func.rubrics.php +++ b/functions/func.rubrics.php @@ -3,15 +3,14 @@ /** * Функция отдает время когда менялась рубрика или ее поля * - * @param int $rubric_id - * @param int $var - * - * @return mixed */ - function get_rubrics_changes ($rubric_id = null, $var = '') + function get_rubrics_changes () { global $AVE_DB; + if (Registry::stored('rubric_changes')) + return Registry::get('rubric_changes'); + $cache_file = BASE_DIR . '/tmp/cache/sql/rubrics/all/rubrics.cahnges'; // Если включен DEV MODE, то отключаем кеширование запросов @@ -47,16 +46,8 @@ file_put_contents($cache_file, serialize($rubrics)); } - if ($rubric_id > 0) - { - if (! empty($var)) - return $rubrics[$rubric_id][$var]; - else - return $rubrics[$rubric_id]; - } - else - { - return $rubrics; - } + Registry::set('rubric_changes', $rubrics); + + return Registry::get('rubric_changes'); } ?> \ No newline at end of file diff --git a/functions/func.sysblock.php b/functions/func.sysblock.php index f869bed..fe25ba0 100644 --- a/functions/func.sysblock.php +++ b/functions/func.sysblock.php @@ -180,7 +180,7 @@ " . (is_numeric($id) ? 'id' : 'sysblock_alias') . " = '" . $id . "' "; - $sys_block = $AVE_DB->Query($sql, -1, 'sysblocks/' . $id . '/')->FetchAssocArray(); + $sys_block = $AVE_DB->Query($sql, -1, 'sysblocks/' . $id)->FetchAssocArray(); } if ($param == '') diff --git a/inc/config.php b/inc/config.php index 49c6fea..f602e5c 100755 --- a/inc/config.php +++ b/inc/config.php @@ -12,7 +12,7 @@ */ define('APP_NAME', 'AVE.cms'); - define('APP_VERSION', '3.27'); + define('APP_VERSION', '3.28'); define('APP_INFO', 'Ave-Cms.Ru '.'© 2007-' . date('Y')); $themes = []; diff --git a/inc/init.php b/inc/init.php index 782be20..7d232a1 100644 --- a/inc/init.php +++ b/inc/init.php @@ -24,6 +24,10 @@ if (PHP_DEBUGGING_FILE && ! defined('ACP')) include_once BASE_DIR . '/inc/errors.php'; + //-- Registry + require(BASE_DIR . '/class/class.registry.php'); + Registry::init(); + //-- Debug Class require(BASE_DIR . '/class/class.debug.php'); new Debug; @@ -230,7 +234,7 @@ //-- Шаблоны write_htaccess_deny(BASE_DIR . '/templates/' . DEFAULT_THEME_FOLDER . '/include/'); - global $AVE_DB, $fields_data; + global $AVE_DB; //-- Класс для работы с MySQL (Global $AVE_DB) require_once (BASE_DIR . '/class/class.database.php'); diff --git a/inc/thumb.php b/inc/thumb.php index 3f4ba3a..d46dd54 100644 --- a/inc/thumb.php +++ b/inc/thumb.php @@ -131,9 +131,6 @@ if ($_SERVER['REQUEST_URI'] == '/inc/thumb.php') die('No image'); - //-- Базовая папка - $baseDir = str_replace('\\', '/', dirname(dirname(__FILE__))); - //-- Если файл существует, показываем его if (file_exists(BASE_DIR . $imagefile)) { @@ -167,7 +164,7 @@ exit(0); } - $thumbPath = $baseDir . '/' . UPLOAD_DIR . '/' . $thumbPath; + $thumbPath = BASE_DIR . '/' . UPLOAD_DIR . '/' . $thumbPath; $imagePath = $lenThumbDir ? dirname($thumbPath) : $thumbPath; $thumbName = basename($imagefile); @@ -254,7 +251,7 @@ $imageName = 'noimage.png'; if (! file_exists("$imagePath/$imageName")) - $imagePath = $baseDir . '/' . UPLOAD_DIR . '/images'; + $imagePath = BASE_DIR . '/' . UPLOAD_DIR . '/images'; if (! file_exists("$imagePath/$imageName")) exit(0); @@ -264,7 +261,7 @@ define('IMAGE_TOOLBOX_DEFAULT_JPEG_QUALITY', JPG_QUALITY); - require $baseDir . '/class/class.thumbnail.php'; + require BASE_DIR . '/class/class.thumbnail.php'; $thumb = new Image_Toolbox("$imagePath/$imageName"); diff --git a/index.php b/index.php index b5f2055..9f7d719 100755 --- a/index.php +++ b/index.php @@ -6,7 +6,7 @@ * @package AVE.cms * @version 3.x * @filesource - * @copyright © 2007-2016 AVE.cms, http://www.ave-cms.ru + * @copyright © 2007-2020 AVE.cms, https://ave-cms.ru * * @license GPL v.2 */ @@ -114,6 +114,8 @@ unset ($content); + Registry::clean(); + //-- Ловим 404 ошибку if (isset($_REQUEST['id']) AND ($_REQUEST['id']) == PAGE_NOT_FOUND_ID) { @@ -172,4 +174,3 @@ //-- Вывод конечного результата output_compress($render); -?> \ No newline at end of file