assign('date_formats', $date_formats); $AVE_Template->assign('time_formats', $time_formats); // 4. Передаем модифицированный массив с '****' в шаблон $AVE_Template->assign('row', $row); $AVE_Template->assign('available_countries', get_country_list(1)); $AVE_Template->assign('content', $AVE_Template->fetch('settings/settings_main.tpl')); } /** * Записывает события переключения файлов в специальный лог. * * @param string $message Сообщение для записи. * @param string $level Уровень: 'ERROR', 'WARNING', 'INFO'. */ private function _logSwitchEvent($message, $level = 'INFO') { // Абсолютный путь к папке логов. BASE_DIR должен быть определен. $log_dir = BASE_DIR . '/tmp/logs'; $log_file = $log_dir . '/query_switch.log'; // Форматируем сообщение $timestamp = date('Y-m-d H:i:s'); $log_entry = "[" . $timestamp . "] [" . $level . "] " . $message . "\n"; // Проверяем существование директории (и права, если есть возможность) if (!is_dir($log_dir) || !is_writable($log_dir)) { // Если лог-директория недоступна, пытаемся записать в системный лог CMS, если это возможно. @reportLog("ОШИБКА ЛОГА: Не удалось записать событие. Директория '{$log_dir}' недоступна."); return; } // Безопасная запись в файл @file_put_contents($log_file, $log_entry, FILE_APPEND | LOCK_EX); } /** * Переключает файлы запросов (UNLINK+COPY) и очищает связанные таблицы в БД. * * @param bool $use_safe_version Новое значение (использовать безопасную версию). * @param bool $clear_db_flag Флаг: TRUE, если версия действительно изменилась и нужна очистка БД. * @return bool TRUE в случае успеха, FALSE в случае ошибки. */ private function _switchQueryFiles($use_safe_version, $clear_db_flag) { global $AVE_DB; $version_name = $use_safe_version ? 'Безопасная (Safe)' : 'Оригинальная (Original)'; $this->_logSwitchEvent("=== Начат процесс переключения на версию: {$version_name}. ==="); $manifest_path = BASE_DIR . '/inc/query_variants/query_manifest.php'; $manifest = @require $manifest_path; if (!is_array($manifest) || empty($manifest)) { $this->_logSwitchEvent('ОШИБКА: Файл манифеста не загружен или пуст.', 'ERROR'); return false; } $source_dir_name = $use_safe_version ? 'safe_files' : 'original_files'; $source_base = BASE_DIR . '/inc/query_variants/' . $source_dir_name; $error_count = 0; // ИТЕРАЦИЯ И КОПИРОВАНИЕ foreach ($manifest as $relative_path) { $source_file = $source_base . '/' . $relative_path; $target_file = BASE_DIR . '/' . $relative_path; if (!file_exists($source_file)) { $error_count++; $this->_logSwitchEvent("ОШИБКА ФАЙЛА: Отсутствует исходный файл: {$source_file}", 'ERROR'); continue; } $target_dir = dirname($target_file); if (!is_dir($target_dir)) { if (!@mkdir($target_dir, 0775, true)) { $error_count++; $this->_logSwitchEvent("ОШИБКА ФАЙЛА: Не удалось создать директорию: {$target_dir}", 'ERROR'); } } if (file_exists($target_file)) { if (!@unlink($target_file)) { $error_count++; $this->_logSwitchEvent("ОШИБКА ФАЙЛА: Не удалось удалить старый файл: {$target_file}", 'ERROR'); continue; } } if (!@copy($source_file, $target_file)) { $error_count++; $this->_logSwitchEvent("ОШИБКА ФАЙЛА: Не удалось скопировать файл: {$source_file}", 'ERROR'); } } // ЛОГИКА ОЧИСТКИ БАЗЫ ДАННЫХ if ($error_count > 0) { $this->_logSwitchEvent("ПРЕДУПРЕЖДЕНИЕ: Обнаружены ошибки копирования файлов ({$error_count} шт.). Очистка БД не будет выполнена.", 'WARNING'); } if ($clear_db_flag) { $this->_logSwitchEvent("Очистка БД: Обнаружено фактическое переключение версии. Запуск DELETE FROM и ALTER TABLE.", 'INFO'); // 1. Очистка ДОЧЕРНЕЙ таблицы if (@$AVE_DB->query("DELETE FROM `" . PREFIX . "_request_conditions`")) { $this->_logSwitchEvent('Очистка `_request_conditions`: Успех.', 'INFO'); } else { $this->_logSwitchEvent('ОШИБКА БД: Не удалось выполнить DELETE FROM для `_request_conditions`.', 'ERROR'); $error_count++; } // 2. Очистка РОДИТЕЛЬСКОЙ таблицы if (@$AVE_DB->query("DELETE FROM `" . PREFIX . "_request`")) { $this->_logSwitchEvent('Очистка `_request`: Успех.', 'INFO'); } else { $this->_logSwitchEvent('ОШИБКА БД: Не удалось выполнить DELETE FROM для `_request`.', 'ERROR'); $error_count++; } // 3. Сброс СЧЕТЧИКА if (@$AVE_DB->query("ALTER TABLE `" . PREFIX . "_request` AUTO_INCREMENT = 1")) { $this->_logSwitchEvent('Сброс AUTO_INCREMENT: Успех.', 'INFO'); } else { $this->_logSwitchEvent('ОШИБКА БД: Не удалось выполнить ALTER TABLE AUTO_INCREMENT.', 'ERROR'); $error_count++; } } else { $this->_logSwitchEvent("Очистка БД: Переключение версии не обнаружено ({$version_name}). Пропуск очистки.", 'INFO'); } $final_result = ($error_count === 0); $this->_logSwitchEvent("=== Процесс завершен. Результат: " . ($final_result ? 'УСПЕХ' : 'СБОЙ') . " (Ошибок: {$error_count}). ===", $final_result ? 'INFO' : 'ERROR'); return $final_result; } /** * Метод отображения дополнительных настроек * */ function settingsCase() { global $AVE_Template; // 1. Читаем ТЕКУЩЕЕ (старое) значение прямо из файла config.inc.php. // Если файл пуст, мы предполагаем, что используется версия по умолчанию "из коробки" (Safe/TRUE), // так как файлы Safe-версии уже должны быть на месте после установки. $old_query_setting = true; $old_config_content = @file_get_contents(BASE_DIR . '/config/config.inc.php'); if ($old_config_content) { // НАДЕЖНОЕ РЕГУЛЯРНОЕ ВЫРАЖЕНИЕ: Ищет true, false, '1', '0' (в кавычках или без) if (preg_match("/define\('REQUEST_USE_VERSION',\s*(true|false|[']?\d+[']?)\s*\);/i", $old_config_content, $matches)) { $val = strtolower(trim($matches[1], "'")); if ($val === 'true' || $val === '1') { $old_query_setting = true; // Safe Version } else { $old_query_setting = false; // Original Version } } } // Сохраняем настройки if (isset($_REQUEST['more'])) { // >>> ЗАПУСКАЕМ БУФЕРИЗАЦИЮ ВЫВОДА для чистого JSON-ответа (AJAX) if (isAjax()) { ob_start(); } // --- ИНИЦИАЛИЗАЦИЯ ДЛЯ ОБРАБОТКИ НЕ-AJAX ЗАПРОСОВ --- // Получаем текущее значение константы из глобального пространства. // Это необходимо для того, чтобы при клике "Сохранить" (не-AJAX) без изменения чекбокса // значение REQUEST_USE_VERSION не сбрасывалось и не циклилось. $current_constant_value = defined('REQUEST_USE_VERSION') ? (REQUEST_USE_VERSION ? '1' : '0') : '0'; $request_use_version_value = $current_constant_value; // ---------------------------------------------------- $set = ' $type) { foreach($type as $k => $v) { // ИЗВЛЕКАЕМ НОВОЕ ЗНАЧЕНИЕ ДЛЯ ПЕРЕКЛЮЧЕНИЯ ФАЙЛОВ ИЗ ФОРМЫ if ($k == 'REQUEST_USE_VERSION') { // Значение из формы всегда приоритетнее, даже если оно '0' (отмечено 'Нет') $request_use_version_value = $v; } switch ($GLOBALS['CMS_CONFIG'][$key][$k]['TYPE']) { case 'bool' : $v = $v ? 'true' : 'false'; break; case 'integer' : $v = intval($v); break; case 'string' : case 'dropdown' : $v = "'" . add_slashes($v) . "'"; break; default : $v = "'" . add_slashes($v) . "'"; break; } $set .= "\t" . "// " . $GLOBALS['CMS_CONFIG'][$key][$k]['DESCR'] . "\r\n"; $set .= "\t" . "define('" . $k . "', " . $v . ");\r\n\r\n"; } } $set .= '?>'; $result = file_put_contents(BASE_DIR . '/config/config.inc.php', $set); if ($result > 0) { $new_query_setting = (bool)$request_use_version_value; // 2. Определяем, произошло ли фактическое переключение версий $is_a_version_switch = ($new_query_setting !== $old_query_setting); // 3. Вызываем функцию, передавая НОВОЕ значение и ФЛАГ очистки $switch_success = $this->_switchQueryFiles($new_query_setting, $is_a_version_switch); if (!$switch_success) { reportLog('ВНИМАНИЕ: Конфигурация сохранена, но переключение файлов/очистка БД при вызове AJAX не удалось.'); } $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()) { // ОЧИЩАЕМ ВЕСЬ ВЫВОД ПЕРЕД JSON ob_end_clean(); echo json_encode(array( 'message' => $message, 'header' => $header, 'theme' => $theme) ); } else { // 1. Принудительно очищаем кэш PHP-файлов для главного конфига (если доступно) // Это обходной путь, который может понадобиться, если сервер использует Opcache if (function_exists('opcache_invalidate')) { @opcache_invalidate(BASE_DIR . '/config/config.inc.php', true); } // 2. Добавляем "соль" (cache buster) и принудительно сбрасываем состояние $cache_bust = microtime(true); $redirect_url = 'Location:index.php?do=settings&sub=case&cp=' . SESSION . '&t=' . $cache_bust . '#settings'; // 3. Добавляем заголовки, запрещающие кэширование прокси/сервером header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); $AVE_Template->assign('message', $message); header($redirect_url); } 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; // ДОБАВЛЕНО: Принудительно загружаем ключ шифрования. get_smtp_encryption_key(); // ---------------------------------------------------- // 1. ЛОГИКА ГЕНЕРАЦИИ УНИКАЛЬНОГО КЛЮЧА // ---------------------------------------------------- if (isset($_REQUEST['mail_type']) && $_REQUEST['mail_type'] === 'smtp' && !file_exists(BASE_DIR . '/inc/smtp_key.php')) { $new_key = create_smtp_key_file(); if (empty($new_key)) { $message = 'Ошибка: Не удалось создать файл ключа для SMTP-пароля. Проверьте права записи в папке inc/.'; $header = $AVE_Template->get_config_vars('SETTINGS_ERROR'); $theme = 'error'; if (isset($_REQUEST['ajax']) && $_REQUEST['ajax'] == '1') { echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); } else { $AVE_Template->assign('message', $message); header('Location:index.php?do=settings&cp=' . SESSION); } exit; } } // ---------------------------------------------------- // 2. ОБРАБОТКА И ШИФРОВАНИЕ SMTP ПАРОЛЯ (С ИГНОРОМ ****) // ---------------------------------------------------- $smtp_pass_encrypted = null; // Используем null, чтобы пропустить поле в SQL, если оно пустое или **** if (isset($_REQUEST['mail_smtp_pass'])) { $new_smtp_pass_raw = trim($_REQUEST['mail_smtp_pass']); // ИСПРАВЛЕНО: Если пароль не пуст И не равен маске if (!empty($new_smtp_pass_raw) && $new_smtp_pass_raw !== '****') { // ПАРОЛЬ БЫЛ ВВЕДЕН ИЛИ ИЗМЕНЕН: Шифруем новый пароль if (isset($_REQUEST['mail_type']) && $_REQUEST['mail_type'] === 'smtp') { $smtp_pass_encrypted = encrypt_smtp_pass($new_smtp_pass_raw); } else { $smtp_pass_encrypted = $new_smtp_pass_raw; } } // Если $new_smtp_pass_raw === '****' ИЛИ ПУСТОЙ, поле mail_smtp_pass не будет добавлено в SQL. } // ---------------------------------------------------- // 3. ФОРМИРОВАНИЕ УСЛОВНЫХ И ОБЯЗАТЕЛЬНЫХ ПОЛЕЙ // ---------------------------------------------------- $mandatory_fields = array( "mail_smtp_login" => addslashes($_REQUEST['mail_smtp_login']), "mail_smtp_encrypt" => addslashes($_REQUEST['mail_smtp_encrypt']), "mail_sendmail_path" => addslashes($_REQUEST['mail_sendmail_path']), "mail_from_name" => addslashes($_REQUEST['mail_from_name']), "mail_from" => addslashes($_REQUEST['mail_from']), "page_not_found_id" => addslashes($_REQUEST['page_not_found_id']), "mail_port" => addslashes($_REQUEST['mail_port']), "mail_host" => addslashes($_REQUEST['mail_host']), "default_country" => addslashes($_REQUEST['default_country']), "mail_type" => addslashes($_REQUEST['mail_type']), "mail_content_type" => addslashes($_REQUEST['mail_content_type']), "mail_word_wrap" => (int)$_REQUEST['mail_word_wrap'], "mail_new_user" => addslashes($_REQUEST['mail_new_user']), "mail_signature" => addslashes($_REQUEST['mail_signature']), "message_forbidden" => addslashes($_REQUEST['message_forbidden']), "hidden_text" => addslashes($_REQUEST['hidden_text']), "date_format" => addslashes($_REQUEST['date_format']), "time_format" => addslashes($_REQUEST['time_format']), "use_doctime" => intval($_REQUEST['use_doctime']) ); // ДОБАВЛЯЕМ ПАРОЛЬ ТОЛЬКО ЕСЛИ ОН БЫЛ ВВЕДЕН ИЛИ ИЗМЕНЕН if ($smtp_pass_encrypted !== null) { $mandatory_fields["mail_smtp_pass"] = addslashes($smtp_pass_encrypted); } // Поля, которые обновляются ТОЛЬКО, если они были отправлены формой $conditional_keys = array( 'site_name', 'navi_box', 'start_label', 'end_label', 'separator_label', 'next_label', 'prev_label', 'total_label', 'link_box', 'total_box', 'active_box', 'separator_box', 'bread_box', 'bread_show_main', 'bread_show_host', 'bread_sepparator', 'bread_sepparator_use', 'bread_link_box', 'bread_link_template', 'bread_self_box', 'bread_link_box_last' ); $set_clauses = array(); // 1. Формируем обязательные поля foreach ($mandatory_fields as $key => $value) { $set_clauses[] = "{$key} = '{$value}'"; } // 2. Формируем условные поля foreach ($conditional_keys as $key) { if (isset($_REQUEST[$key])) { $value = $_REQUEST[$key]; if (strpos($key, 'bread_') === 0 && (strpos($key, 'show') !== false || strpos($key, 'use') !== false || strpos($key, 'last') !== false)) { $set_clauses[] = "{$key} = '" . ($value != 0 ? 1 : 0) . "'"; } else { $set_clauses[] = "{$key} = '" . addslashes($value) . "'"; } } } // Объединяем все части через запятую для SQL $set_string = implode(",\r\n", $set_clauses); // ---------------------------------------------------- // 4. ВЫПОЛНЕНИЕ SQL-ЗАПРОСА // ---------------------------------------------------- $sql = $AVE_DB->Query(" UPDATE " . PREFIX . "_settings SET " . $set_string . " 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(); $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') { echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); } else { $AVE_Template->assign('message', $message); header('Location:index.php?do=settings&cp=' . SESSION); } 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 ); $countries = array(); while ($row = $sql->FetchAssocArray()) array_push($countries, $row); $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); } $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) { $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')); } /** * Метод отображения списка языков * */ function settingsLanguageList() { 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 "); $language = array(); while ($row = $sql->FetchAssocArray()) array_push($language, $row); $AVE_Template->assign('language', $language); $AVE_Template->assign('content', $AVE_Template->fetch('settings/settings_lang.tpl')); } /** * Метод Редактирования параметров языков * */ function settingsLanguageEdit() { 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')); } 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 { $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' "); } $AVE_DB->clearCache('langs'); echo ""; } function settingsPaginationsList() { global $AVE_DB, $AVE_Template; $sql = " SELECT id, pagination_name FROM " . PREFIX . "_paginations "; $query = $AVE_DB->Query($sql); $items = array(); while ($row = $query->FetchRow()) array_push($items, $row); $AVE_Template->assign('items', $items); $AVE_Template->assign('content', $AVE_Template->fetch('settings/settings_pagination.tpl')); } function settingsPaginationsNew() { global $AVE_DB, $AVE_Template; $pagination = new stdClass(); $AVE_Template->assign('pagination', $pagination); $AVE_Template->assign('content', $AVE_Template->fetch('settings/pagination_edit.tpl')); } function settingsPaginationsEdit() { global $AVE_DB, $AVE_Template; $sql = " SELECT * FROM " . PREFIX . "_paginations WHERE id = '" . $_REQUEST['id'] . "' "; $pagination = $AVE_DB->Query($sql)->FetchRow(); $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) { $sql = " UPDATE " . 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); 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'; } 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 { $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'] . "' "; } $query = $AVE_DB->Query($sql); header('Location:index.php?do=settings&action=paginations&cp=' . SESSION); exit; } function settingsPaginationsDel() { global $AVE_DB, $AVE_Template; if (isset($_REQUEST['id']) && $_REQUEST['id'] > 1) { $sql = " DELETE FROM " . PREFIX . "_paginations WHERE id = '" . $_REQUEST['id'] . "' "; $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 = '') { $dirHandle = opendir($src_dir); while (false !== ($file = readdir($dirHandle))) { if (($file != '.') && ($file != '..')) { if (! is_dir($src_dir . $file)) { $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(); if ($zip->open($archive_path, ZIPARCHIVE::CREATE) !== true) { return false; } $zip = ZipDirectory($src_dir,$zip); $zip->close(); return true; } /** * Функция очищает кеш системных настроек * */ 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'; $_REQUEST['sub'] = (! isset($_REQUEST['sub'])) ? '' : $_REQUEST['sub']; switch ($_REQUEST['sub']) { case 'save': $file = BASE_DIR . '/' . $file_name; $template = stripcslashes($_REQUEST['code_text']); $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 { $message = $AVE_Template->get_config_vars('SETTINGS_SAVED_FILE'); $header = $AVE_Template->get_config_vars('SETTINGS_SUCCESS'); $theme = 'accept'; } if (isAjax()) { echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); } else { $AVE_Template->assign('message', $message); header('Location:index.php?do=settings&cp=' . SESSION); } exit; default: $file = BASE_DIR . '/' . $file_name; $template = file_get_contents($file); $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('content', $AVE_Template->fetch('settings/edit_file.tpl')); } /** * Функция редактирования func.custom.php * */ function editCustom() { global $AVE_Template; $file_name = 'func.custom.php'; $_REQUEST['sub'] = (! isset($_REQUEST['sub'])) ? '' : $_REQUEST['sub']; switch ($_REQUEST['sub']) { case 'save': $file = BASE_DIR . '/functions/' . $file_name; $template = stripcslashes($_REQUEST['code_text']); $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 { $message = $AVE_Template->get_config_vars('SETTINGS_SAVED_FILE'); $header = $AVE_Template->get_config_vars('SETTINGS_SUCCESS'); $theme = 'accept'; } if (isAjax()) { echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); } else { $AVE_Template->assign('message', $message); header('Location:index.php?do=settings&cp=' . SESSION); } exit; default: $file = BASE_DIR . '/functions/' . $file_name; $template = file_get_contents($file); $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('content', $AVE_Template->fetch('settings/edit_file.tpl')); } function showCache () { global $AVE_Template; $AVE_Template->assign('content', $AVE_Template->fetch('settings/settings_cache.tpl')); } function showCacheSize () { global $AVE_Template; switch ($_REQUEST['source']) { case 'smarty': $size = format_size(get_dir_size(BASE_DIR . '/tmp/cache/smarty')); break; case 'block': $size = format_size(get_dir_size(BASE_DIR . '/tmp/cache/sql/block')); break; case 'documents': $size = format_size(get_dir_size(BASE_DIR . '/tmp/cache/sql/documents')); break; case 'compiled': $size = format_size(get_dir_size(BASE_DIR . '/tmp/cache/sql/compile')); break; case 'langs': $size = format_size(get_dir_size(BASE_DIR . '/tmp/cache/sql/langs')); break; case 'modules': $size = format_size(get_dir_size(BASE_DIR . '/tmp/cache/sql/modules')); break; case 'navigations': $size = format_size(get_dir_size(BASE_DIR . '/tmp/cache/sql/navigations')); break; case 'paginations': $size = format_size(get_dir_size(BASE_DIR . '/tmp/cache/sql/paginations')); break; case 'requests': $size = format_size(get_dir_size(BASE_DIR . '/tmp/cache/sql/requests')); break; case 'rubrics': $size = format_size(get_dir_size(BASE_DIR . '/tmp/cache/sql/rubrics')); break; case 'sessions': $size = format_size(get_dir_size(BASE_DIR . '/tmp/session')); break; case 'sysblocks': $size = format_size(get_dir_size(BASE_DIR . '/tmp/cache/sql/sysblocks')); break; case 'settings': $size = format_size(get_dir_size(BASE_DIR . '/tmp/cache/sql/settings')); break; } $return = [ 'size' => $size, 'message' => $AVE_Template->get_config_vars('SETTINGS_SUCCESS'), 'theme' => 'accept' ]; _json($return, true); } function clearCache () { global $AVE_Template; switch ($_REQUEST['source']) { case 'smarty': $cache_dir = BASE_DIR . '/tmp/cache/smarty'; break; case 'block': $cache_dir = BASE_DIR . '/tmp/cache/sql/block'; break; case 'documents': $cache_dir = BASE_DIR . '/tmp/cache/sql/documents'; break; case 'compiled': $cache_dir = BASE_DIR . '/tmp/cache/sql/compile'; break; case 'langs': $cache_dir = BASE_DIR . '/tmp/cache/sql/langs'; break; case 'modules': $cache_dir = BASE_DIR . '/tmp/cache/sql/modules'; break; case 'navigations': $cache_dir = BASE_DIR . '/tmp/cache/sql/navigations'; break; case 'paginations': $cache_dir = BASE_DIR . '/tmp/cache/sql/paginations'; break; case 'requests': $cache_dir = BASE_DIR . '/tmp/cache/sql/requests'; break; case 'rubrics': $cache_dir = BASE_DIR . '/tmp/cache/sql/rubrics'; break; case 'sysblocks': $cache_dir = BASE_DIR . '/tmp/cache/sql/sysblocks'; break; case 'sessions': $cache_dir = BASE_DIR . '/tmp/session'; break; case 'settings': $cache_dir = BASE_DIR . '/tmp/cache/sql/settings'; break; } $remove = rrmdir($cache_dir); $return = [ 'size' => format_size(get_dir_size($cache_dir)), 'header' => $remove ? $AVE_Template->get_config_vars('SETTINGS_CACHE_SUCCESS') : $AVE_Template->get_config_vars('SETTINGS_CACHE_ERROR'), 'message' => $remove ? $AVE_Template->get_config_vars('SETTINGS_CACHE_SUCCESS_T') : $AVE_Template->get_config_vars('SETTINGS_CACHE_ERROR_T'), 'theme' => $remove ? 'accept' : 'error' ]; _json($return, true); } } ?>