Browse Source

Fixes

pull/3/head
M@dD3n 5 years ago
parent
commit
97290b236d
  1. 5
      admin/lang/ru/sysblocks.txt
  2. 8
      admin/templates/sysblocks/form.tpl
  3. 0
      admin/templates/sysblocks/form_visual.tpl
  4. 2
      admin/templates/sysblocks/list.tpl
  5. 0
      admin/templates/sysblocks/multi.tpl
  6. 0
      admin/templates/sysblocks/nav.tpl
  7. 0
      class/class.blocks.php
  8. 146
      class/class.core.php
  9. 0
      class/class.dbdump.php
  10. 72
      class/class.debug.php
  11. 2
      class/class.docs.php
  12. 0
      class/class.hooks.php
  13. 0
      class/class.logs.php
  14. 30
      class/class.meta.php
  15. 5
      class/class.modules.php
  16. 0
      class/class.navigation.php
  17. 6
      class/class.paginations.php
  18. 0
      class/class.porter.php
  19. 0
      class/class.request.php
  20. 0
      class/class.session.files.php
  21. 0
      class/class.session.memcached.php
  22. 246
      class/class.session.php
  23. 0
      class/class.settings.php
  24. 17
      class/class.sysblocks.php
  25. 0
      class/class.template.php
  26. 0
      class/class.templates.php
  27. 0
      class/class.user.php
  28. 170
      class/class.utm.php
  29. 0
      functions/.htaccess
  30. 2
      functions/func.common.php
  31. 101
      functions/func.fields.php
  32. 4
      functions/func.pagination.php
  33. 44
      functions/func.parserequest.php
  34. 100
      functions/func.sysblock.php
  35. 25
      tmp/update/sql.update.php

5
admin/lang/ru/sysblocks.txt

@ -73,4 +73,7 @@ SYSBLOCK_ALIAS = "Алиас"
SYSBLOCK_I = "Опционально. Алиас позволяет использовать легко запоминающийся тег [tag:sysblock:alias] вместо [tag:sysblock:id]. Алиас не должен являться числом, может содержать только цифры, латинские буквы, дефис, подчёркивание, иметь длину не более 20 символов и быть уникальным в пределах модуля" SYSBLOCK_I = "Опционально. Алиас позволяет использовать легко запоминающийся тег [tag:sysblock:alias] вместо [tag:sysblock:id]. Алиас не должен являться числом, может содержать только цифры, латинские буквы, дефис, подчёркивание, иметь длину не более 20 символов и быть уникальным в пределах модуля"
SYSBLOCK_ACCEPT = "Этот алиас можно использовать" SYSBLOCK_ACCEPT = "Этот алиас можно использовать"
SYSBLOCK_ER_SYN = "Неверный алиас!<br> Алиас не должен являться числом, может содержать только цифры, латинские буквы, дефис, подчёркивание и иметь длину не более 20 символов" SYSBLOCK_ER_SYN = "Неверный алиас!<br> Алиас не должен являться числом, может содержать только цифры, латинские буквы, дефис, подчёркивание и иметь длину не более 20 символов"
SYSBLOCK_ER_EXISTS = "Неверный алиас!<br> Данный алиас уже привязан к другоому системному блоку" SYSBLOCK_ER_EXISTS = "Неверный алиас!<br> Данный алиас уже привязан к другоому системному блоку"
// v 3.25
SYSBLOCK_EVAL = "Выполнять PHP перед выозвращением результата"

8
admin/templates/sysblocks/form.tpl

