Files
ave-cms-alt/class/class.settings.php

1189 lines
36 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* AVE.cms
*
* @package AVE.cms
* @version 3.x
* @filesource
* @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru
*
*/
/**
* Класс управления настройками системы
*/
class AVE_Settings
{
/**
* СВОЙСТВА
*/
/**
* Количество стран на странице
*
* @public int
*/
public $_limit = 15;
/**
* ВНЕШНИЕ МЕТОДЫ
*/
/**
* Метод отображения настроек
*
*/
function settingsShow()
{
global $AVE_Template;
$date_formats = array(
'%d.%m.%Y',
'%d %B %Y',
'%A, %d.%m.%Y',
'%A, %d %B %Y'
);
$time_formats = array(
'%d.%m.%Y, %H:%M',
'%d %B %Y, %H:%M',
'%A, %d.%m.%Y (%H:%M)',
'%A, %d %B %Y (%H:%M)'
);
$settings_data_array = get_settings();
$row = (isset($settings_data_array[0]) && is_array($settings_data_array[0]))
? $settings_data_array[0]
: (is_array($settings_data_array) ? $settings_data_array : array());
if (isset($row['mail_type']) && $row['mail_type'] === 'smtp' && !empty($row['mail_smtp_pass'])) {
$row['mail_smtp_pass'] = '****';
}
$blocked_functions = [];
if (!function_exists('popen')) {
$blocked_functions[] = 'popen()';
}
if (!function_exists('proc_open')) {
$blocked_functions[] = 'proc_open()';
}
if (count($blocked_functions) > 1) {
$blocked_string = implode(' и ', $blocked_functions);
} elseif (count($blocked_functions) === 1) {
$blocked_string = $blocked_functions[0];
} else {
$blocked_string = '';
}
$AVE_Template->assign('blocked_sendmail_funcs', $blocked_string);
$AVE_Template->assign('date_formats', $date_formats);
$AVE_Template->assign('time_formats', $time_formats);
$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')
{
// Абсолютный путь к папке логов.
$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)) {
@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');
if (@$AVE_DB->query("DELETE FROM `" . PREFIX . "_request_conditions`")) {
$this->_logSwitchEvent('Очистка `_request_conditions`: Успех.', 'INFO');
} else {
$this->_logSwitchEvent('ОШИБКА БД: Не удалось выполнить DELETE FROM для `_request_conditions`.', 'ERROR');
$error_count++;
}
if (@$AVE_DB->query("DELETE FROM `" . PREFIX . "_request`")) {
$this->_logSwitchEvent('Очистка `_request`: Успех.', 'INFO');
} else {
$this->_logSwitchEvent('ОШИБКА БД: Не удалось выполнить DELETE FROM для `_request`.', 'ERROR');
$error_count++;
}
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;
$old_query_setting = true;
$old_config_content = @file_get_contents(BASE_DIR . '/config/config.inc.php');
if ($old_config_content) {
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']))
{
if (isAjax()) {
ob_start();
}
$current_constant_value = defined('REQUEST_USE_VERSION') ? (REQUEST_USE_VERSION ? '1' : '0') : '0';
$request_use_version_value = $current_constant_value;
$set = '<?php' . "\r\n\r\n";
foreach($_REQUEST['GLOB'] as $key => $type)
{
foreach($type as $k => $v)
{
if ($k == 'REQUEST_USE_VERSION') {
$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;
$is_a_version_switch = ($new_query_setting !== $old_query_setting);
$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())
{
ob_end_clean();
echo json_encode(array(
'message' => $message,
'header' => $header,
'theme' => $theme)
);
}
else
{
if (function_exists('opcache_invalidate')) {
@opcache_invalidate(BASE_DIR . '/config/config.inc.php', true);
}
$cache_bust = microtime(true);
$redirect_url = 'Location:index.php?do=settings&sub=case&cp=' . SESSION . '&t=' . $cache_bust . '#settings';
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();
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;
}
}
$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;
}
}
}
$mandatory_fields = array(
"mail_smtp_login" => $_REQUEST['mail_smtp_login'],
"mail_smtp_encrypt" => $_REQUEST['mail_smtp_encrypt'],
"mail_sendmail_path" => $_REQUEST['mail_sendmail_path'],
"mail_from_name" => $_REQUEST['mail_from_name'],
"mail_from" => $_REQUEST['mail_from'],
"page_not_found_id" => $_REQUEST['page_not_found_id'],
"mail_port" => $_REQUEST['mail_port'],
"mail_host" => $_REQUEST['mail_host'],
"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'],
"date_format" => $_REQUEST['date_format'],
"time_format" => $_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();
// Формируем обязательные поля
foreach ($mandatory_fields as $key => $value) {
$set_clauses[] = "{$key} = '{$value}'";
}
// Формируем условные поля
foreach ($conditional_keys as $key) {
if (isset($_REQUEST[$key])) {
$value = $_REQUEST[$key];
// Эта ветка обрабатывает числовые/булевы поля, связанные с хлебными крошками (show, use, last)
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} = '" . $value . "'";
}
}
}
// Объединяем все части через запятую для SQL
$set_string = implode(",\r\n", $set_clauses);
// ----------------------------------------------------
// ВЫПОЛНЕНИЕ SQL-ЗАПРОСА
// ----------------------------------------------------
$sql = $AVE_DB->Query("
UPDATE
" . PREFIX . "_settings
SET
" . $set_string . "
WHERE
Id = 1
");
if (is_object($sql) && $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 = "<a href=\"index.php?do=settings&sub=countries&page={s}&cp=" . SESSION . "\">{t}</a>";
$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;
// Инициализируем $items как null, чтобы шаблон работал при добавлении
$items = null;
// получаем ID (используем 'id' или 'Id', если что-то передано)
$lang_id = (int)($_REQUEST['id'] ?? $_REQUEST['Id'] ?? 0);
if ($lang_id > 0)
{
$result = $AVE_DB->Query("
SELECT
*
FROM
" . PREFIX . "_settings_lang
WHERE
Id = '" . $lang_id . "'
");
// получение данных
if (is_object($result)) {
$items = $result->FetchRow();
}
}
// Передаем $items (либо объект, либо null) в шаблон
$AVE_Template->assign('items', $items);
$AVE_Template->assign('content', $AVE_Template->fetch('settings/settings_lang_edit.tpl'));
}
function settingsLanguageEditSave()
{
global $AVE_DB, $AVE_Template;
// 1. Сохранение/Обновление данных языка в БД
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'
");
}
// сохранение загруженного флага
$lang_key = $_REQUEST['lang_key'] ?? '';
if (!empty($lang_key) && isset($_FILES['lang_flag']) && $_FILES['lang_flag']['error'] === UPLOAD_ERR_OK) {
$file = $_FILES['lang_flag'];
// ПУТЬ: BASE_DIR/lib/flags/
$upload_dir = BASE_DIR . '/lib/flags/';
// Проверяем и создаем папку, если нужно
if (!is_dir($upload_dir)) {
@mkdir($upload_dir, 0777, true);
}
// Ожидаем PNG-файл
if ($file['type'] === 'image/png') {
$target_file = $upload_dir . $lang_key . '.png';
// Сохраняем файл
if (move_uploaded_file($file['tmp_name'], $target_file)) {
// Успех
} else {
// Ошибка: проверить права доступа к /lib/flags/
}
}
}
// 3. Очистка кэша и закрытие окна
$AVE_DB->clearCache('langs');
echo "<script>window.opener.location.reload(); window.close();</script>";
}
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);
}
}
?>