Browse Source

Fixes

pull/3/head
M@dD3n 5 years ago
parent
commit
97290b236d
  1. 3
      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. 138
      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. 16
      class/class.meta.php
  15. 3
      class/class.modules.php
  16. 0
      class/class.navigation.php
  17. 4
      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. 18
      class/class.session.php
  23. 0
      class/class.settings.php
  24. 7
      class/class.sysblocks.php
  25. 0
      class/class.template.php
  26. 0
      class/class.templates.php
  27. 0
      class/class.user.php
  28. 2
      class/class.utm.php
  29. 0
      functions/.htaccess
  30. 2
      functions/func.common.php
  31. 71
      functions/func.fields.php
  32. 40
      functions/func.parserequest.php
  33. 100
      functions/func.sysblock.php
  34. 25
      tmp/update/sql.update.php

3
admin/lang/ru/sysblocks.txt

@ -74,3 +74,6 @@ SYSBLOCK_I = "Опционально. Алиас позволяет испол
SYSBLOCK_ACCEPT = "Этот алиас можно использовать"
SYSBLOCK_ER_SYN = "Неверный алиас!<br> Алиас не должен являться числом, может содержать только цифры, латинские буквы, дефис, подчёркивание и иметь длину не более 20 символов"
SYSBLOCK_ER_EXISTS = "Неверный алиас!<br> Данный алиас уже привязан к другоому системному блоку"
// v 3.25
SYSBLOCK_EVAL = "Выполнять PHP перед выозвращением результата"

8
admin/templates/sysblocks/form.tpl

