diff --git a/admin/lang/ru/dbactions.txt b/admin/lang/ru/dbactions.txt index 4ab8f08..959a16a 100644 --- a/admin/lang/ru/dbactions.txt +++ b/admin/lang/ru/dbactions.txt @@ -45,3 +45,4 @@ DB_ACTIONS_DELETE_H = "Удалить файл" DB_ACTIONS_DELETE_T = "Вы уверены, что хотите удалить файл резервной копии базы данных?" DB_NO_FILES_MESS = "В настоящий момент, нет файлов резервных копий базы данных" +DB_BACKUP_FILE_NAME = "Имя файла:" \ No newline at end of file diff --git a/admin/lang/ru/request.txt b/admin/lang/ru/request.txt index eec323c..4fe4d2f 100644 --- a/admin/lang/ru/request.txt +++ b/admin/lang/ru/request.txt @@ -193,4 +193,7 @@ REQUEST_OTHER = "Прочее" REQUEST_SHOW_SQL = "Показать SQL запрос" REQUEST_DOC_ON_PAGE = "Число элементов запроса на странице" REQUEST_PAGES_CURENT = "Номер страницы пагинации" -REQUEST_PAGES_TOTAL = "Общее кол-во страниц пагинации" \ No newline at end of file +REQUEST_PAGES_TOTAL = "Общее кол-во страниц пагинации" + +// v 3.24 +REQUEST_COUNT_ITEMS = "Получать кол-во элементов (если не используется постраничная навигация)" \ No newline at end of file diff --git a/admin/settings.php b/admin/settings.php index 21c108a..bea299e 100644 --- a/admin/settings.php +++ b/admin/settings.php @@ -1,186 +1,186 @@ config_load(BASE_DIR . '/admin/lang/' . $_SESSION['admin_language'] . '/settings.txt','settings'); - -switch($_REQUEST['action']) -{ - case '': - switch ($_REQUEST['sub']) - { - case '': - if(check_permission_acp('gen_settings')) + /** + * AVE.cms + * + * @package AVE.cms + * @version 3.x + * @filesource + * @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru + * + * @license GPL v.2 + */ + + if (!defined('ACP')) + { + header('Location:index.php'); + exit; + } + + global $AVE_Template; + + require(BASE_DIR . '/class/class.docs.php'); + require(BASE_DIR . '/class/class.settings.php'); + $AVE_Settings = new AVE_Settings; + $AVE_Document = new AVE_Document; + + $AVE_Template->config_load(BASE_DIR . '/admin/lang/' . $_SESSION['admin_language'] . '/settings.txt','settings'); + + switch($_REQUEST['action']) + { + case '': + switch ($_REQUEST['sub']) { - $AVE_Settings->settingsShow(); - break; - } - - case 'case': - if(check_permission_acp('gen_settings_more')) - { - $AVE_Settings->settingsCase(); - break; - } + case '': + if(check_permission_acp('gen_settings')) + { + $AVE_Settings->settingsShow(); + break; + } - case 'save': - if (isset($_REQUEST['more'])) { - if(check_permission_acp('gen_settings_more')) $AVE_Settings->settingsCase(); - } else { - if(check_permission_acp('gen_settings')) $AVE_Settings->settingsSave(); + case 'case': + if(check_permission_acp('gen_settings_more')) + { + $AVE_Settings->settingsCase(); + break; } - break; - case 'countries': - if(check_permission_acp('gen_settings_countries')) - { - if (isset($_REQUEST['save']) && $_REQUEST['save'] == 1) + case 'save': + if (isset($_REQUEST['more'])) { + if(check_permission_acp('gen_settings_more')) $AVE_Settings->settingsCase(); + } else { + if(check_permission_acp('gen_settings')) $AVE_Settings->settingsSave(); + } + break; + + case 'countries': + if(check_permission_acp('gen_settings_countries')) { - $AVE_Settings->settingsCountriesSave(); + if (isset($_REQUEST['save']) && $_REQUEST['save'] == 1) + { + $AVE_Settings->settingsCountriesSave(); - header('Location:index.php?do=settings&sub=countries&cp=' . SESSION); - exit; + header('Location:index.php?do=settings&sub=countries&cp=' . SESSION); + exit; + } + $AVE_Settings->settingsCountriesList(); + break; } - $AVE_Settings->settingsCountriesList(); - break; - } - case 'language': - if(check_permission_acp('gen_settings_languages')) - { - if(isset($_REQUEST['func'])){ - switch($_REQUEST['func']) - { - case 'default': - if(isset($_REQUEST['Id'])){ - $exists=$AVE_DB->Query("SELECT Id FROM ".PREFIX."_settings_lang WHERE Id=".(int)$_REQUEST['Id'])->GetCell(); - if($exists){ - $AVE_DB->Query("UPDATE ".PREFIX."_settings_lang SET lang_default=0"); - $AVE_DB->Query("UPDATE ".PREFIX."_settings_lang SET lang_default=1 WHERE Id=".(int)$_REQUEST['Id']." LIMIT 1"); + case 'language': + if(check_permission_acp('gen_settings_languages')) + { + if(isset($_REQUEST['func'])){ + switch($_REQUEST['func']) + { + case 'default': + if(isset($_REQUEST['Id'])){ + $exists=$AVE_DB->Query("SELECT Id FROM ".PREFIX."_settings_lang WHERE Id=".(int)$_REQUEST['Id'])->GetCell(); + if($exists){ + $AVE_DB->Query("UPDATE ".PREFIX."_settings_lang SET lang_default=0"); + $AVE_DB->Query("UPDATE ".PREFIX."_settings_lang SET lang_default=1 WHERE Id=".(int)$_REQUEST['Id']." LIMIT 1"); + } } - } - header('Location:index.php?do=settings&sub=language&cp=' . SESSION); - exit; - - case 'on': - if(isset($_REQUEST['Id'])){ - $AVE_DB->Query("UPDATE ".PREFIX."_settings_lang SET lang_status=1 WHERE Id=".(int)$_REQUEST['Id']); - } - header('Location:index.php?do=settings&sub=language&cp=' . SESSION); - exit; - - case 'off': - if(isset($_REQUEST['Id'])){ - $AVE_DB->Query("UPDATE ".PREFIX."_settings_lang SET lang_status=0 WHERE Id=".(int)$_REQUEST['Id']); - } - header('Location:index.php?do=settings&sub=language&cp=' . SESSION); - exit; - - case 'save': - $AVE_Settings->settingsLanguageEditSave(); - exit; + header('Location:index.php?do=settings&sub=language&cp=' . SESSION); + exit; + + case 'on': + if(isset($_REQUEST['Id'])){ + $AVE_DB->Query("UPDATE ".PREFIX."_settings_lang SET lang_status=1 WHERE Id=".(int)$_REQUEST['Id']); + } + header('Location:index.php?do=settings&sub=language&cp=' . SESSION); + exit; + + case 'off': + if(isset($_REQUEST['Id'])){ + $AVE_DB->Query("UPDATE ".PREFIX."_settings_lang SET lang_status=0 WHERE Id=".(int)$_REQUEST['Id']); + } + header('Location:index.php?do=settings&sub=language&cp=' . SESSION); + exit; + + case 'save': + $AVE_Settings->settingsLanguageEditSave(); + exit; + } + } + else + { + $AVE_Settings->settingsLanguageList(); + break; } } - else + + case 'editlang': + if (check_permission_acp('gen_settings_languages')) { - $AVE_Settings->settingsLanguageList(); + $AVE_Settings->settingsLanguageEdit(); break; } - } - case 'editlang': - if(check_permission_acp('gen_settings_languages')) - { - $AVE_Settings->settingsLanguageEdit(); - break; - } + case 'clearcache': + if (check_permission_acp('cache_clear')) + { + $AVE_Template->CacheClear(); + exit; + } - case 'clearcache': - if(check_permission_acp('cache_clear')) - { - $AVE_Template->CacheClear(); - exit; - } + case 'clearthumb': + if (check_permission_acp('cache_thumb')) + { + $AVE_Template->ThumbnailsClear(); + exit; + } - case 'clearthumb': - if(check_permission_acp('cache_thumb')) - { - $AVE_Template->ThumbnailsClear(); - exit; - } + case 'clearrevision': + if (check_permission_acp('document_revisions')) + { + $AVE_Document->documentsRevisionsClear(); + exit; + } - case 'clearrevision': - if(check_permission_acp('document_revisions')) - { - $AVE_Document->documentsRevisionsClear(); - exit; - } + case 'clearcounter': + if (check_permission_acp('gen_settings')) + { + $AVE_Document->documentCounterClear(); + exit; + } - case 'clearcounter': - if(check_permission_acp('gen_settings')) - { - $AVE_Document->documentCounterClear(); - exit; + case 'showcache': + cacheShow(); + exit; } - - case 'showcache': - cacheShow(); - exit; - } - break; - - //-- v3.2 - case 'paginations': - $AVE_Settings->settingsPaginationsList(); - break; - - case 'new_paginations': - $AVE_Settings->settingsPaginationsNew(); - break; - - case 'edit_paginations': - $AVE_Settings->settingsPaginationsEdit(); - break; - - case 'save_paginations': - $AVE_Settings->settingsPaginationsSave(); - break; - - case 'del_paginations': - $AVE_Settings->settingsPaginationsDel(); - break; - //-- v3.2 - - //-- v3.24 - case 'robots': - $AVE_Settings->editRobots(); - break; - - case 'custom': - $AVE_Settings->editCustom(); - break; - //-- v3.24 -} + break; + + //-- v3.2 + case 'paginations': + $AVE_Settings->settingsPaginationsList(); + break; + + case 'new_paginations': + $AVE_Settings->settingsPaginationsNew(); + break; + + case 'edit_paginations': + $AVE_Settings->settingsPaginationsEdit(); + break; + + case 'save_paginations': + $AVE_Settings->settingsPaginationsSave(); + break; + + case 'del_paginations': + $AVE_Settings->settingsPaginationsDel(); + break; + //-- v3.2 + + //-- v3.24 + case 'robots': + $AVE_Settings->editRobots(); + break; + + case 'custom': + $AVE_Settings->editCustom(); + break; + //-- v3.24 + } ?> \ No newline at end of file diff --git a/admin/templates/dbactions/actions.tpl b/admin/templates/dbactions/actions.tpl index 1076ac3..c77f24f 100644 --- a/admin/templates/dbactions/actions.tpl +++ b/admin/templates/dbactions/actions.tpl @@ -53,6 +53,14 @@
+ + + {#DB_BACKUP_FILE_NAME#} + + + + +
diff --git a/admin/templates/modules/modules.tpl b/admin/templates/modules/modules.tpl index 290d220..c1ed028 100644 --- a/admin/templates/modules/modules.tpl +++ b/admin/templates/modules/modules.tpl @@ -128,7 +128,7 @@ $(document).ready(function(){ldelim} - {if $module.status} + {if $module.ModuleStatus} {else} diff --git a/admin/templates/request/form.tpl b/admin/templates/request/form.tpl index afc8e17..ca000c4 100644 --- a/admin/templates/request/form.tpl +++ b/admin/templates/request/form.tpl @@ -288,8 +288,10 @@ function changeRub(select) {ldelim} + {#REQUEST_COUNT_ITEMS#} + request_count_items == '1'} checked="checked"{/if} /> {#REQUEST_USE_QUERY#} - request_use_query == '1'} checked="checked"{/if} /> + request_use_query == '1'} checked="checked"{/if} /> diff --git a/admin/templates/rubs/_field_code.tpl b/admin/templates/rubs/_field_code.tpl index c49f2c5..6ff32f2 100755 --- a/admin/templates/rubs/_field_code.tpl +++ b/admin/templates/rubs/_field_code.tpl @@ -50,6 +50,7 @@
+ {if $params.id} diff --git a/admin/templates/rubs/form.tpl b/admin/templates/rubs/form.tpl index e2763e7..cefcf44 100644 --- a/admin/templates/rubs/form.tpl +++ b/admin/templates/rubs/form.tpl @@ -6,7 +6,7 @@
{#RUBRIK_TEMPLATE_EDIT#}
- {#RUBRIC_TMPLS_BUTTON#} + {#RUBRIC_TMPLS_BUTTON#}
{/if} diff --git a/admin/templates/rubs/tmpls.tpl b/admin/templates/rubs/tmpls.tpl index 157bd71..fc08788 100644 --- a/admin/templates/rubs/tmpls.tpl +++ b/admin/templates/rubs/tmpls.tpl @@ -36,7 +36,7 @@ $(document).ready(function(){ldelim}
{#RUBRIC_TMPLS_HEAD#}
- {#RUBRIK_EDIT_TEMPLATE#} + {#RUBRIK_EDIT_TEMPLATE#}
@@ -90,7 +90,7 @@ $(document).ready(function(){ldelim}
  • {#RUBRIC_TMPLS_HEAD#}
  • {if check_permission('rubric_edit')}
  • {#RUBRIC_TMPLS_ADD#}
  • {/if}
    - {#RUBRIC_TMPLS_FROM#} + {#RUBRIC_TMPLS_FROM#}
    diff --git a/admin/templates/settings/pagination_edit.tpl b/admin/templates/settings/pagination_edit.tpl index 31dade3..2c33550 100644 --- a/admin/templates/settings/pagination_edit.tpl +++ b/admin/templates/settings/pagination_edit.tpl @@ -33,12 +33,6 @@
    -{if $smarty.const.SYSTEM_CACHE_LIFETIME > 0} - -{/if} -
    -{if $smarty.const.SYSTEM_CACHE_LIFETIME > 0} - -{/if} -
    +
    diff --git a/admin/templates/settings/settings_pagination.tpl b/admin/templates/settings/settings_pagination.tpl index e7dc982..bf6b1eb 100644 --- a/admin/templates/settings/settings_pagination.tpl +++ b/admin/templates/settings/settings_pagination.tpl @@ -28,12 +28,6 @@
    -{if $smarty.const.SYSTEM_CACHE_LIFETIME > 0} - -{/if} -
      {if check_permission('gen_settings')}
    • {#SETTINGS_MAIN_SETTINGS#}
    • {/if} diff --git a/class/class.core.php b/class/class.core.php index 2a2e246..7ab658d 100755 --- a/class/class.core.php +++ b/class/class.core.php @@ -108,21 +108,21 @@ if (is_numeric($template_id)) { - $cache = 'template_' . $template_id; - - $cache_file = BASE_DIR . '/tmp/cache/templates/' . $cache . '.inc'; + $cache_file = BASE_DIR . '/templates/' . DEFAULT_THEME_FOLDER . '/include/templates/' . $template_id . '/template.inc'; // Если включен DEV MODE, то отключаем кеширование if (defined('DEV_MODE') AND DEV_MODE) $cache_file = null; - if (! file_exists(dirname($cache_file))) - mkdir(dirname($cache_file), 0766, true); + if (! is_dir(dirname($cache_file))) + @mkdir(dirname($cache_file), 0766, true); - if (file_exists($cache_file)) + // Если файл есть и он не пустой используем его + if (file_exists($cache_file) && filesize($cache_file)) { $return = file_get_contents($cache_file); } + // Иначе лезем в БД и достаем шаблон else { $return = $AVE_DB->Query(" @@ -137,6 +137,7 @@ $return = stripslashes($return); + // Сохраняем в файл if ($cache_file) file_put_contents($cache_file, $return); } @@ -434,22 +435,6 @@ } - /** - * Метод, предназначенный для формирования хэша страницы - * - * @return string - */ - function _get_cache_hash() - { - $hash = 'g-' . UGROUP; - $hash .= 'r-' . RUB_ID; - $hash .= 'u-' . get_redirect_link(); - $hash .= 't-' . $this->curentdoc->rubric_tmpl_id; - - return md5($hash); - } - - /** * Метод, предназначенный для проверки существования документа в БД * @@ -747,12 +732,6 @@ $main_content ); - // Удаляем ошибочные теги полей документа в шаблоне рубрики - $main_content = preg_replace('/\[tag:watermark:\w*\]/', '', $main_content); - $main_content = preg_replace('/\[tag:fld:\d*\]/', '', $main_content); - $main_content = preg_replace('/\[tag:doc:\w*\]/', '', $main_content); - $main_content = preg_replace('/\[tag:langfile:\w*\]/', '', $main_content); - // парсим теги в шаблоне рубрики $main_content = preg_replace_callback( '/\[tag:date:([a-zA-Z0-9-. \/]+)\]/', @@ -769,47 +748,132 @@ if (preg_match('[tag:docauthor]', $main_content)) $main_content = str_replace('[tag:docauthor]', get_username_by_id($this->curentdoc->document_author_id), $main_content); - if (CACHE_DOC_TPL && empty($_POST)) + // Удаляем ошибочные теги полей документа в шаблоне рубрики + $main_content = preg_replace('/\[tag:watermark:\w*\]/', '', $main_content); + $main_content = preg_replace('/\[tag:fld:\w*\]/', '', $main_content); + $main_content = preg_replace('/\[tag:doc:\w*\]/', '', $main_content); + $main_content = preg_replace('/\[tag:langfile:\w*\]/', '', $main_content); + + //-- Кеширование скомпилированного документа + $this->setCompileDocument($main_content); + + return $main_content; + } + + + /** + * Метод, предназначенный для формирования хэша страницы + * + * @return string + */ + function _get_cache_hash() + { + $hash = 'g-' . UGROUP; // Группа пользователей + $hash .= 'r-' . RUB_ID; // ID Рубрики + $hash .= 't-' . $this->curentdoc->rubric_tmpl_id; // Шаблон рубрики + //$hash .= 'u-' . get_redirect_link(); // ToDo + + return md5($hash); + } + + + function _get_cache_id() + { + $cache = array(); + + $cache['id'] = (int)$this->curentdoc->Id; + + if (! $cache['id']) + return false; + + $cache['id'] = (int)$cache['id']; + $cache['id'] = 'documents/compiled/' . (floor($cache['id'] / 1000)) . '/' . $cache['id']; + + $cache['file'] = $this->_get_cache_hash() . '.compiled'; + + if (! $cache['file']) + return false; + + $cache['dir'] = BASE_DIR . '/tmp/cache/sql/' . (trim($cache['id']) > '' + ? trim($cache['id']) . '/' + : substr($cache['file'], 0, 2) . '/' . substr($cache['file'], 2, 2) . '/' . substr($cache['file'], 4, 2) . '/'); + + return $cache; + } + + + function setCompileDocument ($main_content) + { + $cache = $this->_get_cache_id(); + + if (! $cache) + return false; + + //-- Удаляем файл, если существует + if (file_exists($cache['dir'] . $cache['file'])) + unlink($cache['dir'] . $cache['file']); + + // Если включен DEV MODE, то отключаем кеширование запросов + if (defined('DEV_MODE') AND DEV_MODE) + return false; + + //-- Кэширование разрешено + if (defined('CACHE_DOC_TPL') && CACHE_DOC_TPL) { - $cache_id = (int)$this->curentdoc->Id; - $cache_id = 'compiled/' . (floor($cache_id / 1000)) . '/' . $cache_id; + //-- Если нет папки, создаем + if (! is_dir($cache['dir'])) + @mkdir($cache['dir'], 0766, true); - $cache_file = $this->_get_cache_hash(); + //-- Сохраняем скомпилированный шаблон в кэш + file_put_contents($cache['dir'] . $cache['file'], $main_content); + } - $cache_dir = BASE_DIR . '/tmp/cache/sql/' . (trim($cache_id) > '' - ? trim($cache_id) . '/' - : substr($cache_file, 0, 2) . '/' . substr($cache_file, 2, 2) . '/' . substr($cache_file, 4, 2) . '/'); + return true; + } - // кэширование разрешено - // сохраняем скомпилированный шаблон в кэш - if (CACHE_DOC_FILE) - { - if (! is_dir($cache_dir)) - mkdir($cache_dir, 0766, true); - file_put_contents($cache_dir . $cache_file, $main_content); - } + function getCompileDocument () + { + $cache = $this->_get_cache_id(); - // кэширование разрешено - // сохраняем скомпилированный шаблон в кэш - $AVE_DB->Query(" - INSERT INTO - " . PREFIX . "_rubric_template_cache - SET - hash = '" . $cache_file . "', - rub_id = '" . RUB_ID . "', - rub_tmpl_id = '" . $this->curentdoc->rubric_tmpl_id . "', - grp_id = '" . UGROUP . "', - doc_id = '" . $id . "', - compiled = '" . addslashes($main_content) . "' - "); + if (! $cache) + return false; + + $content = false; + + //-- Если нет папки, создаем + if (! is_dir($cache['dir'])) + @mkdir($cache['dir'], 0766, true); + + //-- Получаем сразу поля + get_document_fields((int)$this->curentdoc->Id); - unset ($cache_id, $cache_file, $cache_dir); + // Наличие файла + if (file_exists($cache['dir'] . $cache['file'])) + { + // Получаем время создания файла + $file_time = filemtime($cache['dir'] . $cache['file']); + + // Получаем время для проверки + $cache_time = $this->curentdoc->rubric_changed; + + if (! $cache_time || $cache_time > $file_time) + { + unlink ($cache['dir'] . $cache['file']); + } + else if (defined('CACHE_DOC_TPL') && CACHE_DOC_TPL) + // Извлекаем скомпилированный шаблон документа из кэша + $content = file_get_contents($cache['dir'] . $cache['file']); } + else + { + $content = false; + } - return $main_content; + return $content; } + /** * Метод, предназначенный для обработки системных тегов модулей. Здесь подключаются только те файлы модулей, * системные теги которых обнаружены в шаблоне при парсинге. Также формирует массив всех установленных модулей @@ -1119,44 +1183,12 @@ } } - if (CACHE_DOC_TPL && empty ($_POST)) - { - // Кэширование разрешено - // Извлекаем скомпилированный шаблон документа из кэша - // Если там пусто, пробуем достать из бд - - $cache_id = (int)$this->curentdoc->Id; - $cache_id = 'compiled/' . (floor($cache_id / 1000)) . '/' . $cache_id; - - $cache_file = $this->_get_cache_hash(); - - $cache_dir = BASE_DIR . '/tmp/cache/sql/' . (trim($cache_id) > '' - ? trim($cache_id) . '/' - : substr($cache_file, 0, 2) . '/' . substr($cache_file, 2, 2) . '/' . substr($cache_file, 4, 2) . '/'); - - if (CACHE_DOC_FILE && file_exists($cache_dir . $cache_file)) - { - $main_content = file_get_contents($cache_dir . $cache_file); - } - else - { - $main_content = $AVE_DB->Query(" - SELECT - compiled - FROM - " . PREFIX . "_rubric_template_cache - WHERE - hash = '" . $cache_file . "' - LIMIT 1 - ")->GetCell(); - } - - unset($cache_dir, $cache_file, $cache_id); - } + // Извлекаем скомпилированный шаблон документа из кэша + if (defined('CACHE_DOC_TPL') && CACHE_DOC_TPL) // && empty ($_POST) + $main_content = $this->getCompileDocument(); else - { // Кэширование запрещено + // Кэширование запрещено $main_content = false; - } // Собираем контент // Если в кеше нет контента, то @@ -1203,15 +1235,11 @@ // Собираем шаблон рубрики if (empty($rubTmpl)) - { // Если не задан шаблон рубрики, выводим сообщение $main_content = $this->_rubric_template_empty; - } else - { // Обрабатываем основные поля рубрики $main_content = $this->_main_content($main_content, $id, $rubTmpl); - } } } @@ -1253,7 +1281,7 @@ // Парсим поля запроса $out = preg_replace_callback( - '/\[tag:rfld:([a-zA-Z0-9-_]+)]\[(more|esc|img|[0-9-]+)]/', + '/\[tag:rfld:([a-zA-Z0-9-_]+)]\[(more|esc|img|strip|[0-9-]+)]/', create_function( '$m', 'return request_get_document_field($m[1], ' . $id . ', $m[2], ' . (defined('RUB_ID') ? RUB_ID : 0) . ');' @@ -1262,7 +1290,7 @@ ); // Удаляем ошибочные теги полей документа в шаблоне рубрики - $out = preg_replace('/\[tag:rfld:\d*\]/', '', $out); + $out = preg_replace('/\[tag:rfld:\w*\]/', '', $out); // Если в GET запросе пришел параметр print, т.е. страница для печати, // парсим контент, который обрамлен тегами только для печати @@ -1544,7 +1572,7 @@ { global $AVE_DB; - // Если нужны параметры GET, можно отключить + //-- Если нужны параметры GET, можно отключить $get_url = (strpos($get_url, ABS_PATH . '?') === 0 ? '' : $get_url); @@ -1555,15 +1583,18 @@ $get_url = rawurldecode($get_url); $get_url = mb_substr($get_url, strlen(ABS_PATH)); - // Сохранение старого урла для првоерки использования суффикса - $test_url = $get_url; + //-- Сохранение старого урла для првоерки использования суффикса + $check_url = $get_url; if (mb_substr($get_url, - strlen(URL_SUFF)) == URL_SUFF) { $get_url = mb_substr($get_url, 0, - strlen(URL_SUFF)); } - // Разбиваем строку параметров на отдельные части + //-- Ложный URL + $fake_url = false; + + //-- Разбиваем строку параметров на отдельные части $get_url = explode('/', $get_url); if (isset ($get_url['index'])) @@ -1577,7 +1608,7 @@ unset ($get_url['print']); } - // Определяем, используется ли у нас разделение документа по страницам + //-- Определяем, используется ли у нас разделение документа по страницам $pages = preg_grep('/^(a|art)?page-\d+$/i', $get_url); if (! empty ($pages)) @@ -1594,18 +1625,62 @@ $pages ); } - // В противном случае формируем окончательную ссылку для документа + //-- В противном случае формируем окончательную ссылку для документа else { $get_url = implode('/', $get_url); } + //-- Страница тегов + preg_match('/^tags(|(\/.*))+$/is', $get_url, $match); + + //-- Если есть совпадение с tag + if ($match) + { + //-- Смотрим условие + if (isset($match[2])) + { + //-- Отрезаем лишнее + $matches = trim($match[2], '/'); + + //-- Разбиваем + $matches = explode('/', $matches); + + //-- Берем первое значение + $matches = urldecode(array_shift($matches)); + + //-- Если значение не равно пусто + if ($matches != '') + { + //-- Передаем в _GET условие tag + $_GET['tag'] = $_REQUEST['tag'] = $matches; + + //-- Парсим query strings + parse_str($_SERVER['QUERY_STRING'], $query_string); + + //-- Назначаем условие + $query_string['tag'] = $matches; + + //-- Пересобираем QUERY_STRING + $_SERVER['QUERY_STRING'] = http_build_query($query_string); + + //-- Назначаем URL + $get_url = 'tags'; + + //-- Инициализируем ложный URL + $fake_url = true; + } + } + } + //-- Экранируем поступающий URL $get_url = $AVE_DB->ClearUrl($get_url); //-- Проверяем есть ли данный URL в таблице алиасов модулей $sql = " SELECT + # MODULE LINK + document_id, module_name, module_action, module_link @@ -1615,18 +1690,24 @@ module_url = '" . str_ireplace("'", "\'", $get_url) . "' "; - $query = $AVE_DB->Query($sql)->FetchRow(); + $module = $AVE_DB->Query($sql)->FetchAssocArray(); - if ($query) + if ($module) { //-- Передаем глобальные перемененные - $_GET['module'] = $_REQUEST['module'] = $query->module_name; - $_GET['action'] = $_REQUEST['action'] = $query->module_action; + $_GET['module'] = $_REQUEST['module'] = $module['module_name']; + $_GET['action'] = $_REQUEST['action'] = $module['module_action']; - $get_url = ABS_PATH . $query->module_link; + $get_url = ABS_PATH . $module['module_link']; + + //-- Если есть document_id, назначем его + if ($module['document_id']) + $_REQUEST['id'] = (int)$module['document_id']; } - // проверка на наличие id в запросе + unset ($sql, $module); + + //-- Проверка на наличие id в запросе if (! empty($_REQUEST['id'])) { $get_url = $AVE_DB->Query(" @@ -1646,67 +1727,98 @@ ? intval($_REQUEST['id']) : 1); - // Забираем нужные данные + //-- Забираем нужные данные $sql = " SELECT - doc.*, - rubric_permission, - rubric_template, - rubric_meta_gen, - rubric_template_id, - rub.rubric_header_template, - rub.rubric_footer_template, - rub.rubric_start_code, - other.template + # URL FETCH = $get_url + * FROM - " . PREFIX . "_documents AS doc - JOIN - " . PREFIX . "_rubrics AS rub - ON rub.Id = doc.rubric_id - JOIN - " . PREFIX . "_rubric_permissions AS prm - ON doc.rubric_id = prm.rubric_id - LEFT JOIN - " . PREFIX . "_rubric_templates AS other - ON doc.rubric_id = other.rubric_id AND doc.rubric_tmpl_id = other.id + " . PREFIX . "_documents WHERE - user_group_id = '" . UGROUP . "' - AND " . (! empty ($get_url) && ! isset($_REQUEST['module']) ? "document_alias = '" . str_ireplace("'", "\'", $get_url) . "'" : (! empty($_REQUEST['id']) - ? "doc.Id =" . intval($_REQUEST['id']) - : "doc.Id = 1")) . " + ? "Id =" . intval($_REQUEST['id']) + : "Id = 1")) . " LIMIT 1 "; $hash_url = md5($get_url); - $query = $AVE_DB->Query($sql, CACHE_DOC_SQL, 'url_' . $hash_url); + $cache_time = 0; + + if (defined('CACHE_DOC_FILE') && CACHE_DOC_FILE) + $cache_time = -1; + else + $AVE_DB->clearCacheUrl('url_' . $hash_url); + + $this->curentdoc = $AVE_DB->Query($sql, $cache_time, 'url_' . $hash_url, true, '.fetch')->FetchRow(); - if ($this->curentdoc = $query->FetchRow()) + if ($this->curentdoc) { + // Получить шаблон рубрики + $sql = " + SELECT STRAIGHT_JOIN + # FETCH RUB = " . $this->curentdoc->rubric_id . " + prm.rubric_permission, + rub.rubric_template, + rub.rubric_meta_gen, + rub.rubric_template_id, + rub.rubric_header_template, + rub.rubric_footer_template, + rub.rubric_start_code, + rub.rubric_changed, + rub.rubric_changed_fields, + other.template + FROM + " . PREFIX . "_rubrics AS rub + LEFT JOIN + " . PREFIX . "_rubric_permissions AS prm + ON rub.Id = prm.rubric_id + LEFT JOIN + " . PREFIX . "_rubric_templates AS other + ON (rub.Id = other.rubric_id AND other.id = '" . $this->curentdoc->rubric_tmpl_id . "') + WHERE + prm.user_group_id = '" . UGROUP . "' + AND + rub.Id = '" . $this->curentdoc->rubric_id . "' + "; + + $query = $AVE_DB->Query($sql, $cache_time, 'rub_' . $this->curentdoc->rubric_id, true, '.fetch')->FetchRow(); + + $this->curentdoc = (object) array_merge((array) $query, (array) $this->curentdoc); + if ($this->curentdoc->rubric_tmpl_id != 0) { $this->curentdoc->rubric_template = (($this->curentdoc->template != '') ? $this->curentdoc->template : $this->curentdoc->rubric_template); - unset($this->curentdoc->template); + unset ($this->curentdoc->template); } - // Глобальные переменные + //-- Глобальные переменные $_GET['id'] = $_REQUEST['id'] = $this->curentdoc->Id; $_GET['doc'] = $_REQUEST['doc'] = $this->curentdoc->document_alias; - // Назначаем язык пользователю, в завивисомтси от языка документа + //-- Назначаем язык пользователю, в завивисомтси от языка документа if ($this->curentdoc->Id != PAGE_NOT_FOUND_ID OR $this->curentdoc->document_lang == '--') $_SESSION['user_language'] = $this->curentdoc->document_lang; - // Перенаправление на адреса с суффиксом + //-- Если есть ложный URL указываем его + if ($fake_url) + { + $check_url = preg_replace('/\/(a|art)?page-\d/i', '', $check_url); + + $_GET['doc'] = $_REQUEST['doc'] = $check_url; + $this->curentdoc->document_alias = $check_url; + $get_url = $check_url; + } + + //-- Перенаправление на адреса с суффиксом if ( - $test_url !== $get_url . URL_SUFF - && ! $pages && $test_url + $check_url !== $get_url . URL_SUFF + && ! $pages && $check_url && ! $_REQUEST['print'] && ! $_REQUEST['module'] && ! $_REQUEST['tag'] @@ -1716,21 +1828,20 @@ header('HTTP/1.1 301 Moved Permanently'); if ($this->curentdoc->Id == 1) - { header('Location:' . ABS_PATH); - exit(); - } else - { header('Location:' . ABS_PATH . $get_url . URL_SUFF); - exit(); - } + + exit(); } } else { + $AVE_DB->clearCacheUrl('url_' . $hash_url); + $sql = " SELECT + # REDIRECT = $get_url a.document_alias FROM ".PREFIX."_document_alias_history AS h, @@ -1743,12 +1854,11 @@ $redirect_alias = $AVE_DB->Query($sql)->GetCell(); - $redirect_alias = ABS_PATH . $redirect_alias . URL_SUFF; - - $redirect_alias = str_replace('//', '/', $redirect_alias); - - if (! empty($redirect_alias)) + if ($redirect_alias && ! empty($redirect_alias)) { + $redirect_alias = ABS_PATH . $redirect_alias . URL_SUFF; + $redirect_alias = str_replace('//', '/', $redirect_alias); + header('HTTP/1.1 301 Moved Permanently'); header('Location:' . $redirect_alias); exit(); diff --git a/class/class.database.php b/class/class.database.php index 3277633..079ed5a 100755 --- a/class/class.database.php +++ b/class/class.database.php @@ -400,6 +400,10 @@ */ public $_last_query; + + //-- Instance + protected static $instance = null; + /** * Конструктор * @@ -415,12 +419,12 @@ $this->db_password = $db['dbpass']; $this->db_prefix = $db['dbpref']; - if(!isset($db['dbport'])) + if (! isset($db['dbport'])) $this->db_port = ini_get ('mysqli.default_port'); else $this->db_port = (isset($db['dbport']) ? $db['dbport'] : null); - if(!isset($db['dbsock'])) + if (! isset($db['dbsock'])) $this->db_socket = ini_get ('mysqli.default_socket'); else $this->db_port = (isset($db['dbsock']) ? $db['dbsock'] : null); @@ -511,9 +515,9 @@ * @param $db * @return object возвращает инстанс данного класса. */ - public static function getInstance($db = array()) + public static function getInstance ($config = array()) { - return new self($db); + return new self($config); } @@ -767,27 +771,83 @@ } - public function cacheFile($cache_id) + public function cacheId($cache_id) { - // Если это документ, то меняем расположение + //-- Если это документ, то меняем расположение if (substr($cache_id, 0, 3) == 'doc') { $cache_id = (int)str_replace('doc_', '', $cache_id); - $cache_id = 'doc/' . (floor($cache_id / 1000)) . '/' . $cache_id; + return $cache_id = 'documents/' . (floor($cache_id / 1000)) . '/' . $cache_id; + } + + //-- Если это полный документ, то меняем расположение + if (substr($cache_id, 0, 3) == 'dat') + { + $cache_id = (int)str_replace('dat_', '', $cache_id); + return $cache_id = 'documents/data/' . (floor($cache_id / 1000)) . '/' . $cache_id; } - // Если это + //-- Если это скомпилированный шаблон документа, то меняем расположение + if (substr($cache_id, 0, 3) == 'cmd') + { + $cache_id = (int)str_replace('cmd_', '', $cache_id); + return $cache_id = 'documents/compiled/' . (floor($cache_id / 1000)) . '/' . $cache_id; + } + + //-- Если это поля документа, то меняем расположение + if (substr($cache_id, 0, 3) == 'fld') + { + $cache_id = (int)str_replace('fld_', '', $cache_id); + return $cache_id = 'documents/fields/' . (floor($cache_id / 1000)) . '/' . $cache_id; + } + + //-- Сборка страницы if (substr($cache_id, 0, 3) == 'url') { $cache_id = str_replace('url_', '', $cache_id); - $cache_id = 'url/' . substr($cache_id, 0, 3); + return $cache_id = 'documents/urls/' . substr($cache_id, 0, 3); + } + + //-- Если это хлебные крошки, то меняем расположение + if (substr($cache_id, 0, 3) == 'brd') + { + $cache_id = (int)str_replace('brd_', '', $cache_id); + return $cache_id = 'documents/breadcrumbs/' . (floor($cache_id / 1000)) . '/' . $cache_id; + } + + //-- Если это рубрика, то меняем расположение + if (substr($cache_id, 0, 3) == 'rub') + { + $cache_id = (int)str_replace('rub_', '', $cache_id); + return $cache_id = 'rubrics/' . $cache_id; } - // Если это + //-- Если это запрос, то меняем расположение + if (substr($cache_id, 0, 3) == 'req') + { + $cache_id = (int)str_replace('req_', '', $cache_id); + return $cache_id = 'requests/' . $cache_id; + } + + //-- Если это элемент запроса, то меняем расположение + if (substr($cache_id, 0, 3) == 'rqe') + { + $cache_id = (int)str_replace('rqe_', '', $cache_id); + return $cache_id = 'requests/elements/' . (floor($cache_id / 1000)) . '/' . $cache_id; + } + + //-- Если это настройки запроса, то меняем расположение + if (substr($cache_id, 0, 3) == 'rqs') + { + $cache_id = str_replace('rqs_', '', $cache_id); + return $cache_id = 'requests/settings/' . $cache_id; + } + + // -- Навигация if (substr($cache_id, 0, 3) == 'nav') { - $cache_id = str_replace('nav_', '', $cache_id); - $cache_id = 'nav/' . substr($cache_id, 0, 3); + $cache_id = explode('_', $cache_id); + return $cache_id = 'navigations/' . $cache_id[1]; } return $cache_id; @@ -803,9 +863,9 @@ * @param bool $log - записать ошибки в лог? по умолчанию включено * @return array - асоциативный массив с результом запроса */ - public function Query($query, $TTL = null, $cache_id = '', $log = true) + public function Query ($query, $TTL = null, $cache_id = '', $log = true, $ext = '') { - $cache_id = $this->cacheFile($cache_id); + $cache_id = $this->cacheId($cache_id); // Принудительная фильтрация запроса if (defined(SQL_QUERY_SANITIZE) && SQL_QUERY_SANITIZE) @@ -824,7 +884,7 @@ if ($TTL && ($TTL != 'nocache' AND $TTL != null)) { - $cache_file = md5($query); + $cache_file = md5($query) . $ext; $cache_dir = BASE_DIR . '/tmp/cache/sql/' . (trim($cache_id) > '' ? trim($cache_id) . '/' @@ -833,13 +893,6 @@ if (! file_exists($cache_dir)) mkdir($cache_dir, 0766, true); - // Если стоит в настройках, запоминать все запросы - if (defined('SQL_PROFILING') && SQL_PROFILING) - { - $_caller = $this->getCaller(); - $this->_query_list[] = array('caller' => $_caller, 'query' => $query, 'ttl' => $TTL, 'cache' => $cache_dir . $cache_file); - } - if (! (file_exists($cache_dir . $cache_file) && ($TTL == -1 ? true : time() - filemtime($cache_dir . $cache_file) < $TTL))) { $res = $this->Real_Query($query, $log); @@ -851,6 +904,19 @@ } else { + // Если стоит в настройках, запоминать все запросы + if (defined('SQL_PROFILING') && SQL_PROFILING) + { + $_caller = $this->getCaller(); + + $this->_query_list[] = array( + 'caller' => $_caller, + 'query' => $query, + 'ttl' => $TTL, + 'cache' => $cache_dir . $cache_file + ); + } + $result = unserialize(file_get_contents($cache_dir . $cache_file)); } @@ -1024,11 +1090,13 @@ */ public function NumAllRows($query, $TTL = null, $cache_id = '') { + $cache_id = $this->cacheId($cache_id); + // Если включен DEV MODE, то отключаем кеширование запросов if (defined('DEV_MODE') AND DEV_MODE) $TTL = null; - if ($TTL AND ($TTL != "nocache" AND $TTL != null)) + if ($TTL AND ($TTL != 'nocache' AND $TTL != null)) { // Кол-во $cache_file = md5($query) . '.count'; @@ -1057,6 +1125,19 @@ } else { + // Если стоит в настройках, запоминать все запросы + if (defined('SQL_PROFILING') && SQL_PROFILING) + { + $_caller = $this->getCaller(); + + $this->_query_list[] = array( + 'caller' => $_caller, + 'query' => 'SELECT FOUND_ROWS();', + 'ttl' => $TTL, + 'cache' => $cache_dir . $cache_file + ); + } + return file_get_contents($cache_dir . $cache_file); } } @@ -1316,11 +1397,9 @@ * @param $cache_id * @return bool */ - public function clearcache($cache_id) + public function clearCache($cache_id) { - $cache_id = (substr($cache_id, 0, 3) == 'doc' - ? 'doc/' . intval(floor((int)substr($cache_id, 4)) / 1000) . '/' . (int)substr($cache_id, 4) - : $cache_id); + $cache_id = $this->cacheId($cache_id); $cache_dir = BASE_DIR . '/tmp/cache/sql/' . (trim($cache_id) > '' ? trim($cache_id) . '/' @@ -1339,26 +1418,7 @@ public function clearCacheUrl($cache_id) { $cache_id = str_replace('url_', '', $cache_id); - $cache_id = 'url/' . substr($cache_id, 0, 3); - - $cache_dir = BASE_DIR . '/tmp/cache/sql/' . (trim($cache_id) > '' - ? trim($cache_id) . '/' - : ''); - - return rrmdir($cache_dir); - } - - - /** - * Метод, предназначенный для очищения кеша документов - * - * @param $cache_id - * @return bool - */ - public function clearCacheNav($cache_id) - { - $cache_id = str_replace('nav_', '', $cache_id); - $cache_id = 'nav/' . substr($cache_id, 0, 3); + $cache_id = 'documents/urls/' . substr($cache_id, 0, 3); $cache_dir = BASE_DIR . '/tmp/cache/sql/' . (trim($cache_id) > '' ? trim($cache_id) . '/' @@ -1374,31 +1434,10 @@ * @param $cache_id * @return bool */ - public function clearcacherequest($cache_id) - { - $cache_id = (substr($cache_id, 0, 3) == 'doc' - ? 'request/' . (int)substr($cache_id, 4) - : $cache_id); - - $cache_dir = BASE_DIR . '/tmp/cache/sql/' . (trim($cache_id) > '' - ? trim($cache_id) . '/' - : ''); - - return rrmdir($cache_dir); - } - - - /** - * Метод, предназначенный для очищения кеша шаблонов - * - * @param $cache_id - * @return bool - */ - public function clearcompile($cache_id) + public function clearCacheRequest($cache_id) { - $cache_id = (substr($cache_id, 0, 3) == 'doc' - ? 'compiled/' . intval(floor((int)substr($cache_id, 4)) / 1000) . '/' . (int)substr($cache_id, 4) - : $cache_id); + $cache_id = (int)str_replace('req_', '', $cache_id); + $cache_id = 'request/' . (floor($cache_id / 1000)) . '/' . $cache_id; $cache_dir = BASE_DIR . '/tmp/cache/sql/' . (trim($cache_id) > '' ? trim($cache_id) . '/' @@ -1414,15 +1453,15 @@ * @param $cache_id * @return bool */ - public function clear_request($cache_id) + public function clearRequest($cache_id) { $request = request_get_settings($cache_id); - $cache_from_id = BASE_DIR . '/tmp/cache/sql/request/settings/' . (trim($request->Id) > '' + $cache_from_id = BASE_DIR . '/tmp/cache/sql/requests/settings/' . (trim($request->Id) > '' ? trim($request->Id) . '/' : ''); - $cache_from_alias = BASE_DIR . '/tmp/cache/sql/request/settings/' . (trim($request->request_alias) > '' + $cache_from_alias = BASE_DIR . '/tmp/cache/sql/requests/settings/' . (trim($request->request_alias) > '' ? trim($request->request_alias) . '/' : ''); diff --git a/class/class.dbdump.php b/class/class.dbdump.php index 7a8bec6..4364d47 100644 --- a/class/class.dbdump.php +++ b/class/class.dbdump.php @@ -235,7 +235,10 @@ } // Готовим шаблон имени файла - $file_name = preg_replace_ru(array("/%SERVER%/", "/%DATE%/", "/%TIME%/"), array($_SERVER['SERVER_NAME'], date('d.m.y'), date('H.i.s')), DB_EXPORT_TPL); + if (isset($_REQUEST['file_name']) AND $_REQUEST['file_name'] != '') + $file_name = prepare_fname($_REQUEST['file_name']); + else + $file_name = preg_replace_ru(array("/%SERVER%/", "/%DATE%/", "/%TIME%/"), array($_SERVER['SERVER_NAME'], date('d.m.y'), date('H.i.s')), DB_EXPORT_TPL); $dump = (defined('DB_EXPORT_GZ') && DB_EXPORT_GZ ? gzencode($this->_database_dump) @@ -329,7 +332,7 @@ { // Получаем имя файла и его расширение (должно быть sql) $fupload_name = $_FILES['file']['name']; - $gz = substr($fupload_name, -3)=='.gz'; + $gz = substr($fupload_name, -3) == '.gz'; $end = substr($fupload_name, -3); // Если расширение sql, тогда @@ -426,7 +429,7 @@ { global $AVE_DB, $AVE_Template; - $file = BASE_DIR . '/backup/'. $file; + $file = BASE_DIR . '/tmp/backup/'. $file; if (! is_file($file)) return false; @@ -436,9 +439,9 @@ reportLog($AVE_Template->get_config_vars('DB_REPORT_DUMP_DEL_OK') . ' ('.basename($file).')'); } else - { - reportLog($AVE_Template->get_config_vars('DB_REPORT_DUMP_DEL_ER') . ' ('.basename($file).')'); - } + { + reportLog($AVE_Template->get_config_vars('DB_REPORT_DUMP_DEL_ER') . ' ('.basename($file).')'); + } header('Location:index.php?do=dbsettings&cp=' . SESSION); } @@ -474,10 +477,10 @@ $insert = true; } else - { - // В противном случае, если расширение файла НЕ sql, формируем сообщение с ошибкой - $AVE_Template->assign('msg', '
    • Ошибка: ' . $AVE_Template->get_config_vars('MAIN_SQL_FILE_ERROR') . '
    • '); - } + { + // В противном случае, если расширение файла НЕ sql, формируем сообщение с ошибкой + $AVE_Template->assign('msg', '
    • Ошибка: ' . $AVE_Template->get_config_vars('MAIN_SQL_FILE_ERROR') . '
    • '); + } } // Если флаг готовности записи установлен, тогда diff --git a/class/class.debug.php b/class/class.debug.php index 824197d..8ad56e7 100644 --- a/class/class.debug.php +++ b/class/class.debug.php @@ -541,6 +541,19 @@ } + public static function _errorSql ($header, $body, $caller, $exit = false) + { + + Debug::_echo(preg_replace('/(\s)+/s', ' ', $header)); + Debug::_echo(DB::queryList($body)); + Debug::_echo($caller); + + if ($exit) + exit; + } + + + /** * Вывод статистики */ diff --git a/class/class.docs.php b/class/class.docs.php index 1ad6aa6..9606fac 100755 --- a/class/class.docs.php +++ b/class/class.docs.php @@ -1,2826 +1,2770 @@ Query($sql); - $query = $AVE_DB->Query($sql); + $ids = array(); - $ids = array(); + while ($row = $query->FetchAssocArray()) + { + $ids[$row['Id']]['rubric_field_type'] = $row['rubric_field_type']; + $ids[$row['Id']]['rubric_field_numeric'] = (int)$row['rubric_field_numeric']; + } - while ($row = $query->FetchAssocArray()) - { - $ids[$row['Id']]['rubric_field_type'] = $row['rubric_field_type']; - $ids[$row['Id']]['rubric_field_numeric'] = (int)$row['rubric_field_numeric']; + return $ids; } - return $ids; - } + function _get_document_text_fields ($id) + { + global $AVE_DB; - function _get_document_text_fields ($id) - { - global $AVE_DB; + $sql = " + SELECT + rubric_field_id + FROM + ".PREFIX."_document_fields_text + WHERE + document_id = '" . $id . "' + "; + + $query = $AVE_DB->Query($sql); - $sql = " - SELECT - rubric_field_id - FROM - ".PREFIX."_document_fields_text - WHERE - document_id = '" . $id . "' - "; + $ids = array(); - $query = $AVE_DB->Query($sql); + while ($row = $query->GetCell()) + array_push($ids, $row); - $ids = array(); + return $ids; + } - while ($row = $query->GetCell()) - array_push($ids, $row); - return $ids; - } + function _get_rubric ($id) + { + global $AVE_DB; + if (! $id) + return false; - function _get_rubric ($id) - { - global $AVE_DB; - - if (! $id) - return false; - - $sql = " - SELECT - rubric_alias, - rubric_alias_history, - rubric_code_start, - rubric_code_end - FROM - " . PREFIX . "_rubrics - WHERE - Id = '" . $id . "' - "; - - return $AVE_DB->Query($sql)->FetchRow(); - } + $sql = " + SELECT + rubric_alias, + rubric_alias_history, + rubric_code_start, + rubric_code_end + FROM + " . PREFIX . "_rubrics + WHERE + Id = '" . $id . "' + "; + return $AVE_DB->Query($sql)->FetchRow(); + } - /** - * Метод, предназначенный для получения списка документов в Панели управления - * - */ - function documentListGet() - { - global $AVE_DB, $AVE_Rubric, $AVE_Template; - - $ex_titel = ''; - $nav_titel = ''; - $ex_time = ''; - $nav_time = ''; - $request = ''; - $ex_rub = ''; - $ex_delete = ''; - $nav_rub = ''; - $ex_docstatus = ''; - $navi_docstatus = ''; - - // При смене страницы убираем из сессии параметры выборки документов - unset ($_SESSION['search_query']); - - // Если в запросе пришел параметр на поиск документа по названию - if (!empty($_REQUEST['QueryTitel'])) - { - $request = $_REQUEST['QueryTitel']; - $chain = explode(' ', $request); // Получаем список слов, разделяя по пробелу (если их несколько) - // Циклически обрабатываем слова, формируя условия, которые будут применены в запросе к БД - foreach ($chain as $search) + /** + * Метод, предназначенный для получения списка документов в Панели управления + * + */ + /** + * Метод, предназначенный для получения списка документов в Панели управления + * + */ + function documentListGet() + { + global $AVE_DB, $AVE_Rubric, $AVE_Template; + + $ex_titel = ''; + $nav_titel = ''; + $ex_time = ''; + $nav_time = ''; + $request = ''; + $ex_rub = ''; + $ex_delete = ''; + $nav_rub = ''; + $ex_docstatus = ''; + $navi_docstatus = ''; + + // При смене страницы убираем из сессии параметры выборки документов + unset ($_SESSION['search_query']); + + // Если в запросе пришел параметр на поиск документа по названию + if (! empty($_REQUEST['QueryTitel'])) { - $and = @explode(' +', $search); - foreach ($and as $and_word) + $request = $_REQUEST['QueryTitel']; + $chain = explode(' ', $request); // Получаем список слов, разделяя по пробелу (если их несколько) + + // Циклически обрабатываем слова, формируя условия, которые будут применены в запросе к БД + foreach ($chain as $search) { - if (strpos($and_word, '+') !== false) + $and = @explode(' +', $search); + + foreach ($and as $and_word) { - $ex_titel .= " AND ((UPPER(doc.document_title) LIKE '%" . mb_strtoupper(substr($and_word, 1)) . "%')OR(UPPER(doc.document_alias) LIKE '%" . mb_strtoupper(substr($and_word, 1)) . "%'))"; + if (strpos($and_word, '+') !== false) + { + $ex_titel .= " AND ((UPPER(doc.document_title) LIKE '%" . mb_strtoupper(substr($and_word, 1)) . "%')OR(UPPER(doc.document_alias) LIKE '%" . mb_strtoupper(substr($and_word, 1)) . "%'))"; + } } - } - $and_not = @explode(' -', $search); - foreach ($and_not as $and_not_word) - { - if (strpos($and_not_word, '-') !== false) + $and_not = @explode(' -', $search); + foreach ($and_not as $and_not_word) { - $ex_titel .= " AND (UPPER(doc.document_title) NOT LIKE '%" . mb_strtoupper($and_not_word, 1) . "%')"; + if (strpos($and_not_word, '-') !== false) + { + $ex_titel .= " AND (UPPER(doc.document_title) NOT LIKE '%" . mb_strtoupper($and_not_word, 1) . "%')"; + } } + + $start = explode(' +', $request); + if (strpos($start[0], ' -') !== false) $start = explode(' -', $request); + $start = $start[0]; } - $start = explode(' +', $request); - if (strpos($start[0], ' -') !== false) $start = explode(' -', $request); - $start = $start[0]; + $ex_titel = "AND ((UPPER(doc.document_title) LIKE '%" . mb_strtoupper($start) . "%')OR(UPPER(doc.document_alias) LIKE '%" . mb_strtoupper($start) . "%'))" . $ex_titel; + $nav_titel = '&QueryTitel=' . urlencode($request); } - $ex_titel = "AND ((UPPER(doc.document_title) LIKE '%" . mb_strtoupper($start) . "%')OR(UPPER(doc.document_alias) LIKE '%" . mb_strtoupper($start) . "%'))" . $ex_titel; - $nav_titel = '&QueryTitel=' . urlencode($request); - } - - $sql_join_field = ''; - $sql_where_field = ''; - $field_link = ''; - - if (isset($_REQUEST['field_id']) && (int)$_REQUEST['field_id'] > 0) - { - $sql_join_field = " - LEFT JOIN - " . PREFIX . "_document_fields AS df1 - ON - doc.Id = df1.document_id - LEFT JOIN - " . PREFIX . "_document_fields_text AS df2 - ON - df1.document_id = df2.document_id - "; + $sql_join_field = ''; + $sql_where_field = ''; + $field_link = ''; - if ($_REQUEST['field_request'] == 'eq') - { - $sql_where_field = " - AND - (df1.rubric_field_id = '" . (int)$_REQUEST['field_id'] . "' - AND - UPPER(CONCAT_WS('', df1.field_value, NULLIF(df2.field_value, '')) = '" . mb_strtoupper($_REQUEST['field_search']) . "') - OR - df1.field_number_value = '" . mb_strtoupper($_REQUEST['field_search']) . "') - "; - } - else if ($_REQUEST['field_request'] == 'like') + if (isset($_REQUEST['field_id']) && (int)$_REQUEST['field_id'] > 0) { - $sql_where_field = " + $sql_join_field = " + LEFT JOIN + " . PREFIX . "_document_fields AS df1 + ON + doc.Id = df1.document_id + LEFT JOIN + " . PREFIX . "_document_fields_text AS df2 + ON + df1.document_id = df2.document_id + "; + + if ($_REQUEST['field_request'] == 'eq' && $_REQUEST['field_search'] != '') + { + $sql_where_field = " AND - (df1.rubric_field_id = '" . (int)$_REQUEST['field_id'] . "' - AND - UPPER(CONCAT_WS('', df1.field_value, NULLIF(df2.field_value, '')) LIKE '%" . mb_strtoupper($_REQUEST['field_search']) . "%') - OR - df1.field_number_value LIKE '%" . mb_strtoupper($_REQUEST['field_search']) . "%') - "; + (df1.rubric_field_id = '" . (int)$_REQUEST['field_id'] . "' + AND + UPPER(CONCAT_WS('', df1.field_value, NULLIF(df2.field_value, '')) = '" . mb_strtoupper($_REQUEST['field_search']) . "') + OR + df1.field_number_value = '" . mb_strtoupper($_REQUEST['field_search']) . "') + "; + } + else if ($_REQUEST['field_request'] == 'like' && $_REQUEST['field_search'] != '') + { + $sql_where_field = " + AND + (df1.rubric_field_id = '" . (int)$_REQUEST['field_id'] . "' + AND + UPPER(CONCAT_WS('', df1.field_value, NULLIF(df2.field_value, '')) LIKE '%" . mb_strtoupper($_REQUEST['field_search']) . "%') + OR + df1.field_number_value LIKE '%" . mb_strtoupper($_REQUEST['field_search']) . "%') + "; + } + + $field_link = '&field_id=' . (int)$_REQUEST['field_id'] . '&field_request=' . $_REQUEST['field_request'] . '&field_search=' . $_REQUEST['field_search']; } - $field_link = '&field_id=' . (int)$_REQUEST['field_id'] . '&field_request=' . $_REQUEST['field_request'] . '&field_search=' . $_REQUEST['field_search']; - } + // Если в запросе пришел id определенной рубрики + if (isset($_REQUEST['rubric_id']) && $_REQUEST['rubric_id'] != 'all') + { + // Формируем условия, которые будут применены в запросе к БД + $ex_rub = " AND doc.rubric_id = '" . $_REQUEST['rubric_id'] . "'"; - // Если в запросе пришел id определенной рубрики - if (isset($_REQUEST['rubric_id']) && $_REQUEST['rubric_id'] != 'all') - { - // Формируем условия, которые будут применены в запросе к БД - $ex_rub = " AND doc.rubric_id = '" . $_REQUEST['rubric_id'] . "'"; + // Формируем условия, которые будут применены в ссылках + $nav_rub = '&rubric_id=' . (int)$_REQUEST['rubric_id']; - // формируем условия, которые будут применены в ссылках - $nav_rub = '&rubric_id=' . (int)$_REQUEST['rubric_id']; + $sql = $AVE_DB->Query(" + SELECT + Id, + rubric_field_type, + rubric_field_title + FROM + " . PREFIX . "_rubric_fields + WHERE + rubric_id = '" . $_REQUEST['rubric_id'] ."' + ORDER BY + rubric_field_position ASC + "); - $sql = $AVE_DB->Query(" - SELECT - Id, - rubric_field_type, - rubric_field_title - FROM - " . PREFIX . "_rubric_fields - WHERE - rubric_id = '" . $_REQUEST['rubric_id'] ."' - ORDER BY - rubric_field_position ASC - "); + $fields = array(); - $fields = array(); + while($row = $sql->FetchRow()) + array_push($fields, $row); - while($row = $sql->FetchRow()) - { - array_push($fields, $row); + $AVE_Template->assign('fields', $fields); } - $AVE_Template->assign('fields', $fields); - } - - $ex_db = ''; - - // Поиск с учётом условий настроек рубрик - if (! isset($_REQUEST['rubric_id']) && empty($_REQUEST['QueryTitel'])) - { - // Формируем условия, которые будут применены в запросе к БД - $ex_rub = " AND rub.rubric_docs_active = '1'"; - - // формируем условия для бд - $ex_db = "LEFT JOIN " . PREFIX . "_rubrics as rub on rub.Id = rubric_id"; - } - - $ex_lang = ''; + $ex_db = ''; - // Поиск с учётом языка документа - if (isset($_REQUEST['lang_id']) && $_REQUEST['lang_id'] != '') - { - // Формируем условия, которые будут применены в запросе к БД - $ex_lang = " AND doc.document_lang = '{$_REQUEST["lang_id"]}'"; + // Поиск с учётом условий настроек рубрик + if (! isset($_REQUEST['rubric_id']) && empty($_REQUEST['QueryTitel'])) + { + // Формируем условия, которые будут применены в запросе к БД + $ex_rub = " AND rub.rubric_docs_active = '1'"; - $nav_lang = '&lang_id=' . $_REQUEST['lang_id']; - } - else - $nav_lang = ''; + // формируем условия для бд + $ex_db = "LEFT JOIN " . PREFIX . "_rubrics as rub on rub.Id = rubric_id"; + } - // Поиск с выводом всех результатов из всех рубрик - if (@$_REQUEST['rubric_id'] == 'all') - { - $nav_rub = '&rubric_id=all'; - } + $ex_lang = ''; - // Если в запросе пришел параметр на фильтрацию документов по определенному временному интервалу - if (@$_REQUEST['document_published'] && @$_REQUEST['document_expire']) - { - // Формируем условия, которые будут применены в запросе к БД - $ex_time = 'AND ((doc.document_published BETWEEN ' . $this->_documentListStart() . ' AND ' . $this->_documentListEnd() . ') OR doc.document_published = 0)'; + // Поиск с учётом языка документа + if (isset($_REQUEST['lang_id']) && $_REQUEST['lang_id'] != '') + { + // Формируем условия, которые будут применены в запросе к БД + $ex_lang = " AND doc.document_lang = '{$_REQUEST["lang_id"]}'"; - // формируем условия, которые будут применены в ссылках - $nav_time = '&TimeSelect=1' - . '&document_published=' . $_REQUEST['document_published'] - . '&document_expire=' . $_REQUEST['document_expire']; - } + $nav_lang = '&lang_id=' . $_REQUEST['lang_id']; + } + else + $nav_lang = ''; - // Если в запросе пришел параметр на фильтрацию документов по статусу - if (! empty($_REQUEST['status'])) - { - // Определяем, какой статус запрашивается и формируем условия, которые будут применены в запросе к БД, - // а также в ссылках, для дальнейшей навигации - switch ($_REQUEST['status']) + // Поиск с выводом всех результатов из всех рубрик + if (@$_REQUEST['rubric_id'] == 'all') { - // С любым статусом - case '': - case 'All': - break; - - // Только опубликованные - case 'Opened': - $ex_docstatus = "AND doc.document_status = '1'"; - $navi_docstatus = '&status=Opened'; - break; + $nav_rub = '&rubric_id=all'; + } - // Только неопубликованные - case 'Closed': - $ex_docstatus = "AND doc.document_status = '0'"; - $navi_docstatus = '&status=Closed'; - break; + // Если в запросе пришел параметр на фильтрацию документов по определенному временному интервалу + if (@$_REQUEST['document_published'] && @$_REQUEST['document_expire']) + { + // Формируем условия, которые будут применены в запросе к БД + $ex_time = 'AND ((doc.document_published BETWEEN ' . $this->_documentListStart() . ' AND ' . $this->_documentListEnd() . ') OR doc.document_published = 0)'; - // Помеченные на удаление - case 'Deleted': - $ex_docstatus = "AND doc.document_deleted = '1'"; - $navi_docstatus = '&status=Deleted'; - break; + // формируем условия, которые будут применены в ссылках + $nav_time = '&TimeSelect=1' + . '&document_published=' . $_REQUEST['document_published'] + . '&document_expire=' . $_REQUEST['document_expire']; } - } - // Определяем группу пользоваеля и id документа, если он присутствует в запросе - // $ex_delete = (UGROUP != 1) ? "AND doc.document_deleted != '1'" : '' ; - $w_id = !empty($_REQUEST['doc_id']) - ? " AND doc.Id = '" . $_REQUEST['doc_id'] . "'" - : ''; - - // Выполняем запрос к БД на получение количества документов соответствующих вышеопределенным условиям - $sql = " - SELECT COUNT(doc.Id) - FROM " . PREFIX . "_documents as doc - " . $ex_db . " - " . $sql_join_field . " - WHERE 1 - " . $ex_delete . " - " . $ex_time . " - " . $ex_titel . " - " . $ex_rub . " - " . $ex_docstatus . " - " . $ex_lang . " - " . $w_id . " - " . $sql_where_field . " - "; - - $num = $AVE_DB->Query($sql)->GetCell(); - - // Определяем лимит документов, который будет показан на 1 странице - $limit = (isset($_REQUEST['Datalimit']) && is_numeric($_REQUEST['Datalimit']) && $_REQUEST['Datalimit'] > 0) - ? $_REQUEST['Datalimit'] - : $limit = $this->_limit; - - $nav_limit = '&Datalimit=' . $limit; - - // Определяем количество страниц, которые будут сформированы на основании количества полученных документов - $pages = ceil($num / $limit); - $start = get_current_page() * $limit - $limit; - - $db_sort = 'ORDER BY doc.Id DESC'; - $navi_sort = '&sort=id_desc'; - - // Параметры вывборки документов - $search_query = base64_encode($_SERVER['QUERY_STRING']); - - // Если в запросе используется параметр сортировки - if (!empty($_REQUEST['sort'])) - { - // Определяем, по какому параметру происходит сортировка - switch ($_REQUEST['sort']) + // Если в запросе пришел параметр на фильтрацию документов по статусу + if (! empty($_REQUEST['status'])) { - // По id документа, по возрастанию - case 'id' : - $db_sort = 'ORDER BY doc.Id ASC'; - $navi_sort = '&sort=id'; - break; + // Определяем, какой статус запрашивается и формируем условия, которые будут применены в запросе к БД, + // а также в ссылках, для дальнейшей навигации + switch ($_REQUEST['status']) + { + // С любым статусом + case '': + case 'All': + break; + + // Только опубликованные + case 'Opened': + $ex_docstatus = "AND doc.document_status = '1'"; + $navi_docstatus = '&status=Opened'; + break; + + // Только неопубликованные + case 'Closed': + $ex_docstatus = "AND doc.document_status = '0'"; + $navi_docstatus = '&status=Closed'; + break; + + // Помеченные на удаление + case 'Deleted': + $ex_docstatus = "AND doc.document_deleted = '1'"; + $navi_docstatus = '&status=Deleted'; + break; + } + } - // По id документа, по убыванию - case 'id_desc' : - $db_sort = 'ORDER BY doc.Id DESC'; - $navi_sort = '&sort=id_desc'; - break; + // Определяем группу пользоваеля и id документа, если он присутствует в запросе + // $ex_delete = (UGROUP != 1) ? "AND doc.document_deleted != '1'" : '' ; + $w_id = !empty($_REQUEST['doc_id']) + ? " AND doc.Id = '" . $_REQUEST['doc_id'] . "'" + : ''; - // По названию документа, в алфавитном порядке - case 'title' : - $db_sort = 'ORDER BY doc.document_title ASC'; - $navi_sort = '&sort=title'; - break; + $db_sort = 'ORDER BY doc.Id DESC'; + $navi_sort = '&sort=id_desc'; - // По названию документа, в обратном алфавитном порядке - case 'title_desc' : - $db_sort = 'ORDER BY doc.document_title DESC'; - $navi_sort = '&sort=title_desc'; - break; + // Если в запросе используется параметр сортировки + if (!empty($_REQUEST['sort'])) + { + // Определяем, по какому параметру происходит сортировка + switch ($_REQUEST['sort']) + { + // По id документа, по возрастанию + case 'id' : + $db_sort = 'ORDER BY doc.Id ASC'; + $navi_sort = '&sort=id'; + break; + + // По id документа, по убыванию + case 'id_desc' : + $db_sort = 'ORDER BY doc.Id DESC'; + $navi_sort = '&sort=id_desc'; + break; + + // По названию документа, в алфавитном порядке + case 'title' : + $db_sort = 'ORDER BY doc.document_title ASC'; + $navi_sort = '&sort=title'; + break; + + // По названию документа, в обратном алфавитном порядке + case 'title_desc' : + $db_sort = 'ORDER BY doc.document_title DESC'; + $navi_sort = '&sort=title_desc'; + break; + + // По url-адресу, в алфавитном порядке + case 'alias' : + $db_sort = 'ORDER BY doc.document_alias ASC'; + $navi_sort = '&sort=alias'; + break; + + // По url-адресу, в обратном алфавитном порядке + case 'alias_desc' : + $db_sort = 'ORDER BY doc.document_alias DESC'; + $navi_sort = '&sort=alias_desc'; + break; + + // По id рубрики, по возрастанию + case 'rubric' : + $db_sort = 'ORDER BY doc.rubric_id ASC'; + $navi_sort = '&sort=rubric'; + break; + + // По id рубрики, по убыванию + case 'rubric_desc' : + $db_sort = 'ORDER BY doc.rubric_id DESC'; + $navi_sort = '&sort=rubric_desc'; + break; + + // По дате публикации, по возрастанию + case 'published' : + $db_sort = 'ORDER BY doc.document_published ASC'; + $navi_sort = '&sort=published'; + break; + + // По дате публикации, по убыванию + case 'published_desc' : + $db_sort = 'ORDER BY doc.document_published DESC'; + $navi_sort = '&sort=published_desc'; + break; + + // По количеству просмотров, по возрастанию + case 'view' : + $db_sort = 'ORDER BY doc.document_count_view ASC'; + $navi_sort = '&sort=view'; + break; + + // По количеству просмотров, по убыванию + case 'view_desc' : + $db_sort = 'ORDER BY doc.document_count_view DESC'; + $navi_sort = '&sort=view_desc'; + break; + + // По количеству печати документа, по возрастанию + case 'print' : + $db_sort = 'ORDER BY doc.document_count_print ASC'; + $navi_sort = '&sort=print'; + break; + + // По количеству печати документа, по убыванию + case 'print_desc' : + $db_sort = 'ORDER BY doc.document_count_print DESC'; + $navi_sort = '&sort=print_desc'; + break; + + // По автору, по алфавитному возрастанию + case 'author' : + $db_sort = 'ORDER BY doc.document_author_id ASC'; + $navi_sort = '&sort=author'; + break; + + // По автору, по алфавитному убыванию + case 'author_desc' : + $db_sort = 'ORDER BY doc.document_author_id DESC'; + $navi_sort = '&sort=author_desc'; + break; + + // По дате последнего редактирования, по возрастанию + case 'changed': + $db_sort = 'ORDER BY doc.document_changed ASC'; + $navi_sort = '&sort=changed'; + break; + + // По дате последнего редактирования, по убыванию + case 'changed_desc': + $db_sort = 'ORDER BY doc.document_changed DESC'; + $navi_sort = '&sort=changed_desc'; + break; + + // По языку документа, по возрастанию + case 'lang': + $db_sort = 'ORDER BY doc.document_lang ASC'; + $navi_sort = '&sort=lang'; + break; + + // По языку документа, по убыванию + case 'lang_desc': + $db_sort = 'ORDER BY doc.document_lang DESC'; + $navi_sort = '&sort=lang_desc'; + break; + + // По умолчанию, по дате последнего редактирования по убыванию. + // Последний отредактированный документ, будет первым в списке. + default : + $db_sort = 'ORDER BY doc.document_changed DESC'; + $navi_sort = '&sort=changed_desc'; + break; + } + } - // По url-адресу, в алфавитном порядке - case 'alias' : - $db_sort = 'ORDER BY doc.document_alias ASC'; - $navi_sort = '&sort=alias'; - break; + $docs = array(); - // По url-адресу, в обратном алфавитном порядке - case 'alias_desc' : - $db_sort = 'ORDER BY doc.document_alias DESC'; - $navi_sort = '&sort=alias_desc'; - break; + // Определяем лимит документов, который будет показан на 1 странице + $limit = (isset($_REQUEST['Datalimit']) && is_numeric($_REQUEST['Datalimit']) && $_REQUEST['Datalimit'] > 0) + ? $_REQUEST['Datalimit'] + : $limit = $this->_limit; - // По id рубрики, по возрастанию - case 'rubric' : - $db_sort = 'ORDER BY doc.rubric_id ASC'; - $navi_sort = '&sort=rubric'; - break; + $nav_limit = '&Datalimit=' . $limit; - // По id рубрики, по убыванию - case 'rubric_desc' : - $db_sort = 'ORDER BY doc.rubric_id DESC'; - $navi_sort = '&sort=rubric_desc'; - break; + $start = get_current_page() * $limit - $limit; - // По дате публикации, по возрастанию - case 'published' : - $db_sort = 'ORDER BY doc.document_published ASC'; - $navi_sort = '&sort=published'; - break; + // Выполняем запрос к БД на получение уже не количества документов, отвечающих условиям, а уже на + // получение всех данных, с учетом всех условий, а также типа сортировки и лимита для вывода на + // одну страницу. + $sql = " + SELECT STRAIGHT_JOIN SQL_CALC_FOUND_ROWS + doc.*, + rub.rubric_admin_teaser_template + FROM + " . PREFIX . "_documents as doc + LEFT JOIN + " . PREFIX . "_rubrics AS rub + ON rub.Id = doc.rubric_id + " . $sql_join_field . " + WHERE 1 + " . $ex_rub . " + " . $ex_delete . " + " . $ex_time . " + " . $ex_titel . " + " . $ex_docstatus . " + " . $ex_lang . " + " . $w_id . " + " . $sql_where_field . " + GROUP BY doc.Id + " . $db_sort . " + LIMIT + " . $start . "," . $limit . " + "; - // По дате публикации, по убыванию - case 'published_desc' : - $db_sort = 'ORDER BY doc.document_published DESC'; - $navi_sort = '&sort=published_desc'; - break; + //Debug::_echo($sql, true, '270'); + $sql = $AVE_DB->Query($sql); - // По количеству просмотров, по возрастанию - case 'view' : - $db_sort = 'ORDER BY doc.document_count_view ASC'; - $navi_sort = '&sort=view'; - break; + // Получаем кол-во записей + $num = $AVE_DB->getFoundRows(); - // По количеству просмотров, по убыванию - case 'view_desc' : - $db_sort = 'ORDER BY doc.document_count_view DESC'; - $navi_sort = '&sort=view_desc'; - break; + // Определяем количество страниц, которые будут сформированы на основании количества полученных документов + $pages = ceil($num / $limit); - // По количеству печати документа, по возрастанию - case 'print' : - $db_sort = 'ORDER BY doc.document_count_print ASC'; - $navi_sort = '&sort=print'; - break; + // Параметры вывборки документов + $search_query = base64_encode($_SERVER['QUERY_STRING']); - // По количеству печати документа, по убыванию - case 'print_desc' : - $db_sort = 'ORDER BY doc.document_count_print DESC'; - $navi_sort = '&sort=print_desc'; - break; + // Циклически обрабатываем полученные данные с целью приведения некоторых из них к удобочитаемому виду + while ($row = $sql->FetchRow()) + { + // Запомниаем в сесии, параметры выборки для документа + $_SESSION['search_query'][$row->Id] = $search_query; - // По автору, по алфавитному возрастанию - case 'author' : - $db_sort = 'ORDER BY doc.document_author_id ASC'; - $navi_sort = '&sort=author'; - break; + // Определяем количество комментариев, оставленных для данного документа + $row->ist_remark = $AVE_DB->Query(" + SELECT + COUNT(*) + FROM + " . PREFIX . "_document_remarks + WHERE + document_id = '" . $row->Id . "' + ")->GetCell(); - // По автору, по алфавитному убыванию - case 'author_desc' : - $db_sort = 'ORDER BY doc.document_author_id DESC'; - $navi_sort = '&sort=author_desc'; - break; + $this->documentPermissionFetch($row->rubric_id); - // По дате последнего редактирования, по возрастанию - case 'changed': - $db_sort = 'ORDER BY doc.document_changed ASC'; - $navi_sort = '&sort=changed'; - break; + // Получаем название рубрики по ее Id + $row->RubName = $AVE_Rubric->rubricNameByIdGet($row->rubric_id)->rubric_title; + $row->document_author = get_username_by_id($row->document_author_id); // Получаем имя пользователя (Автора) + $row->cantEdit = 0; + $row->canDelete = 0; + $row->canEndDel = 0; + $row->canOpenClose = 0; + $row->rubric_admin_teaser_template = @eval2var(' ?>'.($row->rubric_admin_teaser_template>'' + ? @showrequestelement($row, $row->rubric_admin_teaser_template) + : '').'document_title = stripslashes(htmlspecialchars_decode($row->document_title)); + $row->document_breadcrum_title = stripslashes(htmlspecialchars_decode($row->document_breadcrum_title)); - // По языку документа, по возрастанию - case 'lang': - $db_sort = 'ORDER BY doc.document_lang ASC'; - $navi_sort = '&sort=lang'; - break; + $lang_pack = array(); - // По языку документа, по убыванию - case 'lang_desc': - $db_sort = 'ORDER BY doc.document_lang DESC'; - $navi_sort = '&sort=lang_desc'; - break; + if ($row->document_lang_group > 0) + { + $sql1 = $AVE_DB->Query(" + SELECT SQL_CALC_FOUND_ROWS + Id, + rubric_id, + document_alias, + document_lang, + document_status + FROM + ".PREFIX."_documents + WHERE + document_lang_group=" . $row->document_lang_group . " + OR + Id = " . $row->document_lang_group + ); - // По умолчанию, по дате последнего редактирования по убыванию. - // Последний отредактированный документ, будет первым в списке. - default : - $db_sort = 'ORDER BY doc.document_changed DESC'; - $navi_sort = '&sort=changed_desc'; - break; - } - } + while ($row1 = $sql1->FetchAssocArray()) + $lang_pack[$row1['document_lang']] = $row1; + } - $docs = array(); - - // Выполняем запрос к БД на получение уже не количества документов, отвечающих условиям, а уже на - // получение всех данных, с учетом всех условий, а также типа сортировки и лимита для вывода на - // одну страницу. - $sql = " - SELECT STRAIGHT_JOIN SQL_CALC_FOUND_ROWS - doc.*, - rub.rubric_admin_teaser_template - FROM - " . PREFIX . "_documents as doc - LEFT JOIN - " . PREFIX . "_rubrics AS rub - ON rub.Id = doc.rubric_id - " . $sql_join_field . " - WHERE 1 - " . $ex_rub . " - " . $ex_delete . " - " . $ex_time . " - " . $ex_titel . " - " . $ex_docstatus . " - " . $ex_lang . " - " . $w_id . " - " . $sql_where_field . " - " . $db_sort . " - LIMIT - " . $start . "," . $limit . " - "; - - $sql = $AVE_DB->Query($sql); - - // Циклически обрабатываем полученные данные с целью приведения некоторых из них к удобочитаемому виду - while ($row = $sql->FetchRow()) - { - // Запомниаем в сесии, параметры выборки для документа - $_SESSION['search_query'][$row->Id] = $search_query; + $row->lang_pack = $lang_pack; - // Определяем количество комментариев, оставленных для данного документа - $row->ist_remark = $AVE_DB->Query(" - SELECT - COUNT(*) - FROM - " . PREFIX . "_document_remarks - WHERE - document_id = '" . $row->Id . "' - ")->GetCell(); + // разрешаем редактирование и удаление + // если автор имеет право изменять свои документы в рубрике + // или пользователю разрешено изменять все документы в рубрике + if ( + ($row->document_author_id == @$_SESSION['user_id'] && isset($_SESSION[$row->rubric_id . '_editown']) && @$_SESSION[$row->rubric_id . '_editown'] == 1) + || + (isset($_SESSION[$row->rubric_id . '_editall']) && $_SESSION[$row->rubric_id . '_editall'] == 1) + ) + { + $row->cantEdit = 1; + $row->canDelete = 1; + $row->canOpenClose = 1; + } - $this->documentPermissionFetch($row->rubric_id); + // запрещаем редактирование главной страницы и страницу ошибки 404 если требуется одобрение Администратора + if ( ($row->Id == 1 || $row->Id == PAGE_NOT_FOUND_ID) + && isset($_SESSION[$row->rubric_id . '_newnow']) && @$_SESSION[$row->rubric_id . '_newnow'] != 1) + { + $row->cantEdit = 0; + } - // Получаем название рубрики по ее Id - $row->RubName = $AVE_Rubric->rubricNameByIdGet($row->rubric_id)->rubric_title; - $row->document_author = get_username_by_id($row->document_author_id); // Получаем имя пользователя (Автора) - $row->cantEdit = 0; - $row->canDelete = 0; - $row->canEndDel = 0; - $row->canOpenClose = 0; - $row->rubric_admin_teaser_template = @eval2var(' ?>'.($row->rubric_admin_teaser_template>'' - ? @showrequestelement($row, $row->rubric_admin_teaser_template) - : '').'document_author_id == @$_SESSION['user_id'] + && isset($_SESSION[$row->rubric_id . '_newnow']) && @$_SESSION[$row->rubric_id . '_newnow'] == 1) + { + $row->canOpenClose = 1; + } - $row->document_title = stripslashes(htmlspecialchars_decode($row->document_title)); - $row->document_breadcrum_title = stripslashes(htmlspecialchars_decode($row->document_breadcrum_title)); + // разрешаем всё, если пользователь принадлежит группе Администраторов или имеет все права на рубрику + if (UGROUP == 1 || @$_SESSION[$row->rubric_id . '_alles'] == 1) + { + $row->cantEdit = 1; + $row->canDelete = 1; + $row->canEndDel = 1; + $row->canOpenClose = 1; + } + // Запрещаем удаление Главной страницы и страницы с 404 ошибкой + if ($row->Id == 1 || $row->Id == PAGE_NOT_FOUND_ID) + { + $row->canDelete = 0; + $row->canEndDel = 0; + } - $lang_pack = array(); + array_push($docs, $row); + } - if($row->document_lang_group > 0) + // Передаем полученные данные в шаблон для вывода + $AVE_Template->assign('docs', $docs); + + $link = "index.php?do=docs"; + $link .= (isset($_REQUEST['action']) && $_REQUEST['action'] == 'showsimple') ? '&action=showsimple' : ''; + $link .= !empty($_REQUEST['target']) ? '&target=' . urlencode($_REQUEST['target']) : ''; + $link .= !empty($_REQUEST['doc']) ? '&doc=' . urlencode($_REQUEST['doc']) : ''; + $link .= !empty($_REQUEST['document_alias']) ? '&document_alias=' . urlencode($_REQUEST['document_alias']) : ''; + $link .= !empty($_REQUEST['navi_item_target']) ? '&navi_item_target=' . urlencode($_REQUEST['navi_item_target']) : ''; + $link .= $navi_docstatus; + $link .= $nav_titel; + $link .= $nav_rub; + $link .= $nav_lang; + $link .= $nav_time; + $link .= $nav_limit; + $link .= $field_link; + $link .= (isset($_REQUEST['selurl']) && $_REQUEST['selurl'] == 1) ? '&selurl=1' : ''; + $link .= (isset($_REQUEST['selecturl']) && $_REQUEST['selecturl'] == 1) ? '&selecturl=1' : ''; + $link .= (isset($_REQUEST['function']) && $_REQUEST['function'] == 1) ? '&function=1' : ''; + $link .= (isset($_REQUEST['idonly']) && $_REQUEST['idonly'] == 1) ? '&idonly=1' : ''; + $link .= (isset($_REQUEST['idtitle']) && $_REQUEST['idtitle'] == 1) ? '&idtitle=1' : ''; + $link .= (isset($_REQUEST['pop']) && $_REQUEST['pop'] == 1) ? '&pop=1' : ''; + $link .= (isset($_REQUEST['onlycontent']) && $_REQUEST['onlycontent'] == 1) ? '&onlycontent=1' : ''; + $link .= (isset($_REQUEST['langCode']) && !empty($_REQUEST['langCode'])) ? '&langCode='.$_REQUEST['langCode'] : ''; + $link .= (isset($_REQUEST['CKEditor']) && !empty($_REQUEST['CKEditor'])) ? '&CKEditor='.$_REQUEST['CKEditor'] : ''; + $link .= (isset($_REQUEST['CKEditorFuncNum']) && $_REQUEST['CKEditorFuncNum'] == 1) ? '&CKEditorFuncNum=1' : ''; + + $AVE_Template->assign('link', $link); + + // Если количество отобранных документов превышает лимит на одной странице - формируем постраничную навигацию + if ($num > $limit) { - $sql1 = $AVE_DB->Query(" - SELECT SQL_CALC_FOUND_ROWS - Id, - rubric_id, - document_alias, - document_lang, - document_status - FROM - ".PREFIX."_documents - WHERE - document_lang_group=" . $row->document_lang_group . " - OR - Id = " . $row->document_lang_group - ); + $page_nav = get_pagination($pages, 'page', ' {t}'); - while ($row1 = $sql1->FetchAssocArray()) - { - $lang_pack[$row1['document_lang']] = $row1; - } + $AVE_Template->assign('page_nav', $page_nav); } - $row->lang_pack = $lang_pack; - - // разрешаем редактирование и удаление - // если автор имеет право изменять свои документы в рубрике - // или пользователю разрешено изменять все документы в рубрике - if ( - ($row->document_author_id == @$_SESSION['user_id'] && isset($_SESSION[$row->rubric_id . '_editown']) && @$_SESSION[$row->rubric_id . '_editown'] == 1) - || - (isset($_SESSION[$row->rubric_id . '_editall']) && $_SESSION[$row->rubric_id . '_editall'] == 1) - ) - { - $row->cantEdit = 1; - $row->canDelete = 1; - $row->canOpenClose = 1; - } - - // запрещаем редактирование главной страницы и страницу ошибки 404 если требуется одобрение Администратора - if ( ($row->Id == 1 || $row->Id == PAGE_NOT_FOUND_ID) - && isset($_SESSION[$row->rubric_id . '_newnow']) && @$_SESSION[$row->rubric_id . '_newnow'] != 1) - { - $row->cantEdit = 0; - } - - // разрешаем автору блокировать и разблокировать свои документы если не требуется одобрение Администратора - if ($row->document_author_id == @$_SESSION['user_id'] - && isset($_SESSION[$row->rubric_id . '_newnow']) && @$_SESSION[$row->rubric_id . '_newnow'] == 1) - { - $row->canOpenClose = 1; - } - - // разрешаем всё, если пользователь принадлежит группе Администраторов или имеет все права на рубрику - if (UGROUP == 1 || @$_SESSION[$row->rubric_id . '_alles'] == 1) - { - $row->cantEdit = 1; - $row->canDelete = 1; - $row->canEndDel = 1; - $row->canOpenClose = 1; - } - // Запрещаем удаление Главной страницы и страницы с 404 ошибкой - if ($row->Id == 1 || $row->Id == PAGE_NOT_FOUND_ID) - { - $row->canDelete = 0; - $row->canEndDel = 0; - } - - array_push($docs, $row); + $AVE_Template->assign('DEF_DOC_START_YEAR', mktime(0, 0, 0, date("m"), date("d"), date("Y") - 10)); + $AVE_Template->assign('DEF_DOC_END_YEAR', mktime(0, 0, 0, date("m"), date("d"), date("Y") + 10)); } - // Передаем полученные данные в шаблон для вывода - $AVE_Template->assign('docs', $docs); - - $link = "index.php?do=docs"; - $link .= (isset($_REQUEST['action']) && $_REQUEST['action'] == 'showsimple') ? '&action=showsimple' : ''; - $link .= !empty($_REQUEST['target']) ? '&target=' . urlencode($_REQUEST['target']) : ''; - $link .= !empty($_REQUEST['doc']) ? '&doc=' . urlencode($_REQUEST['doc']) : ''; - $link .= !empty($_REQUEST['document_alias']) ? '&document_alias=' . urlencode($_REQUEST['document_alias']) : ''; - $link .= !empty($_REQUEST['navi_item_target']) ? '&navi_item_target=' . urlencode($_REQUEST['navi_item_target']) : ''; - $link .= $navi_docstatus; - $link .= $nav_titel; - $link .= $nav_rub; - $link .= $nav_lang; - $link .= $nav_time; - $link .= $nav_limit; - $link .= $field_link; - $link .= (isset($_REQUEST['selurl']) && $_REQUEST['selurl'] == 1) ? '&selurl=1' : ''; - $link .= (isset($_REQUEST['selecturl']) && $_REQUEST['selecturl'] == 1) ? '&selecturl=1' : ''; - $link .= (isset($_REQUEST['function']) && $_REQUEST['function'] == 1) ? '&function=1' : ''; - $link .= (isset($_REQUEST['idonly']) && $_REQUEST['idonly'] == 1) ? '&idonly=1' : ''; - $link .= (isset($_REQUEST['idtitle']) && $_REQUEST['idtitle'] == 1) ? '&idtitle=1' : ''; - $link .= (isset($_REQUEST['pop']) && $_REQUEST['pop'] == 1) ? '&pop=1' : ''; - $link .= (isset($_REQUEST['onlycontent']) && $_REQUEST['onlycontent'] == 1) ? '&onlycontent=1' : ''; - $link .= (isset($_REQUEST['langCode']) && !empty($_REQUEST['langCode'])) ? '&langCode='.$_REQUEST['langCode'] : ''; - $link .= (isset($_REQUEST['CKEditor']) && !empty($_REQUEST['CKEditor'])) ? '&CKEditor='.$_REQUEST['CKEditor'] : ''; - $link .= (isset($_REQUEST['CKEditorFuncNum']) && $_REQUEST['CKEditorFuncNum'] == 1) ? '&CKEditorFuncNum=1' : ''; - - $AVE_Template->assign('link', $link); - - // Если количество отобранных документов превышает лимит на одной странице - формируем постраничную навигацию - if ($num > $limit) + /** + * Метод, предназначенный для сохранения статусов документа в БД + * + */ + function documentEditStatus() { - $page_nav = get_pagination($pages, 'page', ' {t}'); - - $AVE_Template->assign('page_nav', $page_nav); - } + global $AVE_DB; - $AVE_Template->assign('DEF_DOC_START_YEAR', mktime(0, 0, 0, date("m"), date("d"), date("Y") - 10)); - $AVE_Template->assign('DEF_DOC_END_YEAR', mktime(0, 0, 0, date("m"), date("d"), date("Y") + 10)); - } - - /** - * Метод, предназначенный для сохранения статусов документа в БД - * - */ - function documentEditStatus() - { - global $AVE_DB; - - switch(@$_REQUEST['moderation']) - { - // статусы - case "1" : - foreach (@$_REQUEST['document'] as $id => $status) - { - if (is_numeric($id) && is_numeric($status)) + switch(@$_REQUEST['moderation']) + { + // статусы + case "1" : + foreach (@$_REQUEST['document'] as $id => $status) { - $AVE_DB->Query("UPDATE " . PREFIX . "_documents SET document_status = '1' WHERE Id = '".$id."' "); + if (is_numeric($id) && is_numeric($status)) + { + $AVE_DB->Query("UPDATE " . PREFIX . "_documents SET document_status = '1' WHERE Id = '".$id."' "); + } } - } - break; + break; - // статусы - case "0" : - foreach (@$_REQUEST['document'] as $id => $status) - { - if (is_numeric($id) && is_numeric($status)) + // статусы + case "0" : + foreach (@$_REQUEST['document'] as $id => $status) { - $AVE_DB->Query("UPDATE " . PREFIX . "_documents SET document_status = '0' WHERE Id = '".$id."' "); + if (is_numeric($id) && is_numeric($status)) + { + $AVE_DB->Query("UPDATE " . PREFIX . "_documents SET document_status = '0' WHERE Id = '".$id."' "); + } } - } - break; + break; - // в корзину - case "intrash" : - foreach (@$_REQUEST['document'] as $id => $status) - { - if (is_numeric($id) && is_numeric($status)) + // в корзину + case "intrash" : + foreach (@$_REQUEST['document'] as $id => $status) { - $AVE_DB->Query("UPDATE " . PREFIX . "_documents SET document_deleted = '1' WHERE Id = '".$id."' "); + if (is_numeric($id) && is_numeric($status)) + { + $AVE_DB->Query("UPDATE " . PREFIX . "_documents SET document_deleted = '1' WHERE Id = '".$id."' "); + } } - } - break; + break; - // из корзины - case "outtrash" : - foreach (@$_REQUEST['document'] as $id => $status) - { - if (is_numeric($id) && is_numeric($status)) + // из корзины + case "outtrash" : + foreach (@$_REQUEST['document'] as $id => $status) { - $AVE_DB->Query("UPDATE " . PREFIX . "_documents SET document_deleted = '0' WHERE Id = '".$id."' "); + if (is_numeric($id) && is_numeric($status)) + { + $AVE_DB->Query("UPDATE " . PREFIX . "_documents SET document_deleted = '0' WHERE Id = '".$id."' "); + } } - } - break; + break; - // совсем удалить - case "trash" : - foreach (@$_REQUEST['document'] as $id => $status) - { - if (is_numeric($id) && is_numeric($status)) + // совсем удалить + case "trash" : + foreach (@$_REQUEST['document'] as $id => $status) { - $AVE_DB->Query("DELETE FROM " . PREFIX . "_documents WHERE Id = '".$id."'"); - $AVE_DB->Query("DELETE FROM " . PREFIX . "_document_fields WHERE document_id = '".$id."'"); - $AVE_DB->Query("DELETE FROM " . PREFIX . "_document_fields_text WHERE document_id = '".$id."'"); + if (is_numeric($id) && is_numeric($status)) + { + $AVE_DB->Query("DELETE FROM " . PREFIX . "_documents WHERE Id = '".$id."'"); + $AVE_DB->Query("DELETE FROM " . PREFIX . "_document_fields WHERE document_id = '".$id."'"); + $AVE_DB->Query("DELETE FROM " . PREFIX . "_document_fields_text WHERE document_id = '".$id."'"); + } } - } - break; - } + break; + } - header('Location:index.php?do=docs'.(empty($_REQUEST['rubric_id']) ? '' : '&rubric_id='.$_REQUEST['rubric_id']).'&cp=' . SESSION); - exit; - } + header('Location:index.php?do=docs'.(empty($_REQUEST['rubric_id']) ? '' : '&rubric_id='.$_REQUEST['rubric_id']).'&cp=' . SESSION); + exit; + } - /** - * Функция предназначенна для анализа ключевых слов и разненсения их по табличке _document_keyword - * - */ - function generateKeywords($document_id, $keywords=null) - { - global $AVE_DB; + /** + * Функция предназначенна для анализа ключевых слов и разненсения их по табличке _document_keyword + * + */ + function generateKeywords($document_id, $keywords=null) + { + global $AVE_DB; - if (! $keywords) - $keywords = $AVE_DB->Query("SELECT document_meta_keywords FROM " . PREFIX . "_documents WHERE Id = " . intval($document_id) . " LIMIT 1")->GetCell(); + if (! $keywords) + $keywords = $AVE_DB->Query("SELECT document_meta_keywords FROM " . PREFIX . "_documents WHERE Id = " . intval($document_id) . " LIMIT 1")->GetCell(); - $keywords = explode(',', $keywords); + $keywords = explode(',', $keywords); - $res = $AVE_DB->Query("DELETE FROM " . PREFIX . "_document_keywords where document_id = " . intval($document_id)); + $res = $AVE_DB->Query("DELETE FROM " . PREFIX . "_document_keywords where document_id = " . intval($document_id)); - foreach ($keywords as $k => $v) - { - if (trim($v) > '') + foreach ($keywords as $k => $v) { - $key = trim(mb_substr($v, 0, 254)); - - $res = $AVE_DB->Query("INSERT INTO ".PREFIX."_document_keywords - ( - document_id, - keyword - ) - VALUES - ( - '".intval($document_id)."', - '".clean_no_print_char($key)."' - ) - "); + if (trim($v) > '') + { + $key = trim(mb_substr($v, 0, 254)); + + $res = $AVE_DB->Query("INSERT INTO ".PREFIX."_document_keywords + ( + document_id, + keyword + ) + VALUES + ( + '".intval($document_id)."', + '".clean_no_print_char($key)."' + ) + "); + } } } - } - /** - * Функция предназначенна для анализа ключевых слов и разненсения их по табличке _document_tags - * - */ - function generateTags($document_id,$keywords=null) - { - global $AVE_DB; + /** + * Функция предназначенна для анализа ключевых слов и разненсения их по табличке _document_tags + * + */ + function saveTags($document_id, $rubric_id, $tags = null) + { + global $AVE_DB; - if (! $keywords) - $keywords = $AVE_DB->Query("SELECT document_tags FROM " . PREFIX . "_documents WHERE Id=" . intval($document_id) . " LIMIT 1")->GetCell(); + if (! $tags) + return false; - $keywords = explode(',',$keywords); + $tags = explode(',', $tags); - $res = $AVE_DB->Query("DELETE FROM " . PREFIX . "_document_tags where document_id = " . intval($document_id)); + $res = $AVE_DB->Query("DELETE FROM " . PREFIX . "_document_tags WHERE document_id = " . intval($document_id)); - foreach($keywords as $k => $v) - { - if (trim($v) > '') + foreach ($tags as $k => $v) { - $key = trim(mb_substr($v, 0, 254)); + if (trim($v) > '') + { + $key = trim(mb_substr($v, 0, 254)); - $res = $AVE_DB->Query(" - INSERT - INTO - " . PREFIX . "_document_tags - ( - document_id, - tag - ) - VALUES - ( - '" . intval($document_id) . "', - '" . clean_no_print_char($key) . "' - ) - "); + $res = $AVE_DB->Query(" + INSERT INTO + " . PREFIX . "_document_tags + SET + rubric_id = '".intval($rubric_id)."', + document_id = '" . intval($document_id) . "', + tag = '" . clean_no_print_char($key) . "' + "); + } } } - } - /** - * Метод, предназначенный для сохранения ревизии документа в БД - * - */ - static function SaveRevission($document_id) - { - global $AVE_DB; - - $sql = $AVE_DB->Query(" - SELECT - doc.rubric_field_id, - doc.field_value, - more.field_value as more - FROM - " . PREFIX . "_document_fields AS doc - LEFT JOIN - " . PREFIX . "_document_fields_text AS more - ON - (more.rubric_field_id = doc.rubric_field_id and more.document_id=doc.document_id) - WHERE - doc.document_id = '" . $document_id . "' - "); - - $rows = array(); - - while ($row = $sql->FetchAssocArray()) + /** + * Метод, предназначенный для сохранения ревизии документа в БД + * + */ + static function SaveRevission($document_id) { - $row['field_value'] = (string)$row['field_value'] . (string)$row['more']; - $rows[$row['rubric_field_id']] = pretty_chars(clean_no_print_char($row['field_value'])); - } + global $AVE_DB; - $dtime = $AVE_DB->Query('SELECT document_changed FROM ' . PREFIX . '_documents WHERE Id = ' . $document_id)->GetCell(); + $sql = $AVE_DB->Query(" + SELECT + doc.rubric_field_id, + doc.field_value, + more.field_value as more + FROM + " . PREFIX . "_document_fields AS doc + LEFT JOIN + " . PREFIX . "_document_fields_text AS more + ON + (more.rubric_field_id = doc.rubric_field_id and more.document_id=doc.document_id) + WHERE + doc.document_id = '" . $document_id . "' + "); - $last_rev = @unserialize($AVE_DB->Query("SELECT doc_data FROM " . PREFIX . "_document_rev WHERE doc_id=" . $document_id . " ORDER BY doc_revision DESC LIMIT 1")->GetCell()); - // это я долго пытался понять почему всегда старая ревизия не равна новой даже если просто нажали лишний раз сохранить - // оказывается редактор подсовывет alt="" если альта в имге нету и сносит его если он есть там пустой )))))))))) - // но пусть проверка будет - может редакторы сменятся/апдейтятся а может кто просто хардкором будет код править))) - $dorev = false; + $rows = array(); - foreach ($rows as $k => $v) - { - if ($rows[$k] <> $last_rev[$k]) + while ($row = $sql->FetchAssocArray()) { - $dorev = true; + $row['field_value'] = (string)$row['field_value'] . (string)$row['more']; + $rows[$row['rubric_field_id']] = pretty_chars(clean_no_print_char($row['field_value'])); } - } - if ($dorev) - { - $AVE_DB->Query(" - INSERT INTO - " . PREFIX . "_document_rev - SET - doc_id = '" . $document_id . "', - doc_revision = '" . $dtime . "', - doc_data = '" . addslashes(serialize($rows)) . "', - user_id = '" . $_SESSION['user_id'] ."' - "); - } + $dtime = $AVE_DB->Query('SELECT document_changed FROM ' . PREFIX . '_documents WHERE Id = ' . $document_id)->GetCell(); - return $rows; - } - - /** - * Метод, предназначенный для востановления ревизии документа - * - */ - function documentRevissionRestore($document_id, $revision, $rubric_id) - { + $last_rev = @unserialize($AVE_DB->Query("SELECT doc_data FROM " . PREFIX . "_document_rev WHERE doc_id=" . $document_id . " ORDER BY doc_revision DESC LIMIT 1")->GetCell()); + // это я долго пытался понять почему всегда старая ревизия не равна новой даже если просто нажали лишний раз сохранить + // оказывается редактор подсовывет alt="" если альта в имге нету и сносит его если он есть там пустой )))))))))) + // но пусть проверка будет - может редакторы сменятся/апдейтятся а может кто просто хардкором будет код править))) + $dorev = false; - global $AVE_DB, $AVE_Template; + foreach ($rows as $k => $v) + { + if ($rows[$k] <> $last_rev[$k]) + { + $dorev = true; + } + } - $this->documentPermissionFetch($rubric_id); + if ($dorev) + { + $AVE_DB->Query(" + INSERT INTO + " . PREFIX . "_document_rev + SET + doc_id = '" . $document_id . "', + doc_revision = '" . $dtime . "', + doc_data = '" . addslashes(serialize($rows)) . "', + user_id = '" . $_SESSION['user_id'] ."' + "); + } - if ( (isset($_SESSION[$rubric_id . '_delrev']) && $_SESSION[$rubric_id . '_delrev'] == 1) - || (isset($_SESSION[$rubric_id . '_alles']) && $_SESSION[$rubric_id . '_alles'] == 1) - || (defined('UGROUP') && UGROUP == 1) ) - { - $run = true; + return $rows; } - if ($run === true) + /** + * Метод, предназначенный для востановления ревизии документа + * + */ + function documentRevissionRestore($document_id, $revision, $rubric_id) { - $res = $AVE_DB->Query(" - SELECT - doc_data - FROM - " . PREFIX . "_document_rev - WHERE - doc_id = '" . $document_id . "' - AND - doc_revision = '" . $revision . "' - LIMIT 1 - ")->GetCell(); - if (! $res) - return false; + global $AVE_DB, $AVE_Template; - $data = @unserialize($res); + $this->documentPermissionFetch($rubric_id); - foreach($data as $k => $v) + if ( (isset($_SESSION[$rubric_id . '_delrev']) && $_SESSION[$rubric_id . '_delrev'] == 1) + || (isset($_SESSION[$rubric_id . '_alles']) && $_SESSION[$rubric_id . '_alles'] == 1) + || (defined('UGROUP') && UGROUP == 1) ) { - if ($k) - { - $AVE_DB->Query(" - UPDATE - " . PREFIX . "_document_fields - SET - field_value = '" . mb_substr($v,0,499) . "', - field_number_value = '" . preg_replace('/[^\d.]/', '', $v) . "' - WHERE - document_id = '" . $document_id . "' - AND - rubric_field_id = '" . $k . "' - "); + $run = true; + } + + if ($run === true) + { + $res = $AVE_DB->Query(" + SELECT + doc_data + FROM + " . PREFIX . "_document_rev + WHERE + doc_id = '" . $document_id . "' + AND + doc_revision = '" . $revision . "' + LIMIT 1 + ")->GetCell(); + + if (! $res) + return false; - if (mb_strlen($v) > 500) + $data = @unserialize($res); + + foreach($data as $k => $v) + { + if ($k) { $AVE_DB->Query(" UPDATE - " . PREFIX . "_document_fields_text + " . PREFIX . "_document_fields SET - field_value = '" . mb_substr($v,500) . "' + field_value = '" . mb_substr($v,0,499) . "', + field_number_value = '" . preg_replace('/[^\d.]/', '', $v) . "' WHERE document_id = '" . $document_id . "' AND rubric_field_id = '" . $k . "' "); - } - else + + if (mb_strlen($v) > 500) { $AVE_DB->Query(" - DELETE - FROM - ". PREFIX . "_document_fields_text + UPDATE + " . PREFIX . "_document_fields_text + SET + field_value = '" . mb_substr($v,500) . "' WHERE - document_id= '" . $document_id . "' + document_id = '" . $document_id . "' AND - rubric_field_id='" . $k . "' + rubric_field_id = '" . $k . "' "); } + else + { + $AVE_DB->Query(" + DELETE + FROM + ". PREFIX . "_document_fields_text + WHERE + document_id= '" . $document_id . "' + AND + rubric_field_id='" . $k . "' + "); + } + } } - } - // Сохраняем системное сообщение в журнал - reportLog($AVE_Template->get_config_vars('DOC_REVISION_RECOVER')." (Doc: $document_id Rev: $revision)"); - header('Location:index.php?do=docs&action=edit&Id=' . (int)$_REQUEST['doc_id'] . '&rubric_id=' . (int)$_REQUEST['rubric_id'] . '&cp=' . SESSION); - } - else - { - $AVE_Template->assign('content', $AVE_Template->get_config_vars('DOC_NO_RES_REVISION')); + // Сохраняем системное сообщение в журнал + reportLog($AVE_Template->get_config_vars('DOC_REVISION_RECOVER')." (Doc: $document_id Rev: $revision)"); + header('Location:index.php?do=docs&action=edit&Id=' . (int)$_REQUEST['doc_id'] . '&rubric_id=' . (int)$_REQUEST['rubric_id'] . '&cp=' . SESSION); } - } - - /** - * Метод, предназначенный для удаления ревизии документа - * - */ - function documentRevissionDelete($document_id, $revision, $rubric_id){ - - global $AVE_DB, $AVE_Template; - - $this->documentPermissionFetch($rubric_id); - - if ( (isset($_SESSION[$rubric_id . '_delrev']) && $_SESSION[$rubric_id . '_delrev'] == 1) - || (isset($_SESSION[$rubric_id . '_alles']) && $_SESSION[$rubric_id . '_alles'] == 1) - || (defined('UGROUP') && UGROUP == 1) ){ $run = true; } + else + { + $AVE_Template->assign('content', $AVE_Template->get_config_vars('DOC_NO_RES_REVISION')); + } + } - if ($run === true) - { + /** + * Метод, предназначенный для удаления ревизии документа + * + */ + function documentRevissionDelete($document_id, $revision, $rubric_id){ - $AVE_DB->Query(" - DELETE - FROM - " . PREFIX . "_document_rev - WHERE - doc_id = '" . $document_id . "' - AND - doc_revision='".$revision."' - "); + global $AVE_DB, $AVE_Template; - reportLog($AVE_Template->get_config_vars('DOC_REVISION_DELETE')." (Doc: $document_id Rev: $revision)"); + $this->documentPermissionFetch($rubric_id); - if (! isset($_REQUEST['ajax'])) - { - header('Location:index.php?do=docs&action=edit&rubric_id=' . $rubric_id . '&Id=' . $document_id . '&cp=' . SESSION); - } + if ( (isset($_SESSION[$rubric_id . '_delrev']) && $_SESSION[$rubric_id . '_delrev'] == 1) + || (isset($_SESSION[$rubric_id . '_alles']) && $_SESSION[$rubric_id . '_alles'] == 1) + || (defined('UGROUP') && UGROUP == 1) ){ $run = true; } - } - else + if ($run === true) { - $AVE_Template->assign('content', $AVE_Template->get_config_vars('DOC_NO_DEL_REVISION')); - } - } - - /** - * Метод, предназначенный для сохранения документа в БД - * - * @param int $rubric_id Идентификатор Рубрики - * @param int $document_id Идентификатор Документа или null, если документ новый - * @param array $data Документ в массиве структура - хитрая - * @param bool $update_non_exists_fields Изменять поля на пустые значения у не переданных полей или не надо - * @param bool $rubric_code Использовать код рубрики или не надо - * @param bool $revisions Использовать ревизии документов - * @param bool $logs Писать системные сообщения в журнал - * @param bool $generate Генерировать Meta - * - * return int/bool Возвращает номер документа если все удачно или false если все плохо - */ + $AVE_DB->Query(" + DELETE + FROM + " . PREFIX . "_document_rev + WHERE + doc_id = '" . $document_id . "' + AND + doc_revision='".$revision."' + "); - function documentSave ($rubric_id, $document_id, $data, $update_non_exists_fields = false, $rubric_code = true, $revisions = true, $logs = true, $generate = true) - { - global $AVE_DB, $AVE_Template; + reportLog($AVE_Template->get_config_vars('DOC_REVISION_DELETE')." (Doc: $document_id Rev: $revision)"); - //-- Проверяем входящие данные -- // + if (! isset($_REQUEST['ajax'])) + { + header('Location:index.php?do=docs&action=edit&rubric_id=' . $rubric_id . '&Id=' . $document_id . '&cp=' . SESSION); + } - // Если отсутсвует рубрика, ничего не делаем - if(! $rubric_id) - return false; + } + else + { + $AVE_Template->assign('content', $AVE_Template->get_config_vars('DOC_NO_DEL_REVISION')); + } + } - // Если отсутсвуют данные, ничего не делаем - if(! isset($data)) - return false; - // Если отсутсвуют данные полей, ничего не делаем - if(! isset($data['feld'])) - return false; + /** + * Метод, предназначенный для сохранения документа в БД + * + * @param int $rubric_id Идентификатор Рубрики + * @param int $document_id Идентификатор Документа или null, если документ новый + * @param array $data Документ в массиве структура - хитрая + * @param bool $update_non_exists_fields Изменять поля на пустые значения у не переданных полей или не надо + * @param bool $rubric_code Использовать код рубрики или не надо + * @param bool $revisions Использовать ревизии документов + * @param bool $logs Писать системные сообщения в журнал + * @param bool $generate Генерировать Meta + * + * return int/bool Возвращает номер документа если все удачно или false если все плохо + */ + + function documentSave ($rubric_id, $document_id, $data, $update_non_exists_fields = false, $rubric_code = true, $revisions = true, $logs = true, $generate = true) + { + global $AVE_DB, $AVE_Template; - $rubric_id = (int)$rubric_id; - $document_id = (int)$document_id; + //-- Проверяем входящие данные -- // - // Определяем тип опреации - $oper = 'INSERT'; + // Если отсутсвует рубрика, ничего не делаем + if(! $rubric_id) + return false; - // Забираем параметры рубрики - $_rubric = $this->_get_rubric($rubric_id); + // Если отсутсвуют данные, ничего не делаем + if(! isset($data)) + return false; - // Запускаем триггер перед сохранением - Hooks::trigger('DocumentBeforeSave', array('rubric_id' => $rubric_id, 'document_id' => $document_id, 'data' => $data, 'requests' => $_REQUEST)); + // Если отсутсвуют данные полей, ничего не делаем + if(! isset($data['feld'])) + return false; - // Выполняем стартовый код рубрики - if ($rubric_code) - eval ('?'.'>' . $_rubric->rubric_code_start . '<'.'?'); + $rubric_id = (int)$rubric_id; + $document_id = (int)$document_id; - // Если нет данных для сохранения, перкращаем сохранение и переходим на страницу документов - if (empty($data)) - { - header('Location:index.php?do=docs&rubric_id=' . $rubric_id . '&cp=' . SESSION); - exit; - } + // Определяем тип опреации + $oper = 'INSERT'; - // Если есть ID документа, то ставим оператор UPDATE - if ($document_id > 0) - $oper = 'UPDATE'; + // Забираем параметры рубрики + $_rubric = $this->_get_rubric($rubric_id); - // Если пользователь имеет права на добавление документов в указанную рубрику, тогда - if ($oper == 'INSERT' && !( (isset($_SESSION[$rubric_id . '_newnow']) && $_SESSION[$rubric_id . '_newnow'] == 1) - || (isset($_SESSION[$rubric_id . '_new']) && $_SESSION[$rubric_id . '_new'] == 1) - || (isset($_SESSION[$rubric_id . '_alles']) && $_SESSION[$rubric_id . '_alles'] == 1) - || (defined('UGROUP') && UGROUP == 1) )) - return false; + // Запускаем триггер перед сохранением + Hooks::trigger('DocumentBeforeSave', array('rubric_id' => $rubric_id, 'document_id' => $document_id, 'data' => $data, 'requests' => $_REQUEST)); - // Title документа - $data['document_title'] = $_url = empty($data['document_title']) - ? $AVE_Template->get_config_vars('DOC_WITHOUT_TITLE') - : $data['document_title']; + // Выполняем стартовый код рубрики + if ($rubric_code) + eval ('?'.'>' . $_rubric->rubric_code_start . '<'.'?'); - // Если оператор равен UPDATE - if ($oper == 'UPDATE') - { - // Выполняем запрос к БД на получение автора документа и id Рубрики - $row = $AVE_DB->Query(" - SELECT - rubric_id, - document_author_id - FROM - " . PREFIX . "_documents - WHERE - Id = '" . $document_id . "' - ")->FetchRow(); + // Если нет данных для сохранения, перкращаем сохранение и переходим на страницу документов + if (empty($data)) + { + header('Location:index.php?do=docs&rubric_id=' . $rubric_id . '&cp=' . SESSION); + exit; + } - // Присваиваем значение переменной $rubric_id - $rubric_id = $row->rubric_id; + // Если есть ID документа, то ставим оператор UPDATE + if ($document_id > 0) + $oper = 'UPDATE'; - // Запрещаем редактирвание - $row->cantEdit = 0; + // Если пользователь имеет права на добавление документов в указанную рубрику, тогда + if ($oper == 'INSERT' && !( (isset($_SESSION[$rubric_id . '_newnow']) && $_SESSION[$rubric_id . '_newnow'] == 1) + || (isset($_SESSION[$rubric_id . '_new']) && $_SESSION[$rubric_id . '_new'] == 1) + || (isset($_SESSION[$rubric_id . '_alles']) && $_SESSION[$rubric_id . '_alles'] == 1) + || (defined('UGROUP') && UGROUP == 1) )) + return false; - // Определяем права доступа к документам в данной рубрики - $this->documentPermissionFetch($row->rubric_id); + // Title документа + $data['document_title'] = $_url = empty($data['document_title']) + ? $AVE_Template->get_config_vars('DOC_WITHOUT_TITLE') + : $data['document_title']; - // Разрешаем редактирование - // если автор имеет право изменять свои документы в рубрике - // или пользователю разрешено изменять все документы в рубрике - if ( (isset($_SESSION['user_id']) && $row->document_author_id == $_SESSION['user_id'] && - isset($_SESSION[$row->rubric_id . '_editown']) && $_SESSION[$row->rubric_id . '_editown'] == 1) - || (isset($_SESSION[$row->rubric_id . '_editall']) && @$_SESSION[$row->rubric_id . '_editall'] == 1) ) + // Если оператор равен UPDATE + if ($oper == 'UPDATE') { - // Разрешаем редактирование - $row->cantEdit = 1; - } + // Выполняем запрос к БД на получение автора документа и id Рубрики + $row = $AVE_DB->Query(" + SELECT + rubric_id, + document_author_id + FROM + " . PREFIX . "_documents + WHERE + Id = '" . $document_id . "' + ")->FetchRow(); + + // Присваиваем значение переменной $rubric_id + $rubric_id = $row->rubric_id; - // Запрещаем редактирование главной страницы и страницы ошибки 404 если требуется одобрение Администратора - if ( ($document_id == 1 || $document_id == PAGE_NOT_FOUND_ID) && @$_SESSION[$row->rubric_id . '_editall'] != 1 ) - { // Запрещаем редактирвание $row->cantEdit = 0; - } - // Разрешаем редактирование, если пользователь принадлежит группе Администраторов или имеет все права на рубрику - if ( (defined('UGROUP') && UGROUP == 1) - || (isset($_SESSION[$row->rubric_id . '_alles']) && $_SESSION[$row->rubric_id . '_alles'] == 1) ) - { + // Определяем права доступа к документам в данной рубрики + $this->documentPermissionFetch($row->rubric_id); + // Разрешаем редактирование - $row->cantEdit = 1; - } - - // выходим если нельзя редактировать - if(! $row->cantEdit==1 ) - return false; - - //-- Обрабатываем все данные, пришедшие в запросе --// - - - // Поиск по документу 1 - Да / 0 - Нет - $search = (isset($data['document_in_search']) && $data['document_in_search'] == 1) - ? '1' - : '0'; - - // Если пользователь имеет права на добавление/редактирование документов в указанную рубрику, тогда - if ( - (isset($_SESSION[$row->rubric_id . '_newnow']) && $_SESSION[$row->rubric_id . '_newnow'] == 1) - || - (isset($_SESSION[$row->rubric_id . '_editall']) && $_SESSION[$row->rubric_id . '_editall'] == 1) - || - (isset($_SESSION[$row->rubric_id . '_alles']) && $_SESSION[$row->rubric_id . '_alles'] == 1) - || - (defined('UGROUP') && UGROUP == 1) - ) - { - // Статус документа 1 - Опубликован / 0 - Нет - $document_status = (isset($data['document_status']) - ? $data['document_status'] - : '0'); - } - else + // если автор имеет право изменять свои документы в рубрике + // или пользователю разрешено изменять все документы в рубрике + if ( (isset($_SESSION['user_id']) && $row->document_author_id == $_SESSION['user_id'] && + isset($_SESSION[$row->rubric_id . '_editown']) && $_SESSION[$row->rubric_id . '_editown'] == 1) + || (isset($_SESSION[$row->rubric_id . '_editall']) && @$_SESSION[$row->rubric_id . '_editall'] == 1) ) { - // Не опубликован - $document_status = '0'; + // Разрешаем редактирование + $row->cantEdit = 1; } - // Если ID документа равно 1 или ID равно Документа 404 - // то стату всегда будет 1 - $document_status = ($document_id == 1 || $document_id == PAGE_NOT_FOUND_ID) - ? '1' - : $document_status; + // Запрещаем редактирование главной страницы и страницы ошибки 404 если требуется одобрение Администратора + if ( ($document_id == 1 || $document_id == PAGE_NOT_FOUND_ID) && @$_SESSION[$row->rubric_id . '_editall'] != 1 ) + { + // Запрещаем редактирвание + $row->cantEdit = 0; + } - // Формируем/проверяем адрес на уникальность - if ($document_id != 1) - { - $data['document_alias'] = $_url = prepare_url(empty($data['document_alias']) - ? trim($_POST['prefix'] . '/' . $data['document_title'], '/') - : $data['document_alias']); - } - // Если ID документа = 1, то алиас не меняем - else + // Разрешаем редактирование, если пользователь принадлежит группе Администраторов или имеет все права на рубрику + if ( (defined('UGROUP') && UGROUP == 1) + || (isset($_SESSION[$row->rubric_id . '_alles']) && $_SESSION[$row->rubric_id . '_alles'] == 1) ) { - $data['document_alias'] = "/"; + // Разрешаем редактирование + $row->cantEdit = 1; } - $cnt = 1; + // выходим если нельзя редактировать + if(! $row->cantEdit==1 ) + return false; + + //-- Обрабатываем все данные, пришедшие в запросе --// + - // Проверяем адрес на уникальность, если не уникален - // добавляем число к адресу - while ($AVE_DB->Query(" - SELECT 1 - FROM - " . PREFIX . "_documents - WHERE - Id != '" . $document_id . "' - AND - document_alias = '" . $data['document_alias'] . "' - LIMIT 1 - ")->NumRows() == 1) - { - $data['document_alias'] = $_url . '-' . $cnt; - $cnt++; - } - } - // Если оператор INSERT - else - { // Поиск по документу 1 - Да / 0 - Нет $search = (isset($data['document_in_search']) && $data['document_in_search'] == 1) ? '1' : '0'; - // Статус документа 1 - Опубликован / 0 - Нет - $document_status = ! empty($data['document_status']) - ? (int)$data['document_status'] - : '0'; + // Если пользователь имеет права на добавление/редактирование документов в указанную рубрику, тогда + if ( + (isset($_SESSION[$row->rubric_id . '_newnow']) && $_SESSION[$row->rubric_id . '_newnow'] == 1) + || + (isset($_SESSION[$row->rubric_id . '_editall']) && $_SESSION[$row->rubric_id . '_editall'] == 1) + || + (isset($_SESSION[$row->rubric_id . '_alles']) && $_SESSION[$row->rubric_id . '_alles'] == 1) + || + (defined('UGROUP') && UGROUP == 1) + ) + { + // Статус документа 1 - Опубликован / 0 - Нет + $document_status = (isset($data['document_status']) + ? $data['document_status'] + : '0'); + } + else + { + // Не опубликован + $document_status = '0'; + } + + // Если ID документа равно 1 или ID равно Документа 404 + // то стату всегда будет 1 + $document_status = ($document_id == 1 || $document_id == PAGE_NOT_FOUND_ID) + ? '1' + : $document_status; // Формируем/проверяем адрес на уникальность - $data['document_alias'] = $_url = prepare_url(empty($data['document_alias']) - ? trim($data['prefix'] . '/' . $data['document_title'], '/') - : $data['document_alias']); + if ($document_id != 1) + { + $data['document_alias'] = $_url = prepare_url(empty($data['document_alias']) + ? trim($_POST['prefix'] . '/' . $data['document_title'], '/') + : $data['document_alias']); + } + // Если ID документа = 1, то алиас не меняем + else + { + $data['document_alias'] = "/"; + } $cnt = 1; // Проверяем адрес на уникальность, если не уникален // добавляем число к адресу - while ( - $AVE_DB->Query(" - SELECT 1 - FROM - " . PREFIX . "_documents - WHERE - document_alias = '" . $data['document_alias'] . "' - LIMIT 1 - ")->NumRows() - ) + while ($AVE_DB->Query(" + SELECT 1 + FROM + " . PREFIX . "_documents + WHERE + Id != '" . $document_id . "' + AND + document_alias = '" . $data['document_alias'] . "' + LIMIT 1 + ")->NumRows() == 1) { $data['document_alias'] = $_url . '-' . $cnt; $cnt++; } } + // Если оператор INSERT + else + { + // Поиск по документу 1 - Да / 0 - Нет + $search = (isset($data['document_in_search']) && $data['document_in_search'] == 1) + ? '1' + : '0'; - // Если оператор UPDATE, забираем перед сохранением старый алиас документа - if ($oper == 'UPDATE') - { - $data['document_alias_old'] = $AVE_DB->Query(" - SELECT - document_alias - FROM - " . PREFIX . "_documents - WHERE - Id = '" . $document_id . "' - ")->GetCell(); - } - else + // Статус документа 1 - Опубликован / 0 - Нет + $document_status = ! empty($data['document_status']) + ? (int)$data['document_status'] + : '0'; + + // Формируем/проверяем адрес на уникальность + $data['document_alias'] = $_url = prepare_url(empty($data['document_alias']) + ? trim($data['prefix'] . '/' . $data['document_title'], '/') + : $data['document_alias']); + + $cnt = 1; + + // Проверяем адрес на уникальность, если не уникален + // добавляем число к адресу + while ( + $AVE_DB->Query(" + SELECT 1 + FROM + " . PREFIX . "_documents + WHERE + document_alias = '" . $data['document_alias'] . "' + LIMIT 1 + ")->NumRows() + ) + { + $data['document_alias'] = $_url . '-' . $cnt; + $cnt++; + } + } + + // Если оператор UPDATE, забираем перед сохранением старый алиас документа + if ($oper == 'UPDATE') { - // Если оператор INSERT - // Если новый алиас документа, совпадает с алиасом в истории, просто стираем историю - $AVE_DB->Query(" - DELETE FROM - ". PREFIX . "_document_alias_history + $data['document_alias_old'] = $AVE_DB->Query(" + SELECT + document_alias + FROM + " . PREFIX . "_documents WHERE - document_alias = '" . $data['document_alias'] . "' - "); + Id = '" . $document_id . "' + ")->GetCell(); } + else + { + // Если оператор INSERT + // Если новый алиас документа, совпадает с алиасом в истории, просто стираем историю + $AVE_DB->Query(" + DELETE FROM + ". PREFIX . "_document_alias_history + WHERE + document_alias = '" . $data['document_alias'] . "' + "); + } - // Дата публикации документа - // Для документов с ID = 1 и Ошибки 404, дата не пишется - $data['document_published'] = ($document_id == 1 || $document_id == PAGE_NOT_FOUND_ID) - ? '0' - : $this->_documentStart($data['document_published']); + // Дата публикации документа + // Для документов с ID = 1 и Ошибки 404, дата не пишется + $data['document_published'] = ($document_id == 1 || $document_id == PAGE_NOT_FOUND_ID) + ? '0' + : $this->_documentStart($data['document_published']); - // Дата окончания публикации документа - // Для документов с ID = 1 и Ошибки 404, дата не пишется - $data['document_expire'] = ($document_id == 1 || $document_id == PAGE_NOT_FOUND_ID) - ? '0' - : $this->_documentEnd($data['document_expire']); + // Дата окончания публикации документа + // Для документов с ID = 1 и Ошибки 404, дата не пишется + $data['document_expire'] = ($document_id == 1 || $document_id == PAGE_NOT_FOUND_ID) + ? '0' + : $this->_documentEnd($data['document_expire']); - // Дата изменения документа - $data['document_changed'] = time(); + // Дата изменения документа + $data['document_changed'] = time(); - // Использовать ли историю алиасов - $data['document_alias_history'] = (empty($data['document_alias_history'])) - ? '0' - : $data['document_alias_history']; + // Использовать ли историю алиасов + $data['document_alias_history'] = (empty($data['document_alias_history'])) + ? '0' + : $data['document_alias_history']; - // Sitemap - $data['document_sitemap_freq'] = ($data['document_sitemap_freq'] != '' - ? (int)$data['document_sitemap_freq'] - : 3); + // Sitemap + $data['document_sitemap_freq'] = ($data['document_sitemap_freq'] != '' + ? (int)$data['document_sitemap_freq'] + : 3); - // Sitemap - $data['document_sitemap_pr'] = ($data['document_sitemap_pr'] != '' - ? $data['document_sitemap_pr'] - : '0.5'); + // Sitemap + $data['document_sitemap_pr'] = ($data['document_sitemap_pr'] != '' + ? $data['document_sitemap_pr'] + : '0.5'); - $data['document_linked_navi_id'] = ($data['document_linked_navi_id'] != '' - ? $data['document_linked_navi_id'] - : 0); + $data['document_linked_navi_id'] = ($data['document_linked_navi_id'] != '' + ? $data['document_linked_navi_id'] + : 0); - $fields = array(); + $fields = array(); - // Получаем структуру документа - if ($oper == 'INSERT') - { - $sql = " - SELECT - * - FROM - " . PREFIX . "_rubric_fields - WHERE - rubric_id = '" . $rubric_id . "' - ORDER BY - rubric_field_position ASC - "; - } - else - { - $sql = " - SELECT - rub.*, - rubric_field_default, - df.field_value - FROM - " . PREFIX . "_rubric_fields AS rub - LEFT JOIN - " . PREFIX . "_document_fields AS df - ON rubric_field_id = rub.Id - WHERE - document_id = '" . $document_id . "' - ORDER BY - rubric_field_position ASC - "; - } + // Получаем структуру документа + if ($oper == 'INSERT') + { + $sql = " + SELECT + * + FROM + " . PREFIX . "_rubric_fields + WHERE + rubric_id = '" . $rubric_id . "' + ORDER BY + rubric_field_position ASC + "; + } + else + { + $sql = " + SELECT + rub.*, + rubric_field_default, + df.field_value + FROM + " . PREFIX . "_rubric_fields AS rub + LEFT JOIN + " . PREFIX . "_document_fields AS df + ON rubric_field_id = rub.Id + WHERE + document_id = '" . $document_id . "' + ORDER BY + rubric_field_position ASC + "; + } - $query = $AVE_DB->Query($sql); + $query = $AVE_DB->Query($sql); - // Если пришел вызов поля, который связан с модулем - if (isset($data['field_module'])) - { - while(list($mod_key, $mod_val) = each($_REQUEST['field_module'])) + // Если пришел вызов поля, который связан с модулем + if (isset($data['field_module'])) { - require_once(BASE_DIR . '/modules/' . $mod_val . '/document.php'); + while(list($mod_key, $mod_val) = each($_REQUEST['field_module'])) + { + require_once(BASE_DIR . '/modules/' . $mod_val . '/document.php'); - $mod_function = (string)$mod_val . '_document_save'; + $mod_function = (string)$mod_val . '_document_save'; - $fields = $mod_function($mod_key, $mod_val, $query, $data['feld'][$mod_key], $mod_key, $rubric_id); + $fields = $mod_function($mod_key, $mod_val, $query, $data['feld'][$mod_key], $mod_key, $rubric_id); + } } - } - else - { - while ($row = $query->FetchRow()) + else { - $fields[$row->Id] = $row; + while ($row = $query->FetchRow()) + { + $fields[$row->Id] = $row; + } } - } - - unset ($sql, $query); - - $where = ($oper == 'UPDATE' ? 'WHERE Id = ' . $document_id : ''); - $author = ($oper != 'UPDATE' ? 'document_author_id = ' . $_SESSION['user_id'] . ',' : ''); - $operator = ($oper == 'UPDATE' ? "UPDATE " . PREFIX . "_documents" : "INSERT INTO " . PREFIX . "_documents"); - - $breadcrumb_title = (isset($data['document_breadcrum_title']) && $data['document_breadcrum_title'] != '') - ? $data['document_breadcrum_title'] - : ''; - - $document_tags = isset($data['document_tags']) - ? $data['document_tags'] - : ''; - - // Сохраняем все параметры документа - $sql = " - $operator - SET - rubric_id = '" . $rubric_id . "', - rubric_tmpl_id = '" . (int)$data['rubric_tmpl_id'] . "', - document_parent = '" . (int)$data['document_parent'] . "', - document_title = '" . htmlspecialchars(clean_no_print_char($data['document_title']), ENT_QUOTES) . "', - document_breadcrum_title = '" . htmlspecialchars(clean_no_print_char($breadcrumb_title), ENT_QUOTES) . "', - document_alias = '" . $data['document_alias'] . "', - document_alias_history = '" . $data['document_alias_history'] . "', - document_published = '" . $data["document_published"] . "', - document_expire = '" . $data["document_expire"] . "', - document_changed = '" . $data["document_changed"] . "', - $author - document_in_search = '" . $search . "', - document_meta_keywords = '" . htmlspecialchars(clean_no_print_char($data['document_meta_keywords']), ENT_QUOTES) . "', - document_meta_description = '" . htmlspecialchars(clean_no_print_char($data['document_meta_description']), ENT_QUOTES) . "', - document_meta_robots = '" . $data['document_meta_robots'] . "', - document_sitemap_freq = '" . $data['document_sitemap_freq'] . "', - document_sitemap_pr = '" . $data['document_sitemap_pr'] . "', - document_status = '" . $data['document_status'] . "', - document_linked_navi_id = '" . (int)$data['document_linked_navi_id'] . "', - document_tags = '" . addslashes(htmlspecialchars(clean_no_print_char($document_tags))). "', - document_lang = '" . (empty($data['document_lang']) ? DEFAULT_LANGUAGE : $data['document_lang']). "', - document_lang_group = '" . (empty($data['document_lang_group']) ? '0' : (int)$data['document_lang_group']). "', - document_property = '" . (empty($data['document_property']) ? '' : $data['document_property']). "' - $where - "; - $AVE_DB->Query($sql); + unset ($sql, $query); - // Получаем id добавленной записи - $iid = $AVE_DB->InsertId(); + $where = ($oper == 'UPDATE' ? 'WHERE Id = ' . $document_id : ''); + $author = ($oper != 'UPDATE' ? 'document_author_id = ' . $_SESSION['user_id'] . ',' : ''); + $operator = ($oper == 'UPDATE' ? "UPDATE " . PREFIX . "_documents" : "INSERT INTO " . PREFIX . "_documents"); - // Сохраняем ревизию документа - if ($oper == 'UPDATE' && $revisions) - $this->SaveRevission($document_id); + $breadcrumb_title = (isset($data['document_breadcrum_title']) && $data['document_breadcrum_title'] != '') + ? $data['document_breadcrum_title'] + : ''; - // Переназначаем $document_id - $document_id = $_REQUEST['Id'] = ($oper == "INSERT" ? $iid : $document_id); + $document_tags = isset($data['document_tags']) + ? $data['document_tags'] + : ''; - //Проверяем алиас на изменения (Старый/Новый) - if ( - $oper == 'UPDATE' - AND $data['document_alias'] != $data['document_alias_old'] - AND ( - ($data['document_alias_history'] == '0' AND $_rubric->rubric_alias_history == '1') - OR - ($data['document_alias_history'] == '1') - ) - AND - ($AVE_DB->Query(" - SELECT 1 - FROM - " . PREFIX . "_document_alias_history - WHERE - document_alias = '" . $data['document_alias_old'] . "' - LIMIT 1 - ")->NumRows() == 0) - ) - { - $AVE_DB->Query(" - INSERT INTO - " . PREFIX . "_document_alias_history + // Сохраняем все параметры документа + $sql = " + $operator SET - document_id = '" . $document_id . "', - document_alias = '" . $data['document_alias_old'] . "', - document_alias_author = '" . $_SESSION['user_id'] . "', - document_alias_changed = '" . time() . "' - "); - } - - // Сохраняем системное сообщение в журнал - if ($logs) - reportLog(($oper=='INSERT' - ? $AVE_Template->get_config_vars('DOC_SAVE_ADD') - : $AVE_Template->get_config_vars('DOC_SAVE_EDIT')) . $AVE_Template->get_config_vars('DOC_SAVE_LOG_DOC') .' (' . $data['document_title'] . ' Id: ' . $document_id . ')'); - - // Получаем ID полей в данной рубрике - $rubric_fields = $this->_get_rubric_fields($rubric_id); - - // Получаем ID текстовых полей в данном документе - $document_text_fields = $this->_get_document_text_fields($document_id); + rubric_id = '" . $rubric_id . "', + rubric_tmpl_id = '" . (int)$data['rubric_tmpl_id'] . "', + document_parent = '" . (int)$data['document_parent'] . "', + document_title = '" . htmlspecialchars(clean_no_print_char($data['document_title']), ENT_QUOTES) . "', + document_breadcrum_title = '" . htmlspecialchars(clean_no_print_char($breadcrumb_title), ENT_QUOTES) . "', + document_alias = '" . $data['document_alias'] . "', + document_alias_history = '" . $data['document_alias_history'] . "', + document_published = '" . $data["document_published"] . "', + document_expire = '" . $data["document_expire"] . "', + document_changed = '" . $data["document_changed"] . "', + $author + document_in_search = '" . $search . "', + document_meta_keywords = '" . htmlspecialchars(clean_no_print_char($data['document_meta_keywords']), ENT_QUOTES) . "', + document_meta_description = '" . htmlspecialchars(clean_no_print_char($data['document_meta_description']), ENT_QUOTES) . "', + document_meta_robots = '" . $data['document_meta_robots'] . "', + document_sitemap_freq = '" . $data['document_sitemap_freq'] . "', + document_sitemap_pr = '" . $data['document_sitemap_pr'] . "', + document_status = '" . $data['document_status'] . "', + document_linked_navi_id = '" . (int)$data['document_linked_navi_id'] . "', + document_tags = '" . addslashes(htmlspecialchars(clean_no_print_char($document_tags))). "', + document_lang = '" . (empty($data['document_lang']) ? DEFAULT_LANGUAGE : $data['document_lang']). "', + document_lang_group = '" . (empty($data['document_lang_group']) ? '0' : (int)$data['document_lang_group']). "', + document_property = '" . (empty($data['document_property']) ? '' : $data['document_property']). "' + $where + "; - // Циклически обрабатываем поля документа - foreach ($fields as $k => $v) - { - $fld_id = $v->Id; - $slash = false; + $AVE_DB->Query($sql); - // Если в данных нет поля и мы редактируем документ - изменять ли это поле на пустое значение - if ($oper == 'UPDATE' && (! (isset($data['feld'][$fld_id]))) && ! $update_non_exists_fields) - continue; + // Получаем id добавленной записи + $iid = $AVE_DB->InsertId(); - $fld_val = (isset($data['feld'][$fld_id]) - ? $data['feld'][$fld_id] - : $v->rubric_field_default); + // Сохраняем ревизию документа + if ($oper == 'UPDATE' && $revisions) + $this->SaveRevission($document_id); - /* ------------------------------------------------------------------- */ + // Переназначаем $document_id + $document_id = $_REQUEST['Id'] = ($oper == "INSERT" ? $iid : $document_id); - // Если значение поля не является массивом - if (! is_array ($fld_val)) + //Проверяем алиас на изменения (Старый/Новый) + if ( + $oper == 'UPDATE' + AND $data['document_alias'] != $data['document_alias_old'] + AND ( + ($data['document_alias_history'] == '0' AND $_rubric->rubric_alias_history == '1') + OR + ($data['document_alias_history'] == '1') + ) + AND + ($AVE_DB->Query(" + SELECT 1 + FROM + " . PREFIX . "_document_alias_history + WHERE + document_alias = '" . $data['document_alias_old'] . "' + LIMIT 1 + ")->NumRows() == 0) + ) { - // Если запрещено использование php кода, тогда обнуляем данные поля - if (! check_permission('document_php')) - { - if (is_php_code($fld_val)) - $fld_val = ''; - } - - // Убираем из текста непечатабельные символы - $fld_val = clean_no_print_char($fld_val); - $fld_val = pretty_chars($fld_val); + $AVE_DB->Query(" + INSERT INTO + " . PREFIX . "_document_alias_history + SET + document_id = '" . $document_id . "', + document_alias = '" . $data['document_alias_old'] . "', + document_alias_author = '" . $_SESSION['user_id'] . "', + document_alias_changed = '" . time() . "' + "); } - // Отправляем полученные данные в функцию поля, в раздел "Save" - // для преобразования перед сохранением - $func = 'get_field_' . $rubric_fields[$fld_id]['rubric_field_type']; - - // Если вызывается функция - if (is_callable ($func)) - $fld_val = $func($fld_val, 'save', $fld_id, '', 0, $x, 0, 0, 0); + // Сохраняем системное сообщение в журнал + if ($logs) + reportLog(($oper=='INSERT' + ? $AVE_Template->get_config_vars('DOC_SAVE_ADD') + : $AVE_Template->get_config_vars('DOC_SAVE_EDIT')) . $AVE_Template->get_config_vars('DOC_SAVE_LOG_DOC') .' (' . $data['document_title'] . ' Id: ' . $document_id . ')'); - //-- Собираем запрос к БД на добавление нового поля с его содержимым --// + // Получаем ID полей в данной рубрике + $rubric_fields = $this->_get_rubric_fields($rubric_id); - $where = ($oper == 'UPDATE' - ? "WHERE document_id = '" . $document_id . "' AND rubric_field_id = '" . $fld_id . "'" - : ''); + // Получаем ID текстовых полей в данном документе + $document_text_fields = $this->_get_document_text_fields($document_id); - $operator = ($oper == 'UPDATE' - ? "UPDATE " . PREFIX . "_document_fields" - : "INSERT INTO " . PREFIX . "_document_fields"); + // Циклически обрабатываем поля документа + foreach ($fields as $k => $v) + { + $fld_id = $v->Id; + $slash = false; - $insert = ($oper == 'UPDATE' - ? '' - : "rubric_field_id = '" . $fld_id . "', document_id = '" . $document_id . "',"); + // Если в данных нет поля и мы редактируем документ - изменять ли это поле на пустое значение + if ($oper == 'UPDATE' && (! (isset($data['feld'][$fld_id]))) && ! $update_non_exists_fields) + continue; - $fval = is_array ($fld_val) - ? serialize ($fld_val) - : $fld_val; + $fld_val = (isset($data['feld'][$fld_id]) + ? $data['feld'][$fld_id] + : $v->rubric_field_default); - $substr = 500; + /* ------------------------------------------------------------------- */ - if (mb_substr($fval, 501, 1)) - $substr = 499; + // Если значение поля не является массивом + if (! is_array ($fld_val)) + { + // Если запрещено использование php кода, тогда обнуляем данные поля + if (! check_permission('document_php')) + { + if (is_php_code($fld_val)) + $fld_val = ''; + } - // Сохраняем первые 500 символов - $f_val_500 = mb_substr ($fval, 0, $substr); + // Убираем из текста непечатабельные символы + $fld_val = clean_no_print_char($fld_val); + $fld_val = pretty_chars($fld_val); + } - // Проверяем чтобы не было в конце слеша - \ - if (mb_substr($f_val_500, 498, 1) == '\\') - $slash = true; + // Отправляем полученные данные в функцию поля, в раздел "Save" + // для преобразования перед сохранением + $func = 'get_field_' . $rubric_fields[$fld_id]['rubric_field_type']; - if ($slash) - $f_val_500 = rtrim ($f_val_500, '\\'); + // Если вызывается функция + if (is_callable ($func)) + $fld_val = $func($fld_val, 'save', $fld_id, '', 0, $x, 0, 0, 0); - $sql = " - $operator - SET - $insert - field_value = '" . $f_val_500 . "', - field_number_value = '" . (($rubric_fields[$fld_id]['rubric_field_numeric']) - ? preg_replace ('/[^\d.]/', '', $fld_val) - : 0) . "', - document_in_search = '" . $search . "' - $where - "; + //-- Собираем запрос к БД на добавление нового поля с его содержимым --// - $AVE_DB->Query($sql); + $where = ($oper == 'UPDATE' + ? "WHERE document_id = '" . $document_id . "' AND rubric_field_id = '" . $fld_id . "'" + : ''); - unset ($sql, $f_val_500, $fld_val); + $operator = ($oper == 'UPDATE' + ? "UPDATE " . PREFIX . "_document_fields" + : "INSERT INTO " . PREFIX . "_document_fields"); - // Если символов больше 500, то сохраняем их в другой таблице - if (mb_strlen($fval) > $substr) - { - // Проверяем есть ли запись о поле в БД - $check_field = false; + $insert = ($oper == 'UPDATE' + ? '' + : "rubric_field_id = '" . $fld_id . "', document_id = '" . $document_id . "',"); - if (in_array ($fld_id, $document_text_fields)) - $check_field = true; + $fval = is_array ($fld_val) + ? serialize ($fld_val) + : $fld_val; - $operator = ($check_field - ? "UPDATE " . PREFIX . "_document_fields_text" - : "INSERT INTO " . PREFIX . "_document_fields_text" - ); + $substr = 500; - $where = ($check_field - ? "WHERE document_id = '" . $document_id . "' AND rubric_field_id = '" . $fld_id . "'" - : ''); + if (mb_substr($fval, 501, 1)) + $substr = 499; - $insert = ($check_field - ? '' - : "rubric_field_id = '" . $fld_id . "', document_id = '" . $document_id . "',"); + // Сохраняем первые 500 символов + $f_val_500 = mb_substr ($fval, 0, $substr); - $f_val_unlim = mb_substr($fval, $substr); + // Проверяем чтобы не было в конце слеша - \ + if (mb_substr($f_val_500, 498, 1) == '\\') + $slash = true; if ($slash) - $f_val_unlim = '\\' . $f_val_unlim; + $f_val_500 = rtrim ($f_val_500, '\\'); $sql = " $operator SET $insert - field_value = '" . $f_val_unlim . "' + field_value = '" . $f_val_500 . "', + field_number_value = '" . (($rubric_fields[$fld_id]['rubric_field_numeric']) + ? preg_replace ('/[^\d.]/', '', $fld_val) + : 0) . "', + document_in_search = '" . $search . "' $where "; $AVE_DB->Query($sql); - unset($sql, $f_val_unlim); - } - // Если символов меньше 500, то чистим поле в другой таблице - else + unset ($sql, $f_val_500, $fld_val); + + // Если символов больше 500, то сохраняем их в другой таблице + if (mb_strlen($fval) > $substr) { - $AVE_DB->Query(" - DELETE - FROM - ". PREFIX . "_document_fields_text - WHERE - document_id = '" . $document_id . "' - AND - rubric_field_id='" . $fld_id . "' - "); - } - } + // Проверяем есть ли запись о поле в БД + $check_field = false; - // Очищаем кэш шаблона - $AVE_DB->Query(" - DELETE - FROM - " . PREFIX . "_rubric_template_cache - WHERE - doc_id = '" . $document_id . "' - "); - - $field_module = isset($data['field_module']) - ? $data['field_module'] - : ''; - - // Запускаем триггер после сохранения - Hooks::trigger('DocumentAfterSave', array('rubric_id' => $rubric_id, 'document_id' => $document_id, 'data' => $data, 'field_module' => $field_module)); - - // Выполняем код рубрики, после сохранения - if ($rubric_code) - eval (' ?>' . $_rubric->rubric_code_end . 'clearcache('rub_' . $rubric_id); - $AVE_DB->clearcache('doc_' . $document_id); - $AVE_DB->clearcompile('doc_' . $document_id); - $AVE_DB->clearCacheUrl('url_' . $hash_url); - $AVE_DB->clearcacherequest('doc_' . $document_id); - - unset ($_rubric, $fields); - - // Дополнительные обработки - if ($generate) - { - $this->generateKeywords($document_id); - $this->generateTags($document_id); - } + if (in_array ($fld_id, $document_text_fields)) + $check_field = true; - return $document_id; - } + $operator = ($check_field + ? "UPDATE " . PREFIX . "_document_fields_text" + : "INSERT INTO " . PREFIX . "_document_fields_text" + ); - /** - * Метод, предназначенный для добавления нового документа в БД - * - * @param int $rubric_id идентификатор Рубрики - */ - function documentNew($rubric_id) - { - global $AVE_DB, $AVE_Rubric, $AVE_Template; + $where = ($check_field + ? "WHERE document_id = '" . $document_id . "' AND rubric_field_id = '" . $fld_id . "'" + : ''); - $this->documentPermissionFetch($rubric_id); + $insert = ($check_field + ? '' + : "rubric_field_id = '" . $fld_id . "', document_id = '" . $document_id . "',"); - // Если пользователь имеет права на добавление документов в указанную рубрику, тогда - if ( (isset($_SESSION[$rubric_id . '_newnow']) && $_SESSION[$rubric_id . '_newnow'] == 1) - || (isset($_SESSION[$rubric_id . '_new']) && $_SESSION[$rubric_id . '_new'] == 1) - || (isset($_SESSION[$rubric_id . '_alles']) && $_SESSION[$rubric_id . '_alles'] == 1) - || (defined('UGROUP') && UGROUP == 1) ) - { - // Поля - $sql = $AVE_DB->Query(" - SELECT - a.*, - b.Id AS group_id, - b.group_title, - b.group_description, - b.group_position - FROM - " . PREFIX . "_rubric_fields AS a - LEFT JOIN - " . PREFIX . "_rubric_fields_group AS b - ON a.rubric_field_group = b.Id - WHERE - a.rubric_id = '" . $rubric_id . "' - ORDER BY - b.group_position ASC, - a.rubric_field_position ASC - "); + $f_val_unlim = mb_substr($fval, $substr); - $fields_list = array(); + if ($slash) + $f_val_unlim = '\\' . $f_val_unlim; - while ($row = $sql->FetchRow()) - { - $group_id = ($row->rubric_field_group) ? $row->rubric_field_group : 0; - - $fields_list[$group_id]['group_id'] = $row->group_id; - $fields_list[$group_id]['group_position'] = ($row->group_position) ? $row->group_position : 100; - $fields_list[$group_id]['group_title'] = $row->group_title; - $fields_list[$group_id]['group_description'] = $row->group_description; - $fields_list[$group_id]['fields'][$row->Id]['Id'] = $row->Id; - $fields_list[$group_id]['fields'][$row->Id]['rubric_id'] = $row->rubric_id; - $fields_list[$group_id]['fields'][$row->Id]['rubric_field_title'] = $row->rubric_field_title; - $fields_list[$group_id]['fields'][$row->Id]['rubric_field_description'] = $row->rubric_field_description; - $fields_list[$group_id]['fields'][$row->Id]['rubric_field_default'] = $row->rubric_field_default; - $fields_list[$group_id]['fields'][$row->Id]['result'] = $this->_documentFieldGet($row->rubric_field_type, $row->rubric_field_default, $row->Id, $row->rubric_field_default); - } + $sql = " + $operator + SET + $insert + field_value = '" . $f_val_unlim . "' + $where + "; - $fields_list = msort($fields_list, 'group_position'); + $AVE_DB->Query($sql); - $AVE_Template->assign('groups_count', count($fields_list)); - $AVE_Template->assign('fields_list', $fields_list); + unset($sql, $f_val_unlim); + } + // Если символов меньше 500, то чистим поле в другой таблице + else + { + $AVE_DB->Query(" + DELETE + FROM + ". PREFIX . "_document_fields_text + WHERE + document_id = '" . $document_id . "' + AND + rubric_field_id='" . $fld_id . "' + "); + } + } - // Группы полей - $fields_groups = array(); - - $sql = $AVE_DB->Query(" - SELECT * + // Очищаем кэш шаблона + $AVE_DB->Query(" + DELETE FROM - " . PREFIX . "_rubric_fields_group + " . PREFIX . "_rubric_template_cache WHERE - rubric_id = '" . $rubric_id . "' - ORDER BY - group_position ASC + doc_id = '" . $document_id . "' "); - while ($row = $sql->FetchRow()) - { - array_push($fields_groups, $row); - } + $field_module = isset($data['field_module']) + ? $data['field_module'] + : ''; - $AVE_Template->assign('fields_groups', $fields_groups); + // Запускаем триггер после сохранения + Hooks::trigger('DocumentAfterSave', array('rubric_id' => $rubric_id, 'document_id' => $document_id, 'data' => $data, 'field_module' => $field_module)); - // Определяем вид действия, переданный в параметре sub - switch ($_REQUEST['sub']) - { - case 'save': // Сохранение документа в БД + // Выполняем код рубрики, после сохранения + if ($rubric_code) + eval (' ?>' . $_rubric->rubric_code_end . '_documentStart(); // Дата/время начала публикации документа - $public_end = $this->_documentEnd(); // Дата/время окончания публикации документа + if ($document_id == 1) + $hash_url = md5(''); + else + $hash_url = md5($data['document_alias']); - $innavi = check_permission_acp('navigation_new') ? '&innavi=1' : ''; + // Чистим кеш + $AVE_DB->clearCache('doc_' . $document_id); // Прочее + $AVE_DB->clearCache('fld_' . $document_id); // Поля + $AVE_DB->clearCache('cmd_' . $document_id); // Компиляция + $AVE_DB->clearCache('brd_' . $document_id); // Хлебные крошки + $AVE_DB->clearCache('rqe_' . $document_id); // Элемент запроса + $AVE_DB->clearCacheUrl('url_' . $hash_url); // ЮРЛ - // Определяем статус документа - $document_status = ! empty($_REQUEST['document_status']) - ? (int)$_REQUEST['document_status'] - : '0'; + unset ($_rubric, $fields); - // Если статус документа не определен - if (empty($document_status) && $_SESSION['user_group'] != 1) - { - $innavi = ''; - @reset($_POST); - $newtext = "\n\n"; + // Дополнительные обработки + if ($generate) + $this->generateKeywords($document_id); - // Формируем текст сообщения, состоящий из данных, - // которые пользователь ввел в поля документа - foreach ($_POST['feld'] as $val) - { - if (! empty($val)) - { - $newtext .= $val; - $newtext .= "\n---------------------\n"; - } - } + return $document_id; + } - $text = strip_tags($newtext); - - // Получаем e-mail адрес из общих настроек системы - $system_mail = get_settings('mail_from'); - $system_mail_name = get_settings('mail_from_name'); - - // Отправляем администартору уведомление, о том что необходимо проверить документ - $body_to_admin = $AVE_Template->get_config_vars('DOC_MAIL_BODY_CHECK'); - $body_to_admin = str_replace('%N%', "\n", $body_to_admin); - $body_to_admin = str_replace('%TITLE%', stripslashes($_POST['document_title']), $body_to_admin); - $body_to_admin = str_replace('%USER%', "'" . $_SESSION['user_name'] . "'", $body_to_admin); - - send_mail( - $system_mail, - $body_to_admin . $text, - $AVE_Template->get_config_vars('DOC_MAIL_SUBJECT_CHECK'), - $system_mail, - $system_mail_name, - 'text' - ); + /** + * Метод, предназначенный для добавления нового документа в БД + * + * @param int $rubric_id идентификатор Рубрики + */ + function documentNew($rubric_id) + { + global $AVE_DB, $AVE_Rubric, $AVE_Template; - // Отправляем уведомление автору, о том что документ находится на проверке - $body_to_author = str_replace('%N%', "\n", $AVE_Template->get_config_vars('DOC_MAIL_BODY_USER')); - $body_to_author = str_replace('%TITLE%', stripslashes($_POST['document_title']), $body_to_author); - $body_to_author = str_replace('%USER%', "'" . $_SESSION['user_name'] . "'", $body_to_author); - send_mail( - $_SESSION['user_email'], - $body_to_author, - $AVE_Template->get_config_vars('DOC_MAIL_SUBJECT_USER'), - $system_mail, - $system_mail_name, - 'text' - ); - } + $this->documentPermissionFetch($rubric_id); - if (! ((isset($_SESSION[$rubric_id . '_newnow']) && $_SESSION[$rubric_id . '_newnow'] == 1) - || (isset($_SESSION[$rubric_id . '_alles']) && $_SESSION[$rubric_id . '_alles'] == 1) - || (defined('UGROUP') && UGROUP == 1)) ) - { - $document_status = 0; - } + // Если пользователь имеет права на добавление документов в указанную рубрику, тогда + if ( (isset($_SESSION[$rubric_id . '_newnow']) && $_SESSION[$rubric_id . '_newnow'] == 1) + || (isset($_SESSION[$rubric_id . '_new']) && $_SESSION[$rubric_id . '_new'] == 1) + || (isset($_SESSION[$rubric_id . '_alles']) && $_SESSION[$rubric_id . '_alles'] == 1) + || (defined('UGROUP') && UGROUP == 1) ) + { + // Поля + $sql = $AVE_DB->Query(" + SELECT + a.*, + b.Id AS group_id, + b.group_title, + b.group_description, + b.group_position + FROM + " . PREFIX . "_rubric_fields AS a + LEFT JOIN + " . PREFIX . "_rubric_fields_group AS b + ON a.rubric_field_group = b.Id + WHERE + a.rubric_id = '" . $rubric_id . "' + ORDER BY + b.group_position ASC, + a.rubric_field_position ASC + "); - $_POST['document_status'] = $document_status; + $fields_list = array(); - $iid = $this->documentSave($rubric_id, null, $_POST, true); + while ($row = $sql->FetchRow()) + { + $group_id = ($row->rubric_field_group) ? $row->rubric_field_group : 0; + + $fields_list[$group_id]['group_id'] = $row->group_id; + $fields_list[$group_id]['group_position'] = ($row->group_position) ? $row->group_position : 100; + $fields_list[$group_id]['group_title'] = $row->group_title; + $fields_list[$group_id]['group_description'] = $row->group_description; + $fields_list[$group_id]['fields'][$row->Id]['Id'] = $row->Id; + $fields_list[$group_id]['fields'][$row->Id]['rubric_id'] = $row->rubric_id; + $fields_list[$group_id]['fields'][$row->Id]['rubric_field_title'] = $row->rubric_field_title; + $fields_list[$group_id]['fields'][$row->Id]['rubric_field_description'] = $row->rubric_field_description; + $fields_list[$group_id]['fields'][$row->Id]['rubric_field_default'] = $row->rubric_field_default; + $fields_list[$group_id]['fields'][$row->Id]['result'] = $this->_documentFieldGet($row->rubric_field_type, $row->rubric_field_default, $row->Id, $row->rubric_field_default); + } - if ($_REQUEST['doc_after']) - header('Location:index.php?do=docs&action=after&document_id=' . $iid . '&rubric_id=' . $rubric_id . '&cp=' . SESSION . $innavi); - else - header('Location:index.php?do=docs&action=edit&Id=' . $iid . '&rubric_id=' . $rubric_id . '&cp=' . SESSION); - exit; + $fields_list = msort($fields_list, 'group_position'); - case '': // Действия по умолчанию, если не задано - $document = new stdClass(); + $AVE_Template->assign('groups_count', count($fields_list)); + $AVE_Template->assign('fields_list', $fields_list); - // Получаем список прав доступа на добавление документов в определенную рубрику - $this->documentPermissionFetch($rubric_id); + // Группы полей + $fields_groups = array(); - // Определяем флаг, который будет активировать или запрещать смену статуса у документа - if ( (defined('UGROUP') && UGROUP == 1) - || (isset($_SESSION[$rubric_id . '_alles']) && $_SESSION[$rubric_id . '_alles'] == 1) - || (isset($_SESSION[$rubric_id . '_newnow']) && $_SESSION[$rubric_id . '_newnow'] == 1) ) - { - $document->dontChangeStatus = 0; - } - else - { - $document->dontChangeStatus = 1; - } + $sql = $AVE_DB->Query(" + SELECT * + FROM + " . PREFIX . "_rubric_fields_group + WHERE + rubric_id = '" . $rubric_id . "' + ORDER BY + group_position ASC + "); - $maxId = $AVE_DB->Query(" - SELECT - MAX(Id) - FROM - " . PREFIX . "_documents - ")->GetCell(); + while ($row = $sql->FetchRow()) + { + array_push($fields_groups, $row); + } - // получения списка документов из связанной рубрики - $linked_id = $AVE_DB->Query(" - SELECT - rubric_linked_rubric - FROM - " . PREFIX . "_rubrics - WHERE - Id = '".$rubric_id."' - ")->GetCell(); + $AVE_Template->assign('fields_groups', $fields_groups); - $linked_id = @unserialize($linked_id); + // Определяем вид действия, переданный в параметре sub + switch ($_REQUEST['sub']) + { + case 'save': // Сохранение документа в БД - $document_alias = array(); + $public_start = $this->_documentStart(); // Дата/время начала публикации документа + $public_end = $this->_documentEnd(); // Дата/время окончания публикации документа - if ($linked_id) - { - foreach ($linked_id as $linked_id) + $innavi = check_permission_acp('navigation_new') ? '&innavi=1' : ''; + + // Определяем статус документа + $document_status = ! empty($_REQUEST['document_status']) + ? (int)$_REQUEST['document_status'] + : '0'; + + // Если статус документа не определен + if (empty($document_status) && $_SESSION['user_group'] != 1) { - $sql = $AVE_DB->Query(" - SELECT - doc.document_alias, - doc.document_title, - doc.document_breadcrum_title, - doc.Id, - rub.rubric_title - FROM - " . PREFIX . "_documents as doc - JOIN - " . PREFIX . "_rubrics as rub - ON rub.Id = doc.rubric_id - WHERE - doc.rubric_id = '".$linked_id."' - "); + $innavi = ''; + @reset($_POST); + $newtext = "\n\n"; - while ($row = $sql->FetchRow()) + // Формируем текст сообщения, состоящий из данных, + // которые пользователь ввел в поля документа + foreach ($_POST['feld'] as $val) { - $document_alias[$row->rubric_title][] = array( - 'document_alias' => $row->document_alias, - 'document_title' => $row->document_title, - 'document_breadcrum_title' => $row->document_breadcrum_title, - 'Id' => $row->Id - ); + if (! empty($val)) + { + $newtext .= $val; + $newtext .= "\n---------------------\n"; + } } - } - } - - // получения списка документов из связанной рубрики - $AVE_Template->assign('document_alias', $document_alias); - - $lang_pack = array(); - if (! empty($_REQUEST['lang_pack'])) - { - $sql1 = $AVE_DB->Query(" - SELECT - Id, - rubric_id, - document_alias, - document_lang, - document_status - FROM - ".PREFIX."_documents - WHERE - document_lang_group=".intval($_REQUEST['lang_pack'])." OR Id=".intval($_REQUEST['lang_pack'])); + $text = strip_tags($newtext); + + // Получаем e-mail адрес из общих настроек системы + $system_mail = get_settings('mail_from'); + $system_mail_name = get_settings('mail_from_name'); + + // Отправляем администартору уведомление, о том что необходимо проверить документ + $body_to_admin = $AVE_Template->get_config_vars('DOC_MAIL_BODY_CHECK'); + $body_to_admin = str_replace('%N%', "\n", $body_to_admin); + $body_to_admin = str_replace('%TITLE%', stripslashes($_POST['document_title']), $body_to_admin); + $body_to_admin = str_replace('%USER%', "'" . $_SESSION['user_name'] . "'", $body_to_admin); + + send_mail( + $system_mail, + $body_to_admin . $text, + $AVE_Template->get_config_vars('DOC_MAIL_SUBJECT_CHECK'), + $system_mail, + $system_mail_name, + 'text' + ); + + // Отправляем уведомление автору, о том что документ находится на проверке + $body_to_author = str_replace('%N%', "\n", $AVE_Template->get_config_vars('DOC_MAIL_BODY_USER')); + $body_to_author = str_replace('%TITLE%', stripslashes($_POST['document_title']), $body_to_author); + $body_to_author = str_replace('%USER%', "'" . $_SESSION['user_name'] . "'", $body_to_author); + send_mail( + $_SESSION['user_email'], + $body_to_author, + $AVE_Template->get_config_vars('DOC_MAIL_SUBJECT_USER'), + $system_mail, + $system_mail_name, + 'text' + ); + } - while ($row1 = $sql1->FetchAssocArray()) + if (! ((isset($_SESSION[$rubric_id . '_newnow']) && $_SESSION[$rubric_id . '_newnow'] == 1) + || (isset($_SESSION[$rubric_id . '_alles']) && $_SESSION[$rubric_id . '_alles'] == 1) + || (defined('UGROUP') && UGROUP == 1)) ) { - $lang_pack[$row1['document_lang']] = $row1; - - if ($row1['Id'] == intval($_REQUEST['lang_pack'])) - $document->document_alias=$_REQUEST['lang'].'/'.trim(ltrim($row1['document_alias'], $row1['document_lang']), '/'); + $document_status = 0; } - } - // Формируем данные и передаем в шаблон - $document->lang_pack=$lang_pack; - $document->fields = $fields_list; - $document->rubric_title = $AVE_Rubric->rubricNameByIdGet($rubric_id)->rubric_title; - $document->rubric_url_prefix = strftime(str_ireplace("%id", $maxId+1, $AVE_Rubric->rubricNameByIdGet($rubric_id)->rubric_alias)); - $document->formaction = 'index.php?do=docs&action=new&sub=save&rubric_id=' . $rubric_id . ((isset($_REQUEST['pop']) && $_REQUEST['pop']==1) ? 'pop=1' : '') . '&cp=' . SESSION; - $document->count_groups = count($fields_list); - $document->document_published = time(); - $document->document_expire = mktime(date("H"), date("i"), 0, date("m"), date("d"), date("Y") + 10); + $_POST['document_status'] = $document_status; - $rubric_tmpls = array(); + $iid = $this->documentSave($rubric_id, null, $_POST, true); - $sql = $AVE_DB->Query(" - SELECT - id, - title - FROM - " . PREFIX . "_rubric_templates - WHERE - rubric_id = '" . $rubric_id . "' - "); + if ($_REQUEST['doc_after']) + header('Location:index.php?do=docs&action=after&document_id=' . $iid . '&rubric_id=' . $rubric_id . '&cp=' . SESSION . $innavi); + else + header('Location:index.php?do=docs&action=edit&Id=' . $iid . '&rubric_id=' . $rubric_id . '&cp=' . SESSION); + exit; - while ($row = $sql->FetchRow()) - { - array_push($rubric_tmpls, $row); - } + case '': // Действия по умолчанию, если не задано + $document = new stdClass(); - // Доступные шаблоны рубрики - $AVE_Template->assign('rubric_tmpls', $rubric_tmpls); + // Получаем список прав доступа на добавление документов в определенную рубрику + $this->documentPermissionFetch($rubric_id); - $AVE_Template->assign('document', $document); - $AVE_Template->assign('content', $AVE_Template->fetch('documents/form.tpl')); - break; - } - } - else - { // Пользователь не имеет прав на создание документа, формируем сообщение с ошибкой - $AVE_Template->assign('erorr', $AVE_Template->get_config_vars('DOC_NO_PERMISSION_RUB')); - $AVE_Template->assign('content', $AVE_Template->fetch('error.tpl')); - } - } + // Определяем флаг, который будет активировать или запрещать смену статуса у документа + if ( (defined('UGROUP') && UGROUP == 1) + || (isset($_SESSION[$rubric_id . '_alles']) && $_SESSION[$rubric_id . '_alles'] == 1) + || (isset($_SESSION[$rubric_id . '_newnow']) && $_SESSION[$rubric_id . '_newnow'] == 1) ) + { + $document->dontChangeStatus = 0; + } + else + { + $document->dontChangeStatus = 1; + } - /** - * Метод, предназначенный для редактирования документа - * - * @param int $document_id идентификатор Документа - */ - function documentEdit($document_id) - { - global $AVE_DB, $AVE_Rubric, $AVE_Template; + $maxId = $AVE_DB->Query(" + SELECT + MAX(Id) + FROM + " . PREFIX . "_documents + ")->GetCell(); - // Определяем действие, выбранное пользователем - switch ($_REQUEST['sub']) - { - // Если была нажата кнопка Сохранить изменения - case 'save': + // получения списка документов из связанной рубрики + $linked_id = $AVE_DB->Query(" + SELECT + rubric_linked_rubric + FROM + " . PREFIX . "_rubrics + WHERE + Id = '".$rubric_id."' + ")->GetCell(); - $row = $AVE_DB->Query(" - SELECT - rubric_id, - document_author_id - FROM - " . PREFIX . "_documents - WHERE - Id = '" . $document_id . "' - ")->FetchRow(); + $linked_id = @unserialize($linked_id); - $this->documentSave($row->rubric_id, $document_id, $_POST, true); + $document_alias = array(); - if (isset($_REQUEST['closeafter']) && $_REQUEST['closeafter'] == 1) - { - if (! isAjax()) - { - echo ""; - } - else + if ($linked_id) { - $message = $AVE_Template->get_config_vars('DOCUMENT_SAVED'); - $header = $AVE_Template->get_config_vars('DOC_REV_SUCCESS'); - $theme = 'accept'; - echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); - exit; + foreach ($linked_id as $linked_id) + { + $sql = $AVE_DB->Query(" + SELECT + doc.document_alias, + doc.document_title, + doc.document_breadcrum_title, + doc.Id, + rub.rubric_title + FROM + " . PREFIX . "_documents as doc + JOIN + " . PREFIX . "_rubrics as rub + ON rub.Id = doc.rubric_id + WHERE + doc.rubric_id = '".$linked_id."' + "); + + while ($row = $sql->FetchRow()) + { + $document_alias[$row->rubric_title][] = array( + 'document_alias' => $row->document_alias, + 'document_title' => $row->document_title, + 'document_breadcrum_title' => $row->document_breadcrum_title, + 'Id' => $row->Id + ); + } + } } - } - else - { - if (! isAjax()) - { - header('Location:index.php?do=docs&action=after&document_id=' . $document_id . '&rubric_id=' . $row->rubric_id . '&cp=' . SESSION); - } - else + // получения списка документов из связанной рубрики + $AVE_Template->assign('document_alias', $document_alias); + + $lang_pack = array(); + + if (! empty($_REQUEST['lang_pack'])) { - $message = $AVE_Template->get_config_vars('DOCUMENT_SAVED'); - $header = $AVE_Template->get_config_vars('DOC_REV_SUCCESS'); - $theme = 'accept'; - echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); - exit; - } - } - exit; + $sql1 = $AVE_DB->Query(" + SELECT + Id, + rubric_id, + document_alias, + document_lang, + document_status + FROM + ".PREFIX."_documents + WHERE + document_lang_group=".intval($_REQUEST['lang_pack'])." OR Id=".intval($_REQUEST['lang_pack'])); - // Если пользователь не выполнял никаких действий, а просто открыл документ для редактирования - case '': - // Выполняем запрос к БД на получение данных о документе - $document = $AVE_DB->Query(" - SELECT * - FROM - " . PREFIX . "_documents - WHERE - Id = '" . $document_id . "' - ")->FetchRow(); + while ($row1 = $sql1->FetchAssocArray()) + { + $lang_pack[$row1['document_lang']] = $row1; - $lang_pack = array(); + if ($row1['Id'] == intval($_REQUEST['lang_pack'])) + $document->document_alias=$_REQUEST['lang'].'/'.trim(ltrim($row1['document_alias'], $row1['document_lang']), '/'); + } + } - $sql = $AVE_DB->Query(" - SELECT - Id, - document_alias, - document_lang, - document_lang_group, - document_status - FROM - ".PREFIX."_documents - WHERE - ". ($document->document_lang_group > 0 - ? "document_lang_group = ".$document->document_lang_group." OR Id = ".$document->document_lang_group." OR " - : "")."document_lang_group = ".$document_id." OR Id = ".$document_id - ); + // Формируем данные и передаем в шаблон + $document->lang_pack=$lang_pack; + $document->fields = $fields_list; + $document->rubric_title = $AVE_Rubric->rubricNameByIdGet($rubric_id)->rubric_title; + $document->rubric_url_prefix = strftime(str_ireplace("%id", $maxId+1, $AVE_Rubric->rubricNameByIdGet($rubric_id)->rubric_alias)); + $document->formaction = 'index.php?do=docs&action=new&sub=save&rubric_id=' . $rubric_id . ((isset($_REQUEST['pop']) && $_REQUEST['pop']==1) ? 'pop=1' : '') . '&cp=' . SESSION; + $document->count_groups = count($fields_list); + $document->document_published = time(); + $document->document_expire = mktime(date("H"), date("i"), 0, date("m"), date("d"), date("Y") + 10); - while ($row = $sql->FetchAssocArray()) - { - $lang_pack[$row['document_lang']] = $row; - } + $rubric_tmpls = array(); - $document->lang_pack = $lang_pack; + $sql = $AVE_DB->Query(" + SELECT + id, + title + FROM + " . PREFIX . "_rubric_templates + WHERE + rubric_id = '" . $rubric_id . "' + "); - $show = true; + while ($row = $sql->FetchRow()) + { + array_push($rubric_tmpls, $row); + } - // Проверяем права доступа к документу - $this->documentPermissionFetch($document->rubric_id); + // Доступные шаблоны рубрики + $AVE_Template->assign('rubric_tmpls', $rubric_tmpls); - // запрещаем доступ, - // если автору документа не разрешено изменять свои документы в рубрике - // или пользователю не разрешено изменять все документы в рубрике - if (!( (isset($_SESSION['user_id']) && $document->document_author_id == $_SESSION['user_id'] - && isset($_SESSION[$document->rubric_id . '_editown']) && $_SESSION[$document->rubric_id . '_editown'] == 1) - || (isset($_SESSION[$document->rubric_id . '_editall']) && $_SESSION[$document->rubric_id . '_editall'] == 1))) - { - $show = false; + $AVE_Template->assign('document', $document); + $AVE_Template->assign('content', $AVE_Template->fetch('documents/form.tpl')); + break; } + } + else + { // Пользователь не имеет прав на создание документа, формируем сообщение с ошибкой + $AVE_Template->assign('erorr', $AVE_Template->get_config_vars('DOC_NO_PERMISSION_RUB')); + $AVE_Template->assign('content', $AVE_Template->fetch('error.tpl')); + } + } - // запрещаем доступ к главной странице и странице ошибки 404, если требуется одобрение Администратора - if ( ($document_id == 1 || $document_id == PAGE_NOT_FOUND_ID) && - !(isset($_SESSION[$document->rubric_id . '_editall']) && $_SESSION[$document->rubric_id . '_editall'] == 1) ) - { - $show = false; - } + /** + * Метод, предназначенный для редактирования документа + * + * @param int $document_id идентификатор Документа + */ + function documentEdit($document_id) + { + global $AVE_DB, $AVE_Rubric, $AVE_Template; - // разрешаем доступ, если пользователь принадлежит группе Администраторов или имеет все права на рубрику - if ( (defined('UGROUP') && UGROUP == 1) - || (isset($_SESSION[$document->rubric_id . '_alles']) && $_SESSION[$document->rubric_id . '_alles'] == 1) ) - { - $show = true; - } + // Определяем действие, выбранное пользователем + switch ($_REQUEST['sub']) + { + // Если была нажата кнопка Сохранить изменения + case 'save': - if ($show) - { - $fields = array(); + $row = $AVE_DB->Query(" + SELECT + rubric_id, + document_author_id + FROM + " . PREFIX . "_documents + WHERE + Id = '" . $document_id . "' + ")->FetchRow(); - if ( - (defined('UGROUP') && UGROUP == 1) - || (isset($_SESSION[$document->rubric_id . '_newnow']) && $_SESSION[$document->rubric_id . '_newnow'] == 1) - || (isset($_SESSION[$document->rubric_id . '_editall']) && $_SESSION[$document->rubric_id . '_editall'] == 1) - || (isset($_SESSION[$document->rubric_id . '_editown']) && $_SESSION[$document->rubric_id . '_editown'] == 1) - || (isset($_SESSION[$document->rubric_id . '_alles']) && $_SESSION[$document->rubric_id . '_alles'] == 1) - ) + $this->documentSave($row->rubric_id, $document_id, $_POST, true); + + if (isset($_REQUEST['closeafter']) && $_REQUEST['closeafter'] == 1) { - $document->dontChangeStatus = 0; + if (! isAjax()) + { + echo ""; + } + else + { + $message = $AVE_Template->get_config_vars('DOCUMENT_SAVED'); + $header = $AVE_Template->get_config_vars('DOC_REV_SUCCESS'); + $theme = 'accept'; + echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); + exit; + } } else { - $document->dontChangeStatus = 1; + + if (! isAjax()) + { + header('Location:index.php?do=docs&action=after&document_id=' . $document_id . '&rubric_id=' . $row->rubric_id . '&cp=' . SESSION); + } + else + { + $message = $AVE_Template->get_config_vars('DOCUMENT_SAVED'); + $header = $AVE_Template->get_config_vars('DOC_REV_SUCCESS'); + $theme = 'accept'; + echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); + exit; + } } + exit; - // Выполняем запрос к БД на получение списка полей, которые относятся к данному документу - $sql = $AVE_DB->Query(" + // Если пользователь не выполнял никаких действий, а просто открыл документ для редактирования + case '': + // Выполняем запрос к БД на получение данных о документе + $document = $AVE_DB->Query(" SELECT * FROM - " . PREFIX . "_rubric_fields + " . PREFIX . "_documents WHERE - rubric_id = '" . $document->rubric_id . "' - ORDER BY - rubric_field_position ASC - "); - - // не парсим поля, просто создаём контрольный массив полей - while ($row = $sql->FetchRow()) - { - $fields[$row->Id] = $row; - } + Id = '" . $document_id . "' + ")->FetchRow(); - $doc_fields = array(); + $lang_pack = array(); - // Выполняем запрос к БД и получаем все данные для полей документа $sql = $AVE_DB->Query(" SELECT - doc.Id AS df_id, - groups.*, - groups.Id AS group_id, - rub.*, - rubric_field_default, - rubric_field_alias, - doc.field_value, - field_more.field_value as field_value_more + Id, + document_alias, + document_lang, + document_lang_group, + document_status FROM - " . PREFIX . "_rubric_fields AS rub - LEFT JOIN - " . PREFIX . "_rubric_fields_group AS groups - ON rub.rubric_field_group = groups.Id - LEFT JOIN - " . PREFIX . "_document_fields AS doc - ON (rubric_field_id = rub.Id) - LEFT JOIN - " . PREFIX . "_document_fields_text AS field_more - ON (field_more.rubric_field_id = doc.rubric_field_id AND doc.document_id=field_more.document_id) + ".PREFIX."_documents WHERE - doc.document_id = '" . $document_id . "' - ORDER BY - groups.group_position ASC, rub.rubric_field_position ASC - "); + ". ($document->document_lang_group > 0 + ? "document_lang_group = ".$document->document_lang_group." OR Id = ".$document->document_lang_group." OR " + : "")."document_lang_group = ".$document_id." OR Id = ".$document_id + ); + + while ($row = $sql->FetchAssocArray()) + { + $lang_pack[$row['document_lang']] = $row; + } + + $document->lang_pack = $lang_pack; + + $show = true; + + // Проверяем права доступа к документу + $this->documentPermissionFetch($document->rubric_id); - // записываем массив с полями документа - while ($row = $sql->FetchRow()) + // запрещаем доступ, + // если автору документа не разрешено изменять свои документы в рубрике + // или пользователю не разрешено изменять все документы в рубрике + if (!( (isset($_SESSION['user_id']) && $document->document_author_id == $_SESSION['user_id'] + && isset($_SESSION[$document->rubric_id . '_editown']) && $_SESSION[$document->rubric_id . '_editown'] == 1) + || (isset($_SESSION[$document->rubric_id . '_editall']) && $_SESSION[$document->rubric_id . '_editall'] == 1))) { - $row->field_value = (string)$row->field_value . (string)$row->field_value_more; - $row->field = $this->_documentFieldGet($row->rubric_field_type, $row->field_value, $row->Id, $row->rubric_field_default); + $show = false; + } + + // запрещаем доступ к главной странице и странице ошибки 404, если требуется одобрение Администратора + if ( ($document_id == 1 || $document_id == PAGE_NOT_FOUND_ID) && + !(isset($_SESSION[$document->rubric_id . '_editall']) && $_SESSION[$document->rubric_id . '_editall'] == 1) ) + { + $show = false; + } - $doc_fields[$row->Id] = $row; + // разрешаем доступ, если пользователь принадлежит группе Администраторов или имеет все права на рубрику + if ( (defined('UGROUP') && UGROUP == 1) + || (isset($_SESSION[$document->rubric_id . '_alles']) && $_SESSION[$document->rubric_id . '_alles'] == 1) ) + { + $show = true; } - // для каждого поля из контрольного массива... - foreach ($fields as $field_id => $row) + if ($show) { - // если в документе поле есть, то записываем его - if ($doc_fields[$field_id]) + $fields = array(); + + if ( + (defined('UGROUP') && UGROUP == 1) + || (isset($_SESSION[$document->rubric_id . '_newnow']) && $_SESSION[$document->rubric_id . '_newnow'] == 1) + || (isset($_SESSION[$document->rubric_id . '_editall']) && $_SESSION[$document->rubric_id . '_editall'] == 1) + || (isset($_SESSION[$document->rubric_id . '_editown']) && $_SESSION[$document->rubric_id . '_editown'] == 1) + || (isset($_SESSION[$document->rubric_id . '_alles']) && $_SESSION[$document->rubric_id . '_alles'] == 1) + ) { - $fields[$field_id] = $doc_fields[$field_id]; + $document->dontChangeStatus = 0; } - - // если нет, парсим чистое поле и добавляем в бд else { - $row->field = $this->_documentFieldGet($row->rubric_field_type, $row->rubric_field_default, $row->Id, $row->rubric_field_default); + $document->dontChangeStatus = 1; + } - $fields[$field_id] = $row; + // Выполняем запрос к БД на получение списка полей, которые относятся к данному документу + $sql = $AVE_DB->Query(" + SELECT * + FROM + " . PREFIX . "_rubric_fields + WHERE + rubric_id = '" . $document->rubric_id . "' + ORDER BY + rubric_field_position ASC + "); - $AVE_DB->Query(" - INSERT INTO " . PREFIX . "_document_fields - SET - rubric_field_id = '" . $field_id . "', - document_id = '" . $document->Id . "' - "); + // не парсим поля, просто создаём контрольный массив полей + while ($row = $sql->FetchRow()) + { + $fields[$row->Id] = $row; } - } - - foreach ($fields as $field) - { - $group_id = ($field->rubric_field_group) ? $field->rubric_field_group : 0; - $fields_list[$group_id]['group_id'] = $field->group_id; - $fields_list[$group_id]['group_position'] = ($field->group_position) ? $field->group_position : 100; - $fields_list[$group_id]['group_title'] = $field->group_title; - $fields_list[$group_id]['fields'][$field->Id]['Id'] = $field->Id; - $fields_list[$group_id]['fields'][$field->Id]['rubric_id'] = $row->rubric_id; - $fields_list[$group_id]['fields'][$field->Id]['rubric_field_title'] = $field->rubric_field_title; - $fields_list[$group_id]['fields'][$field->Id]['rubric_field_alias'] = $field->rubric_field_alias; - $fields_list[$group_id]['fields'][$field->Id]['rubric_field_description'] = $field->rubric_field_description; - $fields_list[$group_id]['fields'][$field->Id]['result'] = $field->field; - } - $fields_list = msort($fields_list, 'group_position'); + $doc_fields = array(); - unset($doc_fields); - unset($fields); + // Выполняем запрос к БД и получаем все данные для полей документа + $sql = $AVE_DB->Query(" + SELECT + doc.Id AS df_id, + groups.*, + groups.Id AS group_id, + rub.*, + rubric_field_default, + rubric_field_alias, + doc.field_value, + field_more.field_value as field_value_more + FROM + " . PREFIX . "_rubric_fields AS rub + LEFT JOIN + " . PREFIX . "_rubric_fields_group AS groups + ON rub.rubric_field_group = groups.Id + LEFT JOIN + " . PREFIX . "_document_fields AS doc + ON (rubric_field_id = rub.Id) + LEFT JOIN + " . PREFIX . "_document_fields_text AS field_more + ON (field_more.rubric_field_id = doc.rubric_field_id AND doc.document_id=field_more.document_id) + WHERE + doc.document_id = '" . $document_id . "' + ORDER BY + groups.group_position ASC, rub.rubric_field_position ASC + "); - // Заглушка на время публикации - $document->document_published = ($document_id == 1 || $document_id == PAGE_NOT_FOUND_ID) ? '0' : $document->document_published = $document->document_published == 0 ? time() : $document->document_published; - $document->document_expire = ($document_id == 1 || $document_id == PAGE_NOT_FOUND_ID) ? '0' : $document->document_expire = $document->document_expire == 0 ? mktime(date("H"), date("i"), 0, date("m"), date("d"), date("Y") + 10) : $document->document_expire; + // записываем массив с полями документа + while ($row = $sql->FetchRow()) + { + $row->field_value = (string)$row->field_value . (string)$row->field_value_more; + $row->field = $this->_documentFieldGet($row->rubric_field_type, $row->field_value, $row->Id, $row->rubric_field_default); - // Формируем ряд переменных и передаем их в шаблон для вывода - $document->fields = $fields_list; - $document->count_groups = count($fields_list); - $document->document_title = htmlspecialchars_decode(stripslashes(html_entity_decode($document->document_title))); - $document->document_meta_keywords = htmlspecialchars_decode(stripslashes(html_entity_decode($document->document_meta_keywords))); - $document->document_meta_description = htmlspecialchars_decode(stripslashes(html_entity_decode($document->document_meta_description))); - $document->document_breadcrum_title = htmlspecialchars_decode(stripslashes(html_entity_decode($document->document_breadcrum_title))); - $document->document_alias_breadcrumb = rewrite_link('index.php?id=' . $document->Id . '&doc=' . (empty($document->document_alias) ? prepare_url($document->document_title) : $document->document_alias)); - $document->rubric_title = $AVE_Rubric->rubricNameByIdGet($document->rubric_id)->rubric_title; - $document->rubric_url_prefix = $AVE_Rubric->rubricNameByIdGet($document->rubric_id)->rubric_alias; - $document->formaction = 'index.php?do=docs&action=edit&sub=save&Id=' . $document_id . '&cp=' . SESSION; + $doc_fields[$row->Id] = $row; + } - if ($document->document_parent != 0) $document->parent = $AVE_DB->Query("SELECT document_alias, document_title, Id FROM " . PREFIX . "_documents WHERE Id = '".$document->document_parent."' ")->FetchRow(); + // для каждого поля из контрольного массива... + foreach ($fields as $field_id => $row) + { + // если в документе поле есть, то записываем его + if ($doc_fields[$field_id]) + { + $fields[$field_id] = $doc_fields[$field_id]; + } - $document_rev = array(); + // если нет, парсим чистое поле и добавляем в бд + else + { + $row->field = $this->_documentFieldGet($row->rubric_field_type, $row->rubric_field_default, $row->Id, $row->rubric_field_default); - if ( (isset($_SESSION[$document->rubric_id . '_delrev']) && $_SESSION[$document->rubric_id . '_delrev'] == 1) - || (isset($_SESSION[$document->rubric_id . '_alles']) && $_SESSION[$document->rubric_id . '_alles'] == 1) - || (defined('UGROUP') && UGROUP == 1) ) - { - $document->canDelRev = 1; - } + $fields[$field_id] = $row; - $sql_rev = $AVE_DB->Query(" - SELECT * - FROM - " . PREFIX . "_document_rev - WHERE - doc_id = '" . $document_id . "' - ORDER BY - doc_revision DESC - LIMIT 7 - "); + $AVE_DB->Query(" + INSERT INTO " . PREFIX . "_document_fields + SET + rubric_field_id = '" . $field_id . "', + document_id = '" . $document->Id . "' + "); + } + } - // Формируем массив из полученных данных - while ($result = $sql_rev->FetchRow()) - { - $result->user_id = get_username_by_id($result->user_id); - array_push($document_rev, $result); - } + foreach ($fields as $field) + { + $group_id = ($field->rubric_field_group) ? $field->rubric_field_group : 0; + $fields_list[$group_id]['group_id'] = $field->group_id; + $fields_list[$group_id]['group_position'] = ($field->group_position) ? $field->group_position : 100; + $fields_list[$group_id]['group_title'] = $field->group_title; + $fields_list[$group_id]['fields'][$field->Id]['Id'] = $field->Id; + $fields_list[$group_id]['fields'][$field->Id]['rubric_id'] = $row->rubric_id; + $fields_list[$group_id]['fields'][$field->Id]['rubric_field_title'] = $field->rubric_field_title; + $fields_list[$group_id]['fields'][$field->Id]['rubric_field_alias'] = $field->rubric_field_alias; + $fields_list[$group_id]['fields'][$field->Id]['rubric_field_description'] = $field->rubric_field_description; + $fields_list[$group_id]['fields'][$field->Id]['result'] = $field->field; + } - $AVE_Template->assign('document_rev', $document_rev); + $fields_list = msort($fields_list, 'group_position'); - // получения списка документов из связанной рубрики - $linked_id = $AVE_DB->Query(" - SELECT - rubric_linked_rubric - FROM - " . PREFIX . "_rubrics - WHERE - Id = '".$document->rubric_id."' - ")->GetCell(); + unset($doc_fields); + unset($fields); - @$linked_id = unserialize($linked_id); + // Заглушка на время публикации + $document->document_published = ($document_id == 1 || $document_id == PAGE_NOT_FOUND_ID) ? '0' : $document->document_published = $document->document_published == 0 ? time() : $document->document_published; + $document->document_expire = ($document_id == 1 || $document_id == PAGE_NOT_FOUND_ID) ? '0' : $document->document_expire = $document->document_expire == 0 ? mktime(date("H"), date("i"), 0, date("m"), date("d"), date("Y") + 10) : $document->document_expire; - $document_alias = array(); + // Формируем ряд переменных и передаем их в шаблон для вывода + $document->fields = $fields_list; + $document->count_groups = count($fields_list); + $document->document_title = htmlspecialchars_decode(stripslashes(html_entity_decode($document->document_title))); + $document->document_meta_keywords = htmlspecialchars_decode(stripslashes(html_entity_decode($document->document_meta_keywords))); + $document->document_meta_description = htmlspecialchars_decode(stripslashes(html_entity_decode($document->document_meta_description))); + $document->document_breadcrum_title = htmlspecialchars_decode(stripslashes(html_entity_decode($document->document_breadcrum_title))); + $document->document_alias_breadcrumb = rewrite_link('index.php?id=' . $document->Id . '&doc=' . (empty($document->document_alias) ? prepare_url($document->document_title) : $document->document_alias)); + $document->rubric_title = $AVE_Rubric->rubricNameByIdGet($document->rubric_id)->rubric_title; + $document->rubric_url_prefix = $AVE_Rubric->rubricNameByIdGet($document->rubric_id)->rubric_alias; + $document->formaction = 'index.php?do=docs&action=edit&sub=save&Id=' . $document_id . '&cp=' . SESSION; - if ($linked_id) - { - foreach ($linked_id as $linked_id) + if ($document->document_parent != 0) $document->parent = $AVE_DB->Query("SELECT document_alias, document_title, Id FROM " . PREFIX . "_documents WHERE Id = '".$document->document_parent."' ")->FetchRow(); + + $document_rev = array(); + + if ( (isset($_SESSION[$document->rubric_id . '_delrev']) && $_SESSION[$document->rubric_id . '_delrev'] == 1) + || (isset($_SESSION[$document->rubric_id . '_alles']) && $_SESSION[$document->rubric_id . '_alles'] == 1) + || (defined('UGROUP') && UGROUP == 1) ) { - $sql = $AVE_DB->Query(" - SELECT - doc.document_alias, - doc.document_title, - doc.document_breadcrum_title, - doc.Id, - rub.rubric_title - FROM - " . PREFIX . "_documents as doc - JOIN - " . PREFIX . "_rubrics as rub - ON rub.Id = doc.rubric_id - WHERE - doc.rubric_id = '" . $linked_id . "' - "); + $document->canDelRev = 1; + } + + $sql_rev = $AVE_DB->Query(" + SELECT * + FROM + " . PREFIX . "_document_rev + WHERE + doc_id = '" . $document_id . "' + ORDER BY + doc_revision DESC + LIMIT 7 + "); + + // Формируем массив из полученных данных + while ($result = $sql_rev->FetchRow()) + { + $result->user_id = get_username_by_id($result->user_id); + array_push($document_rev, $result); + } - while ($row = $sql->FetchRow()) + $AVE_Template->assign('document_rev', $document_rev); + + // получения списка документов из связанной рубрики + $linked_id = $AVE_DB->Query(" + SELECT + rubric_linked_rubric + FROM + " . PREFIX . "_rubrics + WHERE + Id = '".$document->rubric_id."' + ")->GetCell(); + + @$linked_id = unserialize($linked_id); + + $document_alias = array(); + + if ($linked_id) + { + foreach ($linked_id as $linked_id) { - $document_alias[$row->rubric_title][] = array( - 'document_alias'=>$row->document_alias, - 'document_title'=>htmlspecialchars_decode(stripslashes(html_entity_decode($row->document_title))), - 'document_breadcrum_title'=>htmlspecialchars_decode(stripslashes(html_entity_decode($row->document_breadcrum_title))), - 'Id'=>$row->Id - ); + $sql = $AVE_DB->Query(" + SELECT + doc.document_alias, + doc.document_title, + doc.document_breadcrum_title, + doc.Id, + rub.rubric_title + FROM + " . PREFIX . "_documents as doc + JOIN + " . PREFIX . "_rubrics as rub + ON rub.Id = doc.rubric_id + WHERE + doc.rubric_id = '" . $linked_id . "' + "); + + while ($row = $sql->FetchRow()) + { + $document_alias[$row->rubric_title][] = array( + 'document_alias'=>$row->document_alias, + 'document_title'=>htmlspecialchars_decode(stripslashes(html_entity_decode($row->document_title))), + 'document_breadcrum_title'=>htmlspecialchars_decode(stripslashes(html_entity_decode($row->document_breadcrum_title))), + 'Id'=>$row->Id + ); + } } } - } - $rubric_tmpls = array(); + $rubric_tmpls = array(); - $sql = $AVE_DB->Query(" - SELECT - id, - title - FROM - " . PREFIX . "_rubric_templates - WHERE - rubric_id = '" . $document->rubric_id . "' - "); + $sql = $AVE_DB->Query(" + SELECT + id, + title + FROM + " . PREFIX . "_rubric_templates + WHERE + rubric_id = '" . $document->rubric_id . "' + "); - while ($row = $sql->FetchRow()) - { - array_push($rubric_tmpls, $row); - } + while ($row = $sql->FetchRow()) + { + array_push($rubric_tmpls, $row); + } - // Доступные шаблоны рубрики - $AVE_Template->assign('rubric_tmpls', $rubric_tmpls); + // Доступные шаблоны рубрики + $AVE_Template->assign('rubric_tmpls', $rubric_tmpls); - // получения списка документов из связанной рубрики - $AVE_Template->assign('document_alias', $document_alias); + // получения списка документов из связанной рубрики + $AVE_Template->assign('document_alias', $document_alias); - $AVE_Template->assign('document', $document); + $AVE_Template->assign('document', $document); - // Отображаем страницу для редактирования - $AVE_Template->assign('content', $AVE_Template->fetch('documents/form.tpl')); - } - else // Если пользователь не имеет прав на редактирование, формируем сообщение об ошибке - { - $AVE_Template->assign('erorr', $AVE_Template->get_config_vars('DOC_NO_PERMISSION')); - $AVE_Template->assign('content', $AVE_Template->fetch('error.tpl')); - } - break; + // Отображаем страницу для редактирования + $AVE_Template->assign('content', $AVE_Template->fetch('documents/form.tpl')); + } + else // Если пользователь не имеет прав на редактирование, формируем сообщение об ошибке + { + $AVE_Template->assign('erorr', $AVE_Template->get_config_vars('DOC_NO_PERMISSION')); + $AVE_Template->assign('content', $AVE_Template->fetch('error.tpl')); + } + break; + } } - } - /** - * Метод, предназначенный для копирования документа - * - * @param int $document_id идентификатор Документа - */ - function documentCopy($document_id) - { - global $AVE_DB, $AVE_Rubric, $AVE_Template; - - // Определяем действие, выбранное пользователем - switch ($_REQUEST['sub']) + /** + * Метод, предназначенный для копирования документа + * + * @param int $document_id идентификатор Документа + */ + function documentCopy($document_id) { - // Если была нажата кнопка Сохранить изменения - case 'save': // Сохранение документа в БД - $public_start = $this->_documentStart(); // Дата/время начала публикации документа - $public_end = $this->_documentEnd(); // Дата/время окончания публикации документа - $innavi = check_permission_acp('navigation_new') ? '&innavi=1' : ''; + global $AVE_DB, $AVE_Rubric, $AVE_Template; - // Определяем статус документа - $document_status = !empty($_REQUEST['document_status']) ? (int)$_REQUEST['document_status'] : '0'; + // Определяем действие, выбранное пользователем + switch ($_REQUEST['sub']) + { + // Если была нажата кнопка Сохранить изменения + case 'save': // Сохранение документа в БД + $public_start = $this->_documentStart(); // Дата/время начала публикации документа + $public_end = $this->_documentEnd(); // Дата/время окончания публикации документа + $innavi = check_permission_acp('navigation_new') ? '&innavi=1' : ''; - // Если статус документа не определен - if (empty($document_status) && $_SESSION['user_group'] != 1) - { - $innavi = ''; - @reset($_POST); - $newtext = "\n\n"; + // Определяем статус документа + $document_status = !empty($_REQUEST['document_status']) ? (int)$_REQUEST['document_status'] : '0'; - // Формируем текст сообщения, состоящий из данных, - // которые пользователь ввел в поля документа - foreach ($_POST['feld'] as $val) + // Если статус документа не определен + if (empty($document_status) && $_SESSION['user_group'] != 1) { - if (!empty($val)) + $innavi = ''; + @reset($_POST); + $newtext = "\n\n"; + + // Формируем текст сообщения, состоящий из данных, + // которые пользователь ввел в поля документа + foreach ($_POST['feld'] as $val) { - $newtext .= $val; - $newtext .= "\n---------------------\n"; + if (!empty($val)) + { + $newtext .= $val; + $newtext .= "\n---------------------\n"; + } } + $text = strip_tags($newtext); + + // Получаем e-mail адрес из общих настроек системы + $system_mail = get_settings('mail_from'); + $system_mail_name = get_settings('mail_from_name'); + + // Отправляем администартору уведомление, о том что необходимо проверить документ + $body_to_admin = $AVE_Template->get_config_vars('DOC_MAIL_BODY_CHECK'); + $body_to_admin = str_replace('%N%', "\n", $body_to_admin); + $body_to_admin = str_replace('%TITLE%', stripslashes($_POST['document_title']), $body_to_admin); + $body_to_admin = str_replace('%USER%', "'" . $_SESSION['user_name'] . "'", $body_to_admin); + send_mail( + $system_mail, + $body_to_admin . $text, + $AVE_Template->get_config_vars('DOC_MAIL_SUBJECT_CHECK'), + $system_mail, + $system_mail_name, + 'text' + ); + + // Отправляем уведомление автору, о том что документ находится на проверке + $body_to_author = str_replace('%N%', "\n", $AVE_Template->get_config_vars('DOC_MAIL_BODY_USER')); + $body_to_author = str_replace('%TITLE%', stripslashes($_POST['document_title']), $body_to_author); + $body_to_author = str_replace('%USER%', "'" . $_SESSION['user_name'] . "'", $body_to_author); + send_mail( + $_SESSION['user_email'], + $body_to_author, + $AVE_Template->get_config_vars('DOC_MAIL_SUBJECT_USER'), + $system_mail, + $system_mail_name, + 'text' + ); } - $text = strip_tags($newtext); - - // Получаем e-mail адрес из общих настроек системы - $system_mail = get_settings('mail_from'); - $system_mail_name = get_settings('mail_from_name'); - - // Отправляем администартору уведомление, о том что необходимо проверить документ - $body_to_admin = $AVE_Template->get_config_vars('DOC_MAIL_BODY_CHECK'); - $body_to_admin = str_replace('%N%', "\n", $body_to_admin); - $body_to_admin = str_replace('%TITLE%', stripslashes($_POST['document_title']), $body_to_admin); - $body_to_admin = str_replace('%USER%', "'" . $_SESSION['user_name'] . "'", $body_to_admin); - send_mail( - $system_mail, - $body_to_admin . $text, - $AVE_Template->get_config_vars('DOC_MAIL_SUBJECT_CHECK'), - $system_mail, - $system_mail_name, - 'text' - ); - - // Отправляем уведомление автору, о том что документ находится на проверке - $body_to_author = str_replace('%N%', "\n", $AVE_Template->get_config_vars('DOC_MAIL_BODY_USER')); - $body_to_author = str_replace('%TITLE%', stripslashes($_POST['document_title']), $body_to_author); - $body_to_author = str_replace('%USER%', "'" . $_SESSION['user_name'] . "'", $body_to_author); - send_mail( - $_SESSION['user_email'], - $body_to_author, - $AVE_Template->get_config_vars('DOC_MAIL_SUBJECT_USER'), - $system_mail, - $system_mail_name, - 'text' - ); - } - if (! ((isset($_SESSION[$rubric_id . '_newnow']) && $_SESSION[$rubric_id . '_newnow'] == 1) - || (isset($_SESSION[$rubric_id . '_alles']) && $_SESSION[$rubric_id . '_alles'] == 1) - || (defined('UGROUP') && UGROUP == 1)) ) - { - $document_status = 0; - } + if (! ((isset($_SESSION[$rubric_id . '_newnow']) && $_SESSION[$rubric_id . '_newnow'] == 1) + || (isset($_SESSION[$rubric_id . '_alles']) && $_SESSION[$rubric_id . '_alles'] == 1) + || (defined('UGROUP') && UGROUP == 1)) ) + { + $document_status = 0; + } - $_POST['document_status']=$document_status; + $_POST['document_status']=$document_status; - $iid = $this->documentSave($_REQUEST['rubric_id'],null,$_POST,true); + $iid = $this->documentSave($_REQUEST['rubric_id'],null,$_POST,true); - if (! $_REQUEST['next_edit']) - { - header('Location:index.php?do=docs&action=after&document_id=' . $iid . '&rubric_id=' . $rubric_id . '&cp=' . SESSION . $innavi); - } - else + if (! $_REQUEST['next_edit']) { - header('Location:index.php?do=docs&action=edit&Id=' . $iid . '&rubric_id=' . $rubric_id . '&cp=' . SESSION); + header('Location:index.php?do=docs&action=after&document_id=' . $iid . '&rubric_id=' . $rubric_id . '&cp=' . SESSION . $innavi); } + else + { + header('Location:index.php?do=docs&action=edit&Id=' . $iid . '&rubric_id=' . $rubric_id . '&cp=' . SESSION); + } - exit; - - // Если пользователь не выполнял никаких действий, а просто открыл документ для копирования - // Если пользователь не выполнял никаких действий, а просто открыл документ для редактирования - case '': - // Выполняем запрос к БД на получение данных о документе - $document = $AVE_DB->Query(" - SELECT * - FROM - " . PREFIX . "_documents - WHERE - Id = '" . $document_id . "' - ")->FetchRow(); - - $show = true; + exit; - // Проверяем права доступа к документу - $this->documentPermissionFetch($document->rubric_id); + // Если пользователь не выполнял никаких действий, а просто открыл документ для копирования + // Если пользователь не выполнял никаких действий, а просто открыл документ для редактирования + case '': + // Выполняем запрос к БД на получение данных о документе + $document = $AVE_DB->Query(" + SELECT * + FROM + " . PREFIX . "_documents + WHERE + Id = '" . $document_id . "' + ")->FetchRow(); - // запрещаем доступ, - // если автору документа не разрешено изменять свои документы в рубрике - // или пользователю не разрешено изменять все документы в рубрике - if (!( (isset($_SESSION['user_id']) && $document->document_author_id == $_SESSION['user_id'] - && isset($_SESSION[$document->rubric_id . '_editown']) && $_SESSION[$document->rubric_id . '_editown'] == 1) - || (isset($_SESSION[$document->rubric_id . '_editall']) && $_SESSION[$document->rubric_id . '_editall'] == 1))) - { - $show = false; - } + $show = true; - // запрещаем доступ к главной странице и странице ошибки 404, если требуется одобрение Администратора - if ( ($document_id == 1 || $document_id == PAGE_NOT_FOUND_ID) && - !(isset($_SESSION[$document->rubric_id . '_newnow']) && $_SESSION[$document->rubric_id . '_newnow'] == 1) ) - { - $show = false; - } + // Проверяем права доступа к документу + $this->documentPermissionFetch($document->rubric_id); - // разрешаем доступ, если пользователь принадлежит группе Администраторов или имеет все права на рубрику - if ( (defined('UGROUP') && UGROUP == 1) - || (isset($_SESSION[$document->rubric_id . '_alles']) && $_SESSION[$document->rubric_id . '_alles'] == 1) ) - { - $show = true; - } + // запрещаем доступ, + // если автору документа не разрешено изменять свои документы в рубрике + // или пользователю не разрешено изменять все документы в рубрике + if (!( (isset($_SESSION['user_id']) && $document->document_author_id == $_SESSION['user_id'] + && isset($_SESSION[$document->rubric_id . '_editown']) && $_SESSION[$document->rubric_id . '_editown'] == 1) + || (isset($_SESSION[$document->rubric_id . '_editall']) && $_SESSION[$document->rubric_id . '_editall'] == 1))) + { + $show = false; + } - if ($show) - { - $fields = array(); + // запрещаем доступ к главной странице и странице ошибки 404, если требуется одобрение Администратора + if ( ($document_id == 1 || $document_id == PAGE_NOT_FOUND_ID) && + !(isset($_SESSION[$document->rubric_id . '_newnow']) && $_SESSION[$document->rubric_id . '_newnow'] == 1) ) + { + $show = false; + } + // разрешаем доступ, если пользователь принадлежит группе Администраторов или имеет все права на рубрику if ( (defined('UGROUP') && UGROUP == 1) - || (isset($_SESSION[$document->rubric_id . '_newnow']) && $_SESSION[$document->rubric_id . '_newnow'] == 1) ) + || (isset($_SESSION[$document->rubric_id . '_alles']) && $_SESSION[$document->rubric_id . '_alles'] == 1) ) { - $document->dontChangeStatus = 0; + $show = true; } - else + + if ($show) + { + $fields = array(); + + if ( (defined('UGROUP') && UGROUP == 1) + || (isset($_SESSION[$document->rubric_id . '_newnow']) && $_SESSION[$document->rubric_id . '_newnow'] == 1) ) { - $document->dontChangeStatus = 1; + $document->dontChangeStatus = 0; } + else + { + $document->dontChangeStatus = 1; + } - // Выполняем запрос к БД и получаем все данные для полей документа - $sql = $AVE_DB->Query(" - SELECT - doc.Id AS df_id, - groups.*, - rub.*, - rubric_field_default, - doc.field_value, - field_more.field_value as field_value_more - FROM - " . PREFIX . "_rubric_fields AS rub - LEFT JOIN - " . PREFIX . "_rubric_fields_group AS groups - ON rub.rubric_field_group = groups.Id - LEFT JOIN - " . PREFIX . "_document_fields AS doc - ON (rubric_field_id = rub.Id) - LEFT JOIN - " . PREFIX . "_document_fields_text AS field_more - ON (field_more.rubric_field_id = doc.rubric_field_id AND doc.document_id=field_more.document_id) - WHERE - doc.document_id = '" . $document_id . "' - ORDER BY - groups.group_position ASC, rub.rubric_field_position ASC - "); - + // Выполняем запрос к БД и получаем все данные для полей документа + $sql = $AVE_DB->Query(" + SELECT + doc.Id AS df_id, + groups.*, + rub.*, + rubric_field_default, + doc.field_value, + field_more.field_value as field_value_more + FROM + " . PREFIX . "_rubric_fields AS rub + LEFT JOIN + " . PREFIX . "_rubric_fields_group AS groups + ON rub.rubric_field_group = groups.Id + LEFT JOIN + " . PREFIX . "_document_fields AS doc + ON (rubric_field_id = rub.Id) + LEFT JOIN + " . PREFIX . "_document_fields_text AS field_more + ON (field_more.rubric_field_id = doc.rubric_field_id AND doc.document_id=field_more.document_id) + WHERE + doc.document_id = '" . $document_id . "' + ORDER BY + groups.group_position ASC, rub.rubric_field_position ASC + "); - while ($row = $sql->FetchRow()) - { - $row->field_value = (string)$row->field_value . (string)$row->field_value_more; - $row->field = $this->_documentFieldGet($row->rubric_field_type, $row->field_value, $row->Id, $row->rubric_field_default); - array_push($fields, $row); - } + while ($row = $sql->FetchRow()) + { + $row->field_value = (string)$row->field_value . (string)$row->field_value_more; + $row->field = $this->_documentFieldGet($row->rubric_field_type, $row->field_value, $row->Id, $row->rubric_field_default); + array_push($fields, $row); + } - $maxId = $AVE_DB->Query(" - SELECT - MAX(Id) - FROM - " . PREFIX . "_documents - ")->GetCell(); + $maxId = $AVE_DB->Query(" + SELECT + MAX(Id) + FROM + " . PREFIX . "_documents + ")->GetCell(); - foreach ($fields as $field) - { - $group_id = ($field->rubric_field_group) ? $field->rubric_field_group : 0; - - $fields_list[$group_id]['group_position'] = ($field->group_position) ? $field->group_position : 100; - $fields_list[$group_id]['group_title'] = $field->group_title; - $fields_list[$group_id]['fields'][$field->Id]['Id'] = $field->Id; - $fields_list[$group_id]['fields'][$field->Id]['rubric_id'] = $row->rubric_id; - $fields_list[$group_id]['fields'][$field->Id]['rubric_field_title'] = $field->rubric_field_title; - $fields_list[$group_id]['fields'][$field->Id]['rubric_field_description'] = $field->rubric_field_description; - $fields_list[$group_id]['fields'][$field->Id]['result'] = $field->field; - } + foreach ($fields as $field) + { + $group_id = ($field->rubric_field_group) ? $field->rubric_field_group : 0; + + $fields_list[$group_id]['group_position'] = ($field->group_position) ? $field->group_position : 100; + $fields_list[$group_id]['group_title'] = $field->group_title; + $fields_list[$group_id]['fields'][$field->Id]['Id'] = $field->Id; + $fields_list[$group_id]['fields'][$field->Id]['rubric_id'] = $row->rubric_id; + $fields_list[$group_id]['fields'][$field->Id]['rubric_field_title'] = $field->rubric_field_title; + $fields_list[$group_id]['fields'][$field->Id]['rubric_field_description'] = $field->rubric_field_description; + $fields_list[$group_id]['fields'][$field->Id]['result'] = $field->field; + } - $fields_list = msort($fields_list, 'group_position'); + $fields_list = msort($fields_list, 'group_position'); - unset($doc_fields); - unset($fields); + unset($doc_fields); + unset($fields); - // Формируем ряд переменных и передаем их в шаблон для вывода - $document->fields = $fields_list; - $document->count_groups = count($fields_list); - $document->document_alias = ''; - $document->rubric_title = $AVE_Rubric->rubricNameByIdGet($_REQUEST['rubric_id'])->rubric_title; - $document->rubric_url_prefix = strftime(str_ireplace("%id", $maxId+1, $AVE_Rubric->rubricNameByIdGet($_REQUEST['rubric_id'])->rubric_alias)); - $document->formaction = 'index.php?do=docs&action=copy&sub=save&rubric_id=' . $_REQUEST['rubric_id'] . ((isset($_REQUEST['pop']) && $_REQUEST['pop']==1) ? 'pop=1' : '') . '&cp=' . SESSION; - $document->document_published = time(); - $document->document_expire = mktime(date("H"), date("i"), 0, date("m"), date("d"), date("Y") + 10); + // Формируем ряд переменных и передаем их в шаблон для вывода + $document->fields = $fields_list; + $document->count_groups = count($fields_list); + $document->document_alias = ''; + $document->rubric_title = $AVE_Rubric->rubricNameByIdGet($_REQUEST['rubric_id'])->rubric_title; + $document->rubric_url_prefix = strftime(str_ireplace("%id", $maxId+1, $AVE_Rubric->rubricNameByIdGet($_REQUEST['rubric_id'])->rubric_alias)); + $document->formaction = 'index.php?do=docs&action=copy&sub=save&rubric_id=' . $_REQUEST['rubric_id'] . ((isset($_REQUEST['pop']) && $_REQUEST['pop']==1) ? 'pop=1' : '') . '&cp=' . SESSION; + $document->document_published = time(); + $document->document_expire = mktime(date("H"), date("i"), 0, date("m"), date("d"), date("Y") + 10); - if ($document->document_parent != 0) - $document->parent = $AVE_DB->Query("SELECT document_title, Id FROM " . PREFIX . "_documents WHERE Id = '" . $document->document_parent . "' ")->FetchRow(); + if ($document->document_parent != 0) + $document->parent = $AVE_DB->Query("SELECT document_title, Id FROM " . PREFIX . "_documents WHERE Id = '" . $document->document_parent . "' ")->FetchRow(); - $AVE_Template->assign('document', $document); + $AVE_Template->assign('document', $document); - // Отображаем страницу для редактирования - $AVE_Template->assign('content', $AVE_Template->fetch('documents/form.tpl')); - } - else // Если пользователь не имеет прав на редактирование, формируем сообщение об ошибке - { - $AVE_Template->assign('erorr', $AVE_Template->get_config_vars('DOC_NO_PERMISSION')); - $AVE_Template->assign('content', $AVE_Template->fetch('error.tpl')); + // Отображаем страницу для редактирования + $AVE_Template->assign('content', $AVE_Template->fetch('documents/form.tpl')); } - break; + else // Если пользователь не имеет прав на редактирование, формируем сообщение об ошибке + { + $AVE_Template->assign('erorr', $AVE_Template->get_config_vars('DOC_NO_PERMISSION')); + $AVE_Template->assign('content', $AVE_Template->fetch('error.tpl')); + } + break; + } } - } - /** - * Метод, предназначенный для пометки документа к удалению - * - * @param int $document_id идентификатор Документа - */ - function documentMarkDelete($document_id) - { - global $AVE_DB; - - // Выполняем запрос к БД на получение информации о документе (id, id рубрики, автор) - $row = $AVE_DB->Query(" - SELECT - Id, - rubric_id, - document_author_id - FROM - " . PREFIX . "_documents - WHERE - Id = '" . $document_id . "' - ")->FetchRow(); - - // Если у пользователя достаточно прав на выполнение данной операции - if ( - (isset($_SESSION[$row->rubric_id . '_editall']) && $_SESSION[$row->rubric_id . '_editall'] == 1) - || - (isset($_SESSION[$row->rubric_id . '_editown']) && $_SESSION[$row->rubric_id . '_editown'] == 1) - || - (isset($_SESSION[$row->rubric_id . '_alles']) && $_SESSION[$row->rubric_id . '_alles'] == 1) - || - (defined('UGROUP') && UGROUP == 1) - ) + /** + * Метод, предназначенный для пометки документа к удалению + * + * @param int $document_id идентификатор Документа + */ + function documentMarkDelete($document_id) { - // и это не главная страница и не страница с ошибкой 404 - if ($document_id != 1 && $document_id != PAGE_NOT_FOUND_ID) - { - // Выполняем запрос к БД на обновление данных (пометка на удаление) - $AVE_DB->Query(" - UPDATE - " . PREFIX . "_documents - SET - document_deleted = '1' - WHERE - Id = '" . $document_id . "' - "); + global $AVE_DB; - $AVE_DB->clearcache('rub_'.$row->rubric_id); - $AVE_DB->clearcache('doc_'.$document_id); - $AVE_DB->clearcompile('doc_'.$document_id); + // Выполняем запрос к БД на получение информации о документе (id, id рубрики, автор) + $row = $AVE_DB->Query(" + SELECT + Id, + rubric_id, + document_alias, + document_author_id + FROM + " . PREFIX . "_documents + WHERE + Id = '" . $document_id . "' + ")->FetchRow(); - // Сохраняем системное сообщение в журнал - reportLog('Положил документ в корзину (' . $document_id . ')'); - } - } + // Если у пользователя достаточно прав на выполнение данной операции + if ( + (isset($_SESSION[$row->rubric_id . '_editall']) && $_SESSION[$row->rubric_id . '_editall'] == 1) + || + (isset($_SESSION[$row->rubric_id . '_editown']) && $_SESSION[$row->rubric_id . '_editown'] == 1) + || + (isset($_SESSION[$row->rubric_id . '_alles']) && $_SESSION[$row->rubric_id . '_alles'] == 1) + || + (defined('UGROUP') && UGROUP == 1) + ) + { + // и это не главная страница и не страница с ошибкой 404 + if ($document_id != 1 && $document_id != PAGE_NOT_FOUND_ID) + { + // Выполняем запрос к БД на обновление данных (пометка на удаление) + $AVE_DB->Query(" + UPDATE + " . PREFIX . "_documents + SET + document_deleted = '1' + WHERE + Id = '" . $document_id . "' + "); - // Выполняем обновление страницы - header('Location:index.php?do=docs'.(empty($_REQUEST['rubric_id']) ? '' : '&rubric_id='.$_REQUEST['rubric_id']).'&cp=' . SESSION); - } + $hash_url = md5($row->document_alias); - /** - * Метод, предназначенный для снятия отметки об удаления - * - * @param int $document_id идентификатор Документа - */ - function documentUnmarkDelete($document_id) - { - global $AVE_DB; - - // Выполняем запрос к БД на обновление информации (снятие отметки об удалении) - $row = $AVE_DB->Query(" - SELECT * - FROM - " . PREFIX . "_documents - WHERE - Id = '" . $document_id . "' - ")->FetchRow(); - - $AVE_DB->Query(" - UPDATE - " . PREFIX . "_documents - SET - document_deleted = '0' - WHERE - Id = '" . $document_id . "' - "); - - // Сохраняем системное сообщение в журнал - reportLog('Восстановил удаленный документ (' . $document_id . ')'); - - $AVE_DB->clearcache('rub_'.$row->rubric_id); - $AVE_DB->clearcache('doc_'.$document_id); - $AVE_DB->clearcompile('doc_'.$document_id); - - // Выполняем обновление страницы - header('Location:index.php?do=docs'.(empty($_REQUEST['rubric_id']) ? '' : '&rubric_id='.$_REQUEST['rubric_id']).'&cp=' . SESSION); - } + // Чистим кеш + $AVE_DB->clearCache('doc_' . $document_id); // Прочее + $AVE_DB->clearCache('cmd_' . $document_id); // Компиляция + $AVE_DB->clearCache('rqe_' . $document_id); // Элемент запроса + $AVE_DB->clearCacheUrl('url_' . $hash_url); // ЮРЛ - /** - * Метод, предназначенный для полного удаления документа без возможности восстановления - * - * @param int $document_id идентификатор Документа - */ - function documentDelete($document_id) - { - global $AVE_DB; + // Сохраняем системное сообщение в журнал + reportLog('Положил документ в корзину (' . $document_id . ')'); + } + } + + // Выполняем обновление страницы + header('Location:index.php?do=docs'.(empty($_REQUEST['rubric_id']) ? '' : '&rubric_id='.$_REQUEST['rubric_id']).'&cp=' . SESSION); + } - // Проверяем, чтобы удаляемый документ не являлся главной страницей и не страницей с 404 ощибкой - if ($document_id != 1 && $document_id != PAGE_NOT_FOUND_ID) + /** + * Метод, предназначенный для снятия отметки об удаления + * + * @param int $document_id идентификатор Документа + */ + function documentUnmarkDelete($document_id) { + global $AVE_DB; + + // Выполняем запрос к БД на обновление информации (снятие отметки об удалении) $row = $AVE_DB->Query(" SELECT * FROM @@ -2829,131 +2773,136 @@ class AVE_Document Id = '" . $document_id . "' ")->FetchRow(); - // Выполняем запрос к БД на удаление информации о документе $AVE_DB->Query(" - DELETE - FROM + UPDATE " . PREFIX . "_documents + SET + document_deleted = '0' WHERE Id = '" . $document_id . "' "); - // Выполняем запрос к БД на удаление полей, которые относились к документу - $AVE_DB->Query(" - DELETE - f1.*, - f2.* - FROM - " . PREFIX . "_document_fields AS f1 - INNER JOIN - " . PREFIX . "_document_fields_text AS f2 - WHERE - f1.document_id = '" . $document_id . "' - AND - f2.document_id = f1.document_id - "); + // Сохраняем системное сообщение в журнал + reportLog('Восстановил удаленный документ (' . $document_id . ')'); - // Очищаем кэш шаблона - $AVE_DB->Query(" - DELETE - FROM - " . PREFIX . "_rubric_template_cache - WHERE - doc_id = '" . $document_id . "' - "); + $hash_url = md5($row->document_alias); - // Сохраняем системное сообщение в журнал - reportLog('Удалил документ '. $row->document_title . ' (ID: ' . $document_id . ')'); - } + // Чистим кеш + $AVE_DB->clearCache('doc_' . $document_id); // Прочее + $AVE_DB->clearCache('cmd_' . $document_id); // Компиляция + $AVE_DB->clearCache('rqe_' . $document_id); // Элемент запроса + $AVE_DB->clearCacheUrl('url_' . $hash_url); // ЮРЛ - // Удаляем кеш докеумента - $AVE_DB->clearcache('rub_' . $row->rubric_id); - $AVE_DB->clearcache('doc_' . $document_id); - $AVE_DB->clearcompile('doc_'.$document_id); + // Выполняем обновление страницы + header('Location:index.php?do=docs'.(empty($_REQUEST['rubric_id']) ? '' : '&rubric_id='.$_REQUEST['rubric_id']).'&cp=' . SESSION); + } - // Выполняем обновление страницы - header('Location:index.php?do=docs'.(empty($_REQUEST['rubric_id']) - ? '' - : '&rubric_id='.$_REQUEST['rubric_id']).'&cp=' . SESSION); - } + /** + * Метод, предназначенный для полного удаления документа без возможности восстановления + * + * @param int $document_id идентификатор Документа + */ + function documentDelete($document_id) + { + global $AVE_DB; - /** - * Метод, предназначенный для публикации или отмены публикации документа - * - * @param int $document_id идентификатор Документа - * @param string $openclose статус Документа {open|close} - */ - function documentStatusSet($document_id, $openclose = 0) - { - global $AVE_DB, $AVE_Template; - - $errors = array(); - - $show = true; - - // Выполняем запрос к БД на получение информации о документе (id, id рубрики, автор) - $document = $AVE_DB->Query(" - SELECT - Id, - rubric_id, - document_author_id - FROM - " . PREFIX . "_documents - WHERE - Id = '" . $document_id . "' - ")->FetchRow(); - - // Проверяем права доступа к документу - $this->documentPermissionFetch($document->rubric_id); - - // запрещаем доступ, - // если автору документа не разрешено изменять свои документы в рубрике - // или пользователю не разрешено изменять все документы в рубрике - if (! - ( - (isset($_SESSION[$document->rubric_id . '_editall']) && $_SESSION[$document->rubric_id . '_editall'] == 1) - || - (isset($_SESSION[$document->rubric_id . '_editown']) && $_SESSION[$document->rubric_id . '_editown'] == 1) - || - (isset($_SESSION[$document->rubric_id . '_alles']) && $_SESSION[$document->rubric_id . '_alles'] == 1) - || - (defined('UGROUP') && UGROUP == 1) - ) - ) - { - $show = false; - } + // Проверяем, чтобы удаляемый документ не являлся главной страницей и не страницей с 404 ощибкой + if ($document_id != 1 && $document_id != PAGE_NOT_FOUND_ID) + { + $row = $AVE_DB->Query(" + SELECT * + FROM + " . PREFIX . "_documents + WHERE + Id = '" . $document_id . "' + ")->FetchRow(); - // запрещаем доступ к главной странице и странице ошибки 404, если требуется одобрение Администратора - if ( ($document_id == 1 || $document_id == PAGE_NOT_FOUND_ID) && - !(isset($_SESSION[$document->rubric_id . '_newnow']) && $_SESSION[$document->rubric_id . '_newnow'] == 1) ) - { - $show = false; + // Выполняем запрос к БД на удаление информации о документе + $AVE_DB->Query(" + DELETE FROM + " . PREFIX . "_documents + WHERE + Id = '" . $document_id . "' + "); + + // Выполняем запрос к БД на удаление полей, которые относились к документу + $AVE_DB->Query(" + DELETE + f1.*, + f2.* + FROM + " . PREFIX . "_document_fields AS f1 + INNER JOIN + " . PREFIX . "_document_fields_text AS f2 + WHERE + f1.document_id = '" . $document_id . "' + AND + f2.document_id = f1.document_id + "); + + // Очищаем кэш шаблона + $AVE_DB->Query(" + DELETE FROM + " . PREFIX . "_rubric_template_cache + WHERE + doc_id = '" . $document_id . "' + "); + + $hash_url = md5($row->document_alias); + + // Чистим кеш + $AVE_DB->clearCache('doc_' . $document_id); // Прочее + $AVE_DB->clearCache('fld_' . $document_id); // Поля + $AVE_DB->clearCache('cmd_' . $document_id); // Компиляция + $AVE_DB->clearCache('brd_' . $document_id); // Хлебные крошки + $AVE_DB->clearCache('rqe_' . $document_id); // Элемент запроса + $AVE_DB->clearCacheUrl('url_' . $hash_url); // ЮРЛ + + // Сохраняем системное сообщение в журнал + reportLog('Удалил документ '. $row->document_title . ' (ID: ' . $document_id . ')'); + } + + // Выполняем обновление страницы + header('Location:index.php?do=docs'.(empty($_REQUEST['rubric_id']) + ? '' + : '&rubric_id='.$_REQUEST['rubric_id']).'&cp=' . SESSION); } - // разрешаем доступ, если пользователь принадлежит группе Администраторов или имеет все права на рубрику - if ( (defined('UGROUP') && UGROUP == 1) - || (isset($_SESSION[$document->rubric_id . '_alles']) && $_SESSION[$document->rubric_id . '_alles'] == 1) ) + /** + * Метод, предназначенный для публикации или отмены публикации документа + * + * @param int $document_id идентификатор Документа + * @param string $openclose статус Документа {open|close} + */ + function documentStatusSet($document_id, $openclose = 0) { + global $AVE_DB, $AVE_Template; + + $errors = array(); + $show = true; - } - if ($show) - { - // Выполняем запрос к БД на получение id автора документа, чтобы проверить уровень прав доступа + // Выполняем запрос к БД на получение информации о документе (id, id рубрики, автор) + $document = $AVE_DB->Query(" + SELECT + Id, + rubric_id, + document_alias, + document_author_id + FROM + " . PREFIX . "_documents + WHERE + Id = '" . $document_id . "' + ")->FetchRow(); - // Проверем, чтобы у пользователя было достаточно прав на выполнение данной операции - if ( - ( - ($document->document_author_id == @$_SESSION['user_id']) - && - (isset($_SESSION[$document->rubric_id . '_newnow']) && @$_SESSION[$row->rubric_id . '_newnow'] == 1) - || - @$_SESSION[$row->rubric_id . '_alles'] == 1 - || - (defined('UGROUP') && UGROUP == 1) - ) - || + // Проверяем права доступа к документу + $this->documentPermissionFetch($document->rubric_id); + + // запрещаем доступ, + // если автору документа не разрешено изменять свои документы в рубрике + // или пользователю не разрешено изменять все документы в рубрике + if (! + ( (isset($_SESSION[$document->rubric_id . '_editall']) && $_SESSION[$document->rubric_id . '_editall'] == 1) || (isset($_SESSION[$document->rubric_id . '_editown']) && $_SESSION[$document->rubric_id . '_editown'] == 1) @@ -2962,500 +2911,523 @@ class AVE_Document || (defined('UGROUP') && UGROUP == 1) ) - { - // Если это не главная страница и не страница с 404 ошибкой - if ($document_id != 1 && $document_id != PAGE_NOT_FOUND_ID) - { - // Выполянем запрос к БД на смену статуса у документа - $AVE_DB->Query(" - UPDATE - " . PREFIX . "_documents - SET - document_status = '" . $openclose . "' - WHERE - Id = '" . $document_id . "' - "); + ) + { + $show = false; + } - $AVE_DB->clearcache('rub_'.$row->rubric_id); - $AVE_DB->clearcache('doc_'.$document_id); - $AVE_DB->clearcompile('doc_'.$document_id); + // запрещаем доступ к главной странице и странице ошибки 404, если требуется одобрение Администратора + if ( ($document_id == 1 || $document_id == PAGE_NOT_FOUND_ID) && + !(isset($_SESSION[$document->rubric_id . '_newnow']) && $_SESSION[$document->rubric_id . '_newnow'] == 1) ) + { + $show = false; + } - // Сохраняем системное сообщение в журнал - reportLog($_SESSION['user_name'] . ' - ' . (($openclose==1) ? $AVE_Template->get_config_vars('DOC_DOCUMENT_ACT') : $AVE_Template->get_config_vars('DOC_DOCUMENT_DISACT')) . ' ' . $AVE_Template->get_config_vars('DOC_DOCUMENT_DOC') . ' (' . $document_id . ')', 2, 2); + // разрешаем доступ, если пользователь принадлежит группе Администраторов или имеет все права на рубрику + if ( (defined('UGROUP') && UGROUP == 1) + || (isset($_SESSION[$document->rubric_id . '_alles']) && $_SESSION[$document->rubric_id . '_alles'] == 1) ) + { + $show = true; + } + + if ($show) + { + // Выполняем запрос к БД на получение id автора документа, чтобы проверить уровень прав доступа + + // Проверем, чтобы у пользователя было достаточно прав на выполнение данной операции + if ( + ( + ($document->document_author_id == @$_SESSION['user_id']) + && + (isset($_SESSION[$document->rubric_id . '_newnow']) && @$_SESSION[$row->rubric_id . '_newnow'] == 1) + || + @$_SESSION[$row->rubric_id . '_alles'] == 1 + || + (defined('UGROUP') && UGROUP == 1) + ) + || + (isset($_SESSION[$document->rubric_id . '_editall']) && $_SESSION[$document->rubric_id . '_editall'] == 1) + || + (isset($_SESSION[$document->rubric_id . '_editown']) && $_SESSION[$document->rubric_id . '_editown'] == 1) + || + (isset($_SESSION[$document->rubric_id . '_alles']) && $_SESSION[$document->rubric_id . '_alles'] == 1) + || + (defined('UGROUP') && UGROUP == 1) + ) + { + // Если это не главная страница и не страница с 404 ошибкой + if ($document_id != 1 && $document_id != PAGE_NOT_FOUND_ID) + { + // Выполянем запрос к БД на смену статуса у документа + $AVE_DB->Query(" + UPDATE + " . PREFIX . "_documents + SET + document_status = '" . $openclose . "' + WHERE + Id = '" . $document_id . "' + "); + + $hash_url = md5($document->document_alias); + + // Чистим кеш + $AVE_DB->clearCache('doc_' . $document_id); // Прочее + $AVE_DB->clearCache('cmd_' . $document_id); // Компиляция + $AVE_DB->clearCache('rqe_' . $document_id); // Элемент запроса + $AVE_DB->clearCacheUrl('url_' . $hash_url); // ЮРЛ + + // Сохраняем системное сообщение в журнал + reportLog($_SESSION['user_name'] . ' - ' . (($openclose==1) ? $AVE_Template->get_config_vars('DOC_DOCUMENT_ACT') : $AVE_Template->get_config_vars('DOC_DOCUMENT_DISACT')) . ' ' . $AVE_Template->get_config_vars('DOC_DOCUMENT_DOC') . ' (' . $document_id . ')', 2, 2); + + } + else + { + $errors[] = $AVE_Template->get_config_vars('DOC_DOCUMENT_OPEN_ERR'); + } } else { - $errors[] = $AVE_Template->get_config_vars('DOC_DOCUMENT_OPEN_ERR'); + $errors[] = $AVE_Template->get_config_vars('DOC_DOCUMENT_OPEN_PRIVE'); } - } - else + if (isset($_REQUEST['ajax'])) { - $errors[] = $AVE_Template->get_config_vars('DOC_DOCUMENT_OPEN_PRIVE'); - } + if (empty($errors)) + { + // Если ошибок не найдено, формируем сообщение об успешной операции + echo json_encode(array((($openclose==1) ? $AVE_Template->get_config_vars('DOC_DOCUMENT_OPEN') : $AVE_Template->get_config_vars('DOC_DOCUMENT_CLOSE')) . implode(',
      ', $errors), 'accept')); + } + else + { + // В противном случае формируем сообщение с ошибкой + echo json_encode(array($AVE_Template->get_config_vars('DOC_URL_CHECK_ER') . implode(',
      ', $errors), 'error')); + + } + + $hash_url = md5($document->document_alias); + + // Чистим кеш + $AVE_DB->clearCache('doc_' . $document_id); // Прочее + $AVE_DB->clearCache('cmd_' . $document_id); // Компиляция + $AVE_DB->clearCache('rqe_' . $document_id); // Элемент запроса + $AVE_DB->clearCacheUrl('url_' . $hash_url); // ЮРЛ + + exit; - if (isset($_REQUEST['ajax'])) - { - if (empty($errors)) - { - // Если ошибок не найдено, формируем сообщение об успешной операции - echo json_encode(array((($openclose==1) ? $AVE_Template->get_config_vars('DOC_DOCUMENT_OPEN') : $AVE_Template->get_config_vars('DOC_DOCUMENT_CLOSE')) . implode(',
      ', $errors), 'accept')); } else { - // В противном случае формируем сообщение с ошибкой - echo json_encode(array($AVE_Template->get_config_vars('DOC_URL_CHECK_ER') . implode(',
      ', $errors), 'error')); + $hash_url = md5($document->document_alias); - } - - $AVE_DB->clearcache('rub_'.$row->rubric_id); - $AVE_DB->clearcache('doc_'.$document_id); - $AVE_DB->clearcompile('doc_'.$document_id); - exit; + // Чистим кеш + $AVE_DB->clearCache('doc_' . $document_id); // Прочее + $AVE_DB->clearCache('cmd_' . $document_id); // Компиляция + $AVE_DB->clearCache('rqe_' . $document_id); // Элемент запроса + $AVE_DB->clearCacheUrl('url_' . $hash_url); // ЮРЛ + // Выполняем обновление страницы + header('Location:index.php?do=docs'.(empty($_REQUEST['rubric_id']) ? '' : '&rubric_id='.$_REQUEST['rubric_id']).'&cp=' . SESSION); + exit; + } } else { - $AVE_DB->clearcache('rub_'.$row->rubric_id); - $AVE_DB->clearcache('doc_'.$document_id); - $AVE_DB->clearcompile('doc_'.$document_id); - // Выполняем обновление страницы - header('Location:index.php?do=docs'.(empty($_REQUEST['rubric_id']) ? '' : '&rubric_id='.$_REQUEST['rubric_id']).'&cp=' . SESSION); + header('Location:index.php?do=docs&cp=' . SESSION); exit; } } - else - { - header('Location:index.php?do=docs&cp=' . SESSION); - exit; - } - } - - /** - * Метод, предназначенный для передачи в Smarty шаблонизатор меток периода времени отображаемых - * в списке документов - * - */ - function documentTemplateTimeAssign() - { - global $AVE_Template; - if (!empty($_REQUEST['TimeSelect'])) + /** + * Метод, предназначенный для передачи в Smarty шаблонизатор меток периода времени отображаемых + * в списке документов + * + */ + function documentTemplateTimeAssign() { - $AVE_Template->assign('sel_start', $this->_documentListStart()); - $AVE_Template->assign('sel_end', $this->_documentListEnd()); - } - } - - /** - * Метод, предназначенный для переноса документа в другую рубрику - * - */ - function documentRubricChange() - { - global $AVE_DB, $AVE_Template; + global $AVE_Template; - $document_id = (int)$_REQUEST['Id']; // идентификатор документа - $rubric_id = (int)$_REQUEST['rubric_id']; // идентификатор текущей рубрики + if (!empty($_REQUEST['TimeSelect'])) + { + $AVE_Template->assign('sel_start', $this->_documentListStart()); + $AVE_Template->assign('sel_end', $this->_documentListEnd()); + } + } - // Если в запросе пришел идентификатор новой рубрики и id документа, тогда - // выполняем автоматический перенос документа из одной рубрики в другую - if ((! empty($_POST['NewRubr'])) and (! empty($_GET['Id']))) + /** + * Метод, предназначенный для переноса документа в другую рубрику + * + */ + function documentRubricChange() { - $new_rubric_id = (int)$_POST['NewRubr']; // идентификатор целевой рубрики + global $AVE_DB, $AVE_Template; + + $document_id = (int)$_REQUEST['Id']; // идентификатор документа + $rubric_id = (int)$_REQUEST['rubric_id']; // идентификатор текущей рубрики - // Циклически обрабатываем данные, пришедшие в запросе методо POST - foreach ($_POST as $key => $value) + // Если в запросе пришел идентификатор новой рубрики и id документа, тогда + // выполняем автоматический перенос документа из одной рубрики в другую + if ((! empty($_POST['NewRubr'])) and (! empty($_GET['Id']))) { - if (is_integer($key)) + $new_rubric_id = (int)$_POST['NewRubr']; // идентификатор целевой рубрики + + // Циклически обрабатываем данные, пришедшие в запросе методо POST + foreach ($_POST as $key => $value) { - // Определяем флаг поля - switch ($value) + if (is_integer($key)) { - // Если 0, тогда - case 0: - // Выполняем запрос к БД на удаление старого поля (лишнее или не требует переноса) - $AVE_DB->Query(" - DELETE - FROM - " . PREFIX . "_document_fields - WHERE - document_id = '" . $document_id . "' - AND - rubric_field_id = '" . $key . "' - "); - - $AVE_DB->Query(" - DELETE - FROM - " . PREFIX . "_document_fields_text - WHERE - document_id = '" . $document_id . "' - AND - rubric_field_id = '" . $key . "' - "); - break; - - // Если -1, тогда - case -1: - // Выполняем запрос на получение данных для этого (старого) поля - $row_fd = $AVE_DB->Query(" - SELECT - rubric_field_title, - rubric_field_type - FROM - " . PREFIX . "_rubric_fields - WHERE - Id = '" . $key . "' - ")->FetchRow(); - - // Выполняем запрос к БД и получаем последнюю позицию полей в рубрики КУДА переносим - $new_pos = $AVE_DB->Query(" - SELECT - rubric_field_position - FROM - " . PREFIX . "_rubric_fields - WHERE - rubric_id = '" . $new_rubric_id . "' - ORDER BY - rubric_field_position DESC - LIMIT 1 - ")->GetCell(); - - ++$new_pos; - - // Выполняем запрос к БД и добавляем новое поле в новую рубрику - $AVE_DB->Query(" - INSERT - INTO - " . PREFIX . "_rubric_fields - SET - rubric_id = '" . $new_rubric_id . "', - rubric_field_title = '" . addslashes($row_fd->rubric_field_title) . "', - rubric_field_type = '" . addslashes($row_fd->rubric_field_type) . "', - rubric_field_position = '" . $new_pos . "' - "); - - $lastid = $AVE_DB->InsertId(); - - // Выполняем запрос к БД и добавляем запись о поле в таблицу с полями документов - $sql_docs = $AVE_DB->Query(" - SELECT Id - FROM - " . PREFIX . "_documents - WHERE - rubric_id = '" . $new_rubric_id . "' - "); + // Определяем флаг поля + switch ($value) + { + // Если 0, тогда + case 0: + // Выполняем запрос к БД на удаление старого поля (лишнее или не требует переноса) + $AVE_DB->Query(" + DELETE + FROM + " . PREFIX . "_document_fields + WHERE + document_id = '" . $document_id . "' + AND + rubric_field_id = '" . $key . "' + "); - while ($row_docs = $sql_docs->FetchRow()) - { + $AVE_DB->Query(" + DELETE + FROM + " . PREFIX . "_document_fields_text + WHERE + document_id = '" . $document_id . "' + AND + rubric_field_id = '" . $key . "' + "); + break; + + // Если -1, тогда + case -1: + // Выполняем запрос на получение данных для этого (старого) поля + $row_fd = $AVE_DB->Query(" + SELECT + rubric_field_title, + rubric_field_type + FROM + " . PREFIX . "_rubric_fields + WHERE + Id = '" . $key . "' + ")->FetchRow(); + + // Выполняем запрос к БД и получаем последнюю позицию полей в рубрики КУДА переносим + $new_pos = $AVE_DB->Query(" + SELECT + rubric_field_position + FROM + " . PREFIX . "_rubric_fields + WHERE + rubric_id = '" . $new_rubric_id . "' + ORDER BY + rubric_field_position DESC + LIMIT 1 + ")->GetCell(); + + ++$new_pos; + + // Выполняем запрос к БД и добавляем новое поле в новую рубрику $AVE_DB->Query(" INSERT INTO - " . PREFIX . "_document_fields + " . PREFIX . "_rubric_fields SET - rubric_field_id = '" . $lastid . "', - document_id = '" . $row_docs->Id . "', - field_value = '', - document_in_search = '1' + rubric_id = '" . $new_rubric_id . "', + rubric_field_title = '" . addslashes($row_fd->rubric_field_title) . "', + rubric_field_type = '" . addslashes($row_fd->rubric_field_type) . "', + rubric_field_position = '" . $new_pos . "' "); - } - // Выполняем запрос к БД и создаем новое поле для изменяемого документа - $AVE_DB->Query(" - UPDATE - " . PREFIX . "_document_fields - SET - rubric_field_id = '" . $lastid . "' - WHERE - rubric_field_id = '" . $key . "' - AND - document_id = '" . $document_id . "' - "); - $AVE_DB->Query(" - UPDATE - " . PREFIX . "_document_fields_text - SET - rubric_field_id = '" . $lastid . "' - WHERE - rubric_field_id = '" . $key . "' - AND - document_id = '" . $document_id . "' - "); - break; + $lastid = $AVE_DB->InsertId(); - // По умолчанию - default: - // Выполняем запрос к БД и просто обновляем имеющиеся данные - $AVE_DB->Query(" - UPDATE - " . PREFIX . "_document_fields - SET - rubric_field_id = '" . $value . "' - WHERE - rubric_field_id = '" . $key . "' - AND - document_id = '" . $document_id . "' - "); - - $AVE_DB->Query(" - UPDATE - " . PREFIX . "_document_fields_text - SET - rubric_field_id = '" . $value . "' - WHERE - rubric_field_id = '" . $key . "' - AND - document_id = '" . $document_id . "' - "); - break; - } - } - } + // Выполняем запрос к БД и добавляем запись о поле в таблицу с полями документов + $sql_docs = $AVE_DB->Query(" + SELECT Id + FROM + " . PREFIX . "_documents + WHERE + rubric_id = '" . $new_rubric_id . "' + "); - // Выполняем запрос к БД и получаем список всех полей у новой рубрики - $sql_rub = $AVE_DB->Query(" - SELECT Id - FROM - " . PREFIX . "_rubric_fields - WHERE - rubric_id = '" . $new_rubric_id . "' - ORDER BY - Id ASC - "); + while ($row_docs = $sql_docs->FetchRow()) + { + $AVE_DB->Query(" + INSERT + INTO + " . PREFIX . "_document_fields + SET + rubric_field_id = '" . $lastid . "', + document_id = '" . $row_docs->Id . "', + field_value = '', + document_in_search = '1' + "); + } + + // Выполняем запрос к БД и создаем новое поле для изменяемого документа + $AVE_DB->Query(" + UPDATE + " . PREFIX . "_document_fields + SET + rubric_field_id = '" . $lastid . "' + WHERE + rubric_field_id = '" . $key . "' + AND + document_id = '" . $document_id . "' + "); + $AVE_DB->Query(" + UPDATE + " . PREFIX . "_document_fields_text + SET + rubric_field_id = '" . $lastid . "' + WHERE + rubric_field_id = '" . $key . "' + AND + document_id = '" . $document_id . "' + "); + break; - // Выполняем запросы к БД на проверку наличия нужных полей. - while ($row_rub = $sql_rub->FetchRow()) - { - $num = $AVE_DB->Query(" - SELECT 1 - FROM - " . PREFIX . "_document_fields - WHERE - rubric_field_id = '" . $row_rub->Id . "' - AND - document_id = '" . $document_id . "' - LIMIT 1 - ")->NumRows(); + // По умолчанию + default: + // Выполняем запрос к БД и просто обновляем имеющиеся данные + $AVE_DB->Query(" + UPDATE + " . PREFIX . "_document_fields + SET + rubric_field_id = '" . $value . "' + WHERE + rubric_field_id = '" . $key . "' + AND + document_id = '" . $document_id . "' + "); - // Если в новой рубрики требуемого поля нет, выполняем запрос к БД на добавление нового типа поля - if ($num != 1) - { - $AVE_DB->Query(" - INSERT - " . PREFIX . "_document_fields - SET - rubric_field_id = '" . $row_rub->Id . "', - document_id = '" . $document_id . "', - field_value = '', - document_in_search = '1' - "); + $AVE_DB->Query(" + UPDATE + " . PREFIX . "_document_fields_text + SET + rubric_field_id = '" . $value . "' + WHERE + rubric_field_id = '" . $key . "' + AND + document_id = '" . $document_id . "' + "); + break; + } + } } - } - - // Выполянем запрос к БД на обновление информации, в котором устанавливаем для перенесенного документа - // новое значение id рубрики - $AVE_DB->Query(" - UPDATE - " . PREFIX . "_documents - SET - rubric_id = '" . $new_rubric_id . "' - WHERE - Id = '" . $document_id . "' - "); - - // Выполняем запрос к БД и очищаем кэш шаблона документа - $AVE_DB->Query(" - DELETE - FROM - " . PREFIX . "_rubric_template_cache - WHERE - doc_id = '" . $document_id . "' - "); - - echo ''; - } - else // Если в запросе не был указан id рубрики и id документа - { - // Формируем и отображаем форму, где пользователь самостоятельно определяет перенос - $fields = array(); - if ((! empty($_GET['NewRubr'])) and ($rubric_id != (int)$_GET['NewRubr'])) - { - // Выполняем запрос к БД и выбираем все поля новой рубрики + // Выполняем запрос к БД и получаем список всех полей у новой рубрики $sql_rub = $AVE_DB->Query(" - SELECT - Id, - rubric_field_title, - rubric_field_type + SELECT Id FROM " . PREFIX . "_rubric_fields WHERE - rubric_id = '" . (int)$_GET['NewRubr'] . "' + rubric_id = '" . $new_rubric_id . "' ORDER BY Id ASC "); - $mass_new_rubr = array(); + // Выполняем запросы к БД на проверку наличия нужных полей. while ($row_rub = $sql_rub->FetchRow()) { - $mass_new_rubr[] = array('Id' => $row_rub->Id, - 'title' => $row_rub->rubric_field_title, - 'rubric_field_type' => $row_rub->rubric_field_type - ); + $num = $AVE_DB->Query(" + SELECT 1 + FROM + " . PREFIX . "_document_fields + WHERE + rubric_field_id = '" . $row_rub->Id . "' + AND + document_id = '" . $document_id . "' + LIMIT 1 + ")->NumRows(); + + // Если в новой рубрики требуемого поля нет, выполняем запрос к БД на добавление нового типа поля + if ($num != 1) + { + $AVE_DB->Query(" + INSERT + " . PREFIX . "_document_fields + SET + rubric_field_id = '" . $row_rub->Id . "', + document_id = '" . $document_id . "', + field_value = '', + document_in_search = '1' + "); + } } - // Выполняем запрос к БД и выбираем все поля старой рубрики - $sql_old_rub = $AVE_DB->Query(" - SELECT - Id, - rubric_field_title, - rubric_field_type - FROM - " . PREFIX . "_rubric_fields + // Выполянем запрос к БД на обновление информации, в котором устанавливаем для перенесенного документа + // новое значение id рубрики + $AVE_DB->Query(" + UPDATE + " . PREFIX . "_documents + SET + rubric_id = '" . $new_rubric_id . "' WHERE - rubric_id = '" . $rubric_id . "' - ORDER BY - Id ASC + Id = '" . $document_id . "' "); - // Циклически обрабатываем полученные данные - while ($row_nr = $sql_old_rub->FetchRow()) { - $type = $row_nr->rubric_field_type; - $option_arr = array('0' => $AVE_Template->get_config_vars('DOC_CHANGE_DROP_FIELD'), - '-1' => $AVE_Template->get_config_vars('DOC_CHANGE_CREATE_FIELD') - ); - $selected = -1; - foreach ($mass_new_rubr as $row) + // Чистим кеш + $AVE_DB->clearCache('doc_' . $document_id); // Прочее + $AVE_DB->clearCache('fld_' . $document_id); // Поля + $AVE_DB->clearCache('cmd_' . $document_id); // Компиляция + $AVE_DB->clearCache('brd_' . $document_id); // Хлебные крошки + $AVE_DB->clearCache('rqe_' . $document_id); // Элемент запроса + + echo ''; + } + else // Если в запросе не был указан id рубрики и id документа + { + // Формируем и отображаем форму, где пользователь самостоятельно определяет перенос + $fields = array(); + + if ((! empty($_GET['NewRubr'])) and ($rubric_id != (int)$_GET['NewRubr'])) + { + // Выполняем запрос к БД и выбираем все поля новой рубрики + $sql_rub = $AVE_DB->Query(" + SELECT + Id, + rubric_field_title, + rubric_field_type + FROM + " . PREFIX . "_rubric_fields + WHERE + rubric_id = '" . (int)$_GET['NewRubr'] . "' + ORDER BY + Id ASC + "); + $mass_new_rubr = array(); + + while ($row_rub = $sql_rub->FetchRow()) { - if ($row['rubric_field_type'] == $type) + $mass_new_rubr[] = array('Id' => $row_rub->Id, + 'title' => $row_rub->rubric_field_title, + 'rubric_field_type' => $row_rub->rubric_field_type + ); + } + + // Выполняем запрос к БД и выбираем все поля старой рубрики + $sql_old_rub = $AVE_DB->Query(" + SELECT + Id, + rubric_field_title, + rubric_field_type + FROM + " . PREFIX . "_rubric_fields + WHERE + rubric_id = '" . $rubric_id . "' + ORDER BY + Id ASC + "); + + // Циклически обрабатываем полученные данные + while ($row_nr = $sql_old_rub->FetchRow()) { + $type = $row_nr->rubric_field_type; + $option_arr = array('0' => $AVE_Template->get_config_vars('DOC_CHANGE_DROP_FIELD'), + '-1' => $AVE_Template->get_config_vars('DOC_CHANGE_CREATE_FIELD') + ); + $selected = -1; + foreach ($mass_new_rubr as $row) { - $option_arr[$row['Id']] = $row['title']; + if ($row['rubric_field_type'] == $type) + { + $option_arr[$row['Id']] = $row['title']; - if ($row_nr->rubric_field_title == $row['title']) - $selected = $row['Id']; + if ($row_nr->rubric_field_title == $row['title']) + $selected = $row['Id']; + } } + $fields[$row_nr->Id] = array('title' => $row_nr->rubric_field_title, + 'Options' => $option_arr, + 'Selected' => $selected + ); } - $fields[$row_nr->Id] = array('title' => $row_nr->rubric_field_title, - 'Options' => $option_arr, - 'Selected' => $selected - ); } - } - // Формируем ряд переменых и отображаем страницу с выбором рубрики - $AVE_Template->assign('fields', $fields); - $AVE_Template->assign('formaction', 'index.php?do=docs&action=change&Id=' . $document_id . '&rubric_id=' . $rubric_id . '&pop=1&cp=' . SESSION); - $AVE_Template->assign('content', $AVE_Template->fetch('documents/change.tpl')); + // Чистим кеш + $AVE_DB->clearCache('doc_' . $document_id); // Прочее + $AVE_DB->clearCache('fld_' . $document_id); // Поля + $AVE_DB->clearCache('cmd_' . $document_id); // Компиляция + $AVE_DB->clearCache('brd_' . $document_id); // Хлебные крошки + $AVE_DB->clearCache('rqe_' . $document_id); // Элемент запроса + + // Формируем ряд переменых и отображаем страницу с выбором рубрики + $AVE_Template->assign('fields', $fields); + $AVE_Template->assign('formaction', 'index.php?do=docs&action=change&Id=' . $document_id . '&rubric_id=' . $rubric_id . '&pop=1&cp=' . SESSION); + $AVE_Template->assign('content', $AVE_Template->fetch('documents/change.tpl')); + } } - } - /** - * Метод, предназначенный для формирования прав доступа Группы пользователей на Документы определённой Рубрики - * - * @param int $rubric_id идентификатор Рубрики - */ - function documentPermissionFetch($rubric_id) - { - global $AVE_DB; - - // Массив прав пользователей - static $rubric_permissions = array(); - - // Если у нас уже имеются полученные права для данной рубрики, просто прерываем проверку - if (isset($rubric_permissions[$rubric_id])) return; - - // Выполняем запрос к БД на получение прав для данной рубрики - $sql = $AVE_DB->Query(" - SELECT - rubric_id, - rubric_permission - FROM - " . PREFIX . "_rubric_permissions - WHERE - user_group_id = '" . UGROUP . "' - "); - - // Циклически обрабатываем полученные данные и формируем массив прав - while ($row = $sql->FetchRow()) + /** + * Метод, предназначенный для формирования прав доступа Группы пользователей на Документы определённой Рубрики + * + * @param int $rubric_id идентификатор Рубрики + */ + function documentPermissionFetch($rubric_id) { - $rubric_permissions[$row->rubric_id] = 1; + global $AVE_DB; + + // Массив прав пользователей + static $rubric_permissions = array(); - $permissions = explode('|', $row->rubric_permission); + // Если у нас уже имеются полученные права для данной рубрики, просто прерываем проверку + if (isset($rubric_permissions[$rubric_id])) return; + + // Выполняем запрос к БД на получение прав для данной рубрики + $sql = $AVE_DB->Query(" + SELECT + rubric_id, + rubric_permission + FROM + " . PREFIX . "_rubric_permissions + WHERE + user_group_id = '" . UGROUP . "' + "); - foreach ($permissions as $rubric_permission) + // Циклически обрабатываем полученные данные и формируем массив прав + while ($row = $sql->FetchRow()) { - if (! empty($rubric_permission)) + $rubric_permissions[$row->rubric_id] = 1; + + $permissions = explode('|', $row->rubric_permission); + + foreach ($permissions as $rubric_permission) { - $_SESSION[$row->rubric_id . '_' . $rubric_permission] = 1; + if (! empty($rubric_permission)) + { + $_SESSION[$row->rubric_id . '_' . $rubric_permission] = 1; + } } } } - } - - /** - * Метод, предназначенный для просмотра и добавления Заметок к Документу - * - * @param int $reply признак ответа на Заметку - */ - function documentRemarkNew($document_id = 0, $reply = 0) - { - global $AVE_DB, $AVE_Template, $AVE_Core; - // Если id документа не число или 0, прерываем выполнение - if (! (is_numeric($document_id) && $document_id > 0)) - exit; - - $document_title = get_document($document_id, 'document_title'); - $AVE_Template->assign('document_title', $document_title); - - // Если в запросе пришел параметр на Сохранение - if (isset($_REQUEST['sub']) && $_REQUEST['sub'] == 'save') + /** + * Метод, предназначенный для просмотра и добавления Заметок к Документу + * + * @param int $reply признак ответа на Заметку + */ + function documentRemarkNew($document_id = 0, $reply = 0) { - // Если пользователь оставил комментарий и у него имеются права и это не ответ, а новая заметка, тогда - if (!empty($_REQUEST['remark_text']) && check_permission('remarks') && empty($_REQUEST['reply'])) - { - // Выполняем запрос к БД на добавление новой заметки для документа - $AVE_DB->Query(" - INSERT - " . PREFIX . "_document_remarks - SET - document_id = '" . $document_id . "', - remark_title = '" . clean_no_print_char($_REQUEST['remark_title']) . "', - remark_text = '" . substr(clean_no_print_char($_REQUEST['remark_text']), 0, $this->_max_remark_length) . "', - remark_author_id = '" . $_SESSION['user_id'] . "', - remark_published = '" . time() . "', - remark_first = '1', - remark_author_email = '" . $_SESSION['user_email'] . "' - "); - } + global $AVE_DB, $AVE_Template, $AVE_Core; - // Выполняем обновление страницы - header('Location:index.php?do=docs&action=remark_reply&Id=' . $document_id . '&pop=1&cp=' . SESSION); - } + // Если id документа не число или 0, прерываем выполнение + if (! (is_numeric($document_id) && $document_id > 0)) + exit; - // Если это ответ на уже существующую заметку - if ($reply == 1) - { - if (isset($_REQUEST['sub']) && $_REQUEST['sub'] == 'save') - { - // Если пользователь оставил ответ и имеет на это права - if (! empty($_REQUEST['remark_text']) && check_permission('remarks')) - { - // Выполняем запрос на получение e-mail адреса автора заметки - $remark_author_email = $AVE_DB->Query(" - SELECT - remark_author_email - FROM - " . PREFIX . "_document_remarks - WHERE - remark_first = '1' - AND - document_id = '" . $document_id . "' - ")->GetCell(); + $document_title = get_document($document_id, 'document_title'); + $AVE_Template->assign('document_title', $document_title); - // Выполняем запрос к БД на добавление заметки в БД + // Если в запросе пришел параметр на Сохранение + if (isset($_REQUEST['sub']) && $_REQUEST['sub'] == 'save') + { + // Если пользователь оставил комментарий и у него имеются права и это не ответ, а новая заметка, тогда + if (!empty($_REQUEST['remark_text']) && check_permission('remarks') && empty($_REQUEST['reply'])) + { + // Выполняем запрос к БД на добавление новой заметки для документа $AVE_DB->Query(" INSERT " . PREFIX . "_document_remarks @@ -3465,760 +3437,752 @@ class AVE_Document remark_text = '" . substr(clean_no_print_char($_REQUEST['remark_text']), 0, $this->_max_remark_length) . "', remark_author_id = '" . $_SESSION['user_id'] . "', remark_published = '" . time() . "', - remark_first = '0', + remark_first = '1', remark_author_email = '" . $_SESSION['user_email'] . "' "); } - // Формируем сообщение и отправляем письмо автору, с информацией о том, что на его заметку есть ответ - $system_mail = get_settings('mail_from'); - $system_mail_name = get_settings('mail_from_name'); - $link = get_home_link() . 'index.php?do=docs&doc_id=' . $document_id; - - $body_to_admin = $AVE_Template->get_config_vars('DOC_MAIL_BODY_NOTICE'); - $body_to_admin = str_replace('%N%', "\n", $body_to_admin); - $body_to_admin = str_replace('%TITLE%', stripslashes($_POST['remark_title']), $body_to_admin); - $body_to_admin = str_replace('%USER%', get_username_by_id($_SESSION['user_id']), $body_to_admin); - $body_to_admin = str_replace('%LINK%', $link, $body_to_admin); - send_mail( - $remark_author_email, - $body_to_admin, - $AVE_Template->get_config_vars('DOC_MAIL_SUBJECT_NOTICE'), - $system_mail, - $system_mail_name, - 'text' - ); - // Выполняем обновление страницы header('Location:index.php?do=docs&action=remark_reply&Id=' . $document_id . '&pop=1&cp=' . SESSION); } - // Получаем общее количество заметок для документа - $num = $AVE_DB->Query(" - SELECT COUNT(*) - FROM " . PREFIX . "_document_remarks - WHERE document_id = '" . $document_id . "' - ")->GetCell(); + // Если это ответ на уже существующую заметку + if ($reply == 1) + { + if (isset($_REQUEST['sub']) && $_REQUEST['sub'] == 'save') + { + // Если пользователь оставил ответ и имеет на это права + if (! empty($_REQUEST['remark_text']) && check_permission('remarks')) + { + // Выполняем запрос на получение e-mail адреса автора заметки + $remark_author_email = $AVE_DB->Query(" + SELECT + remark_author_email + FROM + " . PREFIX . "_document_remarks + WHERE + remark_first = '1' + AND + document_id = '" . $document_id . "' + ")->GetCell(); - // Определяыем лимит заметок на 1 странице и подсчитываем количество страниц - $limit = 10; - $pages = ceil($num / $limit); - $start = get_current_page() * $limit - $limit; + // Выполняем запрос к БД на добавление заметки в БД + $AVE_DB->Query(" + INSERT + " . PREFIX . "_document_remarks + SET + document_id = '" . $document_id . "', + remark_title = '" . clean_no_print_char($_REQUEST['remark_title']) . "', + remark_text = '" . substr(clean_no_print_char($_REQUEST['remark_text']), 0, $this->_max_remark_length) . "', + remark_author_id = '" . $_SESSION['user_id'] . "', + remark_published = '" . time() . "', + remark_first = '0', + remark_author_email = '" . $_SESSION['user_email'] . "' + "); + } - $answers = array(); + // Формируем сообщение и отправляем письмо автору, с информацией о том, что на его заметку есть ответ + $system_mail = get_settings('mail_from'); + $system_mail_name = get_settings('mail_from_name'); + $link = get_home_link() . 'index.php?do=docs&doc_id=' . $document_id; + + $body_to_admin = $AVE_Template->get_config_vars('DOC_MAIL_BODY_NOTICE'); + $body_to_admin = str_replace('%N%', "\n", $body_to_admin); + $body_to_admin = str_replace('%TITLE%', stripslashes($_POST['remark_title']), $body_to_admin); + $body_to_admin = str_replace('%USER%', get_username_by_id($_SESSION['user_id']), $body_to_admin); + $body_to_admin = str_replace('%LINK%', $link, $body_to_admin); + send_mail( + $remark_author_email, + $body_to_admin, + $AVE_Template->get_config_vars('DOC_MAIL_SUBJECT_NOTICE'), + $system_mail, + $system_mail_name, + 'text' + ); - // Выполняем запрос к БД на получение заметок с учетом количества на 1 странцу - $sql = $AVE_DB->Query(" - SELECT * - FROM - " . PREFIX . "_document_remarks - WHERE - document_id = '" . $document_id . "' - ORDER BY - Id DESC - LIMIT " . $start . "," . $limit - ); + // Выполняем обновление страницы + header('Location:index.php?do=docs&action=remark_reply&Id=' . $document_id . '&pop=1&cp=' . SESSION); + } - while ($row = $sql->FetchAssocArray()) - { - $row['remark_author'] = get_username_by_id($row['remark_author_id']); - $row['remark_text'] = nl2br($row['remark_text']); - $row['remark_avatar'] = getAvatar($row['remark_author_id'],40); - array_push($answers, $row); - } + // Получаем общее количество заметок для документа + $num = $AVE_DB->Query(" + SELECT COUNT(*) + FROM " . PREFIX . "_document_remarks + WHERE document_id = '" . $document_id . "' + ")->GetCell(); - $remark_status = $AVE_DB->Query(" - SELECT - remark_status - FROM - " . PREFIX . "_document_remarks - WHERE - document_id = '" . $document_id . "' - AND - remark_first = '1' - ")->GetCell(); + // Определяыем лимит заметок на 1 странице и подсчитываем количество страниц + $limit = 10; + $pages = ceil($num / $limit); + $start = get_current_page() * $limit - $limit; - // Если количество заметок превышает допустимое значение, определенное в переменной $limit, тогда - // формируем постраничную навигацию - if ($num > $limit) - { - $page_nav = "
    • {t}
    • "; - $page_nav = get_pagination($pages, 'page', $page_nav); - $AVE_Template->assign('page_nav', $page_nav); - } + $answers = array(); - // Передаем данные в шаблон и отображаем страницу со списком заметок - $AVE_Template->assign('document_title', $document_title); - $AVE_Template->assign('remark_status', $remark_status); - $AVE_Template->assign('answers', $answers); - $AVE_Template->assign('reply', 1); - $AVE_Template->assign('formaction', 'index.php?do=docs&action=remark_reply&sub=save&Id=' . $document_id . '&reply=1&cp=' . SESSION); - $AVE_Template->assign('content', $AVE_Template->fetch('documents/newremark.tpl')); - } - else - { // В противном случае, если заметок еще нет, открываем форму для добавление заметки + // Выполняем запрос к БД на получение заметок с учетом количества на 1 странцу + $sql = $AVE_DB->Query(" + SELECT * + FROM + " . PREFIX . "_document_remarks + WHERE + document_id = '" . $document_id . "' + ORDER BY + Id DESC + LIMIT " . $start . "," . $limit + ); + + while ($row = $sql->FetchAssocArray()) + { + $row['remark_author'] = get_username_by_id($row['remark_author_id']); + $row['remark_text'] = nl2br($row['remark_text']); + $row['remark_avatar'] = getAvatar($row['remark_author_id'],40); + array_push($answers, $row); + } + + $remark_status = $AVE_DB->Query(" + SELECT + remark_status + FROM + " . PREFIX . "_document_remarks + WHERE + document_id = '" . $document_id . "' + AND + remark_first = '1' + ")->GetCell(); + + // Если количество заметок превышает допустимое значение, определенное в переменной $limit, тогда + // формируем постраничную навигацию + if ($num > $limit) + { + $page_nav = "
    • {t}
    • "; + $page_nav = get_pagination($pages, 'page', $page_nav); + $AVE_Template->assign('page_nav', $page_nav); + } + + // Передаем данные в шаблон и отображаем страницу со списком заметок + $AVE_Template->assign('document_title', $document_title); + $AVE_Template->assign('remark_status', $remark_status); + $AVE_Template->assign('answers', $answers); $AVE_Template->assign('reply', 1); - $AVE_Template->assign('new', 1); - $AVE_Template->assign('formaction', 'index.php?do=docs&action=remark&sub=save&Id=' . $document_id . '&cp=' . SESSION); + $AVE_Template->assign('formaction', 'index.php?do=docs&action=remark_reply&sub=save&Id=' . $document_id . '&reply=1&cp=' . SESSION); $AVE_Template->assign('content', $AVE_Template->fetch('documents/newremark.tpl')); } - } - - /** - * Метод, предназначенный для управления статусами дискусии (разрешить или запретить оставлять - * ответы на заметки для других пользователей) - * - * @param int $document_id идентификатор документа - * @param int $status статус дискусии - */ - function documentRemarkStatus($document_id = 0, $status = 0) - { - global $AVE_DB; - - // Если id документа число и оно больше 0, тогда - if (is_numeric($document_id) && $document_id > 0) - { - // Выполняем запрос к БД на обновление статуса у заметок - $AVE_DB->Query(" - UPDATE - " . PREFIX . "_document_remarks - SET - remark_status = '" . ($status != 1 ? 0 : 1) . "' - WHERE - remark_first = '1' - AND - document_id = '" . $document_id . "' - "); + else + { // В противном случае, если заметок еще нет, открываем форму для добавление заметки + $AVE_Template->assign('reply', 1); + $AVE_Template->assign('new', 1); + $AVE_Template->assign('formaction', 'index.php?do=docs&action=remark&sub=save&Id=' . $document_id . '&cp=' . SESSION); + $AVE_Template->assign('content', $AVE_Template->fetch('documents/newremark.tpl')); + } } - // Выполняем обновление данных - header('Location:index.php?do=docs&action=remark_reply&Id=' . $document_id . '&pop=1&cp=' . SESSION); - exit; - } + /** + * Метод, предназначенный для управления статусами дискусии (разрешить или запретить оставлять + * ответы на заметки для других пользователей) + * + * @param int $document_id идентификатор документа + * @param int $status статус дискусии + */ + function documentRemarkStatus($document_id = 0, $status = 0) + { + global $AVE_DB; - /** - * Метод, предназначенный для удаление заметок - * - * @param int $all признак удаления всех Заметок (1 - удалить все) - */ - function documentRemarkDelete($document_id = 0, $all = 0) - { - global $AVE_DB; + // Если id документа число и оно больше 0, тогда + if (is_numeric($document_id) && $document_id > 0) + { + // Выполняем запрос к БД на обновление статуса у заметок + $AVE_DB->Query(" + UPDATE + " . PREFIX . "_document_remarks + SET + remark_status = '" . ($status != 1 ? 0 : 1) . "' + WHERE + remark_first = '1' + AND + document_id = '" . $document_id . "' + "); + } - // Если id документа не число или 0, прерываем выполнение - if (! (is_numeric($document_id) && $document_id > 0)) + // Выполняем обновление данных + header('Location:index.php?do=docs&action=remark_reply&Id=' . $document_id . '&pop=1&cp=' . SESSION); exit; + } - // Если в запросе пришел параметр на удаление всех заметок - if ($all == 1) + /** + * Метод, предназначенный для удаление заметок + * + * @param int $all признак удаления всех Заметок (1 - удалить все) + */ + function documentRemarkDelete($document_id = 0, $all = 0) { - // Выполянем запрос к БД и удалаем заметки - $AVE_DB->Query(" - DELETE - FROM - " . PREFIX . "_document_remarks - WHERE - document_id = '" . $document_id . "' - "); + global $AVE_DB; - // Выполняем обновление страницы - header('Location:index.php?do=docs&action=remark&Id=' . $document_id . '&pop=1&cp=' . SESSION); - exit; - } - else - { - if (! (isset($_REQUEST['CId']) && is_numeric($_REQUEST['CId']) && $_REQUEST['CId'] > 0)) + // Если id документа не число или 0, прерываем выполнение + if (! (is_numeric($document_id) && $document_id > 0)) exit; - // В противном случае, выполняем запрос к БД и удаляем только ту заметку, которая была выбрана - $AVE_DB->Query(" - DELETE - FROM - " . PREFIX . "_document_remarks - WHERE - document_id = '" . $document_id . "' - AND - Id = '" . $_REQUEST['CId'] . "' - "); - - // Выполняем обновление страницы - header('Location:index.php?do=docs&action=remark_reply&Id=' . $document_id . '&pop=1&cp=' . SESSION); - exit; - } - } + // Если в запросе пришел параметр на удаление всех заметок + if ($all == 1) + { + // Выполянем запрос к БД и удалаем заметки + $AVE_DB->Query(" + DELETE + FROM + " . PREFIX . "_document_remarks + WHERE + document_id = '" . $document_id . "' + "); - /** - * Добавить в навигацию пункт ссылающийся на документ - * - */ - function documentInNavi() - { - global $AVE_DB; + // Выполняем обновление страницы + header('Location:index.php?do=docs&action=remark&Id=' . $document_id . '&pop=1&cp=' . SESSION); + exit; + } + else + { + if (! (isset($_REQUEST['CId']) && is_numeric($_REQUEST['CId']) && $_REQUEST['CId'] > 0)) + exit; - $document_id = isset($_REQUEST['document_id']) ? (int)$_REQUEST['document_id'] : 0; - $rubric_id = isset($_REQUEST['rubric_id']) ? (int)$_REQUEST['rubric_id'] : 0; - $title = isset($_REQUEST['navi_title']) ? clean_no_print_char($_REQUEST['navi_title']) : ''; + // В противном случае, выполняем запрос к БД и удаляем только ту заметку, которая была выбрана + $AVE_DB->Query(" + DELETE + FROM + " . PREFIX . "_document_remarks + WHERE + document_id = '" . $document_id . "' + AND + Id = '" . $_REQUEST['CId'] . "' + "); - if ($document_id > 0 && $rubric_id > 0 && $title != '' && check_permission_acp('navigation_new')) - { - $document_alias = $AVE_DB->Query(" - SELECT - document_alias - FROM - " . PREFIX . "_documents - WHERE - Id = '" . $document_id . "' - AND - rubric_id = '" . $rubric_id . "' - LIMIT 1 - ")->GetCell(); + // Выполняем обновление страницы + header('Location:index.php?do=docs&action=remark_reply&Id=' . $document_id . '&pop=1&cp=' . SESSION); + exit; + } } - - if (isset($document_alias) && $document_alias !== false) + /** + * Добавить в навигацию пункт ссылающийся на документ + * + */ + function documentInNavi() { - // Получаем id пункта меню из запроса - $parent_id = isset($_REQUEST['parent_id']) ? (int)$_REQUEST['parent_id'] : 0; + global $AVE_DB; - // Если пункт не родительский, а какой-либо дочерний - if ($parent_id > 0) + $document_id = isset($_REQUEST['document_id']) ? (int)$_REQUEST['document_id'] : 0; + $rubric_id = isset($_REQUEST['rubric_id']) ? (int)$_REQUEST['rubric_id'] : 0; + $title = isset($_REQUEST['navi_title']) ? clean_no_print_char($_REQUEST['navi_title']) : ''; + + if ($document_id > 0 && $rubric_id > 0 && $title != '' && check_permission_acp('navigation_new')) { - // Выполняем запрос к БД на получение id меню навигации и уровня - list($navigation_id, $status, $level) = $AVE_DB->Query(" + $document_alias = $AVE_DB->Query(" SELECT - navigation_id, - status, - level+1 + document_alias FROM - " . PREFIX . "_navigation_items + " . PREFIX . "_documents WHERE - navigation_item_id = '" . $parent_id . "' + Id = '" . $document_id . "' + AND + rubric_id = '" . $rubric_id . "' LIMIT 1 - ")->FetchArray(); + ")->GetCell(); } - else - { - $navigation_id = (isset($_REQUEST['navi_id']) && (int)$_REQUEST['navi_id'] > 0) ? (int)$_REQUEST['navi_id'] : 1; - $status = 1; - $level = 1; - } - $target = (isset($_REQUEST['navi_item_target']) && $_REQUEST['navi_item_target'] == '_blank') ? '_blank' : '_self'; - $position = empty($_REQUEST['navi_item_position']) ? 1 : (int)$_REQUEST['navi_item_position']; + if (isset($document_alias) && $document_alias !== false) + { + // Получаем id пункта меню из запроса + $parent_id = isset($_REQUEST['parent_id']) ? (int)$_REQUEST['parent_id'] : 0; - if ($level > 3) - $level = '3'; + // Если пункт не родительский, а какой-либо дочерний + if ($parent_id > 0) + { + // Выполняем запрос к БД на получение id меню навигации и уровня + list($navigation_id, $status, $level) = $AVE_DB->Query(" + SELECT + navigation_id, + status, + level+1 + FROM + " . PREFIX . "_navigation_items + WHERE + navigation_item_id = '" . $parent_id . "' + LIMIT 1 + ")->FetchArray(); + } + else + { + $navigation_id = (isset($_REQUEST['navi_id']) && (int)$_REQUEST['navi_id'] > 0) ? (int)$_REQUEST['navi_id'] : 1; + $status = 1; + $level = 1; + } - // Добавляем информации о новой связке Документ<->Пункт меню - $AVE_DB->Query(" - INSERT - INTO - " . PREFIX . "_navigation_items - SET - title = '" . $title . "', - document_id = '" . $document_id . "', - alias = '" . $document_alias . "', - parent_id = '" . $parent_id . "', - navigation_id = '" . $navigation_id . "', - level = '" . $level . "', - target = '" . $target . "', - position = '" . $position . "', - status = '" . $status . "' - "); - } + $target = (isset($_REQUEST['navi_item_target']) && $_REQUEST['navi_item_target'] == '_blank') ? '_blank' : '_self'; - header('Location:index.php?do=docs&action=after&document_id=' . $document_id . '&rubric_id=' . $rubric_id . '&cp=' . SESSION); - exit; - } + $position = empty($_REQUEST['navi_item_position']) ? 1 : (int)$_REQUEST['navi_item_position']; - /** - * Вывод формы дополнительных действий с новым или отредактированным документом - * - */ - function documentFormAfter() - { - global $AVE_DB, $AVE_Template; + if ($level > 3) + $level = '3'; - $document_id = isset($_REQUEST['document_id']) ? (int)$_REQUEST['document_id'] : 0; - $rubric_id = isset($_REQUEST['rubric_id']) ? (int)$_REQUEST['rubric_id'] : 0; - $innavi = (isset($_REQUEST['innavi']) && check_permission_acp('navigation_new')) ? 1 : 0; + // Добавляем информации о новой связке Документ<->Пункт меню + $AVE_DB->Query(" + INSERT + INTO + " . PREFIX . "_navigation_items + SET + title = '" . $title . "', + document_id = '" . $document_id . "', + alias = '" . $document_alias . "', + parent_id = '" . $parent_id . "', + navigation_id = '" . $navigation_id . "', + level = '" . $level . "', + target = '" . $target . "', + position = '" . $position . "', + status = '" . $status . "' + "); + } - if ($document_id > 0 && $rubric_id > 0) - { - $document = $AVE_DB->Query(" - SELECT - Id AS document_id, - rubric_id, - document_title AS document_title, - '" . $innavi . "' AS innavi - FROM - " . PREFIX . "_documents - WHERE - Id = '" . $document_id . "' - AND - rubric_id = '" . $rubric_id . "' - LIMIT 1 - ")->FetchAssocArray(); + header('Location:index.php?do=docs&action=after&document_id=' . $document_id . '&rubric_id=' . $rubric_id . '&cp=' . SESSION); + exit; } - if (empty($document)) + /** + * Вывод формы дополнительных действий с новым или отредактированным документом + * + */ + function documentFormAfter() { - header('Location:index.php?do=docs&cp=' . SESSION); - exit; - } + global $AVE_DB, $AVE_Template; - $search_query = $_SESSION['search_query'][$document_id] ? true : false; + $document_id = isset($_REQUEST['document_id']) ? (int)$_REQUEST['document_id'] : 0; + $rubric_id = isset($_REQUEST['rubric_id']) ? (int)$_REQUEST['rubric_id'] : 0; + $innavi = (isset($_REQUEST['innavi']) && check_permission_acp('navigation_new')) ? 1 : 0; - $AVE_Template->assign('search_query', $search_query); - $AVE_Template->assign($document); - $AVE_Template->assign('content', $AVE_Template->fetch('documents/form_after.tpl')); - } + if ($document_id > 0 && $rubric_id > 0) + { + $document = $AVE_DB->Query(" + SELECT + Id AS document_id, + rubric_id, + document_title AS document_title, + '" . $innavi . "' AS innavi + FROM + " . PREFIX . "_documents + WHERE + Id = '" . $document_id . "' + AND + rubric_id = '" . $rubric_id . "' + LIMIT 1 + ")->FetchAssocArray(); + } + + if (empty($document)) + { + header('Location:index.php?do=docs&cp=' . SESSION); + exit; + } + $search_query = $_SESSION['search_query'][$document_id] ? true : false; - /** - * Редирект сохраненного документа на раздел, учитывая фильтр - * - */ - function documentSaveRedirect() - { - $document_id = isset($_REQUEST['document_id']) - ? (int)$_REQUEST['document_id'] - : 0; + $AVE_Template->assign('search_query', $search_query); + $AVE_Template->assign($document); + $AVE_Template->assign('content', $AVE_Template->fetch('documents/form_after.tpl')); + } - // Если не пришел $documet_id - if (! $document_id) + + /** + * Редирект сохраненного документа на раздел, учитывая фильтр + * + */ + function documentSaveRedirect() { - header('Location:index.php?do=docs&cp=' . SESSION); - exit; - } + $document_id = isset($_REQUEST['document_id']) + ? (int)$_REQUEST['document_id'] + : 0; - // Параметры поиска - $search_query = base64_decode($_SESSION['search_query'][$document_id]); + // Если не пришел $documet_id + if (! $document_id) + { + header('Location:index.php?do=docs&cp=' . SESSION); + exit; + } - $search_query = $search_query - ? $search_query - : 'do=docs&cp=' . SESSION; + // Параметры поиска + $search_query = base64_decode($_SESSION['search_query'][$document_id]); - // Убираем из сессии данный документ - unset ($_SESSION['search_query'][$document_id]); + $search_query = $search_query + ? $search_query + : 'do=docs&cp=' . SESSION; - // Переходим на страницу - header('Location: index.php?' . $search_query); - exit; - } + // Убираем из сессии данный документ + unset ($_SESSION['search_query'][$document_id]); + // Переходим на страницу + header('Location: index.php?' . $search_query); + exit; + } - /** - * Метод, предназначенный для смены автора документа - * - * @param int $doc_id идентификатор документа - * @param int $user_id идентификатор пользователя - */ - function changeAutorSave() - { - global $AVE_DB; - // Если id документа число и оно больше 0, тогда - if (is_numeric($_REQUEST['doc_id']) && $_REQUEST['doc_id'] > 0) + /** + * Метод, предназначенный для смены автора документа + * + * @param int $doc_id идентификатор документа + * @param int $user_id идентификатор пользователя + */ + function changeAutorSave() { - // Выполняем запрос к БД на обновление статуса у заметок - $AVE_DB->Query(" - UPDATE - " . PREFIX . "_documents - SET - document_author_id = '" . $_REQUEST['user_id'] . "' - WHERE - Id = '" . $_REQUEST['doc_id'] . "' - "); + global $AVE_DB; + + // Если id документа число и оно больше 0, тогда + if (is_numeric($_REQUEST['doc_id']) && $_REQUEST['doc_id'] > 0) + { + // Выполняем запрос к БД на обновление статуса у заметок + $AVE_DB->Query(" + UPDATE + " . PREFIX . "_documents + SET + document_author_id = '" . $_REQUEST['user_id'] . "' + WHERE + Id = '" . $_REQUEST['doc_id'] . "' + "); - $username = get_username_by_id($_REQUEST['user_id']); + $username = get_username_by_id($_REQUEST['user_id']); - echo " - - "; + echo " + + "; + } + exit; } - exit; - } - - /** - * Метод, предназначенный для удаления ревизий документов - * - */ - function documentsRevisionsClear() - { - global $AVE_DB, $AVE_Template; - if (check_permission('document_php')) + /** + * Метод, предназначенный для удаления ревизий документов + * + */ + function documentsRevisionsClear() { - $sql = $AVE_DB->Query(" - TRUNCATE TABLE " . PREFIX . "_document_rev - "); + global $AVE_DB, $AVE_Template; - if ($sql->_result === false) + if (check_permission('document_php')) { - $message = $AVE_Template->get_config_vars('SETTINGS_REV_DELETED_ERR'); - $header = $AVE_Template->get_config_vars('SETTINGS_ERROR'); - $theme = 'error'; - } - else + $sql = $AVE_DB->Query(" + TRUNCATE TABLE " . PREFIX . "_document_rev + "); + + if ($sql->_result === false) { - $message = $AVE_Template->get_config_vars('SETTINGS_REV_DELETED'); - $header = $AVE_Template->get_config_vars('SETTINGS_SUCCESS'); - $theme = 'accept'; - reportLog($AVE_Template->get_config_vars('SETTINGS_REV_UPDATE')); + $message = $AVE_Template->get_config_vars('SETTINGS_REV_DELETED_ERR'); + $header = $AVE_Template->get_config_vars('SETTINGS_ERROR'); + $theme = 'error'; } + else + { + $message = $AVE_Template->get_config_vars('SETTINGS_REV_DELETED'); + $header = $AVE_Template->get_config_vars('SETTINGS_SUCCESS'); + $theme = 'accept'; + reportLog($AVE_Template->get_config_vars('SETTINGS_REV_UPDATE')); + } - if (isset($_REQUEST['ajax']) && $_REQUEST['ajax'] = 'run') - { - echo json_encode( - array( - 'message' => $message, - 'header' => $header, - 'theme' => $theme - ) - ); - } - else + if (isset($_REQUEST['ajax']) && $_REQUEST['ajax'] = 'run') { - header('Location:index.php?do=settings&cp=' . SESSION); + echo json_encode( + array( + 'message' => $message, + 'header' => $header, + 'theme' => $theme + ) + ); } + else + { + header('Location:index.php?do=settings&cp=' . SESSION); + } + } + exit; } - exit; - } - - /** - * Метод, предназначенный для удаления ревизий документов - * - */ - function documentCounterClear() - { - global $AVE_DB, $AVE_Template; - if (check_permission('gen_settings')) + /** + * Метод, предназначенный для удаления ревизий документов + * + */ + function documentCounterClear() { - $sql = $AVE_DB->Query(" - TRUNCATE TABLE - " . PREFIX . "_view_count - "); + global $AVE_DB, $AVE_Template; - if ($sql->_result === false) + if (check_permission('gen_settings')) { - $message = $AVE_Template->get_config_vars('SETTINGS_COUNT_DELETED_ERR'); - $header = $AVE_Template->get_config_vars('SETTINGS_ERROR'); - $theme = 'error'; - } - else + $sql = $AVE_DB->Query(" + TRUNCATE TABLE + " . PREFIX . "_view_count + "); + + if ($sql->_result === false) { - $message = $AVE_Template->get_config_vars('SETTINGS_COUNT_DELETED'); - $header = $AVE_Template->get_config_vars('SETTINGS_SUCCESS'); - $theme = 'accept'; - reportLog($AVE_Template->get_config_vars('SETTINGS_COUNT_UPDATE')); + $message = $AVE_Template->get_config_vars('SETTINGS_COUNT_DELETED_ERR'); + $header = $AVE_Template->get_config_vars('SETTINGS_ERROR'); + $theme = 'error'; } + else + { + $message = $AVE_Template->get_config_vars('SETTINGS_COUNT_DELETED'); + $header = $AVE_Template->get_config_vars('SETTINGS_SUCCESS'); + $theme = 'accept'; + reportLog($AVE_Template->get_config_vars('SETTINGS_COUNT_UPDATE')); + } - if (isAjax()) - { - echo json_encode( - array( - 'message' => $message, - 'header' => $header, - 'theme' => $theme - ) - ); - } - else + if (isAjax()) { - header('Location:index.php?do=settings&cp=' . SESSION); + echo json_encode( + array( + 'message' => $message, + 'header' => $header, + 'theme' => $theme + ) + ); } + else + { + header('Location:index.php?do=settings&cp=' . SESSION); + } + } + exit; } - exit; - } - /** - * Метод, предназначенный для формирования URL - * - */ - function documentAliasCreate() - { - $alias = empty($_REQUEST['alias']) ? '' : prepare_url($_REQUEST['alias']); - $prefix = empty($_REQUEST['prefix']) ? '' : prepare_url($_REQUEST['prefix']); - $title = empty($_REQUEST['title']) ? '' : $_REQUEST['title']; - $title = (URL_YANDEX==true) ? y_translate($title) : prepare_url($title); + /** + * Метод, предназначенный для формирования URL + * + */ + function documentAliasCreate() + { + $alias = empty($_REQUEST['alias']) ? '' : prepare_url($_REQUEST['alias']); + $prefix = empty($_REQUEST['prefix']) ? '' : prepare_url($_REQUEST['prefix']); + $title = empty($_REQUEST['title']) ? '' : $_REQUEST['title']; + $title = (URL_YANDEX==true) ? y_translate($title) : prepare_url($title); - if ($alias != $title && $alias != trim($prefix . '/' . $title, '/')) - $alias = trim($alias . '/' . $title, '/'); + if ($alias != $title && $alias != trim($prefix . '/' . $title, '/')) + $alias = trim($alias . '/' . $title, '/'); - return $alias; - } + return $alias; + } - /** - * Метод, предназначенный для контроля уникальности URL - * - */ - function documentAliasCheck() - { - global $AVE_DB, $AVE_Template; + /** + * Метод, предназначенный для контроля уникальности URL + * + */ + function documentAliasCheck() + { + global $AVE_DB, $AVE_Template; - $document_id = (isset($_REQUEST['id']) && is_numeric($_REQUEST['id'])) ? $_REQUEST['id'] : 0; - $document_alias = (isset($_REQUEST['alias'])) ? $_REQUEST['alias'] : ''; + $document_id = (isset($_REQUEST['id']) && is_numeric($_REQUEST['id'])) ? $_REQUEST['id'] : 0; + $document_alias = (isset($_REQUEST['alias'])) ? $_REQUEST['alias'] : ''; - $check = (isset($_REQUEST['check']) && (bool)$_REQUEST['check'] === true) ? true : false; - $alias_id = (isset($_REQUEST['alias_id'])) ? (int)$_REQUEST['alias_id'] : 0; + $check = (isset($_REQUEST['check']) && (bool)$_REQUEST['check'] === true) ? true : false; + $alias_id = (isset($_REQUEST['alias_id'])) ? (int)$_REQUEST['alias_id'] : 0; - $errors = array(); + $errors = array(); - // Если указанный URL пользователем не пустой - if (! empty($document_alias)) - { - // Проверяем, чтобы данный URL соответствовал требованиям - if (preg_match(TRANSLIT_URL ? '/[^\.a-z0-9\/_-]+/' : '/^[^0-9A-Za-zА-Яа-яЁё]+$/u', $document_alias)) + // Если указанный URL пользователем не пустой + if (! empty($document_alias)) { - $errors[] = $AVE_Template->get_config_vars('DOC_URL_ERROR_SYMBOL'); - } + // Проверяем, чтобы данный URL соответствовал требованиям + if (preg_match(TRANSLIT_URL ? '/[^\.a-z0-9\/_-]+/' : '/^[^0-9A-Za-zА-Яа-яЁё]+$/u', $document_alias)) + { + $errors[] = $AVE_Template->get_config_vars('DOC_URL_ERROR_SYMBOL'); + } - // Если URL начинается с "/" - фиксируем ошибку - if ($document_alias[0] == '/') - $errors[] = $AVE_Template->get_config_vars('DOC_URL_ERROR_START'); + // Если URL начинается с "/" - фиксируем ошибку + if ($document_alias[0] == '/') + $errors[] = $AVE_Template->get_config_vars('DOC_URL_ERROR_START'); - // Если суффикс URL заканчивается на "/" и URL заканчивается на "/" - фиксируем ошибку - if (substr(URL_SUFF, 0, 1) == '/' && substr($document_alias, -1) == '/') - $errors[] = $AVE_Template->get_config_vars('DOC_URL_ERROR_END'); + // Если суффикс URL заканчивается на "/" и URL заканчивается на "/" - фиксируем ошибку + if (substr(URL_SUFF, 0, 1) == '/' && substr($document_alias, -1) == '/') + $errors[] = $AVE_Template->get_config_vars('DOC_URL_ERROR_END'); - // Если в URL используются слова apage-XX, artpage-XX,page-XX,print, фиксируем ошибку, где ХХ - число - $matches = preg_grep('/^(apage-\d+|artpage-\d+|page-\d+|print)$/i', explode('/', $document_alias)); + // Если в URL используются слова apage-XX, artpage-XX,page-XX,print, фиксируем ошибку, где ХХ - число + $matches = preg_grep('/^(apage-\d+|artpage-\d+|page-\d+|print)$/i', explode('/', $document_alias)); - if (! empty($matches)) - $errors[] = $AVE_Template->get_config_vars('DOC_URL_ERROR_SEGMENT') . implode(', ', $matches); + if (! empty($matches)) + $errors[] = $AVE_Template->get_config_vars('DOC_URL_ERROR_SEGMENT') . implode(', ', $matches); - $and_docs = (($check === false) ? "AND Id != '" . $document_id . "'" : ''); - //$and_aliace = (($check === true) ? "AND document_id != '" . $document_id . "'" : ''); - $and_alias_id = (isset($alias_id) ? "AND id != '" . $alias_id . "'" : ''); + $and_docs = (($check === false) ? "AND Id != '" . $document_id . "'" : ''); + //$and_aliace = (($check === true) ? "AND document_id != '" . $document_id . "'" : ''); + $and_alias_id = (isset($alias_id) ? "AND id != '" . $alias_id . "'" : ''); - // Выполняем запрос к БД на получение всех URL и проверку на уникальность - if (empty($errors)) - { - $alias_exist = $AVE_DB->Query(" - SELECT 1 - FROM - " . PREFIX . "_documents - WHERE - document_alias = '" . $document_alias . "' - $and_docs - LIMIT 1 - ")->NumRows(); + // Выполняем запрос к БД на получение всех URL и проверку на уникальность + if (empty($errors)) + { + $alias_exist = $AVE_DB->Query(" + SELECT 1 + FROM + " . PREFIX . "_documents + WHERE + document_alias = '" . $document_alias . "' + $and_docs + LIMIT 1 + ")->NumRows(); - if ($alias_exist) - $errors[] = $AVE_Template->get_config_vars('DOC_URL_ERROR_DUPLICATES'); + if ($alias_exist) + $errors[] = $AVE_Template->get_config_vars('DOC_URL_ERROR_DUPLICATES'); - $alias_exist = $AVE_DB->Query(" - SELECT 1 - FROM - " . PREFIX . "_document_alias_history - WHERE - document_alias = '" . $document_alias . "' - $and_alias_id - LIMIT 1 - ")->NumRows(); + $alias_exist = $AVE_DB->Query(" + SELECT 1 + FROM + " . PREFIX . "_document_alias_history + WHERE + document_alias = '" . $document_alias . "' + $and_alias_id + LIMIT 1 + ")->NumRows(); - if ($alias_exist) - $errors[] = $AVE_Template->get_config_vars('DOC_URL_H_ERROR_DUPLICATES'); + if ($alias_exist) + $errors[] = $AVE_Template->get_config_vars('DOC_URL_H_ERROR_DUPLICATES'); + } } - } - else - { // В противном случае, если URL пустой, формируем сообщение об ошибке - $errors[] = $AVE_Template->get_config_vars('DOC_URL_ERROR_EMTY'); + else + { // В противном случае, если URL пустой, формируем сообщение об ошибке + $errors[] = $AVE_Template->get_config_vars('DOC_URL_ERROR_EMTY'); + } + + // Если ошибок не найдено, формируем сообщение об успешной операции + if (empty($errors)) + { + return json_encode(array($AVE_Template->get_config_vars('DOC_URL_CHECK_OK') . implode(',
      ', $errors), 'accept', $check)); } + else + { // В противном случае формируем сообщение с ошибкой + return json_encode(array($AVE_Template->get_config_vars('DOC_URL_CHECK_ER') . implode(',
      ', $errors), 'error')); + } + } - // Если ошибок не найдено, формируем сообщение об успешной операции - if (empty($errors)) + /** + * Метод, предназначенный для + * + */ + function documentAliasHistoryList() { - return json_encode(array($AVE_Template->get_config_vars('DOC_URL_CHECK_OK') . implode(',
      ', $errors), 'accept', $check)); - } - else - { // В противном случае формируем сообщение с ошибкой - return json_encode(array($AVE_Template->get_config_vars('DOC_URL_CHECK_ER') . implode(',
      ', $errors), 'error')); + global $AVE_DB, $AVE_Template; + + $sql = $AVE_DB->Query(" + SELECT + h.id, + h.document_id, + h.document_alias_changed, + COUNT(h.document_id) as count, + d.rubric_id, + d.document_title, + d.document_alias, + r.rubric_title + FROM + " . PREFIX . "_document_alias_history AS h + LEFT JOIN + " . PREFIX . "_documents AS d + ON h.document_id = d.Id + LEFT JOIN + " . PREFIX . "_rubrics AS r + ON d.rubric_id = r.Id + WHERE + h.document_id = d.Id + GROUP BY + h.document_id + ORDER BY + h.document_alias_changed DESC + "); + + $documents = array(); + + while ($row = $sql->FetchAssocArray()) + { + array_push($documents, $row); } - } - /** - * Метод, предназначенный для - * - */ - function documentAliasHistoryList() - { - global $AVE_DB, $AVE_Template; - - $sql = $AVE_DB->Query(" - SELECT - h.id, - h.document_id, - h.document_alias_changed, - COUNT(h.document_id) as count, - d.rubric_id, - d.document_title, - d.document_alias, - r.rubric_title - FROM - " . PREFIX . "_document_alias_history AS h - LEFT JOIN - " . PREFIX . "_documents AS d - ON h.document_id = d.Id - LEFT JOIN - " . PREFIX . "_rubrics AS r - ON d.rubric_id = r.Id - WHERE - h.document_id = d.Id - GROUP BY - h.document_id - ORDER BY - h.document_alias_changed DESC - "); - - $documents = array(); - - while ($row = $sql->FetchAssocArray()) - { - array_push($documents, $row); + $AVE_Template->assign('documents', $documents); + $AVE_Template->assign('content', $AVE_Template->fetch('documents/alias_list.tpl')); } - $AVE_Template->assign('documents', $documents); - $AVE_Template->assign('content', $AVE_Template->fetch('documents/alias_list.tpl')); - } - - /** - * Метод, предназначенный для - * - */ - function documentAliasListDoc($id) - { - global $AVE_DB, $AVE_Template, $AVE_Rubric; - - $document = $AVE_DB->Query(" - SELECT - d.rubric_id, - d.document_title, - d.document_alias, - r.rubric_title - FROM - " . PREFIX . "_documents AS d - LEFT JOIN - " . PREFIX . "_rubrics AS r - ON d.rubric_id = r.Id - WHERE - d.Id = " . $id . " - ")->FetchRow(); - - $sql = $AVE_DB->Query(" - SELECT * - FROM - ".PREFIX."_document_alias_history - WHERE - document_id = '". $id ."' - "); - - $aliases = array(); - - while ($row = $sql->FetchRow()) + /** + * Метод, предназначенный для + * + */ + function documentAliasListDoc($id) { - $row->document_alias_author_name = get_username_by_id($row->document_alias_author); - array_push($aliases, $row); - } + global $AVE_DB, $AVE_Template, $AVE_Rubric; - $AVE_Template->assign('document', $document); - $AVE_Template->assign('aliases', $aliases); + $document = $AVE_DB->Query(" + SELECT + d.rubric_id, + d.document_title, + d.document_alias, + r.rubric_title + FROM + " . PREFIX . "_documents AS d + LEFT JOIN + " . PREFIX . "_rubrics AS r + ON d.rubric_id = r.Id + WHERE + d.Id = " . $id . " + ")->FetchRow(); - switch($_REQUEST['sub']) - { - case 'list': - $AVE_Template->assign('content', $AVE_Template->fetch('documents/alias_doc_list.tpl')); - break; + $sql = $AVE_DB->Query(" + SELECT * + FROM + ".PREFIX."_document_alias_history + WHERE + document_id = '". $id ."' + "); - default: - $AVE_Template->assign('content', $AVE_Template->fetch('documents/alias_doc.tpl')); - break; - } - } + $aliases = array(); - /** - * Метод, предназначенный для - * - */ - function documentAliasNew() - { - global $AVE_DB, $AVE_Template; - - $sql = $AVE_DB->Query(" - INSERT - INTO - " . PREFIX . "_document_alias_history - SET - document_id = '" . (int)$_REQUEST['doc_id'] . "', - document_alias = '" . trim($_REQUEST['alias']) . "', - document_alias_author = '" . (int)UID . "', - document_alias_changed = '" . time() . "' - "); - - if ($sql === false) - { - $message = $AVE_Template->get_config_vars('DOC_ALIASES_REP_ER_T'); - $header = $AVE_Template->get_config_vars('DOC_ALIASES_REP_ER'); - $theme = 'error'; - } - else + while ($row = $sql->FetchRow()) { - $message = $AVE_Template->get_config_vars('DOC_ALIASES_REP_OK_T'); - $header = $AVE_Template->get_config_vars('DOC_ALIASES_REP_OK'); - $theme = 'accept'; + $row->document_alias_author_name = get_username_by_id($row->document_alias_author); + array_push($aliases, $row); } - if (isAjax()) - { - echo json_encode( - array( - 'message' => $message, - 'header' => $header, - 'theme' => $theme - ) - ); - } - else + $AVE_Template->assign('document', $document); + $AVE_Template->assign('aliases', $aliases); + + switch($_REQUEST['sub']) { - header('Location:index.php?do=docs&action=aliases_doc&cp=' . SESSION); + case 'list': + $AVE_Template->assign('content', $AVE_Template->fetch('documents/alias_doc_list.tpl')); + break; + + default: + $AVE_Template->assign('content', $AVE_Template->fetch('documents/alias_doc.tpl')); + break; } - exit; - } + } - /** - * Метод, предназначенный для - * - */ - function documentAliasEdit() - { - global $AVE_DB, $AVE_Template; + /** + * Метод, предназначенный для + * + */ + function documentAliasNew() + { + global $AVE_DB, $AVE_Template; $sql = $AVE_DB->Query(" - UPDATE + INSERT + INTO " . PREFIX . "_document_alias_history SET - document_alias = '" . $_REQUEST['alias'] . "' - WHERE - id = '" . $_REQUEST['id'] . "' + document_id = '" . (int)$_REQUEST['doc_id'] . "', + document_alias = '" . trim($_REQUEST['alias']) . "', + document_alias_author = '" . (int)UID . "', + document_alias_changed = '" . time() . "' "); if ($sql === false) { - $message = $AVE_Template->get_config_vars('DOC_ALIASES_REP_ER_T_E'); + $message = $AVE_Template->get_config_vars('DOC_ALIASES_REP_ER_T'); $header = $AVE_Template->get_config_vars('DOC_ALIASES_REP_ER'); $theme = 'error'; } else { - $message = $AVE_Template->get_config_vars('DOC_ALIASES_REP_OK_T_E'); + $message = $AVE_Template->get_config_vars('DOC_ALIASES_REP_OK_T'); $header = $AVE_Template->get_config_vars('DOC_ALIASES_REP_OK'); $theme = 'accept'; } @@ -4237,55 +4201,102 @@ class AVE_Document { header('Location:index.php?do=docs&action=aliases_doc&cp=' . SESSION); } + exit; + } - exit; - } + /** + * Метод, предназначенный для + * + */ + function documentAliasEdit() + { + global $AVE_DB, $AVE_Template; - /** - * Метод, предназначенный для - * - */ - function documentAliasSave() - { - global $AVE_DB, $AVE_Template; + $sql = $AVE_DB->Query(" + UPDATE + " . PREFIX . "_document_alias_history + SET + document_alias = '" . $_REQUEST['alias'] . "' + WHERE + id = '" . $_REQUEST['id'] . "' + "); + + if ($sql === false) + { + $message = $AVE_Template->get_config_vars('DOC_ALIASES_REP_ER_T_E'); + $header = $AVE_Template->get_config_vars('DOC_ALIASES_REP_ER'); + $theme = 'error'; + } + else + { + $message = $AVE_Template->get_config_vars('DOC_ALIASES_REP_OK_T_E'); + $header = $AVE_Template->get_config_vars('DOC_ALIASES_REP_OK'); + $theme = 'accept'; + } + + if (isAjax()) + { + echo json_encode( + array( + 'message' => $message, + 'header' => $header, + 'theme' => $theme + ) + ); + } + else + { + header('Location:index.php?do=docs&action=aliases_doc&cp=' . SESSION); + } + + exit; + } + + /** + * Метод, предназначенный для + * + */ + function documentAliasSave() + { + global $AVE_DB, $AVE_Template; + + if (isset($_REQUEST['alias_del'])) + { + foreach ($_REQUEST['alias_del'] as $id => $val) + { + $AVE_DB->Query(" + DELETE + FROM + " . PREFIX . "_document_alias_history + WHERE + id = '" . $id . "' + "); + } + } + + exit; + } - if (isset($_REQUEST['alias_del'])) + /** + * Метод, предназначенный для + * + */ + function documentAliasDel() { - foreach ($_REQUEST['alias_del'] as $id => $val) + global $AVE_DB, $AVE_Template; + + if (isset($_REQUEST['alias_id'])) { $AVE_DB->Query(" DELETE FROM " . PREFIX . "_document_alias_history WHERE - id = '" . $id . "' + id = '" . $_REQUEST['alias_id'] . "' "); } - } - exit; - } - - /** - * Метод, предназначенный для - * - */ - function documentAliasDel() - { - global $AVE_DB, $AVE_Template; - - if (isset($_REQUEST['alias_id'])) - { - $AVE_DB->Query(" - DELETE - FROM - " . PREFIX . "_document_alias_history - WHERE - id = '" . $_REQUEST['alias_id'] . "' - "); + exit; } - - exit; } -} -?> +?> \ No newline at end of file diff --git a/class/class.modules.php b/class/class.modules.php index 026bbf2..44bf724 100644 --- a/class/class.modules.php +++ b/class/class.modules.php @@ -222,6 +222,7 @@ // согласно статусу, либо все модули, если статус не указан $sql = " SELECT + # MODULES * FROM " . PREFIX . "_module @@ -230,7 +231,7 @@ ModuleName ASC "; - $query = $AVE_DB->Query($sql, SYSTEM_CACHE_LIFETIME, 'modules'); + $query = $AVE_DB->Query($sql, -1, 'modules', true, '.modules'); while ($row = $query->FetchRow()) $modules[$row->ModuleSysName] = $row; diff --git a/class/class.navigation.php b/class/class.navigation.php index 0772d16..9dfe5b1 100644 --- a/class/class.navigation.php +++ b/class/class.navigation.php @@ -243,7 +243,6 @@ //-- Стираем кеш навигации $this->clearCache($navigation_id, $_REQUEST['alias']); - $this->clearCacheId($navigation_id, $_REQUEST['alias']); $this->clearCacheNav($navigation_id, $_REQUEST['alias']); if ($sql === false) @@ -1267,47 +1266,24 @@ function clearCache($id, $alias = '') { - if (file_exists(BASE_DIR . '/tmp/cache/sql/nav/template-' . $id . '.cache')) - unlink(BASE_DIR . '/tmp/cache/sql/nav/template-' . $id . '.cache'); + if (file_exists(BASE_DIR . '/tmp/cache/sql/navigations/' . $id . '/template.cache')) + unlink(BASE_DIR . '/tmp/cache/sql/navigations/' . $id . '/template.cache'); - if (file_exists(BASE_DIR . '/tmp/cache/sql/nav/template-' . $alias . '.cache')) - unlink(BASE_DIR . '/tmp/cache/sql/nav/template-' . $alias . '.cache'); + if (file_exists(BASE_DIR . '/tmp/cache/sql/navigations/' . $alias . '/template.cache')) + unlink(BASE_DIR . '/tmp/cache/sql/navigations/' . $alias . '/template.cache'); - if (file_exists(BASE_DIR . '/tmp/cache/sql/nav/items-' . $id . '.cache')) - unlink(BASE_DIR . '/tmp/cache/sql/nav/items-' . $id . '.cache'); + if (file_exists(BASE_DIR . '/tmp/cache/sql/navigations/' . $id . '/items.cache')) + unlink(BASE_DIR . '/tmp/cache/sql/navigations/' . $id . '/items.cache'); - if (file_exists(BASE_DIR . '/tmp/cache/sql/nav/items-' . $alias . '.cache')) - unlink(BASE_DIR . '/tmp/cache/sql/nav/items-' . $alias . '.cache'); - } - - - function clearCacheId($id, $alias = '') - { - $dir_id = BASE_DIR . '/tmp/cache/sql/nav_' . $id; - $dir_alias = BASE_DIR . '/tmp/cache/sql/nav_' . $alias; - - if (file_exists($dir_id)) - { - foreach (glob($dir_id . '/*') as $file) - { - unlink($file); - } - } - - if (file_exists($dir_alias)) - { - foreach (glob($dir_alias . '/*') as $file) - { - unlink($file); - } - } + if (file_exists(BASE_DIR . '/tmp/cache/sql/navigations/' . $alias . '/items.cache')) + unlink(BASE_DIR . '/tmp/cache/sql/navigations/' . $alias . '/items.cache'); } function clearCacheNav($id, $alias) { - $cache_id = str_replace('nav_', '', $id); - $cache_id = 'nav/' . substr($cache_id, 0, 3); + $cache_id = explode('_', $id); + $cache_id = 'navigations/' . $cache_id[1]; $cache_dir = BASE_DIR . '/tmp/cache/sql/' . (trim($cache_id) > '' ? trim($cache_id) . '/' @@ -1315,9 +1291,8 @@ rrmdir($cache_dir); - - $cache_id = str_replace('nav_', '', $alias); - $cache_id = 'nav/' . substr($cache_id, 0, 3); + $cache_id = explode('_', $alias); + $cache_id = 'navigations/' . $cache_id[1]; $cache_dir = BASE_DIR . '/tmp/cache/sql/' . (trim($cache_id) > '' ? trim($cache_id) . '/' diff --git a/class/class.paginations.php b/class/class.paginations.php index 285bf58..9c0dc46 100644 --- a/class/class.paginations.php +++ b/class/class.paginations.php @@ -110,12 +110,12 @@ } } - foreach($pages as $page) + foreach ($pages as $page) { if ($page >= 1 && $page <= $total_pages) { // Текущий номер страницы (активная страница) - if ($curent_page == $page) + if ($curent_page == $page && $curent_page != 1) { $search = array('[link]', '[page]', '[name]'); $replace = array($template_label, $curent_page, $curent_page); @@ -222,13 +222,28 @@ $containers = $AVE_DB->Query(" SELECT + # PAGINATION = $id * FROM " . PREFIX . "_paginations WHERE id = '" . $id . "' - ")->FetchAssocArray(); + ", -1, 'paginations', true, '.paginations')->FetchAssocArray(); return $containers; } + + + /** + * Очистка кеша постраничной навигации + * + * @param void + * @return + */ + public static function clearCache() + { + global $AVE_DB; + + $AVE_DB->clearCache('paginations'); + } } \ No newline at end of file diff --git a/class/class.porter.php b/class/class.porter.php new file mode 100644 index 0000000..76e88b1 --- /dev/null +++ b/class/class.porter.php @@ -0,0 +1,109 @@ +Stem_Caching && isset($this->Stem_Cache[$word])) + { + return $this->Stem_Cache[$word]; + } + + $stem = $word; + + do + { + if (! preg_match($this->RVRE, $word, $p)) + break; + + $start = $p[1]; + $RV = $p[2]; + + if (!$RV) + break; + + # Step 1 + if (! $this->s($RV, $this->PERFECTIVEGROUND, '')) + { + $this->s($RV, $this->REFLEXIVE, ''); + + if ($this->s($RV, $this->ADJECTIVE, '')) + { + $this->s($RV, $this->PARTICIPLE, ''); + } + else + { + if (! $this->s($RV, $this->VERB, '')) + $this->s($RV, $this->NOUN, ''); + } + } + + # Step 2 + $this->s($RV, '/и$/', ''); + + # Step 3 + if ($this->m($RV, $this->DERIVATIONAL)) + $this->s($RV, '/ость?$/', ''); + + # Step 4 + if (!$this->s($RV, '/ь$/', '')) + { + $this->s($RV, '/ейше?/', ''); + $this->s($RV, '/нн$/', 'н'); + } + + $stem = $start.$RV; + } + while(false); + + if ($this->Stem_Caching) + $this->Stem_Cache[$word] = $stem; + + return $stem; + } + + function stem_caching($parm_ref) + { + $caching_level = @$parm_ref['-level']; + if ($caching_level) { + if (!$this->m($caching_level, '/^[012]$/')) { + die(__CLASS__ . "::stem_caching() - Legal values are '0','1' or '2'. '$caching_level' is not a legal value"); + } + $this->Stem_Caching = $caching_level; + } + return $this->Stem_Caching; + } + + function clear_stem_cache() + { + $this->Stem_Cache = array(); + } + } +?> \ No newline at end of file diff --git a/class/class.request.php b/class/class.request.php index d396930..7d8fc41 100644 --- a/class/class.request.php +++ b/class/class.request.php @@ -13,10 +13,6 @@ class AVE_Request { - /** - * Свойстав класса - */ - /** * Количество Запросов на странице * @@ -24,9 +20,6 @@ */ public $_limit = 25; - /** - * Внутренние методы - */ /** * Метод, предназначенный для получения и вывода списка Запросов @@ -64,8 +57,10 @@ $items = array(); $sql = $AVE_DB->Query(" - SELECT * - FROM " . PREFIX . "_request + SELECT + * + FROM + " . PREFIX . "_request ORDER BY Id ASC " . $limit . " "); @@ -93,15 +88,17 @@ static $requests = array(); - if (!isset($requests[$request_id])) + if (! isset($requests[$request_id])) { $requests[$request_id] = $AVE_DB->Query(" SELECT rubric_id, request_title, request_description - FROM " . PREFIX . "_request - WHERE Id = '" . $request_id . "' + FROM + " . PREFIX . "_request + WHERE + Id = '" . $request_id . "' LIMIT 1 ")->FetchRow(); } @@ -267,6 +264,7 @@ request_show_pagination = '" . (isset($_REQUEST['request_show_pagination']) ? (int)$_REQUEST['request_show_pagination'] : 0) . "', request_pagination = '" . (isset($_REQUEST['request_pagination']) ? (int)$_REQUEST['request_pagination'] : 1) . "', request_use_query = '" . (isset($_REQUEST['request_use_query']) ? (int)$_REQUEST['request_use_query'] : 0) . "', + request_count_items = '" . (isset($_REQUEST['request_count_items']) ? (int)$_REQUEST['request_count_items'] : 0) . "', request_hide_current = '" . (int)$_REQUEST['request_hide_current'] . "', request_only_owner = '" . (int)$_REQUEST['request_only_owner'] . "', request_cache_lifetime = '" . (int)$_REQUEST['request_cache_lifetime'] . "', @@ -293,12 +291,12 @@ else { // В противном случае выполняем переход к списку запросов - if (!$_REQUEST['next_edit']) { + if (!$_REQUEST['next_edit']) header('Location:index.php?do=request&cp=' . SESSION); - } else { + else header('Location:index.php?do=request&action=edit&Id=' . $iid . '&rubric_id='.$_REQUEST['rubric_id'].'&cp=' . SESSION); - } } + exit; } } @@ -321,8 +319,10 @@ // Выполняем запрос к БД и получаем всю информацию о запросе $sql = $AVE_DB->Query(" SELECT * - FROM " . PREFIX . "_request - WHERE Id = '" . $request_id . "' + FROM + " . PREFIX . "_request + WHERE + Id = '" . $request_id . "' "); if ($sql->_result->num_rows == 0) @@ -345,9 +345,7 @@ $paginations = array(); while ($pages = $sql->FetchRow()) - { array_push($paginations, $pages); - } // Передаем данные в шаблон и отображаем страницу с редактированием запроса $AVE_Template->assign('row', $row); @@ -363,11 +361,14 @@ $sql = $AVE_DB->Query(" SELECT * - FROM " . PREFIX . "_request - WHERE Id = '" . $request_id . "' + FROM + " . PREFIX . "_request + WHERE + Id = '" . $request_id . "' "); - if($sql->_result->num_rows == 0) { + if ($sql->_result->num_rows == 0) + { header('Location:index.php?do=request&cp=' . SESSION); exit; } @@ -387,6 +388,7 @@ $row->request_show_pagination = (isset($_REQUEST['request_show_pagination']) ? $_REQUEST['request_show_pagination'] : 0); $row->request_pagination = (isset($_REQUEST['request_pagination']) ? (int)($_REQUEST['request_pagination']) : 1); $row->request_use_query = (isset($_REQUEST['request_use_query']) ? $_REQUEST['request_use_query'] : 0); + $row->request_count_items = (isset($_REQUEST['request_count_items']) ? $_REQUEST['request_count_items'] : 0); $row->request_only_owner = (isset($_REQUEST['request_only_owner']) ? (int)($_REQUEST['request_only_owner']) : 0); $row->request_cache_lifetime = (isset($_REQUEST['request_cache_lifetime']) ? (int)($_REQUEST['request_cache_lifetime']) : 0); $row->request_lang = (isset($_REQUEST['request_lang']) ? (int)$_REQUEST['request_lang'] : 0); @@ -430,7 +432,7 @@ if ($save === false) { - if(isAjax()) + if (isAjax()) { $header = $AVE_Template->get_config_vars('REQUEST_ERROR'); echo json_encode(array('message' => $message, 'header' => $header, 'theme' => 'error')); @@ -461,6 +463,7 @@ request_show_pagination = '" . (isset($_REQUEST['request_show_pagination']) ? (int)$_REQUEST['request_show_pagination'] : 0) . "', request_pagination = '" . (isset($_REQUEST['request_pagination']) ? (int)$_REQUEST['request_pagination'] : 1) . "', request_use_query = '" . (isset($_REQUEST['request_use_query']) ? (int)$_REQUEST['request_use_query'] : 0) . "', + request_count_items = '" . (isset($_REQUEST['request_count_items']) ? (int)$_REQUEST['request_count_items'] : 0) . "', request_hide_current = '" . @(int)$_REQUEST['request_hide_current'] . "', request_only_owner = '" . @(int)$_REQUEST['request_only_owner'] . "', request_cache_lifetime = '" . (int)($_REQUEST['request_cache_lifetime']>'' ? $_REQUEST['request_cache_lifetime'] : '-1') . "', @@ -469,19 +472,14 @@ request_show_statistic = '" . (isset($_REQUEST['request_show_statistic']) ? (int)$_REQUEST['request_show_statistic'] : 0). "', request_external = '" . (isset($_REQUEST['request_external']) ? (int)$_REQUEST['request_external'] : 0). "', request_ajax = '" . (isset($_REQUEST['request_ajax']) ? (int)$_REQUEST['request_ajax'] : 0). "', - request_show_sql = '" . (isset($_REQUEST['request_show_sql']) ? (int)$_REQUEST['request_show_sql'] : 0). "' + request_show_sql = '" . (isset($_REQUEST['request_show_sql']) ? (int)$_REQUEST['request_show_sql'] : 0). "', + request_changed = '" . time() . "', + request_changed_elements = '" . time() . "' WHERE Id = '" . $request_id . "' "); - $sql = $AVE_DB->Query("SELECT Id FROM " . PREFIX . "_documents WHERE rubric_id = ".$_REQUEST['rubric_id']); - - $AVE_DB->clear_request($request_id); - - while ($row = $sql->FetchRow()) - { - $AVE_DB->clearcacherequest('doc_' . $row->Id); - } + $AVE_DB->clearRequest($request_id); // Сохраняем системное сообщение в журнал reportLog($AVE_Template->get_config_vars('REQUEST_SAVE_CHA_SUC') . ' (' . stripslashes(htmlspecialchars($_REQUEST['request_title'], ENT_QUOTES)) . ') (Id:' . $request_id . ')'); @@ -491,7 +489,9 @@ { header('Location:index.php?do=request&cp=' . SESSION); exit; - } else { + } + else + { $message = $AVE_Template->get_config_vars('REQUEST_TEMPLATE_SAVED'); $header = $AVE_Template->get_config_vars('REQUEST_SUCCESS'); $theme = 'accept'; @@ -515,11 +515,14 @@ // Выполняем запрос к БД на получение информации о копиреумом запросе $sql = $AVE_DB->Query(" SELECT * - FROM " . PREFIX . "_request - WHERE Id = '" . $request_id . "' + FROM + " . PREFIX . "_request + WHERE + Id = '" . $request_id . "' "); - if($sql->_result->num_rows == 0) { + if ($sql->_result->num_rows == 0) + { header('Location:index.php?do=request&cp=' . SESSION); exit; } @@ -543,6 +546,7 @@ request_asc_desc = '" . $row->request_asc_desc . "', request_show_pagination = '" . $row->request_show_pagination . "', request_use_query = '" . $row->request_use_query . "', + request_count_items = '" . $row->request_count_items . "', request_hide_current = '" . $row->request_hide_current . "', request_lang = '" . $row->request_lang . "', request_cache_elements = '" . (isset($row->request_cache_elements) ? $row->request_cache_elements : 0) . "' @@ -557,8 +561,10 @@ // Выполняем запрос к БД и получаем все условия запроса для копируемого запроса $sql = $AVE_DB->Query(" SELECT * - FROM " . PREFIX . "_request_conditions - WHERE request_id = '" . $request_id . "' + FROM + " . PREFIX . "_request_conditions + WHERE + request_id = '" . $request_id . "' "); // Обрабатываем полученные данные и @@ -566,7 +572,8 @@ { // Выполняем запрос к БД на добавление условий для нового, скопированного запроса $AVE_DB->Query(" - INSERT " . PREFIX . "_request_conditions + INSERT + " . PREFIX . "_request_conditions SET request_id = '" . $iid . "', condition_compare = '" . $row_cond->condition_compare . "', @@ -594,18 +601,22 @@ // Выполняем запрос к БД на удаление общей информации о запросе $AVE_DB->Query(" - DELETE - FROM " . PREFIX . "_request - WHERE Id = '" . $request_id . "' + DELETE FROM + " . PREFIX . "_request + WHERE + Id = '" . $request_id . "' "); // Выполняем запрос к БД на удаление условий запроса $AVE_DB->Query(" - DELETE - FROM " . PREFIX . "_request_conditions - WHERE request_id = '" . $request_id . "' + DELETE FROM + " . PREFIX . "_request_conditions + WHERE + request_id = '" . $request_id . "' "); + $AVE_DB->clearRequest($request_id); + // Сохраняем системное сообщение в журнал reportLog($AVE_Template->get_config_vars('REQUEST_DELETE_SUC') . ' (' . stripslashes(htmlspecialchars($request_name, ENT_QUOTES)) . ') ( Id:' . $request_id . ' )'); @@ -633,8 +644,10 @@ // Выполняем запрос к БД и получаем список полей у той рубрики, к которой относится данный запрос $sql = $AVE_DB->Query(" SELECT * - FROM " . PREFIX . "_rubric_fields - WHERE rubric_id = '" . $_REQUEST['rubric_id'] . "' + FROM + " . PREFIX . "_rubric_fields + WHERE + rubric_id = '" . $_REQUEST['rubric_id'] . "' ORDER BY rubric_field_position ASC "); @@ -649,27 +662,27 @@ // Выполняем запрос к БД и получаем условия запроса $sql = $AVE_DB->Query(" SELECT * - FROM " . PREFIX . "_request_conditions - WHERE request_id = '" . $request_id . "' + FROM + " . PREFIX . "_request_conditions + WHERE + request_id = '" . $request_id . "' ORDER BY condition_position ASC "); // Обрабатываем полученные данные и формируем массив while ($row = $sql->FetchRow()) - { array_push($conditions, $row); - } // Передаем данные в шаблон и отображаем страницу с редактированием условий $AVE_Template->assign('request_title', $this->get_request_by_id($request_id)->request_title); $AVE_Template->assign('fields', $fields); $AVE_Template->assign('conditions', $conditions); - if (isAjax() && (isset($_REQUEST['ajax']) && $_REQUEST['ajax'] == 1)){ + if (isAjax() && (isset($_REQUEST['ajax']) && $_REQUEST['ajax'] == 1)) $AVE_Template->assign('content', $AVE_Template->fetch('request/cond_list.tpl')); - } else { + else $AVE_Template->assign('content', $AVE_Template->fetch('request/conditions.tpl')); - } + break; case 'sort': @@ -677,7 +690,8 @@ foreach ($_REQUEST['sort'] as $position => $cond_id) { $AVE_DB->Query(" - UPDATE " . PREFIX . "_request_conditions + UPDATE + " . PREFIX . "_request_conditions SET condition_position = '" . (int)$position . "' WHERE @@ -685,7 +699,8 @@ "); } - if (isAjax()){ + if (isAjax()) + { $message = $AVE_Template->get_config_vars('REQUEST_SORTED'); $header = $AVE_Template->get_config_vars('REQUEST_SUCCESS'); $theme = 'accept'; @@ -756,9 +771,10 @@ { // Выполняем запрос к БД на удаление условий $AVE_DB->Query(" - DELETE - FROM " . PREFIX . "_request_conditions - WHERE Id = '" . $condition_id . "' + DELETE FROM + " . PREFIX . "_request_conditions + WHERE + Id = '" . $condition_id . "' "); } @@ -771,14 +787,29 @@ // require(BASE_DIR . '/functions/func.parserequest.php'); request_get_condition_sql_string($request_id, true); - if (!isAjax() && $_REQUEST['ajax'] != '1'){ + $AVE_DB->Query(" + UPDATE + " . PREFIX . "_requests + SET + request_changed = '" . time() . "' + WHERE + Id = '" . $request_id . "' + "); + + $AVE_DB->clearRequest($request_id); + + if (!isAjax() && $_REQUEST['ajax'] != '1') + { // Выполняем обновление страницы header('Location:index.php?do=request&action=conditions&rubric_id=' . $_REQUEST['rubric_id'] . '&Id=' . $request_id . '&cp=' . SESSION . ($_REQUEST['pop'] ? '&pop=1' : '')); exit; - } else { + } + else + { echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); exit; } + break; // Если пользователь добавил новое условие @@ -787,7 +818,8 @@ { // Выполняем запрос к БД на добавление нового условия $sql = $AVE_DB->Query(" - INSERT " . PREFIX . "_request_conditions + INSERT + " . PREFIX . "_request_conditions SET request_id = '" . $request_id . "', condition_compare = '" . $_POST['new_operator'] . "', @@ -795,16 +827,22 @@ condition_value = '" . $_POST['new_value'] . "', condition_join = '" . $_POST['oper_new'] . "' "); - if ($sql->_result === false) { + + if ($sql->_result === false) + { $message = $AVE_Template->get_config_vars('REQUEST_COND_NEW_ERR'); $header = $AVE_Template->get_config_vars('REQUEST_ERROR'); $theme = 'error'; - } else { + } + else + { // Сохраняем системное сообщение в журнал reportLog('' . $AVE_Template->get_config_vars('REQUEST_COND_ADD_SUC') . ' (' . stripslashes(htmlspecialchars($this->get_request_by_id($request_id)->request_title, ENT_QUOTES)) . ') - ( Id: '.$request_id.' )'); } - } else { + } + else + { $message = $AVE_Template->get_config_vars('REQUEST_COND_VALUE_ERR'); $header = $AVE_Template->get_config_vars('REQUEST_ERROR'); $theme = 'error'; @@ -815,6 +853,17 @@ // require(BASE_DIR . '/functions/func.parserequest.php'); request_get_condition_sql_string($request_id, true); + $AVE_DB->Query(" + UPDATE + " . PREFIX . "_requests + SET + request_changed = '" . time() . "' + WHERE + Id = '" . $request_id . "' + "); + + $AVE_DB->clearRequest($request_id); + if (! isAjax()) { header('Location:index.php?do=request&action=conditions&rubric_id=' . $_REQUEST['rubric_id'] . '&Id=' . $request_id . '&cp=' . SESSION); @@ -828,6 +877,7 @@ $header = $AVE_Template->get_config_vars('REQUEST_SUCCESS'); $theme = 'accept'; } + echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); exit; } @@ -835,6 +885,7 @@ } } + function conditionFieldChange($field_id, $cond_id) { global $AVE_DB, $AVE_Template; @@ -845,12 +896,14 @@ $AVE_Template->assign('content', $AVE_Template->fetch('request/change.tpl')); } + function conditionFieldChangeSave($field_id, $cond_id) { global $AVE_DB, $AVE_Template; $sql = $AVE_DB->Query(" - UPDATE " . PREFIX . "_request_conditions + UPDATE + " . PREFIX . "_request_conditions SET condition_field_id = '" . $field_id . "' WHERE @@ -859,6 +912,26 @@ request_get_condition_sql_string((int)$_REQUEST['req_id'], true); + $request_id = $AVE_DB->Query(" + SELECT + request_id + FROM + " . PREFIX . "_request_conditions + WHERE + Id = '" . $cond_id . "' + ")->GetCell(); + + $AVE_DB->Query(" + UPDATE + " . PREFIX . "_requests + SET + request_changed = '" . time() . "' + WHERE + Id = '" . $request_id . "' + "); + + $AVE_DB->clearRequest($request_id); + // Передаем данные в шаблон и отображаем страницу с редактированием условий $AVE_Template->assign('field_id', $field_id); $AVE_Template->assign('cond_id', $cond_id); diff --git a/class/class.rubs.php b/class/class.rubs.php index f949b42..04c7cf3 100755 --- a/class/class.rubs.php +++ b/class/class.rubs.php @@ -89,9 +89,7 @@ ); while ($row = $sql->FetchRow()) - { array_push($rubrics, $row); - } $AVE_Template->assign('rubrics', $rubrics); } @@ -121,14 +119,16 @@ { $name_exist = $AVE_DB->Query(" SELECT 1 - FROM " . PREFIX . "_rubrics - WHERE rubric_title = '" . $_POST['rubric_title'] . "' + FROM + " . PREFIX . "_rubrics + WHERE + rubric_title = '" . $_POST['rubric_title'] . "' LIMIT 1 ")->NumRows(); if ($name_exist) array_push($errors, $AVE_Template->get_config_vars('RUBRIK_NAME_EXIST')); - if (!empty($_POST['rubric_alias'])) + if (! empty($_POST['rubric_alias'])) { if (preg_match(TRANSLIT_URL ? '/[^\%HYa-z0-9\/_-]+/' : '/[^\%HYa-zа-яА-Яёїєі0-9\/_-]+/u', $_POST['rubric_alias'])) { @@ -138,8 +138,10 @@ { $prefix_exist = $AVE_DB->Query(" SELECT 1 - FROM " . PREFIX . "_rubrics - WHERE rubric_alias = '" . $_POST['rubric_alias'] . "' + FROM + " . PREFIX . "_rubrics + WHERE + rubric_alias = '" . $_POST['rubric_alias'] . "' LIMIT 1 ")->NumRows(); @@ -156,19 +158,24 @@ else { $position = (int)$AVE_DB->Query(" - SELECT MAX(rubric_position) - FROM " . PREFIX . "_rubrics + SELECT + MAX(rubric_position) + FROM + " . PREFIX . "_rubrics ")->GetCell() + 1; $AVE_DB->Query(" - INSERT " . PREFIX . "_rubrics + INSERT + " . PREFIX . "_rubrics SET rubric_title = '" . $_POST['rubric_title'] . "', rubric_alias = '" . $_POST['rubric_alias'] . "', rubric_template_id = '" . intval($_POST['rubric_template_id']) . "', rubric_author_id = '" . $_SESSION['user_id'] . "', rubric_created = '" . time() . "', - rubric_position = '" . $position . "' + rubric_position = '" . $position . "', + rubric_changed = '" . time() . "', + rubric_changed_fields = '" . time() . "' "); $iid = $AVE_DB->InsertId(); @@ -188,7 +195,8 @@ while ($row = $sql_user->FetchRow()) { $AVE_DB->Query(" - INSERT " . PREFIX . "_rubric_permissions + INSERT + " . PREFIX . "_rubric_permissions SET rubric_id = '" . $iid . "', user_group_id = '" . $row->user_group . "', @@ -220,14 +228,15 @@ { foreach ($_POST['rubric_title'] as $rubric_id => $rubric_title) { - if (!empty($rubric_title)) + if (! empty($rubric_title)) { $set_rubric_title = ''; $set_rubric_alias = ''; $name_exist = $AVE_DB->Query(" SELECT 1 - FROM " . PREFIX . "_rubrics + FROM + " . PREFIX . "_rubrics WHERE rubric_title = '" . $rubric_title . "' AND @@ -243,11 +252,13 @@ if (isset($_POST['rubric_alias'][$rubric_id]) && $_POST['rubric_alias'][$rubric_id] != '') { $pattern = TRANSLIT_URL ? '/[^\%HYa-z0-9\/_-]+/' : '/[^\%HYa-zа-яА-Яёїєі0-9\/_-]+/u'; - if (!(preg_match($pattern, $_POST['rubric_alias'][$rubric_id]))) + + if (! (preg_match($pattern, $_POST['rubric_alias'][$rubric_id]))) { $prefix_exist = $AVE_DB->Query(" SELECT 1 - FROM " . PREFIX . "_rubrics + FROM + " . PREFIX . "_rubrics WHERE rubric_alias = '" . $_POST['rubric_alias'][$rubric_id] . "' AND @@ -255,7 +266,7 @@ LIMIT 1 ")->NumRows(); - if (!$prefix_exist) + if (! $prefix_exist) { $set_rubric_alias = "rubric_alias = '" . trim(preg_replace($pattern, '', $_POST['rubric_alias'][$rubric_id]), '/') . "',"; } @@ -267,33 +278,42 @@ } $AVE_DB->Query(" - UPDATE " . PREFIX . "_rubrics + UPDATE + " . PREFIX . "_rubrics SET " . $set_rubric_title . " " . $set_rubric_alias . " rubric_meta_gen = '" . (isset($_POST['rubric_meta_gen'][$rubric_id]) ? $_POST['rubric_meta_gen'][$rubric_id] : '0') . "', rubric_alias_history = '" . (isset($_POST['rubric_alias_history'][$rubric_id]) ? $_POST['rubric_alias_history'][$rubric_id] : '0') . "', rubric_template_id = '" . (int)$_POST['rubric_template_id'][$rubric_id] . "', - rubric_docs_active = '" . (isset($_POST['rubric_docs_active'][$rubric_id]) ? $_POST['rubric_docs_active'][$rubric_id] : '0') . "' + rubric_docs_active = '" . (isset($_POST['rubric_docs_active'][$rubric_id]) ? $_POST['rubric_docs_active'][$rubric_id] : '0') . "', + rubric_changed = '".time()."', + rubric_changed_fields = '".time()."' WHERE Id = '" . $rubric_id . "' "); } } + $AVE_DB->clearCache('rub_' . $rubric_id); + $message = $AVE_Template->get_config_vars('RUBRIK_REP_QUICKSAVE_T'); $header = $AVE_Template->get_config_vars('RUBRIK_REP_QUICKSAVE_H'); $theme = 'accept'; reportLog($AVE_Template->get_config_vars('RUBRIK_REPORT_QUICKSAVE')); - if (isset($_REQUEST['ajax']) && $_REQUEST['ajax'] = 'run') { + if (isset($_REQUEST['ajax']) && $_REQUEST['ajax'] = 'run') + { echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); - exit; - } else { + } + else + { $page = !empty($_REQUEST['page']) ? '&page=' . $_REQUEST['page'] : '' ; header('Location:index.php?do=rubs' . $page . '&cp=' . SESSION); } + + exit; } } @@ -318,15 +338,18 @@ { $name_exist = $AVE_DB->Query(" SELECT 1 - FROM " . PREFIX . "_rubrics - WHERE rubric_title = '" . $_POST['rubric_title'] . "' + FROM + " . PREFIX . "_rubrics + WHERE + rubric_title = '" . $_POST['rubric_title'] . "' LIMIT 1 ")->NumRows(); - if ($name_exist) array_push($errors, $AVE_Template->get_config_vars('RUBRIK_NAME_EXIST')); + if ($name_exist) + array_push($errors, $AVE_Template->get_config_vars('RUBRIK_NAME_EXIST')); } - if (!empty($_POST['rubric_alias'])) + if (! empty($_POST['rubric_alias'])) { if (preg_match(TRANSLIT_URL ? '/[^\%HYa-z0-9\/-]+/' : '/[^\%HYa-zа-яёїєі0-9\/_-]+/', $_POST['rubric_alias'])) { @@ -336,56 +359,70 @@ { $prefix_exist = $AVE_DB->Query(" SELECT 1 - FROM " . PREFIX . "_rubrics - WHERE rubric_alias = '" . $_POST['rubric_alias'] . "' + FROM + " . PREFIX . "_rubrics + WHERE + rubric_alias = '" . $_POST['rubric_alias'] . "' LIMIT 1 ")->NumRows(); - if ($prefix_exist) array_push($errors, $AVE_Template->get_config_vars('RUBRIK_PREFIX_EXIST')); + if ($prefix_exist) + array_push($errors, $AVE_Template->get_config_vars('RUBRIK_PREFIX_EXIST')); } } $row = $AVE_DB->Query(" SELECT * - FROM " . PREFIX . "_rubrics - WHERE Id = '" . $rubric_id . "' + FROM + " . PREFIX . "_rubrics + WHERE + Id = '" . $rubric_id . "' ")->FetchRow(); - if (!$row) array_push($errors, $AVE_Template->get_config_vars('RUBRIK_NO_RUBRIK')); + if (! $row) + array_push($errors, $AVE_Template->get_config_vars('RUBRIK_NO_RUBRIK')); - if (!empty($errors)) + if (! empty($errors)) { $AVE_Template->assign('errors', $errors); } else { $AVE_DB->Query(" - INSERT " . PREFIX . "_rubrics + INSERT + " . PREFIX . "_rubrics SET - rubric_title = '" . $_POST['rubric_title'] . "', - rubric_alias = '" . $_POST['rubric_alias'] . "', - rubric_template = '" . addslashes($row->rubric_template) . "', - rubric_template_id = '" . addslashes($row->rubric_template_id) . "', - rubric_author_id = '" . (int)$_SESSION['user_id'] . "', - rubric_created = '" . time() . "', - rubric_teaser_template = '" . addslashes($row->rubric_teaser_template) . "', - rubric_header_template = '" . addslashes($row->rubric_header_template) . "', - rubric_footer_template = '" . addslashes($row->rubric_footer_template) . "', - rubric_admin_teaser_template = '" . addslashes($row->rubric_admin_teaser_template) . "' + rubric_title = '" . $_POST['rubric_title'] . "', + rubric_alias = '" . $_POST['rubric_alias'] . "', + rubric_template = '" . addslashes($row->rubric_template) . "', + rubric_template_id = '" . addslashes($row->rubric_template_id) . "', + rubric_author_id = '" . (int)$_SESSION['user_id'] . "', + rubric_created = '" . time() . "', + rubric_teaser_template = '" . addslashes($row->rubric_teaser_template) . "', + rubric_header_template = '" . addslashes($row->rubric_header_template) . "', + rubric_footer_template = '" . addslashes($row->rubric_footer_template) . "', + rubric_admin_teaser_template = '" . addslashes($row->rubric_admin_teaser_template) . "', + rubric_changed = '" . time() . "', + rubric_changed_fields = '" . time() . "' "); + $iid = $AVE_DB->InsertId(); $sql = $AVE_DB->Query(" SELECT user_group_id, rubric_permission - FROM " . PREFIX . "_rubric_permissions - WHERE rubric_id = '" . $rubric_id . "' + FROM + " . PREFIX . "_rubric_permissions + WHERE + rubric_id = '" . $rubric_id . "' "); + while ($row = $sql->FetchRow()) { $AVE_DB->Query(" - INSERT " . PREFIX . "_rubric_permissions + INSERT + " . PREFIX . "_rubric_permissions SET rubric_id = '" . $iid . "', user_group_id = '" . (int)$row->user_group_id . "', @@ -403,14 +440,18 @@ rubric_field_template, rubric_field_template_request, rubric_field_description - FROM " . PREFIX . "_rubric_fields - WHERE rubric_id = '" . $rubric_id . "' + FROM + " . PREFIX . "_rubric_fields + WHERE + rubric_id = '" . $rubric_id . "' ORDER BY rubric_field_position ASC "); + while ($row = $sql->FetchRow()) { $AVE_DB->Query(" - INSERT " . PREFIX . "_rubric_fields + INSERT + " . PREFIX . "_rubric_fields SET rubric_id = '" . $iid . "', rubric_field_title = '" . addslashes($row->rubric_field_title) . "', @@ -449,35 +490,57 @@ $rubric_not_empty = $AVE_DB->Query(" SELECT 1 - FROM " . PREFIX . "_documents - WHERE rubric_id = '" . $rubric_id . "' + FROM + " . PREFIX . "_documents + WHERE + rubric_id = '" . $rubric_id . "' LIMIT 1 ")->GetCell(); if (!$rubric_not_empty) { $AVE_DB->Query(" - DELETE - FROM " . PREFIX . "_rubrics - WHERE Id = '" . $rubric_id . "' + DELETE FROM + " . PREFIX . "_rubrics + WHERE + Id = '" . $rubric_id . "' "); + $AVE_DB->Query(" - DELETE - FROM " . PREFIX . "_rubric_fields - WHERE rubric_id = '" . $rubric_id . "' + DELETE FROM + " . PREFIX . "_rubric_fields + WHERE + rubric_id = '" . $rubric_id . "' "); + $AVE_DB->Query(" - DELETE - FROM " . PREFIX . "_rubric_permissions - WHERE rubric_id = '" . $rubric_id . "' + DELETE FROM + " . PREFIX . "_rubric_permissions + WHERE + rubric_id = '" . $rubric_id . "' "); + + $AVE_DB->Query(" + DELETE FROM + " . PREFIX . "_rubric_templates + WHERE + rubric_id = '" . $rubric_id . "' + "); + // Очищаем кэш шаблона документов рубрики $AVE_DB->Query(" - DELETE - FROM " . PREFIX . "_rubric_template_cache - WHERE rub_id = '" . $rubric_id . "' + DELETE FROM + " . PREFIX . "_rubric_template_cache + WHERE + rub_id = '" . $rubric_id . "' "); + // Удалить КЕШ + $AVE_DB->clearCache('rub_' . $rubric_id); + + // Удалить файлы шаблонов + $this->clearTemplates($rubric_id); + // Сохраняем системное сообщение в журнал reportLog($AVE_Template->get_config_vars('RUBRIK_LOG_DEL_RUBRIC') . ' - ' . stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title, ENT_QUOTES)) . ' (id: '.$rubric_id.')'); } @@ -609,13 +672,9 @@ $AVE_Template->assign('rubs', $this->rubricShow()); if (isAjax()) - { $AVE_Template->assign('content', $AVE_Template->fetch('rubs/fields.tpl')); - } else - { $AVE_Template->assign('content', $AVE_Template->fetch('rubs/fields_list.tpl')); - } } else { @@ -639,7 +698,12 @@ // Права $groups = array(); - $sql = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_user_groups"); + $sql = $AVE_DB->Query(" + SELECT + * + FROM + " . PREFIX . "_user_groups + "); while ($row = $sql->FetchRow()) { @@ -647,10 +711,14 @@ $row->doall_h = ($row->user_group == 1) ? 1 : ''; $rubric_permission = $AVE_DB->Query(" - SELECT rubric_permission - FROM " . PREFIX . "_rubric_permissions - WHERE user_group_id = '" . $row->user_group . "' - AND rubric_id = '" . $rubric_id . "' + SELECT + rubric_permission + FROM + " . PREFIX . "_rubric_permissions + WHERE + user_group_id = '" . $row->user_group . "' + AND + rubric_id = '" . $rubric_id . "' ")->GetCell(); $row->permissions = @explode('|', $rubric_permission); @@ -659,9 +727,14 @@ } $sql = $AVE_DB->Query(" - SELECT rubric_title, rubric_linked_rubric, rubric_description - FROM " . PREFIX . "_rubrics - WHERE id = '" . $rubric_id . "' + SELECT + rubric_title, + rubric_linked_rubric, + rubric_description + FROM + " . PREFIX . "_rubrics + WHERE + id = '" . $rubric_id . "' LIMIT 1 "); @@ -714,6 +787,7 @@ else { $rubs = array(); + $sql = $AVE_DB->Query(" SELECT rubric_title, @@ -740,12 +814,15 @@ { global $AVE_DB, $AVE_Template; - if (!empty($_POST['title_new'])) + if (! empty($_POST['title_new'])) { $position = (int)$AVE_DB->Query(" - SELECT MAX(rubric_field_position) - FROM " . PREFIX . "_rubric_fields - WHERE rubric_id = '" . $rubric_id . "' + SELECT + MAX(rubric_field_position) + FROM + " . PREFIX . "_rubric_fields + WHERE + rubric_id = '" . $rubric_id . "' ")->GetCell() + 1; if ($_POST['rub_type_new'] == 'dropdown') @@ -760,7 +837,8 @@ } $AVE_DB->Query(" - INSERT " . PREFIX . "_rubric_fields + INSERT + " . PREFIX . "_rubric_fields SET rubric_id = '" . $rubric_id . "', rubric_field_group = '" . (($_POST['group_new'] != '') ? (int)$_POST['group_new'] : '0') . "', @@ -775,52 +853,67 @@ $UpdateRubricField = $AVE_DB->InsertId(); $sql = $AVE_DB->Query(" - SELECT Id - FROM " . PREFIX . "_documents - WHERE rubric_id = '" . $rubric_id . "' + SELECT + Id + FROM + " . PREFIX . "_documents + WHERE + rubric_id = '" . $rubric_id . "' "); while ($row = $sql->FetchRow()) { $AVE_DB->Query(" - INSERT " . PREFIX . "_document_fields + INSERT + " . PREFIX . "_document_fields SET rubric_field_id = '" . $UpdateRubricField . "', document_id = '" . $row->Id . "' "); } + $AVE_DB->Query(" + UPDATE + " . PREFIX . "_rubrics + SET + rubric_changed_fields = '" . time() . "' + WHERE + Id = '" . $rubric_id . "' + "); + // Сохраняем системное сообщение в журнал reportLog($AVE_Template->get_config_vars('RUBRIK_LOG_NEW_FIELD').' (' . stripslashes(htmlspecialchars($_POST['title_new'], ENT_QUOTES)) . ') '. stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title, ENT_QUOTES)). ' (id: '.$rubric_id.')'); - } else { - - if (!$ajax){ - + } + else + { + if (! isAjax()) + { header('Location:index.php?do=rubs&action=edit&Id=' . $rubric_id . '&cp=' . SESSION); - exit; - - }else{ - + } + else + { $message = $AVE_Template->get_config_vars('RUBRIK_EMPTY_MESSAGE'); $header = $AVE_Template->get_config_vars('RUBRIK_FILDS_SUCCESS'); $theme = 'error'; echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); - exit; } - } - if (!$ajax){ - header('Location:index.php?do=rubs&action=edit&Id=' . $rubric_id . '&cp=' . SESSION); exit; + } - }else{ - + if (! isAjax()) + { + header('Location:index.php?do=rubs&action=edit&Id=' . $rubric_id . '&cp=' . SESSION); + } + else + { $message = $AVE_Template->get_config_vars('RUBRIK_FILD_SAVED'); $header = $AVE_Template->get_config_vars('RUBRIK_FILDS_SUCCESS'); $theme = 'accept'; echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); - exit; } + + exit; } @@ -858,36 +951,16 @@ UPDATE " . PREFIX . "_rubrics SET - rubric_start_code = '" . $_POST['rubric_start_code'] . "', - rubric_code_start = '" . $_POST['rubric_code_start'] . "', - rubric_code_end = '" . $_POST['rubric_code_end'] . "' + rubric_start_code = '" . $_POST['rubric_start_code'] . "', + rubric_code_start = '" . $_POST['rubric_code_start'] . "', + rubric_code_end = '" . $_POST['rubric_code_end'] . "', + rubric_changed = '" . time() . "' WHERE Id = '" . $rubric_id . "' "); - $AVE_DB->clearcache('rub_' . $rubric_id); - - $sql = $AVE_DB->Query(" - SELECT - Id, - document_alias - FROM - " . PREFIX . "_documents - WHERE - rubric_id = " . $rubric_id . " - "); - - while ($row = $sql->FetchRow()) - { - if ($row->Id == 1) - $hash_url = md5(''); - else - $hash_url = md5($row->document_alias); - - $AVE_DB->clearCacheUrl('url_'.$hash_url); - $AVE_DB->clearcache('doc_' . $row->Id); - $AVE_DB->clearcompile('doc_' . $row->Id); - } + // Очищаем кэш рубрики + $AVE_DB->clearCache('rub_' . $rubric_id); if ($sql->_result === false) { @@ -904,13 +977,10 @@ } if (isAjax()) - { echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); - } else - { header('Location:index.php?do=rubs&action=code&Id=' . $rubric_id . '&cp=' . SESSION); - } + exit; } } @@ -928,13 +998,16 @@ UPDATE " . PREFIX . "_rubrics SET - rubric_start_code = '" . $_POST['rubric_start_code'] . "', - rubric_code_start = '" . $_POST['rubric_code_start'] . "', - rubric_code_end = '" . $_POST['rubric_code_end'] . "' + rubric_start_code = '" . $_POST['rubric_start_code'] . "', + rubric_code_start = '" . $_POST['rubric_code_start'] . "', + rubric_code_end = '" . $_POST['rubric_code_end'] . "', + rubric_changed = '" . time() . "' WHERE Id = '" . $rubric_id . "' "); + $AVE_DB->clearCache('rub_' . $rubric_id); + if ($sql->_result === false) { $message = $AVE_Template->get_config_vars('RUBRIK_CODE_SAVED_ERR'); @@ -970,9 +1043,10 @@ global $AVE_DB; $AVE_DB->Query(" - UPDATE " . PREFIX . "_rubrics + UPDATE + " . PREFIX . "_rubrics SET - rubric_description = '" . $_POST['rubric_description'] . "' + rubric_description = '" . $_POST['rubric_description'] . "' WHERE Id = '" . $rubric_id . "' "); @@ -992,38 +1066,18 @@ foreach ($_POST['title'] as $id => $title) { - if (!empty($title)) + if (! empty($title)) { $AVE_DB->Query(" - UPDATE " . PREFIX . "_rubric_fields + UPDATE + " . PREFIX . "_rubric_fields SET - rubric_field_title = '" . $title . "', - rubric_field_numeric = '" . $_POST['rubric_field_numeric'][$id] . "', - rubric_field_search = '" . $_POST['rubric_field_search'][$id] . "' + rubric_field_title = '" . $title . "', + rubric_field_numeric = '" . $_POST['rubric_field_numeric'][$id] . "', + rubric_field_search = '" . $_POST['rubric_field_search'][$id] . "' WHERE Id = '" . $id . "' "); - // Очищаем кэш шаблона документов рубрики - $AVE_DB->Query(" - DELETE - FROM " . PREFIX . "_rubric_template_cache - WHERE rub_id = '" . $rubric_id . "' - "); - - $sql = $AVE_DB->Query("SELECT Id,document_alias FROM " . PREFIX . "_documents WHERE rubric_id = ".$rubric_id); - - while ($row = $sql->FetchRow()) - { - if ($row->Id == 1) - $hash_url = md5(''); - else - $hash_url = md5($row->document_alias); - - $AVE_DB->clearCacheUrl('url_'.$hash_url); - $AVE_DB->clearcache('doc_'.$row->Id); - $AVE_DB->clearcompile('doc_'.$row->Id); - $AVE_DB->clearcacherequest('doc_'.$row->Id); - } reportLog($AVE_Template->get_config_vars('RUBRIK_REPORT_FIELD_EDIT') . ' (' . stripslashes($title) . ') '.$AVE_Template->get_config_vars('RUBRIK_REPORT_RUB').' (' . stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title)) . ') (Id:' . $rubric_id . ')'); } @@ -1031,45 +1085,40 @@ foreach ($_POST['del'] as $id => $Del) { - if (!empty($Del)) + if (! empty($Del)) { $AVE_DB->Query(" - DELETE - FROM " . PREFIX . "_rubric_fields - WHERE Id = '" . $id . "' - AND rubric_id = '" . $rubric_id . "' - "); - $AVE_DB->Query(" - DELETE - FROM " . PREFIX . "_document_fields - WHERE rubric_field_id = '" . $id . "' + DELETE FROM + " . PREFIX . "_rubric_fields + WHERE + Id = '" . $id . "' + AND + rubric_id = '" . $rubric_id . "' "); - // Очищаем кэш шаблона документов рубрики + $AVE_DB->Query(" - DELETE - FROM " . PREFIX . "_rubric_template_cache - WHERE rub_id = '" . $rubric_id . "' + DELETE FROM + " . PREFIX . "_document_fields + WHERE + rubric_field_id = '" . $id . "' "); reportLog($AVE_Template->get_config_vars('RUBRIK_REPORT_FIELD_DEL') . ' (' . stripslashes($_POST['title'][$id]) . ') '.$AVE_Template->get_config_vars('RUBRIK_REPORT_RUB').' (' . stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title)) . ') (Id:' . $rubric_id . ')'); } } - $AVE_DB->clearcache('rub_'.$rubric_id); - - $sql = $AVE_DB->Query("SELECT Id,document_alias FROM " . PREFIX . "_documents WHERE rubric_id = ".$rubric_id); - - while ($row = $sql->FetchRow()) - { - if ($row->Id == 1) - $hash_url = md5(''); - else - $hash_url = md5($row->document_alias); + // Очищаем кэш шаблона документов рубрики + $AVE_DB->Query(" + UPDATE + " . PREFIX . "_rubrics + SET + rubric_changed = '" . time() . "', + rubric_changed_fields = '" . time() . "' + WHERE + Id = '" . $rubric_id . "' + "); - $AVE_DB->clearCacheUrl('url_'.$hash_url); - $AVE_DB->clearcache('doc_'.$row->Id); - $AVE_DB->clearcompile('doc_'.$row->Id); - } + $AVE_DB->clearCache('rub_' . $rubric_id); $message = $AVE_Template->get_config_vars('RUBRIK_FILDS_SAVED'); $header = $AVE_Template->get_config_vars('RUBRIK_FILDS_SUCCESS'); @@ -1077,12 +1126,14 @@ reportLog($AVE_Template->get_config_vars('RUBRIK_FILDS_REPORT') . ' (' . stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title)) . ') (Id:' . $rubric_id . ')'); - if (isset($_REQUEST['ajax']) && $_REQUEST['ajax'] = '1') { + if (isAjax()) echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); - } else { + else + { $AVE_Template->assign('message', $message); header('Location:index.php?do=rubs&action=edit&Id=' . $rubric_id . '&cp=' . SESSION); } + exit; } @@ -1098,7 +1149,8 @@ foreach ($_REQUEST['sort'] as $position => $field_id) { $AVE_DB->Query(" - UPDATE " . PREFIX . "_rubric_fields + UPDATE + " . PREFIX . "_rubric_fields SET rubric_field_position = '" . (int)$position . "' WHERE @@ -1108,7 +1160,8 @@ reportLog($AVE_Template->get_config_vars('RUBRIK_REPORT_SORTE_FIELDS')); - if (isAjax()){ + if (isAjax()) + { $message = $AVE_Template->get_config_vars('RUBRIK_SORTED'); $header = $AVE_Template->get_config_vars('RUBRIK_FILDS_SUCCESS'); $theme = 'accept'; @@ -1130,7 +1183,8 @@ foreach ($_REQUEST['sort'] as $position => $rub_id) { $AVE_DB->Query(" - UPDATE " . PREFIX . "_rubrics + UPDATE + " . PREFIX . "_rubrics SET rubric_position = '" . (int)$position . "' WHERE @@ -1140,14 +1194,14 @@ reportLog($AVE_Template->get_config_vars('RUBRIK_REPORT_SORTE')); - if (isAjax()){ + if (isAjax()) + { $message = $AVE_Template->get_config_vars('RUBRIK_SORTED'); $header = $AVE_Template->get_config_vars('RUBRIK_FILDS_SUCCESS'); $theme = 'accept'; echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); } - } /** @@ -1161,13 +1215,9 @@ global $AVE_DB, $AVE_Template; if ($extern == 1) - { $fetchId = (isset($_REQUEST['rubric_id']) && is_numeric($_REQUEST['rubric_id'])) ? $_REQUEST['rubric_id'] : 0; - } else - { $fetchId = (isset($_REQUEST['Id']) && is_numeric($_REQUEST['Id'])) ? $_REQUEST['Id'] : 0; - } $rubric = $AVE_DB->Query(" SELECT @@ -1178,15 +1228,19 @@ rubric_teaser_template, rubric_admin_teaser_template, rubric_description - FROM " . PREFIX . "_rubrics - WHERE Id = '" . $fetchId . "' - ") - ->FetchRow(); + FROM + " . PREFIX . "_rubrics + WHERE + Id = '" . $fetchId . "' + ")->FetchRow(); // Поля $sql = $AVE_DB->Query(" SELECT - a.*, b.group_title, b.group_description, b.group_position + a.*, + b.group_title, + b.group_description, + b.group_position FROM " . PREFIX . "_rubric_fields AS a LEFT JOIN @@ -1259,23 +1313,17 @@ UPDATE " . PREFIX . "_rubrics SET - rubric_template = '" . ($Rtemplate) . "', - rubric_header_template = '" . $Htemplate . "', - rubric_footer_template = '" . $Ftemplate . "', - rubric_teaser_template = '" . $Ttemplate . "', - rubric_admin_teaser_template = '" . $Atemplate . "' + rubric_template = '" . ($Rtemplate) . "', + rubric_header_template = '" . $Htemplate . "', + rubric_footer_template = '" . $Ftemplate . "', + rubric_teaser_template = '" . $Ttemplate . "', + rubric_admin_teaser_template = '" . $Atemplate . "', + rubric_changed = '" . time() . "' WHERE Id = '" . $rubric_id . "' "); - // Очищаем кэш шаблона документов рубрики - $AVE_DB->Query(" - DELETE - FROM - " . PREFIX . "_rubric_template_cache - WHERE - rub_id = '" . $rubric_id . "' - "); + $AVE_DB->clearCache('rub_' . $rubric_id); if ($sql === false) { @@ -1291,32 +1339,17 @@ reportLog($AVE_Template->get_config_vars('RUBRIK_REPORT_TEMPL_RUB') . ' (' . stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title)) . ') (Id:' . $rubric_id . ')'); } - $sql = $AVE_DB->Query("SELECT Id, document_alias FROM " . PREFIX . "_documents WHERE rubric_id = ".$rubric_id); - - while ($row = $sql->FetchRow()) - { - if ($row->Id == 1) - $hash_url = md5(''); - else - $hash_url = md5($row->document_alias); - - $AVE_DB->clearCacheUrl('url_'.$hash_url); - $AVE_DB->clearcache('doc_'.$row->Id); - $AVE_DB->clearcompile('doc_'.$row->Id); - } - if (isAjax()) { echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); - exit; } else { $AVE_Template->assign('message', $message); header('Location:index.php?do=rubs&cp=' . SESSION); - exit; } + exit; } /** @@ -1334,26 +1367,35 @@ { $exist = $AVE_DB->Query(" SELECT 1 - FROM " . PREFIX . "_rubric_permissions - WHERE user_group_id = '" . $user_group_id . "' - AND rubric_id = '" . $rubric_id . "' + FROM + " . PREFIX . "_rubric_permissions + WHERE + user_group_id = '" . $user_group_id . "' + AND + rubric_id = '" . $rubric_id . "' LIMIT 1 ")->NumRows(); $rubric_permission = @implode('|', $_POST['perm'][$key]); + if ($exist) { $AVE_DB->Query(" - UPDATE " . PREFIX . "_rubric_permissions - SET rubric_permission = '" . $rubric_permission . "' - WHERE user_group_id = '" . $user_group_id . "' - AND rubric_id = '" . $rubric_id . "' + UPDATE + " . PREFIX . "_rubric_permissions + SET + rubric_permission = '" . $rubric_permission . "' + WHERE + user_group_id = '" . $user_group_id . "' + AND + rubric_id = '" . $rubric_id . "' "); } else { $AVE_DB->Query(" - INSERT " . PREFIX . "_rubric_permissions + INSERT + " . PREFIX . "_rubric_permissions SET rubric_id = '" . $rubric_id . "', user_group_id = '" . $user_group_id . "', @@ -1361,18 +1403,30 @@ "); } } - $message = $AVE_Template->get_config_vars('RUBRIC_SAVED_PERMS'); - $header = $AVE_Template->get_config_vars('RUBRIC_SUCCESS'); - $theme = 'accept'; - reportLog($AVE_Template->get_config_vars('RUBRIK_REPORT_PERMISION') . ' (' . stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title)) . ') (Id:' . $rubric_id . ')'); - if (isAjax()) { + $AVE_DB->Query(" + UPDATE + " . PREFIX . "_rubrics + SET + rubric_changed = '" . time() . "' + WHERE + rubric_id = '" . $rubric_id . "' + "); + + $AVE_DB->clearCache('rub_' . $rubric_id); + + $message = $AVE_Template->get_config_vars('RUBRIC_SAVED_PERMS'); + $header = $AVE_Template->get_config_vars('RUBRIC_SUCCESS'); + $theme = 'accept'; + + reportLog($AVE_Template->get_config_vars('RUBRIK_REPORT_PERMISION') . ' (' . stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title)) . ') (Id:' . $rubric_id . ')'); + + if (isAjax()) echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); - exit; - } else { + else header('Location:index.php?do=rubs&action=edit&Id=' . $rubric_id . '&cp=' . SESSION); - exit; - } + + exit; } } @@ -1388,15 +1442,17 @@ static $rubrics = array(); - if (!isset($rubrics[$rubric_id])) + if (! isset($rubrics[$rubric_id])) { $rubrics[$rubric_id] = $AVE_DB->Query(" SELECT rubric_title, rubric_alias, rubric_description - FROM " . PREFIX . "_rubrics - WHERE Id = '" . $rubric_id . "' + FROM + " . PREFIX . "_rubrics + WHERE + Id = '" . $rubric_id . "' LIMIT 1 ")->FetchRow(); } @@ -1468,28 +1524,26 @@ $AVE_Template->assign('content', $AVE_Template->fetch('rubs/alias.tpl')); } + function rubricAliasCheck($rubric_id, $field_id, $value) { + global $AVE_DB, $AVE_Template; - global $AVE_DB, $AVE_Template; - - $errors = array(); + $errors = array(); - if(!intval($rubric_id)>0){ + if (! intval($rubric_id)>0) $errors[] = $AVE_Template->get_config_vars('RUBRIK_ALIAS_RUBID'); - } - if(!intval($field_id)>0) { + if (! intval($field_id)>0) $errors[] = $AVE_Template->get_config_vars('RUBRIK_ALIAS_FIELDID'); - }; - if(!preg_match('/^[A-Za-z][[:word:]]{0,19}$/', $value)) { + if (! preg_match('/^[A-Za-z][[:word:]]{0,19}$/', $value)) $errors[] = $AVE_Template->get_config_vars('RUBRIK_ALIAS_MATCH'); - }; //Проверяем есть такой алиас уже $res = $AVE_DB->Query(" - SELECT COUNT(*) + SELECT + COUNT(*) FROM " . PREFIX . "_rubric_fields WHERE @@ -1498,20 +1552,22 @@ AND rubric_field_alias = '" . addslashes($value) . "' ")->GetCell(); - if($res>0){ + if ($res > 0) $errors[] = $AVE_Template->get_config_vars('RUBRIK_ALIAS_MATCH'); - }; if (empty($errors)) { $AVE_DB->Query(" - UPDATE " . PREFIX . "_rubric_fields + UPDATE + " . PREFIX . "_rubric_fields SET rubric_field_alias = '" . addslashes($value) . "' WHERE Id = '" . intval($field_id) . "' - AND rubric_id = '" . intval($rubric_id) . "' + AND + rubric_id = '" . intval($rubric_id) . "' "); + $AVE_Template->assign('success', true); } else @@ -1520,38 +1576,55 @@ } $sql = $AVE_DB->Query(" - SELECT - a.rubric_title, - b.rubric_field_title, - b.rubric_field_alias - FROM " . PREFIX . "_rubrics AS a - JOIN - " . PREFIX . "_rubric_fields AS b - WHERE a.Id = '" . $_REQUEST['rubric_id'] . "' - AND b.Id = '" . $_REQUEST['field_id'] . "' - ")->FetchAssocArray(); + SELECT + a.rubric_title, + b.rubric_field_title, + b.rubric_field_alias + FROM + " . PREFIX . "_rubrics AS a + JOIN + " . PREFIX . "_rubric_fields AS b + WHERE + a.Id = '" . $_REQUEST['rubric_id'] . "' + AND + b.Id = '" . $_REQUEST['field_id'] . "' + ")->FetchAssocArray(); + + $AVE_DB->Query(" + UPDATE + " . PREFIX . "_rubrics + SET + rubric_changed_fields = '" . time() . "' + WHERE + Id = '" . intval($rubric_id) . "' + "); $AVE_Template->assign($sql); + $AVE_Template->assign('content', $AVE_Template->fetch('rubs/alias.tpl')); } - function rubricFieldTemplate() { + function rubricFieldTemplate() + { global $AVE_DB, $AVE_Template; $field = $AVE_DB->Query(" - SELECT - a.rubric_title, - b.rubric_field_default, - b.rubric_field_title, - b.rubric_field_template, - b.rubric_field_template_request, - b.rubric_field_description - FROM " . PREFIX . "_rubrics AS a - JOIN - " . PREFIX . "_rubric_fields AS b - WHERE a.Id = '" . $_REQUEST['rubric_id'] . "' - AND b.Id = '" . $_REQUEST['field_id'] . "' - ")->FetchAssocArray(); + SELECT + a.rubric_title, + b.rubric_field_default, + b.rubric_field_title, + b.rubric_field_template, + b.rubric_field_template_request, + b.rubric_field_description + FROM + " . PREFIX . "_rubrics AS a + JOIN + " . PREFIX . "_rubric_fields AS b + WHERE + a.Id = '" . $_REQUEST['rubric_id'] . "' + AND + b.Id = '" . $_REQUEST['field_id'] . "' + ")->FetchAssocArray(); $AVE_Template->assign($field); $AVE_Template->assign('content', $AVE_Template->fetch('rubs/field_template.tpl')); @@ -1563,7 +1636,8 @@ global $AVE_DB, $AVE_Template; $sql = $AVE_DB->Query(" - UPDATE " . PREFIX . "_rubric_fields + UPDATE + " . PREFIX . "_rubric_fields SET rubric_field_default = '" . $_POST['rubric_field_default'] . "', rubric_field_template = '" . $_POST['rubric_field_template'] . "', @@ -1573,59 +1647,45 @@ Id = '" . $id . "' "); - if ($sql->_result === false) + $AVE_DB->Query(" + UPDATE + " . PREFIX . "_rubrics + SET + rubric_changed_fields = '" . time() . "' + WHERE + Id = '" . intval($rubric_id) . "' + "); + + $AVE_DB->clearCache('rub_' . $rubric_id); + + if ($sql === false) { $message = $AVE_Template->get_config_vars('RUBRIC_SAVED_FLDTPL_ERR'); $header = $AVE_Template->get_config_vars('RUBRIK_ERROR'); $theme = 'error'; - if (isAjax() && !$_REQUEST['save']) { + if (isAjax() && ! $_REQUEST['save']) echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); - exit; - } else { + else $this->rubricFieldTemplate(); - exit; - } + exit; } else { - $AVE_DB->clearcache('rub_'.$rubric_id); - - $sql = $AVE_DB->Query("SELECT Id, document_alias FROM " . PREFIX . "_documents WHERE rubric_id = '".$rubric_id."'"); - - while ($row = $sql->FetchRow()) - { - if ($row->Id == 1) - $hash_url = md5(''); - else - $hash_url = md5($row->document_alias); - - $AVE_DB->clearCacheUrl('url_'.$hash_url); - $AVE_DB->clearcache('doc_'.$row->Id); - $AVE_DB->clearcompile('doc_'.$row->Id); - $AVE_DB->clearcacherequest('doc_'.$row->Id); - } - - // Очищаем кэш шаблона документов рубрики - $AVE_DB->Query(" - DELETE - FROM " . PREFIX . "_rubric_template_cache - WHERE rub_id = '" . $rubric_id . "' - "); - $message = $AVE_Template->get_config_vars('RUBRIC_SAVED_FLDTPL'); $header = $AVE_Template->get_config_vars('RUBRIC_SUCCESS'); $theme = 'accept'; - if (isAjax()) { + if (isAjax()) + { echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); exit; } } - } + function rubricFieldChange($field_id, $rubric_id) { global $AVE_DB, $AVE_Template; @@ -1646,14 +1706,16 @@ $AVE_Template->assign('content', $AVE_Template->fetch('rubs/change.tpl')); } + function rubricFieldChangeSave($field_id, $rubric_id) { global $AVE_DB, $AVE_Template; $AVE_DB->Query(" - UPDATE " . PREFIX . "_rubric_fields + UPDATE + " . PREFIX . "_rubric_fields SET - rubric_field_type = '" . trim($_POST['rubric_field_type']) . "' + rubric_field_type = '" . trim($_POST['rubric_field_type']) . "' WHERE Id = '" . $field_id . "' AND @@ -1671,6 +1733,15 @@ Id = " . $field_id . " ")->FetchAssocArray(); + $AVE_DB->Query(" + UPDATE + " . PREFIX . "_rubrics + SET + rubric_changed_fields = '" . time() . "' + WHERE + Id = '" . intval($rubric_id) . "' + "); + $AVE_Template->assign('rf', $sql); $AVE_Template->assign('fields', get_field_type()); $AVE_Template->assign('content', $AVE_Template->fetch('rubs/change.tpl')); @@ -1694,10 +1765,8 @@ $groups = array(); - while($row = $sql->FetchRow()) - { + while ($row = $sql->FetchRow()) array_push($groups, $row); - } $AVE_Template->assign('rubric', $this->rubricNameByIdGet($rubric_id)); $AVE_Template->assign('groups', $groups); @@ -1716,6 +1785,7 @@ foreach ($_REQUEST['sort'] as $position => $group_id) { $position++; + $AVE_DB->Query(" UPDATE " . PREFIX . "_rubric_fields_group @@ -1733,6 +1803,7 @@ $theme = 'accept'; echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); + exit; } } @@ -1786,6 +1857,7 @@ exit; } + function rubricDelGroupFields($Id, $rubric_id) { global $AVE_DB; @@ -1834,14 +1906,16 @@ $AVE_Template->assign('content', $AVE_Template->fetch('rubs/groups.tpl')); } + function rubricFieldGroupChangeSave($field_id, $rubric_id) { global $AVE_DB, $AVE_Template; $AVE_DB->Query(" - UPDATE " . PREFIX . "_rubric_fields + UPDATE + " . PREFIX . "_rubric_fields SET - rubric_field_group = '" . trim($_POST['rubric_field_group']) . "' + rubric_field_group = '" . trim($_POST['rubric_field_group']) . "' WHERE Id = '" . $field_id . "' AND @@ -1864,6 +1938,7 @@ $AVE_Template->assign('content', $AVE_Template->fetch('rubs/groups.tpl')); } + // Список дополнительных шаблон для данной рубрики function tmplsList() { @@ -1986,7 +2061,10 @@ // Поля $sql = $AVE_DB->Query(" SELECT - a.*, b.group_title, b.group_description, b.group_position + a.*, + b.group_title, + b.group_description, + b.group_position FROM " . PREFIX . "_rubric_fields AS a LEFT JOIN @@ -2080,17 +2158,17 @@ $tmpls_id = $AVE_DB->InsertId(); } - // Очищаем кэш шаблона документов рубрики $AVE_DB->Query(" - DELETE - FROM - " . PREFIX . "_rubric_template_cache + UPDATE + " . PREFIX . "_rubrics + SET + rubric_changed = '" . time() . "' WHERE - rub_id = '" . $rubric_id . "' - AND - rub_tmpl_id = '" . $tmpls_id . "' + Id = '" . intval($rubric_id) . "' "); + $AVE_DB->clearCache('rub_' . $rubric_id); + if ($sql === false) { $message = $AVE_Template->get_config_vars('RUBRIC_SAVED_TPL_ERR'); @@ -2105,41 +2183,17 @@ reportLog($AVE_Template->get_config_vars('RUBRIC_TEMPL_REPORT') . ' ' . stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title)) . ' (Id шаблона:' . $tmpls_id . ')'); } - $sql = $AVE_DB->Query(" - SELECT - Id, - document_alias - FROM - " . PREFIX . "_documents - WHERE - rubric_id = ".$rubric_id." - AND - rubric_tmpl_id = " . $tmpls_id - ); - - while ($row = $sql->FetchRow()) - { - if ($row->Id == 1) - $hash_url = md5(''); - else - $hash_url = md5($row->document_alias); - - $AVE_DB->clearCacheUrl('url_'.$hash_url); - $AVE_DB->clearcache('doc_'.$row->Id); - $AVE_DB->clearcompile('doc_'.$row->Id); - } - if (isAjax()) { echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); - exit; } else { $AVE_Template->assign('message', $message); header('Location:index.php?do=rubs&action=tmpls&Id='.$rubric_id.'&cp=' . SESSION); - exit; } + + exit; } @@ -2172,17 +2226,17 @@ rubric_id = '" . $rubric_id . "' "); - // Очищаем кэш шаблона документов рубрики $AVE_DB->Query(" - DELETE - FROM - " . PREFIX . "_rubric_template_cache + UPDATE + " . PREFIX . "_rubrics + SET + rubric_changed = '" . time() . "' WHERE - rub_id = '" . $rubric_id . "' - AND - rub_tmpl_id = '" . $tmpls_id . "' + Id = '" . intval($rubric_id) . "' "); + $AVE_DB->clearCache('rub_' . $rubric_id); + // Сохраняем системное сообщение в журнал reportLog($AVE_Template->get_config_vars('RUBRIC_TMPLS_LOG_DEL') . ' - ' . stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title, ENT_QUOTES)) . ' (Id шаблона: '.$rubric_id.')'); } @@ -2417,6 +2471,8 @@ */ function SaveFieldTpl($id = '', $fld, $type, $func) { + global $AVE_DB; + switch ($type) { case 'adm': @@ -2443,6 +2499,19 @@ @file_put_contents($file, $data); chmod($file, 0644); + $rubric_id = (int)$_REQUEST['rubric_id']; + + $AVE_DB->Query(" + UPDATE + " . PREFIX . "_rubrics + SET + rubric_changed_fields = '" . time() . "' + WHERE + Id = '" . intval($rubric_id) . "' + "); + + $AVE_DB->clearCache('rub_' . $rubric_id); + $message = 'Шаблон успешнно сохранен'; $header = 'Выполнено'; $theme = 'accept'; @@ -2463,6 +2532,8 @@ */ function DeleteFieldTpl($id, $fld, $type, $func) { + global $AVE_DB; + switch ($type) { case 'adm': @@ -2480,8 +2551,27 @@ @unlink($file); + $rubric_id = $AVE_DB->Query("SELECT rubric_id FROM " . PREFIX . "_rubric_fields WHERE Id = '".$id."'")->GetCell(); + + $AVE_DB->Query(" + UPDATE + " . PREFIX . "_rubrics + SET + rubric_changed_fields = '" . time() . "' + WHERE + Id = '" . intval($rubric_id) . "' + "); + + $AVE_DB->clearCache('rub_' . $rubric_id); + header('Location:' . get_referer_link()); exit; } + + + function clearTemplates($rubric_id) + { + + } } ?> \ No newline at end of file diff --git a/class/class.settings.php b/class/class.settings.php index 9ef5819..3f6ec08 100644 --- a/class/class.settings.php +++ b/class/class.settings.php @@ -1,502 +1,460 @@ assign('date_formats', $date_formats); - $AVE_Template->assign('time_formats', $time_formats); - $AVE_Template->assign('row', get_settings()); - $AVE_Template->assign('available_countries', get_country_list(1)); - $AVE_Template->assign('content', $AVE_Template->fetch('settings/settings_main.tpl')); - } + /** + * СВОЙСТВА + */ + + /** + * Количество стран на странице + * + * @public int + */ + public $_limit = 15; /** - * Метод отображения дополнительных настроек - * + * ВНЕШНИЕ МЕТОДЫ */ - function settingsCase() - { - global $AVE_Template; - // Сохраняем настройки - if (isset($_REQUEST['more'])) + /** + * Метод отображения настроек + * + */ + function settingsShow() { - $set = 'assign('date_formats', $date_formats); + $AVE_Template->assign('time_formats', $time_formats); + $AVE_Template->assign('row', get_settings()); + $AVE_Template->assign('available_countries', get_country_list(1)); + $AVE_Template->assign('content', $AVE_Template->fetch('settings/settings_main.tpl')); + } + + /** + * Метод отображения дополнительных настроек + * + */ + function settingsCase() + { + global $AVE_Template; - foreach($_REQUEST['GLOB'] as $k => $v) + // Сохраняем настройки + if (isset($_REQUEST['more'])) { - switch ($GLOBALS['CMS_CONFIG'][$k]['TYPE']) + $set = ' $v) { - case 'bool' : - $v = $v ? 'true' : 'false'; - break; + switch ($GLOBALS['CMS_CONFIG'][$k]['TYPE']) + { + case 'bool' : + $v = $v ? 'true' : 'false'; + break; - case 'integer' : - $v = intval($v); - break; + case 'integer' : + $v = intval($v); + break; - case 'string' : - $v = "'" . add_slashes($v) . "'"; - break; + case 'string' : + $v = "'" . add_slashes($v) . "'"; + break; - case 'dropdown' : - $v = "'" . add_slashes($v) . "'"; - break; + case 'dropdown' : + $v = "'" . add_slashes($v) . "'"; + break; - default : - $v = "'" . add_slashes($v) . "'"; - break; + default : + $v = "'" . add_slashes($v) . "'"; + break; + } + + $set .= "//" . $GLOBALS['CMS_CONFIG'][$k]['DESCR'] . "\r\n"; + $set .= "define('" . $k . "', " . $v . ");\r\n\r\n"; } - $set .= "//" . $GLOBALS['CMS_CONFIG'][$k]['DESCR'] . "\r\n"; - $set .= "define('" . $k . "', " . $v . ");\r\n\r\n"; - } + $set .= '?>'; - $set .= '?>'; + $result = file_put_contents(BASE_DIR . '/config/config.inc.php', $set); - $result = file_put_contents(BASE_DIR . '/config/config.inc.php', $set); + if ($result > 0) + { + $message = $AVE_Template->get_config_vars('SETTINGS_SAVED'); + $header = $AVE_Template->get_config_vars('SETTINGS_SUCCESS'); + $theme = 'accept'; + reportLog($AVE_Template->get_config_vars('SETTINGS_SAVE_DOP')); + } + else + { + $message = $AVE_Template->get_config_vars('SETTINGS_SAVED_ERR'); + $header = $AVE_Template->get_config_vars('SETTINGS_ERROR'); + $theme = 'error'; + } + + if (isAjax()) + { + echo json_encode(array( + 'message' => $message, + 'header' => $header, + 'theme' => $theme) + ); + } + else + { + $AVE_Template->assign('message', $message); + header('Location:index.php?do=settings&sub=case&cp=' . SESSION); + } - if ($result > 0) + exit; + // Выводим настройки + } + else + { + $AVE_Template->assign('CMS_CONFIG', $GLOBALS['CMS_CONFIG']); + $AVE_Template->assign('content', $AVE_Template->fetch('settings/settings_case.tpl')); + } + } + + /** + * Метод записи настроек + * + */ + function settingsSave() + { + global $AVE_DB, $AVE_Template; + + $muname = ($_REQUEST['mail_smtp_login']) ? "mail_smtp_login = '" . $_REQUEST['mail_smtp_login'] . "'," : ''; + $mpass = ($_REQUEST['mail_smtp_pass']) ? "mail_smtp_pass = '" . $_REQUEST['mail_smtp_pass'] . "'," : ''; + $msmp = ($_REQUEST['mail_sendmail_path']) ? "mail_sendmail_path = '" . $_REQUEST['mail_sendmail_path'] . "'," : ''; + $mn = ($_REQUEST['mail_from_name']) ? "mail_from_name = '" . $_REQUEST['mail_from_name'] . "'," : ''; + $ma = ($_REQUEST['mail_from']) ? "mail_from = '" . $_REQUEST['mail_from'] . "'," : ''; + $ep = ($_REQUEST['page_not_found_id']) ? "page_not_found_id = '" . $_REQUEST['page_not_found_id'] . "'," : ''; + $sn = ($_REQUEST['site_name']) ? "site_name = '" . $_REQUEST['site_name'] . "'," : ''; + $mp = ($_REQUEST['mail_port']) ? "mail_port = '" . $_REQUEST['mail_port'] . "'," : ''; + $mh = ($_REQUEST['mail_host']) ? "mail_host = '" . $_REQUEST['mail_host'] . "'," : ''; + + $sql = $AVE_DB->Query(" + UPDATE + " . PREFIX . "_settings + SET + " . $muname . " + " . $mpass . " + mail_smtp_encrypt = '" . $_REQUEST['mail_smtp_encrypt'] . "', + " . $msmp . " + " . $ma . " + " . $mn . " + " . $ep . " + " . $sn . " + " . $mp . " + " . $mh . " + default_country = '" . $_REQUEST['default_country'] . "', + mail_type = '" . $_REQUEST['mail_type'] . "', + mail_content_type = '" . $_REQUEST['mail_content_type'] . "', + mail_word_wrap = '" . (int)$_REQUEST['mail_word_wrap'] . "', + mail_new_user = '" . $_REQUEST['mail_new_user'] . "', + mail_signature = '" . $_REQUEST['mail_signature'] . "', + message_forbidden = '" . $_REQUEST['message_forbidden'] . "', + hidden_text = '" . $_REQUEST['hidden_text'] . "', + navi_box = '" . $_REQUEST['navi_box'] . "', + start_label = '" . $_REQUEST['start_label'] . "', + end_label = '" . $_REQUEST['end_label'] . "', + separator_label = '" . $_REQUEST['separator_label'] . "', + next_label = '" . $_REQUEST['next_label'] . "', + prev_label = '" . $_REQUEST['prev_label'] . "', + total_label = '" . $_REQUEST['total_label'] . "', + link_box = '" . $_REQUEST['link_box'] . "', + total_box = '" . $_REQUEST['total_box'] . "', + active_box = '" . $_REQUEST['active_box'] . "', + separator_box = '" . $_REQUEST['separator_box'] . "', + bread_box = '" . $_REQUEST['bread_box'] . "', + bread_show_main = '" . ($_REQUEST['bread_show_main'] != 0 ? 1 : 0) . "', + bread_show_host = '" . ($_REQUEST['bread_show_host'] != 0 ? 1 : 0) . "', + bread_sepparator = '" . $_REQUEST['bread_sepparator'] . "', + bread_sepparator_use = '" . ($_REQUEST['bread_sepparator_use'] != 0 ? 1 : 0) . "', + bread_link_box = '" . $_REQUEST['bread_link_box'] . "', + bread_link_template = '" . $_REQUEST['bread_link_template'] . "', + bread_self_box = '" . $_REQUEST['bread_self_box'] . "', + bread_link_box_last = '" . ($_REQUEST['bread_link_box_last'] != 0 ? 1 : 0) . "', + date_format = '" . $_REQUEST['date_format'] . "', + time_format = '" . $_REQUEST['time_format'] . "', + use_doctime = '" . intval($_REQUEST['use_doctime']) . "', + use_editor = '" . intval($_REQUEST['use_editor']) . "' + WHERE + Id = 1 + "); + + if ($sql->_result === false) { - $message = $AVE_Template->get_config_vars('SETTINGS_SAVED'); - $header = $AVE_Template->get_config_vars('SETTINGS_SUCCESS'); - $theme = 'accept'; - reportLog($AVE_Template->get_config_vars('SETTINGS_SAVE_DOP')); + $message = $AVE_Template->get_config_vars('SETTINGS_SAVED_ERR'); + $header = $AVE_Template->get_config_vars('SETTINGS_ERROR'); + $theme = 'error'; } else { - $message = $AVE_Template->get_config_vars('SETTINGS_SAVED_ERR'); - $header = $AVE_Template->get_config_vars('SETTINGS_ERROR'); - $theme = 'error'; + $this->clearSettingsCache(); + + $_SESSION['use_editor'] = intval($_REQUEST['use_editor']); + $message = $AVE_Template->get_config_vars('SETTINGS_SAVED'); + $header = $AVE_Template->get_config_vars('SETTINGS_SUCCESS'); + $theme = 'accept'; + reportLog($AVE_Template->get_config_vars('SETTINGS_SAVE_MAIN')); } - if (isAjax()) + if (isset($_REQUEST['ajax']) && $_REQUEST['ajax'] = '1') { - echo json_encode(array( - 'message' => $message, - 'header' => $header, - 'theme' => $theme) - ); + echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); } else { $AVE_Template->assign('message', $message); - header('Location:index.php?do=settings&sub=case&cp=' . SESSION); + header('Location:index.php?do=settings&cp=' . SESSION); } exit; - // Выводим настройки - } - else - { - $AVE_Template->assign('CMS_CONFIG', $GLOBALS['CMS_CONFIG']); - $AVE_Template->assign('content', $AVE_Template->fetch('settings/settings_case.tpl')); - } - } - - /** - * Метод записи настроек - * - */ - function settingsSave() - { - global $AVE_DB, $AVE_Template; - - $muname = ($_REQUEST['mail_smtp_login']) ? "mail_smtp_login = '" . $_REQUEST['mail_smtp_login'] . "'," : ''; - $mpass = ($_REQUEST['mail_smtp_pass']) ? "mail_smtp_pass = '" . $_REQUEST['mail_smtp_pass'] . "'," : ''; - $msmp = ($_REQUEST['mail_sendmail_path']) ? "mail_sendmail_path = '" . $_REQUEST['mail_sendmail_path'] . "'," : ''; - $mn = ($_REQUEST['mail_from_name']) ? "mail_from_name = '" . $_REQUEST['mail_from_name'] . "'," : ''; - $ma = ($_REQUEST['mail_from']) ? "mail_from = '" . $_REQUEST['mail_from'] . "'," : ''; - $ep = ($_REQUEST['page_not_found_id']) ? "page_not_found_id = '" . $_REQUEST['page_not_found_id'] . "'," : ''; - $sn = ($_REQUEST['site_name']) ? "site_name = '" . $_REQUEST['site_name'] . "'," : ''; - $mp = ($_REQUEST['mail_port']) ? "mail_port = '" . $_REQUEST['mail_port'] . "'," : ''; - $mh = ($_REQUEST['mail_host']) ? "mail_host = '" . $_REQUEST['mail_host'] . "'," : ''; - - $sql = $AVE_DB->Query(" - UPDATE " . PREFIX . "_settings - SET - " . $muname . " - " . $mpass . " - mail_smtp_encrypt = '" . $_REQUEST['mail_smtp_encrypt'] . "', - " . $msmp . " - " . $ma . " - " . $mn . " - " . $ep . " - " . $sn . " - " . $mp . " - " . $mh . " - default_country = '" . $_REQUEST['default_country'] . "', - mail_type = '" . $_REQUEST['mail_type'] . "', - mail_content_type = '" . $_REQUEST['mail_content_type'] . "', - mail_word_wrap = '" . (int)$_REQUEST['mail_word_wrap'] . "', - mail_new_user = '" . $_REQUEST['mail_new_user'] . "', - mail_signature = '" . $_REQUEST['mail_signature'] . "', - message_forbidden = '" . $_REQUEST['message_forbidden'] . "', - hidden_text = '" . $_REQUEST['hidden_text'] . "', - navi_box = '" . $_REQUEST['navi_box'] . "', - start_label = '" . $_REQUEST['start_label'] . "', - end_label = '" . $_REQUEST['end_label'] . "', - separator_label = '" . $_REQUEST['separator_label'] . "', - next_label = '" . $_REQUEST['next_label'] . "', - prev_label = '" . $_REQUEST['prev_label'] . "', - total_label = '" . $_REQUEST['total_label'] . "', - link_box = '" . $_REQUEST['link_box'] . "', - total_box = '" . $_REQUEST['total_box'] . "', - active_box = '" . $_REQUEST['active_box'] . "', - separator_box = '" . $_REQUEST['separator_box'] . "', - bread_box = '" . $_REQUEST['bread_box'] . "', - bread_show_main = '" . ($_REQUEST['bread_show_main'] != 0 ? 1 : 0) . "', - bread_show_host = '" . ($_REQUEST['bread_show_host'] != 0 ? 1 : 0) . "', - bread_sepparator = '" . $_REQUEST['bread_sepparator'] . "', - bread_sepparator_use = '" . ($_REQUEST['bread_sepparator_use'] != 0 ? 1 : 0) . "', - bread_link_box = '" . $_REQUEST['bread_link_box'] . "', - bread_link_template = '" . $_REQUEST['bread_link_template'] . "', - bread_self_box = '" . $_REQUEST['bread_self_box'] . "', - bread_link_box_last = '" . ($_REQUEST['bread_link_box_last'] != 0 ? 1 : 0) . "', - date_format = '" . $_REQUEST['date_format'] . "', - time_format = '" . $_REQUEST['time_format'] . "', - use_doctime = '" . intval($_REQUEST['use_doctime']) . "', - use_editor = '" . intval($_REQUEST['use_editor']) . "' - WHERE - Id = 1 - "); - - if ($sql->_result === false) - { - $message = $AVE_Template->get_config_vars('SETTINGS_SAVED_ERR'); - $header = $AVE_Template->get_config_vars('SETTINGS_ERROR'); - $theme = 'error'; } - else - { - $this->clearSettingsCache(); - $_SESSION['use_editor'] = intval($_REQUEST['use_editor']); - $message = $AVE_Template->get_config_vars('SETTINGS_SAVED'); - $header = $AVE_Template->get_config_vars('SETTINGS_SUCCESS'); - $theme = 'accept'; - reportLog($AVE_Template->get_config_vars('SETTINGS_SAVE_MAIN')); - } - - if (isset($_REQUEST['ajax']) && $_REQUEST['ajax'] = '1') + /** + * Метод отображения списка стран + * + */ + function settingsCountriesList() { - echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); - } - else - { - $AVE_Template->assign('message', $message); - header('Location:index.php?do=settings&cp=' . SESSION); - } + global $AVE_DB, $AVE_Template; - exit; - } - - /** - * Метод отображения списка стран - * - */ - function settingsCountriesList() - { - global $AVE_DB, $AVE_Template; + $sql = $AVE_DB->Query(" + SELECT SQL_CALC_FOUND_ROWS * + FROM + " . PREFIX . "_countries + ORDER BY country_status ASC, country_name ASC + LIMIT " . (get_current_page() * $this->_limit - $this->_limit) . "," . $this->_limit + ); - $sql = $AVE_DB->Query(" - SELECT SQL_CALC_FOUND_ROWS * - FROM " . PREFIX . "_countries - ORDER BY country_status ASC, country_name ASC - LIMIT " . (get_current_page() * $this->_limit - $this->_limit) . "," . $this->_limit - ); + $countries = array(); - $countries = array(); + while ($row = $sql->FetchAssocArray()) + array_push($countries, $row); - while ($row = $sql->FetchAssocArray()) - { - array_push($countries, $row); - } + $num = $AVE_DB->Query("SELECT FOUND_ROWS()")->GetCell(); - $num = $AVE_DB->Query("SELECT FOUND_ROWS()")->GetCell(); + if ($num > $this->_limit) + { + $page_nav = "{t}"; + $page_nav = get_pagination(ceil($num / $this->_limit), 'page', $page_nav); + $AVE_Template->assign('page_nav', $page_nav); + } - if ($num > $this->_limit) - { - $page_nav = "{t}"; - $page_nav = get_pagination(ceil($num / $this->_limit), 'page', $page_nav); - $AVE_Template->assign('page_nav', $page_nav); + $AVE_Template->assign('countries', $countries); + $AVE_Template->assign('content', $AVE_Template->fetch('settings/settings_countries.tpl')); } - $AVE_Template->assign('countries', $countries); - $AVE_Template->assign('content', $AVE_Template->fetch('settings/settings_countries.tpl')); - } - - /** - * Метод записи параметров стран - * - */ - function settingsCountriesSave() - { - global $AVE_DB, $AVE_Template; - - foreach ($_POST['country_name'] as $id => $country_name) + /** + * Метод записи параметров стран + * + */ + function settingsCountriesSave() { - $AVE_DB->Query(" - UPDATE " . PREFIX . "_countries - SET - country_name = '" . $country_name . "', - country_status = '" . $_POST['country_status'][$id] . "', - country_eu = '" . $_POST['country_eu'][$id] . "' - WHERE - Id = '" . $id . "' - "); - } - - reportLog($AVE_Template->get_config_vars('SETTINGS_SAVE_COUNTRY')); - } + global $AVE_DB, $AVE_Template; + foreach ($_POST['country_name'] as $id => $country_name) + { + $AVE_DB->Query(" + UPDATE " . PREFIX . "_countries + SET + country_name = '" . $country_name . "', + country_status = '" . $_POST['country_status'][$id] . "', + country_eu = '" . $_POST['country_eu'][$id] . "' + WHERE + Id = '" . $id . "' + "); + } - /** - * Метод отображения списка языков - * - */ - function settingsLanguageList() - { - global $AVE_DB, $AVE_Template; + reportLog($AVE_Template->get_config_vars('SETTINGS_SAVE_COUNTRY')); + } - $sql = $AVE_DB->Query(" - SELECT SQL_CALC_FOUND_ROWS * - FROM " . PREFIX . "_settings_lang - ORDER BY lang_default DESC, lang_status ASC, lang_key ASC - "); - $language = array(); - while ($row = $sql->FetchAssocArray()) + /** + * Метод отображения списка языков + * + */ + function settingsLanguageList() { - array_push($language, $row); - } - $AVE_Template->assign('language', $language); - $AVE_Template->assign('content', $AVE_Template->fetch('settings/settings_lang.tpl')); - } + global $AVE_DB, $AVE_Template; + $sql = $AVE_DB->Query(" + SELECT + * + FROM + " . PREFIX . "_settings_lang + ORDER BY lang_default DESC, lang_status ASC, lang_key ASC + "); - /** - * Метод Редактирования параметров языков - * - */ - function settingsLanguageEdit() - { - global $AVE_DB, $AVE_Template; + $language = array(); - if (isset($_REQUEST["Id"])) - { - $items = $AVE_DB->Query(" - SELECT * - FROM " . PREFIX . "_settings_lang - WHERE - Id = '" . $_REQUEST["Id"] . "' - ")->FetchRow(); + while ($row = $sql->FetchAssocArray()) + array_push($language, $row); - $AVE_Template->assign('items', $items); + $AVE_Template->assign('language', $language); + $AVE_Template->assign('content', $AVE_Template->fetch('settings/settings_lang.tpl')); } - $AVE_Template->assign('content', $AVE_Template->fetch('settings/settings_lang_edit.tpl')); - } - - function settingsLanguageEditSave() - { - global $AVE_DB, $AVE_Template; - - if (!empty($_REQUEST["Id"])) - { - $AVE_DB->Query(" - UPDATE - " . PREFIX . "_settings_lang - SET - lang_key = '" .$_REQUEST['lang_key']. "', - lang_alias_pref = '" .$_REQUEST['lang_alias_pref']. "', - lang_name = '" .$_REQUEST['lang_name']. "' - WHERE - Id = '" . $_REQUEST["Id"] . "' - "); - } - else + /** + * Метод Редактирования параметров языков + * + */ + function settingsLanguageEdit() { - $AVE_DB->Query(" - INSERT INTO - " . PREFIX . "_settings_lang - SET - lang_key = '" .$_REQUEST['lang_key']. "', - lang_name = '" .$_REQUEST['lang_name']. "', - lang_alias_pref = '" .$_REQUEST['lang_alias_pref']. "', - lang_default = '0', - lang_status = '0' - "); + global $AVE_DB, $AVE_Template; + + if (isset($_REQUEST["Id"])) + { + $items = $AVE_DB->Query(" + SELECT + * + FROM + " . PREFIX . "_settings_lang + WHERE + Id = '" . $_REQUEST["Id"] . "' + ")->FetchRow(); + + $AVE_Template->assign('items', $items); + } + $AVE_Template->assign('content', $AVE_Template->fetch('settings/settings_lang_edit.tpl')); } - echo ""; - } - function settingsPaginationsList() - { - global $AVE_DB, $AVE_Template; + function settingsLanguageEditSave() + { + global $AVE_DB, $AVE_Template; - $sql = " - SELECT - id, - pagination_name - FROM - " . PREFIX . "_paginations - "; + if (! empty($_REQUEST["Id"])) + { + $AVE_DB->Query(" + UPDATE + " . PREFIX . "_settings_lang + SET + lang_key = '" .$_REQUEST['lang_key']. "', + lang_alias_pref = '" .$_REQUEST['lang_alias_pref']. "', + lang_name = '" .$_REQUEST['lang_name']. "' + WHERE + Id = '" . $_REQUEST["Id"] . "' + "); + } + else + { + $AVE_DB->Query(" + INSERT INTO + " . PREFIX . "_settings_lang + SET + lang_key = '" .$_REQUEST['lang_key']. "', + lang_name = '" .$_REQUEST['lang_name']. "', + lang_alias_pref = '" .$_REQUEST['lang_alias_pref']. "', + lang_default = '0', + lang_status = '0' + "); - $query = $AVE_DB->Query($sql); + } - $items = array(); + $AVE_DB->clearCache('langs'); - while ($row = $query->FetchRow()) - array_push($items, $row); + echo ""; + } - $AVE_Template->assign('items', $items); - $AVE_Template->assign('content', $AVE_Template->fetch('settings/settings_pagination.tpl')); - } + function settingsPaginationsList() + { + global $AVE_DB, $AVE_Template; + $sql = " + SELECT + id, + pagination_name + FROM + " . PREFIX . "_paginations + "; - function settingsPaginationsNew() - { - global $AVE_DB, $AVE_Template; + $query = $AVE_DB->Query($sql); - $pagination = new stdClass(); + $items = array(); - $AVE_Template->assign('pagination', $pagination); - $AVE_Template->assign('content', $AVE_Template->fetch('settings/pagination_edit.tpl')); - } + while ($row = $query->FetchRow()) + array_push($items, $row); + $AVE_Template->assign('items', $items); - function settingsPaginationsEdit() - { - global $AVE_DB, $AVE_Template; + $AVE_Template->assign('content', $AVE_Template->fetch('settings/settings_pagination.tpl')); + } - $sql = " - SELECT - * - FROM - " . PREFIX . "_paginations - WHERE - id = '" . $_REQUEST['id'] . "' - "; - $pagination = $AVE_DB->Query($sql)->FetchRow(); + function settingsPaginationsNew() + { + global $AVE_DB, $AVE_Template; - $AVE_Template->assign('pagination', $pagination); - $AVE_Template->assign('content', $AVE_Template->fetch('settings/pagination_edit.tpl')); - } + $pagination = new stdClass(); + $AVE_Template->assign('pagination', $pagination); + $AVE_Template->assign('content', $AVE_Template->fetch('settings/pagination_edit.tpl')); + } - function settingsPaginationsSave() - { - global $AVE_DB, $AVE_Template; - // Если пришел ID - if (isset($_REQUEST['id']) && $_REQUEST['id'] > 0) + function settingsPaginationsEdit() { + global $AVE_DB, $AVE_Template; + $sql = " - UPDATE + SELECT + * + FROM " . PREFIX . "_paginations - SET - pagination_name = '" . $_REQUEST['pagination_name'] . "', - pagination_box = '" . $_REQUEST['pagination_box'] . "', - pagination_start_label = '" . $_REQUEST['pagination_start_label'] . "', - pagination_end_label = '" . $_REQUEST['pagination_end_label'] . "', - pagination_separator_box = '" . $_REQUEST['pagination_separator_box'] . "', - pagination_separator_label = '" . $_REQUEST['pagination_separator_label'] . "', - pagination_next_label = '" . $_REQUEST['pagination_next_label'] . "', - pagination_prev_label = '" . $_REQUEST['pagination_prev_label'] . "', - pagination_link_box = '" . $_REQUEST['pagination_link_box'] . "', - pagination_active_link_box = '" . $_REQUEST['pagination_active_link_box'] . "', - pagination_link_template = '" . $_REQUEST['pagination_link_template'] . "', - pagination_link_active_template = '" . $_REQUEST['pagination_link_active_template'] . "' WHERE id = '" . $_REQUEST['id'] . "' "; - $query = $AVE_DB->Query($sql); + $pagination = $AVE_DB->Query($sql)->FetchRow(); - if ($query === false) - { - $message = $AVE_Template->get_config_vars('PAGINATION_SAVED_ERR'); - $header = $AVE_Template->get_config_vars('PAGINATION_ERROR'); - $theme = 'error'; - } - else - { - $message = $AVE_Template->get_config_vars('PAGINATION_SAVED'); - $header = $AVE_Template->get_config_vars('PAGINATION_SUCCESS'); - $theme = 'accept'; - } + $AVE_Template->assign('pagination', $pagination); + $AVE_Template->assign('content', $AVE_Template->fetch('settings/pagination_edit.tpl')); + } - if (isAjax()) - { - echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); - } - else - { - header('Location:index.php?do=settings&action=paginations&cp=' . SESSION); - } - exit; - } - // Если не пришел ID - else + function settingsPaginationsSave() + { + global $AVE_DB, $AVE_Template; + + // Если пришел ID + if (isset($_REQUEST['id']) && $_REQUEST['id'] > 0) { $sql = " - INSERT INTO + UPDATE " . PREFIX . "_paginations SET pagination_name = '" . $_REQUEST['pagination_name'] . "', @@ -511,229 +469,282 @@ class AVE_Settings pagination_active_link_box = '" . $_REQUEST['pagination_active_link_box'] . "', pagination_link_template = '" . $_REQUEST['pagination_link_template'] . "', pagination_link_active_template = '" . $_REQUEST['pagination_link_active_template'] . "' + WHERE + id = '" . $_REQUEST['id'] . "' "; - } - $query = $AVE_DB->Query($sql); + $query = $AVE_DB->Query($sql); - header('Location:index.php?do=settings&action=paginations&cp=' . SESSION); - exit; - } + if ($query === false) + { + $message = $AVE_Template->get_config_vars('PAGINATION_SAVED_ERR'); + $header = $AVE_Template->get_config_vars('PAGINATION_ERROR'); + $theme = 'error'; + } + else + { + AVE_Paginations::clearCache(); + $message = $AVE_Template->get_config_vars('PAGINATION_SAVED'); + $header = $AVE_Template->get_config_vars('PAGINATION_SUCCESS'); + $theme = 'accept'; + } - function settingsPaginationsDel() - { - global $AVE_DB, $AVE_Template; + if (isAjax()) + { + echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); + } + else + { + header('Location:index.php?do=settings&action=paginations&cp=' . SESSION); + } - if (isset($_REQUEST['id']) && $_REQUEST['id'] > 1) - { - $sql = " - DELETE - FROM - " . PREFIX . "_paginations - WHERE - id = '" . $_REQUEST['id'] . "' - "; + exit; + } + // Если не пришел ID + else + { + $sql = " + INSERT INTO + " . PREFIX . "_paginations + SET + pagination_name = '" . $_REQUEST['pagination_name'] . "', + pagination_box = '" . $_REQUEST['pagination_box'] . "', + pagination_start_label = '" . $_REQUEST['pagination_start_label'] . "', + pagination_end_label = '" . $_REQUEST['pagination_end_label'] . "', + pagination_separator_box = '" . $_REQUEST['pagination_separator_box'] . "', + pagination_separator_label = '" . $_REQUEST['pagination_separator_label'] . "', + pagination_next_label = '" . $_REQUEST['pagination_next_label'] . "', + pagination_prev_label = '" . $_REQUEST['pagination_prev_label'] . "', + pagination_link_box = '" . $_REQUEST['pagination_link_box'] . "', + pagination_active_link_box = '" . $_REQUEST['pagination_active_link_box'] . "', + pagination_link_template = '" . $_REQUEST['pagination_link_template'] . "', + pagination_link_active_template = '" . $_REQUEST['pagination_link_active_template'] . "' + "; + } - $AVE_DB->Query($sql); + $query = $AVE_DB->Query($sql); + + header('Location:index.php?do=settings&action=paginations&cp=' . SESSION); + exit; } - header('Location:index.php?do=settings&action=paginations&cp=' . SESSION); - exit; - } + function settingsPaginationsDel() + { + global $AVE_DB, $AVE_Template; - /** - * Функция делает рекурсивный обход вложенных папок, и добавляет их в архив - * - * @param string $src_dir папка которую хотим заархивировать - * @param string $zip Куда кладем и как называем файл архива - * @return ZIP - */ - function ZipDirectory($src_dir, $zip, $dir_in_archive = '') - { - $dirHandle = opendir($src_dir); + if (isset($_REQUEST['id']) && $_REQUEST['id'] > 1) + { + $sql = " + DELETE + FROM + " . PREFIX . "_paginations + WHERE + id = '" . $_REQUEST['id'] . "' + "; - while (false !== ($file = readdir($dirHandle))) + $AVE_DB->Query($sql); + + AVE_Paginations::clearCache(); + } + + header('Location:index.php?do=settings&action=paginations&cp=' . SESSION); + exit; + } + + + /** + * Функция делает рекурсивный обход вложенных папок, и добавляет их в архив + * + * @param string $src_dir папка которую хотим заархивировать + * @param string $zip Куда кладем и как называем файл архива + * @return ZIP + */ + function ZipDirectory($src_dir, $zip, $dir_in_archive = '') { - if (($file != '.') && ($file != '..')) + $dirHandle = opendir($src_dir); + + while (false !== ($file = readdir($dirHandle))) { - if (! is_dir($src_dir . $file)) + if (($file != '.') && ($file != '..')) { - $zip->addFile($src_dir . $file, $dir_in_archive.$file); - } - else + if (! is_dir($src_dir . $file)) { - $zip->addEmptyDir($dir_in_archive.$file); - $zip = ZipDirectory($src_dir . $file . DIRECTORY_SEPARATOR, $zip, $dir_in_archive . $file . DIRECTORY_SEPARATOR); + $zip->addFile($src_dir . $file, $dir_in_archive.$file); } + else + { + $zip->addEmptyDir($dir_in_archive.$file); + $zip = ZipDirectory($src_dir . $file . DIRECTORY_SEPARATOR, $zip, $dir_in_archive . $file . DIRECTORY_SEPARATOR); + } + } } - } - return $zip; - } - - /** - * Функция проверяет, возможно ли создать zip-архив, запускает - * ZipDirectory и закрывает файл при завершении обхода папок. - * - * @param string $src_dir папка которую хотим заархивировать - * @param string $archive_path Куда кладем и как называем файл архива - * @return bool true|false - */ - function ZipFull($src_dir, $archive_path) - { - $zip = new ZipArchive(); + return $zip; + } - if ($zip->open($archive_path, ZIPARCHIVE::CREATE) !== true) + /** + * Функция проверяет, возможно ли создать zip-архив, запускает + * ZipDirectory и закрывает файл при завершении обхода папок. + * + * @param string $src_dir папка которую хотим заархивировать + * @param string $archive_path Куда кладем и как называем файл архива + * @return bool true|false + */ + function ZipFull($src_dir, $archive_path) { - return false; - } + $zip = new ZipArchive(); - $zip = ZipDirectory($src_dir,$zip); + if ($zip->open($archive_path, ZIPARCHIVE::CREATE) !== true) + { + return false; + } - $zip->close(); + $zip = ZipDirectory($src_dir,$zip); - return true; - } + $zip->close(); - /** - * Функция очищает кеш системных настроек - * - */ - function clearSettingsCache() - { - $cache_dir = BASE_DIR . '/tmp/cache/sql/settings/'; + return true; + } - return rrmdir($cache_dir); - } + /** + * Функция очищает кеш системных настроек + * + */ + function clearSettingsCache() + { + $cache_dir = BASE_DIR . '/tmp/cache/sql/settings/'; + return rrmdir($cache_dir); + } - /** - * Функция редактирования robots.txt - * - */ - function editRobots() - { - global $AVE_DB, $AVE_Template; - $file_name = 'robots.txt'; + /** + * Функция редактирования robots.txt + * + */ + function editRobots() + { + global $AVE_DB, $AVE_Template; - $_REQUEST['sub'] = (! isset($_REQUEST['sub'])) - ? '' - : $_REQUEST['sub']; + $file_name = 'robots.txt'; - switch ($_REQUEST['sub']) - { - case 'save': - $file = BASE_DIR . '/' . $file_name; + $_REQUEST['sub'] = (! isset($_REQUEST['sub'])) + ? '' + : $_REQUEST['sub']; - $template = stripcslashes($_REQUEST['code_text']); + switch ($_REQUEST['sub']) + { + case 'save': + $file = BASE_DIR . '/' . $file_name; - $result = file_put_contents($file, trim($template)); + $template = stripcslashes($_REQUEST['code_text']); - if ($result === false) - { - $message = $AVE_Template->get_config_vars('SETTINGS_SAVED_ERR_FILE'); - $header = $AVE_Template->get_config_vars('SETTINGS_ERROR'); - $theme = 'error'; - } - else + $result = file_put_contents($file, trim($template)); + + if ($result === false) { - $message = $AVE_Template->get_config_vars('SETTINGS_SAVED_FILE'); - $header = $AVE_Template->get_config_vars('SETTINGS_SUCCESS'); - $theme = 'accept'; + $message = $AVE_Template->get_config_vars('SETTINGS_SAVED_ERR_FILE'); + $header = $AVE_Template->get_config_vars('SETTINGS_ERROR'); + $theme = 'error'; } - - if (isAjax()) - { - echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); - } - else + else + { + $message = $AVE_Template->get_config_vars('SETTINGS_SAVED_FILE'); + $header = $AVE_Template->get_config_vars('SETTINGS_SUCCESS'); + $theme = 'accept'; + } + + if (isAjax()) { - $AVE_Template->assign('message', $message); - header('Location:index.php?do=settings&cp=' . SESSION); + echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); } - exit; + else + { + $AVE_Template->assign('message', $message); + header('Location:index.php?do=settings&cp=' . SESSION); + } + exit; - default: - $file = BASE_DIR . '/' . $file_name; + default: + $file = BASE_DIR . '/' . $file_name; - $template = file_get_contents($file); + $template = file_get_contents($file); - $formaction = "index.php?do=settings&action=robots&sub=save&cp=" . SESSION; + $formaction = "index.php?do=settings&action=robots&sub=save&cp=" . SESSION; - $AVE_Template->assign('file_name', $file_name); - $AVE_Template->assign('formaction', $formaction); - $AVE_Template->assign('template', $template); - break; - } + $AVE_Template->assign('file_name', $file_name); + $AVE_Template->assign('formaction', $formaction); + $AVE_Template->assign('template', $template); + break; + } - $AVE_Template->assign('content', $AVE_Template->fetch('settings/edit_file.tpl')); - } + $AVE_Template->assign('content', $AVE_Template->fetch('settings/edit_file.tpl')); + } - /** - * Функция редактирования func.custom.php - * - */ - function editCustom() - { - global $AVE_DB, $AVE_Template; + /** + * Функция редактирования func.custom.php + * + */ + function editCustom() + { + global $AVE_DB, $AVE_Template; - $file_name = 'func.custom.php'; + $file_name = 'func.custom.php'; - $_REQUEST['sub'] = (! isset($_REQUEST['sub'])) - ? '' - : $_REQUEST['sub']; + $_REQUEST['sub'] = (! isset($_REQUEST['sub'])) + ? '' + : $_REQUEST['sub']; - switch ($_REQUEST['sub']) - { - case 'save': - $file = BASE_DIR . '/functions/' . $file_name; + switch ($_REQUEST['sub']) + { + case 'save': + $file = BASE_DIR . '/functions/' . $file_name; - $template = stripcslashes($_REQUEST['code_text']); + $template = stripcslashes($_REQUEST['code_text']); - $result = file_put_contents($file, trim($template)); + $result = file_put_contents($file, trim($template)); - if ($result === false) - { - $message = $AVE_Template->get_config_vars('SETTINGS_SAVED_ERR_FILE'); - $header = $AVE_Template->get_config_vars('SETTINGS_ERROR'); - $theme = 'error'; - } - else + if ($result === false) { - $message = $AVE_Template->get_config_vars('SETTINGS_SAVED_FILE'); - $header = $AVE_Template->get_config_vars('SETTINGS_SUCCESS'); - $theme = 'accept'; + $message = $AVE_Template->get_config_vars('SETTINGS_SAVED_ERR_FILE'); + $header = $AVE_Template->get_config_vars('SETTINGS_ERROR'); + $theme = 'error'; } - - if (isAjax()) - { - echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); - } - else + else + { + $message = $AVE_Template->get_config_vars('SETTINGS_SAVED_FILE'); + $header = $AVE_Template->get_config_vars('SETTINGS_SUCCESS'); + $theme = 'accept'; + } + + if (isAjax()) { - $AVE_Template->assign('message', $message); - header('Location:index.php?do=settings&cp=' . SESSION); + echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); } - exit; + else + { + $AVE_Template->assign('message', $message); + header('Location:index.php?do=settings&cp=' . SESSION); + } + exit; - default: - $file = BASE_DIR . '/functions/' . $file_name; + default: + $file = BASE_DIR . '/functions/' . $file_name; - $template = file_get_contents($file); + $template = file_get_contents($file); - $formaction = "index.php?do=settings&action=robots&sub=save&cp=" . SESSION; + $formaction = "index.php?do=settings&action=custom&sub=save&cp=" . SESSION; - $AVE_Template->assign('file_name', $file_name); - $AVE_Template->assign('formaction', $formaction); - $AVE_Template->assign('template', $template); - break; - } + $AVE_Template->assign('file_name', $file_name); + $AVE_Template->assign('formaction', $formaction); + $AVE_Template->assign('template', $template); + break; + } - $AVE_Template->assign('content', $AVE_Template->fetch('settings/edit_file.tpl')); + $AVE_Template->assign('content', $AVE_Template->fetch('settings/edit_file.tpl')); + } } -} ?> \ No newline at end of file diff --git a/class/class.template.php b/class/class.template.php index 16eb1c4..74fdf71 100644 --- a/class/class.template.php +++ b/class/class.template.php @@ -1,401 +1,376 @@ template_dir = $template_dir; + /** + * СВОЙСТВА + */ /** - * Имя каталога, в котором хранятся компилированные шаблоны. + * Конструктор + * + * @param string $template_dir путь к директории шаблонов по умолчанию + * @return AVE_Template */ - $this->compile_dir = BASE_DIR . '/tmp/cache/smarty'; + function __construct($template_dir) + { + /** + * Путь к директории шаблонов по умолчанию. + * Если вы не передадите тип ресурса во время подключения файлов, они будут искаться здесь. + */ + $this->template_dir = $template_dir; + + /** + * Имя каталога, в котором хранятся компилированные шаблоны. + */ + $this->compile_dir = BASE_DIR . '/tmp/cache/smarty'; + + /** + * Имя каталога, в котором хранится кэш. + */ + $this->cache_dir_root = BASE_DIR . '/tmp/cache'; + + /** + * Имя каталога, в котором хранится кэш шаблонов. + */ + $this->cache_dir = BASE_DIR . '/tmp/cache/tpl'; + + /** + * Имя каталога, в котором хранится кэш модулей. + */ + $this->module_cache_dir = BASE_DIR . '/tmp/cache/module'; + + /** + * Имя каталога, в котором хранится сессии пользователей. + */ + $this->session_dir = BASE_DIR . '/tmp/session'; + + /** + * Имя каталога, в котором хранится сессии пользователей. + */ + $this->sql_cache_dir = BASE_DIR . '/tmp/cache/sql'; + + /** + * Использование поддиректорий для хранения кэша и скомпилированных шаблонов. + */ + $this->use_sub_dirs = SMARTY_USE_SUB_DIRS; + + /** + * При каждом вызове РНР-приложения Smarty проверяет, изменился или нет текущий шаблон + * с момента последней компиляции. Если шаблон изменился, он перекомпилируется. + * В случае, если шаблон еще не был скомпилирован, его компиляция производится + * с игнорированием значения этого параметра. + */ + $this->compile_check = SMARTY_COMPILE_CHECK; + + /** + * Активирует debugging console - порожденное при помощи javascript окно браузера, + * содержащее информацию о подключенных шаблонах и загруженных переменных для текущей страницы. + */ + $this->debugging = SMARTY_DEBUGGING; + + /** + * Регистрация плагинов-функций Smarty. + * Передается наименование функции шаблона и имя функции, реализующей ее. + */ + $this->register_function('check_permission', 'check_permission'); + $this->register_function('get_home_link', 'get_home_link'); + $this->register_function('num_format', 'num_format'); + $this->register_function('thumb', 'make_thumbnail'); + + /** + * Регистрация плагинов-модификаторов Smarty. + * Передается имя модификатора и имя функции, реализующей его. + */ + $this->register_modifier('pretty_date', 'pretty_date'); + $this->register_modifier('translate_date', 'translate_date'); + $this->register_modifier('utf8', 'utf8'); + + // плагин позволяющий поставить метки шаблонов + // для быстрого поиска шаблона отвечающего за вывод + // перед использованием очистить cache/smarty + // $this->register_postfilter('add_template_comment'); + + /** + * Присваиваем общие значения для шаблонов. + * Можно явно передавать пары имя/значение, + * или ассоциативные массивы, содержащие пары имя/значение. + */ + $assign['BASE_DIR'] = BASE_DIR; + $assign['ABS_PATH'] = ABS_PATH; + $assign['DATE_FORMAT'] = DATE_FORMAT; + $assign['TIME_FORMAT'] = TIME_FORMAT; + $assign['PAGE_NOT_FOUND_ID'] = PAGE_NOT_FOUND_ID; + + $this->assign($assign); + } - /** - * Имя каталога, в котором хранится кэш. - */ - $this->cache_dir_root = BASE_DIR . '/tmp/cache'; + /** + * ВНУТРЕННИЕ МЕТОДЫ + */ /** - * Имя каталога, в котором хранится кэш шаблонов. + * Проверка наличия одноименного шаблона в директории темы дизайна. + * При наличии шаблона в директории темы дизайна используется этот шаблон. + * + * @param string $tpl путь к шаблону + * @return string */ - $this->cache_dir = BASE_DIR . '/tmp/cache/tpl'; + function _redefine_template($tpl) + { + if (!defined('THEME_FOLDER')) return $tpl; - /** - * Имя каталога, в котором хранится кэш модулей. - */ - $this->module_cache_dir = BASE_DIR . '/tmp/cache/module'; + $r_tpl = str_replace(BASE_DIR, BASE_DIR . '/templates/' . THEME_FOLDER, $tpl); - /** - * Имя каталога, в котором хранится сессии пользователей. - */ - $this->session_dir = BASE_DIR . '/tmp/session'; + return (file_exists($r_tpl) && is_file($r_tpl)) ? $r_tpl : $tpl; + } - /** - * Имя каталога, в котором хранится сессии пользователей. - */ - $this->sql_cache_dir = BASE_DIR . '/tmp/cache/sql'; + /** + * ВНЕШНИЕ МЕТОДЫ + */ /** - * Использование поддиректорий для хранения кэша и скомпилированных шаблонов. + * Переопределение одноименного метода Smarty + * для конфигурационных файлов созданных в теме дизайна. + * + * @param string $file + * @param string $section + * @param string $scope */ - $this->use_sub_dirs = SMARTY_USE_SUB_DIRS; + function config_load($file, $section = null, $scope = 'global') + { + Smarty::config_load($this->_redefine_template($file), $section, $scope); + } /** - * При каждом вызове РНР-приложения Smarty проверяет, изменился или нет текущий шаблон - * с момента последней компиляции. Если шаблон изменился, он перекомпилируется. - * В случае, если шаблон еще не был скомпилирован, его компиляция производится - * с игнорированием значения этого параметра. + * Переопределение одноименного метода Smarty + * для пользовательских шаблонов созданных в теме дизайна. + * + * @param string $tpl_file name of template file + * @param string $cache_id + * @param string $compile_id + * @return string|false results of {@link _read_cache_file()} */ - $this->compile_check = SMARTY_COMPILE_CHECK; + function is_cached($tpl_file, $cache_id = null, $compile_id = null) + { + return Smarty::is_cached($this->_redefine_template($tpl_file), $cache_id, $compile_id); + } /** - * Активирует debugging console - порожденное при помощи javascript окно браузера, - * содержащее информацию о подключенных шаблонах и загруженных переменных для текущей страницы. + * Переопределение одноименного метода Smarty + * для пользовательских шаблонов созданных в теме дизайна. + * + * @param string $resource_name + * @param string $cache_id + * @param string $compile_id + * @param boolean $display */ - $this->debugging = SMARTY_DEBUGGING; + function fetch($resource_name, $cache_id = null, $compile_id = null, $display = false) + { + return Smarty::fetch($this->_redefine_template($resource_name), $cache_id, $compile_id, $display); + } /** - * Регистрация плагинов-функций Smarty. - * Передается наименование функции шаблона и имя функции, реализующей ее. + * Переопределение одноименного метода Smarty + * для пользовательских шаблонов созданных в теме дизайна. + * + * @param string $resource_name + * @param string $cache_id + * @param string $compile_id */ - $this->register_function('check_permission', 'check_permission'); - $this->register_function('get_home_link', 'get_home_link'); - $this->register_function('num_format', 'num_format'); - $this->register_function('thumb', 'make_thumbnail'); + function display($resource_name, $cache_id = null, $compile_id = null) + { + $this->fetch($resource_name, $cache_id, $compile_id, true); + } - /** - * Регистрация плагинов-модификаторов Smarty. - * Передается имя модификатора и имя функции, реализующей его. - */ - $this->register_modifier('pretty_date', 'pretty_date'); - $this->register_modifier('translate_date', 'translate_date'); - $this->register_modifier('utf8', 'utf8'); - // плагин позволяющий поставить метки шаблонов - // для быстрого поиска шаблона отвечающего за вывод - // перед использованием очистить cache/smarty - // $this->register_postfilter('add_template_comment'); + function recursivDelete($dir) + { + $it = new RecursiveDirectoryIterator($dir . '/'); + $files = new RecursiveIteratorIterator($it, RecursiveIteratorIterator::CHILD_FIRST); - /** - * Присваиваем общие значения для шаблонов. - * Можно явно передавать пары имя/значение, - * или ассоциативные массивы, содержащие пары имя/значение. - */ - $assign['BASE_DIR'] = BASE_DIR; - $assign['ABS_PATH'] = ABS_PATH; - $assign['DATE_FORMAT'] = DATE_FORMAT; - $assign['TIME_FORMAT'] = TIME_FORMAT; - $assign['PAGE_NOT_FOUND_ID'] = PAGE_NOT_FOUND_ID; + foreach($files as $file) + { + if ($file->getFilename() === '.' || $file->getFilename() === '..') + continue; - $this->assign($assign); - } + if ($file->isDir()) + rmdir($file->getRealPath()); + else + unlink($file->getRealPath()); + } -/** - * ВНУТРЕННИЕ МЕТОДЫ - */ + rmdir($dir); + } - /** - * Проверка наличия одноименного шаблона в директории темы дизайна. - * При наличии шаблона в директории темы дизайна используется этот шаблон. - * - * @param string $tpl путь к шаблону - * @return string - */ - function _redefine_template($tpl) - { - if (!defined('THEME_FOLDER')) return $tpl; - $r_tpl = str_replace(BASE_DIR, BASE_DIR . '/templates/' . THEME_FOLDER, $tpl); + /** + * Метод очистки кэша + * + */ + function CacheClear() + { + global $AVE_DB, $AVE_Template; - return (file_exists($r_tpl) && is_file($r_tpl)) ? $r_tpl : $tpl; - } + $message = array(); -/** - * ВНЕШНИЕ МЕТОДЫ - */ + // Метод очистки кэша + if (isset($_REQUEST['templateCache']) && $_REQUEST['templateCache'] == '1') + { + // Smarty clear cache + $this->clear_all_cache(); - /** - * Переопределение одноименного метода Smarty - * для конфигурационных файлов созданных в теме дизайна. - * - * @param string $file - * @param string $section - * @param string $scope - */ - function config_load($file, $section = null, $scope = 'global') - { - Smarty::config_load($this->_redefine_template($file), $section, $scope); - } + foreach (glob($this->cache_dir_root . "/cache_*") as $filename) + @unlink($filename); - /** - * Переопределение одноименного метода Smarty - * для пользовательских шаблонов созданных в теме дизайна. - * - * @param string $tpl_file name of template file - * @param string $cache_id - * @param string $compile_id - * @return string|false results of {@link _read_cache_file()} - */ - function is_cached($tpl_file, $cache_id = null, $compile_id = null) - { - return Smarty::is_cached($this->_redefine_template($tpl_file), $cache_id, $compile_id); - } + write_htaccess_deny($this->cache_dir . '/'); - /** - * Переопределение одноименного метода Smarty - * для пользовательских шаблонов созданных в теме дизайна. - * - * @param string $resource_name - * @param string $cache_id - * @param string $compile_id - * @param boolean $display - */ - function fetch($resource_name, $cache_id = null, $compile_id = null, $display = false) - { - return Smarty::fetch($this->_redefine_template($resource_name), $cache_id, $compile_id, $display); - } - - /** - * Переопределение одноименного метода Smarty - * для пользовательских шаблонов созданных в теме дизайна. - * - * @param string $resource_name - * @param string $cache_id - * @param string $compile_id - */ - function display($resource_name, $cache_id = null, $compile_id = null) - { - $this->fetch($resource_name, $cache_id, $compile_id, true); - } + // Memcached + if ($_REQUEST['ajax'] && Memcached_Server && Memcached_Port) + { + $memcache = new Memcache; + $memcache->connect(Memcached_Server, Memcached_Port); + $memcache->flush(); + } - /** - * Метод очистки кэша - * - */ - function CacheClear() - { - global $AVE_DB, $AVE_Template; + // Очищаем кэш шаблона документов рубрики + $AVE_DB->Query(" + DELETE FROM + " . PREFIX . "_rubric_template_cache + "); - $message = array(); + $message[] = $AVE_Template->get_config_vars('TEMPLATES_CACHE_SUCCESS'); + reportLog($AVE_Template->get_config_vars('TEMPLATES_CACHE_SUCCESS_LOG')); - //Метод очистки кэша - if (isset($_REQUEST['templateCache']) && $_REQUEST['templateCache'] == '1') - { - $this->clear_all_cache(); + // Очищаем кэш сессий в БД в таблице _sessions + $AVE_DB->Query(" + DELETE FROM + " . PREFIX . "_sessions + "); - foreach (glob($this->cache_dir_root . "/cache_*") as $filename) - { - @unlink($filename); + $message[] = $AVE_Template->get_config_vars('TEMPLATES_CACHE_DB_SUCCESS'); + reportLog($AVE_Template->get_config_vars('TEMPLATES_CACHE_DB_SUCCESS_LOG')); } - $filename = $this->cache_dir . '/.htaccess'; - - if (! file_exists($filename)) - { - $fp = @fopen($filename, 'w'); - if ($fp) - { - fputs($fp, 'Deny from all'); - fclose($fp); - } - } - if ($_REQUEST['ajax'] && Memcached_Server && Memcached_Port) + //Метод удаления скомпилированных шаблонов + if (isset($_REQUEST['templateCompiledTemplate']) && $_REQUEST['templateCompiledTemplate'] == '1') { - $memcache = new Memcache; - $memcache->connect(Memcached_Server, Memcached_Port); - $memcache->flush(); - } + // Smarty compiled cache + $this->clear_compiled_tpl(); - // Очищаем кэш шаблона документов рубрики - $GLOBALS['AVE_DB']->Query(" - DELETE - FROM - " . PREFIX . "_rubric_template_cache - "); - - $message[] = $AVE_Template->get_config_vars('TEMPLATES_CACHE_SUCCESS'); - reportLog($AVE_Template->get_config_vars('TEMPLATES_CACHE_SUCCESS_LOG')); - - // Очищаем кэш сессий в БД в таблице _sessions - $GLOBALS['AVE_DB']->Query(" - DELETE - FROM - " . PREFIX . "_sessions - "); - - $message[] = $AVE_Template->get_config_vars('TEMPLATES_CACHE_DB_SUCCESS'); - reportLog($AVE_Template->get_config_vars('TEMPLATES_CACHE_DB_SUCCESS_LOG')); - } + write_htaccess_deny($this->compile_dir . '/'); - //Метод удаления скомпилированных шаблонов - if (isset($_REQUEST['templateCompiledTemplate']) && $_REQUEST['templateCompiledTemplate'] == '1') - { - $this->clear_compiled_tpl(); + $filename = $this->compile_dir . '/.htaccess'; - $filename = $this->compile_dir . '/.htaccess'; - if (! file_exists($filename)) - { - $fp = @fopen($filename, 'w'); - if ($fp) - { - fputs($fp, 'Deny from all'); - fclose($fp); - } + $message[] = $AVE_Template->get_config_vars('TEMPLATES_CACHE_CT_SUCCESS'); + reportLog($AVE_Template->get_config_vars('TEMPLATES_CACHE_CT_SUCCESS_LOG')); } - $message[] = $AVE_Template->get_config_vars('TEMPLATES_CACHE_CT_SUCCESS'); - reportLog($AVE_Template->get_config_vars('TEMPLATES_CACHE_CT_SUCCESS_LOG')); - } - //Метод удаления скомпилированных шаблонов модулей - if (isset($_REQUEST['moduleCache']) && $_REQUEST['moduleCache'] == '1') - { - rrmdir($this->module_cache_dir); + //Метод удаления скомпилированных шаблонов модулей + if (isset($_REQUEST['moduleCache']) && $_REQUEST['moduleCache'] == '1') + { + $this->recursivDelete($this->module_cache_dir); - mkdir($this->module_cache_dir,0777,true); + mkdir($this->module_cache_dir, 0777, true); - $filename = $this->module_cache_dir . '/.htaccess'; + write_htaccess_deny($this->module_cache_dir . '/'); - if (! file_exists($filename)) - { - $fp = @fopen($filename, 'w'); - if ($fp) - { - fputs($fp, 'Deny from all'); - fclose($fp); - } + $message[] = $AVE_Template->get_config_vars('TEMPLATES_CACHE_MC_SUCCESS'); + reportLog($AVE_Template->get_config_vars('TEMPLATES_CACHE_MC_SUCCESS_LOG')); } - $message[] = $AVE_Template->get_config_vars('TEMPLATES_CACHE_MC_SUCCESS'); - reportLog($AVE_Template->get_config_vars('TEMPLATES_CACHE_MC_SUCCESS_LOG')); - } - //Метод удаления всех сессий - if (isset($_REQUEST['sessionUsers']) && $_REQUEST['sessionUsers'] == '1') - { - rrmdir($this->session_dir); + //Метод удаления всех сессий + if (isset($_REQUEST['sessionUsers']) && $_REQUEST['sessionUsers'] == '1') + { + $this->recursivDelete($this->session_dir); - mkdir($this->session_dir,0777,true); + mkdir($this->session_dir, 0777, true); - $filename = $this->session_dir . '/.htaccess'; + write_htaccess_deny($this->session_dir . '/'); - if (! file_exists($filename)) - { - $fp = @fopen($filename, 'w'); - if ($fp) - { - fputs($fp, 'Deny from all'); - fclose($fp); - } + $message[] = $AVE_Template->get_config_vars('TEMPLATES_CACHE_SU_SUCCESS'); + reportLog($AVE_Template->get_config_vars('TEMPLATES_CACHE_SU_SUCCESS_LOG')); } - $message[] = $AVE_Template->get_config_vars('TEMPLATES_CACHE_SU_SUCCESS'); - reportLog($AVE_Template->get_config_vars('TEMPLATES_CACHE_SU_SUCCESS_LOG')); - } - //Метод удаления кэша запросов - if (isset($_REQUEST['sqlCache']) && $_REQUEST['sqlCache'] == '1') - { - rrmdir($this->sql_cache_dir); + //Метод удаления кэша запросов + if (isset($_REQUEST['sqlCache']) && $_REQUEST['sqlCache'] == '1') + { + $this->recursivDelete($this->sql_cache_dir); - mkdir($this->sql_cache_dir,0777,true); + mkdir($this->sql_cache_dir, 0777, true); - $filename = $this->sql_cache_dir . '/.htaccess'; + write_htaccess_deny($this->sql_cache_dir . '/'); - if (!file_exists($filename)) - { - $fp = @fopen($filename, 'w'); - if ($fp) - { - fputs($fp, 'Deny from all'); - fclose($fp); - } + $message[] = $AVE_Template->get_config_vars('TEMPLATES_CACHE_SC_SUCCESS'); + reportLog($AVE_Template->get_config_vars('TEMPLATES_CACHE_SC_SUCCESS_LOG')); } - $message[] = $AVE_Template->get_config_vars('TEMPLATES_CACHE_SC_SUCCESS'); - reportLog($AVE_Template->get_config_vars('TEMPLATES_CACHE_SC_SUCCESS_LOG')); + echo json_encode(array($AVE_Template->get_config_vars('TEMPLATES_MESSAGE') . "
      " . implode('
      ', $message), 'accept')); } - echo json_encode(array($AVE_Template->get_config_vars('TEMPLATES_MESSAGE') . "
      " . implode('
      ', $message), 'accept')); - } - - /** - * Метод очистки миниатюр - * - */ - function ThumbnailsClear() - { - global $AVE_DB, $AVE_Template; - $message = array(); - - function rdel_thumb($dirname) + /** + * Метод очистки миниатюр + * + */ + function ThumbnailsClear() { - $dirs = glob("$dirname/*", GLOB_ONLYDIR|GLOB_NOSORT); + global $AVE_DB, $AVE_Template; + + $message = array(); - foreach ($dirs as $dir) + function rdel_thumb($dirname) { - $dir_thumb = THUMBNAIL_DIR; - $tmb = glob("$dir/$dir_thumb", GLOB_ONLYDIR|GLOB_NOSORT); + $dirs = glob("$dirname/*", GLOB_ONLYDIR|GLOB_NOSORT); - foreach ($tmb as $tmbs) + foreach ($dirs as $dir) { - rrmdir($tmbs); - } + $dir_thumb = THUMBNAIL_DIR; + $tmb = glob("$dir/$dir_thumb", GLOB_ONLYDIR|GLOB_NOSORT); - rdel_thumb($dir); - } + foreach ($tmb as $tmbs) + rrmdir($tmbs); - $hid_cat=(glob("$dirname/{.tmb}*", GLOB_ONLYDIR|GLOB_BRACE)); - $hid_tmb=$hid_cat[0]; + rdel_thumb($dir); + } - foreach (glob("$hid_cat[0]/*.png", GLOB_NOSORT) as $filename) - unlink("$filename"); - } + $hid_cat = (glob("$dirname/{.tmb}*", GLOB_ONLYDIR|GLOB_BRACE)); + $hid_tmb = $hid_cat[0]; - rdel_thumb(BASE_DIR . '/' . UPLOAD_DIR); + foreach (glob("$hid_cat[0]/*.png", GLOB_NOSORT) as $filename) + unlink("$filename"); + } - $message[] = $AVE_Template->get_config_vars('TEMPLATES_THUMBNAILS_SUCCESS'); + rdel_thumb(BASE_DIR . '/' . UPLOAD_DIR); - reportLog($AVE_Template->get_config_vars('TEMPLATES_THUMBNAILS_SUCCESS_LOG')); + $message[] = $AVE_Template->get_config_vars('TEMPLATES_THUMBNAILS_SUCCESS'); - echo json_encode(array($AVE_Template->get_config_vars('TEMPLATES_MESSAGE') . "
      " . implode('
      ', $message), 'accept')); - } + reportLog($AVE_Template->get_config_vars('TEMPLATES_THUMBNAILS_SUCCESS_LOG')); -} + echo json_encode(array($AVE_Template->get_config_vars('TEMPLATES_MESSAGE') . "
      " . implode('
      ', $message), 'accept')); + } + } ?> \ No newline at end of file diff --git a/class/class.templates.php b/class/class.templates.php index d4e3d24..0b3e47b 100644 --- a/class/class.templates.php +++ b/class/class.templates.php @@ -12,6 +12,40 @@ class AVE_Templates { + + public static function setTemplate($template_id) + { + $cache_file = BASE_DIR . '/templates/' . DEFAULT_THEME_FOLDER . '/include/templates/' . $template_id . '/template.inc'; + + if (isset($_REQUEST['template_text']) && $_REQUEST['template_text'] != '') + $template = stripslashes(pretty_chars($_REQUEST['template_text'])); + else + return false; + + // Проверяем наличие папки шаблона + if (! file_exists(dirname($cache_file))) + mkdir(dirname($cache_file), 0766, true); + + // Сохраняем данные в фвйл + file_put_contents($cache_file, $template); + + return true; + } + + + public static function getTemplate($template_id) + { + $cache_file = BASE_DIR . '/templates/' . DEFAULT_THEME_FOLDER . '/include/templates/' . $template_id . '/template.inc'; + + if (file_exists($cache_file) && filesize($cache_file)) + $template = file_get_contents($cache_file); + else + $template = false; + + return $template; + } + + public static function templatesList() { global $AVE_DB, $AVE_Template; @@ -144,10 +178,6 @@ $template_id = (int)$_REQUEST['Id']; - $cache = 'template_' . $template_id; - - $cache_file = BASE_DIR . '/tmp/cache/templates/' . $cache . '.inc'; - $row = $AVE_DB->Query(" SELECT * @@ -165,9 +195,11 @@ $AVE_Template->assign('read_only', 'readonly'); } - if (file_exists($cache_file) && filesize($cache_file)) + $template = self::getTemplate($template_id); + + if ($template) { - $row->template_text = file_get_contents($cache_file); + $row->template_text = $template; } else { @@ -205,13 +237,9 @@ $theme = 'error'; } - $cache = 'template_' . $template_id; - - $cache_file = BASE_DIR . '/tmp/cache/templates/' . $cache . '.inc'; - if ($ok === false) { - if (isset($_REQUEST['ajax']) && $_REQUEST['ajax'] = '1') + if (isAjax()) { echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); exit; @@ -242,10 +270,8 @@ } else { - if (! file_exists(dirname($cache_file))) - mkdir(dirname($cache_file), 0766, true); - - file_put_contents($cache_file, stripslashes(pretty_chars($_REQUEST['template_text']))); + // Сохраняем шаблон в файле + self::setTemplate($template_id); $message = $AVE_Template->get_config_vars('TEMPLATES_SAVED'); $header = $AVE_Template->get_config_vars('TEMPLATES_SUCCESS'); @@ -317,27 +343,17 @@ template_created = '" . time() . "' "); - $iid = $AVE_DB->InsertId(); - - $cache = 'template_' . $iid; - - $cache_file = BASE_DIR . '/tmp/cache/templates/' . $cache . '.inc'; + $template_id = $AVE_DB->InsertId(); - if (! file_exists(dirname($cache_file))) - mkdir(dirname($cache_file), 0766, true); - - file_put_contents($cache_file, stripslashes(pretty_chars($_REQUEST['template_text']))); + // Сохраняем шаблон в файле + self::setTemplate($template_id); reportLog($AVE_Template->get_config_vars('TEMPLATES_REPORT_NEW') . '(' . stripslashes(htmlspecialchars($_REQUEST['template_text'], ENT_QUOTES)) . ') (Id:' . (int)$iid . ')'); - if (!$_REQUEST['next_edit']) - { + if (! $_REQUEST['next_edit']) header('Location:index.php?do=templates&cp=' . SESSION); - } else - { - header('Location:index.php?do=templates&action=edit&Id=' . (int)$template_new . '&cp=' . SESSION); - } + header('Location:index.php?do=templates&action=edit&Id=' . (int)$template_new . '&cp=' . SESSION); exit; } diff --git a/class/class.utm.php b/class/class.utm.php new file mode 100644 index 0000000..0cd9081 --- /dev/null +++ b/class/class.utm.php @@ -0,0 +1,121 @@ +parameters as $param) + if (isset($_GET[$param]) && $_GET[$param] != '') + $return = true; + + return $return; + } + + //Создаёт строку с параметрами вот такого вида: utm_source=test; utm_medium=none; utm_campaign=kompaniya1; + private function create_parameters() + { + $content = ''; + foreach($this->parameters as $param){ + + if (isset($_GET[$param]) && $_GET[$param] != '') + { + $content .= $param.'='.$_GET[$param].'; '; + + } + else + { + $content .= $param.'=none; '; + } + } + + return $content; + } + + //Сохраняет переданные параметры, если требуется + //Если utm_history присутствует, то сохраняет utm_last + public function save_parameters() + { + if (isset($_GET['utm_source']) && trim($_GET['utm_source']) != '') + { + setcookie('utm_source', $_GET['utm_source']); + + $this->utm_source = $_GET['utm_source']; + } + + //$utm_history = ''; + + if (! isset($_COOKIE['utm_history']) || $_COOKIE['utm_history'] == '') + { + //Отсутствует utm_history + if($this->check_parameters() == true) + { + + $utm_history = $this->create_parameters(); + setcookie('utm_history', $utm_history, time()+15552000); //На 6 месяцев + setcookie('utm_last', ''); + + $this->utm_history = $utm_history; + } + + } + else + { + //utm_history присутствует + + $this->utm_history = $_COOKIE['utm_history']; + + //Перезапишем utm_last, если есть данные для этого + if($this->check_parameters() == true){ + + $utm_last = $this->create_parameters(); + + if($utm_last != $_COOKIE['utm_history']) + setcookie('utm_last', $utm_last, time()+15552000); //На 6 месяцев + + $this->utm_last = $utm_last; + + } + + } + + return true; + } + + //Возвращает значение cookies + public function get_value($name = '') + { + $name = trim($name); + + if ($name == '' || ! in_array($name, array('utm_history', 'utm_last', 'utm_source'))) + $name = 'utm_history'; + + if (isset($this->$name) && $this->$name != '') + return $this->$name; + + return isset($_COOKIE[$name]) ? $_COOKIE[$name] : ''; + } +} +?> \ No newline at end of file diff --git a/fields/multi_line/field.php b/fields/multi_line/field.php index eadd249..18c3ee6 100644 --- a/fields/multi_line/field.php +++ b/fields/multi_line/field.php @@ -14,7 +14,7 @@ // Многострочное function get_field_multi_line($field_value, $action, $field_id=0, $tpl='', $tpl_empty=0, &$maxlength=null, $document_fields=array(), $rubric_id=0, $default=null, $_tpl = null) { - global $AVE_Template, $AVE_Document; + global $AVE_Template; $fld_dir = dirname(__FILE__) . '/'; @@ -31,23 +31,16 @@ switch ($action) { case 'edit': - if (isset($_COOKIE['no_wysiwyg']) && $_COOKIE['no_wysiwyg'] == 1) + if (isset($_REQUEST['multiedit']) && ($_REQUEST['multiedit'] === true)) { - $field = ''; - $field .= ''; + $oCKeditor = new CKeditor(); + $oCKeditor->returnOutput = true; + $oCKeditor->config['toolbar'] = 'Verysmall'; + $oCKeditor->config['height'] = 250; + $config = array(); + $field = $oCKeditor->editor('data['.$_REQUEST['Id'].'][feld][' . $field_id . ']', $field_value, $config); } else - { - if (isset($_REQUEST['outside']) && ($_REQUEST['outside'] === true)) - { - $oCKeditor = new CKeditor(); - $oCKeditor->returnOutput = true; - $oCKeditor->config['toolbar'] = 'Verysmall'; - $oCKeditor->config['height'] = 250; - $config = array(); - $field = $oCKeditor->editor('data['.$_REQUEST['Id'].'][feld][' . $field_id . ']', $field_value, $config); - } - else { $oCKeditor = new CKeditor(); $oCKeditor->returnOutput = true; @@ -56,17 +49,19 @@ $config = array(); $field = $oCKeditor->editor('feld[' . $field_id . ']', $field_value, $config); } - } $res = $field; break; case 'doc': - case 'req': $res = get_field_default($field_value, $action, $field_id, $tpl, $tpl_empty, $maxlength, $document_fields, $rubric_id); $res = document_pagination($res); break; + case 'req': + $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 f6b2990..a2bd923 100644 --- a/fields/multi_line_simple/field.php +++ b/fields/multi_line_simple/field.php @@ -18,34 +18,29 @@ $fld_dir = dirname(__FILE__) . '/'; - $lang_file = $fld_dir . 'lang/' . (defined('ACP') ? $_SESSION['admin_language'] : $_SESSION['user_language']) . '.txt'; + $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; + $res = null; switch ($action) { case 'edit': - if (isset($_COOKIE['no_wysiwyg']) && $_COOKIE['no_wysiwyg'] == 1) + if (isset($_REQUEST['multiedit']) && ($_REQUEST['multiedit'] === true)) { - $field = ''; - $field .= ''; + $oCKeditor = new CKeditor(); + $oCKeditor->returnOutput = true; + $oCKeditor->config['toolbar'] = 'Verysmall'; + $oCKeditor->config['height'] = 250; + $config = array(); + $field = $oCKeditor->editor('data['.$_REQUEST['Id'].'][feld][' . $field_id . ']', $field_value, $config); } else - { - if (isset($_REQUEST['outside']) && ($_REQUEST['outside'] === true)) - { - $oCKeditor = new CKeditor(); - $oCKeditor->returnOutput = true; - $oCKeditor->config['toolbar'] = 'Verysmall'; - $oCKeditor->config['height'] = 250; - $config = array(); - $field = $oCKeditor->editor('data['.$_REQUEST['Id'].'][feld][' . $field_id . ']', $field_value, $config); - } - else { $oCKeditor = new CKeditor(); $oCKeditor->returnOutput = true; @@ -54,21 +49,24 @@ $config = array(); $field = $oCKeditor->editor('feld[' . $field_id . ']', $field_value, $config); } - } $res = $field; break; case 'doc': - case 'req': $res = get_field_default($field_value,$action,$field_id,$tpl,$tpl_empty,$maxlength,$document_fields,$rubric_id); $res = document_pagination($res); break; + case 'req': + $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; } + return ($res ? $res : $field_value); } ?> \ No newline at end of file diff --git a/fields/multi_line_slim/field.php b/fields/multi_line_slim/field.php index f9b3695..abb1ade 100644 --- a/fields/multi_line_slim/field.php +++ b/fields/multi_line_slim/field.php @@ -12,40 +12,35 @@ */ // Многострочное (Слим) - function get_field_multi_line_slim($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_multi_line_slim($field_value, $action, $field_id=0, $tpl='', $tpl_empty=0, &$maxlength=null, $document_fields=array(), $rubric_id=0, $default=null, $_tpl=null) { - global $AVE_Template, $AVE_Document; + global $AVE_Template; $fld_dir = dirname(__FILE__) . '/'; - $lang_file = $fld_dir . 'lang/' . (defined('ACP') ? $_SESSION['admin_language'] : $_SESSION['user_language']) . '.txt'; + $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; + $res = null; switch ($action) { case 'edit': - if (isset($_COOKIE['no_wysiwyg']) && $_COOKIE['no_wysiwyg'] == 1) + if (isset($_REQUEST['multiedit']) && ($_REQUEST['multiedit'] === true)) { - $field = ''; - $field .= ''; + $oCKeditor = new CKeditor(); + $oCKeditor->returnOutput = true; + $oCKeditor->config['toolbar'] = 'Verysmall'; + $oCKeditor->config['height'] = 250; + $config = array(); + $field = $oCKeditor->editor('data['.$_REQUEST['Id'].'][feld][' . $field_id . ']', $field_value, $config); } else - { - if (isset($_REQUEST['outside']) && ($_REQUEST['outside'] === true)) - { - $oCKeditor = new CKeditor(); - $oCKeditor->returnOutput = true; - $oCKeditor->config['toolbar'] = 'Verysmall'; - $oCKeditor->config['height'] = 250; - $config = array(); - $field = $oCKeditor->editor('data['.$_REQUEST['Id'].'][feld][' . $field_id . ']', $field_value, $config); - } - else { $oCKeditor = new CKeditor(); $oCKeditor->returnOutput = true; @@ -54,22 +49,24 @@ $config = array(); $field = $oCKeditor->editor('feld[' . $field_id . ']', $field_value, $config); } - } $res = $field; break; case 'doc': - case 'req': $res = get_field_default($field_value,$action,$field_id,$tpl,$tpl_empty,$maxlength,$document_fields,$rubric_id); $res = document_pagination($res); break; + case 'req': + $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; } - return ($res ? $res : $field_value); + return ($res ? $res : $field_value); } ?> \ No newline at end of file diff --git a/fields/tags/field.php b/fields/tags/field.php new file mode 100644 index 0000000..94da345 --- /dev/null +++ b/fields/tags/field.php @@ -0,0 +1,224 @@ + 0 + ? $rubric_id + : $_REQUEST['rubric_id'] + ? (int)$_REQUEST['rubric_id'] + : $AVE_DB->Query("SELECT rubric_id FROM ".PREFIX."_documents WHERE Id = '".$_REQUEST['Id']."'")->GetCell(); + + $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'); + + switch ($action) + { + case 'edit': + $sql = " + SELECT DISTINCT + tag + FROM + ".PREFIX."_document_tags + WHERE + rubric_id = '".$rubric_id."' + ORDER BY tag ASC + "; + + $query = $AVE_DB->Query($sql); + + $field_tags = array(); + + while ($row = $query->GetCell()) + array_push($field_tags, $row); + + $field_value = explode('|', $field_value); + $field_value = array_diff($field_value, array('')); + + $total = count($field_tags); + + $field_points = array(ceil($total/4), 2*ceil($total/4), 3*ceil($total/4)); + + $AVE_Template->assign('field_points', $field_points); + $AVE_Template->assign('field_tags', $field_tags); + $AVE_Template->assign('field_dir', $fld_name); + $AVE_Template->assign('field_id', $field_id); + $AVE_Template->assign('field_value', $field_value); + + $tpl_file = get_field_tpl($tpl_dir, $field_id, 'admin', $_tpl); + + return $AVE_Template->fetch($tpl_file); + break; + + case 'doc': + + $AVE_Template->config_load($lang_file, 'public'); + + if ($tpl_empty) + { + $field_value = explode('|', $field_value); + $field_value = array_diff($field_value, array('')); + $field_value = array_values($field_value); + } + else + { + $field_param = explode('|', $field_value); + $field_param = array_diff($field_param, array('')); + $field_param = array_values($field_param); + $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', $_tpl); + + if ($tpl_empty && $tpl_file) + { + $AVE_Template->assign('field_id', $field_id); + $AVE_Template->assign('field_default', $default); + $AVE_Template->assign('field_value', $field_value); + + return $AVE_Template->fetch($tpl_file); + } + + return $field_value; + break; + + case 'req': + + $AVE_Template->config_load($lang_file, 'public'); + + if ($tpl_empty) + { + $field_value = explode('|', $field_value); + $field_value = array_diff($field_value, array('')); + $field_value = array_values($field_value); + } + else + { + $field_param = explode('|', $field_value); + $field_param = array_diff($field_param, array('')); + $field_param = array_values($field_param); + $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', $_tpl); + + if ($tpl_empty && $tpl_file) + { + $AVE_Template->assign('field_id', $field_id); + $AVE_Template->assign('field_default', $default); + $AVE_Template->assign('field_value', $field_value); + + return $AVE_Template->fetch($tpl_file); + } + + return $field_value; + break; + + case 'save': + // Регистрируем хук + Hooks::register('DocumentAfterSave', 'afterTagsSave', 10); + + $field_value = tagsValue($field_value); + + if (! empty($field_value)) + $field_value = '|' . implode('|', $field_value) . '|'; + + return $field_value; + + case 'name': + return $AVE_Template->get_config_vars('name'); + + default: + return $field_value; + } + } + + if (! function_exists('tagsValue')) + { + function tagsValue ($field_value) + { + // Если есть выделенные теги + if (! empty($field_value['tags'])) + $tags = $field_value['tags']; + else + $tags = array(); + + unset ($tags['other']); + + // Если есть теги через зяпятую + if (! empty($field_value['tags']['other'])) + { + $tags_new = explode(',', $field_value['tags']['other']); + $tags_new = array_map('trim', $tags_new); + } + else + $tags_new = array(); + + // Совмещаем массивы + $tags = array_merge($tags, $tags_new); + + // Делаем уникальные значения + $field_value = array_unique($tags); + + return $field_value; + } + } + + if (! function_exists('afterTagsSave')) + { + function afterTagsSave ($data) + { + global $AVE_Document; + + foreach ($data['data']['feld'] AS $_k => $_v) + { + if (array_key_exists('tags', $_v)) + { + $tags = tagsValue($_v); + + if (! empty($tags)) + { + $tags = implode(',', $tags); + $AVE_Document->saveTags($data['document_id'], $data['rubric_id'], $tags); + } + } + } + } + } +?> \ No newline at end of file diff --git a/fields/tags/lang/ru.txt b/fields/tags/lang/ru.txt new file mode 100644 index 0000000..f36077a --- /dev/null +++ b/fields/tags/lang/ru.txt @@ -0,0 +1,4 @@ +[admin] +name = "Теги" +new = "Новые теги, через запятую" +notags = "Отсутвуют теги" \ No newline at end of file diff --git a/fields/tags/tpl/field-doc.tpl b/fields/tags/tpl/field-doc.tpl new file mode 100644 index 0000000..8d69782 --- /dev/null +++ b/fields/tags/tpl/field-doc.tpl @@ -0,0 +1,9 @@ +{* + $field_id + $field_value +*} +{if $field_value} +{foreach from=$field_value item=tag} +
    • {$tag}
    • +{/foreach} +{/if} \ No newline at end of file diff --git a/fields/tags/tpl/field-req.tpl b/fields/tags/tpl/field-req.tpl new file mode 100644 index 0000000..8166f56 --- /dev/null +++ b/fields/tags/tpl/field-req.tpl @@ -0,0 +1,5 @@ +{* + $field_id + $field_value +*} +{$field_value} \ No newline at end of file diff --git a/fields/tags/tpl/field.tpl b/fields/tags/tpl/field.tpl new file mode 100644 index 0000000..cdfb25d --- /dev/null +++ b/fields/tags/tpl/field.tpl @@ -0,0 +1,26 @@ +{if $field_tags} +
      +{foreach from=$field_tags item=tag name=tags} + +{if in_array($smarty.foreach.tags.index, $field_points)} +
      +
      +
      +{/if} +{/foreach} +
      +
      +{else} +
        +
      • {#notags#}
      • +
      +{/if} +
      +
      +
      +
      {#new#}
      + +
      +
      \ No newline at end of file diff --git a/functions/func.breadcrumbs.php b/functions/func.breadcrumbs.php index 103fedd..147d518 100644 --- a/functions/func.breadcrumbs.php +++ b/functions/func.breadcrumbs.php @@ -97,7 +97,7 @@ FROM " . PREFIX . "_documents WHERE - Id = '" . $curent_document . "'", -1, 'doc_' . $curent_document + Id = '" . $curent_document . "'", -1, 'brd_' . $curent_document, true, '.breadcrumbs' ); $row_document = $sql_document->FetchRow(); @@ -131,7 +131,7 @@ FROM " . PREFIX . "_documents WHERE - Id = '" . $current->document_parent . "'", -1, 'doc_' . $current->document_parent + Id = '" . $current->document_parent . "'", -1, 'brd_' . $current->document_parent, true, '.item' ); $row_doc = $sql_doc->FetchRow(); diff --git a/functions/func.common.php b/functions/func.common.php index 8407060..e0fc5ae 100755 --- a/functions/func.common.php +++ b/functions/func.common.php @@ -258,7 +258,13 @@ static $settings = null; if ($settings === null) - $settings = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_settings", SYSTEM_CACHE_LIFETIME, 'settings')->FetchAssocArray(); + $settings = $AVE_DB->Query(" + SELECT + # SETTINGS + * + FROM + " . PREFIX . "_settings + ", -1, 'settings', true, '.settings')->FetchAssocArray(); if ($field == '') return $settings; @@ -1101,6 +1107,8 @@ */ function output_compress($data) { + global $AVE_DB; + $Gzip = strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false; if (HTML_COMPRESSION) @@ -1108,6 +1116,20 @@ if ($Gzip && GZIP_COMPRESSION) { + if ( + ! defined('ONLYCONTENT') + && + UGROUP == 1 + && + defined('PROFILING') && PROFILING + ) + { + $data .= "\r\n" . ""; + $data .= "\r\n" . ""; + $data .= "\r\n" . ""; + $data .= "\r\n" . ""; + } + $content = gzencode($data, 9); header ('Content-Encoding: gzip'); } @@ -1128,4 +1150,80 @@ echo $content; } + + + /** + * Функция создает короткий URL документа для редиректа + * После выполения функции нужно очистить кеш данного документа + * + * @return + */ + function gen_short_link ($length = 1, $doc_id) + { + global $AVE_DB; + + if (! is_numeric($doc_id)) + return false; + + // Проврека на существование редиректа для данного документа + $check_doc = $AVE_DB->Query(" + SELECT + id + FROM + " . PREFIX . "_document_alias_history + WHERE + document_id = '" . $doc_id . "' + ")->GetCell(); + + // Если редирект отсутствует + if (! $check_doc) + { + $characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; + + $short_link = ''; + + for ($i = 0; $i < $length; $i++) + $short_link .= $characters[rand(0, strlen($characters) - 1)]; + + // Проеряем есть такое редирект уже + $exists = $AVE_DB->Query(" + SELECT + id + FROM + " . PREFIX . "_document_alias_history + WHERE + document_alias = '" . $short_link . "' + ")->GetCell(); + + // Если есть, повторяем генерацию + if ($exists) + { + gen_short_link($length, $doc_id); + } + // Иначе заносим в БД + else + { + $AVE_DB->Query(" + INSERT INTO + " . PREFIX . "_document_alias_history + SET + document_id = '" . $doc_id . "', + document_alias = '" . $short_link . "', + document_alias_author = '" . $_SESSION['user_id'] . "', + document_alias_changed = '" . time() . "' + "); + + $AVE_DB->Query(" + UPDATE + " . PREFIX . "_documents + SET + document_short_alias = '" . $short_link . "' + WHERE + Id = '" . $doc_id . "' + "); + } + } + + return true; + } ?> \ No newline at end of file diff --git a/functions/func.documents.php b/functions/func.documents.php index 5d25c4f..23a14f8 100644 --- a/functions/func.documents.php +++ b/functions/func.documents.php @@ -94,14 +94,9 @@ if (! isset ($get_documents_data[$doc_id])) { - $get_documents_data[$doc_id] = $AVE_DB->Query(" - SELECT - * - FROM - " . PREFIX . "_documents - WHERE - Id = '" . $doc_id . "' - ")->FetchAssocArray(); + $get_documents_data[$doc_id] = getDocument($doc_id); + + $get_documents_data[$doc_id] = object2array($get_documents_data[$doc_id]); $get_documents_data[$doc_id]['doc_title'] = $get_documents_data[$doc_id]['document_title']; $get_documents_data[$doc_id]['feld'] = array(); @@ -112,4 +107,40 @@ else return $get_documents_data[$doc_id]; } + + + /** + * Функция отдаёт основные параметры дока + * + * @param int $doc_id - номер id документа + * + * @return object + */ + function getDocument ($doc_id) + { + global $AVE_DB; + + $doc_id = (int)$doc_id; + + if ($doc_id < 1) + return false; + + $sql = " + SELECT + # DOCUMENT = $doc_id + * + FROM + " . PREFIX . "_documents + WHERE + Id = '" . $doc_id . "' + "; + + $cache_time = (defined('CACHE_DOC_FILE') && CACHE_DOC_FILE) + ? -1 + : 0; + + $data = $AVE_DB->Query($sql, $cache_time, 'dat_' . $doc_id, true, '.data')->FetchRow(); + + return $data; + } ?> \ No newline at end of file diff --git a/functions/func.fields.php b/functions/func.fields.php index 167eda5..88bfb21 100644 --- a/functions/func.fields.php +++ b/functions/func.fields.php @@ -42,17 +42,20 @@ /** * Проверка папок /fields/ в модулях, на наличие полей */ - $d = dir(BASE_DIR . '/modules'); - - while (false !== ($entry = $d->read())) + if (is_dir(BASE_DIR . '/modules/')) { - $module_dir = $d->path . '/' . $entry; + $d = dir(BASE_DIR . '/modules'); - if (is_dir($module_dir) && file_exists($module_dir . '/field.php')) - require_once($module_dir . '/field.php'); - } + while (false !== ($entry = $d->read())) + { + $module_dir = $d->path . '/' . $entry; - $d->Close(); + if (is_dir($module_dir) && file_exists($module_dir . '/field.php')) + require_once($module_dir . '/field.php'); + } + + $d->Close(); + } /** @@ -216,7 +219,7 @@ static $alias_field_id = array(); - if(isset($alias_field_id[$id])) + if (isset($alias_field_id[$id])) return $alias_field_id[$id]; $sql = " @@ -352,7 +355,7 @@ if ($field_value != '') { - $field_value = strip_tags($field_value, "

      "); + $field_value = strip_tags($field_value); // "

      " if (is_numeric($length) && $length != 0) { @@ -406,7 +409,7 @@ */ function get_document_fields($document_id, $values = null) { - global $AVE_DB, $request_documents; + global $AVE_DB, $request_documents, $AVE_Core; static $document_fields = array(); @@ -419,42 +422,64 @@ $where = "WHERE doc_field.document_id = '" . $document_id . "'"; - $query=" + $query = " SELECT + # DOC FIELDS = $document_id + doc.document_author_id, doc_field.Id, doc_field.document_id, doc_field.rubric_field_id, + doc_field.field_value, + text_field.field_value as field_value_more, rub_field.rubric_field_alias, rub_field.rubric_field_type, rub_field.rubric_field_default, - doc_field.field_value, - text_field.field_value as field_value_more, - doc.document_author_id, rub_field.rubric_field_title, rub_field.rubric_field_template, rub_field.rubric_field_template_request FROM " . PREFIX . "_document_fields AS doc_field - JOIN " . PREFIX . "_rubric_fields AS rub_field ON doc_field.rubric_field_id = rub_field.Id LEFT JOIN " . PREFIX . "_document_fields_text AS text_field - ON (doc_field.rubric_field_id = text_field.rubric_field_id AND doc_field.document_id = text_field.document_id) + ON (doc_field.rubric_field_id = text_field.rubric_field_id AND doc_field.document_id = text_field.document_id) JOIN " . PREFIX . "_documents AS doc - ON doc.Id = doc_field.document_id + ON doc.Id = doc_field.document_id " . $where; - $sql = $AVE_DB->Query($query, -1, 'doc_'.$document_id); + $cache_id = (int)$AVE_Core->curentdoc->Id; + $cache_id = 'documents/fields/' . (floor($cache_id / 1000)) . '/' . $cache_id; - //Вдруг памяти мало!!!! - if (memory_panic() && (count($document_fields) > 3)) + $cache_file = md5($query) . '.fields'; + + $cache_dir = BASE_DIR . '/tmp/cache/sql/' . (trim($cache_id) > '' + ? trim($cache_id) . '/' + : substr($cache_file, 0, 2) . '/' . substr($cache_file, 2, 2) . '/' . substr($cache_file, 4, 2) . '/'); + + // Наличие файла + if (file_exists($cache_dir . $cache_file)) { - $document_fields = array(); + // Получаем время создания файла + $file_time = filemtime($cache_dir . $cache_file); + + // Получаем время для проверки + $cache_time = $AVE_Core->curentdoc->rubric_changed_fields; + + // Сравниваем временные метки + if (! $cache_time || $cache_time > $file_time) + unlink ($cache_dir . $cache_file); } + // Безусловный кеш + $sql = $AVE_DB->Query($query, -1, 'fld_' . $document_id, true, '.fields'); + + // Вдруг памяти мало!!!! + if (memory_panic() && (count($document_fields) > 3)) + $document_fields = array(); + while ($row = $sql->FetchAssocArray()) { $row['tpl_req_empty'] = (trim($row['rubric_field_template_request']) == ''); diff --git a/functions/func.navigation.php b/functions/func.navigation.php index cc4bc53..ad304f5 100644 --- a/functions/func.navigation.php +++ b/functions/func.navigation.php @@ -29,6 +29,7 @@ // Достаем для проверки тип меню $sql = " SELECT + # NAVIGATION = $navi_id expand_ext FROM ".PREFIX."_navigation @@ -38,7 +39,7 @@ alias = '" . $navi_id . "' "; - $expnad_ext = $AVE_DB->Query($sql, SYSTEM_CACHE_LIFETIME, 'nav_' . $navi_id)->GetCell(); + $expnad_ext = $AVE_DB->Query($sql, -1, 'nav_' . $navi_id, true, '.naviagtion')->GetCell(); // извлекаем level из аргумента $navi_print_level = (! empty($navi_tag[2])) @@ -47,7 +48,7 @@ $navi = ''; - $cache_file = BASE_DIR . '/tmp/cache/sql/nav/template-' . $navi_id . '.cache'; + $cache_file = BASE_DIR . '/tmp/cache/sql/navigations/' . $navi_id . '/template.cache'; // Если включен DEV MODE, то отключаем кеширование запросов if (defined('DEV_MODE') AND DEV_MODE || $expnad_ext != 1) @@ -108,18 +109,28 @@ // запрос для выборки по текущему алиасу $sql_doc_active_alias = ''; + $url_suff = ''; + + if (defined('URL_SUFF') AND URL_SUFF) + { + $url_suff = " + OR nav.alias = '" . $alias . URL_SUFF . "' + OR nav.alias = '/" . $alias . URL_SUFF . "' + "; + } + if ($AVE_Core->curentdoc->Id == $doc_active_id) { $sql_doc_active_alias = " OR nav.alias = '" . $alias . "' OR nav.alias = '/" . $alias . "' - OR nav.alias = '" . $alias . URL_SUFF . "' - OR nav.alias = '/" . $alias . URL_SUFF . "' + " . $url_suff . " "; } $navi_active = $AVE_DB->Query(" - SELECT CONCAT_WS( + SELECT + CONCAT_WS( ';', CONCAT_WS(',', nav.navigation_item_id, nav.parent_id, nav2.parent_id), CONCAT_WS(',', nav.level), @@ -201,7 +212,7 @@ } } - $cache_items = BASE_DIR . '/tmp/cache/sql/nav/items-' . $navi_id . '.cache'; + $cache_items = BASE_DIR . '/tmp/cache/sql/navigations/' . $navi_id . '/items.cache'; $navi_items = array(); @@ -216,7 +227,8 @@ { //-- Запрос пунктов меню $sql = " - SELECT * + SELECT + * FROM " . PREFIX . "_navigation_items WHERE @@ -246,7 +258,8 @@ { //-- Запрос пунктов меню $sql = " - SELECT * + SELECT + * FROM " . PREFIX . "_navigation_items WHERE @@ -464,7 +477,7 @@ if (empty($navi)) $navi = ''; - $navi .= eval2var(' ?>' . $item . '' . $item . '<'.'?php '); } // Вставляем все пункты уровня в шаблон уровня diff --git a/functions/func.parserequest.php b/functions/func.parserequest.php index 82ed43c..13a782e 100755 --- a/functions/func.parserequest.php +++ b/functions/func.parserequest.php @@ -16,14 +16,17 @@ global $AVE_DB; // Получаем информацию о запросе - $reqest_settings = $AVE_DB->Query(" + $sql = " SELECT + #REQUEST SETTINGS = $id * FROM " . PREFIX . "_request WHERE " . (is_numeric($id) ? 'Id' : 'request_alias') . " = '" . $id . "' - ", -1, 'request/settings/' . $id)->FetchRow(); + "; + + $reqest_settings = $AVE_DB->Query($sql, -1, 'rqs_' . $id, true, '.settings')->FetchRow(); // Выходим, если нет запроса if (! is_object($reqest_settings)) @@ -197,7 +200,7 @@ Id = '" . $id . "' "); - $AVE_DB->clear_request($id); + $AVE_DB->clearRequest($id); } return @$retval; @@ -275,7 +278,7 @@ if ($maxlength != '') { - if ($maxlength == 'more' || $maxlength == 'esc'|| $maxlength == 'img') + if ($maxlength == 'more' || $maxlength == 'esc'|| $maxlength == 'img' || $maxlength == 'strip') { if ($maxlength == 'more') { @@ -291,6 +294,13 @@ { $field_value = getImgSrc($field_value); } + elseif ($maxlength == 'strip') + { + $field_value = str_replace(array("\r\n","\n","\r"), " ", $field_value); + $field_value = strip_tags($field_value, REQUEST_STRIP_TAGS); + $field_value = preg_replace('/ +/', ' ', $field_value); + $field_value = trim($field_value); + } } elseif (is_numeric($maxlength)) { @@ -336,22 +346,23 @@ // Функция получения элемента запроса function showrequestelement($mixed, $template = '', $tparams = '') { - global $AVE_DB, $req_item_num, $params_of_teaser, $use_cache; + global + $AVE_DB, + $req_item_num, + $params_of_teaser, + $use_cache, + $request_id, + $request_changed, + $request_changed_elements; if (is_array($mixed)) - $mixed = $mixed[1]; + $row = intval($mixed[1]); - $row = (is_object($mixed) ? $mixed : $AVE_DB->Query(" - SELECT - a.* - FROM - " . PREFIX . "_documents AS a - WHERE - a.Id = '" . intval($mixed) . "' - GROUP BY - a.Id - LIMIT 1 - ")->FetchRow()); + $row = (is_object($mixed) + ? $mixed + : getDocument($row)); + + unset ($mixed); if (! $row) return ''; @@ -360,17 +371,47 @@ if ($tparams != '') { - $tparams_id = $row->Id.md5($tparams); // Создаем уникальный id для каждого набора параметров + $tparams_id = $row->Id . md5($tparams); // Создаем уникальный id для каждого набора параметров $params_of_teaser[$tparams_id] = array(); // Для отмены лишних ворнингов $tparams = trim($tparams,'[]:'); // Удаляем: слева ':[', справа ']' $params_of_teaser[$tparams_id] = explode('|',$tparams); // Заносим параметры в массив уникального id } - $template = ($template > '' ? $template : $AVE_DB->Query( - "SELECT rubric_teaser_template FROM " . PREFIX . "_rubrics WHERE Id='" . intval($row->rubric_id) . "'" - )->GetCell()); + $sql = " + SELECT + rubric_teaser_template + FROM + " . PREFIX . "_rubrics + WHERE + Id = '" . intval($row->rubric_id) . "' + "; + + $template = ($template > '' + ? $template + : $AVE_DB->Query($sql)->GetCell()); + + $hash = 'g-' . UGROUP; // Группа пользователей + $hash .= 'r-' . $request_id; // ID Запроса + $hash .= 't-' . $row->Id; // ID документа + + $hash = md5($hash); - $cachefile_docid = BASE_DIR . '/tmp/cache/sql/request/' . $row->Id . '/request-' . md5($template) . '.cache'; + $cache_id = 'requests/elements/' . (floor($row->Id / 1000)) . '/' . $row->Id; + + $cachefile_docid = BASE_DIR . '/tmp/cache/sql/' . $cache_id . '/' . $hash . '.element'; + + if (file_exists($cachefile_docid) && isset($use_cache) && $use_cache == 1) + { + $check_file = $request_changed_elements; + + if ($check_file > filemtime($cachefile_docid)) + unlink ($cachefile_docid); + } + else + { + if (file_exists($cachefile_docid)) + unlink ($cachefile_docid); + } // Если включен DEV MODE, то отключаем кеширование запросов if (defined('DEV_MODE') AND DEV_MODE) @@ -378,8 +419,8 @@ if (! file_exists($cachefile_docid)) { - $template = preg_replace("/\[tag:if_notempty:rfld:([a-zA-Z0-9-_]+)]\[(more|esc|img|[0-9-]+)]/u", '<'.'?php if((htmlspecialchars(request_get_document_field(\'$1\', '.$row->Id.', \'$2\', '.(int)$row->rubric_id.'), ENT_QUOTES)) != \'\') { '.'?'.'>', $template); - $template = preg_replace("/\[tag:if_empty:rfld:([a-zA-Z0-9-_]+)]\[(more|esc|img|[0-9-]+)]/u", '<'.'?php if((htmlspecialchars(request_get_document_field(\'$1\', '.$row->Id.', \'$2\', '.(int)$row->rubric_id.'), ENT_QUOTES)) == \'\') { '.'?'.'>', $template); + $template = preg_replace("/\[tag:if_notempty:rfld:([a-zA-Z0-9-_]+)]\[(more|esc|img|strip|[0-9-]+)]/u", '<'.'?php if((htmlspecialchars(request_get_document_field(\'$1\', '.$row->Id.', \'$2\', '.(int)$row->rubric_id.'), ENT_QUOTES)) != \'\') { '.'?'.'>', $template); + $template = preg_replace("/\[tag:if_empty:rfld:([a-zA-Z0-9-_]+)]\[(more|esc|img|strip|[0-9-]+)]/u", '<'.'?php if((htmlspecialchars(request_get_document_field(\'$1\', '.$row->Id.', \'$2\', '.(int)$row->rubric_id.'), ENT_QUOTES)) == \'\') { '.'?'.'>', $template); $template = str_replace('[tag:if:else]', '', $template); $template = str_replace('[tag:/if]', '', $template); @@ -401,7 +442,7 @@ // Парсим теги полей $item = preg_replace_callback( - '/\[tag:rfld:([a-zA-Z0-9-_]+)]\[(more|esc|img|[0-9-]+)]/', + '/\[tag:rfld:([a-zA-Z0-9-_]+)]\[(more|esc|img|strip|[0-9-]+)]/', create_function( '$m', 'return request_get_document_field($m[1], ' . $row->Id . ', $m[2], ' . (int)$row->rubric_id . ');' @@ -411,7 +452,7 @@ // Повторно парсим теги полей $item = preg_replace_callback( - '/\[tag:rfld:([a-zA-Z0-9-_]+)]\[(more|esc|img|[0-9-]+)]/', + '/\[tag:rfld:([a-zA-Z0-9-_]+)]\[(more|esc|img|strip|[0-9-]+)]/', create_function( '$m', 'return request_get_document_field($m[1], ' . $row->Id . ', $m[2], ' . (int)$row->rubric_id . ');' @@ -472,7 +513,6 @@ if ($tparams != '') { // Заменяем tparam в тизере - // $item = preg_replace('/\[tparam:([0-9]+)\]/', '<'.'?php echo $params_of_teaser["'.$tparams_id.'"][$1]'.'?'.'>', $item); // косячная версия, пока оставил $item = preg_replace_callback( '/\[tparam:([0-9]+)\]/', create_function( @@ -715,12 +755,9 @@ $request_where[] = "a.document_published <= UNIX_TIMESTAMP() AND (a.document_expire = 0 OR a.document_expire >= UNIX_TIMESTAMP())"; // Условия запроса - // если используется выпадающий список, получаем строку без сохранения - if (! empty($_POST['req_' . $id]) || ! empty($_SESSION['doc_' . $AVE_Core->curentdoc->Id]['req_' . $id])) - $where_cond = request_get_condition_sql_string($request->Id, false); // если условия пустые, получаем строку с сохранением её в бд - elseif (! $request->request_where_cond) - $where_cond = request_get_condition_sql_string($request->Id, true); + if (! $request->request_where_cond) + $where_cond = request_get_condition_sql_string($request->Id, false); // иначе, берём из запроса else $where_cond = unserialize($request->request_where_cond); @@ -795,73 +832,84 @@ if ($request_select) $request_select_str = ',' . implode(",\r\n",$request_select); - unset($a, $t, $v); + unset ($a, $t, $v); - // Составляем запрос к БД - $sql = " ?> - #REQUEST = $request->Id - SELECT STRAIGHT_JOIN SQL_CALC_FOUND_ROWS - a.* - " . $request_select_str . " - FROM - " . $where_cond['from'] . " - " . (isset($params['USER_FROM']) ? $params['USER_FROM'] : '') . " - " . PREFIX . "_documents AS a - " . implode(' ', $request_join) . " - " . (isset($params['USER_JOIN']) ? $params['USER_FROM'] : '') . " - WHERE - " . $request_where_str . " - GROUP BY a.Id - " . $request_order_str . " - " . $limit_str . " - + SELECT STRAIGHT_JOIN SQL_CALC_FOUND_ROWS + #REQUEST = $request->Id + a.* + " . $request_select_str . " + FROM + " . $where_cond['from'] . " + " . (isset($params['USER_FROM']) ? $params['USER_FROM'] : '') . " + " . PREFIX . "_documents AS a + " . implode(' ', $request_join) . " + " . (isset($params['USER_JOIN']) ? $params['USER_FROM'] : '') . " + WHERE + " . $request_where_str . " + GROUP BY a.Id + " . $request_order_str . " + " . $limit_str . " + 0) + // Убираем дубли в выборе полей + foreach (array_keys($request_join) AS $key) { - $sql_request = str_replace($search, '', $sql_request); + $search = PREFIX . '_document_fields AS t' . $key . ','; + + if (preg_match('/' . $search . '/', $sql_request) > 0) + { + $sql_request = str_replace($search, '', $sql_request); + } } - } - // Если просили просто показать сформированный запрос - if ((isset($params['DEBUG']) && $params['DEBUG'] == 1) || $request->request_show_sql == 1) - { - $return = Debug::_print($sql_request); + // Если просили просто показать сформированный запрос + if ((isset($params['DEBUG']) && $params['DEBUG'] == 1) || $request->request_show_sql == 1) + { + $return = Debug::_print($sql_request); - return $return; + return $return; + } } + else + { + $sql_request = $params['SQL_QUERY']; + } // Выполняем запрос к бд - $sql = $AVE_DB->Query($sql_request, (int)$request->request_cache_lifetime, 'rub_' . $request->rubric_id); + $sql = $AVE_DB->Query($sql_request, (int)$request->request_cache_lifetime, 'rqs_' . $id, true, '.request'); - // Если просили просто вернуть запрос, возвращаем результат + // Если просили просто вернуть резльтат запроса, возвращаем результат if (isset($params['RETURN_SQL']) && $params['RETURN_SQL'] == 1) return $AVE_DB->GetFoundRows(); + $num_items = 0; + // Если есть вывод пагинации, то выполняем запрос на получение кол-ва элементов if ($request->request_show_pagination == 1 || (isset($params['SHOW']) && $params['SHOW'] == 1)) - $num_items = $AVE_DB->NumAllRows($sql_request, (int)$request->request_cache_lifetime, 'rub_' . $request->rubric_id); + $num_items = $AVE_DB->NumAllRows($sql_request, (int)$request->request_cache_lifetime, 'rqs_' . $id); else - $num_items = $AVE_DB->GetFoundRows(); + $num_items = ((isset($params['NO_FOUND_ROWS']) && $params['NO_FOUND_ROWS'] == 1) || ! $request->request_count_items + ? 0 + : $AVE_DB->GetFoundRows()); // Если просили просто вернуть кол-во, возвращаем результат if (isset($params['RETURN_COUNT']) && $params['RETURN_COUNT'] == 1) return $num_items; - unset($sql_request); + unset ($sql_request); // Приступаем к обработке шаблона $main_template = $request->request_template_main; - //-- Если кол-во элементов больше 0 + //-- Если кол-во элементов больше 0, удалаяем лишнее if ($num_items > 0) { $main_template = preg_replace('/\[tag:if_empty](.*?)\[\/tag:if_empty]/si', '', $main_template); @@ -903,12 +951,13 @@ } // Запоминаем глобально - @$GLOBALS['page_id'][$_REQUEST['id']]['apage'] = (@$GLOBALS['page_id'][$_REQUEST['id']]['apage'] > $num_pages + @$GLOBALS['page_id'][$_REQUEST['id']]['apage'] = (isset($GLOBALS['page_id'][$_REQUEST['id']]['apage']) && $GLOBALS['page_id'][$_REQUEST['id']]['apage'] > $num_pages ? @$GLOBALS['page_id'][$_REQUEST['id']]['apage'] : $num_pages); $pagination = ''; + // Если кол-во страниц больше 1й if ($num_pages > 1) { $queries = ''; @@ -976,10 +1025,15 @@ //-- Общее число элементов $items_count = count($rows); - global $req_item_num, $use_cache; + global $req_item_num, $use_cache, $request_id, $request_changed, $request_changed_elements; $use_cache = $request->request_cache_elements; + $request_id = $request->Id; + + $request_changed = $request->request_changed; + $request_changed_elements = $request->request_changed_elements; + $item = ''; foreach ($rows as $row) diff --git a/functions/func.watermarks.php b/functions/func.watermarks.php index dc4e03c..8cd6901 100644 --- a/functions/func.watermarks.php +++ b/functions/func.watermarks.php @@ -1,213 +1,226 @@ > 8) . chr($length & 0xFF); - } - else + /** + * AVE.cms + * + * @package AVE.cms + * @version 3.x + * @filesource + * @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru + * + * @license GPL v.2 + */ + + + /** + * Функция дописывает в JPG файлы IPTC Tag + * + * @param string $rec + * @param string $data + * @param string $value + * @return string + */ + + if (! function_exists('iptc_make_tag')) { - $retval .= chr(0x80) . - chr(0x04) . - chr(($length >> 24) & 0xFF) . - chr(($length >> 16) & 0xFF) . - chr(($length >> 8) & 0xFF) . - chr($length & 0xFF); - } - - return $retval . $value; -} - -/** - * Функция накладывает watermark на заданный файл - * - * @param string $file URL Файла - * @param string $position Позиция - * @param int $transparency Прозарчность - * @return string link - */ -function watermarks($file, $position='center', $transparency=100) { + function iptc_make_tag($rec, $data, $value) + { + $length = strlen($value); + $retval = chr(0x1C) . chr($rec) . chr($data); - global $AVE_DB; + if ($length < 0x8000) + { + $retval .= chr($length >> 8) . chr($length & 0xFF); + } + else + { + $retval .= chr(0x80) . + chr(0x04) . + chr(($length >> 24) & 0xFF) . + chr(($length >> 16) & 0xFF) . + chr(($length >> 8) & 0xFF) . + chr($length & 0xFF); + } - if (!defined('WATERMARKS_DIR') || !defined('WATERMARKS_FILE')) exit(0); + return $retval . $value; + } + } - $save = true; - $margin = 10; + /** + * Функция накладывает watermark на заданный файл + * + * @param string $file URL Файла + * @param string $position Позиция + * @param int $transparency Прозарчность + * @return string link + */ + function watermarks($file, $position='center', $transparency=100) + { + global $AVE_DB; - $file_info = pathinfo($file); + if (! defined('WATERMARKS_DIR') || ! defined('WATERMARKS_FILE')) + return $file; - $watermarkFile = BASE_DIR . '/' . WATERMARKS_FILE; - $watermarkDir = BASE_DIR . '/' . WATERMARKS_DIR; + $save = true; - $imagePath = BASE_DIR . '/' . trim($file_info['dirname'], '/'); - $imageName = $file_info['basename']; + $margin = 10; - $copyPath = $watermarkDir . '/' . trim($file_info['dirname'], '/'); - $copyName = $imageName; + $file_info = pathinfo($file); - if(!is_dir($watermarkDir)) { - @mkdir($watermarkDir, 0777, true); - write_htaccess_deny($watermarkDir); - } + $watermarkFile = BASE_DIR . '/' . WATERMARKS_FILE; + $watermarkDir = BASE_DIR . '/' . WATERMARKS_DIR; - if(file_exists("$copyPath/$copyName") || !file_exists("$imagePath/$imageName")){ - $save = false; - } + $imagePath = BASE_DIR . '/' . trim($file_info['dirname'], '/'); + $imageName = $file_info['basename']; - if(file_exists($watermarkFile) && file_exists("$imagePath/$imageName")){ + $copyPath = $watermarkDir . '/' . trim($file_info['dirname'], '/'); + $copyName = $imageName; - $size_image = getimagesize("$imagePath/$imageName"); - $size_wtmrk = getimagesize($watermarkFile); + if (! file_exists($watermarkDir . $file)) + return $file; - list($xImage, $yImage) = $size_image; - list($xWtmrk, $yWtmrk) = $size_wtmrk; + if (! is_dir($watermarkDir)) + { + @mkdir($watermarkDir, 0777, true); + write_htaccess_deny($watermarkDir); + } - if ($xImage < $xWtmrk || $yImage < $yWtmrk) { + if (file_exists("$copyPath/$copyName") || !file_exists("$imagePath/$imageName")) $save = false; - } else { - $save = true; - } - } - if (file_exists("$copyPath/$copyName")) $save = false; + if (file_exists($watermarkFile) && file_exists("$imagePath/$imageName")) + { + $size_image = getimagesize("$imagePath/$imageName"); + $size_wtmrk = getimagesize($watermarkFile); - if ($save){ - if (!is_dir($copyPath) && !@mkdir($copyPath, 0777, true)) exit(0); - require_once BASE_DIR.'/class/class.thumbnail.php'; - $watermark = new Image_Toolbox("$imagePath/$imageName"); + list($xImage, $yImage) = $size_image; + list($xWtmrk, $yWtmrk) = $size_wtmrk; - if (rename("$imagePath/$imageName", "$copyPath/$copyName")) - { - $old = umask(0); - chmod("$copyPath/$copyName", 0777); - umask($old); + if ($xImage < $xWtmrk || $yImage < $yWtmrk) + $save = false; + else + $save = true; } - switch ($position) + if (file_exists("$copyPath/$copyName")) + $save = false; + + if ($save) { - case 'top': - case 'topcenter': - $xLogoPosition = 'center -'; - $yLogoPosition = 'top +'.$margin; - break; - - case 'topleft': - $xLogoPosition = 'left +'.$margin; - $yLogoPosition = 'top +'.$margin; - break; - - case 'topright': - $xLogoPosition = 'right -'.$margin; - $yLogoPosition = 'top +'.$margin; - break; - - case 'center': - $xLogoPosition = 'center -'; - $yLogoPosition = 'center -'; - break; - - case 'centerleft': - $xLogoPosition = 'left +'.$margin; - $yLogoPosition = 'center -'; - break; - - case 'centerright': - $xLogoPosition = 'right -'.$margin; - $yLogoPosition = 'center -'; - break; - - case 'bottom': - case 'bottomcenter': - $xLogoPosition = 'center -'; - $yLogoPosition = 'bottom -'.$margin; - break; - - case 'bottomleft': - $xLogoPosition = 'left +'.$margin; - $yLogoPosition = 'bottom -'.$margin; - break; - - case 'bottomright': - $xLogoPosition = 'right -'.$margin; - $yLogoPosition = 'bottom -'.$margin; - break; - - case 'repeat': - $xLogoPosition = 'repeat '; - $yLogoPosition = 'repeat '; - break; - - default: - $xLogoPosition = 'center -'; - $yLogoPosition = 'center -'; - break; - } + if (! is_dir($copyPath) && !@mkdir($copyPath, 0777, true)) + return $file; - $watermark->addImage($watermarkFile); - $watermark->blend($xLogoPosition, $yLogoPosition, IMAGE_TOOLBOX_BLEND_COPY, $transparency); - $watermark->save("$imagePath/$imageName"); + require_once BASE_DIR.'/class/class.thumbnail.php'; - if($watermark->_img['main']['type']==2){ - $image = getimagesize("$imagePath/$imageName", $info); - if(!isset($info['APP13'])) + $watermark = new Image_Toolbox("$imagePath/$imageName"); + + if (rename("$imagePath/$imageName", "$copyPath/$copyName")) { + $old = umask(0); + chmod("$copyPath/$copyName", 0777); + umask($old); + } - $sitename = get_settings('site_name'); + switch ($position) + { + case 'top': + case 'topcenter': + $xLogoPosition = 'center -'; + $yLogoPosition = 'top +'.$margin; + break; + + case 'topleft': + $xLogoPosition = 'left +'.$margin; + $yLogoPosition = 'top +'.$margin; + break; + + case 'topright': + $xLogoPosition = 'right -'.$margin; + $yLogoPosition = 'top +'.$margin; + break; + + case 'center': + $xLogoPosition = 'center -'; + $yLogoPosition = 'center -'; + break; + + case 'centerleft': + $xLogoPosition = 'left +'.$margin; + $yLogoPosition = 'center -'; + break; + + case 'centerright': + $xLogoPosition = 'right -'.$margin; + $yLogoPosition = 'center -'; + break; + + case 'bottom': + case 'bottomcenter': + $xLogoPosition = 'center -'; + $yLogoPosition = 'bottom -'.$margin; + break; + + case 'bottomleft': + $xLogoPosition = 'left +'.$margin; + $yLogoPosition = 'bottom -'.$margin; + break; + + case 'bottomright': + $xLogoPosition = 'right -'.$margin; + $yLogoPosition = 'bottom -'.$margin; + break; + + case 'repeat': + $xLogoPosition = 'repeat '; + $yLogoPosition = 'repeat '; + break; + + default: + $xLogoPosition = 'center -'; + $yLogoPosition = 'center -'; + break; + } - // установка IPTC тэгов - $iptc = array( - '2#120' => iconv("UTF-8","WINDOWS-1251",$sitename), - '2#116' => "http://".$_SERVER['SERVER_NAME'] - ); + $watermark->addImage($watermarkFile); + $watermark->blend($xLogoPosition, $yLogoPosition, IMAGE_TOOLBOX_BLEND_COPY, $transparency); + $watermark->save("$imagePath/$imageName"); - // Преобразование IPTC тэгов в двоичный код - $data = ''; + if ($watermark->_img['main']['type'] == 2) + { + $image = getimagesize("$imagePath/$imageName", $info); - foreach($iptc as $tag => $string) + if (! isset($info['APP13'])) { - $tag = substr($tag, 2); - $data .= iptc_make_tag(2, $tag, $string); + $sitename = get_settings('site_name'); + + // установка IPTC тэгов + $iptc = array( + '2#120' => iconv("UTF-8","WINDOWS-1251",$sitename), + '2#116' => "http://".$_SERVER['SERVER_NAME'] + ); + + // Преобразование IPTC тэгов в двоичный код + $data = ''; + + foreach ($iptc AS $tag => $string) + { + $tag = substr($tag, 2); + $data .= iptc_make_tag(2, $tag, $string); + } + + // Встраивание IPTC данных + $content = iptcembed($data, "$imagePath/$imageName"); + + // запись нового изображения в файл + $fp = fopen("$imagePath/$imageName", "wb"); + fwrite($fp, $content); + fclose($fp); } - - // Встраивание IPTC данных - $content = iptcembed($data, "$imagePath/$imageName"); - - // запись нового изображения в файл - $fp = fopen("$imagePath/$imageName", "wb"); - fwrite($fp, $content); - fclose($fp); } + + unset($watermark); } - unset($watermark); + return $file; } - - return $file; -} - -?> +?> \ No newline at end of file diff --git a/inc/config.php b/inc/config.php index 24822e8..0018560 100755 --- a/inc/config.php +++ b/inc/config.php @@ -124,8 +124,8 @@ $GLOBALS['CMS_CONFIG']['SMARTY_USE_SUB_DIRS'] = array('DESCR' => 'Создание папок для кэширования Установите это в false если ваше окружение PHP не разрешает создание директорий от имени Smarty. Поддиректории более эффективны, так что используйте их, если можете.','default'=>true,'TYPE'=>'bool','VARIANT'=>''); $GLOBALS['CMS_CONFIG']['CACHE_DOC_TPL'] = array('DESCR' => 'Кэширование скомпилированных шаблонов документов','default'=>true,'TYPE'=>'bool','VARIANT'=>''); $GLOBALS['CMS_CONFIG']['CACHE_DOC_FILE'] = array('DESCR' => 'Кэширование скомпилированных шаблонов документов в файлах','default'=>true,'TYPE'=>'bool','VARIANT'=>''); - $GLOBALS['CMS_CONFIG']['CACHE_DOC_SQL'] = array('DESCR' => 'Кэширование SQL запроса информации о документе','default'=>0,'TYPE'=>'integer','VARIANT'=>''); - $GLOBALS['CMS_CONFIG']['SYSTEM_CACHE_LIFETIME'] = array('DESCR' => 'Время жизни кеша запроса к настройкам системы (60*60*24*14 - 2 недели)','default'=>0,'TYPE'=>'integer','VARIANT'=>''); + + $GLOBALS['CMS_CONFIG']['SITEMAP_CACHE_LIFETIME'] = array('DESCR' => 'Время жизни кеша для карты сайта (60*60*24*14 - 2 недели)','default'=>0,'TYPE'=>'integer','VARIANT'=>''); $GLOBALS['CMS_CONFIG']['YANDEX_MAP_API_KEY'] = array('DESCR' => 'Yandex MAP API REY','default'=>'','TYPE'=>'string','VARIANT'=>''); $GLOBALS['CMS_CONFIG']['GOOGLE_MAP_API_KEY'] = array('DESCR' => 'Google MAP API REY','default'=>'','TYPE'=>'string','VARIANT'=>''); diff --git a/inc/init.php b/inc/init.php index b824495..0010906 100644 --- a/inc/init.php +++ b/inc/init.php @@ -6,7 +6,7 @@ * @package AVE.cms * @version 3.x * @filesource - * @copyright © 2007-2016 AVE.cms, http://www.ave-cms.ru + * @copyright © 2007-2018 AVE.cms, http://www.ave-cms.ru * * @license GPL v.2 */ @@ -212,9 +212,12 @@ foreach (array(ATTACH_DIR, 'cache', 'backup', 'logs', 'session', 'update') as $dir) write_htaccess_deny(BASE_DIR . '/tmp/' . $dir); - foreach (array('combine', 'module', 'redactor', 'smarty', 'sql', 'templates', 'tpl') as $dir) + foreach (array('check', 'combine', 'module', 'redactor', 'smarty', 'sql', 'tpl') as $dir) write_htaccess_deny(BASE_DIR . '/tmp/cache/' . $dir); + //-- Шаблоны + write_htaccess_deny(BASE_DIR . '/templates/' . DEFAULT_THEME_FOLDER . '/include/'); + global $AVE_DB; //-- Класс для работы с MySQL (Global $AVE_DB) @@ -362,6 +365,7 @@ $sql = $AVE_DB->Query(" SELECT + # LANGS * FROM " . PREFIX . "_settings_lang @@ -369,7 +373,7 @@ lang_status = '1' ORDER BY lang_default ASC - ", SYSTEM_CACHE_LIFETIME, 'langs'); + ", -1, 'langs', true, '.langs'); while ($row = $sql->FetchRow()) { @@ -406,6 +410,12 @@ //-- Класс пагинации require (BASE_DIR . '/class/class.paginations.php'); + // Класс UTM + require (BASE_DIR . '/class/class.utm.php'); + $AVE_Utm = new UTMCookie; + + $AVE_Utm->save_parameters(); + //-- Класс Модулей require (BASE_DIR . '/class/class.modules.php'); $AVE_Module = new AVE_Module; diff --git a/inc/sitemap.php b/inc/sitemap.php index c475486..3723d7f 100644 --- a/inc/sitemap.php +++ b/inc/sitemap.php @@ -17,7 +17,7 @@ define ('BASE_DIR', str_replace("\\", "/", rtrim($_SERVER['DOCUMENT_ROOT'],'/'))); - if (! @filesize(BASE_DIR . '/inc/db.config.php')) + if (! @filesize(BASE_DIR . '/config/db.config.php')) { header ('Location: Location:install/index.php'); exit; @@ -32,15 +32,6 @@ $abs_path = str_ireplace(BASE_DIR, '/', str_replace("\\", "/", dirname(dirname(__FILE__)))); - if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') - { - $domain = 'https://'.$_SERVER['SERVER_NAME']; - } - else - { - $domain = 'http://'.$_SERVER['SERVER_NAME']; - } - // Проверяем настройку на публикацию документов $publish = get_settings('use_doctime') ? 'AND doc.document_published < UNIX_TIMESTAMP() AND doc.document_expire > UNIX_TIMESTAMP()' @@ -67,7 +58,7 @@ // Вытаскиваем кол-во документов $sql = " SELECT STRAIGHT_JOIN SQL_CALC_FOUND_ROWS - COUNT(doc.Id) + COUNT(doc.Id) AS count FROM " . PREFIX . "_documents doc LEFT JOIN @@ -86,7 +77,7 @@ AND (rubperm.user_group_id = 2 AND rubperm.rubric_permission LIKE '%docread%') "; - $num = $AVE_DB->Query($sql)->GetCell(); + $num = $AVE_DB->Query($sql, SITEMAP_CACHE_LIFETIME, 'sitemap')->GetCell(); if ($num > $_end) $parts = ceil($num/$_end); @@ -98,7 +89,7 @@ for ($i = 1; $i <= $parts; $i++): ?> - + Query($sql); + $res = $AVE_DB->Query($sql, SITEMAP_CACHE_LIFETIME, 'sitemap'); echo '' . PHP_EOL; echo '' . PHP_EOL; if ((int)$_REQUEST['id'] == 1): ?> - + weekly 0.8 @@ -150,7 +142,7 @@ FetchAssocArray()): $document_alias = $abs_path . $row['document_alias'] . URL_SUFF; - $document_alias = $domain . str_ireplace($abs_path . '/' . URL_SUFF, '/', $document_alias); + $document_alias = HOST . str_ireplace($abs_path . '/' . URL_SUFF, '/', $document_alias); $date = $row["document_published"] ? date("c", $row["document_published"]) : date("c"); ?> diff --git a/index.php b/index.php index a756426..bd9321f 100755 --- a/index.php +++ b/index.php @@ -178,6 +178,8 @@ if ( ! defined('ONLYCONTENT') && + ! GZIP_COMPRESSION + && UGROUP == 1 && defined('PROFILING') && PROFILING diff --git a/install/data_base.sql b/install/data_base.sql index 4d5ee27..5d87215 100755 --- a/install/data_base.sql +++ b/install/data_base.sql @@ -244,18 +244,18 @@ INSERT INTO `%%PRFX%%_document_fields` VALUES (4, 2, 2, 0, 'Извините, запрошенный Вами документ не найден.', '0');#inst# INSERT INTO `%%PRFX%%_documents` VALUES - (1, 1, 0, 0, '/', '0','Главная', 'Главная страница', 0, 0, 0, 1, '0', '', '', 'index,follow', '3', '0.5', '1', '0', 0, 0, 0, '', '', 'ru', '1', ''), - (2, 1, 0, 0, '404-not-found', '0', '404 - Документ не найден', 'Ошибка 404', 0, 0, 0, 1, '0', '', '', 'noindex,nofollow', '6', '0', '1', '0', 0, 0, 0, '', '', 'ru', '2', '');#inst# + (1, 1, 0, 0, '/', '0', '', 'Главная', 'Главная страница', '0', '0', '0', '1', '0', '', '', 'index,follow', '3', '0.5', '1', '0', '0', '0', '0', '', '', 'ru', '1', ''), + (2, 1, 0, 0, '404-dokument-ne-najden', '0', '', '404 - Документ не найден', 'Ошибка 404', '0', '0', '0', '1', '0', '', '', 'noindex,nofollow', '6', '0', '1', '0', '0', '0', '0', '', '', 'ru', '2', '');#inst# INSERT INTO `%%PRFX%%_navigation` VALUES (1,'main','Основное меню','

    • \n [tag:linkname]\n
    • ','','','
    • \n [tag:linkname]\n
    • ','','','
        \n[tag:content]\n
      ','','','','','','','','1,2,3,4,5','1');#inst# INSERT INTO `%%PRFX%%_navigation_items` VALUES - (1,1,1,'/','Главная','','_self','','','','',0,'1',0,'1');#inst# + (1,1,1,'/','Главная','','_self','','','','','0','1','0','1');#inst# INSERT INTO `%%PRFX%%_rubric_fields` VALUES - (1, 1, 0, 'header', 'Заголовок', 'single_line', 0, 1, '', '', '', '', ''), - (2, 1, 0, 'text', 'Текст', 'multi_line', 0, 2, '', '', '', '', '');#inst# + (1, 1, 0, 'header', 'Заголовок', 'single_line', '0', '1', '', '0', '', '', ''), + (2, 1, 0, 'text', 'Текст', 'multi_line', '0', '2', '', '0', '', '', '');#inst# INSERT INTO `%%PRFX%%_rubric_permissions` VALUES (1, 1, 1, 'alles'), @@ -265,7 +265,7 @@ INSERT INTO `%%PRFX%%_rubric_permissions` VALUES (5, 1, 5, 'docread');#inst# INSERT INTO `%%PRFX%%_rubrics` VALUES - (1,'Основные страницы','','0','

      [tag:fld:header]

      \n[tag:fld:text]',1,1,0,1,'','','','','','','','0','','0',0);#inst# + (1,'Основные страницы','','0','

      [tag:fld:header]

      \n[tag:fld:text]','1','1','0','1','','','','','','','','0','','0','0','0','0');#inst# INSERT INTO `%%PRFX%%_settings` VALUES ( diff --git a/install/index.php b/install/index.php index 7ddbdb4..18fe069 100644 --- a/install/index.php +++ b/install/index.php @@ -227,7 +227,7 @@ define('BASE_DIR', str_replace("\\", "/", dirname(dirname(__FILE__)))); - if (! is_writable(BASE_DIR . '/cache/smarty/')) + if (! is_writable(BASE_DIR . '/tmp/cache/smarty/')) die('Cache folder is not writeable!'); include(BASE_DIR . '/config/db.config.php'); @@ -247,7 +247,8 @@ $db_connect = check_db_connect($config['dbhost'], $config['dbuser'], $config['dbpass'], $config['dbname']); $check_installed = check_installed($config['dbpref']); - if ((true === $db_connect) && $_REQUEST['step'] != 'finish' && check_installed($config['dbpref'])) { + if ((true === $db_connect) && $_REQUEST['step'] != 'finish' && check_installed($config['dbpref'])) + { echo '
      ' . $AVE_Template->get_config_vars('installed') . '
      '; exit; }; @@ -260,14 +261,15 @@ // include_once(BASE_DIR . '/inc/errors.php'); $count_error = sizeof((array) $error_is_required); + if (1 == $count_error) { $AVE_Template->assign('error_header', $AVE_Template->get_config_vars('erroro')); } elseif ($count_error > 1) - { - $AVE_Template->assign('error_header', $AVE_Template->get_config_vars('erroro_more')); - } + { + $AVE_Template->assign('error_header', $AVE_Template->get_config_vars('erroro_more')); + } if ($count_error > 0 && ! (isset($_REQUEST['force']) && 1 == $_REQUEST['force'])) { @@ -482,9 +484,9 @@ $filename = BASE_DIR . '/install/data_demo.sql'; } else - { - $filename = BASE_DIR . '/install/data_base.sql'; - } + { + $filename = BASE_DIR . '/install/data_base.sql'; + } $mysql_connect = @mysqli_connect($config['dbhost'], $config['dbuser'], $config['dbpass']); @mysqli_select_db($mysql_connect, $config['dbname']); @@ -514,11 +516,9 @@ @mysqli_query($mysql_connect, "SET COLLATION_CONNECTION = 'utf8_general_ci'"); @mysqli_query($mysql_connect, $in); } - /* - $auth = base64_encode(serialize(array('id' => '1', 'hash'=>$hash))); - @setcookie('auth', $auth); - */ + $AVE_Template->display('step6.tpl'); + exit; } diff --git a/install/structure_base.sql b/install/structure_base.sql index 2ea4376..93d4f62 100755 --- a/install/structure_base.sql +++ b/install/structure_base.sql @@ -11,6 +11,7 @@ CREATE TABLE `%%PRFX%%_blocks` ( KEY `block_alias` (`block_alias`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;#inst# + CREATE TABLE `%%PRFX%%_countries` ( `Id` mediumint(5) unsigned NOT NULL auto_increment, `country_code` char(2) NOT NULL default 'RU', @@ -20,6 +21,7 @@ CREATE TABLE `%%PRFX%%_countries` ( PRIMARY KEY (`Id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;#inst# + CREATE TABLE `%%PRFX%%_document_fields` ( `Id` int(10) unsigned NOT NULL AUTO_INCREMENT, `rubric_field_id` mediumint(5) unsigned NOT NULL DEFAULT '0', @@ -29,11 +31,12 @@ CREATE TABLE `%%PRFX%%_document_fields` ( `document_in_search` enum('1','0') NOT NULL DEFAULT '1', PRIMARY KEY (`Id`), KEY `document_id` (`document_id`), + KEY `rubric_field_id` (`rubric_field_id`), KEY `field_value` (`field_value`), - KEY `field_number_value` (`field_number_value`), - KEY `rubric_field_id` (`rubric_field_id`) + KEY `field_number_value` (`field_number_value`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# + CREATE TABLE `%%PRFX%%_document_fields_text` ( `Id` int(10) unsigned NOT NULL AUTO_INCREMENT, `rubric_field_id` mediumint(5) unsigned NOT NULL DEFAULT '0', @@ -44,6 +47,7 @@ CREATE TABLE `%%PRFX%%_document_fields_text` ( KEY `rubric_field_id` (`rubric_field_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# + CREATE TABLE `%%PRFX%%_document_keywords` ( `id` int(11) NOT NULL AUTO_INCREMENT, `document_id` int(11) NOT NULL, @@ -53,6 +57,7 @@ CREATE TABLE `%%PRFX%%_document_keywords` ( KEY `keyword` (`keyword`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# + CREATE TABLE `%%PRFX%%_document_remarks` ( `Id` int(10) unsigned NOT NULL auto_increment, `document_id` int(10) unsigned NOT NULL default '0', @@ -67,6 +72,7 @@ CREATE TABLE `%%PRFX%%_document_remarks` ( KEY `document_id` (`document_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# + CREATE TABLE `%%PRFX%%_document_rev` ( `Id` int(10) unsigned NOT NULL AUTO_INCREMENT, `doc_id` mediumint(5) unsigned NOT NULL DEFAULT '0', @@ -77,6 +83,7 @@ CREATE TABLE `%%PRFX%%_document_rev` ( KEY `doc_id` (`doc_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# + CREATE TABLE `%%PRFX%%_documents` ( `Id` int(10) unsigned NOT NULL AUTO_INCREMENT, `rubric_id` mediumint(5) unsigned NOT NULL DEFAULT '0', @@ -84,6 +91,7 @@ CREATE TABLE `%%PRFX%%_documents` ( `document_parent` int(10) unsigned NOT NULL DEFAULT '0', `document_alias` varchar(255) NOT NULL DEFAULT '', `document_alias_history` enum('0','1','2') NOT NULL DEFAULT '0', + `document_short_alias` VARCHAR(10) NOT NULL DEFAULT '', # 3.24 `document_title` varchar(255) NOT NULL DEFAULT '', `document_breadcrum_title` varchar(255) NOT NULL DEFAULT '', `document_published` int(10) unsigned NOT NULL DEFAULT '0', @@ -115,6 +123,7 @@ CREATE TABLE `%%PRFX%%_documents` ( KEY `document_expire` (`document_expire`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# + CREATE TABLE `%%PRFX%%_document_alias_history` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `document_id` int(10) unsigned NOT NULL default '0', @@ -126,15 +135,19 @@ CREATE TABLE `%%PRFX%%_document_alias_history` ( KEY `document_id` (`document_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# + CREATE TABLE `%%PRFX%%_document_tags` ( `id` int(11) NOT NULL AUTO_INCREMENT, + `rubric_id` int(3) NOT NULL, # 3.24 `document_id` int(11) NOT NULL, `tag` varchar(255) NOT NULL, PRIMARY KEY (`id`), + KEY `rubric_id` (`rubric_id`), KEY `document_id` (`document_id`), KEY `tag` (`tag`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# + CREATE TABLE `%%PRFX%%_module` ( `Id` smallint(3) unsigned NOT NULL auto_increment, `ModuleName` char(50) NOT NULL, @@ -152,9 +165,10 @@ CREATE TABLE `%%PRFX%%_module` ( UNIQUE KEY `ModuleName` (`ModuleName`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# + CREATE TABLE `%%PRFX%%_modules_aliases` ( `id` tinyint(5) unsigned NOT NULL AUTO_INCREMENT, - `document_id` int(10) NOT NULL DEFAULT '0', + `document_id` int(10) NOT NULL DEFAULT '0', # 3.24 `module_name` char(50) NOT NULL DEFAULT '', `module_action` varchar(255) NOT NULL DEFAULT '', `module_link` varchar(500) NOT NULL DEFAULT '', @@ -166,6 +180,7 @@ CREATE TABLE `%%PRFX%%_modules_aliases` ( KEY `module_name` (`module_name`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# + CREATE TABLE `%%PRFX%%_navigation` ( `navigation_id` smallint(3) unsigned NOT NULL AUTO_INCREMENT, `alias` varchar(20) NOT NULL, @@ -190,6 +205,7 @@ CREATE TABLE `%%PRFX%%_navigation` ( KEY `alias` (`alias`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# + CREATE TABLE `%%PRFX%%_navigation_items` ( `navigation_item_id` mediumint(5) unsigned NOT NULL AUTO_INCREMENT, `navigation_id` smallint(3) unsigned NOT NULL DEFAULT '0', @@ -212,6 +228,7 @@ CREATE TABLE `%%PRFX%%_navigation_items` ( KEY `navi_item_status` (`status`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# + CREATE TABLE `%%PRFX%%_paginations` ( `id` tinyint(1) unsigned NOT NULL AUTO_INCREMENT, `pagination_name` tinytext, @@ -229,6 +246,7 @@ CREATE TABLE `%%PRFX%%_paginations` ( PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# + CREATE TABLE `%%PRFX%%_request` ( `Id` smallint(3) unsigned NOT NULL AUTO_INCREMENT, `rubric_id` smallint(3) unsigned NOT NULL, @@ -256,11 +274,14 @@ CREATE TABLE `%%PRFX%%_request` ( `request_external` enum('0','1') NOT NULL DEFAULT '0', `request_ajax` enum('0','1') NOT NULL DEFAULT '0', `request_show_sql` enum('0','1') NOT NULL DEFAULT '0', + `request_changed` int(10) unsigned NOT NULL DEFAULT '0', # 3.24 + `request_changed_elements` int(10) unsigned NOT NULL DEFAULT '0', # 3.24 PRIMARY KEY (`Id`), KEY `rubric_id` (`rubric_id`), KEY `request_alias` (`request_alias`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# + CREATE TABLE `%%PRFX%%_request_conditions` ( `Id` mediumint(5) unsigned NOT NULL AUTO_INCREMENT, `request_id` smallint(3) unsigned NOT NULL, @@ -274,6 +295,25 @@ CREATE TABLE `%%PRFX%%_request_conditions` ( KEY `request_id` (`request_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# + +# 3.24 +CREATE TABLE `%%PRFX%%_rubric_breadcrumb` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `rubric_id` smallint(3) unsigned NOT NULL, + `box` varchar(500) NOT NULL DEFAULT '', + `show_main` enum('1','0') NOT NULL DEFAULT '1', + `show_host` enum('1','0') NOT NULL DEFAULT '1', + `sepparator` varchar(255) NOT NULL, + `sepparator_use` enum('1','0') NOT NULL DEFAULT '1', + `link_box` varchar(500) NOT NULL DEFAULT '', + `link_template` varchar(500) NOT NULL DEFAULT '', + `self_box` varchar(500) NOT NULL DEFAULT '', + `link_box_last` enum('1','0') NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + KEY `rubric_id` (`rubric_id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# + + CREATE TABLE `%%PRFX%%_rubric_fields` ( `Id` mediumint(5) unsigned NOT NULL AUTO_INCREMENT, `rubric_id` smallint(3) unsigned NOT NULL, @@ -294,6 +334,7 @@ CREATE TABLE `%%PRFX%%_rubric_fields` ( KEY `rubric_field_alias` (`rubric_field_alias`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# + CREATE TABLE `%%PRFX%%_rubric_fields_group` ( `Id` mediumint(5) unsigned NOT NULL AUTO_INCREMENT, `rubric_id` smallint(3) unsigned NOT NULL, @@ -304,6 +345,7 @@ CREATE TABLE `%%PRFX%%_rubric_fields_group` ( KEY `rubric_id` (`rubric_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# + CREATE TABLE `%%PRFX%%_rubric_permissions` ( `Id` mediumint(5) unsigned NOT NULL AUTO_INCREMENT, `rubric_id` smallint(3) unsigned NOT NULL, @@ -313,6 +355,7 @@ CREATE TABLE `%%PRFX%%_rubric_permissions` ( KEY `rubric_id` (`rubric_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# + CREATE TABLE `%%PRFX%%_rubric_template_cache` ( `id` bigint(15) unsigned NOT NULL AUTO_INCREMENT, `hash` char(32) NOT NULL, @@ -327,6 +370,7 @@ CREATE TABLE `%%PRFX%%_rubric_template_cache` ( KEY `rubric_id` (`rub_id`,`doc_id`,`wysiwyg`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# + CREATE TABLE `%%PRFX%%_rubrics` ( `Id` smallint(3) unsigned NOT NULL AUTO_INCREMENT, `rubric_title` varchar(255) NOT NULL, @@ -348,10 +392,13 @@ CREATE TABLE `%%PRFX%%_rubrics` ( `rubric_description` text NOT NULL, `rubric_meta_gen` enum('0','1') default '0' NOT NULL, `rubric_position` int(11) unsigned NOT NULL DEFAULT '100', + `rubric_changed` int(10) NOT NULL DEFAULT '0', # 3.24 + `rubric_changed_fields` int(10) NOT NULL DEFAULT '0', # 3.24 PRIMARY KEY (`Id`), KEY `rubric_template_id` (`rubric_template_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# + CREATE TABLE `%%PRFX%%_rubric_templates` ( `id` mediumint(5) unsigned NOT NULL AUTO_INCREMENT, `rubric_id` smallint(3) unsigned NOT NULL, @@ -363,6 +410,7 @@ CREATE TABLE `%%PRFX%%_rubric_templates` ( KEY `rubric_id` (`rubric_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# + CREATE TABLE `%%PRFX%%_sessions` ( `sesskey` varchar(32) NOT NULL, `expiry` int(10) unsigned NOT NULL DEFAULT '0', @@ -374,6 +422,7 @@ CREATE TABLE `%%PRFX%%_sessions` ( KEY `expire_datum` (`expire_datum`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;#inst# + CREATE TABLE `%%PRFX%%_settings` ( `Id` tinyint(1) unsigned NOT NULL AUTO_INCREMENT, `site_name` varchar(255) NOT NULL, @@ -421,6 +470,7 @@ CREATE TABLE `%%PRFX%%_settings` ( PRIMARY KEY (`Id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;#inst# + CREATE TABLE `%%PRFX%%_settings_lang` ( `Id` mediumint(5) unsigned NOT NULL AUTO_INCREMENT, `lang_key` varchar(2) NOT NULL DEFAULT 'ru', @@ -432,6 +482,7 @@ CREATE TABLE `%%PRFX%%_settings_lang` ( UNIQUE KEY `lang_key` (`lang_key`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;#inst# + CREATE TABLE `%%PRFX%%_settings_menu` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, @@ -441,6 +492,7 @@ CREATE TABLE `%%PRFX%%_settings_menu` ( PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;#inst# + CREATE TABLE `%%PRFX%%_sysblocks` ( `id` mediumint(5) unsigned NOT NULL AUTO_INCREMENT, `sysblock_name` varchar(255) NOT NULL, @@ -457,6 +509,7 @@ CREATE TABLE `%%PRFX%%_sysblocks` ( KEY `sysblock_alias` (`sysblock_alias`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;#inst# + CREATE TABLE `%%PRFX%%_templates` ( `Id` smallint(3) unsigned NOT NULL AUTO_INCREMENT, `template_title` varchar(255) NOT NULL, @@ -466,6 +519,7 @@ CREATE TABLE `%%PRFX%%_templates` ( PRIMARY KEY (`Id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# + CREATE TABLE `%%PRFX%%_user_groups` ( `user_group` smallint(3) unsigned NOT NULL AUTO_INCREMENT, `user_group_name` char(50) NOT NULL, @@ -476,6 +530,7 @@ CREATE TABLE `%%PRFX%%_user_groups` ( PRIMARY KEY (`user_group`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;#inst# + CREATE TABLE `%%PRFX%%_users` ( `Id` int(10) unsigned NOT NULL AUTO_INCREMENT, `password` char(32) NOT NULL, @@ -513,6 +568,7 @@ CREATE TABLE `%%PRFX%%_users` ( KEY `user_group` (`user_group`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# + CREATE TABLE `%%PRFX%%_users_session` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, @@ -524,6 +580,7 @@ CREATE TABLE `%%PRFX%%_users_session` ( KEY `user_id` (`user_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;#inst# + CREATE TABLE `%%PRFX%%_view_count` ( `id` int(11) NOT NULL AUTO_INCREMENT, `document_id` int(11) NOT NULL, diff --git a/templates/default/css/styles.css b/templates/default/css/styles.css index e69de29..b3b84c8 100644 --- a/templates/default/css/styles.css +++ b/templates/default/css/styles.css @@ -0,0 +1,33 @@ +/* Sticky footer styles +-------------------------------------------------- */ +html { + position: relative; + min-height: 100%; +} +body { + /* Margin bottom by footer height */ + margin-bottom: 60px; +} +.footer { + position: absolute; + bottom: 0; + width: 100%; + /* Set the fixed height of the footer here */ + height: 60px; + line-height: 60px; /* Vertically center the text there */ + background-color: #f5f5f5; +} + + +/* Custom page CSS +-------------------------------------------------- */ +/* Not required for template or sticky footer method. */ + +body > .container { + padding: 60px 15px 0; +} + +.footer > .container { + padding-right: 15px; + padding-left: 15px; +} \ No newline at end of file diff --git a/tmp/update/sql.update.php b/tmp/update/sql.update.php new file mode 100644 index 0000000..b5703b5 --- /dev/null +++ b/tmp/update/sql.update.php @@ -0,0 +1,267 @@ +Query(" + SHOW COLUMNS + FROM + " . PREFIX . "_rubrics + LIKE + 'rubric_changed' + ")->NumRows(); + + $exist = ($check) ? true : false; + + if ($exist === false) + { + $AVE_DB->Real_Query(" + ALTER TABLE + " . PREFIX . "_rubrics + ADD + `rubric_changed` int(10) NOT NULL DEFAULT '0' + AFTER + `rubric_position` + "); + + $AVE_DB->Real_Query(" + UPDATE + " . PREFIX . "_rubrics + SET + `rubric_changed` = UNIX_TIMESTAMP() + "); + } + + // ---------------------------------------------------------------------------------------- + + $check = $AVE_DB->Query(" + SHOW COLUMNS + FROM + " . PREFIX . "_rubrics + LIKE + 'rubric_changed_fields' + ")->NumRows(); + + $exist = ($check) ? true : false; + + if ($exist === false) + { + $AVE_DB->Real_Query(" + ALTER TABLE + " . PREFIX . "_rubrics + ADD + `rubric_changed_fields` int(10) NOT NULL DEFAULT '0' + AFTER + `rubric_changed` + "); + + $AVE_DB->Real_Query(" + UPDATE + " . PREFIX . "_rubrics + SET + `rubric_changed_fields` = UNIX_TIMESTAMP() + "); + } + + // ---------------------------------------------------------------------------------------- + + $check = $AVE_DB->Query(" + SHOW TABLES + LIKE + '" . PREFIX . "_rubric_breadcrumb' + ")->NumRows(); + + $exist = ($check) ? true : false; + + if ($exist === false) + { + $AVE_DB->Real_Query(" + CREATE TABLE `" . PREFIX . "_rubric_breadcrumb` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `rubric_id` smallint(3) unsigned NOT NULL, + `box` varchar(500) NOT NULL DEFAULT '', + `show_main` enum('1','0') NOT NULL DEFAULT '1', + `show_host` enum('1','0') NOT NULL DEFAULT '1', + `sepparator` varchar(255) NOT NULL, + `sepparator_use` enum('1','0') NOT NULL DEFAULT '1', + `link_box` varchar(500) NOT NULL DEFAULT '', + `link_template` varchar(500) NOT NULL DEFAULT '', + `self_box` varchar(500) NOT NULL DEFAULT '', + `link_box_last` enum('1','0') NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + KEY `rubric_id` (`rubric_id`) + ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0; + "); + } + + // ---------------------------------------------------------------------------------------- + + $check = $AVE_DB->Query(" + SHOW COLUMNS + FROM + " . PREFIX . "_request + LIKE + 'request_changed' + ")->NumRows(); + + $exist = ($check) ? true : false; + + if ($exist === false) + { + $AVE_DB->Real_Query(" + ALTER TABLE + " . PREFIX . "_request + ADD + `request_changed` int(10) unsigned NOT NULL DEFAULT '0' + AFTER + `request_show_sql` + "); + + $AVE_DB->Real_Query(" + UPDATE + " . PREFIX . "_request + SET + `request_changed` = UNIX_TIMESTAMP() + "); + } + + // ---------------------------------------------------------------------------------------- + + $check = $AVE_DB->Query(" + SHOW COLUMNS + FROM + " . PREFIX . "_request + LIKE + 'request_changed_elements' + ")->NumRows(); + + $exist = ($check) ? true : false; + + if ($exist === false) + { + $AVE_DB->Real_Query(" + ALTER TABLE + " . PREFIX . "_request + ADD + `request_changed_elements` int(10) unsigned NOT NULL DEFAULT '0' + AFTER + `request_changed` + "); + + $AVE_DB->Real_Query(" + UPDATE + " . PREFIX . "_request + SET + `request_changed_elements` = UNIX_TIMESTAMP() + "); + } + + // ---------------------------------------------------------------------------------------- + + $check = $AVE_DB->Query(" + SHOW COLUMNS + FROM + " . PREFIX . "_documents + LIKE + 'document_short_alias' + ")->NumRows(); + + $exist = ($check) ? true : false; + + if ($exist === false) + { + $AVE_DB->Real_Query(" + ALTER TABLE + " . PREFIX . "_documents + ADD + `document_short_alias` VARCHAR(10) NOT NULL DEFAULT '' + AFTER + `document_alias_history` + "); + } + + // ---------------------------------------------------------------------------------------- + + $check = $AVE_DB->Query(" + SHOW COLUMNS + FROM + " . PREFIX . "_document_tags + LIKE + 'rubric_id' + ")->NumRows(); + + $exist = ($check) ? true : false; + + if ($exist === false) + { + $AVE_DB->Real_Query(" + ALTER TABLE + " . PREFIX . "_document_tags + ADD + `rubric_id` int(3) NOT NULL + AFTER + `id` + "); + } + + // ---------------------------------------------------------------------------------------- + + $check = $AVE_DB->Query(" + SHOW COLUMNS + FROM + " . PREFIX . "_modules_aliases + LIKE + 'document_id' + ")->NumRows(); + + $exist = ($check) ? true : false; + + if ($exist === false) + { + $AVE_DB->Real_Query(" + ALTER TABLE + " . PREFIX . "_modules_aliases + ADD + `document_id` int(10) NOT NULL DEFAULT '0' + AFTER + `id` + "); + } + + + // ---------------------------------------------------------------------------------------- + + $check = $AVE_DB->Query(" + SHOW COLUMNS + FROM + " . PREFIX . "_request + LIKE + 'request_count_items' + ")->NumRows(); + + $exist = ($check) ? true : false; + + if ($exist === false) + { + $AVE_DB->Real_Query(" + ALTER TABLE + " . PREFIX . "_request + ADD + `request_count_items` enum('0','1') NOT NULL DEFAULT '0' + AFTER + `request_use_query` + "); + + $AVE_DB->Real_Query(" + UPDATE + " . PREFIX . "_request + SET + `request_changed_elements` = UNIX_TIMESTAMP() + "); + } + + /* -------------------------------------------------------------------------------------------------------------- */ + /* -------------------------------------------------------3.25---------------------------------------------------- */ + /* -------------------------------------------------------------------------------------------------------------- */ +?> \ No newline at end of file