@ -42,7 +42,7 @@
<td> <td>
<strong>{#SYSBLOCK_NAME#}</strong> <strong>{#SYSBLOCK_NAME#}</strong>
</td> </td>
<td colspan="3"> <td colspan="4">
<div class="pr12"> <div class="pr12">
<input name="sysblock_name" class="mousetrap" type="text" value="{if $smarty.request.id != ''}{$sysblock_name|escape}{else}{$smarty.request.sysblock_name}{/if}" /> <input name="sysblock_name" class="mousetrap" type="text" value="{if $smarty.request.id != ''}{$sysblock_name|escape}{else}{$smarty.request.sysblock_name}{/if}" />
</div> </div>
@ -50,7 +50,7 @@
</tr> </tr>
<tr> <tr>
<td>{#SYSBLOCK_DESCRIPTION#}</td> <td>{#SYSBLOCK_DESCRIPTION#}</td>
<td colspan="3"> <td colspan="4">
<input name="sysblock_description" type="text" id="sysblock_description" value="{if $smarty.request.id != ''}{$sysblock_description|escape}{else}{$smarty.request.sysblock_description}{/if}" placeholder="{#SYSBLOCK_DESCRIPTION#}"> <input name="sysblock_description" type="text" id="sysblock_description" value="{if $smarty.request.id != ''}{$sysblock_description|escape}{else}{$smarty.request.sysblock_description}{/if}" placeholder="{#SYSBLOCK_DESCRIPTION#}">
</td> </td>
</tr> </tr>
@ -60,7 +60,7 @@
<strong><a class="toprightDir" title="{#SYSBLOCK_I#}">[?]</a></strong> {#SYSBLOCK_ALIAS#}: <strong><a class="toprightDir" title="{#SYSBLOCK_I#}">[?]</a></strong> {#SYSBLOCK_ALIAS#}:
</div> </div>
</td> </td>
<td colspan="3"> <td colspan="4">
<div class="pr12"> <div class="pr12">
<input type="text" name="sysblock_alias" id="sysblock_alias" value="{if $smarty.request.id != ''}{$sysblock_alias}{else}{$smarty.request.sysblock_alias}{/if}" class="mousetrap" data-accept="{#SYSBLOCK_ACCEPT#}" data-error-syn="{#SYSBLOCK_ER_SYN#}" data-error-exists="{#SYSBLOCK_ER_EXISTS#}" placeholder="{#SYSBLOCK_ALIAS#}" maxlength="20" style="width: 200px;" autocomplete="off" />&nbsp; <input type="text" name="sysblock_alias" id="sysblock_alias" value="{if $smarty.request.id != ''}{$sysblock_alias}{else}{$smarty.request.sysblock_alias}{/if}" class="mousetrap" data-accept="{#SYSBLOCK_ACCEPT#}" data-error-syn="{#SYSBLOCK_ER_SYN#}" data-error-exists="{#SYSBLOCK_ER_EXISTS#}" placeholder="{#SYSBLOCK_ALIAS#}" maxlength="20" style="width: 200px;" autocomplete="off" />&nbsp;
<input type="text" id="sysblock_alias_tag" value="[tag:sysblock:{if $smarty.request.id != ''}{if $sysblock_alias != ''}{$sysblock_alias}{else}{$smarty.request.id}{/if}{else}{$smarty.request.sysblock_alias}{/if}]" readonly size="40" class="mousetrap" style="width: 200px;" /> <input type="text" id="sysblock_alias_tag" value="[tag:sysblock:{if $smarty.request.id != ''}{if $sysblock_alias != ''}{$sysblock_alias}{else}{$smarty.request.id}{/if}{else}{$smarty.request.sysblock_alias}{/if}]" readonly size="40" class="mousetrap" style="width: 200px;" />
@ -81,7 +81,7 @@
<input type="checkbox" value="1" name="sysblock_visual" class="float" {if $sysblock_visual}checked="checked"{/if} /><label>{#SYSBLOCK_VISUAL#}</label> <input type="checkbox" value="1" name="sysblock_visual" class="float" {if $sysblock_visual}checked="checked"{/if} /><label>{#SYSBLOCK_VISUAL#}</label>
</td> </td>
<td> <td>
<input type="checkbox" value="1" name="sysblock_eval" class="float" {if $sysblock_eval}checked="checked"{/if} /><label>{#SYSBLOCK_EVAL#}</label>
</td> </td>
</tr> </tr>
{if $sysblock_external} {if $sysblock_external}

0
admin/templates/sysblocks/form_visual.tpl

2
admin/templates/sysblocks/list.tpl

@ -120,7 +120,7 @@
<td align="center">{$sysblock->sysblock_author_id|escape}</td> <td align="center">{$sysblock->sysblock_author_id|escape}</td>
<td align="center"> <td align="center">
<span class="date_text dgrey">{$sysblock->sysblock_created|date_format:$TIME_FORMAT|pretty_date}</span> <span class="date_text dgrey">{$sysblock->sysblock_created|date_format:$TIME_FORMAT|translate_date}</span>
</td> </td>
<td> <td>

0
admin/templates/sysblocks/multi.tpl

0
admin/templates/sysblocks/nav.tpl

0
class/class.blocks.php

146
class/class.core.php

@ -66,47 +66,6 @@
public $_module_not_found = 'Запрашиваемый модуль не найден.'; public $_module_not_found = 'Запрашиваемый модуль не найден.';
/**
* Получение основных настроек сисблока
*
* @param string $param параметр настройки, если не указан - все параметры
* @return mixed
*/
function _sysBlock($id, $param = '')
{
global $AVE_DB;
static $sys_block = null;
if ($sys_block === null)
{
$sys_block = $AVE_DB->Query("
SELECT
*
FROM
" . PREFIX . "_sysblocks
WHERE
" . (is_numeric($id) ? 'id' : 'sysblock_alias') . " = '" . $id . "'
")->FetchAssocArray();
}
if ($param == '')
return $sys_block;
return isset($sys_block[$param])
? $sys_block[$param]
: null;
}
/**
* Получаем шаблон документа
*
* @param $rubric_id
* @param $template_id
*
* @return bool|null|string
*/
function _getMainTemplate($rubric_id, $template_id) function _getMainTemplate($rubric_id, $template_id)
{ {
global $AVE_DB; global $AVE_DB;
@ -186,7 +145,6 @@
: null; : null;
} }
/** /**
* Метод, предназначенный для получения шаблонов * Метод, предназначенный для получения шаблонов
* *
@ -294,7 +252,6 @@
return $out; return $out;
} }
/** /**
* Метод, предназначенный для получения шаблона модуля * Метод, предназначенный для получения шаблона модуля
* *
@ -351,7 +308,6 @@
return stripslashes($out); return stripslashes($out);
} }
/** /**
* Метод, предназначенный для получения прав доступа к документам рубрики * Метод, предназначенный для получения прав доступа к документам рубрики
* *
@ -412,7 +368,7 @@
/** /**
* Метод, предназначенный для обработки события 404 Not Found, т.е. когда страница не найдена. * Метод, предназначенный для обработки события 404 Not Found, т.е. когда страница не найдена.
* *
* @return void * @return unknown
*/ */
function _coreErrorPage404() function _coreErrorPage404()
{ {
@ -501,7 +457,6 @@
return (isset($this->curentdoc->Id) && $this->curentdoc->Id == $document_id); return (isset($this->curentdoc->Id) && $this->curentdoc->Id == $document_id);
} }
/** /**
* Метод, предназначенный для получения содержимого страницы с 404 ошибкой * Метод, предназначенный для получения содержимого страницы с 404 ошибкой
* *
@ -546,7 +501,6 @@
return (isset($this->curentdoc->Id) && $this->curentdoc->Id == $page_not_found_id); return (isset($this->curentdoc->Id) && $this->curentdoc->Id == $page_not_found_id);
} }
/** /**
* Метод, предназначенный для получения МЕТА-тегов для различных модулей. * Метод, предназначенный для получения МЕТА-тегов для различных модулей.
* ToDo * ToDo
@ -577,7 +531,6 @@
return (isset($this->curentdoc->Id) && $this->curentdoc->Id == 1); return (isset($this->curentdoc->Id) && $this->curentdoc->Id == 1);
} }
/** /**
* Метод, предназначенный для определения статуса документа (доступен ли он к публикации). * Метод, предназначенный для определения статуса документа (доступен ли он к публикации).
* *
@ -627,7 +580,6 @@
return (! empty($this->curentdoc)); return (! empty($this->curentdoc));
} }
/** /**
* Метод парсинга тега [tag:(css|js):files] * Метод парсинга тега [tag:(css|js):files]
* для вывода css/js-файлов в шаблоне через combine.php * для вывода css/js-файлов в шаблоне через combine.php
@ -681,13 +633,6 @@
} }
/**
* @param $main_content
* @param $id
* @param $rubTmpl
*
* @return mixed|null|string|string[]
*/
function _main_content ($main_content, $id, $rubTmpl) function _main_content ($main_content, $id, $rubTmpl)
{ {
global $AVE_DB, $AVE_Template; global $AVE_DB, $AVE_Template;
@ -695,13 +640,13 @@
// Проверяем теги полей в шаблоне рубрики на условие != '' // Проверяем теги полей в шаблоне рубрики на условие != ''
if (defined('USE_GET_FIELDS') && USE_GET_FIELDS) if (defined('USE_GET_FIELDS') && USE_GET_FIELDS)
{ {
$main_content = preg_replace("/\[tag:if_notempty:fld:([a-zA-Z0-9-_]+)\]/u", '<'.'?php if((htmlspecialchars(get_field(\'$1\'), ENT_QUOTES)) != \'\') { '.' ?'.'>', $rubTmpl); $main_content = preg_replace("/\[tag:if_notempty:fld:([a-zA-Z0-9-_]+)\]/u", '<'.'?php if((htmlspecialchars(get_field(\'$1\'), ENT_QUOTES)) != \'\') { '.'?'.'>', $rubTmpl);
$main_content = preg_replace("/\[tag:if_empty:fld:([a-zA-Z0-9-_]+)\]/u", '<'.'?php if((htmlspecialchars(get_field(\'$1\'), ENT_QUOTES)) == \'\') { '.' ?'.'>', $main_content); $main_content = preg_replace("/\[tag:if_empty:fld:([a-zA-Z0-9-_]+)\]/u", '<'.'?php if((htmlspecialchars(get_field(\'$1\'), ENT_QUOTES)) == \'\') { '.'?'.'>', $main_content);
} }
else else
{ {
$main_content = preg_replace("/\[tag:if_notempty:fld:([a-zA-Z0-9-_]+)\]/u", '<'.'?php if((htmlspecialchars(document_get_field(\'$1\'), ENT_QUOTES)) != \'\') { '.' ?'.'>', $rubTmpl); $main_content = preg_replace("/\[tag:if_notempty:fld:([a-zA-Z0-9-_]+)\]/u", '<'.'?php if((htmlspecialchars(document_get_field(\'$1\'), ENT_QUOTES)) != \'\') { '.'?'.'>', $rubTmpl);
$main_content = preg_replace("/\[tag:if_empty:fld:([a-zA-Z0-9-_]+)\]/u", '<'.'?php if((htmlspecialchars(document_get_field(\'$1\'), ENT_QUOTES)) == \'\') { '.' ?'.'>', $main_content); $main_content = preg_replace("/\[tag:if_empty:fld:([a-zA-Z0-9-_]+)\]/u", '<'.'?php if((htmlspecialchars(document_get_field(\'$1\'), ENT_QUOTES)) == \'\') { '.'?'.'>', $main_content);
} }
$main_content = str_replace('[tag:if:else]', '<?php }else{ ?>', $main_content); $main_content = str_replace('[tag:if:else]', '<?php }else{ ?>', $main_content);
@ -710,10 +655,10 @@
// Парсим элементы полей // Парсим элементы полей
$main_content = preg_replace_callback( $main_content = preg_replace_callback(
'/\[tag:fld:([a-zA-Z0-9-_]+)\]\[([0-9]+)]\[([0-9]+)]/', '/\[tag:fld:([a-zA-Z0-9-_]+)\]\[([0-9]+)]\[([0-9]+)]/',
function ($m) create_function(
{ '$m',
return get_field_element($m[1], $m[2], $m[3], $this->curentdoc->Id); 'return get_field_element($m[1], $m[2], $m[3], ' . $this->curentdoc->Id . ');'
}, ),
$main_content $main_content
); );
@ -723,10 +668,10 @@
// Повторно парсим элементы полей // Повторно парсим элементы полей
$main_content = preg_replace_callback( $main_content = preg_replace_callback(
'/\[tag:fld:([a-zA-Z0-9-_]+)\]\[([0-9]+)]\[([0-9]+)]/', '/\[tag:fld:([a-zA-Z0-9-_]+)\]\[([0-9]+)]\[([0-9]+)]/',
function ($m) create_function(
{ '$m',
return get_field_element($m[1], $m[2], $m[3], $this->curentdoc->Id); 'return get_field_element($m[1], $m[2], $m[3], ' . $this->curentdoc->Id . ');'
}, ),
$main_content $main_content
); );
@ -765,10 +710,8 @@
// парсим теги в шаблоне рубрики // парсим теги в шаблоне рубрики
$main_content = preg_replace_callback( $main_content = preg_replace_callback(
'/\[tag:date:([a-zA-Z0-9-. \/]+)\]/', '/\[tag:date:([a-zA-Z0-9-. \/]+)\]/',
function ($m) create_function('$m','return translate_date(date($m[1], '.$this->curentdoc->document_published.'));
{ '),
return translate_date(date($m[1], $this->curentdoc->document_published));
},
$main_content $main_content
); );
@ -809,11 +752,6 @@
} }
/**
* Получаем ID для кеша документа
*
* @return array|bool
*/
function _get_cache_id() function _get_cache_id()
{ {
$cache = array(); $cache = array();
@ -839,13 +777,6 @@
} }
/**
* Создаем компилированный документ
*
* @param $main_content
*
* @return bool
*/
function setCompileDocument ($main_content) function setCompileDocument ($main_content)
{ {
$cache = $this->_get_cache_id(); $cache = $this->_get_cache_id();
@ -876,11 +807,6 @@
} }
/**
* Получаем скомпилированный документ
*
* @return bool|string
*/
function getCompileDocument () function getCompileDocument ()
{ {
$cache = $this->_get_cache_id(); $cache = $this->_get_cache_id();
@ -1059,7 +985,6 @@
} }
} }
/** /**
* Метод, предназанченный для сборки всей страницы в единое целое. * Метод, предназанченный для сборки всей страницы в единое целое.
* *
@ -1088,14 +1013,14 @@
} }
// проверяем разрешение на внешнее обращение // проверяем разрешение на внешнее обращение
if (! $this->_sysBlock($_REQUEST['sysblock'], 'sysblock_external')) if (! _getSysBlock($_REQUEST['sysblock'], 'sysblock_external'))
{ {
header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found', true); header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found', true);
exit; exit;
} }
// проверяем разрешение на обращение только по Ajax // проверяем разрешение на обращение только по Ajax
if ($this->_sysBlock($_REQUEST['sysblock'], 'sysblock_ajax')) if (_getSysBlock($_REQUEST['sysblock'], 'sysblock_ajax'))
{ {
if (isAjax()) if (isAjax())
$out = parse_sysblock($_REQUEST['sysblock']); $out = parse_sysblock($_REQUEST['sysblock']);
@ -1158,9 +1083,7 @@
// Выполняем Код рубрики До загрузки документа // Выполняем Код рубрики До загрузки документа
ob_start(); ob_start();
eval(' ?>' . $this->curentdoc->rubric_start_code . '<?php '); eval(' ?>' . $this->curentdoc->rubric_start_code . '<?php ');
ob_end_clean(); ob_end_clean();
// Получаем шаблон // Получаем шаблон
@ -1341,6 +1264,7 @@
$out $out
); );
// Удаляем ошибочные теги полей документа в шаблоне рубрики // Удаляем ошибочные теги полей документа в шаблоне рубрики
$out = preg_replace('/\[tag:rfld:\w*\]/', '', $out); $out = preg_replace('/\[tag:rfld:\w*\]/', '', $out);
@ -1362,7 +1286,22 @@
$out = preg_replace_callback('/\[tag:block:([A-Za-z0-9-_]{1,20}+)\]/', 'parse_block', $out); $out = preg_replace_callback('/\[tag:block:([A-Za-z0-9-_]{1,20}+)\]/', 'parse_block', $out);
// Парсим теги системных блоков // Парсим теги системных блоков
$out = preg_replace_callback('/\[tag:sysblock:([A-Za-z0-9-_]{1,20}+)\]/', 'parse_sysblock', $out); $out = preg_replace_callback('/\[tag:sysblock:([A-Za-z0-9-_]{1,20}+)(|:\{(.*?)\})\]/',
function ($m)
{
return parse_sysblock($m[1], $m[2]);
},
$out);
// Парсим тизер документа
$out = preg_replace_callback(
'/\[tag:teaser:(\d+)(|:\[(.*?)\])\]/',
create_function(
'$m',
'return showteaser($m[1], $m[2]);'
),
$out
);
// Парсим теги модулей // Парсим теги модулей
$out = $this->coreModuleTagParse($out); $out = $this->coreModuleTagParse($out);
@ -1560,10 +1499,10 @@
// Парсим тизер документа // Парсим тизер документа
$out = preg_replace_callback( $out = preg_replace_callback(
'/\[tag:teaser:(\d+)(|:\[(.*?)\])\]/', '/\[tag:teaser:(\d+)(|:\[(.*?)\])\]/',
function ($m) create_function(
{ '$m',
return showteaser($m[1], $m[2]); 'return showteaser($m[1], $m[2]);'
}, ),
$out $out
); );
@ -1571,10 +1510,10 @@
if (defined('RUB_ID')) if (defined('RUB_ID'))
$out = preg_replace_callback( $out = preg_replace_callback(
'/\[tag:docauthoravatar:(\d+)\]/', '/\[tag:docauthoravatar:(\d+)\]/',
function ($m) create_function(
{ '$m',
return getAvatar(intval($this->curentdoc->document_author_id), $m[1]); 'return getAvatar('.intval($this->curentdoc->document_author_id).', $m[1]);'
}, ),
$out $out
); );
@ -1613,7 +1552,6 @@
echo $out; echo $out;
} }
/** /**
* Метод, предназначенный для формирования ЧПУ, а также для поиска документа и разбора * Метод, предназначенный для формирования ЧПУ, а также для поиска документа и разбора
* дополнительных параметров в URL * дополнительных параметров в URL

0
class/class.dbdump.php

72
class/class.debug.php

@ -41,7 +41,7 @@
* *
* @return false|null|string|string[] * @return false|null|string|string[]
*/ */
public static function _echo($var, $exit = false, $bg = null, $echo = true) public static function _echo($var, $exit = false, $_bg = null, $echo = true)
{ {
$code = ''; $code = '';
@ -92,8 +92,10 @@
else else
$fn_name = 'EVAL'; $fn_name = 'EVAL';
if (empty($bg)) if ($_bg)
$bg = '43648c'; $bg = 'style="background: #' . $_bg . ';"';
else
$bg = '';
$var_dump = ' $var_dump = '
<style> <style>
@ -101,7 +103,7 @@
margin: 20px; margin: 20px;
border: 1px solid #d9d9d9; border: 1px solid #d9d9d9;
background-color: #f1efef; background-color: #f1efef;
border-radius: 3px; border-radius: 5px;
box-shadow: 0 0 3px rgba(0, 0, 0, 0.1); box-shadow: 0 0 3px rgba(0, 0, 0, 0.1);
font-family: "Consolas", Verdana, Arial; font-family: "Consolas", Verdana, Arial;
font-size: 11px; font-size: 11px;
@ -114,6 +116,7 @@
padding-top: 10px; padding-top: 10px;
padding-bottom: 10px; padding-bottom: 10px;
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.75); text-shadow: 0 1px 1px rgba(0, 0, 0, 0.75);
background-color: #43648c;
background-repeat: repeat-x; background-repeat: repeat-x;
border-bottom: 1px solid #ffffff; border-bottom: 1px solid #ffffff;
} }
@ -125,7 +128,7 @@
} }
</style> </style>
<div class="debug_bg"> <div class="debug_bg">
<div class="debug_top" style="background-color: #' . $bg . ';"> <div class="debug_top" ' . $bg . '>
var_dump(<strong>' . trim($fn_name) . '</strong>) var_dump(<strong>' . trim($fn_name) . '</strong>)
</div> </div>
'.self::_trace().' '.self::_trace().'
@ -157,7 +160,7 @@
* *
* @return null|string|string[] * @return null|string|string[]
*/ */
public static function _print($var, $exit = false, $bg = null, $echo = true) public static function _print($var, $exit = false, $_bg = null, $echo = true)
{ {
$code = ''; $code = '';
@ -202,8 +205,10 @@
else else
$fn_name = 'EVAL'; $fn_name = 'EVAL';
if (! $bg) if ($_bg)
$bg = '4e5665'; $bg = 'style="background: #' . $_bg . ';"';
else
$bg = '';
$var_dump = ' $var_dump = '
<style> <style>
@ -211,9 +216,9 @@
margin: 20px; margin: 20px;
border: 1px solid #d9d9d9; border: 1px solid #d9d9d9;
background-color: #f1efef; background-color: #f1efef;
border-radius: 3px; border-radius: 5px;
box-shadow: 0 0 3px rgba(0, 0, 0, 0.1); box-shadow: 0 0 3px rgba(0, 0, 0, 0.1);
font-family: Consolas, Verdana, Arial; font-family: "Consolas", Verdana, Arial;
font-size: 11px; font-size: 11px;
} }
.debug_top { .debug_top {
@ -224,6 +229,7 @@
padding-top: 10px; padding-top: 10px;
padding-bottom: 10px; padding-bottom: 10px;
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.75); text-shadow: 0 1px 1px rgba(0, 0, 0, 0.75);
background-color: #4e5665;
background-repeat: repeat-x; background-repeat: repeat-x;
border-bottom: 1px solid #ffffff; border-bottom: 1px solid #ffffff;
} }
@ -235,7 +241,7 @@
} }
</style> </style>
<div class="debug_bg"> <div class="debug_bg">
<div class="debug_top" style="background-color: #' . $bg . ';"> <div class="debug_top" ' . $bg . '>
print_r(<strong>' . trim($fn_name) . '</strong>) print_r(<strong>' . trim($fn_name) . '</strong>)
</div> </div>
'.self::_trace().' '.self::_trace().'
@ -267,7 +273,7 @@
* *
* @return string * @return string
*/ */
public static function _exp($var, $exit = false, $bg = null, $echo = true) public static function _exp($var, $exit = false, $_bg = null, $echo = true)
{ {
$code = ''; $code = '';
@ -306,8 +312,10 @@
else else
$fn_name = 'EVAL'; $fn_name = 'EVAL';
if (! $bg) if ($_bg)
$bg = 'ccc'; $bg = 'style="background: #' . $_bg . ';"';
else
$bg = '';
$var_export = htmlspecialchars(ob_get_contents()); $var_export = htmlspecialchars(ob_get_contents());
@ -321,9 +329,9 @@
margin: 20px; margin: 20px;
border: 1px solid #d9d9d9; border: 1px solid #d9d9d9;
background-color: #f1efef; background-color: #f1efef;
border-radius: 3px; border-radius: 5px;
box-shadow: 0 0 3px rgba(0, 0, 0, 0.1); box-shadow: 0 0 3px rgba(0, 0, 0, 0.1);
font-family: Consolas, Verdana, Arial; font-family: "Consolas", Verdana, Arial;
font-size: 11px; font-size: 11px;
} }
.debug_top { .debug_top {
@ -334,6 +342,7 @@
padding-top: 10px; padding-top: 10px;
padding-bottom: 10px; padding-bottom: 10px;
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.75); text-shadow: 0 1px 1px rgba(0, 0, 0, 0.75);
background-color: #ccc;
background-repeat: repeat-x; background-repeat: repeat-x;
border-bottom: 1px solid #ffffff; border-bottom: 1px solid #ffffff;
} }
@ -345,7 +354,7 @@
} }
</style> </style>
<div class="debug_bg"> <div class="debug_bg">
<div class="debug_top" style="background-color: #' . $bg . ';"> <div class="debug_top" ' . $bg . '>
var_export(<strong>' . trim($fn_name) . '</strong>) var_export(<strong>' . trim($fn_name) . '</strong>)
</div> </div>
'.self::_trace().' '.self::_trace().'
@ -377,7 +386,7 @@
* *
* @return false|string * @return false|string
*/ */
public static function _html($var, $exit = false, $bg = null, $echo = true) public static function _html($var, $exit = false, $_bg = null, $echo = true)
{ {
$code = ''; $code = '';
@ -416,8 +425,10 @@
else else
$fn_name = 'EVAL'; $fn_name = 'EVAL';
if (! $bg) if ($_bg)
$bg = '43648c'; $bg = 'style="background: #' . $_bg . ';"';
else
$bg = '';
$var_dump = ob_get_contents(); $var_dump = ob_get_contents();
@ -429,9 +440,9 @@
margin: 20px; margin: 20px;
border: 1px solid #d9d9d9; border: 1px solid #d9d9d9;
background-color: #f1efef; background-color: #f1efef;
border-radius: 3px; border-radius: 5px;
box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.1); box-shadow: 0 0 3px rgba(0, 0, 0, 0.1);
font-family: Consolas, Verdana, Arial; font-family: "Consolas", Verdana, Arial;
font-size: 11px; font-size: 11px;
} }
.debug_top { .debug_top {
@ -442,6 +453,7 @@
padding-top: 10px; padding-top: 10px;
padding-bottom: 10px; padding-bottom: 10px;
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.75); text-shadow: 0 1px 1px rgba(0, 0, 0, 0.75);
background-color: #43648c;
background-repeat: repeat-x; background-repeat: repeat-x;
border-bottom: 1px solid #ffffff; border-bottom: 1px solid #ffffff;
} }
@ -453,7 +465,7 @@
} }
</style> </style>
<div class="debug_bg"> <div class="debug_bg">
<div class="debug_top" style="background-color: #' . $bg . ';"> <div class="debug_top" ' . $bg . '>
var_export(<strong>' . trim($fn_name) . '</strong>) var_export(<strong>' . trim($fn_name) . '</strong>)
</div> </div>
'.self::_trace().' '.self::_trace().'
@ -533,7 +545,14 @@
$fn_name = 'EVAL'; $fn_name = 'EVAL';
if (! $bg) if (! $bg)
{
$br = '2a5885';
$bg = '43648c'; $bg = '43648c';
}
else
{
$br = $bg;
}
$var_dump = ' $var_dump = '
<style> <style>
@ -541,7 +560,7 @@
margin: 20px; margin: 20px;
border: 1px solid #d9d9d9; border: 1px solid #d9d9d9;
background-color: #f1efef; background-color: #f1efef;
border-radius: 3px; border-radius: 5px;
box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.1); box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.1);
font-family: Consolas, Verdana, Arial; font-family: Consolas, Verdana, Arial;
font-size: 11px; font-size: 11px;
@ -554,6 +573,7 @@
padding-top: 10px; padding-top: 10px;
padding-bottom: 10px; padding-bottom: 10px;
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.75); text-shadow: 0 1px 1px rgba(0, 0, 0, 0.75);
background-color: #'.$bg.';
background-repeat: repeat-x; background-repeat: repeat-x;
border-bottom: 1px solid #ffffff; border-bottom: 1px solid #ffffff;
} }
@ -565,7 +585,7 @@
} }
</style> </style>
<div class="debug_bg"> <div class="debug_bg">
<div class="debug_top" style="background-color: #' . $bg . ';"> <div class="debug_top">
var_dump(<strong>' . trim($fn_name) . '</strong>) var_dump(<strong>' . trim($fn_name) . '</strong>)
</div> </div>
'.self::_trace().' '.self::_trace().'