@ -42,7 +42,7 @@
<td>
<strong>{#SYSBLOCK_NAME#}</strong>
</td>
<td colspan="3">
<td colspan="4">
<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}" />
</div>
@ -50,7 +50,7 @@
</tr>
<tr>
<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#}">
</td>
</tr>
@ -60,7 +60,7 @@
<strong><a class="toprightDir" title="{#SYSBLOCK_I#}">[?]</a></strong> {#SYSBLOCK_ALIAS#}:
</div>
</td>
<td colspan="3">
<td colspan="4">
<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" 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>
</td>
<td>
<input type="checkbox" value="1" name="sysblock_eval" class="float" {if $sysblock_eval}checked="checked"{/if} /><label>{#SYSBLOCK_EVAL#}</label>
</td>
</tr>
{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">
<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>

0
admin/templates/sysblocks/multi.tpl

0
admin/templates/sysblocks/nav.tpl

0
class/class.blocks.php

138
class/class.core.php

@ -66,47 +66,6 @@
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)
{
global $AVE_DB;
@ -186,7 +145,6 @@
: null;
}
/**
* Метод, предназначенный для получения шаблонов
*
@ -294,7 +252,6 @@
return $out;
}
/**
* Метод, предназначенный для получения шаблона модуля
*
@ -351,7 +308,6 @@
return stripslashes($out);
}
/**
* Метод, предназначенный для получения прав доступа к документам рубрики
*
@ -412,7 +368,7 @@
/**
* Метод, предназначенный для обработки события 404 Not Found, т.е. когда страница не найдена.
*
* @return void
* @return unknown
*/
function _coreErrorPage404()
{
@ -501,7 +457,6 @@
return (isset($this->curentdoc->Id) && $this->curentdoc->Id == $document_id);
}
/**
* Метод, предназначенный для получения содержимого страницы с 404 ошибкой
*
@ -546,7 +501,6 @@
return (isset($this->curentdoc->Id) && $this->curentdoc->Id == $page_not_found_id);
}
/**
* Метод, предназначенный для получения МЕТА-тегов для различных модулей.
* ToDo
@ -577,7 +531,6 @@
return (isset($this->curentdoc->Id) && $this->curentdoc->Id == 1);
}
/**
* Метод, предназначенный для определения статуса документа (доступен ли он к публикации).
*
@ -627,7 +580,6 @@
return (! empty($this->curentdoc));
}
/**
* Метод парсинга тега [tag:(css|js):files]
* для вывода 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)
{
global $AVE_DB, $AVE_Template;
@ -710,10 +655,10 @@
// Парсим элементы полей
$main_content = preg_replace_callback(
'/\[tag:fld:([a-zA-Z0-9-_]+)\]\[([0-9]+)]\[([0-9]+)]/',
function ($m)
{
return get_field_element($m[1], $m[2], $m[3], $this->curentdoc->Id);
},
create_function(
'$m',
'return get_field_element($m[1], $m[2], $m[3], ' . $this->curentdoc->Id . ');'
),
$main_content
);
@ -723,10 +668,10 @@
// Повторно парсим элементы полей
$main_content = preg_replace_callback(
'/\[tag:fld:([a-zA-Z0-9-_]+)\]\[([0-9]+)]\[([0-9]+)]/',
function ($m)
{
return get_field_element($m[1], $m[2], $m[3], $this->curentdoc->Id);
},
create_function(
'$m',
'return get_field_element($m[1], $m[2], $m[3], ' . $this->curentdoc->Id . ');'
),
$main_content
);
@ -765,10 +710,8 @@
// парсим теги в шаблоне рубрики
$main_content = preg_replace_callback(
'/\[tag:date:([a-zA-Z0-9-. \/]+)\]/',
function ($m)
{
return translate_date(date($m[1], $this->curentdoc->document_published));
},
create_function('$m','return translate_date(date($m[1], '.$this->curentdoc->document_published.'));
'),
$main_content
);
@ -809,11 +752,6 @@
}
/**
* Получаем ID для кеша документа
*
* @return array|bool
*/
function _get_cache_id()
{
$cache = array();
@ -839,13 +777,6 @@
}
/**
* Создаем компилированный документ
*
* @param $main_content
*
* @return bool
*/
function setCompileDocument ($main_content)
{
$cache = $this->_get_cache_id();
@ -876,11 +807,6 @@
}
/**
* Получаем скомпилированный документ
*
* @return bool|string
*/
function getCompileDocument ()
{
$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);
exit;
}
// проверяем разрешение на обращение только по Ajax
if ($this->_sysBlock($_REQUEST['sysblock'], 'sysblock_ajax'))
if (_getSysBlock($_REQUEST['sysblock'], 'sysblock_ajax'))
{
if (isAjax())
$out = parse_sysblock($_REQUEST['sysblock']);
@ -1158,9 +1083,7 @@
// Выполняем Код рубрики До загрузки документа
ob_start();
eval(' ?>' . $this->curentdoc->rubric_start_code . '<?php ');
ob_end_clean();
// Получаем шаблон
@ -1341,6 +1264,7 @@
$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: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);
@ -1560,10 +1499,10 @@
// Парсим тизер документа
$out = preg_replace_callback(
'/\[tag:teaser:(\d+)(|:\[(.*?)\])\]/',
function ($m)
{
return showteaser($m[1], $m[2]);
},
create_function(
'$m',
'return showteaser($m[1], $m[2]);'
),
$out
);
@ -1571,10 +1510,10 @@
if (defined('RUB_ID'))
$out = preg_replace_callback(
'/\[tag:docauthoravatar:(\d+)\]/',
function ($m)
{
return getAvatar(intval($this->curentdoc->document_author_id), $m[1]);
},
create_function(
'$m',
'return getAvatar('.intval($this->curentdoc->document_author_id).', $m[1]);'
),
$out
);
@ -1613,7 +1552,6 @@
echo $out;
}
/**
* Метод, предназначенный для формирования ЧПУ, а также для поиска документа и разбора
* дополнительных параметров в URL

0
class/class.dbdump.php

72
class/class.debug.php

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

2
class/class.docs.php

@ -1478,7 +1478,7 @@
// Если пришел вызов поля, который связан с модулем
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');

0
class/class.hooks.php

0
class/class.logs.php

16
class/class.meta.php

@ -16,14 +16,12 @@ class Meta
public function __construct( $keyword_count = false )
{
if ((int)$keyword_count)
$this->_keyword_count = $keyword_count;
if( (int) $keyword_count ) $this->_keyword_count = $keyword_count;
}
public function setKeywordCount( $keyword_count )
{
if ((int)$keyword_count)
$this->_keyword_count = $keyword_count;
if( (int) $keyword_count ) $this->_keyword_count = $keyword_count;
}
public function generateMeta( $text )
@ -51,20 +49,16 @@ class Meta
$arr = explode( " ", $text );
foreach ($arr as $word)
{
if (mb_strlen(($word)) > 4 OR (mb_strtoupper($word) == $word) and mb_strlen(($word)) > 1)
$newarr[] = $word;
foreach ( $arr as $word ) {
if( mb_strlen( ($word) ) > 4 OR (mb_strtoupper($word)==$word) and mb_strlen( ($word) ) > 1) $newarr[] = $word;
}
$arr = array_count_values( $newarr );
arsort( $arr );
$arr = array_keys( $arr );
// Не используется
// $total = count($arr);
$total = count( $arr );
$offset = 0;

3
class/class.modules.php

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

0
class/class.navigation.php

4
class/class.paginations.php

@ -132,7 +132,10 @@
$search = array('[link]', '[page]', '[name]');
$replace = array($template_label, $page, $page);
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)));
}
@ -150,6 +153,7 @@
}
}
// Следующая
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

18
class/class.session.php

@ -54,7 +54,6 @@
private $mysql_connect = null;
private $mysql_db = null;
/* Create a connection to a database */
function __construct()
{
@ -74,24 +73,26 @@
: 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))
{
$this->error();
}
$this->mysql_connect->set_charset('utf8');
return true;
}
/* Open session */
function _open($path, $name)
{
return true;
}
/* Close session */
function _close()
{
@ -103,24 +104,26 @@
return true;
}
/* Read session */
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'])
{
return $value;
}
return '';
}
/* Write new 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'))"))
{
$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;
}
@ -136,11 +139,14 @@
{
$session_res = @mysqli_query($this->mysql_connect, "DELETE FROM ".PREFIX."_sessions WHERE expire < (UNIX_TIMESTAMP(NOW()) - " . (int)$maxlifetime . ")");
if (! $session_res)
if (!$session_res) {
return false;
}
else
{
return true;
}
}
function error() {
ob_start();

0
class/class.settings.php

7
class/class.sysblocks.php

@ -78,10 +78,10 @@
{
$_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_visual'] = (isset($_REQUEST['sysblock_visual'])) ? $_REQUEST['sysblock_visual'] : 0;
$sysblock_alias = isset($_REQUEST['sysblock_alias']) ? $_REQUEST['sysblock_alias'] : '';
$_REQUEST['sysblock_alias'] = isset($_REQUEST['sysblock_alias']) ? $_REQUEST['sysblock_alias'] : '';
$sql = $AVE_DB->Query("
UPDATE
@ -91,6 +91,7 @@
sysblock_description = '" . addslashes($_REQUEST['sysblock_description']) . "',
sysblock_alias = '" . $_REQUEST['sysblock_alias'] . "',
sysblock_text = '" . $_REQUEST['sysblock_text'] . "',
sysblock_eval = '" . (int)$_REQUEST['sysblock_eval'] . "',
sysblock_external = '" . (int)$_REQUEST['sysblock_external'] . "',
sysblock_ajax = '" . (int)$_REQUEST['sysblock_ajax'] . "',
sysblock_visual = '" . (int)$_REQUEST['sysblock_visual'] . "'
@ -140,6 +141,7 @@
sysblock_alias = '" . $_REQUEST['sysblock_alias'] . "',
sysblock_text = '" . $_REQUEST['sysblock_text'] . "',
sysblock_author_id = '" . (int)$_SESSION['user_id'] . "',
sysblock_eval = '" . (int)$_REQUEST['sysblock_eval'] . "',
sysblock_external = '" . (int)$_REQUEST['sysblock_external'] . "',
sysblock_ajax = '" . (int)$_REQUEST['sysblock_ajax'] . "',
sysblock_visual = '" . (int)$_REQUEST['sysblock_visual'] . "',
@ -208,6 +210,7 @@
$row['sysblock_name'] = '';
$row['sysblock_alias'] = '';
$row['sysblock_text'] = '';
$row['sysblock_eval'] = '1';
$row['sysblock_visual'] = (isset($_REQUEST['sysblock_visual']) && $_REQUEST['sysblock_visual'] != 0) ? $_REQUEST['sysblock_visual'] : '';
$AVE_Template->assign('sid', 0);

0
class/class.template.php

0
class/class.templates.php

0
class/class.user.php

2
class/class.utm.php

@ -1,5 +1,6 @@
<?php
/*
Версия от 06.03.2018г.
Как это работает:
@ -8,6 +9,7 @@
3) Если utm_history уже есть, то сохраняет данные в utm_last
4) utm_last перезаписывается при каждом новом значении, а utm_history всегда остаётся неизменной (если был передан хотя бы один параметр)
5) utm_source сохраняется всегда до закрытия браузера
*/
class UTMCookie
{

0
functions/.htaccess

2
functions/func.common.php

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

71
functions/func.fields.php

@ -204,7 +204,7 @@
/**
* Возвращаем
* Возвращаем значение по умолчанию, для поля
*
* @param $id
*
@ -756,4 +756,73 @@
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;
}
?>

40
functions/func.parserequest.php

@ -147,31 +147,31 @@
// обрабатываем условия
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[] = "<?=\$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[] = "<?=\$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[] = "<?=\$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[] = "<?=\$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[] = "<?=\$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 '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[] = "<?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[] = "<?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[] = "<?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[] = "<?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[] = "<?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[] = "<?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[] = "<?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[] = "<?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[] = "<?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[] = "<?php
\$v[$i]['seg']=@explode(',',\$v[$i]);
\$v[$i]['seg'][0]=(int)trim(\$v[$i]['seg'][0]);
\$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;
case 'INTERVAL': $where[] = "<?
case 'INTERVAL': $where[] = "<?php
\$v[$i]['seg']=@explode(',',\$v[$i]);
\$v[$i]['seg'][0]=(int)trim(\$v[$i]['seg'][0]);
\$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;
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 '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 '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[] = "<?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 '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: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]+)]/',
@ -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));
$item = str_replace('[tag:link]', $link, $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: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);

100
functions/func.sysblock.php

@ -18,9 +18,19 @@
*
* @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))
$id = $id[1];
@ -31,8 +41,6 @@
if ($id != '')
{
$eval_sysblock = true;
$cache = md5('sysblock' . $id);
$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);
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);
$gen_time = Debug::endTime('SYSBLOCK_' . $id);
// Если был вызов
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);
}
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 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
WHERE
TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'ave325_settings'
AND TABLE_NAME = '" . PREFIX . "_settings'
AND COLUMN_NAME = 'use_editor';
")->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