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'));
}
/**
* Записывает события переключения файлов в специальный лог.
*
* @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.
// Это гарантирует, что мы видим значение, сохраненное ДО ЭТОГО запроса (для корректного определения switch).
$old_query_setting = false;
$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;
$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']) . "'
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);
}
}
?>