|
|
|
<?php
|
|
|
|
|
|
|
|
/**
|
|
|
|
* AVE.cms
|
|
|
|
*
|
|
|
|
* @package AVE.cms
|
|
|
|
* @version 3.x
|
|
|
|
* @filesource
|
|
|
|
* @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Подключаем файл шаблонизатора Smarty
|
|
|
|
*/
|
|
|
|
require(BASE_DIR . '/lib/Smarty/Smarty.class.php');
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Расширение класса шаблонизатора Smarty
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
class AVE_Template extends Smarty
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* СВОЙСТВА
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Конструктор
|
|
|
|
*
|
|
|
|
* @param string $template_dir путь к директории шаблонов по умолчанию
|
|
|
|
* @return AVE_Template
|
|
|
|
*/
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* ВНУТРЕННИЕ МЕТОДЫ
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Проверка наличия одноименного шаблона в директории темы дизайна.
|
|
|
|
* При наличии шаблона в директории темы дизайна используется этот шаблон.
|
|
|
|
*
|
|
|
|
* @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);
|
|
|
|
|
|
|
|
return (file_exists($r_tpl) && is_file($r_tpl)) ? $r_tpl : $tpl;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* ВНЕШНИЕ МЕТОДЫ
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Переопределение одноименного метода 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);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Переопределение одноименного метода 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);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Переопределение одноименного метода 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);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function recursivDelete($dir)
|
|
|
|
{
|
|
|
|
$it = new RecursiveDirectoryIterator($dir . '/');
|
|
|
|
$files = new RecursiveIteratorIterator($it, RecursiveIteratorIterator::CHILD_FIRST);
|
|
|
|
|
|
|
|
foreach($files as $file)
|
|
|
|
{
|
|
|
|
if ($file->getFilename() === '.' || $file->getFilename() === '..')
|
|
|
|
continue;
|
|
|
|
|
|
|
|
if ($file->isDir())
|
|
|
|
rmdir($file->getRealPath());
|
|
|
|
else
|
|
|
|
unlink($file->getRealPath());
|
|
|
|
}
|
|
|
|
|
|
|
|
rmdir($dir);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Метод очистки кэша
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
function CacheClear()
|
|
|
|
{
|
|
|
|
global $AVE_DB, $AVE_Template;
|
|
|
|
|
|
|
|
$message = array();
|
|
|
|
|
|
|
|
// Метод очистки кэша
|
|
|
|
if (isset($_REQUEST['templateCache']) && $_REQUEST['templateCache'] == '1')
|
|
|
|
{
|
|
|
|
// Smarty clear cache
|
|
|
|
$this->clear_all_cache();
|
|
|
|
|
|
|
|
foreach (glob($this->cache_dir_root . "/cache_*") as $filename)
|
|
|
|
@unlink($filename);
|
|
|
|
|
|
|
|
write_htaccess_deny($this->cache_dir . '/');
|
|
|
|
|
|
|
|
// Memcached
|
|
|
|
if (MEMCACHED_SERVER && MEMCACHED_PORT)
|
|
|
|
{
|
|
|
|
$m = new Memcached();
|
|
|
|
$m->addServer(MEMCACHED_SERVER, MEMCACHED_PORT);
|
|
|
|
$m->flush();
|
|
|
|
}
|
|
|
|
|
|
|
|
$message[] = $AVE_Template->get_config_vars('TEMPLATES_CACHE_SUCCESS');
|
|
|
|
reportLog($AVE_Template->get_config_vars('TEMPLATES_CACHE_SUCCESS_LOG'));
|
|
|
|
|
|
|
|
// Очищаем кэш сессий в БД в таблице _sessions
|
|
|
|
$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'));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//Метод удаления скомпилированных шаблонов
|
|
|
|
if (isset($_REQUEST['templateCompiledTemplate']) && $_REQUEST['templateCompiledTemplate'] == '1')
|
|
|
|
{
|
|
|
|
// Smarty compiled cache
|
|
|
|
$this->clear_compiled_tpl();
|
|
|
|
|
|
|
|
write_htaccess_deny($this->compile_dir . '/');
|
|
|
|
|
|
|
|
$filename = $this->compile_dir . '/.htaccess';
|
|
|
|
|
|
|
|
$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')
|
|
|
|
{
|
|
|
|
$this->recursivDelete($this->module_cache_dir);
|
|
|
|
|
|
|
|
mkdir($this->module_cache_dir, 0777, true);
|
|
|
|
|
|
|
|
write_htaccess_deny($this->module_cache_dir . '/');
|
|
|
|
|
|
|
|
$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')
|
|
|
|
{
|
|
|
|
$this->recursivDelete($this->session_dir);
|
|
|
|
|
|
|
|
mkdir($this->session_dir, 0777, true);
|
|
|
|
|
|
|
|
write_htaccess_deny($this->session_dir . '/');
|
|
|
|
|
|
|
|
$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')
|
|
|
|
{
|
|
|
|
$this->recursivDelete($this->sql_cache_dir);
|
|
|
|
|
|
|
|
mkdir($this->sql_cache_dir, 0777, true);
|
|
|
|
|
|
|
|
write_htaccess_deny($this->sql_cache_dir . '/');
|
|
|
|
|
|
|
|
$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') . "<br />" . implode('<br />', $message), 'accept'));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Метод очистки миниатюр
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
function ThumbnailsClear()
|
|
|
|
{
|
|
|
|
global $AVE_DB, $AVE_Template;
|
|
|
|
|
|
|
|
$message = [];
|
|
|
|
|
|
|
|
function rdel_thumb($dirname)
|
|
|
|
{
|
|
|
|
$dirs = glob("$dirname/*", GLOB_ONLYDIR|GLOB_NOSORT);
|
|
|
|
|
|
|
|
$dir_thumb = THUMBNAIL_DIR;
|
|
|
|
|
|
|
|
foreach ($dirs AS $dir)
|
|
|
|
{
|
|
|
|
$tmb = glob("$dir/$dir_thumb", GLOB_ONLYDIR|GLOB_NOSORT);
|
|
|
|
|
|
|
|
foreach ($tmb AS $tmbs)
|
|
|
|
rrmdir($tmbs);
|
|
|
|
|
|
|
|
rdel_thumb($dir);
|
|
|
|
}
|
|
|
|
|
|
|
|
$hid_cat = (glob("$dirname/{.tmb}*", GLOB_ONLYDIR|GLOB_BRACE));
|
|
|
|
|
|
|
|
$hid_tmb = $hid_cat[0];
|
|
|
|
|
|
|
|
foreach (glob("$hid_cat[0]/*.png", GLOB_NOSORT) AS $filename)
|
|
|
|
unlink("$filename");
|
|
|
|
|
|
|
|
rrmdir(BASE_DIR . '/' . UPLOAD_DIR . '/' . THUMBNAIL_DIR);
|
|
|
|
}
|
|
|
|
|
|
|
|
rdel_thumb(BASE_DIR . '/' . UPLOAD_DIR);
|
|
|
|
|
|
|
|
$message[] = $AVE_Template->get_config_vars('TEMPLATES_THUMBNAILS_SUCCESS');
|
|
|
|
|
|
|
|
reportLog($AVE_Template->get_config_vars('TEMPLATES_THUMBNAILS_SUCCESS_LOG'));
|
|
|
|
|
|
|
|
echo json_encode(array($AVE_Template->get_config_vars('TEMPLATES_MESSAGE') . "<br />" . implode('<br />', $message), 'accept'));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
?>
|