mirror of https://github.com/avecms/AVE.cms.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
664 lines
17 KiB
664 lines
17 KiB
<?php |
|
|
|
/** |
|
* AVE.cms |
|
* |
|
* @package AVE.cms |
|
* @version 3.x |
|
* @filesource |
|
* @copyright © 2007-2017 AVE.cms, http://www.ave-cms.ru |
|
* |
|
*/ |
|
|
|
class AVE_Templates |
|
{ |
|
|
|
public static function setTemplate($template_id) |
|
{ |
|
$cache_file = BASE_DIR . '/templates/' . DEFAULT_THEME_FOLDER . '/include/templates/' . $template_id . '/template.inc'; |
|
|
|
if (isset($_REQUEST['template_text']) && $_REQUEST['template_text'] != '') |
|
$template = stripslashes(pretty_chars($_REQUEST['template_text'])); |
|
else |
|
return false; |
|
|
|
// Проверяем наличие папки шаблона |
|
if (! file_exists(dirname($cache_file))) |
|
mkdir(dirname($cache_file), 0766, true); |
|
|
|
// Сохраняем данные в фвйл |
|
file_put_contents($cache_file, $template); |
|
|
|
return true; |
|
} |
|
|
|
|
|
public static function getTemplate($template_id) |
|
{ |
|
$cache_file = BASE_DIR . '/templates/' . DEFAULT_THEME_FOLDER . '/include/templates/' . $template_id . '/template.inc'; |
|
|
|
if (file_exists($cache_file) && filesize($cache_file)) |
|
$template = file_get_contents($cache_file); |
|
else |
|
$template = false; |
|
|
|
return $template; |
|
} |
|
|
|
|
|
public static function templatesList() |
|
{ |
|
global $AVE_DB, $AVE_Template; |
|
|
|
//-- Сss файлы |
|
$dir = BASE_DIR . '/templates/' . DEFAULT_THEME_FOLDER . '/css/'; |
|
|
|
if ($handle = opendir($dir)) |
|
{ |
|
$css_files = array(); |
|
|
|
$ii = 0; |
|
|
|
while (false !== ($file = readdir($handle))) |
|
{ |
|
if ($file != "." && $file != ".." && substr($file, -3) == 'css') |
|
{ |
|
if(! is_dir($dir ."/" . $file)) |
|
$files[$ii]['filename'] = $file; |
|
|
|
$files[$ii]['filesize'] = filesize($dir ."/" . $file); |
|
$css_files[] = $files; |
|
} |
|
|
|
$ii = $ii++; |
|
} |
|
|
|
closedir($handle); |
|
} |
|
|
|
$AVE_Template->assign('css_files', $css_files); |
|
|
|
unset($dir, $css_files); |
|
|
|
//-- Js файлы |
|
$dir = BASE_DIR . '/templates/' . DEFAULT_THEME_FOLDER . '/js/'; |
|
|
|
if ($handle = opendir($dir)) |
|
{ |
|
$js_files = array(); |
|
|
|
while (false !== ($file = readdir($handle))) |
|
{ |
|
if ($file != "." && $file != ".." && substr($file,-2) == 'js') |
|
{ |
|
if(! is_dir($dir."/".$file)) |
|
$files[$ii]['filename'] = $file; |
|
|
|
$files[$ii]['filesize'] = filesize($dir ."/" . $file); |
|
$js_files[] = $files; |
|
} |
|
} |
|
|
|
closedir($handle); |
|
} |
|
|
|
$AVE_Template->assign('js_files', $js_files); |
|
|
|
unset($dir, $js_files); |
|
|
|
$items = array(); |
|
|
|
$num_tpl = $AVE_DB->Query(" |
|
SELECT |
|
COUNT(*) |
|
FROM |
|
" . PREFIX . "_templates |
|
")->GetCell(); |
|
|
|
$page_limit = (isset($_REQUEST['set']) && is_numeric($_REQUEST['set'])) ? (int)$_REQUEST['set'] : 30; |
|
$pages = ceil($num_tpl / $page_limit); |
|
$set_start = get_current_page() * $page_limit - $page_limit; |
|
|
|
if ($num_tpl > $page_limit) |
|
{ |
|
$page_nav = " <a class=\"pnav\" href=\"index.php?do=templates&page={s}&cp=" . SESSION. "\">{t}</a> "; |
|
$page_nav = get_pagination($pages, 'page', $page_nav); |
|
$AVE_Template->assign('page_nav', $page_nav); |
|
} |
|
|
|
$sql = $AVE_DB->Query(" |
|
SELECT |
|
* |
|
FROM |
|
" . PREFIX . "_templates |
|
LIMIT |
|
" . $set_start . "," . $page_limit . " |
|
"); |
|
|
|
while ($row = $sql->FetchRow()) |
|
{ |
|
$inuse = $AVE_DB->Query(" |
|
SELECT 1 |
|
FROM |
|
" . PREFIX . "_rubrics AS rubric, |
|
" . PREFIX . "_module AS module |
|
WHERE |
|
rubric.rubric_template_id = '" . $row->Id . "' |
|
OR |
|
module.ModuleTemplate = '" . $row->Id . "' |
|
LIMIT 1 |
|
")->NumRows(); |
|
|
|
if (! $inuse) |
|
$row->can_deleted = 1; |
|
|
|
$row->template_author = get_username_by_id($row->template_author_id); |
|
|
|
array_push($items, $row); |
|
|
|
unset($row); |
|
} |
|
|
|
$AVE_Template->assign('items', $items); |
|
$AVE_Template->assign('content', $AVE_Template->fetch('templates/templates.tpl')); |
|
} |
|
|
|
|
|
public static function templatesNew() |
|
{ |
|
global $AVE_Template; |
|
|
|
$AVE_Template->assign('content', $AVE_Template->fetch('templates/form.tpl')); |
|
} |
|
|
|
|
|
public static function templatesEdit() |
|
{ |
|
global $AVE_DB, $AVE_Template; |
|
|
|
$template_id = (int)$_REQUEST['Id']; |
|
|
|
$row = $AVE_DB->Query(" |
|
SELECT |
|
* |
|
FROM |
|
" . PREFIX . "_templates |
|
WHERE |
|
Id = '" . $_REQUEST['Id'] . "' |
|
")->FetchRow(); |
|
|
|
$check_code = strtolower($row->template_text); |
|
|
|
if (is_php_code($check_code) && !check_permission('template_php')) |
|
{ |
|
$AVE_Template->assign('php_forbidden', 1); |
|
$AVE_Template->assign('read_only', 'readonly'); |
|
} |
|
|
|
$template = self::getTemplate($template_id); |
|
|
|
if ($template) |
|
{ |
|
$row->template_text = $template; |
|
} |
|
else |
|
{ |
|
$row->template_text = pretty_chars($row->template_text); |
|
$row->template_text = stripslashes($row->template_text); |
|
} |
|
|
|
$AVE_Template->assign('row', $row); |
|
$AVE_Template->assign('content', $AVE_Template->fetch('templates/form.tpl')); |
|
} |
|
|
|
|
|
public static function templatesSave() |
|
{ |
|
global $AVE_DB, $AVE_Template; |
|
|
|
if (isset($_REQUEST['Id']) AND is_numeric($_REQUEST['Id'])) |
|
{ |
|
$template_id = $_REQUEST['Id']; |
|
|
|
$ok = true; |
|
|
|
$check_code = strtolower($_REQUEST['template_text']); |
|
|
|
if (is_php_code($check_code) && ! check_permission('template_php')) |
|
{ |
|
reportLog($AVE_Template->get_config_vars('TEMPLATES_REPORT_PHP') . ' (' . stripslashes($_REQUEST['template_title']) . ')'); |
|
|
|
$AVE_Template->assign('php_forbidden', 1); |
|
|
|
$ok = false; |
|
|
|
$message = $AVE_Template->get_config_vars('TEMPLATES_REPORT_PHP_ERR'); |
|
$header = $AVE_Template->get_config_vars('TEMPLATES_ERROR'); |
|
$theme = 'error'; |
|
} |
|
|
|
if ($ok === false) |
|
{ |
|
if (isAjax()) |
|
{ |
|
echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); |
|
exit; |
|
} |
|
else |
|
{ |
|
$row->template_text = stripslashes($_REQUEST['template_text']); |
|
$AVE_Template->assign('row', $row); |
|
} |
|
} |
|
else |
|
{ |
|
$sql = $AVE_DB->Query(" |
|
UPDATE |
|
" . PREFIX . "_templates |
|
SET |
|
template_title = '" . $_REQUEST['template_title'] . "', |
|
template_text = '" . addslashes(pretty_chars($_REQUEST['template_text'])) . "' |
|
WHERE |
|
Id = '" . $template_id . "' |
|
"); |
|
|
|
if ($sql === false) |
|
{ |
|
$message = $AVE_Template->get_config_vars('TEMPLATES_SAVED_ERR'); |
|
$header = $AVE_Template->get_config_vars('TEMPLATES_ERROR'); |
|
$theme = 'error'; |
|
} |
|
else |
|
{ |
|
// Сохраняем шаблон в файле |
|
self::setTemplate($template_id); |
|
|
|
$message = $AVE_Template->get_config_vars('TEMPLATES_SAVED'); |
|
$header = $AVE_Template->get_config_vars('TEMPLATES_SUCCESS'); |
|
$theme = 'accept'; |
|
reportLog($AVE_Template->get_config_vars('TEMPLATES_REPORT_CHANGE') . ' - (' . stripslashes($_REQUEST['template_title']) . ')'); |
|
} |
|
|
|
if (isAjax()) |
|
{ |
|
echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); |
|
} |
|
else |
|
{ |
|
$AVE_Template->assign('message', $message); |
|
header('Location:index.php?do=templates&cp=' . SESSION); |
|
} |
|
exit; |
|
} |
|
} |
|
else |
|
{ |
|
$save = true; |
|
|
|
$errors = array(); |
|
|
|
$row = new stdClass(); |
|
|
|
$row->template_text = pretty_chars($_REQUEST['template_text']); |
|
$row->template_text = stripslashes($row->template_text); |
|
$row->template_title = stripslashes($_REQUEST['template_title']); |
|
|
|
if (empty($_REQUEST['template_title'])) |
|
{ |
|
$save = false; |
|
$errors[] = $AVE_Template->get_config_vars('TEMPLATES_REPORT_ERROR_TITLE'); |
|
} |
|
|
|
if (empty($_REQUEST['template_text'])) |
|
{ |
|
$save = false; |
|
$errors[] = $AVE_Template->get_config_vars('TEMPLATES_REPORT_ERROR_TEXT'); |
|
} |
|
|
|
$check_code = strtolower($_REQUEST['template_text']); |
|
|
|
if (is_php_code($check_code) && !check_permission('template_php')) |
|
{ |
|
$AVE_Template->assign('php_forbidden', 1); |
|
$save = false; |
|
} |
|
|
|
if ($save === false) |
|
{ |
|
$AVE_Template->assign('row', $row); |
|
$AVE_Template->assign('errors', $errors); |
|
$AVE_Template->assign('content', $AVE_Template->fetch('templates/form.tpl')); |
|
} |
|
else |
|
{ |
|
$sql = $AVE_DB->Query(" |
|
INSERT |
|
INTO |
|
" . PREFIX . "_templates |
|
SET |
|
Id = '', |
|
template_title = '" . $_REQUEST['template_title'] . "', |
|
template_text = '" . addslashes(pretty_chars($_REQUEST['template_text'])) . "', |
|
template_author_id = '" . $_SESSION['user_id'] . "', |
|
template_created = '" . time() . "' |
|
"); |
|
|
|
$template_id = $AVE_DB->InsertId(); |
|
|
|
// Сохраняем шаблон в файле |
|
self::setTemplate($template_id); |
|
|
|
reportLog($AVE_Template->get_config_vars('TEMPLATES_REPORT_NEW') . '(' . stripslashes(htmlspecialchars($_REQUEST['template_text'], ENT_QUOTES)) . ') (Id:' . (int)$iid . ')'); |
|
|
|
if (! $_REQUEST['next_edit']) |
|
header('Location:index.php?do=templates&cp=' . SESSION); |
|
else |
|
header('Location:index.php?do=templates&action=edit&Id=' . (int)$template_new . '&cp=' . SESSION); |
|
|
|
exit; |
|
} |
|
} |
|
|
|
} |
|
|
|
|
|
public static function templatesDelete() |
|
{ |
|
global $AVE_DB, $AVE_Template; |
|
|
|
$Used = $AVE_DB->Query(" |
|
SELECT |
|
rubric_template_id |
|
FROM |
|
" . PREFIX . "_rubrics |
|
WHERE |
|
rubric_template_id = '" . (int)$_REQUEST['Id'] . "' |
|
")->GetCell(); |
|
|
|
if ($Used >= 1 || $_REQUEST['Id'] == 1) |
|
{ |
|
reportLog($AVE_Template->get_config_vars('TEMPLATES_REPORT_ID_ERR') . ' - (' . templateName((int)$_REQUEST['Id']) . ')'); |
|
|
|
header('Location:index.php?do=templates'); |
|
exit; |
|
} |
|
else |
|
{ |
|
$template_name = templateName((int)$_REQUEST['Id']); |
|
|
|
$AVE_DB->Query(" |
|
DELETE |
|
FROM |
|
" . PREFIX . "_templates |
|
WHERE |
|
Id = '" . (int)$_REQUEST['Id'] . "' |
|
"); |
|
|
|
reportLog($AVE_Template->get_config_vars('TEMPLATES_REPORT_DELETE') . ' - (' . $template_name . ')'); |
|
|
|
header('Location:index.php?do=templates'); |
|
exit; |
|
} |
|
} |
|
|
|
|
|
public static function templatesMulti() |
|
{ |
|
global $AVE_DB, $AVE_Template; |
|
|
|
$ok = true; |
|
|
|
$errors = array(); |
|
|
|
$template_text = $AVE_DB->Query(" |
|
SELECT |
|
template_text |
|
FROM |
|
" . PREFIX . "_templates |
|
WHERE |
|
Id = '" . (int)$_REQUEST['Id'] . "' |
|
")->GetCell(); |
|
|
|
$template_title = $AVE_DB->Query(" |
|
SELECT |
|
template_title |
|
FROM |
|
" . PREFIX . "_templates |
|
WHERE |
|
template_title = '" . $_REQUEST['template_title'] . "' |
|
")->GetCell(); |
|
|
|
if ($template_title != '') |
|
{ |
|
array_push($errors, $AVE_Template->get_config_vars('TEMPLATES_EXIST')); |
|
|
|
$AVE_Template->assign('errors', $errors); |
|
|
|
$ok = false; |
|
} |
|
|
|
if ($_REQUEST['template_title'] == '') |
|
{ |
|
array_push($errors, $AVE_Template->get_config_vars('TEMPLATES_NO_NAME')); |
|
|
|
$AVE_Template->assign('errors', $errors); |
|
|
|
$ok = false; |
|
} |
|
|
|
if ($ok) |
|
{ |
|
$AVE_DB->Query(" |
|
INSERT |
|
INTO |
|
" . PREFIX . "_templates |
|
SET |
|
Id = '', |
|
template_title = '" . $_REQUEST['template_title'] . "', |
|
template_text = '" . addslashes($template_text) . "', |
|
template_author_id = '" . $_SESSION['user_id'] . "', |
|
template_created = '" . time() . "' |
|
"); |
|
|
|
reportLog($AVE_Template->get_config_vars('TEMPLATES_REPORT_COPY') . ' - (<strong>' . $_REQUEST['template_title'].'</strong> - '.templateName((int)$_REQUEST['Id']) . ')'); |
|
|
|
header('Location:index.php?do=templates'.'&cp=' . SESSION); |
|
exit; |
|
} |
|
|
|
$row = new stdClass(); |
|
|
|
$row->template_text = pretty_chars($template_text); |
|
$row->template_text = stripslashes($template_text); |
|
$row->template_title = stripslashes($_REQUEST['template_title']); |
|
|
|
$AVE_Template->assign('row', $row); |
|
$AVE_Template->assign('content', $AVE_Template->fetch('templates/form.tpl')); |
|
} |
|
|
|
|
|
public static function templatesEditCss() |
|
{ |
|
global $AVE_Template; |
|
|
|
$_REQUEST['sub'] = (! isset($_REQUEST['sub'])) |
|
? '' |
|
: $_REQUEST['sub']; |
|
|
|
switch ($_REQUEST['sub']) |
|
{ |
|
|
|
case 'save': |
|
$dir = BASE_DIR . '/templates/' . DEFAULT_THEME_FOLDER . '/css/' . $_REQUEST['name_file']; |
|
|
|
$check_code = stripcslashes($_REQUEST['code_text']); |
|
|
|
if (is_php_code($check_code)) |
|
{ |
|
reportLog($AVE_Template->get_config_vars('TEMPLATES_REPORT_PHP_CSS') . ' - (' . stripslashes($_REQUEST['name_file']) . ')'); |
|
|
|
$message = $AVE_Template->get_config_vars('TEMPLATES_REPORT_PHP_ERR'); |
|
$header = $AVE_Template->get_config_vars('TEMPLATES_ERROR'); |
|
$theme = 'error'; |
|
|
|
if (isset($_REQUEST['ajax']) && $_REQUEST['ajax'] = '1') { |
|
echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); |
|
exit; |
|
} |
|
|
|
header('Location:index.php?do=templates'); |
|
exit; |
|
} |
|
|
|
$result = file_put_contents($dir, trim($check_code)); |
|
|
|
if ($result === false) |
|
{ |
|
$message = $AVE_Template->get_config_vars('TEMPLATES_SAVED_ERR_FILE'); |
|
$header = $AVE_Template->get_config_vars('TEMPLATES_ERROR'); |
|
$theme = 'error'; |
|
} |
|
else |
|
{ |
|
$message = $AVE_Template->get_config_vars('TEMPLATES_SAVED_FILE'); |
|
$header = $AVE_Template->get_config_vars('TEMPLATES_SUCCESS'); |
|
$theme = 'accept'; |
|
reportLog($AVE_Template->get_config_vars('TEMPLATES_REPORT_FILE') . ' - (' . stripslashes($dir) . ')'); |
|
} |
|
|
|
if (isAjax()) |
|
{ |
|
echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); |
|
} |
|
else |
|
{ |
|
$AVE_Template->assign('message', $message); |
|
header('Location:index.php?do=templates&cp=' . SESSION); |
|
} |
|
|
|
exit; |
|
|
|
case 'delete': |
|
|
|
$file = BASE_DIR . '/templates/' . DEFAULT_THEME_FOLDER . '/css/'. $_REQUEST['name_file']; |
|
|
|
if (! is_file($file)) |
|
return false; |
|
|
|
if (@unlink($file)) |
|
{ |
|
reportLog($AVE_Template->get_config_vars('TEMPLATES_REPORT_DEL_OK') . ' ('.basename($_REQUEST['name_file']).')'); |
|
} |
|
else |
|
{ |
|
reportLog($AVE_Template->get_config_vars('TEMPLATES_REPORT_DEL_ER') . ' ('.basename($_REQUEST['name_file']).')'); |
|
} |
|
|
|
header('Location:index.php?do=templates&cp=' . SESSION); |
|
exit; |
|
|
|
default: |
|
$dir = BASE_DIR.'/templates/'.DEFAULT_THEME_FOLDER.'/css/'.stripslashes($_REQUEST['name_file']); |
|
$code_text = file_get_contents($dir); |
|
$formaction = "index.php?do=templates&action=edit_css&sub=save&name_file=".stripslashes($_REQUEST['name_file']); |
|
$AVE_Template->assign('formaction', $formaction); |
|
$AVE_Template->assign('code_text', $code_text); |
|
break; |
|
} |
|
|
|
$AVE_Template->assign('content', $AVE_Template->fetch('templates/edit_css.tpl')); |
|
} |
|
|
|
|
|
public static function templatesEditJs() |
|
{ |
|
global $AVE_Template; |
|
|
|
$_REQUEST['sub'] = (! isset($_REQUEST['sub'])) |
|
? '' |
|
: $_REQUEST['sub']; |
|
|
|
switch ($_REQUEST['sub']) |
|
{ |
|
case 'save': |
|
$dir = BASE_DIR.'/templates/'.DEFAULT_THEME_FOLDER.'/js/'.$_REQUEST['name_file']; |
|
|
|
$check_code = stripcslashes($_REQUEST['code_text']); |
|
|
|
if (is_php_code($check_code)) |
|
{ |
|
reportLog($AVE_Template->get_config_vars('TEMPLATES_REPORT_PHP_JS') . ' - (' . stripslashes($_REQUEST['name_file']) . ')'); |
|
|
|
$message = $AVE_Template->get_config_vars('TEMPLATES_REPORT_PHP_ERR'); |
|
$header = $AVE_Template->get_config_vars('TEMPLATES_ERROR'); |
|
$theme = 'error'; |
|
|
|
if (isset($_REQUEST['ajax']) && $_REQUEST['ajax'] = '1') { |
|
echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); |
|
exit; |
|
} |
|
|
|
header('Location:index.php?do=templates'); |
|
exit; |
|
} |
|
|
|
$result = file_put_contents($dir, trim($check_code)); |
|
|
|
if ($result === false) |
|
{ |
|
$message = $AVE_Template->get_config_vars('TEMPLATES_SAVED_ERR_FILE'); |
|
$header = $AVE_Template->get_config_vars('TEMPLATES_ERROR'); |
|
$theme = 'error'; |
|
} |
|
else |
|
{ |
|
$message = $AVE_Template->get_config_vars('TEMPLATES_SAVED_FILE'); |
|
$header = $AVE_Template->get_config_vars('TEMPLATES_SUCCESS'); |
|
$theme = 'accept'; |
|
reportLog($AVE_Template->get_config_vars('TEMPLATES_REPORT_FILE') . ' - (' . stripslashes($dir) . ')'); |
|
} |
|
|
|
if (isAjax()) |
|
{ |
|
echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); |
|
} |
|
else |
|
{ |
|
$AVE_Template->assign('message', $message); |
|
header('Location:index.php?do=templates&cp=' . SESSION); |
|
} |
|
exit; |
|
|
|
case 'delete': |
|
|
|
$file = BASE_DIR . '/templates/' . DEFAULT_THEME_FOLDER . '/js/'. $_REQUEST['name_file']; |
|
|
|
if (! is_file($file)) |
|
return false; |
|
|
|
if (@unlink($file)) |
|
{ |
|
reportLog($AVE_Template->get_config_vars('TEMPLATES_REPORT_DEL_OK') . ' ('.basename($_REQUEST['name_file']).')'); |
|
} |
|
else |
|
{ |
|
reportLog($AVE_Template->get_config_vars('TEMPLATES_REPORT_DEL_ER') . ' ('.basename($_REQUEST['name_file']).')'); |
|
} |
|
|
|
header('Location:index.php?do=templates&cp=' . SESSION); |
|
exit; |
|
|
|
|
|
default: |
|
$dir = BASE_DIR.'/templates/'.DEFAULT_THEME_FOLDER.'/js/'.stripslashes($_REQUEST['name_file']); |
|
$code_text = file_get_contents($dir); |
|
$formaction = "index.php?do=templates&action=edit_js&sub=save&name_file=".stripslashes($_REQUEST['name_file']); |
|
$AVE_Template->assign('formaction', $formaction); |
|
$AVE_Template->assign('code_text', $code_text); |
|
break; |
|
} |
|
|
|
$AVE_Template->assign('content', $AVE_Template->fetch('templates/edit_js.tpl')); |
|
} |
|
} |
|
?>
|