Browse Source

New functional (beta)

pull/3/head
M@dD3n 2 years ago
parent
commit
304c1c5cb1
  1. 6
      admin/lang/ru/settings.txt
  2. 11
      admin/templates/settings/settings_cache.tpl
  3. 186
      class/class.core.php
  4. 7
      class/class.database.php
  5. 119
      class/class.debug.php
  6. 4
      class/class.navigation.php
  7. 9
      class/class.request.php
  8. 8
      class/class.settings.php
  9. 6
      class/class.sysblocks.php
  10. 181
      functions/func.parserequest.php
  11. 18
      inc/config.php
  12. 10
      inc/init.php
  13. 28
      index.php

6
admin/lang/ru/settings.txt

@ -10,12 +10,12 @@ SETTINGS_NO = "Нет"
SETTINGS_BUTTON_SAVE = "Сохранить изменения" SETTINGS_BUTTON_SAVE = "Сохранить изменения"
SETTINGS_BUTTON_SAVE_AJAX = "Применить (CTRL+S)" SETTINGS_BUTTON_SAVE_AJAX = "Применить (CTRL+S)"
SETTINGS_OR = "или" SETTINGS_OR = "или"
SETTINGS_MAIN_TITLE = "Управление общими настройками системы" SETTINGS_MAIN_TITLE = "Общие настройки системы"
SETTINGS_CASE_TITLE = "Дополнительные настройки" SETTINGS_CASE_TITLE = "Дополнительные настройки"
SETTINGS_MAIN = "Общие настройки системы" SETTINGS_MAIN = "Общие настройки системы"
SETTINGS_SAVED = "Настройки системы успешно сохранены" SETTINGS_SAVED = "Настройки системы успешно сохранены"
SETTINGS_SAVED_ERR = "Не удалось сохранить настройки.<br />Попробуйте еще раз." SETTINGS_SAVED_ERR = "Не удалось сохранить настройки.<br />Попробуйте еще раз."
SETTINGS_SAVE_INFO = "В данном разделе вы можете отредактировать глобальные параметры системы. Пожалуйста, будьте предельно внимательны и помните, что Неверные параметры могут сделать систему неработоспособной." SETTINGS_SAVE_INFO = "В данном разделе вы можете отредактировать глобальные параметры системы. Пожалуйста, будьте предельно внимательны и помните, что неверные параметры могут сделать систему неработоспособной."
SETTINGS_SAVE_CONFIRM = "Вы уверены, что хотите сохранить параметры системы?" SETTINGS_SAVE_CONFIRM = "Вы уверены, что хотите сохранить параметры системы?"
SETTINGS_SITE_NAME = "Название cайта:" SETTINGS_SITE_NAME = "Название cайта:"
SETTINGS_SITE_COUNTRY = "Страна сайта:" SETTINGS_SITE_COUNTRY = "Страна сайта:"
@ -184,3 +184,5 @@ SETTINGS_CACHE_T_NAVI = "Данные навигации"
SETTINGS_CACHE_T_MODULES = "Данные модулей" SETTINGS_CACHE_T_MODULES = "Данные модулей"
SETTINGS_CACHE_T_QUERIES = "Данные запросов" SETTINGS_CACHE_T_QUERIES = "Данные запросов"
SETTINGS_CACHE_T_DOCS = "Данные документов" SETTINGS_CACHE_T_DOCS = "Данные документов"
SETTINGS_CACHE_T_COMPILED = "Данные скомпилированных документов"

11
admin/templates/settings/settings_cache.tpl