2
class/class.docs.php

@ -1478,7 +1478,7 @@
// Если пришел вызов поля, который связан с модулем // Если пришел вызов поля, который связан с модулем
if (isset($data['field_module'])) if (isset($data['field_module']))
{ {
while(list($mod_key, $mod_val) = each($_REQUEST['field_module'])) while(list($mod_key, $mod_val) = each($data['field_module']))
{ {
require_once(BASE_DIR . '/modules/' . $mod_val . '/document.php'); require_once(BASE_DIR . '/modules/' . $mod_val . '/document.php');

0
class/class.hooks.php

0
class/class.logs.php

30
class/class.meta.php

@ -14,19 +14,17 @@ class Meta
{ {
private $_keyword_count = 10; private $_keyword_count = 10;
public function __construct($keyword_count = false) public function __construct( $keyword_count = false )
{ {
if ((int)$keyword_count) if( (int) $keyword_count ) $this->_keyword_count = $keyword_count;
$this->_keyword_count = $keyword_count;
} }
public function setKeywordCount($keyword_count) public function setKeywordCount( $keyword_count )
{ {
if ((int)$keyword_count) if( (int) $keyword_count ) $this->_keyword_count = $keyword_count;
$this->_keyword_count = $keyword_count;
} }
public function generateMeta($text) public function generateMeta( $text )
{ {
$newarr = array (); $newarr = array ();
@ -51,24 +49,20 @@ class Meta
$arr = explode( " ", $text ); $arr = explode( " ", $text );
foreach ($arr as $word) foreach ( $arr as $word ) {
{ if( mb_strlen( ($word) ) > 4 OR (mb_strtoupper($word)==$word) and mb_strlen( ($word) ) > 1) $newarr[] = $word;
if (mb_strlen(($word)) > 4 OR (mb_strtoupper($word) == $word) and mb_strlen(($word)) > 1)
$newarr[] = $word;
} }
$arr = array_count_values($newarr); $arr = array_count_values( $newarr );
arsort( $arr );
arsort($arr); $arr = array_keys( $arr );
$arr = array_keys($arr); $total = count( $arr );
// Не используется
// $total = count($arr);
$offset = 0; $offset = 0;
$arr = array_slice($arr, $offset, $this->_keyword_count); $arr = array_slice( $arr, $offset, $this->_keyword_count );
$return['keywords'] = implode( ", ", $arr ); $return['keywords'] = implode( ", ", $arr );
$return['description'] = trim(mb_substr( trim($text), 0, 220 ),'.').'.'; $return['description'] = trim(mb_substr( trim($text), 0, 220 ),'.').'.';

5
class/class.modules.php

@ -404,7 +404,6 @@
ModuleSysName = '" . MODULE_PATH . "' ModuleSysName = '" . MODULE_PATH . "'
"); ");
} }
// Сохраняем системное сообщение в журнал // Сохраняем системное сообщение в журнал
reportLog ($AVE_Template->get_config_vars('MODULES_ACTION_UPDATE') . ' (' . MODULE_PATH . ')'); reportLog ($AVE_Template->get_config_vars('MODULES_ACTION_UPDATE') . ' (' . MODULE_PATH . ')');
@ -514,8 +513,8 @@
foreach ($files as $file) foreach ($files as $file)
{ {
if (substr($file, -1) == '/') if(substr($file, -1) == '/')
$this->moduleRemove($file); moduleRemove($file);
else else
unlink($file); unlink($file);
} }

0
class/class.navigation.php

6
class/class.paginations.php

@ -132,7 +132,10 @@
$search = array('[link]', '[page]', '[name]'); $search = array('[link]', '[page]', '[name]');
$replace = array($template_label, $page, $page); $replace = array($template_label, $page, $page);
$link = str_replace($search, $replace, $pagination_link_template); if ($curent_page != 1)
$link = str_replace($search, $replace, $pagination_link_template);
else
$link = str_replace($search, $replace, $pagination_link_active_template);
$pagination .= sprintf($pagination_link_box, str_replace(array('{s}', '{t}'), $page, str_replace(array('&amp;' . $type . '={s}', '&' . $type . '={s}', '/' . $type . '-{s}'), '', $link))); $pagination .= sprintf($pagination_link_box, str_replace(array('{s}', '{t}'), $page, str_replace(array('&amp;' . $type . '={s}', '&' . $type . '={s}', '/' . $type . '-{s}'), '', $link)));
} }
@ -150,6 +153,7 @@
} }
} }
// Следующая // Следующая
if ($curent_page < $total_pages) if ($curent_page < $total_pages)
{ {

0
class/class.porter.php

0
class/class.request.php

0
class/class.session.files.php

0
class/class.session.memcached.php

246
class/class.session.php

@ -1,155 +1,161 @@
<?php <?php
/**
* AVE.cms
*
* @package AVE.cms
* @version 3.x
* @filesource
* @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru
*
* @license GPL v.2
*/
class AVE_Session_DB
{
public $sess_lifetime;
/** /**
* AVE.cms * Хост
*
* @package AVE.cms
* @version 3.x
* @filesource
* @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru
* *
* @license GPL v.2 * @var string
*/ */
protected $db_host;
class AVE_Session_DB /**
{ * Имя пользователя
*
public $sess_lifetime; * @var string
*/
/** protected $db_user;
* Хост
*
* @var string
*/
protected $db_host;
/**
* Имя пользователя
*
* @var string
*/
protected $db_user;
/**
* Пароль
*
* @var string
*/
protected $db_pass;
/**
* Имя текущей БД.
*
* @var string
*/
protected $db_dbase;
/**
* Префикс БД.
*
* @var string
*/
protected $db_prefix;
private $mysql_connect = null;
private $mysql_db = null;
/* Create a connection to a database */
function __construct()
{
// Подключаем конфигурационный файл с параметрами подключения
require (BASE_DIR . '/config/db.config.php');
$this->db_host = $config['dbhost'];
$this->db_user = $config['dbuser'];
$this->db_pass = $config['dbpass'];
$this->db_dbase = $config['dbname'];
$this->db_prefix = $config['dbpref'];
$this->sess_lifetime = (defined('SESSION_LIFETIME') && is_numeric(SESSION_LIFETIME)) /**
? SESSION_LIFETIME * Пароль
: (get_cfg_var("session.gc_maxlifetime") < 1440 *
? 1440 * @var string
: get_cfg_var("session.gc_maxlifetime")); */
protected $db_pass;
if (! $this->mysql_connect = mysqli_connect ($this->db_host, $this->db_user, $this->db_pass)) /**
$this->error(); * Имя текущей БД.
*
* @var string
*/
protected $db_dbase;
if (! $this->mysql_db = mysqli_select_db ($this->mysql_connect, $this->db_dbase)) /**
$this->error(); * Префикс БД.
*
* @var string
*/
protected $db_prefix;
$this->mysql_connect->set_charset('utf8'); private $mysql_connect = null;
private $mysql_db = null;
return true; /* Create a connection to a database */
function __construct()
{
// Подключаем конфигурационный файл с параметрами подключения
require (BASE_DIR . '/config/db.config.php');
$this->db_host = $config['dbhost'];
$this->db_user = $config['dbuser'];
$this->db_pass = $config['dbpass'];
$this->db_dbase = $config['dbname'];
$this->db_prefix = $config['dbpref'];
$this->sess_lifetime = (defined('SESSION_LIFETIME') && is_numeric(SESSION_LIFETIME))
? SESSION_LIFETIME
: (get_cfg_var("session.gc_maxlifetime") < 1440
? 1440
: get_cfg_var("session.gc_maxlifetime"));
if (! $this->mysql_connect = mysqli_connect ($this->db_host, $this->db_user, $this->db_pass))
{
$this->error();
} }
if (! $this->mysql_db = mysqli_select_db ($this->mysql_connect, $this->db_dbase))
/* Open session */
function _open($path, $name)
{ {
return true; $this->error();
} }
$this->mysql_connect->set_charset('utf8');
/* Close session */ return true;
function _close() }
{
@mysqli_query($this->mysql_connect, "DELETE FROM " . PREFIX . "_sessions WHERE expiry < '" . time() . "'");
if ($this->mysql_connect !== null) /* Open session */
@mysqli_close($this->mysql_connect); function _open($path, $name)
{
return true;
}
return true; /* Close session */
} function _close()
{
@mysqli_query($this->mysql_connect, "DELETE FROM " . PREFIX . "_sessions WHERE expiry < '" . time() . "'");
if ($this->mysql_connect !== null)
@mysqli_close($this->mysql_connect);
/* Read session */ return true;
function _read($ses_id) }
{
$qid = @mysqli_query($this->mysql_connect, "SELECT value, Ip FROM " . PREFIX . "_sessions WHERE sesskey = '" . $ses_id . "' AND expiry > '" . time() . "'");
if ((list($value, $ip) = @mysqli_fetch_row($qid)) && $ip == $_SERVER['REMOTE_ADDR']) /* Read session */
return $value; function _read($ses_id)
{
$qid = @mysqli_query($this->mysql_connect, "SELECT value, Ip FROM " . PREFIX . "_sessions WHERE sesskey = '" . $ses_id . "' AND expiry > '" . time() . "'");
return ''; if ((list($value, $ip) = @mysqli_fetch_row($qid)) && $ip == $_SERVER['REMOTE_ADDR'])
{
return $value;
} }
return '';
}
/* Write new data */ /* Write new data */
function _write($ses_id, $data) function _write($ses_id, $data)
{
if (! $qid = @mysqli_query($this->mysql_connect, "INSERT INTO ".PREFIX."_sessions VALUES ('".$ses_id."', ".(time()+$this->sess_lifetime).", '".addslashes($data)."', '".$_SERVER['REMOTE_ADDR']."', FROM_UNIXTIME(expiry, '%d.%m.%Y, %H:%i:%s'))"))
{ {
if (! $qid = @mysqli_query($this->mysql_connect, "INSERT INTO ".PREFIX."_sessions VALUES ('".$ses_id."', ".(time()+$this->sess_lifetime).", '".addslashes($data)."', '".$_SERVER['REMOTE_ADDR']."', FROM_UNIXTIME(expiry, '%d.%m.%Y, %H:%i:%s'))")) $qid = @mysqli_query($this->mysql_connect, "UPDATE ".PREFIX."_sessions SET expiry = ".(time()+$this->sess_lifetime).", expire_datum = FROM_UNIXTIME(expiry,'%d.%m.%Y, %H:%i:%s'), value = '".addslashes($data)."', Ip = '".$_SERVER['REMOTE_ADDR']."' WHERE sesskey = '".$ses_id."' AND expiry > '".time()."'");
$qid = @mysqli_query($this->mysql_connect, "UPDATE ".PREFIX."_sessions SET expiry = ".(time()+$this->sess_lifetime).", expire_datum = FROM_UNIXTIME(expiry,'%d.%m.%Y, %H:%i:%s'), value = '".addslashes($data)."', Ip = '".$_SERVER['REMOTE_ADDR']."' WHERE sesskey = '".$ses_id."' AND expiry > '".time()."'");
return $qid;
} }
/* Destroy session */ return $qid;
function _destroy($ses_id) }
{
return @mysqli_query($this->mysql_connect, "DELETE FROM ".PREFIX."_sessions WHERE sesskey = '".$ses_id."'");
}
/* Garbage collection, deletes old sessions */ /* Destroy session */
function _gc($maxlifetime) function _destroy($ses_id)
{ {
$session_res = @mysqli_query($this->mysql_connect, "DELETE FROM ".PREFIX."_sessions WHERE expire < (UNIX_TIMESTAMP(NOW()) - " . (int)$maxlifetime . ")"); return @mysqli_query($this->mysql_connect, "DELETE FROM ".PREFIX."_sessions WHERE sesskey = '".$ses_id."'");
}
if (! $session_res) /* Garbage collection, deletes old sessions */
return false; function _gc($maxlifetime)
else {
return true; $session_res = @mysqli_query($this->mysql_connect, "DELETE FROM ".PREFIX."_sessions WHERE expire < (UNIX_TIMESTAMP(NOW()) - " . (int)$maxlifetime . ")");
}
function error() { if (!$session_res) {
ob_start(); return false;
header('HTTP/1.1 503 Service Temporarily Unavailable'); }
header('Status: 503 Service Temporarily Unavailable'); else
header('Retry-After: 3600'); {
header('X-Powered-By:'); return true;
display_notice("Error connect to MySQL.");
die;
} }
} }
function error() {
ob_start();
header('HTTP/1.1 503 Service Temporarily Unavailable');
header('Status: 503 Service Temporarily Unavailable');
header('Retry-After: 3600');
header('X-Powered-By:');
display_notice("Error connect to MySQL.");
die;
}
}
?> ?>

0
class/class.settings.php

17
class/class.sysblocks.php

@ -38,7 +38,7 @@
/** /**
* Вывод списка системных блоков * Вывод списка системных блоков
*/ */
function sys_blockList() function sys_blockList ()
{ {
global $AVE_DB, $AVE_Template; global $AVE_DB, $AVE_Template;
@ -70,7 +70,7 @@
* *
* @param int $sysblock_id идентификатор системного блока * @param int $sysblock_id идентификатор системного блока
*/ */
function sys_blockSave($sysblock_id = null) function sys_blockSave ($sysblock_id = null)
{ {
global $AVE_DB, $AVE_Template; global $AVE_DB, $AVE_Template;
@ -78,10 +78,10 @@
{ {
$_REQUEST['sysblock_external'] = (isset($_REQUEST['sysblock_external'])) ? $_REQUEST['sysblock_external'] : 0; $_REQUEST['sysblock_external'] = (isset($_REQUEST['sysblock_external'])) ? $_REQUEST['sysblock_external'] : 0;
$_REQUEST['sysblock_eval'] = (isset($_REQUEST['sysblock_eval'])) ? $_REQUEST['sysblock_eval'] : 0;
$_REQUEST['sysblock_ajax'] = (isset($_REQUEST['sysblock_ajax'])) ? $_REQUEST['sysblock_ajax'] : 0; $_REQUEST['sysblock_ajax'] = (isset($_REQUEST['sysblock_ajax'])) ? $_REQUEST['sysblock_ajax'] : 0;
$_REQUEST['sysblock_visual'] = (isset($_REQUEST['sysblock_visual'])) ? $_REQUEST['sysblock_visual'] : 0; $_REQUEST['sysblock_visual'] = (isset($_REQUEST['sysblock_visual'])) ? $_REQUEST['sysblock_visual'] : 0;
$_REQUEST['sysblock_alias'] = isset($_REQUEST['sysblock_alias']) ? $_REQUEST['sysblock_alias'] : '';
$sysblock_alias = isset($_REQUEST['sysblock_alias']) ? $_REQUEST['sysblock_alias'] : '';
$sql = $AVE_DB->Query(" $sql = $AVE_DB->Query("
UPDATE UPDATE
@ -91,6 +91,7 @@
sysblock_description = '" . addslashes($_REQUEST['sysblock_description']) . "', sysblock_description = '" . addslashes($_REQUEST['sysblock_description']) . "',
sysblock_alias = '" . $_REQUEST['sysblock_alias'] . "', sysblock_alias = '" . $_REQUEST['sysblock_alias'] . "',
sysblock_text = '" . $_REQUEST['sysblock_text'] . "', sysblock_text = '" . $_REQUEST['sysblock_text'] . "',
sysblock_eval = '" . (int)$_REQUEST['sysblock_eval'] . "',
sysblock_external = '" . (int)$_REQUEST['sysblock_external'] . "', sysblock_external = '" . (int)$_REQUEST['sysblock_external'] . "',
sysblock_ajax = '" . (int)$_REQUEST['sysblock_ajax'] . "', sysblock_ajax = '" . (int)$_REQUEST['sysblock_ajax'] . "',
sysblock_visual = '" . (int)$_REQUEST['sysblock_visual'] . "' sysblock_visual = '" . (int)$_REQUEST['sysblock_visual'] . "'
@ -140,6 +141,7 @@
sysblock_alias = '" . $_REQUEST['sysblock_alias'] . "', sysblock_alias = '" . $_REQUEST['sysblock_alias'] . "',
sysblock_text = '" . $_REQUEST['sysblock_text'] . "', sysblock_text = '" . $_REQUEST['sysblock_text'] . "',
sysblock_author_id = '" . (int)$_SESSION['user_id'] . "', sysblock_author_id = '" . (int)$_SESSION['user_id'] . "',
sysblock_eval = '" . (int)$_REQUEST['sysblock_eval'] . "',
sysblock_external = '" . (int)$_REQUEST['sysblock_external'] . "', sysblock_external = '" . (int)$_REQUEST['sysblock_external'] . "',
sysblock_ajax = '" . (int)$_REQUEST['sysblock_ajax'] . "', sysblock_ajax = '" . (int)$_REQUEST['sysblock_ajax'] . "',
sysblock_visual = '" . (int)$_REQUEST['sysblock_visual'] . "', sysblock_visual = '" . (int)$_REQUEST['sysblock_visual'] . "',
@ -163,7 +165,7 @@
* *
* @param int $sysblock_id идентификатор системного блока * @param int $sysblock_id идентификатор системного блока
*/ */
function sys_blockEdit($sysblock_id) function sys_blockEdit ($sysblock_id)
{ {
global $AVE_DB, $AVE_Template; global $AVE_DB, $AVE_Template;
@ -201,13 +203,14 @@
/** /**
* Создание системного блока * Создание системного блока
*/ */
function sys_blockNew() function sys_blockNew ()
{ {
global $AVE_DB, $AVE_Template; global $AVE_DB, $AVE_Template;
$row['sysblock_name'] = ''; $row['sysblock_name'] = '';
$row['sysblock_alias'] = ''; $row['sysblock_alias'] = '';
$row['sysblock_text'] = ''; $row['sysblock_text'] = '';
$row['sysblock_eval'] = '1';
$row['sysblock_visual'] = (isset($_REQUEST['sysblock_visual']) && $_REQUEST['sysblock_visual'] != 0) ? $_REQUEST['sysblock_visual'] : ''; $row['sysblock_visual'] = (isset($_REQUEST['sysblock_visual']) && $_REQUEST['sysblock_visual'] != 0) ? $_REQUEST['sysblock_visual'] : '';
$AVE_Template->assign('sid', 0); $AVE_Template->assign('sid', 0);
@ -237,7 +240,7 @@
* *
* @param int $sysblock_id идентификатор системного блока * @param int $sysblock_id идентификатор системного блока
*/ */
function sys_blockDelete($sysblock_id) function sys_blockDelete ($sysblock_id)
{ {
global $AVE_DB, $AVE_Template; global $AVE_DB, $AVE_Template;

0
class/class.template.php

0
class/class.templates.php

0
class/class.user.php

170
class/class.utm.php

@ -1,119 +1,121 @@
<?php <?php
/* /*
Версия от 06.03.2018г.
Как это работает:
1) Пользователь зашел на сайт первый раз.
2) Если есть хотя бы один параметр - сохраняет cookies
3) Если utm_history уже есть, то сохраняет данные в utm_last
4) utm_last перезаписывается при каждом новом значении, а utm_history всегда остаётся неизменной (если был передан хотя бы один параметр)
5) utm_source сохраняется всегда до закрытия браузера
*/
class UTMCookie
{
private $parameters = array('utm_source', 'utm_medium', 'utm_campaign'); Версия от 06.03.2018г.
private $utm_history = ''; Как это работает:
private $utm_last = ''; 1) Пользователь зашел на сайт первый раз.
private $utm_source = ''; 2) Если есть хотя бы один параметр - сохраняет cookies
3) Если utm_history уже есть, то сохраняет данные в utm_last
4) utm_last перезаписывается при каждом новом значении, а utm_history всегда остаётся неизменной (если был передан хотя бы один параметр)
5) utm_source сохраняется всегда до закрытия браузера
//Проверка параметров: Если все присутствуют - true, иначе false */
private function check_parameters() class UTMCookie
{ {
//return true; //Сохранять всегда!
$return = false; private $parameters = array('utm_source', 'utm_medium', 'utm_campaign');
foreach ($this->parameters as $param) private $utm_history = '';
if (isset($_GET[$param]) && $_GET[$param] != '') private $utm_last = '';
$return = true; private $utm_source = '';
return $return; //Проверка параметров: Если все присутствуют - true, иначе false
} private function check_parameters()
{
//return true; //Сохранять всегда!
//Создаёт строку с параметрами вот такого вида: utm_source=test; utm_medium=none; utm_campaign=kompaniya1; $return = false;
private function create_parameters()
{
$content = '';
foreach($this->parameters as $param){
if (isset($_GET[$param]) && $_GET[$param] != '')
{
$content .= $param.'='.$_GET[$param].'; ';
}
else
{
$content .= $param.'=none; ';
}
}
return $content; foreach ($this->parameters as $param)
} if (isset($_GET[$param]) && $_GET[$param] != '')
$return = true;
//Сохраняет переданные параметры, если требуется return $return;
//Если utm_history присутствует, то сохраняет utm_last }
public function save_parameters()
{ //Создаёт строку с параметрами вот такого вида: utm_source=test; utm_medium=none; utm_campaign=kompaniya1;
if (isset($_GET['utm_source']) && trim($_GET['utm_source']) != '') private function create_parameters()
{
$content = '';
foreach($this->parameters as $param){
if (isset($_GET[$param]) && $_GET[$param] != '')
{ {
setcookie('utm_source', $_GET['utm_source']); $content .= $param.'='.$_GET[$param].'; ';
$this->utm_source = $_GET['utm_source'];
} }
else
{
$content .= $param.'=none; ';
}
}
return $content;
}
//$utm_history = ''; //Сохраняет переданные параметры, если требуется
//Если utm_history присутствует, то сохраняет utm_last
public function save_parameters()
{
if (isset($_GET['utm_source']) && trim($_GET['utm_source']) != '')
{
setcookie('utm_source', $_GET['utm_source']);
if (! isset($_COOKIE['utm_history']) || $_COOKIE['utm_history'] == '') $this->utm_source = $_GET['utm_source'];
{ }
//Отсутствует utm_history
if($this->check_parameters() == true)
{
$utm_history = $this->create_parameters(); //$utm_history = '';
setcookie('utm_history', $utm_history, time()+15552000); //На 6 месяцев
setcookie('utm_last', '');
$this->utm_history = $utm_history; if (! isset($_COOKIE['utm_history']) || $_COOKIE['utm_history'] == '')
} {
//Отсутствует utm_history
if($this->check_parameters() == true)
{
$utm_history = $this->create_parameters();
setcookie('utm_history', $utm_history, time()+15552000); //На 6 месяцев
setcookie('utm_last', '');
$this->utm_history = $utm_history;
} }
else
{
//utm_history присутствует
$this->utm_history = $_COOKIE['utm_history']; }
else
{
//utm_history присутствует
//Перезапишем utm_last, если есть данные для этого $this->utm_history = $_COOKIE['utm_history'];
if($this->check_parameters() == true){
$utm_last = $this->create_parameters(); //Перезапишем utm_last, если есть данные для этого
if($this->check_parameters() == true){
if($utm_last != $_COOKIE['utm_history']) $utm_last = $this->create_parameters();
setcookie('utm_last', $utm_last, time()+15552000); //На 6 месяцев
$this->utm_last = $utm_last; if($utm_last != $_COOKIE['utm_history'])
setcookie('utm_last', $utm_last, time()+15552000); //На 6 месяцев
} $this->utm_last = $utm_last;
} }
return true;
} }
//Возвращает значение cookies return true;
public function get_value($name = '') }
{
$name = trim($name); //Возвращает значение cookies
public function get_value($name = '')
{
$name = trim($name);
if ($name == '' || ! in_array($name, array('utm_history', 'utm_last', 'utm_source'))) if ($name == '' || ! in_array($name, array('utm_history', 'utm_last', 'utm_source')))
$name = 'utm_history'; $name = 'utm_history';
if (isset($this->$name) && $this->$name != '') if (isset($this->$name) && $this->$name != '')
return $this->$name; return $this->$name;
return isset($_COOKIE[$name]) ? $_COOKIE[$name] : ''; return isset($_COOKIE[$name]) ? $_COOKIE[$name] : '';
}
} }
}
?> ?>

0
functions/.htaccess

2
functions/func.common.php

@ -371,7 +371,7 @@
/** /**
* Ссылка на реферал *
* *
* @return string ссылка * @return string ссылка
*/ */

101
functions/func.fields.php

@ -73,7 +73,7 @@
* *
* @return string * @return string
*/ */
function get_field_default($field_value, $action, $field_id=0, $tpl='', $tpl_empty=0, &$maxlength=null, $document_fields=array(), $rubric_id=0, $default=null, $_tpl=null) function get_field_default ($field_value, $action, $field_id=0, $tpl='', $tpl_empty=0, &$maxlength=null, $document_fields=array(), $rubric_id=0, $default=null, $_tpl=null)
{ {
switch ($action) switch ($action)
{ {
@ -154,7 +154,7 @@
* @param $id * @param $id
* @return string * @return string
*/ */
function get_field_alias($id) function get_field_alias ($id)
{ {
global $AVE_DB; global $AVE_DB;
@ -177,7 +177,7 @@
* *
* @return string * @return string
*/ */
function get_field_num($rubric_id, $alias) function get_field_num ($rubric_id, $alias)
{ {
global $AVE_DB; global $AVE_DB;
@ -204,13 +204,13 @@
/** /**
* Возвращаем * Возвращаем значение по умолчанию, для поля
* *
* @param $id * @param $id
* *
* @return string * @return string
*/ */
function get_field_default_value($id) function get_field_default_value ($id)
{ {
global $AVE_DB; global $AVE_DB;
@ -287,7 +287,7 @@
* *
* @return string * @return string
*/ */
function document_get_field($field_id, $document_id = null, $_tpl = null, $maxlength = null) function document_get_field ($field_id, $document_id = null, $_tpl = null, $maxlength = null)
{ {
global $AVE_Core; global $AVE_Core;
@ -343,7 +343,7 @@
* содержимое поля будет очищено от HTML-тегов. * содержимое поля будет очищено от HTML-тегов.
* @return string * @return string
*/ */
function document_get_field_value($field_id, $length = 0) function document_get_field_value ($field_id, $length = 0)
{ {
if (! is_numeric($field_id)) if (! is_numeric($field_id))
return ''; return '';
@ -382,7 +382,7 @@
* *
* @return string * @return string
*/ */
function get_document_field($document_id, $field) function get_document_field ($document_id, $field)
{ {
$document_fields = get_document_fields($document_id); $document_fields = get_document_fields($document_id);
@ -406,7 +406,7 @@
* @internal param int $id id документа * @internal param int $id id документа
* @return mixed * @return mixed
*/ */
function get_document_fields($document_id, $values = null) function get_document_fields ($document_id, $values = null)
{ {
global $AVE_DB, $AVE_Core; //$request_documents global $AVE_DB, $AVE_Core; //$request_documents
@ -524,7 +524,7 @@
* *
* @return string * @return string
*/ */
function get_field($field_id, $doc_id = null, $parametr = null) function get_field ($field_id, $doc_id = null, $parametr = null)
{ {
global $req_item_id; global $req_item_id;
@ -539,7 +539,7 @@
return false; return false;
//-- Забираем из базы массив полей //-- Забираем из базы массив полей
$field = get_document_field($doc_id, $field_id); $field = get_document_field ($doc_id, $field_id);
//-- Возвращаем нужную часть поля //-- Возвращаем нужную часть поля
if ($parametr !== null) if ($parametr !== null)
@ -562,7 +562,7 @@
* *
* @return mixed * @return mixed
*/ */
function get_true_field($field_id, $doc_id = null, $parametr = null) function get_true_field ($field_id, $doc_id = null, $parametr = null)
{ {
global $req_item_id, $AVE_DB; global $req_item_id, $AVE_DB;
@ -619,7 +619,7 @@
* @param int $parametr ([tag:parametr:X]) - номер параметра элемента * @param int $parametr ([tag:parametr:X]) - номер параметра элемента
* @return string * @return string
*/ */
function get_element($field_id, $item_id = 0, $parametr = null, $doc_id = null) function get_element ($field_id, $item_id = 0, $parametr = null, $doc_id = null)
{ {
global $req_item_id; global $req_item_id;
@ -663,7 +663,7 @@
* @param int $doc_id ([tag:docid]) - id документа * @param int $doc_id ([tag:docid]) - id документа
* @return mixed * @return mixed
*/ */
function get_serialize($field_id, $item_id = null, $doc_id = null) function get_serialize ($field_id, $item_id = null, $doc_id = null)
{ {
global $req_item_id; global $req_item_id;
@ -706,7 +706,7 @@
* *
* @return string * @return string
*/ */
function get_field_element() function get_field_element ()
{ {
$param = func_get_args(); $param = func_get_args();
@ -733,7 +733,7 @@
* *
* @return string * @return string
*/ */
function get_field_name($field_id, $doc_id = null) function get_field_name ($field_id, $doc_id = null)
{ {
global $req_item_id; global $req_item_id;
@ -756,4 +756,73 @@
return $field_name; return $field_name;
} }
/**
* Возвращает поле документа по номеру
*
* @param int $field_id ([tag:fld:X]) - номер поля
* @param int $doc_id
* @param int $parametr знчение
*
* @return mixed
*/
function get_full_field ($field_id, $doc_id = null, $parametr = null)
{
global $req_item_id, $AVE_DB;
//-- Если не передан $doc_id, то проверяем реквест
if (! $doc_id && $req_item_id)
$doc_id = $req_item_id;
//-- Или берём для текущего дока
elseif (! $doc_id && $_REQUEST['id'] > 0)
$doc_id = $_REQUEST['id'];
//-- Возвращаем FALSE, если не число
elseif (! is_numeric($doc_id))
return false;
//-- Забираем поле из базы
$sql = "
SELECT
doc.document_author_id,
doc_field.document_id,
doc_field.rubric_field_id,
doc_field.field_value,
doc_field.field_number_value,
text_field.field_value AS field_value_more,
rub_field.rubric_field_alias,
rub_field.rubric_field_type,
rub_field.rubric_field_default,
rub_field.rubric_field_title,
rub_field.rubric_field_template,
rub_field.rubric_field_template_request
FROM
" . PREFIX . "_document_fields AS doc_field
JOIN
" . PREFIX . "_rubric_fields AS rub_field
ON doc_field.rubric_field_id = rub_field.Id
LEFT JOIN
" . PREFIX . "_document_fields_text AS text_field
ON (doc_field.rubric_field_id = text_field.rubric_field_id AND doc_field.document_id = text_field.document_id)
JOIN
" . PREFIX . "_documents AS doc
ON doc.Id = doc_field.document_id
WHERE
doc_field.document_id = '" . $doc_id . "'
AND
doc_field.rubric_field_id = '" . $field_id . "'
";
$field = $AVE_DB->Query($sql)->FetchRow();
$field->field_value = (string)$field->field_value . (string)$field->field_value_more;
unset ($sql);
//-- Возвращаем нужную часть
if ($parametr !== null)
return $field[$parametr];
return $field;
}
?> ?>

4
functions/func.pagination.php

@ -18,7 +18,7 @@
* допустимые значения: page, apage, artpage * допустимые значения: page, apage, artpage
* @return int номер текущей страницы * @return int номер текущей страницы
*/ */
function get_current_page($type = 'page') function get_current_page ($type = 'page')
{ {
if (!in_array($type, array('page', 'apage', 'artpage'))) return 1; if (!in_array($type, array('page', 'apage', 'artpage'))) return 1;
@ -38,7 +38,7 @@
* @return string HTML-код постраничной навигации * @return string HTML-код постраничной навигации
*/ */
function get_pagination($total_pages, $type, $template_label, $navi_box = '') function get_pagination ($total_pages, $type, $template_label, $navi_box = '')
{ {
$nav = ''; $nav = '';

44
functions/func.parserequest.php

@ -147,31 +147,31 @@
// обрабатываем условия // обрабатываем условия
switch ($type) switch ($type)
{ {
case 'N<':case '<': $where[] = "<?=\$v[$i]>'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv < UPPER('\$v[$i]'))) $join\" : ''?>"; break; case 'N<':case '<': $where[] = "<?php echo \$v[$i]>'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv < UPPER('\$v[$i]'))) $join\" : '' ?>"; break;
case 'N>':case '>': $where[] = "<?=\$v[$i]>'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv > UPPER('\$v[$i]'))) $join\" : ''?>"; break; case 'N>':case '>': $where[] = "<?php echo \$v[$i]>'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv > UPPER('\$v[$i]'))) $join\" : '' ?>"; break;
case 'N<=':case '<=': $where[] = "<?=\$v[$i]>'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv <= UPPER('\$v[$i]'))) $join\" : ''?>"; break; case 'N<=':case '<=': $where[] = "<?php echo \$v[$i]>'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv <= UPPER('\$v[$i]'))) $join\" : '' ?>"; break;
case 'N>=':case '>=': $where[] = "<?=\$v[$i]>'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv >= UPPER('\$v[$i]'))) $join\" : ''?>"; break; case 'N>=':case '>=': $where[] = "<?php echo \$v[$i]>'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv >= UPPER('\$v[$i]'))) $join\" : '' ?>"; break;
case '==': $where[] = "<?=\$v[$i]>'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv = UPPER('\$v[$i]'))) $join\" : ''?>"; break; case '==': $where[] = "<?php echo \$v[$i]>'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv = UPPER('\$v[$i]'))) $join\" : '' ?>"; break;
case '!=': $where[] = "<?=\$v[$i]>'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv != UPPER('\$v[$i]'))) $join\" : ''?>"; break; case '!=': $where[] = "<?php echo \$v[$i]>'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv != UPPER('\$v[$i]'))) $join\" : '' ?>"; break;
case '%%': $where[] = "<?=\$v[$i]>'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv LIKE UPPER('%\$v[$i]%'))) $join\" : ''?>"; break; case '%%': $where[] = "<?php echo \$v[$i]>'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv LIKE UPPER('%\$v[$i]%'))) $join\" : '' ?>"; break;
case '%': $where[] = "<?=\$v[$i]>'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv LIKE UPPER('\$v[$i]%'))) $join\" : ''?>"; break; case '%': $where[] = "<?php echo \$v[$i]>'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv LIKE UPPER('\$v[$i]%'))) $join\" : '' ?>"; break;
case '--': $where[] = "<?=\$v[$i]>'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv NOT LIKE UPPER('%\$v[$i]%'))) $join\" : ''?>"; break; case '--': $where[] = "<?php echo \$v[$i]>'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv NOT LIKE UPPER('%\$v[$i]%'))) $join\" : '' ?>"; break;
case '!-': $where[] = "<?=\$v[$i]>'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv NOT LIKE UPPER('\$v[$i]%'))) $join\" : ''?>"; break; case '!-': $where[] = "<?php echo \$v[$i]>'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv NOT LIKE UPPER('\$v[$i]%'))) $join\" : '' ?>"; break;
case 'SEGMENT': $where[] = "<? case 'SEGMENT': $where[] = "<?php
\$v[$i]['seg']=@explode(',',\$v[$i]); \$v[$i]['seg']=@explode(',',\$v[$i]);
\$v[$i]['seg'][0]=(int)trim(\$v[$i]['seg'][0]); \$v[$i]['seg'][0]=(int)trim(\$v[$i]['seg'][0]);
\$v[$i]['seg'][1]=(int)trim(\$v[$i]['seg'][1]); \$v[$i]['seg'][1]=(int)trim(\$v[$i]['seg'][1]);
echo (\$v[$i]>'' && \$v[$i]{0}!=',' && \$v[$i]['seg'][0] <= \$v[$i]['seg'][1]) ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv >= '\" . \$v[$i]['seg'][0] . \"' AND $fv <= '\" . \$v[$i]['seg'][1] . \"')) $join\" : '');?>"; break; echo (\$v[$i]>'' && \$v[$i]{0}!=',' && \$v[$i]['seg'][0] <= \$v[$i]['seg'][1]) ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv >= '\" . \$v[$i]['seg'][0] . \"' AND $fv <= '\" . \$v[$i]['seg'][1] . \"')) $join\" : ''); ?>"; break;
case 'INTERVAL': $where[] = "<? case 'INTERVAL': $where[] = "<?php
\$v[$i]['seg']=@explode(',',\$v[$i]); \$v[$i]['seg']=@explode(',',\$v[$i]);
\$v[$i]['seg'][0]=(int)trim(\$v[$i]['seg'][0]); \$v[$i]['seg'][0]=(int)trim(\$v[$i]['seg'][0]);
\$v[$i]['seg'][1]=(int)trim(\$v[$i]['seg'][1]); \$v[$i]['seg'][1]=(int)trim(\$v[$i]['seg'][1]);
echo (\$v[$i]>'' && \$v[$i]{0}!=',' && \$v[$i]['seg'][0] < \$v[$i]['seg'][1]) ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv > '\" . \$v[$i]['seg'][0] . \"' AND $fv < '\" . \$v[$i]['seg'][1] . \"')) $join\" : '');?>"; break; echo (\$v[$i]>'' && \$v[$i]{0}!=',' && \$v[$i]['seg'][0] < \$v[$i]['seg'][1]) ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv > '\" . \$v[$i]['seg'][0] . \"' AND $fv < '\" . \$v[$i]['seg'][1] . \"')) $join\" : ''); ?>"; break;
case 'IN=': $where[] = "<?=(\$v[$i]>'' && \$v[$i]{0}!=',') ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv IN (\$v[$i]))) $join\" : ''?>"; break; case 'IN=': $where[] = "<?php echo (\$v[$i]>'' && \$v[$i]{0}!=',') ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv IN (\$v[$i]))) $join\" : '' ?>"; break;
case 'NOTIN=': $where[] = "<?=(\$v[$i]>'' && \$v[$i]{0}!=',') ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv NOT IN (\$v[$i]))) $join\" : ''?>"; break; case 'NOTIN=': $where[] = "<?php echo (\$v[$i]>'' && \$v[$i]{0}!=',') ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv NOT IN (\$v[$i]))) $join\" : '' ?>"; break;
case 'ANY': $where[] = "<?php echo \$v[$i] > '' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv=ANY(\$v[$i]))) $join\" : ''; ?>"; break; case 'ANY': $where[] = "<?php echo \$v[$i] > '' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv=ANY(\$v[$i]))) $join\" : ''; ?>"; break;
case 'FRE': $where[] = "<?php echo \$v[$i] > '' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND (\$v[$i]))) $join\" : ''; ?>"; break; case 'FRE': $where[] = "<?php echo \$v[$i] > '' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND (\$v[$i]))) $join\" : ''; ?>"; break;
@ -453,7 +453,12 @@
$item = preg_replace_callback('/\[tag:block:([A-Za-z0-9-_]{1,20}+)\]/', 'parse_block', $template); $item = preg_replace_callback('/\[tag:block:([A-Za-z0-9-_]{1,20}+)\]/', 'parse_block', $template);
// Парсим теги системных блоков // Парсим теги системных блоков
$item = preg_replace_callback('/\[tag:sysblock:([A-Za-z0-9-_]{1,20}+)\]/', 'parse_sysblock', $item); $item = preg_replace_callback('/\[tag:sysblock:([A-Za-z0-9-_]{1,20}+)(|:\{(.*?)\})\]/',
function ($m)
{
return parse_sysblock($m[1], $m[2]);
},
$item);
// Парсим элементы полей // Парсим элементы полей
$item = preg_replace_callback('/\[tag:rfld:([a-zA-Z0-9-_]+)\]\[([0-9]+)]\[([0-9]+)]/', $item = preg_replace_callback('/\[tag:rfld:([a-zA-Z0-9-_]+)\]\[([0-9]+)]\[([0-9]+)]/',
@ -559,6 +564,7 @@
$link = rewrite_link('index.php?id=' . $row->Id . '&amp;doc=' . (empty($row->document_alias) ? prepare_url($row->document_title) : $row->document_alias)); $link = rewrite_link('index.php?id=' . $row->Id . '&amp;doc=' . (empty($row->document_alias) ? prepare_url($row->document_title) : $row->document_alias));
$item = str_replace('[tag:link]', $link, $item); $item = str_replace('[tag:link]', $link, $item);
$item = str_replace('[tag:docid]', $row->Id, $item); $item = str_replace('[tag:docid]', $row->Id, $item);
$item = str_replace('[tag:itemid]', $row->Id, $item);
$item = str_replace('[tag:docitemnum]', $req_item_num, $item); $item = str_replace('[tag:docitemnum]', $req_item_num, $item);
$item = str_replace('[tag:adminlink]', 'index.php?do=docs&action=edit&rubric_id=' . $row->rubric_id . '&Id=' . $row->Id . '&cp=' . session_id() . '', $item); $item = str_replace('[tag:adminlink]', 'index.php?do=docs&action=edit&rubric_id=' . $row->rubric_id . '&Id=' . $row->Id . '&cp=' . session_id() . '', $item);
$item = str_replace('[tag:doctitle]', stripslashes(htmlspecialchars_decode($row->document_title)), $item); $item = str_replace('[tag:doctitle]', stripslashes(htmlspecialchars_decode($row->document_title)), $item);

100
functions/func.sysblock.php

@ -18,9 +18,19 @@
* *
* @return bool|mixed|null|string|string[] * @return bool|mixed|null|string|string[]
*/ */
function parse_sysblock($id) function parse_sysblock ($id, $params = null)
{ {
global $AVE_DB; global $AVE_DB, $sysParams;
$sysblock_eval = _getSysBlock($id, 'sysblock_eval');
$sparams_id = $id . md5($params); // Создаем уникальный id для каждого набора параметров
$sysParams[$sparams_id] = []; // Для отмены лишних ворнингов
$params = trim($params,':'); // Удаляем: слева ':[', справа ']'
$params = json_decode($params, true);
$sysParams[$sparams_id] = $params;
if (is_array($id)) if (is_array($id))
$id = $id[1]; $id = $id[1];
@ -31,8 +41,6 @@
if ($id != '') if ($id != '')
{ {
$eval_sysblock = true;
$cache = md5('sysblock' . $id); $cache = md5('sysblock' . $id);
$cache_file = BASE_DIR . '/tmp/cache/sql/sysblocks/' . $id . '/' . $cache . '.code'; $cache_file = BASE_DIR . '/tmp/cache/sql/sysblocks/' . $id . '/' . $cache . '.code';
@ -94,16 +102,92 @@
$return = preg_replace_callback('/\[tag:block:([A-Za-z0-9-_]{1,20}+)\]/', 'parse_block', $return); $return = preg_replace_callback('/\[tag:block:([A-Za-z0-9-_]{1,20}+)\]/', 'parse_block', $return);
if ($eval_sysblock) // Парсим теги системных блоков
$return = eval2var('?'.'>' . $return . '<'.'?'); $return = preg_replace_callback('/\[tag:sysblock:([A-Za-z0-9-_]{1,20}+)(|:\{(.*?)\})\]/',
function ($m)
{
return parse_sysblock($m[1], $m[2]);
},
$return);
// Если был вызов
if ($sysParams != '')
{
// Заменяем
$return = preg_replace_callback('/\[sys:param:([A-Za-z0-9-+_]+)\]/',
function ($m) use ($sparams_id)
{
return params_of_sysblocks($sparams_id, $m[1]);
},
$return);
}
else
{
// Если чистый запрос тизера, просто вытираем tparam
$return = preg_replace('/\[sysparam:([A-Za-z0-9-+_]+)\]/', '', $return);
}
$gen_time = Debug::endTime('SYSBLOCK_' . $id); if ($sysblock_eval)
$return = eval2var('?'.'>' . $return . '<'.'?php ');
$GLOBALS['block_generate']['SYSBLOCK'][$id] = $gen_time; $GLOBALS['block_generate']['SYSBLOCK'][$id] = Debug::endTime('SYSBLOCK_' . $id);
return $return; return $return;
} }
return false; return false;
} }
/**
* Функция получения уникальных параметров для каждого
*
* @param $id
* @param $el
* @return string
*/
function params_of_sysblocks($id, $el)
{
global $sysParams;
if (isset($sysParams[$id][$el]))
return $sysParams[$id][$el];
else
return false;
}
/**
* Получение основных настроек сисблока
*
* @param $param string параметр настройки, если не указан - все параметры
* @return mixed
*/
function _getSysBlock($id, $param = '')
{
global $AVE_DB;
$sys_block = null;
if ($sys_block === null)
{
$sql = "
SELECT
*
FROM
" . PREFIX . "_sysblocks
WHERE
" . (is_numeric($id) ? 'id' : 'sysblock_alias') . " = '" . $id . "'
";
$sys_block = $AVE_DB->Query($sql, -1, 'sysblocks/' . $id . '/')->FetchAssocArray();
}
if ($param == '')
return $sys_block;
return isset($sys_block[$param])
? $sys_block[$param]
: null;
}
?> ?>

25
tmp/update/sql.update.php

@ -291,7 +291,7 @@
FROM INFORMATION_SCHEMA.COLUMNS FROM INFORMATION_SCHEMA.COLUMNS
WHERE WHERE
TABLE_SCHEMA = DATABASE() TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'ave325_settings' AND TABLE_NAME = '" . PREFIX . "_settings'
AND COLUMN_NAME = 'use_editor'; AND COLUMN_NAME = 'use_editor';
")->GetCell(); ")->GetCell();
@ -324,4 +324,27 @@
"); ");
} }
// ----------------------------------------------------------------------------------------
$check = $AVE_DB->Query("
SHOW COLUMNS
FROM
" . PREFIX . "_sysblocks
LIKE
'sysblock_eval'
")->NumRows();
$exist = ($check) ? true : false;
if ($exist === false)
{
$AVE_DB->Real_Query("
ALTER TABLE
" . PREFIX . "_sysblocks
ADD
`sysblock_eval` enum('0','1') NOT NULL DEFAULT '1'
AFTER
`sysblock_active`
");
}
?> ?>
Loading…
Cancel
Save