@ -80,6 +80,17 @@
<a href="javascript:void(0);" class="btn redBtn btn-clear" data-source="documents">{#SETTINGS_CACHE_CLEAR#}</a> <a href="javascript:void(0);" class="btn redBtn btn-clear" data-source="documents">{#SETTINGS_CACHE_CLEAR#}</a>
</td> </td>
</tr> </tr>
<tr>
<td>
{#SETTINGS_CACHE_T_COMPILED#}
</td>
<td align="center">
<strong class="code" id="btn-compiled"><a href="javascript:void(0);" class="link btn-show" data-source="compiled">{#SETTINGS_CACHE_SHOW#}</a></strong>
</td>
<td align="center">
<a href="javascript:void(0);" class="btn redBtn btn-clear" data-source="compiled">{#SETTINGS_CACHE_CLEAR#}</a>
</td>
</tr>
<tr> <tr>
<td> <td>
{#SETTINGS_CACHE_T_QUERIES#} {#SETTINGS_CACHE_T_QUERIES#}

186
class/class.core.php

@ -659,6 +659,8 @@
*/ */
function _main_content ($rubTmpl) function _main_content ($rubTmpl)
{ {
Debug::startTime('MAINCONTENT');
// Проверяем теги полей в шаблоне рубрики на условие != '' // Проверяем теги полей в шаблоне рубрики на условие != ''
if (defined('USE_GET_FIELDS') && USE_GET_FIELDS) if (defined('USE_GET_FIELDS') && USE_GET_FIELDS)
{ {
@ -748,6 +750,14 @@
$main_content $main_content
); );
// GetDocumentsField
$main_content = preg_replace_callback(
'/\[tag:docs:([0-9]+)(|:([a-zA-Z0-9-_]+))+?\]/',
function ($match) {
return get_document($match[1], $match[3]);
},
$main_content
);
$main_content = str_replace('[tag:docdate]', translate_date(strftime(DATE_FORMAT, $this->curentdoc->document_published)), $main_content); $main_content = str_replace('[tag:docdate]', translate_date(strftime(DATE_FORMAT, $this->curentdoc->document_published)), $main_content);
$main_content = str_replace('[tag:doctime]', translate_date(strftime(TIME_FORMAT, $this->curentdoc->document_published)), $main_content); $main_content = str_replace('[tag:doctime]', translate_date(strftime(TIME_FORMAT, $this->curentdoc->document_published)), $main_content);
@ -766,6 +776,8 @@
//-- Кеширование скомпилированного документа //-- Кеширование скомпилированного документа
$this->setCompileDocument($main_content); $this->setCompileDocument($main_content);
$GLOBALS['block_generate']['DOCUMENT']['MAINCONTENT'] = Debug::endTime('MAINCONTENT');
return $main_content; return $main_content;
} }
@ -801,15 +813,22 @@
return false; return false;
$cache['id'] = (int)$cache['id']; $cache['id'] = (int)$cache['id'];
$cache['id'] = 'documents/' . (floor($cache['id'] / 1000)) . '/' . $cache['id']; $cache['dir'] = 'documents/' . (floor($cache['id'] / 1000)) . '/' . $cache['id'];
$cache['compile_id'] = 'compile/' . (floor($cache['id'] / 1000)) . '/' . $cache['id'];
$cache['file'] = $this->_get_cache_hash() . '.compiled'; $cache['file'] = $this->_get_cache_hash() . '.compiled';
$cache['compile_file'] = $this->_get_cache_hash() . '.php';
if (! $cache['file']) if (! $cache['file'])
return false; return false;
$cache['dir'] = BASE_DIR . '/tmp/cache/sql/' . (trim($cache['id']) > '' $cache['dir'] = BASE_DIR . '/tmp/cache/sql/' . (trim($cache['dir']) > ''
? trim($cache['id']) . '/' ? trim($cache['dir']) . '/'
: substr($cache['file'], 0, 2) . '/' . substr($cache['file'], 2, 2) . '/' . substr($cache['file'], 4, 2) . '/');
$cache['compile_dir'] = BASE_DIR . '/tmp/cache/sql/' . (trim($cache['compile_id']) > ''
? trim($cache['compile_id']) . '/'
: substr($cache['file'], 0, 2) . '/' . substr($cache['file'], 2, 2) . '/' . substr($cache['file'], 4, 2) . '/'); : substr($cache['file'], 0, 2) . '/' . substr($cache['file'], 2, 2) . '/' . substr($cache['file'], 4, 2) . '/');
return $cache; return $cache;
@ -900,6 +919,108 @@
} }
function checkAcceptCache ()
{
$isAjax = isAjax();
$page = get_current_page();
$array = ['module', 'sysblock', 'request', 'page', 'apage', 'artpage'];
foreach ($array AS $k => $v)
{
if (in_array($v, $_REQUEST))
return false;
}
if ( ($isAjax == true) || ($page != 1) )
return false;
return true;
}
function setCompileContent ($content)
{
$cache = $this->_get_cache_id();
if (! $cache)
return false;
//-- Удаляем файл, если существует
if (file_exists($cache['compile_dir'] . $cache['file']))
unlink($cache['compile_dir'] . $cache['file']);
if ($this->checkAcceptCache() == false)
return false;
// Если включен DEV MODE, то отключаем кеширование запросов
if (defined('DEV_MODE') AND DEV_MODE)
return false;
if (UGROUP == 1 && (defined('CACHE_DOC_FULL_ADMIN') && CACHE_DOC_FULL_ADMIN == false))
return false;
//-- Кэширование разрешено
if (defined('CACHE_DOC_FULL') && CACHE_DOC_FULL)
{
//-- Если нет папки, создаем
if (! is_dir($cache['compile_dir']))
@mkdir($cache['compile_dir'], 0766, true);
//-- Сохраняем скомпилированный шаблон в кэш
file_put_contents($cache['compile_dir'] . $cache['compile_file'], $content);
$GLOBALS['block_generate']['COMPILE']['SET'] = true;
}
return true;
}
function getCompileContent ()
{
if ($this->checkAcceptCache() == false)
return false;
$cache = $this->_get_cache_id();
if (! $cache)
return false;
$content = false;
//-- Если нет папки, создаем
if (! is_dir($cache['compile_dir']))
@mkdir($cache['compile_dir'], 0766, true);
// Наличие файла
if (file_exists($cache['compile_dir'] . $cache['compile_file']))
{
// Получаем время создания файла
$file_time = filemtime($cache['compile_dir'] . $cache['compile_file']);
// Получаем время для проверки
$cache_time = $this->curentdoc->rubric_changed;
if (! $cache_time || $cache_time > $file_time)
{
unlink ($cache['compile_dir'] . $cache['compile_file']);
}
else if (defined('CACHE_DOC_FULL') && CACHE_DOC_FULL)
{
$content = file_get_contents($cache['compile_dir'] . $cache['compile_file']);
$GLOBALS['block_generate']['COMPILE']['GET'] = true;
}
}
else
{
$content = false;
}
return $content;
}
/** /**
* Метод, предназначенный для обработки системных тегов модулей. Здесь подключаются только те файлы модулей, * Метод, предназначенный для обработки системных тегов модулей. Здесь подключаются только те файлы модулей,
* системные теги которых обнаружены в шаблоне при парсинге. Также формирует массив всех установленных модулей * системные теги которых обнаружены в шаблоне при парсинге. Также формирует массив всех установленных модулей
@ -1050,12 +1171,47 @@
*/ */
function coreSiteFetch ($id, $rub_id = '') function coreSiteFetch ($id, $rub_id = '')
{ {
global $AVE_DB; global $AVE_DB, $AVE_Module;
Debug::startTime('DOC_' . $id); Debug::startTime('DOC_' . $id);
$cacheCompile = false;
// Определяем рубрику
define('RUB_ID', ! empty ($rub_id)
? $rub_id
: $this->curentdoc->rubric_id);
$main_content = ''; $main_content = '';
if ((defined('CACHE_DOC_FULL') && CACHE_DOC_FULL) && isAjax() == false)
{
if ($out = $this->getCompileContent())
{
foreach ($AVE_Module->moduleListGet() as $row)
{
// Проверяем, существует ли для данного модуля файл module.php в его персональной директории
$mod_file = BASE_DIR . '/modules/' . $row['ModuleSysName'] . '/module.php';
if (is_file($mod_file))
include_once($mod_file);
}
$this->_coreRubricPermissionFetch(RUB_ID);
// Выполняем Код рубрики До загрузки документа
ob_start();
eval(' ?>' . $this->curentdoc->rubric_start_code . '<?php ');
ob_end_clean();
$cacheCompile = true;
}
//$out = '';
}
if (! $out)
{
// Если происходит вызов модуля, получаем соответствующие мета-теги и получаем шаблон модуля // Если происходит вызов модуля, получаем соответствующие мета-теги и получаем шаблон модуля
if (isset($_REQUEST['module']) && ! empty($_REQUEST['module'])) if (isset($_REQUEST['module']) && ! empty($_REQUEST['module']))
{ {
@ -1097,11 +1253,6 @@
if (! is_numeric($_REQUEST['request']) && preg_match('/^[A-Za-z0-9-_]{1,20}$/i', $_REQUEST['request']) !== 1) if (! is_numeric($_REQUEST['request']) && preg_match('/^[A-Za-z0-9-_]{1,20}$/i', $_REQUEST['request']) !== 1)
$this->_coreErrorPage404(); $this->_coreErrorPage404();
// Определяем рубрику
define('RUB_ID', ! empty ($rub_id)
? $rub_id
: $this->curentdoc->rubric_id);
// Проверяем разрешение на внешнее обращение // Проверяем разрешение на внешнее обращение
if (! $this->_requestGet($_REQUEST['request'], 'request_external')) if (! $this->_requestGet($_REQUEST['request'], 'request_external'))
$this->_coreErrorPage404(); $this->_coreErrorPage404();
@ -1133,11 +1284,6 @@
if (! $this->_coreDocumentIsPublished()) if (! $this->_coreDocumentIsPublished())
$this->_coreErrorPage404(); $this->_coreErrorPage404();
// Определяем права доступа к документам рубрики
define('RUB_ID', ! empty ($rub_id)
? $rub_id
: $this->curentdoc->rubric_id);
$this->_coreRubricPermissionFetch(RUB_ID); $this->_coreRubricPermissionFetch(RUB_ID);
// Выполняем Код рубрики До загрузки документа // Выполняем Код рубрики До загрузки документа
@ -1304,8 +1450,8 @@
if (defined('RUB_ID')) if (defined('RUB_ID'))
{ {
$replace = [ $replace = [
'[tag:rubheader]' => $this->curentdoc->rubric_header_template . '[tag:rubheader]', '[tag:rubheader]' => $this->curentdoc->rubric_header_template,
'[tag:rubfooter]' => $this->curentdoc->rubric_footer_template . '[tag:rubfooter]' '[tag:rubfooter]' => $this->curentdoc->rubric_footer_template
]; ];
$out = str_replace(array_keys($replace), array_values($replace), $out); $out = str_replace(array_keys($replace), array_values($replace), $out);
@ -1445,7 +1591,7 @@
getSiteUrl(), getSiteUrl(),
get_home_link(), get_home_link(),
(isset($this->curentdoc->document_meta_robots) ? $this->curentdoc->document_meta_robots : ''), (isset($this->curentdoc->document_meta_robots) ? $this->curentdoc->document_meta_robots : ''),
canonical(isset ($this->curentdoc->document_alias) ? ABS_PATH . $this->curentdoc->document_alias : ''), canonical(isset ($this->curentdoc->document_alias) ? getSiteUrl() . str_replace('//', '/', ABS_PATH . $this->curentdoc->document_alias) : ''),
(isset($this->curentdoc->Id) ? $this->curentdoc->Id : ''), (isset($this->curentdoc->Id) ? $this->curentdoc->Id : ''),
(isset($this->curentdoc->document_parent) ? $this->curentdoc->document_parent : '') (isset($this->curentdoc->document_parent) ? $this->curentdoc->document_parent : '')
); );
@ -1597,6 +1743,12 @@
$GLOBALS['block_generate']['DOCUMENT']['FETCH'] = Debug::endTime('DOC_' . $id); $GLOBALS['block_generate']['DOCUMENT']['FETCH'] = Debug::endTime('DOC_' . $id);
if ($cacheCompile == false)
{
$this->setCompileContent($out);
}
}
// Выводим собранный документ // Выводим собранный документ
echo $out; echo $out;
} }

7
class/class.database.php

@ -1431,6 +1431,12 @@
return $cache_id = 'navigations/' . $cache_id[1]; return $cache_id = 'navigations/' . $cache_id[1];
} }
//-- Если это скомпилированный документ, то меняем расположение
if (substr($cache_id, 0, 3) == 'cmp') {
$cache_id = (int) str_replace('cmp_', '', $cache_id);
return $cache_id = 'compile/' . (floor($cache_id / 1000)) . '/' . $cache_id;
}
if (substr_count($cache_id, '__') > 0) { if (substr_count($cache_id, '__') > 0) {
return str_replace('__', '/', $cache_id); return str_replace('__', '/', $cache_id);
} }
@ -1551,6 +1557,7 @@
$this->clearCache('fld_' . $doc_id); // Поля $this->clearCache('fld_' . $doc_id); // Поля
$this->clearCache('cmd_' . $doc_id); // Компиляция $this->clearCache('cmd_' . $doc_id); // Компиляция
$this->clearCache('rqe_' . $doc_id); // Элемент запроса $this->clearCache('rqe_' . $doc_id); // Элемент запроса
$this->clearCache('cmp_' . $doc_id); // Скомпилированный документ
} }

119
class/class.debug.php

@ -26,6 +26,8 @@
protected static $_debug = []; protected static $_debug = [];
public static $_document_content = '';
public function __construct() public function __construct()
{ {
@ -946,7 +948,7 @@
* *
* @return false|null|string|string[] * @return false|null|string|string[]
*/ */
public static function _stat_get($type = 'get') public static function _stat_get (string $type = 'get')
{ {
ob_start(); ob_start();
@ -975,16 +977,57 @@
$stat = htmlspecialchars($stat); $stat = htmlspecialchars($stat);
$stat = preg_replace('/(=&gt;)/', '<span style="color: #FF8C00;">$1</span>', $stat); $stat = preg_replace('/(=&gt;)/', '<span style="color: #FF8C00;">$1</span>', $stat);
$stat = '<pre style="background:#f5f5f5; color: #000; margin: 0; padding: 5px; border: 0; font-size: 11px; font-family: Consolas, Verdana, Arial;">'. $stat .'</pre>'; $stat = '<pre style="background:#f5f5f5; color: #000; margin: 0; padding: 5px; border: 0; font-size: 11px; font-family: Consolas, Verdana, Arial;">'. $stat .'</pre>';
ob_end_clean(); ob_end_clean();
return $stat; return $stat;
} }
public static function getDocumentInfo ()
{
global $AVE_Template;
$_arr = [
'DOC' => '/admin/index.php?do=docs&action=edit&Id=',
'RUBRIC' => '/admin/index.php?do=rubs&action=edit&Id=',
'BLOCKS' => '/admin/index.php?do=blocks&action=edit&id=',
'SYSBLOCK' => '/admin/index.php?do=sysblocks&action=edit&id=',
'REQUESTS' => '/admin/index.php?do=request&action=edit&Id=',
'NAVIAGTIONS' => '/admin/index.php?do=navigation&action=templates&navigation_id='
];
$doc = get_document($_REQUEST['id']);
$_edit = [];
$_edit['DOC'][$doc['Id']] = $_arr['DOC'] . $doc['Id'];
$_edit['RUBRIC'][$doc['rubric_id']] = $_arr['RUBRIC'] . $doc['rubric_id'];
foreach ($GLOBALS['block_generate'] AS $k => $v)
{
if (! in_array($k, array_keys($_arr))) {
continue;
}
foreach ($v as $key => $value) {
$_edit[$k][$key] = $_arr[$k] . $key;
}
}
$AVE_Template->assign('edit', $_edit);
$AVE_Template->assign('session', session_id());
$return = $AVE_Template->fetch(BASE_DIR . '/lib/debug/debug.tpl');
return $return;
}
/** /**
* @return string * @return string
*/ */
public static function displayInfo () public static function displayInfo (): string
{ {
global $AVE_DB; global $AVE_DB;
@ -1014,6 +1057,7 @@
<li id="debug-12">MySQL</li> <li id="debug-12">MySQL</li>
<li id="debug-13">Trace</li> <li id="debug-13">Trace</li>
<li id="debug-14">Debug</li> <li id="debug-14">Debug</li>
<li id="debug-15">Edit</li>
</ul> </ul>
'; ';
$out .= PHP_EOL; $out .= PHP_EOL;
@ -1113,6 +1157,77 @@
$out .= implode('', self::$_debug); $out .= implode('', self::$_debug);
$out .= '</div>'; $out .= '</div>';
$out .= PHP_EOL;
$out .= '<div class="debug_tab" id="debug-15-cont" style="display: none;">' . PHP_EOL;
$out .= self::getDocumentInfo();
$out .= '</div>';
$out .= PHP_EOL;
$out .= '</div>';
return $out;
}
/**
* @return string
*/
public static function displayInfoLight (): string
{
global $AVE_DB;
$out = PHP_EOL;
$out .= '<link rel="stylesheet" href="/lib/debug/debug.css" />';
$out .= PHP_EOL;
$out .= '<script>window.jQuery || document.write(\'<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js">\x3C/script>\')</script>';
$out .= PHP_EOL;
$out .= '<script src="/lib/debug/debug.js"></script>';
$out .= PHP_EOL;
$out .= '<div id="debug_btn"></div>';
$out .= PHP_EOL;
$out .= '
<div id="debug_bar">
<ul class="debug_tabs">
<li id="debug-1">Timers</li>
<li id="debug-2">Blocks</li>
<li id="debug-3">Content</li>
<li id="debug-4">Debug</li>
<li id="debug-5">Document</li>
</ul>
';
$out .= PHP_EOL;
$out .= '<div class="debug_tab" id="debug-1-cont" style="display: block;">' . PHP_EOL;
$out .= 'Time generation: ' . self::getStatistic('time') . ' sec';
$out .= '<br>';
$out .= 'Memory usage: ' . self::getStatistic('memory');
$out .= '<br>';
$out .= 'Memory peak usage: ' . self::getStatistic('peak');
$out .= '<br>';
$out .= 'Real SQL Queries: ' . $AVE_DB->DBProfilesGet('count') . ' for ' . $AVE_DB->DBProfilesGet('time') . ' sec';
$out .= '<br>';
$out .= 'All SQL Queries: ' . count($AVE_DB->_query_list);
$out .= '</div>';
$out .= PHP_EOL;
$out .= '<div class="debug_tab" id="debug-2-cont" style="display: none;">' . PHP_EOL;
$out .= 'Blocks:';
$out .= self::getStatistic('blocks');
$out .= '</div>';
$out .= PHP_EOL;
$out .= '<div class="debug_tab" id="debug-3-cont" style="display: none;">' . PHP_EOL;
$out .= '<pre>' . htmlspecialchars(self::$_document_content) . '</pre>';
$out .= '</div>';
$out .= PHP_EOL;
$out .= '<div class="debug_tab" id="debug-4-cont" style="display: none;">' . PHP_EOL;
$out .= implode('', self::$_debug);
$out .= '</div>';
$out .= PHP_EOL;
$out .= '<div class="debug_tab" id="debug-5-cont" style="display: none;">' . PHP_EOL;
$out .= self::getDocumentInfo();
$out .= '</div>';
$out .= PHP_EOL; $out .= PHP_EOL;
$out .= '</div>'; $out .= '</div>';

4
class/class.navigation.php

@ -199,13 +199,15 @@
" . PREFIX . "_navigation " . PREFIX . "_navigation
WHERE WHERE
navigation_id = '" . $navigation_id . "' navigation_id = '" . $navigation_id . "'
OR
alias = '" . $navigation_id . "'
")->FetchRow(); ")->FetchRow();
// Формируем список групп пользователей // Формируем список групп пользователей
$row->user_group = explode(',', $row->user_group); $row->user_group = explode(',', $row->user_group);
// Формируем ряд переменных для использования в шаблоне и отображаем форм с данными для редактирования // Формируем ряд переменных для использования в шаблоне и отображаем форм с данными для редактирования
$AVE_Template->assign('nid', $navigation_id); $AVE_Template->assign('nid', $row->navigation_id);
$AVE_Template->assign('navigation', $row); $AVE_Template->assign('navigation', $row);
$AVE_Template->assign('groups', $AVE_User->userGroupListGet()); $AVE_Template->assign('groups', $AVE_User->userGroupListGet());
$AVE_Template->assign('form_action', 'index.php?do=navigation&action=templates&sub=save&navigation_id=' . $navigation_id . '&cp=' . SESSION); $AVE_Template->assign('form_action', 'index.php?do=navigation&action=templates&sub=save&navigation_id=' . $navigation_id . '&cp=' . SESSION);

9
class/class.request.php

@ -336,6 +336,8 @@
" . PREFIX . "_request " . PREFIX . "_request
WHERE WHERE
Id = '" . $request_id . "' Id = '" . $request_id . "'
OR
request_alias = '" . $request_id . "'
"); ");
if ($sql->_result->num_rows == 0) if ($sql->_result->num_rows == 0)
@ -361,10 +363,13 @@
array_push($paginations, $pages); array_push($paginations, $pages);
// Передаем данные в шаблон и отображаем страницу с редактированием запроса // Передаем данные в шаблон и отображаем страницу с редактированием запроса
if (! isset($_REQUEST['rubric_id']))
$_REQUEST['rubric_id'] = $row->rubric_id;
$AVE_Template->assign('row', $row); $AVE_Template->assign('row', $row);
$AVE_Template->assign('rid', $request_id); $AVE_Template->assign('rid', $row->Id);
$AVE_Template->assign('paginations', $paginations); $AVE_Template->assign('paginations', $paginations);
$AVE_Template->assign('formaction', 'index.php?do=request&action=edit&sub=save&Id=' . $request_id . '&cp=' . SESSION); $AVE_Template->assign('formaction', 'index.php?do=request&action=edit&sub=save&Id=' . $row->Id . '&cp=' . SESSION);
$AVE_Template->assign('content', $AVE_Template->fetch('request/form.tpl')); $AVE_Template->assign('content', $AVE_Template->fetch('request/form.tpl'));
break; break;

8
class/class.settings.php

@ -777,6 +777,10 @@
$size = format_size(get_dir_size(BASE_DIR . '/tmp/cache/sql/documents')); $size = format_size(get_dir_size(BASE_DIR . '/tmp/cache/sql/documents'));
break; break;
case 'compiled':
$size = format_size(get_dir_size(BASE_DIR . '/tmp/cache/sql/compile'));
break;
case 'langs': case 'langs':
$size = format_size(get_dir_size(BASE_DIR . '/tmp/cache/sql/langs')); $size = format_size(get_dir_size(BASE_DIR . '/tmp/cache/sql/langs'));
break; break;
@ -842,6 +846,10 @@
$cache_dir = BASE_DIR . '/tmp/cache/sql/documents'; $cache_dir = BASE_DIR . '/tmp/cache/sql/documents';
break; break;
case 'compiled':
$cache_dir = BASE_DIR . '/tmp/cache/sql/compile';
break;
case 'langs': case 'langs':
$cache_dir = BASE_DIR . '/tmp/cache/sql/langs'; $cache_dir = BASE_DIR . '/tmp/cache/sql/langs';
break; break;

6
class/class.sysblocks.php

@ -378,7 +378,7 @@
{ {
global $AVE_DB, $AVE_Template; global $AVE_DB, $AVE_Template;
$sysblock_id = (int)$_REQUEST['id']; $sysblock_id = $_REQUEST['id'];
$sql = " $sql = "
SELECT SELECT
@ -387,11 +387,13 @@
" . PREFIX . "_sysblocks " . PREFIX . "_sysblocks
WHERE WHERE
id = '" . $sysblock_id . "' id = '" . $sysblock_id . "'
OR
sysblock_alias = '" . $sysblock_id . "'
"; ";
$row = $AVE_DB->Query($sql)->FetchAssocArray(); $row = $AVE_DB->Query($sql)->FetchAssocArray();
$AVE_Template->assign('sid', $sysblock_id); $AVE_Template->assign('sid', $row['id']);
$AVE_Template->assign('groups', self::getGroups()); $AVE_Template->assign('groups', self::getGroups());
if ((isset($_REQUEST['sysblock_visual']) && $_REQUEST['sysblock_visual'] == 1) || $row['sysblock_visual'] == 1) if ((isset($_REQUEST['sysblock_visual']) && $_REQUEST['sysblock_visual'] == 1) || $row['sysblock_visual'] == 1)

181
functions/func.parserequest.php

@ -874,7 +874,7 @@
" . (isset($params['USER_FROM']) ? $params['USER_FROM'] : '') . " " . (isset($params['USER_FROM']) ? $params['USER_FROM'] : '') . "
" . PREFIX . "_documents AS a " . PREFIX . "_documents AS a
" . implode(' ', $request_join) . " " . implode(' ', $request_join) . "
" . (isset($params['USER_JOIN']) ? $params['USER_JOIN'] : '') . " " . (isset($params['USER_JOIN']) ? $params['USER_FROM'] : '') . "
WHERE WHERE
" . $request_where_str . " " . $request_where_str . "
GROUP BY a.Id GROUP BY a.Id
@ -1198,6 +1198,185 @@
} }
function parse_request ($id, $params = [])
{
global $AVE_Core;
// Получаем информацию о запросе
$request = request_get_settings($id);
// Фиксируем время начала генерации запроса
Debug::startTime('request_' . $id);
// Элементы запроса
$rows = $params['ROWS'];
//-- Обрабатываем шаблоны элементов
$items = '';
//-- Счетчик
$x = 0;
//-- Общее число элементов
$items_count = $num_items= count($rows);
global $req_item_num, $use_cache, $request_id, $request_changed, $request_changed_elements;
$use_cache = $request->request_cache_elements;
$request_id = $request->Id;
$request_changed = $request->request_changed;
$request_changed_elements = $request->request_changed_elements;
$limit = (isset($params['LIMIT']) && is_numeric($params['LIMIT']) && $params['LIMIT'] > '')
? (int)$params['LIMIT']
: (int)$request->request_items_per_page;
// Кол-во страниц
$num_pages = ($limit > 0)
? ceil($num_items / $limit)
: 0;
Debug::startTime('ELEMENTS_ALL');
foreach ($rows AS $row)
{
$x++;
$last_item = ($x == $items_count ? true : false);
$item_num = $x;
$req_item_num = $item_num;
Debug::startTime('ELEMENT_' . $item_num);
$item = showrequestelement($row, $request->request_template_item);
$GLOBALS['block_generate']['REQUESTS'][$id]['ELEMENTS'][$item_num] = Debug::endTime('ELEMENT_' . $item_num);
$item = str_replace('[tag:item_num]', $item_num, $item);
$item = '<'.'?php $item_num='.var_export($item_num,1).'; $last_item='.var_export($last_item,1).'?'.'>'.$item;
$item = '<'.'?php $req_item_id = ' . $row . '; ?>' . $item;
$item = str_replace('[tag:if_first]', '<'.'?php if(isset($item_num) && $item_num===1) { ?'.'>', $item);
$item = str_replace('[tag:if_not_first]', '<'.'?php if(isset($item_num) && $item_num!==1) { ?'.'>', $item);
$item = str_replace('[tag:if_last]', '<'.'?php if(isset($last_item) && $last_item) { ?'.'>', $item);
$item = str_replace('[tag:if_not_last]', '<'.'?php if(isset($item_num) && !$last_item) { ?'.'>', $item);
$item = preg_replace('/\[tag:if_every:([0-9-]+)\]/u', '<'.'?php if(isset($item_num) && !($item_num % $1)){ '.'?'.'>', $item);
$item = preg_replace('/\[tag:if_not_every:([0-9-]+)\]/u', '<'.'?php if(isset($item_num) && ($item_num % $1)){ '.'?'.'>', $item);
$item = str_replace('[tag:/if]', '<'.'?php } ?>', $item);
$item = str_replace('[tag:if_else]', '<'.'?php }else{ ?>', $item);
$items .= $item;
Registry::remove('documents', $row);
Registry::remove('fields', $row);
Registry::remove('fields_param', $row);
}
$GLOBALS['block_generate']['REQUESTS'][$id]['ELEMENTS']['ALL'] = Debug::endTime('ELEMENTS_ALL');
// Приступаем к обработке шаблона
$main_template = $request->request_template_main;
// ============ Обрабатываем теги запроса ============ //
//-- Парсим теги визуальных блоков
$main_template = preg_replace_callback('/\[tag:block:([A-Za-z0-9-_]{1,20}+)\]/', 'parse_block', $main_template);
//-- Парсим теги системных блоков
$main_template = preg_replace_callback('/\[tag:sysblock:([A-Za-z0-9-_]{1,20}+)\]/', 'parse_sysblock', $main_template);
//-- Дата
$main_template = preg_replace_callback('/\[tag:date:([a-zA-Z0-9-. \/]+)\]/',
function ($match) use ($AVE_Core)
{
return translate_date(date($match[1], $AVE_Core->curentdoc->document_published));
},
$main_template
);
$str_replace = [
//-- ID Документа
'[tag:docid]' => $AVE_Core->curentdoc->Id,
//-- ID Автора
'[tag:docauthorid]' => $AVE_Core->curentdoc->document_author_id,
//-- Имя автора
'[tag:docauthor]' => get_username_by_id($AVE_Core->curentdoc->document_author_id),
//-- Время - 1 день назад
'[tag:humandate]' => human_date($AVE_Core->curentdoc->document_published),
//-- Дата создания
'[tag:docdate]' => pretty_date(strftime(DATE_FORMAT, $AVE_Core->curentdoc->document_published)),
//-- Время создания
'[tag:doctime]' => pretty_date(strftime(TIME_FORMAT, $AVE_Core->curentdoc->document_published)),
//-- Домен
'[tag:domain]' => getSiteUrl(),
//-- Заменяем тег пагинации на пагинацию
'[tag:pages]' => $pagination,
//-- Общее число элементов запроса
'[tag:doctotal]' => $num_items,
//-- Показано элементов запроса на странице
'[tag:doconpage]' => $x,
//-- Номер страницы пагинации
'[tag:pages:curent]' => get_current_page('page'),
//-- Общее кол-во страниц пагинации
'[tag:pages:total]' => $num_pages,
//-- Title
'[tag:pagetitle]' => stripslashes(htmlspecialchars_decode($AVE_Core->curentdoc->document_title)),
//-- Alias
'[tag:alias]' => (isset($AVE_Core->curentdoc->document_alias) ? $AVE_Core->curentdoc->document_alias : '')
];
$main_template = str_replace(array_keys($str_replace), array_values($str_replace), $main_template);
//-- Возвращаем параметр документа из БД
$main_template = preg_replace_callback('/\[tag:doc:([a-zA-Z0-9-_]+)\]/u',
function ($match) use ($row)
{
return isset($row->{$match[1]})
? $row->{$match[1]}
: null;
},
$main_template
);
//-- Если пришел вызов на активацию языковых файлов
$main_template = preg_replace_callback('/\[tag:langfile:([a-zA-Z0-9-_]+)\]/u',
function ($match)
{
global $AVE_Template;
return $AVE_Template->get_config_vars($match[1]);
},
$main_template
);
//-- Вставляем элементы запроса
$return = str_replace('[tag:content]', $items, $main_template);
unset ($items, $main_template, $str_replace, $pagination);
//-- Парсим тег [hide]
$return = parse_hide($return);
//-- Абсолютный путь
$return = str_replace('[tag:path]', ABS_PATH, $return);
//-- Путь до папки шаблона
$return = str_replace('[tag:mediapath]', ABS_PATH . 'templates/' . ((defined('THEME_FOLDER') === false) ? DEFAULT_THEME_FOLDER : THEME_FOLDER) . '/', $return);
//-- Парсим модули
$return = $AVE_Core->coreModuleTagParse($return);
//-- Фиксируем время генерации запроса
$GLOBALS['block_generate']['REQUESTS'][$id]['TIME'] = Debug::endTime('request_' . $id);
// Статистика
if ($request->request_show_statistic)
$return .= "<div class=\"request_statistic\"><br>Найдено: $num_items<br>Показано: $items_count<br>Время генерации: " . Debug::endTime('request_' . $id) . " сек<br>Пиковое значение: ".number_format(memory_get_peak_usage()/1024, 0, ',', ' ') . ' Kb</div>';
return $return;
}
/** /**
* Функция получения содержимого поля для обработки в шаблоне запроса * Функция получения содержимого поля для обработки в шаблоне запроса
* <pre> * <pre>

18
inc/config.php

@ -303,7 +303,7 @@
'DESCR' => 'Вывод общей статистики публичной части', 'DESCR' => 'Вывод общей статистики публичной части',
'DEFAULT' => 'off', 'DEFAULT' => 'off',
'TYPE' => 'dropdown', 'TYPE' => 'dropdown',
'VARIANT' => ['off', 'light', 'full'] 'VARIANT' => ['off', 'light', 'full', 'dev']
]; ];
//-- Вывод общей статистики в административной части //-- Вывод общей статистики в административной части
@ -406,6 +406,22 @@
'VARIANT' => '' 'VARIANT' => ''
]; ];
//-- Кэширование всей страницы
$GLOBALS['CMS_CONFIG']['_CONST_CACHE']['CACHE_DOC_FULL'] = [
'DESCR' => 'Кэширование всей страницы',
'DEFAULT' => false,
'TYPE' => 'bool',
'VARIANT' => ''
];
//-- Кэширование всей страницы (для админа)
$GLOBALS['CMS_CONFIG']['_CONST_CACHE']['CACHE_DOC_FULL_ADMIN'] = [
'DESCR' => 'Кэширование всей страницы (для админа)',
'DEFAULT' => false,
'TYPE' => 'bool',
'VARIANT' => ''
];
//-- Кэширование информацию о документе и его полях //-- Кэширование информацию о документе и его полях
$GLOBALS['CMS_CONFIG']['_CONST_CACHE']['SITEMAP_CACHE_LIFETIME'] = [ $GLOBALS['CMS_CONFIG']['_CONST_CACHE']['SITEMAP_CACHE_LIFETIME'] = [
'DESCR' => 'Время жизни кеша для карты сайта', 'DESCR' => 'Время жизни кеша для карты сайта',

10
inc/init.php

@ -76,6 +76,11 @@
} }
} }
$_GET = add_slashes($_GET);
$_POST = add_slashes($_POST);
$_REQUEST = array_merge($_POST, $_GET);
$_COOKIE = add_slashes($_COOKIE);
unsetGlobals(); unsetGlobals();
if (isset($HTTP_POST_VARS)) if (isset($HTTP_POST_VARS))
@ -108,11 +113,6 @@
return $array; return $array;
} }
$_GET = add_slashes($_GET);
$_POST = add_slashes($_POST);
$_REQUEST = array_merge($_POST, $_GET);
$_COOKIE = add_slashes($_COOKIE);
function isSSL() function isSSL()
{ {
if (isset($_SERVER['HTTPS'])) if (isset($_SERVER['HTTPS']))

28
index.php

@ -35,7 +35,7 @@
//-- Подключаем файл определения мобильных устройств //-- Подключаем файл определения мобильных устройств
//-- далее пользуемся $MobileDetect //-- далее пользуемся $MobileDetect
require_once (BASE_DIR . '/lib/mobile_detect/Mobile_Detect.php'); require_once (BASE_DIR . '/lib/mobile_detect/Mobile_Detect.php');
$MobileDetect = new Mobile_Detect; $MDetect = new Mobile_Detect;
$init_start = microtime(); $init_start = microtime();
@ -44,6 +44,8 @@
$GLOBALS['block_generate']['INIT']['END'] = number_format(microtime_diff($init_start, microtime()), 3, ',', ' ') . ' sec'; $GLOBALS['block_generate']['INIT']['END'] = number_format(microtime_diff($init_start, microtime()), 3, ',', ' ') . ' sec';
Debug::startTime('CODEEND');
//-- Проверяем нет ли в запросе папки UPLOADS_DIR //-- Проверяем нет ли в запросе папки UPLOADS_DIR
//-- подключаем файл для работы thumbsnail //-- подключаем файл для работы thumbsnail
if (strpos ($_SERVER['REQUEST_URI'], ABS_PATH . UPLOAD_DIR . '/') === 0) if (strpos ($_SERVER['REQUEST_URI'], ABS_PATH . UPLOAD_DIR . '/') === 0)
@ -98,6 +100,7 @@
} }
//-- Собираем страницу //-- Собираем страницу
$AVE_Core->coreSiteFetch(get_current_document_id()); $AVE_Core->coreSiteFetch(get_current_document_id());
Debug::startTime('CONTENT'); Debug::startTime('CONTENT');
@ -109,8 +112,14 @@
else else
ob_start(); ob_start();
Debug::$_document_content = $content;
Debug::startTime('EVALCONTENT');
eval (' '.'?>' . $content . '<?'.'php '); eval (' '.'?>' . $content . '<?'.'php ');
$GLOBALS['block_generate']['DOCUMENT']['EVALCONTENT'] = Debug::endTime('EVALCONTENT');
$render = ob_get_clean(); $render = ob_get_clean();
unset ($content); unset ($content);
@ -155,23 +164,8 @@
exit; exit;
} }
//-- Тут заменяем [tag:rubheader]
//-- на собранный $GLOBALS["user_header"]
$rubheader = (empty($GLOBALS['user_header'])
? ''
: implode(chr(10), $GLOBALS['user_header']));
//-- Тут заменяем [tag:rubfooter]
//-- на собранный $GLOBALS["user_footer"]
$rubfooter = (empty($GLOBALS['user_footer'])
? ''
: implode(chr(10), $GLOBALS['user_footer']));
$render = str_replace(['[tag:rubheader]', '[tag:rubfooter]'], [$rubheader, $rubfooter], $render);
unset ($rubheader, $rubfooter);
$GLOBALS['block_generate']['DOCUMENT']['CONTENT'] = Debug::endTime('CONTENT'); $GLOBALS['block_generate']['DOCUMENT']['CONTENT'] = Debug::endTime('CONTENT');
$GLOBALS['block_generate']['INIT']['CODEEND'] = Debug::endTime('CODEEND');
//-- Вывод конечного результата //-- Вывод конечного результата
output_compress($render); output_compress($render);

Loading…
Cancel
Save