diff --git a/.htaccess b/.htaccess index 4449202..8b18a9f 100644 --- a/.htaccess +++ b/.htaccess @@ -11,7 +11,6 @@ Options -Indexes +FollowSymLinks # | PHP Configuration | # ------------------------------------------------------------------------------ - php_value default_charset utf-8 #Отлючаем вывод ошибок @@ -40,39 +39,6 @@ Options -Indexes +FollowSymLinks php_flag magic_quotes_runtime off php_flag register_globals off - - - - php_value default_charset utf-8 - - #Отлючаем вывод ошибок - #php_value error_reporting E_NONE - - # Этот параметр устанавливает максимальное время в секундах, позволяющее скрипту запускаться прежде, чем он завершается синтаксическим анализатором. - #php_value max_execution_time 300 - - # Максимальное время загрузки данных для скрипта, в том числе и файлов из формы - #php_value max_input_time 300 - - # Ограничивает максимальный объем данных, получаемых от пользователя методом POST - #php_value post_max_size 32M - - # Устанавливает максимальный размер файла, который может быть получен методом POST (меньше, чем post_max_size) - #php_value upload_max_filesize 32M - - # Максимальное кол-во загружаемых файлов - #php_value max_file_uploads 50 - - # Включаем у PHP короткие - # ------------------------------------------------------------------------------ # | CORS-enabled images | diff --git a/README.md b/README.md index 630a35c..a42a6cb 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,6 @@ * [Системные требования](#Системные-требования) -* [Модули](#Модули) - * [Установка](#Установка) * [Ресурсы](#Ресурсы) @@ -21,34 +19,9 @@ * ПО WEB сервера: * Apache >= 1.3 * Nginx >= 1.6.2 - * PHP >= 5.6.x разрешить использовать короткие теги short_open_tag = On (zlib, cURL, mbString, JSON) + * PHP >= 5.6.x (zlib, cURL, mbString, JSON) * PHP >= 7.x ... <= 7.2.x - -## Модули -Описание и загрузка модулей - -| Наименование | Описание | -|---------------------------------|-----------------------------| -| [Комментарии] | Система комментирования публикаций. | -| [Контактные формы] | Модуль предназначен для создания различных веб-форм для контактов.Поддержка различных типов полей. | -| [Публикатор документов] | Данный модуль предназначен для создания форм ввода и редактирования документов на сайте. | -| [Вопрос-Ответ (FAQ)] | Модуль создания раширенной справочной системы на основе тегов. | -| [Галерея] | Модуль для создания и управления галереями изображений. | -| [Авторизация] | Модуль поддержки Регистрации/Авторизации пользователей. | -| [Рассылки] | Модуль позволяет осуществлять рассылки новостей и другой информации пользователям. | -| [Похожие документы] | Модуль позволяет выводить список связанных документов *(Связующим элементом документов является первое слово из поля Ключевые слова.)* | -| [Быстрый переход] | Данный модуль является альтернативным способом организации меню навигации на сайте. Он представлен в виде выпадающего списка разделов и подразделов вашего сайта. | -| [RSS] | Данный модуль предзназначен для организации RSS потоков на вашем сайте. | -| [Поиск] | Организация поиска по сайту. | -| [Карта сайта] | Построение карты сайта на базе пунктов меню навигации. | -| [Корзина] | Модуль электронной комерции. | -| [Импорт] | Импорт документов в выбранную рубрику. | -| [Рейтинг документов] | Поддержка оценок для публикаций. | -| [Навигация по документам рубрики] | Данный модуль позволяет организовать навигацию по документам в пределах рубрики. | - -И другие - ## Установка 1. Распакуйте содержимое архива в новую папку на вашем локальном компьютере. diff --git a/admin/functions/func.admin.common.php b/admin/functions/func.admin.common.php index 3c2812d..cd9ac31 100644 --- a/admin/functions/func.admin.common.php +++ b/admin/functions/func.admin.common.php @@ -12,23 +12,32 @@ /** * Если был referer, то перенапрявляем на него * - * @param - * @return $link + * @return mixed|null|string $link */ function get_referer_admin_link() { static $link = null; + $ok = false; + if ($link === null) { if (isset($_SERVER['HTTP_REFERER'])) { $link = parse_url($_SERVER['HTTP_REFERER']); - $ok = (trim($link['host']) == $_SERVER['HTTP_HOST']) ? true : false; - $ok = (trim($link['path']) != '/admin/admin.php') ? true : false; + $ok = (trim($link['host']) == $_SERVER['HTTP_HOST']) + ? true + : false; + + $ok = (trim($link['path']) != '/admin/admin.php') + ? true + : false; } - $link = ($ok === true ? $_SERVER['HTTP_REFERER'] : '/admin/index.php'); + + $link = ($ok === true + ? $_SERVER['HTTP_REFERER'] + : '/admin/index.php'); } return $link; @@ -38,11 +47,11 @@ /** * Получаем кол-во записей в журналах событий * - * @return Array массив из кол-ва записей + * @return void массив из кол-ва записей */ function getLogRecords() { - global $AVE_DB, $AVE_Template; + global $AVE_Template; $logs = array(); $logdata = array(); @@ -54,17 +63,17 @@ $_sqldir = BASE_DIR . '/tmp/logs/sql.php'; if (file_exists($_logdir)) - @eval(' ?>' . file_get_contents($_logdir) . '' . file_get_contents($_logdir) . '' . file_get_contents($_404dir) . '' . file_get_contents($_404dir) . '' . file_get_contents($_sqldir) . '' . file_get_contents($_sqldir) . 'Query("SELECT * FROM ".PREFIX."_users WHERE last_visit>".$time." ORDER BY last_visit DESC"); + $sql = @$AVE_DB->Query("SELECT * FROM " . PREFIX . "_users WHERE last_visit > " . $time . " ORDER BY last_visit DESC"); - $online_users=Array(); + $online_users = array(); while ($row = $sql->FetchRow()) { @@ -124,6 +134,7 @@ return $file_size; } + /** * Извлечение из БД статистики по основным компонентам системы * @@ -187,7 +198,8 @@ */ function get_dir_size($directory) { - if (!is_dir($directory)) return -1; + if (! is_dir($directory)) + return -1; $size = 0; @@ -402,7 +414,7 @@ function file_download($filename, $retbytes = true) { - $chunksize = 1*(1024*1024); + $chunksize = 1 * (1024 * 1024); $buffer = ''; $cnt = 0; @@ -411,7 +423,7 @@ if ($handle === false) return false; - while (!feof($handle)) + while (! feof($handle)) { $buffer = fread($handle, $chunksize); @@ -425,7 +437,8 @@ $status = fclose($handle); - if ($retbytes && $status) return $cnt; + if ($retbytes && $status) + return $cnt; return $status; } @@ -468,16 +481,20 @@ //Проверка на наличие модуля Контакты и новых писем - function ContactsModuleCheck() { + function ContactsModuleCheck() + { global $AVE_DB, $AVE_Template; $sql = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_module WHERE ModuleFunction = 'contact' and ModuleStatus = '1'"); - $enable = $sql->numrows(); - if ($enable != "0" || $enable != ""){ + $enable = $sql->NumRows(); + if ($enable != "0" || $enable != "") + { $contacts = "1"; $sql_num = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_modul_contact_info WHERE Aw_Zeit = '0'"); - $num_posts = $sql_num->numrows(); - } else { + $num_posts = $sql_num->NumRows(); + } + else + { $contacts = "0"; } $AVE_Template->assign('num_posts', $num_posts); @@ -486,21 +503,26 @@ //Проверка на наличие модуля Логин - function LoginModuleCheck() { + function LoginModuleCheck() + { global $AVE_DB, $AVE_Template; - $sql = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_module WHERE ModuleFunction = 'mod_login' and ModuleStatus = '1'"); - $enable = $sql->numrows(); - if ($enable != "0" || $enable != ""){ - $login_menu = "1"; - } else { - $login_menu = "0"; - } + $sql = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_module WHERE ModuleFunction = 'mod_login' and ModuleStatus = '1'"); + + $enable = $sql->NumRows(); + + if ($enable != '0' || $enable != '') + $login_menu = '1'; + else + $login_menu = '0'; + $AVE_Template->assign('login_menu', $login_menu); } - //Выводим на главную список последних 15 документов + /** + * Выводим на главную список последних 15 документов + */ function DisplayMainDocuments() { global $AVE_DB, $AVE_Template; @@ -516,31 +538,31 @@ WHERE 1 = 1 AND rub.rubric_docs_active = '1' ORDER BY doc.document_published DESC LIMIT 0,10"); - while($row = $sql->fetchrow()) { + while($row = $sql->FetchRow()) { $row->rubric_title = showrubricName($row->rubric_id); $row->document_title = stripslashes(htmlspecialchars_decode(pretty_chars($row->document_title))); $row->document_breadcrum_title = stripslashes(htmlspecialchars_decode(pretty_chars($row->document_breadcrum_title))); $row->document_author = get_username_by_id($row->document_author_id); // Получаем имя пользователя (Автора) $row->cantEdit = 0; - $row->canDelete = 0; - $row->canEndDel = 0; + $row->canDelete = 0; + $row->canEndDel = 0; $row->canOpenClose = 0; $row->rubric_admin_teaser_template = @eval2var(' ?>'.($row->rubric_admin_teaser_template > '' ? @showrequestelement($row, $row->rubric_admin_teaser_template) - : '').'document_author_id == @$_SESSION['user_id'] + if (($row->document_author_id == @$_SESSION['user_id'] && isset($_SESSION[$row->rubric_id . '_editown']) && @$_SESSION[$row->rubric_id . '_editown'] == 1) - || (isset($_SESSION[$row->rubric_id . '_editall']) && $_SESSION[$row->rubric_id . '_editall'] == 1) ) + || (isset($_SESSION[$row->rubric_id . '_editall']) && $_SESSION[$row->rubric_id . '_editall'] == 1)) { $row->cantEdit = 1; $row->canDelete = 1; } // запрещаем редактирование главной страницы и страницу ошибки 404 если требуется одобрение Администратора - if ( ($row->Id == 1 || $row->Id == PAGE_NOT_FOUND_ID) + if (($row->Id == 1 || $row->Id == PAGE_NOT_FOUND_ID) && isset($_SESSION[$row->rubric_id . '_newnow']) && @$_SESSION[$row->rubric_id . '_newnow'] != 1) { $row->cantEdit = 0; @@ -570,57 +592,93 @@ $AVE_Template->assign('doc_start', $doc_start); } + + /** + * @param $id + * + * @return mixed + */ function showrubricName($id) { global $AVE_DB; - $sql = $AVE_DB->Query("SELECT rubric_title FROM " . PREFIX . "_rubrics WHERE Id='$id'"); - $row = $sql->fetchrow(); + $sql = $AVE_DB->Query("SELECT rubric_title FROM " . PREFIX . "_rubrics WHERE Id = '$id'"); + $row = $sql->FetchRow(); return $row->rubric_title; } + + /** + * @param $id + * + * @return mixed + */ function showuserName($id) { global $AVE_DB; - $sql = $AVE_DB->Query("SELECT user_name FROM " . PREFIX . "_users WHERE Id='$id'"); - $row = $sql->fetchrow(); + $sql = $AVE_DB->Query("SELECT user_name FROM " . PREFIX . "_users WHERE Id = '$id'"); + $row = $sql->FetchRow(); return $row->user_name; } + + /** + * + */ function cacheShow() { global $AVE_Template; $showCache = format_size(get_dir_size($AVE_Template->cache_dir_root)); + echo json_encode(array($showCache, 'accept')); } - - + /** + * @param $id + * + * @return mixed + */ function templateName($id) { global $AVE_DB; $sql = $AVE_DB->Query(" - SELECT * FROM " . PREFIX . "_templates - WHERE Id = '$id' - "); - $row = $sql->fetchrow(); + SELECT + * + FROM + " . PREFIX . "_templates + WHERE + Id = '$id' + "); + + $row = $sql->FetchRow(); return $row->template_title; } + + /** + * @param $id + * + * @return mixed + */ function groupName($id) { global $AVE_DB; $sql = $AVE_DB->Query(" - SELECT * FROM " . PREFIX . "_user_groups - WHERE user_group = '$id' - "); - $row = $sql->fetchrow(); + SELECT + * + FROM + " . PREFIX . "_user_groups + WHERE + user_group = '$id' + "); + + $row = $sql->FetchRow(); return $row->user_group_name; } diff --git a/admin/templates/rubs/form.tpl b/admin/templates/rubs/form.tpl index cefcf44..504aaf1 100644 --- a/admin/templates/rubs/form.tpl +++ b/admin/templates/rubs/form.tpl @@ -599,11 +599,11 @@ {$field.rubric_field_title} - [tag:rfld:{$field.Id}][150] + [tag:rfld:{$field.Id}][150] {if $field.rubric_field_alias} - [tag:rfld:{$field.rubric_field_alias}][0] + [tag:rfld:{$field.rubric_field_alias}][0] {/if} diff --git a/admin/templates/sysblocks/list.tpl b/admin/templates/sysblocks/list.tpl index 1346805..b71f84e 100644 --- a/admin/templates/sysblocks/list.tpl +++ b/admin/templates/sysblocks/list.tpl @@ -120,7 +120,7 @@ {$sysblock->sysblock_author_id|escape} - {$sysblock->sysblock_created|date_format:$TIME_FORMAT|translate_date} + {$sysblock->sysblock_created|date_format:$TIME_FORMAT|pretty_date} diff --git a/class/class.core.php b/class/class.core.php index 79bcdc5..dedaef4 100755 --- a/class/class.core.php +++ b/class/class.core.php @@ -72,7 +72,6 @@ * @param string $param параметр настройки, если не указан - все параметры * @return mixed */ - function _sysBlock($id, $param = '') { global $AVE_DB; @@ -100,6 +99,14 @@ } + /** + * Получаем шаблон документа + * + * @param $rubric_id + * @param $template_id + * + * @return bool|null|string + */ function _getMainTemplate($rubric_id, $template_id) { global $AVE_DB; @@ -179,6 +186,7 @@ : null; } + /** * Метод, предназначенный для получения шаблонов * @@ -286,6 +294,7 @@ return $out; } + /** * Метод, предназначенный для получения шаблона модуля * @@ -342,6 +351,7 @@ return stripslashes($out); } + /** * Метод, предназначенный для получения прав доступа к документам рубрики * @@ -402,7 +412,7 @@ /** * Метод, предназначенный для обработки события 404 Not Found, т.е. когда страница не найдена. * - * @return unknown + * @return void */ function _coreErrorPage404() { @@ -491,6 +501,7 @@ return (isset($this->curentdoc->Id) && $this->curentdoc->Id == $document_id); } + /** * Метод, предназначенный для получения содержимого страницы с 404 ошибкой * @@ -535,6 +546,7 @@ return (isset($this->curentdoc->Id) && $this->curentdoc->Id == $page_not_found_id); } + /** * Метод, предназначенный для получения МЕТА-тегов для различных модулей. * ToDo @@ -565,6 +577,7 @@ return (isset($this->curentdoc->Id) && $this->curentdoc->Id == 1); } + /** * Метод, предназначенный для определения статуса документа (доступен ли он к публикации). * @@ -614,6 +627,7 @@ return (! empty($this->curentdoc)); } + /** * Метод парсинга тега [tag:(css|js):files] * для вывода css/js-файлов в шаблоне через combine.php @@ -667,6 +681,13 @@ } + /** + * @param $main_content + * @param $id + * @param $rubTmpl + * + * @return mixed|null|string|string[] + */ function _main_content ($main_content, $id, $rubTmpl) { global $AVE_DB, $AVE_Template; @@ -674,13 +695,13 @@ // Проверяем теги полей в шаблоне рубрики на условие != '' 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_empty:fld:([a-zA-Z0-9-_]+)\]/u", '<'.'?php if((htmlspecialchars(get_field(\'$1\'), ENT_QUOTES)) == \'\') { '.'?'.'>', $main_content); + $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); } 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_empty:fld:([a-zA-Z0-9-_]+)\]/u", '<'.'?php if((htmlspecialchars(document_get_field(\'$1\'), ENT_QUOTES)) == \'\') { '.'?'.'>', $main_content); + $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 = str_replace('[tag:if:else]', '', $main_content); @@ -689,10 +710,10 @@ // Парсим элементы полей $main_content = preg_replace_callback( '/\[tag:fld:([a-zA-Z0-9-_]+)\]\[([0-9]+)]\[([0-9]+)]/', - create_function( - '$m', - 'return get_field_element($m[1], $m[2], $m[3], ' . $this->curentdoc->Id . ');' - ), + function ($m) + { + return get_field_element($m[1], $m[2], $m[3], $this->curentdoc->Id); + }, $main_content ); @@ -702,10 +723,10 @@ // Повторно парсим элементы полей $main_content = preg_replace_callback( '/\[tag:fld:([a-zA-Z0-9-_]+)\]\[([0-9]+)]\[([0-9]+)]/', - create_function( - '$m', - 'return get_field_element($m[1], $m[2], $m[3], ' . $this->curentdoc->Id . ');' - ), + function ($m) + { + return get_field_element($m[1], $m[2], $m[3], $this->curentdoc->Id); + }, $main_content ); @@ -744,8 +765,10 @@ // парсим теги в шаблоне рубрики $main_content = preg_replace_callback( '/\[tag:date:([a-zA-Z0-9-. \/]+)\]/', - create_function('$m','return translate_date(date($m[1], '.$this->curentdoc->document_published.')); - '), + function ($m) + { + return translate_date(date($m[1], $this->curentdoc->document_published)); + }, $main_content ); @@ -786,6 +809,11 @@ } + /** + * Получаем ID для кеша документа + * + * @return array|bool + */ function _get_cache_id() { $cache = array(); @@ -811,6 +839,13 @@ } + /** + * Создаем компилированный документ + * + * @param $main_content + * + * @return bool + */ function setCompileDocument ($main_content) { $cache = $this->_get_cache_id(); @@ -841,6 +876,11 @@ } + /** + * Получаем скомпилированный документ + * + * @return bool|string + */ function getCompileDocument () { $cache = $this->_get_cache_id(); @@ -1019,6 +1059,7 @@ } } + /** * Метод, предназанченный для сборки всей страницы в единое целое. * @@ -1117,7 +1158,9 @@ // Выполняем Код рубрики До загрузки документа ob_start(); + eval(' ?>' . $this->curentdoc->rubric_start_code . 'curentdoc->document_author_id).', $m[1]);' - ), + function ($m) + { + return getAvatar(intval($this->curentdoc->document_author_id), $m[1]); + }, $out ); @@ -1570,6 +1613,7 @@ echo $out; } + /** * Метод, предназначенный для формирования ЧПУ, а также для поиска документа и разбора * дополнительных параметров в URL diff --git a/class/class.debug.php b/class/class.debug.php index 403b119..a013c99 100644 --- a/class/class.debug.php +++ b/class/class.debug.php @@ -35,20 +35,29 @@ * Функция для вывода переменной (для отладки) * * @param mixed $var любая переменная + * @param bool $exit + * @param null $bg + * @param bool $echo + * + * @return false|null|string|string[] */ - public static function _echo($var, $exit = false, $bg = null) + public static function _echo($var, $exit = false, $bg = null, $echo = true) { + $code = ''; + $backtrace = debug_backtrace(); $backtrace = $backtrace[0]; if (preg_match('/([^\(]*)\((.*)\)/i', $backtrace['file'])) { - $file = preg_match('/([^\(]*)\((.*)\)/i', $backtrace['file'], $match); + preg_match('/([^\(]*)\((.*)\)/i', $backtrace['file'], $match); $file = $match[1]; } - $fh = fopen((isset($file) ? $file : $backtrace['file']), 'r'); + $fh = fopen((isset($file) + ? $file + : $backtrace['file']), 'r'); $line = 0; @@ -71,7 +80,7 @@ $var_dump = htmlspecialchars($var_dump); - $var_dump = preg_replace('/(=>)/', '$1', $var_dump); + $var_dump = preg_replace('/(=>)/', '$1', $var_dump); ob_end_clean(); @@ -84,26 +93,54 @@ $fn_name = 'EVAL'; if (! $bg) - { - $br = '2a5885'; $bg = '43648c'; - } - else - { - $br = $bg; - } $var_dump = ' -
-
- var_dump(' . trim($fn_name) . ') - ' . self::_trace() . - '
-
'
-					. $var_dump .
-					'
+ +
+
+ var_dump(' . trim($fn_name) . ') +
+ '.self::_trace().' +
+
'
+						. $var_dump .
+						'
+
'; + if (! $echo) + return $var_dump; + echo $var_dump; if ($exit) @@ -115,27 +152,34 @@ * Функция для вывода переменной (для отладки) * * @param mixed $var любая переменная + * @param bool $exit + * @param null $bg + * @param bool $echo + * + * @return null|string|string[] */ - public static function _print($var, $exit = false, $bg = null) + public static function _print($var, $exit = false, $bg = null, $echo = true) { + $code = ''; + $backtrace = debug_backtrace(); $backtrace = $backtrace[0]; if (preg_match('/([^\(]*)\((.*)\)/i', $backtrace['file'])) { - $file = preg_match('/([^\(]*)\((.*)\)/i', $backtrace['file'], $match); + preg_match('/([^\(]*)\((.*)\)/i', $backtrace['file'], $match); $file = $match[1]; } - $fh = fopen((isset($file) ? $file : $backtrace['file']), 'r'); + $fh = fopen((isset($file) + ? $file + : $backtrace['file']), 'r'); $line = 0; while (++$line <= $backtrace['line']) - { $code = fgets($fh); - } fclose($fh); @@ -160,26 +204,54 @@ $fn_name = 'EVAL'; if (! $bg) - { - $br = '365899'; $bg = '4e5665'; - } - else - { - $br = $bg; - } $var_dump = ' -
-
- print_r(' . trim($fn_name) . ') - ' . self::_trace() . - '
-
'
-					. $var_dump .
-					'
+ +
+
+ print_r(' . trim($fn_name) . ') +
+ '.self::_trace().' +
+
'
+						. $var_dump .
+						'
+
'; + if (! $echo) + return $var_dump; + echo $var_dump; if ($exit) @@ -191,27 +263,34 @@ * Функция для вывода переменной (для экспорта) * * @param mixed $var любая переменная + * @param bool $exit + * @param null $bg + * @param bool $echo + * + * @return string */ - public static function _exp($var, $exit = false, $bg = null) + public static function _exp($var, $exit = false, $bg = null, $echo = true) { + $code = ''; + $backtrace = debug_backtrace(); $backtrace = $backtrace[0]; if (preg_match('/([^\(]*)\((.*)\)/i', $backtrace['file'])) { - $file = preg_match('/([^\(]*)\((.*)\)/i', $backtrace['file'], $match); + preg_match('/([^\(]*)\((.*)\)/i', $backtrace['file'], $match); $file = $match[1]; } - $fh = fopen((isset($file) ? $file : $backtrace['file']), 'r'); + $fh = fopen((isset($file) + ? $file + : $backtrace['file']), 'r'); $line = 0; while (++$line <= $backtrace['line']) - { $code = fgets($fh); - } fclose($fh); @@ -230,14 +309,7 @@ $fn_name = 'EVAL'; if (! $bg) - { - $br = 'bbb'; $bg = 'ccc'; - } - else - { - $br = $bg; - } $var_export = htmlspecialchars(ob_get_contents()); @@ -246,16 +318,51 @@ ob_end_clean(); $var_dump = ' -
-
var_export(' - . trim($fn_name) . ') - ' . self::_trace() . - '
-
'
+				
+				
+
+ var_export(' . trim($fn_name) . ') +
+ '.self::_trace().' +
+
'
 						. $var_export .
-					'
+ '
+
'; + if (! $echo) + return $var_dump; + echo $var_dump; if ($exit) @@ -266,29 +373,35 @@ /** * Функция для вывода переменной (для отладки) * - * @param mixed $var любая переменная - * @param bool $exit true - остановливает дальнейшее выполнение скрипта, false - продолжает выполнять скрипт + * @param mixed $var любая переменная + * @param bool $exit true - остановливает дальнейшее выполнение скрипта, false - продолжает выполнять скрипт + * @param null $bg + * @param bool $echo + * + * @return false|string */ - public static function _html($var, $exit = false) + public static function _html($var, $exit = false, $bg = null, $echo = true) { + $code = ''; + $backtrace = debug_backtrace(); $backtrace = $backtrace[0]; if (preg_match('/([^\(]*)\((.*)\)/i', $backtrace['file'])) { - $file = preg_match('/([^\(]*)\((.*)\)/i', $backtrace['file'], $match); + preg_match('/([^\(]*)\((.*)\)/i', $backtrace['file'], $match); $file = $match[1]; } - $fh = fopen((isset($file) ? $file : $backtrace['file']), 'r'); + $fh = fopen((isset($file) + ? $file + : $backtrace['file']), 'r'); $line = 0; while (++$line <= $backtrace['line']) - { $code = fgets($fh); - } fclose($fh); @@ -298,39 +411,87 @@ var_export($var); - $fn_name = !empty($name) - ? $name[1] - : 'EVAL'; + if (! empty($name)) + { + $fn_name = explode(',', $name[1]); + $fn_name = array_shift($fn_name); + } + else + $fn_name = 'EVAL'; + + if (! $bg) + $bg = '43648c'; $var_dump = ob_get_contents(); ob_end_clean(); $var_dump = ' -
-
var_export(' - . trim($fn_name) . ') - ' . self::_trace() . - '
-
'
+				
+				
+
+ var_export(' . trim($fn_name) . ') +
+ '.self::_trace().' +
+
'
 						. htmlentities($var_dump, ENT_QUOTES) .
-					'
+ '
+
'; + if (! $echo) + return $var_dump; + echo $var_dump; - if ($exit) exit; + if ($exit) + exit; } /** * Функция для записи переменной в файл (для отладки) * - * @param mixed $var любая переменная - * @param bool $exit true - остановливает дальнейшее выполнение скрипта, false - продолжает выполнять скрипт + * @param mixed $var любая переменная + * @param bool $exit true - остановливает дальнейшее выполнение скрипта, false - продолжает выполнять скрипт + * @param null $bg + * @param bool $append */ - public static function _dump($var, $append = true, $exit = false, $bg = null) + public static function _dump($var, $exit = false, $bg = null, $append = true) { + $code = ''; + $backtrace = debug_backtrace(); $backtrace = $backtrace[0]; @@ -341,14 +502,14 @@ $file = $match[1]; } - $fh = fopen((isset($file) ? $file : $backtrace['file']), 'r'); + $fh = fopen((isset($file) + ? $file + : $backtrace['file']), 'r'); $line = 0; while (++$line <= $backtrace['line']) - { $code = fgets($fh); - } fclose($fh); @@ -387,13 +548,45 @@ } $var_dump = ' -
-
- ' . date("j F Y, H:i:s") . ' - var_dump(' . trim($fn_name) . ') - ' . self::_trace() . - '
-
'
-					. $var_dump .
-					'
+ +
+
+ var_dump(' . trim($fn_name) . ') +
+ '.self::_trace().' +
+
'
+						. $var_dump .
+						'
+
'; @@ -423,26 +616,22 @@ $file = $trace['file']; - $function = $trace['function']; + //$function = $trace['function']; $class = (isset($bt[2]['class']) ? $bt[2]['class'] : 'None'); if (isset($bt[2]['class'])) - { $type = $bt[2]['type']; - } else - { $type = 'Unknow'; - } $function = isset($bt[2]['function']) ? $bt[2]['function'] : 'None'; - return sprintf('Class: %s | Type: %s | Function: %s | File: %s line %s', $class, $type, $function, $file, $line); + return sprintf('
Class: %s | Type: %s | Function: %s
File: %s line %s
', $class, $type, $function, $file, $line); } @@ -461,7 +650,8 @@ * Функция отвечает за окончание таймера * * @param string $name любая переменная (ключ массива) - * @return + * + * @return string */ public static function endTime($name = '') { @@ -503,21 +693,13 @@ public static function formatSize($size) { if ($size >= 1073741824) - { $size = round($size / 1073741824 * 100) / 100 . ' Gb'; - } elseif ($size >= 1048576) - { $size = round($size / 1048576 * 100) / 100 . ' Mb'; - } elseif ($size >= 1024) - { $size = round($size / 1024 * 100) / 100 . ' Kb'; - } else - { $size = $size . ' b'; - } return $size; } @@ -541,21 +723,24 @@ } + /** + * @param $header + * @param $body + * @param $caller + * @param bool $exit + */ public static function _errorSql ($header, $body, $caller, $exit = false) { - - Debug::_echo(preg_replace('/(\s)+/s', ' ', $header)); - Debug::_echo(DB::queryList($body)); - Debug::_echo($caller); - - if ($exit) - exit; + // } - /** * Вывод статистики + * + * @param null $type + * + * @return int|null|string */ public static function getStatistic ($type = null) { @@ -618,23 +803,26 @@ } + /** + * @param string $type + * + * @return false|null|string|string[] + */ public static function _stat_get($type = 'get') { - $var = '123123'; - ob_start(); if ($type == 'get') - var_dump($_GET); + var_dump($_GET); else if ($type == 'post') - var_dump($_POST); + var_dump($_POST); else if ($type == 'request') - var_dump($_REQUEST); + var_dump($_REQUEST); else if ($type == 'session') - var_dump($_SESSION); + var_dump($_SESSION); else if ($type == 'server') - var_dump($_SERVER); + var_dump($_SERVER); else if ($type == 'globals') - var_dump($GLOBALS); + var_dump($GLOBALS); $stat = ob_get_contents(); $stat = preg_replace('/=>(\s+|\s$)/', ' => ', $stat); $stat = htmlspecialchars($stat); @@ -645,7 +833,10 @@ return $stat; } - // + + /** + * @return string + */ public static function displayInfo () { global $AVE_DB; diff --git a/class/class.meta.php b/class/class.meta.php index bbdbf49..3f21a23 100644 --- a/class/class.meta.php +++ b/class/class.meta.php @@ -14,17 +14,19 @@ class Meta { private $_keyword_count = 10; - public function __construct( $keyword_count = false ) + 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 ) + 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 ) + public function generateMeta($text) { $newarr = array (); @@ -49,20 +51,24 @@ 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_count_values($newarr); - $arr = array_keys( $arr ); + arsort($arr); - $total = count( $arr ); + $arr = array_keys($arr); + + // Не используется + // $total = count($arr); $offset = 0; - $arr = array_slice( $arr, $offset, $this->_keyword_count ); + $arr = array_slice($arr, $offset, $this->_keyword_count); $return['keywords'] = implode( ", ", $arr ); $return['description'] = trim(mb_substr( trim($text), 0, 220 ),'.').'.'; diff --git a/class/class.modules.php b/class/class.modules.php index 44bf724..7815c6d 100644 --- a/class/class.modules.php +++ b/class/class.modules.php @@ -404,6 +404,7 @@ ModuleSysName = '" . MODULE_PATH . "' "); } + // Сохраняем системное сообщение в журнал reportLog ($AVE_Template->get_config_vars('MODULES_ACTION_UPDATE') . ' (' . MODULE_PATH . ')'); @@ -513,8 +514,8 @@ foreach ($files as $file) { - if(substr($file, -1) == '/') - moduleRemove($file); + if (substr($file, -1) == '/') + $this->moduleRemove($file); else unlink($file); } diff --git a/class/class.session.php b/class/class.session.php index 03cbcf2..a1b9cad 100644 --- a/class/class.session.php +++ b/class/class.session.php @@ -1,161 +1,155 @@ db_host = $config['dbhost']; + $this->db_user = $config['dbuser']; + $this->db_pass = $config['dbpass']; + $this->db_dbase = $config['dbname']; + $this->db_prefix = $config['dbpref']; - private $mysql_connect = null; - private $mysql_db = null; + $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")); - /* 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_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(); - } + if (! $this->mysql_db = mysqli_select_db ($this->mysql_connect, $this->db_dbase)) + $this->error(); - $this->mysql_connect->set_charset('utf8'); + $this->mysql_connect->set_charset('utf8'); - return true; - } + return true; + } - /* Open session */ - function _open($path, $name) - { - return true; - } - /* Close session */ - function _close() - { - @mysqli_query($this->mysql_connect, "DELETE FROM " . PREFIX . "_sessions WHERE expiry < '" . time() . "'"); + /* Open session */ + function _open($path, $name) + { + return true; + } - if ($this->mysql_connect !== null) - @mysqli_close($this->mysql_connect); - return true; - } + /* Close session */ + function _close() + { + @mysqli_query($this->mysql_connect, "DELETE FROM " . PREFIX . "_sessions WHERE expiry < '" . time() . "'"); - /* 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 ($this->mysql_connect !== null) + @mysqli_close($this->mysql_connect); - if ((list($value, $ip) = @mysqli_fetch_row($qid)) && $ip == $_SERVER['REMOTE_ADDR']) - { - return $value; + return true; } - 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'))")) + /* Read session */ + function _read($ses_id) { - $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, "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 ''; } - return $qid; - } - /* Destroy session */ - function _destroy($ses_id) - { - return @mysqli_query($this->mysql_connect, "DELETE FROM ".PREFIX."_sessions WHERE sesskey = '".$ses_id."'"); - } + /* 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()."'"); - /* Garbage collection, deletes old sessions */ - function _gc($maxlifetime) - { - $session_res = @mysqli_query($this->mysql_connect, "DELETE FROM ".PREFIX."_sessions WHERE expire < (UNIX_TIMESTAMP(NOW()) - " . (int)$maxlifetime . ")"); + return $qid; + } - if (!$session_res) { - return false; + /* Destroy session */ + function _destroy($ses_id) + { + return @mysqli_query($this->mysql_connect, "DELETE FROM ".PREFIX."_sessions WHERE sesskey = '".$ses_id."'"); } - else + + /* Garbage collection, deletes old sessions */ + function _gc($maxlifetime) { - return true; + $session_res = @mysqli_query($this->mysql_connect, "DELETE FROM ".PREFIX."_sessions WHERE expire < (UNIX_TIMESTAMP(NOW()) - " . (int)$maxlifetime . ")"); + + if (! $session_res) + return false; + else + return true; } - } - 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; + 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; + } } -} ?> \ No newline at end of file diff --git a/class/class.utm.php b/class/class.utm.php index 0cd9081..6294aaf 100644 --- a/class/class.utm.php +++ b/class/class.utm.php @@ -1,121 +1,119 @@ parameters as $param) - if (isset($_GET[$param]) && $_GET[$param] != '') - $return = true; + private $utm_history = ''; + private $utm_last = ''; + private $utm_source = ''; - return $return; - } + //Проверка параметров: Если все присутствуют - true, иначе false + private function check_parameters() + { + //return true; //Сохранять всегда! - //Создаёт строку с параметрами вот такого вида: utm_source=test; utm_medium=none; utm_campaign=kompaniya1; - private function create_parameters() - { - $content = ''; - foreach($this->parameters as $param){ + $return = false; - if (isset($_GET[$param]) && $_GET[$param] != '') - { - $content .= $param.'='.$_GET[$param].'; '; + foreach ($this->parameters as $param) + if (isset($_GET[$param]) && $_GET[$param] != '') + $return = true; - } - else - { - $content .= $param.'=none; '; - } + return $return; } - return $content; - } - - //Сохраняет переданные параметры, если требуется - //Если utm_history присутствует, то сохраняет utm_last - public function save_parameters() - { - if (isset($_GET['utm_source']) && trim($_GET['utm_source']) != '') + //Создаёт строку с параметрами вот такого вида: utm_source=test; utm_medium=none; utm_campaign=kompaniya1; + private function create_parameters() { - setcookie('utm_source', $_GET['utm_source']); + $content = ''; + foreach($this->parameters as $param){ + + if (isset($_GET[$param]) && $_GET[$param] != '') + { + $content .= $param.'='.$_GET[$param].'; '; + + } + else + { + $content .= $param.'=none; '; + } + } - $this->utm_source = $_GET['utm_source']; + return $content; } - //$utm_history = ''; - - if (! isset($_COOKIE['utm_history']) || $_COOKIE['utm_history'] == '') + //Сохраняет переданные параметры, если требуется + //Если utm_history присутствует, то сохраняет utm_last + public function save_parameters() { - //Отсутствует utm_history - if($this->check_parameters() == true) + if (isset($_GET['utm_source']) && trim($_GET['utm_source']) != '') { + setcookie('utm_source', $_GET['utm_source']); - $utm_history = $this->create_parameters(); - setcookie('utm_history', $utm_history, time()+15552000); //На 6 месяцев - setcookie('utm_last', ''); + $this->utm_source = $_GET['utm_source']; + } + + //$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; + } - $this->utm_history = $utm_history; } + else + { + //utm_history присутствует - } - else - { - //utm_history присутствует + $this->utm_history = $_COOKIE['utm_history']; - $this->utm_history = $_COOKIE['utm_history']; + //Перезапишем utm_last, если есть данные для этого + if($this->check_parameters() == true){ - //Перезапишем utm_last, если есть данные для этого - if($this->check_parameters() == true){ + $utm_last = $this->create_parameters(); - $utm_last = $this->create_parameters(); + if($utm_last != $_COOKIE['utm_history']) + setcookie('utm_last', $utm_last, time()+15552000); //На 6 месяцев - if($utm_last != $_COOKIE['utm_history']) - setcookie('utm_last', $utm_last, time()+15552000); //На 6 месяцев + $this->utm_last = $utm_last; - $this->utm_last = $utm_last; + } } + return true; } - return true; - } - - //Возвращает значение cookies - 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'))) - $name = 'utm_history'; + if ($name == '' || ! in_array($name, array('utm_history', 'utm_last', 'utm_source'))) + $name = 'utm_history'; - if (isset($this->$name) && $this->$name != '') - return $this->$name; + if (isset($this->$name) && $this->$name != '') + return $this->$name; - return isset($_COOKIE[$name]) ? $_COOKIE[$name] : ''; + return isset($_COOKIE[$name]) ? $_COOKIE[$name] : ''; + } } -} ?> \ No newline at end of file diff --git a/fields/checkbox_multi/field.php b/fields/checkbox_multi/field.php deleted file mode 100644 index 5aa886d..0000000 --- a/fields/checkbox_multi/field.php +++ /dev/null @@ -1,163 +0,0 @@ -config_load($lang_file, 'lang'); - $AVE_Template->assign('config_vars', $AVE_Template->get_config_vars()); - $AVE_Template->config_load($lang_file, 'admin'); - - $res = array(); - - switch ($action) - { - case 'edit': - $default_items = explode(',', $default); - $default_items = array_diff($default_items, array('')); - - $field_value_array = explode('|', $field_value); - $field_value_array = array_values(array_diff($field_value_array, array(''))); - - $AVE_Template->assign('items', $default_items); - $AVE_Template->assign('used', $field_value_array); - $AVE_Template->assign('doc_id', (isset($_REQUEST['Id']) ? (int)$_REQUEST['Id'] : 0)); - $AVE_Template->assign('field_id', $field_id); - $AVE_Template->assign('field_value', $field_value); - - $tpl_file = get_field_tpl($tpl_dir, $field_id, 'admin', $_tpl); - - return $AVE_Template->fetch($tpl_file); - break; - - case 'doc': - $default_items = explode(',', $default); - - $items = explode('|', $field_value); - $items = array_diff($items, array('')); - - if (! empty($items)) - { - foreach($items as $item) - { - if ($item) - { - if ($tpl_empty) - { - $item = $default_items[(int)$item-1]; - } - else - { - $field_param = explode('|', $item); - - $item = preg_replace_callback( - '/\[tag:parametr:(\d+)\]/i', - function($data) use($field_param, $default_items) - { - return $default_items[$field_param[(int)$data[1]]-1]; - }, - $tpl - ); - } - } - - $res[] = $item; - } - } - - $tpl_file = get_field_tpl($tpl_dir, $field_id, 'doc', $_tpl); - - if ($tpl_empty && $tpl_file) - { - $AVE_Template->assign('field_id', $field_id); - $AVE_Template->assign('field_value', $res); - $AVE_Template->assign('rubric_id', $rubric_id); - $AVE_Template->assign('default', $default_items); - - return $AVE_Template->fetch($tpl_file); - } - - return (! empty($res)) - ? implode(PHP_EOL, $res) - : $tpl; - - break; - - case 'req': - $default_items = explode(',', $default); - - $items = explode('|', $field_value); - $items = array_diff($items, array('')); - - if (! empty($items)) - { - foreach($items as $item) - { - if ($item) - { - if ($tpl_empty) - { - $item = $default_items[(int)$item-1]; - } - else - { - $field_param = explode('|', $item); - - $item = preg_replace_callback( - '/\[tag:parametr:(\d+)\]/i', - function($data) use($field_param, $default_items) - { - return $default_items[$field_param[(int)$data[1]]-1]; - }, - $tpl - ); - } - } - - $res[] = $item; - } - } - - $tpl_file = get_field_tpl($tpl_dir, $field_id, 'req', $_tpl); - - if ($tpl_empty && $tpl_file) - { - $AVE_Template->assign('field_id', $field_id); - $AVE_Template->assign('field_value', $res); - $AVE_Template->assign('rubric_id', $rubric_id); - $AVE_Template->assign('default', $default_items); - - return $AVE_Template->fetch($tpl_file); - } - - return (! empty($res)) - ? implode(PHP_EOL, $res) - : $tpl; - - break; - - case 'name': - return $AVE_Template->get_config_vars('name'); - break; - - } - return ($res ? $res : $field_value); - } -?> \ No newline at end of file diff --git a/fields/multi_checkbox/field.php b/fields/multi_checkbox/field.php new file mode 100644 index 0000000..f396ccd --- /dev/null +++ b/fields/multi_checkbox/field.php @@ -0,0 +1,163 @@ +config_load($lang_file, 'lang'); + $AVE_Template->assign('config_vars', $AVE_Template->get_config_vars()); + $AVE_Template->config_load($lang_file, 'admin'); + + $res = array(); + + switch ($action) + { + case 'edit': + $default_items = explode(',', $default); + $default_items = array_diff($default_items, array('')); + + $field_value_array = explode('|', $field_value); + $field_value_array = array_values(array_diff($field_value_array, array(''))); + + $AVE_Template->assign('items', $default_items); + $AVE_Template->assign('used', $field_value_array); + $AVE_Template->assign('doc_id', (isset($_REQUEST['Id']) ? (int)$_REQUEST['Id'] : 0)); + $AVE_Template->assign('field_id', $field_id); + $AVE_Template->assign('field_value', $field_value); + + $tpl_file = get_field_tpl($tpl_dir, $field_id, 'admin'); + + return $AVE_Template->fetch($tpl_file); + break; + + case 'doc': + $default_items = explode(',', $default); + + $items = explode('|', $field_value); + $items = array_diff($items, array('')); + + if (! empty($items)) + { + foreach($items as $item) + { + if ($item) + { + if ($tpl_empty) + { + $item = $default_items[(int)$item-1]; + } + else + { + $field_param = explode('|', $item); + + $item = preg_replace_callback( + '/\[tag:parametr:(\d+)\]/i', + function($data) use($field_param, $default_items) + { + return $default_items[$field_param[(int)$data[1]]-1]; + }, + $tpl + ); + } + } + + $res[] = $item; + } + } + + $tpl_file = get_field_tpl($tpl_dir, $field_id, 'doc'); + + if ($tpl_empty && $tpl_file) + { + $AVE_Template->assign('field_id', $field_id); + $AVE_Template->assign('field_value', $res); + $AVE_Template->assign('rubric_id', $rubric_id); + $AVE_Template->assign('default', $default_items); + + return $AVE_Template->fetch($tpl_file); + } + + return (! empty($res)) + ? implode(PHP_EOL, $res) + : $tpl; + + break; + + case 'req': + $default_items = explode(',', $default); + + $items = explode('|', $field_value); + $items = array_diff($items, array('')); + + if (! empty($items)) + { + foreach($items as $item) + { + if ($item) + { + if ($tpl_empty) + { + $item = $default_items[(int)$item-1]; + } + else + { + $field_param = explode('|', $item); + + $item = preg_replace_callback( + '/\[tag:parametr:(\d+)\]/i', + function($data) use($field_param, $default_items) + { + return $default_items[$field_param[(int)$data[1]]-1]; + }, + $tpl + ); + } + } + + $res[] = $item; + } + } + + $tpl_file = get_field_tpl($tpl_dir, $field_id, 'req'); + + if ($tpl_empty && $tpl_file) + { + $AVE_Template->assign('field_id', $field_id); + $AVE_Template->assign('field_value', $res); + $AVE_Template->assign('rubric_id', $rubric_id); + $AVE_Template->assign('default', $default_items); + + return $AVE_Template->fetch($tpl_file); + } + + return (! empty($res)) + ? implode(PHP_EOL, $res) + : $tpl; + + break; + + case 'name': + return $AVE_Template->get_config_vars('name'); + break; + + } + return ($res ? $res : $field_value); +} +?> \ No newline at end of file diff --git a/fields/checkbox_multi/lang/bg.txt b/fields/multi_checkbox/lang/bg.txt similarity index 100% rename from fields/checkbox_multi/lang/bg.txt rename to fields/multi_checkbox/lang/bg.txt diff --git a/fields/checkbox_multi/lang/cz.txt b/fields/multi_checkbox/lang/cz.txt similarity index 100% rename from fields/checkbox_multi/lang/cz.txt rename to fields/multi_checkbox/lang/cz.txt diff --git a/fields/checkbox_multi/lang/en.txt b/fields/multi_checkbox/lang/en.txt similarity index 100% rename from fields/checkbox_multi/lang/en.txt rename to fields/multi_checkbox/lang/en.txt diff --git a/fields/checkbox_multi/lang/pl.txt b/fields/multi_checkbox/lang/pl.txt similarity index 100% rename from fields/checkbox_multi/lang/pl.txt rename to fields/multi_checkbox/lang/pl.txt diff --git a/fields/checkbox_multi/lang/ru.txt b/fields/multi_checkbox/lang/ru.txt similarity index 100% rename from fields/checkbox_multi/lang/ru.txt rename to fields/multi_checkbox/lang/ru.txt diff --git a/fields/checkbox_multi/lang/ua.txt b/fields/multi_checkbox/lang/ua.txt similarity index 100% rename from fields/checkbox_multi/lang/ua.txt rename to fields/multi_checkbox/lang/ua.txt diff --git a/fields/checkbox_multi/tpl/field-doc.tpl b/fields/multi_checkbox/tpl/field-doc.tpl similarity index 100% rename from fields/checkbox_multi/tpl/field-doc.tpl rename to fields/multi_checkbox/tpl/field-doc.tpl diff --git a/fields/checkbox_multi/tpl/field-req.tpl b/fields/multi_checkbox/tpl/field-req.tpl similarity index 100% rename from fields/checkbox_multi/tpl/field-req.tpl rename to fields/multi_checkbox/tpl/field-req.tpl diff --git a/fields/checkbox_multi/tpl/field.tpl b/fields/multi_checkbox/tpl/field.tpl similarity index 100% rename from fields/checkbox_multi/tpl/field.tpl rename to fields/multi_checkbox/tpl/field.tpl diff --git a/fields/tags/field.php b/fields/tags/field.php index 36ebab7..89ec4a1 100644 --- a/fields/tags/field.php +++ b/fields/tags/field.php @@ -1,234 +1,231 @@ - 0 - ? $rubric_id - : $_REQUEST['rubric_id'] - ? (int)$_REQUEST['rubric_id'] - : $AVE_DB->Query("SELECT rubric_id FROM ".PREFIX."_documents WHERE Id = '".$_REQUEST['Id']."'")->GetCell(); - - $lang_file = $fld_dir . 'lang/' . (defined('ACP') - ? $_SESSION['admin_language'] - : $_SESSION['user_language']) . '.txt'; - - $AVE_Template->config_load($lang_file, 'lang'); - $AVE_Template->assign('config_vars', $AVE_Template->get_config_vars()); - $AVE_Template->config_load($lang_file, 'admin'); - - switch ($action) - { - case 'edit': - $sql = " - SELECT DISTINCT - tag - FROM - ".PREFIX."_document_tags - WHERE - rubric_id = '".$rubric_id."' - ORDER BY tag ASC - "; - - $query = $AVE_DB->Query($sql); - - $field_tags = array(); - - while ($row = $query->GetCell()) - array_push($field_tags, $row); - - $field_value = explode('|', $field_value); - $field_value = array_diff($field_value, array('')); - - $total = count($field_tags); - - $field_points = array(ceil($total/4), 2*ceil($total/4), 3*ceil($total/4)); - - $AVE_Template->assign('field_points', $field_points); - $AVE_Template->assign('field_tags', $field_tags); - $AVE_Template->assign('field_dir', $fld_name); - $AVE_Template->assign('field_id', $field_id); - $AVE_Template->assign('field_value', $field_value); - - $tpl_file = get_field_tpl($tpl_dir, $field_id, 'admin', $_tpl); - - return $AVE_Template->fetch($tpl_file); - break; - - case 'doc': - - $AVE_Template->config_load($lang_file, 'public'); - - if ($tpl_empty) - { - $field_value = explode('|', $field_value); - $field_value = array_diff($field_value, array('')); - $field_value = array_values($field_value); - } - else - { - $field_param = explode('|', $field_value); - $field_param = array_diff($field_param, array('')); - $field_param = array_values($field_param); - $field_value = preg_replace_callback( - '/\[tag:parametr:(\d+)\]/i', - function ($data) use ($field_param) - { - return $field_param[(int)$data[1]]; - }, - $tpl - ); - } - - $tpl_file = get_field_tpl($tpl_dir, $field_id, 'doc', $_tpl); - - if ($tpl_empty && $tpl_file) - { - $AVE_Template->assign('field_id', $field_id); - $AVE_Template->assign('field_default', $default); - $AVE_Template->assign('field_value', $field_value); - - return $AVE_Template->fetch($tpl_file); - } - - return $field_value; - break; - - case 'req': - - $AVE_Template->config_load($lang_file, 'public'); - - if ($tpl_empty) - { - $field_value = explode('|', $field_value); - $field_value = array_diff($field_value, array('')); - $field_value = array_values($field_value); - } - else - { - $field_param = explode('|', $field_value); - $field_param = array_diff($field_param, array('')); - $field_param = array_values($field_param); - $field_value = preg_replace_callback( - '/\[tag:parametr:(\d+)\]/i', - function($data) use($field_param) - { - return $field_param[(int)$data[1]]; - }, - $tpl - ); - } - - $tpl_file = get_field_tpl($tpl_dir, $field_id, 'req', $_tpl); - - if ($tpl_empty && $tpl_file) - { - $AVE_Template->assign('field_id', $field_id); - $AVE_Template->assign('field_default', $default); - $AVE_Template->assign('field_value', $field_value); - - return $AVE_Template->fetch($tpl_file); - } - - return $field_value; - break; - - case 'save': - // Регистрируем хук - Hooks::register('DocumentAfterSave', 'afterTagsSave', 10); - - $field_value = tagsValue($field_value); - - if (! empty($field_value)) - $field_value = '|' . implode('|', $field_value) . '|'; - - return $field_value; - - case 'name': - return $AVE_Template->get_config_vars('name'); - - default: - return $field_value; - } - } - - if (! function_exists('tagsValue')) - { - function tagsValue ($field_value) - { - // Если есть выделенные теги - if (! empty($field_value['tags'])) - $tags = $field_value['tags']; - else - $tags = array(); - - unset ($tags['other']); - - // Если есть теги через зяпятую - if (! empty($field_value['tags']['other'])) - { - $tags_new = explode(',', $field_value['tags']['other']); - $tags_new = array_map('trim', $tags_new); - } - else - $tags_new = array(); - - // Совмещаем массивы - $tags = array_merge($tags, $tags_new); - - // Делаем уникальные значения - $field_value = array_unique($tags); - - if (empty($field_value)) - $field_value = ''; - - return $field_value; - } - } - - if (! function_exists('afterTagsSave')) - { - function afterTagsSave ($data) - { - global $AVE_Document; - - if (! $AVE_Document) - { - require_once BASE_DIR . '/class/class.docs.php'; - - $AVE_Document = new AVE_Document(); - } - - foreach ($data['data']['feld'] AS $_k => $_v) - { - if (array_key_exists('tags', $_v)) - { - $tags = tagsValue($_v); - - if (! empty($tags)) - { - $tags = implode(',', $tags); - $AVE_Document->saveTags($data['document_id'], $data['rubric_id'], $tags); - } - } - } - } - } + 0 + ? $rubric_id + : $_REQUEST['rubric_id'] + ? (int)$_REQUEST['rubric_id'] + : $AVE_DB->Query("SELECT rubric_id FROM ".PREFIX."_documents WHERE Id = '".$_REQUEST['Id']."'")->GetCell(); + + $lang_file = $fld_dir . 'lang/' . (defined('ACP') + ? $_SESSION['admin_language'] + : $_SESSION['user_language']) . '.txt'; + + $AVE_Template->config_load($lang_file, 'lang'); + $AVE_Template->assign('config_vars', $AVE_Template->get_config_vars()); + $AVE_Template->config_load($lang_file, 'admin'); + + switch ($action) + { + case 'edit': + $sql = " + SELECT DISTINCT + tag + FROM + ".PREFIX."_document_tags + WHERE + rubric_id = '".$rubric_id."' + ORDER BY tag ASC + "; + + $query = $AVE_DB->Query($sql); + + $field_tags = array(); + + while ($row = $query->GetCell()) + array_push($field_tags, $row); + + $field_value = explode('|', $field_value); + $field_value = array_diff($field_value, array('')); + + $total = count($field_tags); + + $field_points = array(ceil($total/4), 2*ceil($total/4), 3*ceil($total/4)); + + $AVE_Template->assign('field_points', $field_points); + $AVE_Template->assign('field_tags', $field_tags); + $AVE_Template->assign('field_dir', $fld_name); + $AVE_Template->assign('field_id', $field_id); + $AVE_Template->assign('field_value', $field_value); + + $tpl_file = get_field_tpl($tpl_dir, $field_id, 'admin', $_tpl); + + return $AVE_Template->fetch($tpl_file); + break; + + case 'doc': + + $AVE_Template->config_load($lang_file, 'public'); + + if ($tpl_empty) + { + $field_value = explode('|', $field_value); + $field_value = array_diff($field_value, array('')); + $field_value = array_values($field_value); + } + else + { + $field_param = explode('|', $field_value); + $field_param = array_diff($field_param, array('')); + $field_param = array_values($field_param); + $field_value = preg_replace_callback( + '/\[tag:parametr:(\d+)\]/i', + function ($data) use ($field_param) + { + return $field_param[(int)$data[1]]; + }, + $tpl + ); + } + + $tpl_file = get_field_tpl($tpl_dir, $field_id, 'doc', $_tpl); + + if ($tpl_empty && $tpl_file) + { + $AVE_Template->assign('field_id', $field_id); + $AVE_Template->assign('field_default', $default); + $AVE_Template->assign('field_value', $field_value); + + return $AVE_Template->fetch($tpl_file); + } + + return $field_value; + break; + + case 'req': + + $AVE_Template->config_load($lang_file, 'public'); + + if ($tpl_empty) + { + $field_value = explode('|', $field_value); + $field_value = array_diff($field_value, array('')); + $field_value = array_values($field_value); + } + else + { + $field_param = explode('|', $field_value); + $field_param = array_diff($field_param, array('')); + $field_param = array_values($field_param); + $field_value = preg_replace_callback( + '/\[tag:parametr:(\d+)\]/i', + function($data) use($field_param) + { + return $field_param[(int)$data[1]]; + }, + $tpl + ); + } + + $tpl_file = get_field_tpl($tpl_dir, $field_id, 'req', $_tpl); + + if ($tpl_empty && $tpl_file) + { + $AVE_Template->assign('field_id', $field_id); + $AVE_Template->assign('field_default', $default); + $AVE_Template->assign('field_value', $field_value); + + return $AVE_Template->fetch($tpl_file); + } + + return $field_value; + break; + + case 'save': + // Регистрируем хук + Hooks::register('DocumentAfterSave', 'afterTagsSave', 10); + + $field_value = tagsValue($field_value); + + if (! empty($field_value)) + $field_value = '|' . implode('|', $field_value) . '|'; + + return $field_value; + + case 'name': + return $AVE_Template->get_config_vars('name'); + + default: + return $field_value; + } + } + + if (! function_exists('tagsValue')) + { + function tagsValue ($field_value) + { + // Если есть выделенные теги + if (! empty($field_value['tags'])) + $tags = $field_value['tags']; + else + $tags = array(); + + unset ($tags['other']); + + // Если есть теги через зяпятую + if (! empty($field_value['tags']['other'])) + { + $tags_new = explode(',', $field_value['tags']['other']); + $tags_new = array_map('trim', $tags_new); + } + else + $tags_new = array(); + + // Совмещаем массивы + $tags = array_merge($tags, $tags_new); + + // Делаем уникальные значения + $field_value = array_unique($tags); + + return $field_value; + } + } + + if (! function_exists('afterTagsSave')) + { + function afterTagsSave ($data) + { + global $AVE_Document; + + if (! $AVE_Document) + { + require_once BASE_DIR . '/class/class.docs.php'; + + $AVE_Document = new AVE_Document(); + } + + foreach ($data['data']['feld'] AS $_k => $_v) + { + if (array_key_exists('tags', $_v)) + { + $tags = tagsValue($_v); + + if (! empty($tags)) + { + $tags = implode(',', $tags); + $AVE_Document->saveTags($data['document_id'], $data['rubric_id'], $tags); + } + } + } + } + } ?> \ No newline at end of file diff --git a/functions/func.block.php b/functions/func.block.php index a7fe261..85e8171 100644 --- a/functions/func.block.php +++ b/functions/func.block.php @@ -15,10 +15,12 @@ * Обработка тега блока * * @param int $id идентификатор системного блока + * + * @return bool|mixed|null|string|string[] */ function parse_block($id) { - global $AVE_DB, $AVE_Core; + global $AVE_DB; if (is_array($id)) $id = $id[1]; @@ -97,5 +99,7 @@ return $return; } + + return false; } ?> \ No newline at end of file diff --git a/functions/func.breadcrumbs.php b/functions/func.breadcrumbs.php index 147d518..b9fc044 100644 --- a/functions/func.breadcrumbs.php +++ b/functions/func.breadcrumbs.php @@ -210,13 +210,9 @@ $bread_crumb .= sprintf($bread_self_box, $current->document_breadcrum_title); if (! $noprint) - { $crumbs[$curent_document] = sprintf($bread_box, $bread_crumb); - } else - { - $crumbs[$curent_document] = ''; - } + $crumbs[$curent_document] = ''; unset($bread_crumb); diff --git a/functions/func.common.php b/functions/func.common.php index 8fa9785..e431fa9 100755 --- a/functions/func.common.php +++ b/functions/func.common.php @@ -22,6 +22,10 @@ /** * Функция загрузки файлов с удаленного сервера через CURL * как альтернатива для file_get_conents + * + * @param $sourceFileName + * + * @return mixed */ function CURL_file_get_contents($sourceFileName) { @@ -32,6 +36,7 @@ $st = curl_exec($ch); curl_close($ch); + return ($st); } @@ -131,17 +136,20 @@ * @internal param int $id идентификатор запроса * @return string */ - function eval2var($expression) + if (! function_exists("eval2var")) { - global $AVE_DB, $AVE_Core, $AVE_Template; + function eval2var($expression) + { + global $AVE_DB, $AVE_Core, $AVE_Template; - ob_start(); + ob_start(); - eval($expression); + eval($expression); - $content = ob_get_clean(); + $content = ob_get_clean(); - return $content; + return $content; + } } @@ -510,6 +518,13 @@ /** * Вывод статистики + * + * @param int $t + * @param int $m + * @param int $q + * @param int $l + * + * @return string */ function get_statistic($t=0, $m=0, $q=0, $l=0) { @@ -538,6 +553,11 @@ /** * Комментарии в SMARTY + * + * @param $tpl_source + * @param $smarty + * + * @return string */ function add_template_comment($tpl_source, &$smarty) { @@ -549,11 +569,11 @@ * Получения списка стран * * @param int $status статус стран входящих в список - * - * если не указано возвращает список стран без учета статуса + * + * если не указано возвращает список стран без учета статуса * * @return array */ @@ -612,10 +632,10 @@ closedir($handle); } - $return = array( - 'files' => $files, - 'thumbs' => $thumbs - ); + //$return = array( + // 'files' => $files, + // 'thumbs' => $thumbs + //); return $files; } @@ -630,6 +650,8 @@ { $dir = BASE_DIR . "/" . $path; + $files = array(); + if ($handle = opendir($dir)) { while (false !== ($file = readdir($handle))) @@ -645,6 +667,7 @@ } closedir($handle); } + return $files; } @@ -685,13 +708,15 @@ /** * Функция записывает в указанную папку .htaccess с содержанием "Deny from all" * + * @param $dir */ function write_htaccess_deny($dir) { $file = $dir . '/.htaccess'; - if(! file_exists($file)) + + if (! file_exists($file)) { - if(! is_dir($dir)) + if (! is_dir($dir)) @mkdir($dir); @file_put_contents($dir . '/.htaccess','Deny from all'); @@ -751,7 +776,7 @@ $object = (array)$object; if ($object === array()) - return; + return $object; foreach($object as $key => &$value) { @@ -771,15 +796,15 @@ * msort() can be used to sort a rowset like array on one or more * 'headers' (keys in the 2th array). * - * @param array $array The array to sort. - * @param string|array $key The index(es) to sort the array on. - * @param int $sort_flags The optional parameter to modify the sorting - * @param string $sort_way The optional parameter to modify the sorting as DESC or ASC - * behavior. This parameter does not work when - * supplying an array in the $key parameter. + * @param array $array The array to sort. + * @param string|array $key The index(es) to sort the array on. + * @param int $sort_flags The optional parameter to modify the sorting + * @param int $sort_way The optional parameter to modify the sorting as DESC or ASC + * behavior. This parameter does not work when + * supplying an array in the $key parameter. * * @return array The sorted array. - */ + */ function msort($array, $key, $sort_flags = SORT_REGULAR, $sort_way = SORT_ASC) { if (is_array($array) && count($array) > 0) @@ -792,7 +817,7 @@ { $sort_key = ''; - if (!is_array($key)) + if ( !is_array($key)) { $sort_key = $v[$key]; } @@ -852,7 +877,6 @@ * * @param string $string * @param $limit - * @return string */ function findautor($string, $limit) { @@ -878,6 +902,7 @@ ); $users = array(); + while ($row = $sql->FetchRow()) { $ava=getAvatar($row->Id,40); @@ -890,6 +915,7 @@ 'avatar'=>($ava ? $ava : ABS_PATH.'admin/templates/images/user.png') ); } + echo json_encode($users); } @@ -926,7 +952,6 @@ /** * Функция поиска тегов * - * @param string $string - запрос * @return string */ function searchTags() @@ -942,12 +967,10 @@ $tags = array(); - $ii = 0; + //$ii = 0; while ($row = $sql->GetCell()) - { $tags[]['value'] = $row; - } echo json_encode($tags); exit; @@ -1002,6 +1025,8 @@ /** * Создание cookie + * + * @param string $cookie_domain */ function set_cookie_domain($cookie_domain = '') { @@ -1039,7 +1064,7 @@ /** * Функция проверяет наличие Ajax запроса * - * @return bool true|false - Ajax + * @return bool */ function isAjax() { @@ -1050,6 +1075,8 @@ /** * Функция делает html в 1 строчку, удаляет лишние пробелы, комментарии и т.д. * + * @param $data + * * @return string */ function compress_htlm($data) @@ -1077,7 +1104,8 @@ /** * Функция делает компрессию данных * - * @return string + * @param $data + * */ function output_compress($data) { @@ -1132,15 +1160,21 @@ * Функция создает короткий URL документа для редиректа * После выполения функции нужно очистить кеш данного документа * - * @return + * @param int $length + * @param $doc_id + * + * @return bool */ - function gen_short_link ($length = 1, $doc_id) + function gen_short_link ($length, $doc_id) { global $AVE_DB; if (! is_numeric($doc_id)) return false; + if (! $length) + $length = 1; + // Проврека на существование редиректа для данного документа $check_doc = $AVE_DB->Query(" SELECT diff --git a/functions/func.documents.php b/functions/func.documents.php index 23a14f8..05009fe 100644 --- a/functions/func.documents.php +++ b/functions/func.documents.php @@ -79,7 +79,7 @@ * @param int $doc_id - номер id документа * @param string $key - параметр документа * - * @return string + * @return string | bool | array */ function get_document ($doc_id , $key ='') { @@ -114,7 +114,7 @@ * * @param int $doc_id - номер id документа * - * @return object + * @return object | bool */ function getDocument ($doc_id) { diff --git a/functions/func.fields.php b/functions/func.fields.php index 88bfb21..2073d25 100644 --- a/functions/func.fields.php +++ b/functions/func.fields.php @@ -104,6 +104,8 @@ /** * Возвращаем тип поля * + * @param string $type + * * @return mixed */ function get_field_type ($type = '') @@ -129,14 +131,10 @@ $id = substr($v, strlen('get_field_')); if ($name != false && is_string($name)) - $fields[] = array('id' => $id,'name' => (isset($fields_vars[$name]) - ? $fields_vars[$name] - : $name)); + $fields[] = array('id' => $id, 'name' => $name); if (! empty($type) && $id == $type) - $field = array('id' => $id,'name' => (isset($fields_vars[$name]) - ? $fields_vars[$name] - : $name)); + $field = array('id' => $id, 'name' => $name); } else continue; @@ -165,7 +163,7 @@ if (isset($alias_field_id[$id])) return $alias_field_id[$id]; - $alias_field_id[$id] = $AVE_DB->Query("SELECT rubric_field_alias FROM " . PREFIX . "_rubric_fields WHERE Id=".intval($id))->GetCell(); + $alias_field_id[$id] = $AVE_DB->Query("SELECT rubric_field_alias FROM " . PREFIX . "_rubric_fields WHERE Id=" . intval($id))->GetCell(); return $alias_field_id[$id]; } @@ -193,10 +191,10 @@ FROM " . PREFIX . "_rubric_fields WHERE - (rubric_field_alias = '".addslashes($alias)."' - OR Id = '".intval($alias)."') + (rubric_field_alias = '" . addslashes($alias) . "' + OR Id = '" . intval($alias) . "') AND - rubric_id = ".intval($rubric_id) + rubric_id = " . intval($rubric_id) ; $alias_field_id[$rubric_id][$alias] = $AVE_DB->Query($sql)->GetCell(); @@ -208,7 +206,6 @@ /** * Возвращаем * - * @param $rubric_id * @param $id * * @return string @@ -286,9 +283,11 @@ * @param int $field_id идентификатор поля * @param int $document_id * + * @param null $_tpl + * * @return string */ - function document_get_field($field_id, $document_id = null, $_tpl = null) + function document_get_field($field_id, $document_id = null, $_tpl = null, $maxlength = null) { global $AVE_Core; @@ -409,7 +408,7 @@ */ function get_document_fields($document_id, $values = null) { - global $AVE_DB, $request_documents, $AVE_Core; + global $AVE_DB, $AVE_Core; //$request_documents static $document_fields = array(); @@ -485,12 +484,10 @@ $row['tpl_req_empty'] = (trim($row['rubric_field_template_request']) == ''); $row['tpl_field_empty'] = (trim($row['rubric_field_template']) == ''); - $row['field_value']=(string)$row['field_value'].(string)$row['field_value_more']; + $row['field_value'] = (string)$row['field_value'] . (string)$row['field_value_more']; - if($values) - { + if ($values) $row['field_value']=(isset($values[$row['rubric_field_id']]) ? $values[$row['rubric_field_id']] : $row['field_value']); - } if ($row['field_value'] === '') { @@ -731,9 +728,8 @@ /** * Возвращает наименование поля документа по номеру * - * @param int $field_id ([tag:fld:X]) - номер поля - * @param int $doc_id - * @param int $parametr ([tag:parametr:X]) - часть поля + * @param int $field_id ([tag:fld:X]) - номер поля + * @param int $doc_id * * @return string */ diff --git a/functions/func.helpers.php b/functions/func.helpers.php index 7ae8068..60d3cbb 100644 --- a/functions/func.helpers.php +++ b/functions/func.helpers.php @@ -1,781 +1,855 @@ c" - * - корректно обрабатывается "грязный" html, когда в значениях атрибутов тагов могут встречаться символы < > - * - корректно обрабатывается разбитый html - * - вырезаются комментарии, скрипты, стили, PHP, Perl, ASP код, MS Word таги, CDATA - * - автоматически форматируется текст, если он содержит html код - * - защита от подделок типа: "<script>alert('hi')script>" - * - * @param string $s - * @param array $allowable_tags Массив тагов, которые не будут вырезаны - * Пример: 'b' -- таг останется с атрибутами, '' -- таг останется без атрибутов - * @param bool $is_format_spaces Форматировать пробелы и переносы строк? - * Вид текста на выходе (plain) максимально приближеется виду текста в браузере на входе. - * Другими словами, грамотно преобразует text/html в text/plain. - * Текст форматируется только в том случае, если были вырезаны какие-либо таги. - * @param array $pair_tags массив имён парных тагов, которые будут удалены вместе с содержимым - * см. значения по умолчанию - * @param array $para_tags массив имён парных тагов, которые будут восприниматься как параграфы (если $is_format_spaces = true) - * см. значения по умолчанию - * @return string - */ -include (BASE_DIR . '/lib/StripTagsSmart/strip_tags_smart.php'); - - -/** - * Вычисление разницы между двумя метками времени - * - * @param string $a начальная метка - * @param string $b конечная метка - * @return int время между метками - */ -if (!function_exists('microtime_diff')){ - function microtime_diff($a, $b) + + + /** + * strip_tags_smart( + $s, + array $allowable_tags = null, + $is_format_spaces = true, + array $pair_tags = array('script', 'style', 'map', 'iframe', 'frameset', 'object', 'applet', 'comment', 'button', 'textarea', 'select'), + array $para_tags = array('p', 'td', 'th', 'li', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'form', 'title', 'pre') + ) + * Более продвинутый аналог strip_tags() для корректного вырезания тагов из html кода. + * Возможности: + * - корректно обрабатываются вхождения типа "a < b > c" + * - корректно обрабатывается "грязный" html, когда в значениях атрибутов тагов могут встречаться символы < > + * - корректно обрабатывается разбитый html + * - вырезаются комментарии, скрипты, стили, PHP, Perl, ASP код, MS Word таги, CDATA + * - автоматически форматируется текст, если он содержит html код + * - защита от подделок типа: "<script>alert('hi')script>" + * + * @param string $s + * @param array $allowable_tags Массив тагов, которые не будут вырезаны + * Пример: 'b' -- таг останется с атрибутами, '' -- таг останется без атрибутов + * @param bool $is_format_spaces Форматировать пробелы и переносы строк? + * Вид текста на выходе (plain) максимально приближеется виду текста в браузере на входе. + * Другими словами, грамотно преобразует text/html в text/plain. + * Текст форматируется только в том случае, если были вырезаны какие-либо таги. + * @param array $pair_tags массив имён парных тагов, которые будут удалены вместе с содержимым + * см. значения по умолчанию + * @param array $para_tags массив имён парных тагов, которые будут восприниматься как параграфы (если $is_format_spaces = true) + * см. значения по умолчанию + * @return string + */ + include (BASE_DIR . '/lib/StripTagsSmart/strip_tags_smart.php'); + + + /** + * Вычисление разницы между двумя метками времени + * + * @param string $a начальная метка + * @param string $b конечная метка + * @return int время между метками + */ + if (! function_exists('microtime_diff')) { - list($a_dec, $a_sec) = explode(' ', $a); - list($b_dec, $b_sec) = explode(' ', $b); - return $b_sec - $a_sec + $b_dec - $a_dec; + function microtime_diff($a, $b) + { + list($a_dec, $a_sec) = explode(' ', $a); + list($b_dec, $b_sec) = explode(' ', $b); + + return $b_sec - $a_sec + $b_dec - $a_dec; + } } -} -/** - * Функция меняет кодировку файла - * - * @param string $path - * @param string $to - */ -if (!function_exists('file_encoding')){ - function file_encoding($path, $to='utf') + /** + * Функция меняет кодировку файла + * + * @param string $path + * @param string $to + */ + if (! function_exists('file_encoding')) { - $f = file_get_contents($path); - $f = mb_convert_encoding($f,$to == 'utf' ? 'UTF-8' : 'CP1251', $to == 'utf' ? 'CP1251' : 'UTF-8'); - file_put_contents($path, $f); - } -} - - -/** - * Replace array_combine() - * - * @category PHP - * @package PHP_Compat - * @license LGPL - http://www.gnu.org/licenses/lgpl.html - * @copyright 2004-2007 Aidan Lister , Arpad Ray - * @link http://php.net/function.array_combine - * @author Aidan Lister - * @version $Revision: 1.23 $ - * @since PHP 5 - * @require PHP 4.0.0 (user_error) - */ -function php_compat_array_combine($keys, $values) -{ - if (!is_array($keys)) { - user_error('array_combine() expects parameter 1 to be array, ' . - gettype($keys) . ' given', E_USER_WARNING); - return; + function file_encoding($path, $to='utf') + { + $f = file_get_contents($path); + $f = mb_convert_encoding($f,$to == 'utf' ? 'UTF-8' : 'CP1251', $to == 'utf' ? 'CP1251' : 'UTF-8'); + file_put_contents($path, $f); + } } - if (!is_array($values)) { - user_error('array_combine() expects parameter 2 to be array, ' . - gettype($values) . ' given', E_USER_WARNING); - return; - } - $key_count = count($keys); - $value_count = count($values); - if ($key_count !== $value_count) { - user_error('array_combine() Both parameters should have equal number of elements', E_USER_WARNING); - return false; - } + /** + * Replace array_combine() + * + * @category PHP + * @package PHP_Compat + * @license LGPL - http://www.gnu.org/licenses/lgpl.html + * @copyright 2004-2007 Aidan Lister , Arpad Ray + * @link http://php.net/function.array_combine + * @author Aidan Lister + * @version $Revision: 1.23 $ + * @since PHP 5 + * @require PHP 4.0.0 (user_error) + * + * @param $keys + * @param $values + * + * @return array|bool + */ + function php_compat_array_combine($keys, $values) + { + if (! is_array($keys)) + { + user_error('array_combine() expects parameter 1 to be array, ' . gettype($keys) . ' given', E_USER_WARNING); + return false; + } - if ($key_count === 0 || $value_count === 0) { - user_error('array_combine() Both parameters should have number of elements at least 0', E_USER_WARNING); - return false; - } + if (! is_array($values)) + { + user_error('array_combine() expects parameter 2 to be array, ' . gettype($values) . ' given', E_USER_WARNING); + return false; + } - $keys = array_values($keys); - $values = array_values($values); + $key_count = count($keys); + $value_count = count($values); - $combined = array(); - for ($i = 0; $i < $key_count; $i++) { - $combined[$keys[$i]] = $values[$i]; + if ($key_count !== $value_count) + { + user_error('array_combine() Both parameters should have equal number of elements', E_USER_WARNING); + return false; + } + + if ($key_count === 0 || $value_count === 0) + { + user_error('array_combine() Both parameters should have number of elements at least 0', E_USER_WARNING); + return false; + } + + $keys = array_values($keys); + $values = array_values($values); + + $combined = array(); + + for ($i = 0; $i < $key_count; $i++) + { + $combined[$keys[$i]] = $values[$i]; + } + + return $combined; + } + + // Define + if (! function_exists('array_combine')) + { + function array_combine($keys, $values) + { + return php_compat_array_combine($keys, $values); + } } - return $combined; -} -// Define -if (!function_exists('array_combine')) { - function array_combine($keys, $values) + /** + * post() + * + * @param mixed $var + * @return string + */ + if (! function_exists('post')) { - return php_compat_array_combine($keys, $values); + function post($var) + { + return (isset($_POST[$var])) + ? $_POST[$var] + : ''; + } } -} -/** - * post() - * - * @param mixed $var - * @return string - */ -if (!function_exists('post')){ - function post($var) + /** + * get() + * + * @param mixed $var + * @return string + */ + if (! function_exists('get')) { - return (isset($_POST[$var])) ? $_POST[$var] : ''; + function get($var) + { + return (isset($_GET[$var])) + ? $_GET[$var] + : ''; + } } -} -/** - * get() - * - * @param mixed $var - * @return string - */ -if (!function_exists('get')){ - function get($var) + /** + * sanitize() + * + * @param mixed $string + * @param bool $trim + * @param bool $int + * @param bool $str + * @return mixed|string + */ + if (! function_exists('sanitize')) { - return (isset($_GET[$var])) ? $_GET[$var] : ''; + function sanitize($string, $trim = false, $int = false, $str = false) + { + $string = filter_var($string, FILTER_SANITIZE_STRING); + $string = trim($string); + $string = stripslashes($string); + $string = strip_tags($string); + $string = str_replace( + array( + '‘', + '’', + '“', + '”' + ), + array( + "'", + "'", + '"', + '"' + ), + $string + ); + + if ($trim) + $string = substr($string, 0, $trim); + if ($int) + $string = preg_replace("/[^0-9\s]/", "", $string); + if ($str) + $string = preg_replace("/[^a-zA-Z\s]/", "", $string); + + return $string; + } } -} - - -/** - * sanitize() - * - * @param mixed $string - * @param bool $trim - * @param bool $int - * @param bool $str - * @return mixed|string - */ -if (!function_exists('sanitize')){ - function sanitize($string, $trim = false, $int = false, $str = false) + + + /** + * cleanSanitize() + * + * @param mixed $string + * @param bool $trim + * @param string $end_char + * @return mixed|string + */ + if (! function_exists('cleanSanitize')) { - $string = filter_var($string, FILTER_SANITIZE_STRING); - $string = trim($string); - $string = stripslashes($string); - $string = strip_tags($string); - $string = str_replace( - array( + function cleanSanitize($string, $trim = false, $end_char = '…') + { + $string = cleanOut($string); + $string = filter_var($string, FILTER_SANITIZE_STRING); + $string = trim($string); + $string = stripslashes($string); + $string = strip_tags($string); + $string = str_replace(array( '‘', '’', '“', - '”' - ), - array( + '”'), array( "'", "'", '"', - '"' - ), - $string - ); + '"'), $string); - if ($trim) - $string = substr($string, 0, $trim); - if ($int) - $string = preg_replace("/[^0-9\s]/", "", $string); - if ($str) - $string = preg_replace("/[^a-zA-Z\s]/", "", $string); + if ($trim) { + if (strlen($string) < $trim) + { + return $string; + } - return $string; - } -} - - -/** - * cleanSanitize() - * - * @param mixed $string - * @param bool $trim - * @param string $end_char - * @return mixed|string - */ -if (!function_exists('cleanSanitize')){ - function cleanSanitize($string, $trim = false, $end_char = '…') - { - $string = cleanOut($string); - $string = filter_var($string, FILTER_SANITIZE_STRING); - $string = trim($string); - $string = stripslashes($string); - $string = strip_tags($string); - $string = str_replace(array( - '‘', - '’', - '“', - '”'), array( - "'", - "'", - '"', - '"'), $string); - - if ($trim) { - if (strlen($string) < $trim) { - return $string; - } + $string = preg_replace("/\s+/", ' ', str_replace(array( + "\r\n", + "\r", + "\n"), ' ', $string)); - $string = preg_replace("/\s+/", ' ', str_replace(array( - "\r\n", - "\r", - "\n"), ' ', $string)); + if (strlen($string) <= $trim) + { + return $string; + } - if (strlen($string) <= $trim) { - return $string; - } + $out = ""; - $out = ""; - foreach (explode(' ', trim($string)) as $val) { - $out .= $val . ' '; + foreach (explode(' ', trim($string)) as $val) + { + $out .= $val . ' '; - if (strlen($out) >= $trim) { - $out = trim($out); - return (strlen($out) == strlen($string)) ? $out : $out . $end_char; + if (strlen($out) >= $trim) + { + $out = trim($out); + return (strlen($out) == strlen($string)) ? $out : $out . $end_char; + } } } + + return $string; } - return $string; } -} - - -/** - * Функция обрезает текст до заданной величины - * - * @param mixed $string - * @param int $length Длинна - * @param string $etc Окончание - * @param bool $break_words Дробить слова на символы - * @param bool $middle Вырезает середину, оставляет начало + разделитель + конец - * @return mixed|string - */ -if (! function_exists('trancate')) -{ - function truncate($string, $length = 80, $etc = '...', $break_words = false, $middle = false) - { - if ($length == 0) - return ''; - if (mb_strlen($string) > $length) + + /** + * Функция обрезает текст до заданной величины + * + * @param mixed $string + * @param int $length Длинна + * @param string $etc Окончание + * @param bool $break_words Дробить слова на символы + * @param bool $middle Вырезает середину, оставляет начало + разделитель + конец + * @return mixed|string + */ + if (! function_exists('trancate')) + { + function truncate($string, $length = 80, $etc = '...', $break_words = false, $middle = false) { - $length -= min($length, mb_strlen($etc)); + if ($length == 0) + return ''; - if (! $break_words && ! $middle) + if (mb_strlen($string) > $length) { - $string = preg_replace('/\s+?(\S+)?$/', '', mb_substr($string, 0, $length + 1)); - } + $length -= min($length, mb_strlen($etc)); - if (! $middle) - { - return mb_substr($string, 0, $length) . $etc; + if (! $break_words && ! $middle) + { + $string = preg_replace('/\s+?(\S+)?$/', '', mb_substr($string, 0, $length + 1)); + } + + if (! $middle) + { + return mb_substr($string, 0, $length) . $etc; + } + else + { + return mb_substr($string, 0, $length / 2) . $etc . mb_substr($string, - $length / 2); + } } else { - return mb_substr($string, 0, $length / 2) . $etc . mb_substr($string, - $length / 2); + return $string; } } - else - { - return $string; - } } -} - - -/** - * Функция обрезает текст до заданной величины, не бьет слова - * - * @param mixed $str - * @param int $n Длинна - * @param mixed $end_char Окончание - * @return mixed|string - */ -if (!function_exists('truncate_text')) -{ - function truncate_text($str, $n = 100, $end_char = '…') - { - if (strlen($str) < $n) - { - return $str; - } - $str = preg_replace("/\s+/", ' ', str_replace(array( - "\r\n", - "\r", - "\n"), ' ', $str)); - if (strlen($str) <= $n) + /** + * Функция обрезает текст до заданной величины, не бьет слова + * + * @param mixed $str + * @param int $n Длинна + * @param mixed $end_char Окончание + * @return mixed|string + */ + if (! function_exists('truncate_text')) + { + function truncate_text($str, $n = 100, $end_char = '…') { - return $str; - } + if (strlen($str) < $n) + { + return $str; + } - $out = ""; - foreach (explode(' ', trim($str)) as $val) - { - $out .= $val . ' '; + $str = preg_replace("/\s+/", ' ', str_replace(array( + "\r\n", + "\r", + "\n"), ' ', $str)); + + if (strlen($str) <= $n) + { + return $str; + } - if (strlen($out) >= $n) + $out = ""; + foreach (explode(' ', trim($str)) as $val) { - $out = trim($out); - return (strlen($out) == strlen($str)) - ? $out - : $out . $end_char; + $out .= $val . ' '; + + if (strlen($out) >= $n) + { + $out = trim($out); + return (strlen($out) == strlen($str)) + ? $out + : $out . $end_char; + } } + return $str; } - return $str; } -} - - -/** - * Swap named HTML entities with numeric entities. - * - * @see http://www.lazycat.org/software/html_entity_decode_full.phps - */ -function convert_entity($matches, $destroy = true) -{ - $table = array( - 'Aacute' => 'Á', 'aacute' => 'á', 'Acirc' => 'Â', 'acirc' => 'â', 'acute' => '´', - 'AElig' => 'Æ', 'aelig' => 'æ', 'Agrave' => 'À', 'agrave' => 'à', 'alefsym' => 'ℵ', - 'Alpha' => 'Α', 'alpha' => 'α', 'amp' => '&', 'and' => '∧', 'ang' => '∠', - 'Aring' => 'Å', 'aring' => 'å', 'asymp' => '≈', 'Atilde' => 'Ã', 'atilde' => 'ã', - 'Auml' => 'Ä', 'auml' => 'ä', 'bdquo' => '„', 'Beta' => 'Β', 'beta' => 'β', - 'brvbar' => '¦', 'bull' => '•', 'cap' => '∩', 'Ccedil' => 'Ç', 'ccedil' => 'ç', - 'cedil' => '¸', 'cent' => '¢', 'Chi' => 'Χ', 'chi' => 'χ', 'circ' => 'ˆ', - 'clubs' => '♣', 'cong' => '≅', 'copy' => '©', 'crarr' => '↵', 'cup' => '∪', - 'curren' => '¤', 'dagger' => '†', 'Dagger' => '‡', 'darr' => '↓', 'dArr' => '⇓', - 'deg' => '°', 'Delta' => 'Δ', 'delta' => 'δ', 'diams' => '♦', 'divide' => '÷', - 'Eacute' => 'É', 'eacute' => 'é', 'Ecirc' => 'Ê', 'ecirc' => 'ê', 'Egrave' => 'È', - 'egrave' => 'è', 'empty' => '∅', 'emsp' => ' ', 'ensp' => ' ', 'Epsilon' => 'Ε', - 'epsilon' => 'ε', 'equiv' => '≡', 'Eta' => 'Η', 'eta' => 'η', 'ETH' => 'Ð', - 'eth' => 'ð', 'Euml' => 'Ë', 'euml' => 'ë', 'euro' => '€', 'exist' => '∃', - 'fnof' => 'ƒ', 'forall' => '∀', 'frac12' => '½', 'frac14' => '¼', 'frac34' => '¾', - 'frasl' => '⁄', 'Gamma' => 'Γ', 'gamma' => 'γ', 'ge' => '≥', 'gt' => '>', - 'harr' => '↔', 'hArr' => '⇔', 'hearts' => '♥', 'hellip' => '…', 'Iacute' => 'Í', - 'iacute' => 'í', 'Icirc' => 'Î', 'icirc' => 'î', 'iexcl' => '¡', 'Igrave' => 'Ì', - 'igrave' => 'ì', 'image' => 'ℑ', 'infin' => '∞', 'int' => '∫', 'Iota' => 'Ι', - 'iota' => 'ι', 'iquest' => '¿', 'isin' => '∈', 'Iuml' => 'Ï', 'iuml' => 'ï', - 'Kappa' => 'Κ', 'kappa' => 'κ', 'Lambda' => 'Λ', 'lambda' => 'λ', 'lang' => '〈', - 'laquo' => '«', 'larr' => '←', 'lArr' => '⇐', 'lceil' => '⌈', 'ldquo' => '“', - 'le' => '≤', 'lfloor' => '⌊', 'lowast' => '∗', 'loz' => '◊', 'lrm' => '‎', - 'lsaquo' => '‹', 'lsquo' => '‘', 'lt' => '<', 'macr' => '¯', 'mdash' => '—', - 'micro' => 'µ', 'middot' => '·', 'minus' => '−', 'Mu' => 'Μ', 'mu' => 'μ', - 'nabla' => '∇', 'nbsp' => ' ', 'ndash' => '–', 'ne' => '≠', 'ni' => '∋', - 'not' => '¬', 'notin' => '∉', 'nsub' => '⊄', 'Ntilde' => 'Ñ', 'ntilde' => 'ñ', - 'Nu' => 'Ν', 'nu' => 'ν', 'Oacute' => 'Ó', 'oacute' => 'ó', 'Ocirc' => 'Ô', - 'ocirc' => 'ô', 'OElig' => 'Œ', 'oelig' => 'œ', 'Ograve' => 'Ò', 'ograve' => 'ò', - 'oline' => '‾', 'Omega' => 'Ω', 'omega' => 'ω', 'Omicron' => 'Ο', 'omicron' => 'ο', - 'oplus' => '⊕', 'or' => '∨', 'ordf' => 'ª', 'ordm' => 'º', 'Oslash' => 'Ø', - 'oslash' => 'ø', 'Otilde' => 'Õ', 'otilde' => 'õ', 'otimes' => '⊗', 'Ouml' => 'Ö', - 'ouml' => 'ö', 'para' => '¶', 'part' => '∂', 'permil' => '‰', 'perp' => '⊥', - 'Phi' => 'Φ', 'phi' => 'φ', 'Pi' => 'Π', 'pi' => 'π', 'piv' => 'ϖ', - 'plusmn' => '±', 'pound' => '£', 'prime' => '′', 'Prime' => '″', 'prod' => '∏', - 'prop' => '∝', 'Psi' => 'Ψ', 'psi' => 'ψ', 'quot' => '"', 'radic' => '√', - 'rang' => '〉', 'raquo' => '»', 'rarr' => '→', 'rArr' => '⇒', 'rceil' => '⌉', - 'rdquo' => '”', 'real' => 'ℜ', 'reg' => '®', 'rfloor' => '⌋', 'Rho' => 'Ρ', - 'rho' => 'ρ', 'rlm' => '‏', 'rsaquo' => '›', 'rsquo' => '’', 'sbquo' => '‚', - 'Scaron' => 'Š', 'scaron' => 'š', 'sdot' => '⋅', 'sect' => '§', 'shy' => '­', - 'Sigma' => 'Σ', 'sigma' => 'σ', 'sigmaf' => 'ς', 'sim' => '∼', 'spades' => '♠', - 'sub' => '⊂', 'sube' => '⊆', 'sum' => '∑', 'sup' => '⊃', 'sup1' => '¹', - 'sup2' => '²', 'sup3' => '³', 'supe' => '⊇', 'szlig' => 'ß', 'Tau' => 'Τ', - 'tau' => 'τ', 'there4' => '∴', 'Theta' => 'Θ', 'theta' => 'θ', 'thetasym' => 'ϑ', - 'thinsp' => ' ', 'THORN' => 'Þ', 'thorn' => 'þ', 'tilde' => '˜', 'times' => '×', - 'trade' => '™', 'Uacute' => 'Ú', 'uacute' => 'ú', 'uarr' => '↑', 'uArr' => '⇑', - 'Ucirc' => 'Û', 'ucirc' => 'û', 'Ugrave' => 'Ù', 'ugrave' => 'ù', 'uml' => '¨', - 'upsih' => 'ϒ', 'Upsilon' => 'Υ', 'upsilon' => 'υ', 'Uuml' => 'Ü', 'uuml' => 'ü', - 'weierp' => '℘', 'Xi' => 'Ξ', 'xi' => 'ξ', 'Yacute' => 'Ý', 'yacute' => 'ý', - 'yen' => '¥', 'Yuml' => 'Ÿ', 'yuml' => 'ÿ', 'Zeta' => 'Ζ', 'zeta' => 'ζ', - 'zwj' => '‍', 'zwnj' => '‌' - ); - - if (isset($table[$matches[1]])) return $table[$matches[1]]; - else return $destroy ? '' : $matches[0]; -} - - -/** - * stripTags() - * - * @param mixed $start - * @param mixed $end - * @param mixed $string - * @return string - */ -if (!function_exists('stripTags')) -{ - function stripTags($start, $end, $string) + + + /** + * Swap named HTML entities with numeric entities. + * + * @see http://www.lazycat.org/software/html_entity_decode_full.phps + * + * @param $matches + * @param bool $destroy + * + * @return mixed|string + */ + function convert_entity($matches, $destroy = true) { - $string = stristr($string, $start); - $doend = stristr($string, $end); - return substr($string, strlen($start), -strlen($doend)); + $table = array( + 'Aacute' => 'Á', 'aacute' => 'á', 'Acirc' => 'Â', 'acirc' => 'â', 'acute' => '´', + 'AElig' => 'Æ', 'aelig' => 'æ', 'Agrave' => 'À', 'agrave' => 'à', 'alefsym' => 'ℵ', + 'Alpha' => 'Α', 'alpha' => 'α', 'amp' => '&', 'and' => '∧', 'ang' => '∠', + 'Aring' => 'Å', 'aring' => 'å', 'asymp' => '≈', 'Atilde' => 'Ã', 'atilde' => 'ã', + 'Auml' => 'Ä', 'auml' => 'ä', 'bdquo' => '„', 'Beta' => 'Β', 'beta' => 'β', + 'brvbar' => '¦', 'bull' => '•', 'cap' => '∩', 'Ccedil' => 'Ç', 'ccedil' => 'ç', + 'cedil' => '¸', 'cent' => '¢', 'Chi' => 'Χ', 'chi' => 'χ', 'circ' => 'ˆ', + 'clubs' => '♣', 'cong' => '≅', 'copy' => '©', 'crarr' => '↵', 'cup' => '∪', + 'curren' => '¤', 'dagger' => '†', 'Dagger' => '‡', 'darr' => '↓', 'dArr' => '⇓', + 'deg' => '°', 'Delta' => 'Δ', 'delta' => 'δ', 'diams' => '♦', 'divide' => '÷', + 'Eacute' => 'É', 'eacute' => 'é', 'Ecirc' => 'Ê', 'ecirc' => 'ê', 'Egrave' => 'È', + 'egrave' => 'è', 'empty' => '∅', 'emsp' => ' ', 'ensp' => ' ', 'Epsilon' => 'Ε', + 'epsilon' => 'ε', 'equiv' => '≡', 'Eta' => 'Η', 'eta' => 'η', 'ETH' => 'Ð', + 'eth' => 'ð', 'Euml' => 'Ë', 'euml' => 'ë', 'euro' => '€', 'exist' => '∃', + 'fnof' => 'ƒ', 'forall' => '∀', 'frac12' => '½', 'frac14' => '¼', 'frac34' => '¾', + 'frasl' => '⁄', 'Gamma' => 'Γ', 'gamma' => 'γ', 'ge' => '≥', 'gt' => '>', + 'harr' => '↔', 'hArr' => '⇔', 'hearts' => '♥', 'hellip' => '…', 'Iacute' => 'Í', + 'iacute' => 'í', 'Icirc' => 'Î', 'icirc' => 'î', 'iexcl' => '¡', 'Igrave' => 'Ì', + 'igrave' => 'ì', 'image' => 'ℑ', 'infin' => '∞', 'int' => '∫', 'Iota' => 'Ι', + 'iota' => 'ι', 'iquest' => '¿', 'isin' => '∈', 'Iuml' => 'Ï', 'iuml' => 'ï', + 'Kappa' => 'Κ', 'kappa' => 'κ', 'Lambda' => 'Λ', 'lambda' => 'λ', 'lang' => '〈', + 'laquo' => '«', 'larr' => '←', 'lArr' => '⇐', 'lceil' => '⌈', 'ldquo' => '“', + 'le' => '≤', 'lfloor' => '⌊', 'lowast' => '∗', 'loz' => '◊', 'lrm' => '‎', + 'lsaquo' => '‹', 'lsquo' => '‘', 'lt' => '<', 'macr' => '¯', 'mdash' => '—', + 'micro' => 'µ', 'middot' => '·', 'minus' => '−', 'Mu' => 'Μ', 'mu' => 'μ', + 'nabla' => '∇', 'nbsp' => ' ', 'ndash' => '–', 'ne' => '≠', 'ni' => '∋', + 'not' => '¬', 'notin' => '∉', 'nsub' => '⊄', 'Ntilde' => 'Ñ', 'ntilde' => 'ñ', + 'Nu' => 'Ν', 'nu' => 'ν', 'Oacute' => 'Ó', 'oacute' => 'ó', 'Ocirc' => 'Ô', + 'ocirc' => 'ô', 'OElig' => 'Œ', 'oelig' => 'œ', 'Ograve' => 'Ò', 'ograve' => 'ò', + 'oline' => '‾', 'Omega' => 'Ω', 'omega' => 'ω', 'Omicron' => 'Ο', 'omicron' => 'ο', + 'oplus' => '⊕', 'or' => '∨', 'ordf' => 'ª', 'ordm' => 'º', 'Oslash' => 'Ø', + 'oslash' => 'ø', 'Otilde' => 'Õ', 'otilde' => 'õ', 'otimes' => '⊗', 'Ouml' => 'Ö', + 'ouml' => 'ö', 'para' => '¶', 'part' => '∂', 'permil' => '‰', 'perp' => '⊥', + 'Phi' => 'Φ', 'phi' => 'φ', 'Pi' => 'Π', 'pi' => 'π', 'piv' => 'ϖ', + 'plusmn' => '±', 'pound' => '£', 'prime' => '′', 'Prime' => '″', 'prod' => '∏', + 'prop' => '∝', 'Psi' => 'Ψ', 'psi' => 'ψ', 'quot' => '"', 'radic' => '√', + 'rang' => '〉', 'raquo' => '»', 'rarr' => '→', 'rArr' => '⇒', 'rceil' => '⌉', + 'rdquo' => '”', 'real' => 'ℜ', 'reg' => '®', 'rfloor' => '⌋', 'Rho' => 'Ρ', + 'rho' => 'ρ', 'rlm' => '‏', 'rsaquo' => '›', 'rsquo' => '’', 'sbquo' => '‚', + 'Scaron' => 'Š', 'scaron' => 'š', 'sdot' => '⋅', 'sect' => '§', 'shy' => '­', + 'Sigma' => 'Σ', 'sigma' => 'σ', 'sigmaf' => 'ς', 'sim' => '∼', 'spades' => '♠', + 'sub' => '⊂', 'sube' => '⊆', 'sum' => '∑', 'sup' => '⊃', 'sup1' => '¹', + 'sup2' => '²', 'sup3' => '³', 'supe' => '⊇', 'szlig' => 'ß', 'Tau' => 'Τ', + 'tau' => 'τ', 'there4' => '∴', 'Theta' => 'Θ', 'theta' => 'θ', 'thetasym' => 'ϑ', + 'thinsp' => ' ', 'THORN' => 'Þ', 'thorn' => 'þ', 'tilde' => '˜', 'times' => '×', + 'trade' => '™', 'Uacute' => 'Ú', 'uacute' => 'ú', 'uarr' => '↑', 'uArr' => '⇑', + 'Ucirc' => 'Û', 'ucirc' => 'û', 'Ugrave' => 'Ù', 'ugrave' => 'ù', 'uml' => '¨', + 'upsih' => 'ϒ', 'Upsilon' => 'Υ', 'upsilon' => 'υ', 'Uuml' => 'Ü', 'uuml' => 'ü', + 'weierp' => '℘', 'Xi' => 'Ξ', 'xi' => 'ξ', 'Yacute' => 'Ý', 'yacute' => 'ý', + 'yen' => '¥', 'Yuml' => 'Ÿ', 'yuml' => 'ÿ', 'Zeta' => 'Ζ', 'zeta' => 'ζ', + 'zwj' => '‍', 'zwnj' => '‌' + ); + + if (isset($table[$matches[1]])) + return $table[$matches[1]]; + else + return $destroy + ? '' + : $matches[0]; } -} -/** - * stripExt() - * - * @param mixed $filename - * @return string - */ -if (!function_exists('stripExt')){ - function stripExt($filename) + /** + * stripTags() + * + * @param mixed $start + * @param mixed $end + * @param mixed $string + * @return string + */ + if (! function_exists('stripTags')) { - if (strpos($filename, ".") === false) { - return ucwords($filename); - } else - return substr(ucwords($filename), 0, strrpos($filename, ".")); + function stripTags($start, $end, $string) + { + $string = stristr($string, $start); + $doend = stristr($string, $end); + return substr($string, strlen($start), -strlen($doend)); + } } -} -/** - * Очиста текста - * - * @param mixed $text - * @return string - */ -if (!function_exists('cleanOut')){ - function cleanOut($text) + /** + * stripExt() + * + * @param mixed $filename + * @return string + */ + if (! function_exists('stripExt')) { - $text = strtr($text, array( - '\r\n' => "", - '\r' => "", - '\n' => "")); - $text = html_entity_decode($text, ENT_QUOTES, 'UTF-8'); - $text = str_replace('
', '
', $text); - return stripslashes($text); + function stripExt($filename) + { + if (strpos($filename, ".") === false) + return ucwords($filename); + else + return substr(ucwords($filename), 0, strrpos($filename, ".")); + } } -} - - -/** - * Сравнение двух чисел - * - * @param mixed $float1 - * @param mixed $float2 - * @param string $operator - * @return bool - */ -if (!function_exists('compareFloatNumbers')){ - function compareFloatNumbers($float1, $float2, $operator='=') + + + /** + * Очиста текста + * + * @param mixed $text + * @return string + */ + if (! function_exists('cleanOut')) { - // Check numbers to 5 digits of precision - $epsilon = 0.00001; + function cleanOut($text) + { + $text = strtr($text, array( + '\r\n' => "", + '\r' => "", + '\n' => "")); + $text = html_entity_decode($text, ENT_QUOTES, 'UTF-8'); + $text = str_replace('
', '
', $text); + return stripslashes($text); + } + } - $float1 = (float)$float1; - $float2 = (float)$float2; - switch ($operator) + /** + * Сравнение двух чисел + * + * @param mixed $float1 + * @param mixed $float2 + * @param string $operator + * @return bool + */ + if (! function_exists('compareFloatNumbers')) + { + function compareFloatNumbers($float1, $float2, $operator='=') { - // equal - case "=": - case "eq": - if (abs($float1 - $float2) < $epsilon) { - return true; - } - break; - // less than - case "<": - case "lt": - if (abs($float1 - $float2) < $epsilon) { - return false; - } else { - if ($float1 < $float2) { + // Check numbers to 5 digits of precision + $epsilon = 0.00001; + + $float1 = (float)$float1; + $float2 = (float)$float2; + + switch ($operator) + { + // equal + case "=": + case "eq": + if (abs($float1 - $float2) < $epsilon) { return true; } - } - break; - // less than or equal - case "<=": - case "lte": - if (compareFloatNumbers($float1, $float2, '<') || compareFloatNumbers($float1, $float2, '=')) { - return true; - } - break; - // greater than - case ">": - case "gt": - if (abs($float1 - $float2) < $epsilon) { - return false; - } else { - if ($float1 > $float2) { + break; + // less than + case "<": + case "lt": + if (abs($float1 - $float2) < $epsilon) { + return false; + } else { + if ($float1 < $float2) { + return true; + } + } + break; + // less than or equal + case "<=": + case "lte": + if (compareFloatNumbers($float1, $float2, '<') || compareFloatNumbers($float1, $float2, '=')) { return true; } - } - break; - // greater than or equal - case ">=": - case "gte": - if (compareFloatNumbers($float1, $float2, '>') || compareFloatNumbers($float1, $float2, '=')) { - return true; - } - break; + break; + // greater than + case ">": + case "gt": + if (abs($float1 - $float2) < $epsilon) { + return false; + } else { + if ($float1 > $float2) { + return true; + } + } + break; + // greater than or equal + case ">=": + case "gte": + if (compareFloatNumbers($float1, $float2, '>') || compareFloatNumbers($float1, $float2, '=')) { + return true; + } + break; - case "<>": - case "!=": - case "ne": - if (abs($float1 - $float2) > $epsilon) { - return true; - } - break; - default: - die("Unknown operator '".$operator."' in compareFloatNumbers()"); - } + case "<>": + case "!=": + case "ne": + if (abs($float1 - $float2) > $epsilon) { + return true; + } + break; + default: + die("Unknown operator '".$operator."' in compareFloatNumbers()"); + } - return false; + return false; + } } -} - - -/** - * Поиск значения по массиву - * - * @param $array - * @param $key - * @param bool $value - * @return bool - */ -if (!function_exists('searchforValue')){ - function searchforValue($array, $key, $value) + + + /** + * Поиск значения по массиву + * + * @param $array + * @param $key + * @param bool $value + * @return bool + */ + if (!function_exists('searchforValue')) { - if($array) { - foreach ($array as $val) { - if ($val->$key == $value) { - return true; + function searchforValue($array, $key, $value) + { + if($array) + { + foreach ($array as $val) + { + if ($val->$key == $value) + return true; } } + + return false; } - return false; } -} - - -/** - * Поиск в массиве - * - * @param mixed $array - * @param mixed $val1 - * @param mixed $val2 - * @return array|int - */ -if (!function_exists('findInArray')){ - function findInArray($array, $val1, $val2) + + + /** + * Поиск в массиве + * + * @param mixed $array + * @param mixed $val1 + * @param mixed $val2 + * @return array|int + */ + if (! function_exists('findInArray')) { - if($array) { - $result = array(); - foreach ($array as $val) { - if ($val->$val1 == $val2) { - $result[] = $val; + function findInArray($array, $val1, $val2) + { + if ($array) + { + $result = array(); + + foreach ($array as $val) + { + if ($val->$val1 == $val2) + $result[] = $val; } + + return ($result) + ? $result + : 0; } - return ($result) ? $result : 0; + + return 0; } - return 0; } -} - - -/** - * Скачать файл - * - * @param $fileLocation - * @param $fileName - * @param int $maxSpeed - * @return bool - */ -if (!function_exists('downloadFile')){ - function downloadFile($fileLocation, $fileName, $maxSpeed = 5120) + + + /** + * Скачать файл + * + * @param $fileLocation + * @param $fileName + * @param int $maxSpeed + * @return bool + */ + if (! function_exists('downloadFile')) { - if (connection_status() != 0) - return (false); - - $extension = strtolower(substr($fileName, strrpos($fileName, '.') + 1)); - - /* List of File Types */ - $fileTypes['swf'] = 'application/x-shockwave-flash'; - $fileTypes['pdf'] = 'application/pdf'; - $fileTypes['exe'] = 'application/octet-stream'; - $fileTypes['zip'] = 'application/zip'; - $fileTypes['doc'] = 'application/msword'; - $fileTypes['xls'] = 'application/vnd.ms-excel'; - $fileTypes['ppt'] = 'application/vnd.ms-powerpoint'; - $fileTypes['gif'] = 'image/gif'; - $fileTypes['png'] = 'image/png'; - $fileTypes['jpeg'] = 'image/jpg'; - $fileTypes['jpg'] = 'image/jpg'; - $fileTypes['rar'] = 'application/rar'; - - $fileTypes['ra'] = 'audio/x-pn-realaudio'; - $fileTypes['ram'] = 'audio/x-pn-realaudio'; - $fileTypes['ogg'] = 'audio/x-pn-realaudio'; - - $fileTypes['wav'] = 'video/x-msvideo'; - $fileTypes['wmv'] = 'video/x-msvideo'; - $fileTypes['avi'] = 'video/x-msvideo'; - $fileTypes['asf'] = 'video/x-msvideo'; - $fileTypes['divx'] = 'video/x-msvideo'; - - $fileTypes['mp3'] = 'audio/mpeg'; - $fileTypes['mp4'] = 'audio/mpeg'; - $fileTypes['mpeg'] = 'video/mpeg'; - $fileTypes['mpg'] = 'video/mpeg'; - $fileTypes['mpe'] = 'video/mpeg'; - $fileTypes['mov'] = 'video/quicktime'; - $fileTypes['swf'] = 'video/quicktime'; - $fileTypes['3gp'] = 'video/quicktime'; - $fileTypes['m4a'] = 'video/quicktime'; - $fileTypes['aac'] = 'video/quicktime'; - $fileTypes['m3u'] = 'video/quicktime'; - - $contentType = $fileTypes[$extension]; - - - header("Cache-Control: public"); - header("Content-Transfer-Encoding: binary\n"); - header('Content-Type: $contentType'); - - $contentDisposition = 'attachment'; - - if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) { - $fileName = preg_replace('/\./', '%2e', $fileName, substr_count($fileName, '.') - 1); - header("Content-Disposition: $contentDisposition;filename=\"$fileName\""); - } else { - header("Content-Disposition: $contentDisposition;filename=\"$fileName\""); - } + function downloadFile($fileLocation, $fileName, $maxSpeed = 5120) + { + if (connection_status() != 0) + return (false); + + $extension = strtolower(substr($fileName, strrpos($fileName, '.') + 1)); + + /* List of File Types */ + $fileTypes['swf'] = 'application/x-shockwave-flash'; + $fileTypes['pdf'] = 'application/pdf'; + $fileTypes['exe'] = 'application/octet-stream'; + $fileTypes['zip'] = 'application/zip'; + $fileTypes['doc'] = 'application/msword'; + $fileTypes['xls'] = 'application/vnd.ms-excel'; + $fileTypes['ppt'] = 'application/vnd.ms-powerpoint'; + $fileTypes['gif'] = 'image/gif'; + $fileTypes['png'] = 'image/png'; + $fileTypes['jpeg'] = 'image/jpg'; + $fileTypes['jpg'] = 'image/jpg'; + $fileTypes['rar'] = 'application/rar'; + + $fileTypes['ra'] = 'audio/x-pn-realaudio'; + $fileTypes['ram'] = 'audio/x-pn-realaudio'; + $fileTypes['ogg'] = 'audio/x-pn-realaudio'; + + $fileTypes['wav'] = 'video/x-msvideo'; + $fileTypes['wmv'] = 'video/x-msvideo'; + $fileTypes['avi'] = 'video/x-msvideo'; + $fileTypes['asf'] = 'video/x-msvideo'; + $fileTypes['divx'] = 'video/x-msvideo'; + + $fileTypes['mp3'] = 'audio/mpeg'; + $fileTypes['mp4'] = 'audio/mpeg'; + $fileTypes['mpeg'] = 'video/mpeg'; + $fileTypes['mpg'] = 'video/mpeg'; + $fileTypes['mpe'] = 'video/mpeg'; + $fileTypes['mov'] = 'video/quicktime'; + $fileTypes['swf'] = 'video/quicktime'; + $fileTypes['3gp'] = 'video/quicktime'; + $fileTypes['m4a'] = 'video/quicktime'; + $fileTypes['aac'] = 'video/quicktime'; + $fileTypes['m3u'] = 'video/quicktime'; + + $contentType = $fileTypes[$extension]; + + header("Cache-Control: public"); + header("Content-Transfer-Encoding: binary\n"); + header('Content-Type: $contentType'); + + $contentDisposition = 'attachment'; + + if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) + { + $fileName = preg_replace('/\./', '%2e', $fileName, substr_count($fileName, '.') - 1); + header("Content-Disposition: $contentDisposition;filename=\"$fileName\""); + } + else + { + header("Content-Disposition: $contentDisposition;filename=\"$fileName\""); + } - header("Accept-Ranges: bytes"); - $range = 0; - $size = filesize($fileLocation); - - if (isset($_SERVER['HTTP_RANGE'])) { - list($a, $range) = explode("=", $_SERVER['HTTP_RANGE']); - str_replace($range, "-", $range); - $size2 = $size - 1; - $new_length = $size - $range; - header("HTTP/1.1 206 Partial Content"); - header("Content-Length: $new_length"); - header("Content-Range: bytes $range$size2/$size"); - } else { - $size2 = $size - 1; - header("Content-Range: bytes 0-$size2/$size"); - header("Content-Length: " . $size); - } + header("Accept-Ranges: bytes"); - if ($size == 0) { - die('Zero byte file! Aborting download'); - } + $range = 0; + $size = filesize($fileLocation); - $fp = fopen("$fileLocation", "rb"); + if (isset($_SERVER['HTTP_RANGE'])) + { + list($a, $range) = explode("=", $_SERVER['HTTP_RANGE']); + str_replace($range, "-", $range); + $size2 = $size - 1; + $new_length = $size - $range; + header("HTTP/1.1 206 Partial Content"); + header("Content-Length: $new_length"); + header("Content-Range: bytes $range$size2/$size"); + } + else + { + $size2 = $size - 1; + header("Content-Range: bytes 0-$size2/$size"); + header("Content-Length: " . $size); + } - fseek($fp, $range); + if ($size == 0) + die('Zero byte file! Aborting download'); - while (!feof($fp) and (connection_status() == 0)) { - set_time_limit(0); - print (fread($fp, 1024 * $maxSpeed)); - flush(); - ob_flush(); - sleep(1); - } - fclose($fp); + $fp = fopen("$fileLocation", "rb"); + + fseek($fp, $range); + + while (! feof($fp) and (connection_status() == 0)) + { + set_time_limit(0); + print (fread($fp, 1024 * $maxSpeed)); + flush(); + ob_flush(); + sleep(1); + } - exit; + fclose($fp); - return ((connection_status() == 0) and !connection_aborted()); + exit; + + //return ((connection_status() == 0) and !connection_aborted()); + } } -} /** @@ -783,15 +857,16 @@ if (!function_exists('downloadFile')){ * @param string $hexcolor Значение цвета в HEX. Example: #A9B7D3 * @return array|bool */ -if (!function_exists('color_h2d')){ - function color_h2d($hexcolor) { - if(mb_strlen($hexcolor) != 7 || mb_strpos($hexcolor, "#") === false) { - return false; - } + if (! function_exists('color_h2d')) + { + function color_h2d($hexcolor) + { + if(mb_strlen($hexcolor) != 7 || mb_strpos($hexcolor, "#") === false) + return false; - return array( "r" => hexdec(mb_substr($hexcolor, 1, 2)), - "g" => hexdec(mb_substr($hexcolor, 3, 2)), - "b" => hexdec(mb_substr($hexcolor, 5, 2))); + return array( "r" => hexdec(mb_substr($hexcolor, 1, 2)), + "g" => hexdec(mb_substr($hexcolor, 3, 2)), + "b" => hexdec(mb_substr($hexcolor, 5, 2))); + } } -} ?> \ No newline at end of file diff --git a/functions/func.login.php b/functions/func.login.php index 6dddd80..914bc5e 100644 --- a/functions/func.login.php +++ b/functions/func.login.php @@ -89,7 +89,7 @@ last_visit = '" . $time . "', password = '" . $hash . "', salt = '" . $salt . "', - user_ip = '" . $u_ip . "' + user_ip = '" . (int)$u_ip . "' WHERE Id = '" . $row->Id . "' "); @@ -129,7 +129,7 @@ " . PREFIX . "_users_session (`user_id`,`hash`,`ip`,`agent`,`last_activ`) values - ('" . $row->Id . "','" . addslashes($auth) . "','" . $u_ip . "','" . addslashes($_SERVER['HTTP_USER_AGENT']) . "','" . time() . "') + ('" . $row->Id . "','" . addslashes($auth) . "','" . (int)$u_ip . "','" . addslashes($_SERVER['HTTP_USER_AGENT']) . "','" . time() . "') "; $AVE_DB->Query($sql); @@ -293,7 +293,7 @@ " . PREFIX . "_users_session SET last_activ = '" . time() . "', - ip = '" . ip2long($_SERVER['REMOTE_ADDR']) . "' + ip = '" . (int)ip2long($_SERVER['REMOTE_ADDR']) . "' WHERE Id = '" . $row->Id . "' "); diff --git a/functions/func.mail.php b/functions/func.mail.php index 05ecec6..b1ddd09 100644 --- a/functions/func.mail.php +++ b/functions/func.mail.php @@ -1,250 +1,252 @@
' . nl2br(get_settings('mail_signature')); - } - else + // Добавляем подпись, если просили + if ($signature) { - $signature = "\r\n\r\n" . get_settings('mail_signature'); + if ($type == 'text/html') + { + $signature = '

' . nl2br(get_settings('mail_signature')); + } + else + { + $signature = "\r\n\r\n" . get_settings('mail_signature'); + } } - } - else $signature = ''; + else $signature = ''; - // Составляем тело письма - $body = stripslashes($body) . $signature; + // Составляем тело письма + $body = stripslashes($body) . $signature; - if ($type == 'text/html') - { - $body = str_replace(array("\t","\r","\n"),'',$body); - $body = str_replace(array(' ','> <'),array(' ','><'),$body); - } + if ($type == 'text/html') + { + $body = str_replace(array("\t","\r","\n"),'',$body); + $body = str_replace(array(' ','> <'),array(' ','><'),$body); + } - // Формируем письмо - $message = Swift_Message::newInstance($subject) - -> setFrom(array($from_email => $from_name)) - -> setTo($to) - -> setContentType($type) - -> setBody($body) - -> setMaxLineLength((int)get_settings('mail_word_wrap')); + // Формируем письмо + $message = Swift_Message::newInstance($subject) + -> setFrom(array($from_email => $from_name)) + -> setTo($to) + -> setContentType($type) + -> setBody($body) + -> setMaxLineLength((int)get_settings('mail_word_wrap')); - // Прикрепляем вложения - if ($attach) - { - foreach ($attach as $attach_file) + // Прикрепляем вложения + if ($attach) { - $message -> attach(Swift_Attachment::fromPath(trim($attach_file))); + foreach ($attach as $attach_file) + { + $message -> attach(Swift_Attachment::fromPath(trim($attach_file))); + } } - } - // Выбираем метод отправки и формируем транспорт - switch (get_settings('mail_type')) - { - default: - case 'mail': - $transport = Swift_MailTransport::newInstance(); - break; - - case 'smtp': - $transport = Swift_SmtpTransport::newInstance(stripslashes(get_settings('mail_host')), (int)get_settings('mail_port')); - - // Добавляем шифрование - $smtp_encrypt = get_settings('mail_smtp_encrypt'); - if($smtp_encrypt) - $transport - ->setEncryption(strtolower(stripslashes($smtp_encrypt))); - - // Имя пользователя/пароль - $smtp_user = get_settings('mail_smtp_login'); - $smtp_pass = get_settings('mail_smtp_pass'); - if($smtp_user) - $transport - ->setUsername(stripslashes($smtp_user)) - ->setPassword(stripslashes($smtp_pass)); - break; - - case 'sendmail': - $transport = Swift_SendmailTransport::newInstance(get_settings('mail_sendmail_path')); - break; - } + // Выбираем метод отправки и формируем транспорт + switch (get_settings('mail_type')) + { + default: + case 'mail': + $transport = Swift_MailTransport::newInstance(); + break; + + case 'smtp': + $transport = Swift_SmtpTransport::newInstance(stripslashes(get_settings('mail_host')), (int)get_settings('mail_port')); + + // Добавляем шифрование + $smtp_encrypt = get_settings('mail_smtp_encrypt'); + if($smtp_encrypt) + $transport + ->setEncryption(strtolower(stripslashes($smtp_encrypt))); + + // Имя пользователя/пароль + $smtp_user = get_settings('mail_smtp_login'); + $smtp_pass = get_settings('mail_smtp_pass'); + if($smtp_user) + $transport + ->setUsername(stripslashes($smtp_user)) + ->setPassword(stripslashes($smtp_pass)); + break; + + case 'sendmail': + $transport = Swift_SendmailTransport::newInstance(get_settings('mail_sendmail_path')); + break; + } - // Сохраняем вложения в ATTACH_DIR, если просили - if ($attach && $saveattach) - { - $attach_dir = BASE_DIR . '/tmp/' . ATTACH_DIR . '/'; - foreach ($attach as $file_path) + // Сохраняем вложения в ATTACH_DIR, если просили + if ($attach && $saveattach) { - if ($file_path && file_exists($file_path)) + $attach_dir = BASE_DIR . '/tmp/' . ATTACH_DIR . '/'; + foreach ($attach as $file_path) { - $file_name = basename($file_path); - $file_name = str_replace(' ','',mb_strtolower(trim($file_name))); - if (file_exists($attach_dir . $file_name)) - { - $file_name = rand(1000, 9999) . '_' . $file_name; - } - $file_path_new = $attach_dir . $file_name; - if (!@move_uploaded_file($file_path,$file_path_new)) + if ($file_path && file_exists($file_path)) { - copy($file_path,$file_path_new); + $file_name = basename($file_path); + $file_name = str_replace(' ','',mb_strtolower(trim($file_name))); + if (file_exists($attach_dir . $file_name)) + { + $file_name = rand(1000, 9999) . '_' . $file_name; + } + $file_path_new = $attach_dir . $file_name; + if (!@move_uploaded_file($file_path,$file_path_new)) + { + copy($file_path,$file_path_new); + } } } } - } - // Отправляем письмо - /** @var $transport TYPE_NAME */ - $mailer = Swift_Mailer::newInstance($transport); + // Отправляем письмо + /** @var $transport TYPE_NAME */ + $mailer = Swift_Mailer::newInstance($transport); - if (!@$mailer -> send($message, $failures)) - { - reportLog('Не удалось отправить письма следующим адресатам: ' . implode(',',$failures)); - return $failures; - } + if (!@$mailer -> send($message, $failures)) + { + reportLog('Не удалось отправить письма следующим адресатам: ' . implode(',',$failures)); + return $failures; + } + } } -} -if ( ! function_exists('safe_mailto')) -{ - function safe_mailto($email, $title = '', $attributes = '') + if ( ! function_exists('safe_mailto')) { - $title = (string) $title; - - if ($title == "") + function safe_mailto($email, $title = '', $attributes = '') { - $title = $email; - } + $title = (string) $title; - for ($i = 0; $i < 16; $i++) - { - $x[] = substr(' $val) + if (is_array($attributes)) { - $x[] = ' '.$key.'="'; - for ($i = 0; $i < strlen($val); $i++) + foreach ($attributes as $key => $val) { - $x[] = "|".ord(substr($val, $i, 1)); + $x[] = ' '.$key.'="'; + for ($i = 0; $i < strlen($val); $i++) + { + $x[] = "|".ord(substr($val, $i, 1)); + } + $x[] = '"'; } - $x[] = '"'; } - } - else - { - for ($i = 0; $i < strlen($attributes); $i++) + else { - $x[] = substr($attributes, $i, 1); + for ($i = 0; $i < strlen($attributes); $i++) + { + $x[] = substr($attributes, $i, 1); + } } } - } - $x[] = '>'; + $x[] = '>'; - $temp = array(); + $temp = array(); - for ($i = 0; $i < strlen($title); $i++) - { - $ordinal = ord($title[$i]); - - if ($ordinal < 128) + for ($i = 0; $i < strlen($title); $i++) { - $x[] = "|".$ordinal; - } - else - { - if (count($temp) == 0) + $ordinal = ord($title[$i]); + + if ($ordinal < 128) { - $count = ($ordinal < 224) ? 2 : 3; + $x[] = "|".$ordinal; } - - $temp[] = $ordinal; - if (count($temp) == $count) + else { - $number = ($count == 3) ? (($temp['0'] % 16) * 4096) + (($temp['1'] % 64) * 64) + ($temp['2'] % 64) : (($temp['0'] % 32) * 64) + ($temp['1'] % 64); - $x[] = "|".$number; - $count = 1; - $temp = array(); + if (count($temp) == 0) + { + $count = ($ordinal < 224) ? 2 : 3; + } + + $temp[] = $ordinal; + if (count($temp) == $count) + { + $number = ($count == 3) ? (($temp['0'] % 16) * 4096) + (($temp['1'] % 64) * 64) + ($temp['2'] % 64) : (($temp['0'] % 32) * 64) + ($temp['1'] % 64); + $x[] = "|".$number; + $count = 1; + $temp = array(); + } } } - } - - $x[] = '<'; $x[] = '/'; $x[] = 'a'; $x[] = '>'; - $x = array_reverse($x); - ob_start(); - - ?>'; + + $x = array_reverse($x); + ob_start(); + + ?> \ No newline at end of file diff --git a/functions/func.modulglobals.php b/functions/func.modulglobals.php index eb2b1db..7e57841 100644 --- a/functions/func.modulglobals.php +++ b/functions/func.modulglobals.php @@ -1,71 +1,72 @@ - * tpl_dir путь к папке с шаблонами модуля - * theme_folder имя папки с файлами дизайна - * config_vars массив с языковыми переменными модуля - * - * Формирует и передаёт в шаблонизатор: - *
- *      $tpl_dir     путь к папке с шаблонами модуля
- *      $mod_dir     имя папки с модулями
- *      $config_vars массив с языковыми переменными модуля
- * 
- * Регистрирует в шаблонизаторе функцию in_array - * - * @param string $modulepath имя папки модуля - * @param string $lang_section секция языкового файла - */ -function set_module_globals($modulepath, $lang_section = false) -{ - global $mod, $AVE_Template; + /** + * Функция формирует глобальный массив $mod с элементами: + *
+	 *      tpl_dir      путь к папке с шаблонами модуля
+	 *      theme_folder имя папки с файлами дизайна
+	 *      config_vars  массив с языковыми переменными модуля
+	 * 
+ * Формирует и передаёт в шаблонизатор: + *
+	 *      $tpl_dir     путь к папке с шаблонами модуля
+	 *      $mod_dir     имя папки с модулями
+	 *      $config_vars массив с языковыми переменными модуля
+	 * 
+ * Регистрирует в шаблонизаторе функцию in_array + * + * @param string $modulepath имя папки модуля + * @param string $lang_section секция языкового файла + */ + function set_module_globals($modulepath, $lang_section = false) + { + global $mod, $AVE_Template; - $tpl_dir = BASE_DIR . '/modules/' . $modulepath . '/templates/'; - $lang_file = BASE_DIR . '/modules/' . $modulepath . '/lang/' . $_SESSION['user_language'] . '.txt'; + $tpl_dir = BASE_DIR . '/modules/' . $modulepath . '/templates/'; + $lang_file = BASE_DIR . '/modules/' . $modulepath . '/lang/' . $_SESSION['user_language'] . '.txt'; - if (!file_exists($lang_file)) - { - $lang_file = BASE_DIR . '/modules/' . $modulepath . '/lang/ru.txt'; - } + if (!file_exists($lang_file)) + { + $lang_file = BASE_DIR . '/modules/' . $modulepath . '/lang/ru.txt'; + } - if (!file_exists($lang_file)) - { - display_notice('Ошибка! Отсутствует языковой файл. Пожалуйста, проверьте язык, установленный по умолчанию, в файле '.ABS_PATH.'inc/config.php'); - exit; - } + if (!file_exists($lang_file)) + { + display_notice('Ошибка! Отсутствует языковой файл. Пожалуйста, проверьте язык, установленный по умолчанию, в файле '.ABS_PATH.'inc/config.php'); + exit; + } - if ($lang_section === false) - { - $AVE_Template->config_load($lang_file); - } - else - { - $AVE_Template->config_load($lang_file, $lang_section); - } - $config_vars = $AVE_Template->get_config_vars(); + if ($lang_section === false) + { + $AVE_Template->config_load($lang_file); + } + else + { + $AVE_Template->config_load($lang_file, $lang_section); + } - $AVE_Template->assign('tpl_dir', $tpl_dir); - $AVE_Template->assign('mod_dir', BASE_DIR . '/modules'); - $AVE_Template->assign('config_vars', $config_vars); + $config_vars = $AVE_Template->get_config_vars(); - $mod['tpl_dir'] = $tpl_dir; - $mod['theme_folder'] = defined('THEME_FOLDER') ? THEME_FOLDER : DEFAULT_THEME_FOLDER; - $mod['config_vars'] = $config_vars; + $AVE_Template->assign('tpl_dir', $tpl_dir); + $AVE_Template->assign('mod_dir', BASE_DIR . '/modules'); + $AVE_Template->assign('config_vars', $config_vars); - $AVE_Template->register_function('in_array', 'in_array'); -} + $mod['tpl_dir'] = $tpl_dir; + $mod['theme_folder'] = defined('THEME_FOLDER') ? THEME_FOLDER : DEFAULT_THEME_FOLDER; + $mod['config_vars'] = $config_vars; + + $AVE_Template->register_function('in_array', 'in_array'); + } ?> \ No newline at end of file diff --git a/functions/func.navigation.php b/functions/func.navigation.php index b954cb5..364e493 100644 --- a/functions/func.navigation.php +++ b/functions/func.navigation.php @@ -75,7 +75,7 @@ if (! $navi_menu) { echo 'Menu ', $navi_id, ' not found!'; - return; + return ''; } // выставляем гостевую группу по дефолту diff --git a/functions/func.pagination.php b/functions/func.pagination.php index 8f096e4..5ad305b 100644 --- a/functions/func.pagination.php +++ b/functions/func.pagination.php @@ -1,141 +1,141 @@ 5 && $curent_page > 3) + /** + * AVE.cms + * + * @package AVE.cms + * @version 3.x + * @filesource + * @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru + * + * @license GPL v.2 + */ + + /** + * Текущая страница + * + * @param string $type тип постраничной навигации, + * допустимые значения: page, apage, artpage + * @return int номер текущей страницы + */ + function get_current_page($type = 'page') { - $first = str_replace('data-pagination="{s}"', 'data-pagination="1"', $template_label); + if (!in_array($type, array('page', 'apage', 'artpage'))) return 1; - $nav .= sprintf($link_box, str_replace(array('{s}', '{t}'), $start_label, str_replace(array('&'. $type .'={s}', '&' . $type .'={s}', '/' . $type . '-{s}'), '', $first))); - if ($separator_label != '') - $nav .= sprintf($separator_box, $separator_label); - } + $page = (isset($_REQUEST[$type]) && is_numeric($_REQUEST[$type])) ? $_REQUEST[$type] : 1; - // Предыдущая - if ($curent_page > 1) - { - if ($curent_page - 1 == 1) - $nav .= sprintf($link_box, str_replace(array('{s}', '{t}'), $prev_label, str_replace(array('&'. $type .'={s}', '&' . $type .'={s}', '/' . $type . '-{s}'), '', $template_label))); - else - $nav .= sprintf($link_box, str_replace('{t}', $prev_label, str_replace('{s}', ($curent_page - 1), $template_label))); + return (int)$page; } - foreach($pages as $val) + /** + * Постраничная навигация для запросов и модулей + * + * @param int $total_pages количество страниц в документе + * @param string $type тип постраничной навигации, + * допустимые значения: page, apage, artpage + * @param string $template_label шаблон метки навигации + * @param string $navi_box контейнер постраничной навигации %s + * @return string HTML-код постраничной навигации + */ + + function get_pagination($total_pages, $type, $template_label, $navi_box = '') { - if ($val >= 1 && $val <= $total_pages) + $nav = ''; + + if (!in_array($type, array('page', 'apage', 'artpage'))) $type = 'page'; + + $curent_page = get_current_page($type); + + if ($curent_page == 1) $pages = array ($curent_page, $curent_page+1, $curent_page+2, $curent_page+3, $curent_page+4); + elseif ($curent_page == 2) $pages = array ($curent_page-1, $curent_page, $curent_page+1, $curent_page+2, $curent_page+3); + elseif ($curent_page+1 == $total_pages) $pages = array ($curent_page-3, $curent_page-2, $curent_page-1, $curent_page, $curent_page+1); + elseif ($curent_page == $total_pages) $pages = array ($curent_page-4, $curent_page-3, $curent_page-2, $curent_page-1, $curent_page); + else $pages = array ($curent_page-2, $curent_page-1, $curent_page, $curent_page+1, $curent_page+2); + + $pages = array_unique($pages); + + $link_box = trim(get_settings('link_box')); // Контенйнер для ссылок %s + $separator_box = trim(get_settings('separator_box')); // Контенйнер для метки о наличии страниц кроме видимых %s + $total_box = trim(get_settings('total_box')); // Контенйнер для Страница ХХХ из ХХХ %s + $active_box = trim(get_settings('active_box')); // Контенйнер для активного элемента %s + $total_label = trim(get_settings('total_label')); // Текст перед номерами страниц %d + $start_label = trim(get_settings('start_label')); // Текст ссылки "Первая" + $end_label = trim(get_settings('end_label')); // Текст ссылки "Последняя" + $separator_label = trim(get_settings('separator_label')); // Текст метки о наличии страниц кроме видимых + $next_label = trim(get_settings('next_label')); // Текст ссылки "Следующая" + $prev_label = trim(get_settings('prev_label')); // Текст ссылки "Предыдущая" + + // Первая + if ($total_pages > 5 && $curent_page > 3) { - if ($curent_page == $val) - { - // Текущий номер страницы (активная страница) - $nav .= sprintf($link_box, sprintf($active_box, str_replace(array('{s}', '{t}'), $val, $curent_page))); - } + $first = str_replace('data-pagination="{s}"', 'data-pagination="1"', $template_label); + + $nav .= sprintf($link_box, str_replace(array('{s}', '{t}'), $start_label, str_replace(array('&'. $type .'={s}', '&' . $type .'={s}', '/' . $type . '-{s}'), '', $first))); + if ($separator_label != '') + $nav .= sprintf($separator_box, $separator_label); + } + + // Предыдущая + if ($curent_page > 1) + { + if ($curent_page - 1 == 1) + $nav .= sprintf($link_box, str_replace(array('{s}', '{t}'), $prev_label, str_replace(array('&'. $type .'={s}', '&' . $type .'={s}', '/' . $type . '-{s}'), '', $template_label))); else + $nav .= sprintf($link_box, str_replace('{t}', $prev_label, str_replace('{s}', ($curent_page - 1), $template_label))); + } + + foreach($pages as $val) + { + if ($val >= 1 && $val <= $total_pages) { - if ($val == 1) + if ($curent_page == $val) { - // Страница номер 1 - $nav .= sprintf($link_box, str_replace(array('{s}', '{t}'), $val, str_replace(array('&'.$type.'={s}','&'.$type.'={s}','/'.$type.'-{s}'), '', $template_label))); + // Текущий номер страницы (активная страница) + $nav .= sprintf($link_box, sprintf($active_box, str_replace(array('{s}', '{t}'), $val, $curent_page))); } else { - // Остальные неактивные номера страниц - $nav .= sprintf($link_box, str_replace(array('{s}', '{t}'), $val, $template_label)); + if ($val == 1) + { + // Страница номер 1 + $nav .= sprintf($link_box, str_replace(array('{s}', '{t}'), $val, str_replace(array('&'.$type.'={s}','&'.$type.'={s}','/'.$type.'-{s}'), '', $template_label))); + } + else + { + // Остальные неактивные номера страниц + $nav .= sprintf($link_box, str_replace(array('{s}', '{t}'), $val, $template_label)); + } } } } - } - // Следующая - if ($curent_page < $total_pages) - { - $nav .= sprintf($link_box, str_replace('{t}', $next_label, str_replace('{s}', ($curent_page + 1), $template_label))); - } + // Следующая + if ($curent_page < $total_pages) + { + $nav .= sprintf($link_box, str_replace('{t}', $next_label, str_replace('{s}', ($curent_page + 1), $template_label))); + } - // Последняя - if ($total_pages > 5 && ($curent_page < $total_pages-2)) - { - if ($separator_label != '') - $nav .= sprintf($separator_box, $separator_label); + // Последняя + if ($total_pages > 5 && ($curent_page < $total_pages-2)) + { + if ($separator_label != '') + $nav .= sprintf($separator_box, $separator_label); - $nav .= sprintf($link_box, str_replace('{t}', $end_label, str_replace('{s}', $total_pages, $template_label))); - } + $nav .= sprintf($link_box, str_replace('{t}', $end_label, str_replace('{s}', $total_pages, $template_label))); + } - // Страница ХХХ из ХХХ - if ($nav != '') - { - if ($total_label != '') - $nav = sprintf($total_box, sprintf($total_label, $curent_page, $total_pages)) . $nav; + // Страница ХХХ из ХХХ + if ($nav != '') + { + if ($total_label != '') + $nav = sprintf($total_box, sprintf($total_label, $curent_page, $total_pages)) . $nav; - // Оборачиваем в общий контейнер - if ($navi_box != '') - $nav = sprintf($navi_box, $nav); - } + // Оборачиваем в общий контейнер + if ($navi_box != '') + $nav = sprintf($navi_box, $nav); + } - return $nav; -} + return $nav; + } ?> \ No newline at end of file diff --git a/functions/func.parserequest.php b/functions/func.parserequest.php index c209ed3..f217130 100755 --- a/functions/func.parserequest.php +++ b/functions/func.parserequest.php @@ -11,6 +11,14 @@ * @license GPL v.2 */ + + /** + * Достаем настройки запроса + * + * @param $id + * + * @return string + */ function request_get_settings($id) { global $AVE_DB; @@ -40,8 +48,10 @@ * Обработка условий запроса. * Возвращает строку условий в SQL-формате * - * @param int $id идентификатор запроса - * @return string + * @param int $id идентификатор запроса + * @param bool $update_db + * + * @return array */ function request_get_condition_sql_string($id, $update_db = false) { @@ -101,7 +111,7 @@ // значение для условия $val = trim($row_ak->condition_value); // если это поле используется для выпадающего списка или пустое значение для условия, пропускаем - if (isset($_POST['req_' . $id]) && isset($_POST['req_' . $id][$fid]) || $val==='') + if (isset($_POST['req_' . $id]) && isset($_POST['req_' . $id][$fid]) || $val === '') continue; // И / ИЛИ if (! isset($join) && $row_ak->condition_join) @@ -122,7 +132,9 @@ ")->GetCell(); } - $fv = $numeric[$fid] ? "t$fid.field_number_value" : "UPPER(t$fid.field_value)"; + $fv = $numeric[$fid] + ? "t$fid.field_number_value" + : "UPPER(t$fid.field_value)"; // подставляем название таблицы в свободные условия $val = addcslashes(str_ireplace(array('[field]','[numeric_field]'),$fv,$val),"'"); @@ -130,7 +142,7 @@ // формируем выбор таблицы // первый раз евалом проходим значение и запоминаем это в переменной $v[$i] // как только таблица выбрана, фиксируем это в $t[$fid], чтобы не выбирать по несколько раз одни и те же таблицы - $from[] = "$val'' && !isset(\$t[$fid])) {echo \"%%PREFIX%%_document_fields AS t$fid,\"; \$t[$fid]=1;}?>"; + $from[] = "$val'' && !isset(\$t[$fid])) {echo \"%%PREFIX%%_document_fields AS t$fid,\"; \$t[$fid]=1;} ?>"; // обрабатываем условия switch ($type) @@ -161,8 +173,8 @@ case 'IN=': $where[] = "'' && \$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]{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[] = "'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv=ANY(\$v[$i]))) $join\" : ''?>"; break; - case 'FRE': $where[] = "'' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND (\$v[$i]))) $join\" : ''?>"; break; + case 'ANY': $where[] = " '' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND $fv=ANY(\$v[$i]))) $join\" : ''; ?>"; break; + case 'FRE': $where[] = " '' ? \"(t$fid.document_id = a.id AND (t$fid.rubric_field_id = '$fid' AND (\$v[$i]))) $join\" : ''; ?>"; break; } $i++; @@ -177,14 +189,14 @@ $from = (isset($from_dd) ? array_merge($from, $from_dd) : $from); $from = implode(' ', $from); $where_dd = (isset($where_dd) ? ' AND ' : '') . implode(' AND ', $where_dd); - $where = implode(' ', $where) . " "; - $retval = array('from'=>$from,'where'=> $where.$where_dd); + $where = implode(' ', $where) . " "; + $retval = array('from' => $from, 'where' => $where . $where_dd); } else { $from = implode(' ', $from); - $where = implode(' ', $where) . " "; - $retval = array('from'=>$from,'where'=> $where); + $where = implode(' ', $where) . " "; + $retval = array('from' => $from, 'where' => $where); } } @@ -207,14 +219,19 @@ } - /* - * Функция принимает строку, и возвращает - * адрес первого изображения, которую найдет - */ - + /** + * Функция принимает строку, и возвращает + * адрес первого изображения, которую найдет + * + * @param $data + * + * @return string + */ function getImgSrc($data) { - preg_match_all("/()/u", $data, $images); + $_req_exp = '/()/u'; + + preg_match_all($_req_exp, $data, $images); $host = $images[2][0]; @@ -232,23 +249,22 @@ preg_match('/(.+)' . THUMBNAIL_DIR . '\/(.+)-.\d+x\d+(\..+)/u', $host, $matches); if (isset($matches[1])) - { return $matches[1] . $matches[2] . $matches[3]; - } else - { - return $host; - } + return $host; } } + /** * Функция обработки тэгов полей с использованием шаблонов * в соответствии с типом поля * - * @param int $rubric_id идентификатор рубрики - * @param int $document_id идентификатор документа - * @param int $maxlength максимальное количество символов обрабатываемого поля + * @param $field_id + * @param int $document_id идентификатор документа + * @param string $maxlength максимальное количество символов обрабатываемого поля + * @param int $rubric_id идентификатор рубрики + * * @return string */ function request_get_document_field($field_id, $document_id, $maxlength = '', $rubric_id = 0) @@ -373,8 +389,8 @@ { $tparams_id = $row->Id . md5($tparams); // Создаем уникальный id для каждого набора параметров $params_of_teaser[$tparams_id] = array(); // Для отмены лишних ворнингов - $tparams = trim($tparams,'[]:'); // Удаляем: слева ':[', справа ']' - $params_of_teaser[$tparams_id] = explode('|',$tparams); // Заносим параметры в массив уникального id + $tparams = trim($tparams,'[]:'); // Удаляем: слева ':[', справа ']' + $params_of_teaser[$tparams_id] = explode('|',$tparams); // Заносим параметры в массив уникального id } $sql = " @@ -440,41 +456,36 @@ $item = preg_replace_callback('/\[tag:sysblock:([A-Za-z0-9-_]{1,20}+)\]/', 'parse_sysblock', $item); // Парсим элементы полей - $item = preg_replace_callback( - '/\[tag:rfld:([a-zA-Z0-9-_]+)\]\[([0-9]+)]\[([0-9]+)]/', - create_function( - '$m', - 'return get_field_element($m[1], $m[2], $m[3], ' . $row->Id . ');' - ), - $item - ); + $item = preg_replace_callback('/\[tag:rfld:([a-zA-Z0-9-_]+)\]\[([0-9]+)]\[([0-9]+)]/', + function ($m) use ($row) + { + return get_field_element($m[1], $m[2], $m[3], (int)$row->Id); + }, + $item); // Парсим теги полей - $item = preg_replace_callback( - '/\[tag:rfld:([a-zA-Z0-9-_]+)]\[(more|esc|img|strip|[0-9-]+)]/', - create_function( - '$m', - 'return request_get_document_field($m[1], ' . $row->Id . ', $m[2], ' . (int)$row->rubric_id . ');' - ), - $item - ); + $item = preg_replace_callback('/\[tag:rfld:([a-zA-Z0-9-_]+)]\[(more|esc|img|strip|[0-9-]+)]/', + function ($m) use ($row) + { + return request_get_document_field($m[1], (int)$row->Id, $m[2], (int)$row->rubric_id); + }, + $item); // Повторно парсим теги полей - $item = preg_replace_callback( - '/\[tag:rfld:([a-zA-Z0-9-_]+)]\[(more|esc|img|strip|[0-9-]+)]/', - create_function( - '$m', - 'return request_get_document_field($m[1], ' . $row->Id . ', $m[2], ' . (int)$row->rubric_id . ');' - ), - $item - ); + $item = preg_replace_callback('/\[tag:rfld:([a-zA-Z0-9-_]+)]\[(more|esc|img|strip|[0-9-]+)]/', + function ($m) use ($row) + { + return request_get_document_field($m[1], (int)$row->Id, $m[2], (int)$row->rubric_id); + }, + $item); + // Возвращаем поле документа из БД (document_***) $item = preg_replace_callback('/\[tag:doc:([a-zA-Z0-9-_]+)\]/u', - function ($match) use ($row) + function ($m) use ($row) { - return isset($row->{$match[1]}) - ? $row->{$match[1]} + return isset($row->{$m[1]}) + ? $row->{$m[1]} : null; }, $item @@ -483,11 +494,11 @@ // Если пришел вызов на активацию языковых файлов $item = preg_replace_callback( '/\[tag:langfile:([a-zA-Z0-9-_]+)\]/u', - function ($match) + function ($m) { global $AVE_Template; - return $AVE_Template->get_config_vars($match[1]); + return $AVE_Template->get_config_vars($m[1]); }, $item ); @@ -502,14 +513,12 @@ . '/', $item); // Watermarks - $item = preg_replace_callback( - '/\[tag:watermark:(.+?):([a-zA-Z]+):([0-9]+)\]/', - create_function( - '$m', - 'watermarks($m[1], $m[2], $m[3]);' - ), - $item - ); + $item = preg_replace_callback('/\[tag:watermark:(.+?):([a-zA-Z]+):([0-9]+)\]/', + function ($m) + { + watermarks($m[1], $m[2], $m[3]); + }, + $item); // Удаляем ошибочные теги полей документа и языковые, в шаблоне рубрики $item = preg_replace('/\[tag:doc:\d*\]/', '', $item); @@ -522,14 +531,12 @@ if ($tparams != '') { // Заменяем tparam в тизере - $item = preg_replace_callback( - '/\[tparam:([0-9]+)\]/', - create_function( - '$m', - 'return f_params_of_teaser('.$tparams_id.', $m[1]);' - ), - $item - ); + $item = preg_replace_callback('/\[tparam:([0-9]+)\]/', + function ($m) use ($tparams_id) + { + return f_params_of_teaser($tparams_id, $m[1]); + }, + $item); } else { @@ -560,28 +567,25 @@ $item = str_replace('[tag:docdate]', pretty_date(strftime(DATE_FORMAT, $row->document_published)), $item); $item = str_replace('[tag:doctime]', pretty_date(strftime(TIME_FORMAT, $row->document_published)), $item); $item = str_replace('[tag:humandate]', human_date($row->document_published), $item); - $item = preg_replace_callback( - '/\[tag:date:([a-zA-Z0-9-. \/]+)\]/', - create_function('$m','return translate_date(date($m[1], '.$row->document_published.')); - '), - $item - ); + + $item = preg_replace_callback('/\[tag:date:([a-zA-Z0-9-. \/]+)\]/', + function ($m) use ($row) + { + return translate_date(date($m[1], $row->document_published)); + }, + $item); if (preg_match('/\[tag:docauthor]/u', $item)) - { $item = str_replace('[tag:docauthor]', get_username_by_id($row->document_author_id), $item); - } $item = str_replace('[tag:docauthorid]', $row->document_author_id, $item); - $item = preg_replace_callback( - '/\[tag:docauthoravatar:(\d+)\]/', - create_function( - '$m', - 'return getAvatar('.intval($row->document_author_id).', $m[1]);' - ), - $item - ); + $item = preg_replace_callback('/\[tag:docauthoravatar:(\d+)\]/', + function ($m) use ($row) + { + return getAvatar(intval($row->document_author_id), $m[1]); + }, + $item); if (isset($use_cache) && $use_cache == 1) { @@ -610,7 +614,9 @@ * Возвращает список документов удовлетворяющих параметрам запроса * оформленный с использованием шаблона * - * @param int $id идентификатор запроса + * @param int $id идентификатор запроса + * @param array $params + * * @return string */ function request_parse($id, $params = array()) @@ -677,7 +683,7 @@ $sort = strtolower($sort); // Добавляем условие в SQL - $request_join[$fid] = ""; + $request_join[$fid] = ""; // Если в сортировке указано ASC иначе DESC $asc_desc = strpos(strtolower($sort),'asc') !== false @@ -695,6 +701,7 @@ ? 'ASC' : 'DESC'; + // ToDo - ХЗ что это $request_order[$param] = "$fid " . $asc_desc; } } @@ -705,7 +712,7 @@ $fid = (int)$request->request_order_by_nat; // Добавляем с учётом переменной $t из условий, чтобы не выбирать те же таблиы заново - это оптимизирует время - $request_join[$fid] = ""; + $request_join[$fid] = ""; $request_order['field-' . $fid] = "t$fid.field_value " . $request->request_asc_desc; $request_order_fields[] = $fid; @@ -899,8 +906,6 @@ if (isset($params['RETURN_SQL']) && $params['RETURN_SQL'] == 1) return $AVE_DB->GetFoundRows(); - $num_items = 0; - // Если есть вывод пагинации, то выполняем запрос на получение кол-ва элементов if ($request->request_show_pagination == 1 || (isset($params['SHOW']) && $params['SHOW'] == 1)) $num_items = $AVE_DB->NumAllRows($sql_request, (int)$request->request_cache_lifetime, 'rqs_' . $id); @@ -1043,8 +1048,6 @@ $request_changed = $request->request_changed; $request_changed_elements = $request->request_changed_elements; - $item = ''; - foreach ($rows as $row) { $x++; @@ -1053,7 +1056,7 @@ $req_item_num = $item_num; $item = showrequestelement($row, $request->request_template_item); $item = '<'.'?php $item_num='.var_export($item_num,1).'; $last_item='.var_export($last_item,1).'?'.'>'.$item; - $item = 'Id . ';?>' . $item; + $item = '<'.'?php $req_item_id = ' . $row->Id . '; ?>' . $item; $item = str_replace('[tag:if_first]', '<'.'?php if(isset($item_num) && $item_num===1) { ?'.'>', $item); $item = str_replace('[tag:if_not_first]', '<'.'?php if(isset($item_num) && $item_num!==1) { ?'.'>', $item); $item = str_replace('[tag:if_last]', '<'.'?php if(isset($last_item) && $last_item) { ?'.'>', $item); @@ -1124,7 +1127,7 @@ //-- Возвращаем параметр документа из БД $main_template = preg_replace_callback('/\[tag:doc:([a-zA-Z0-9-_]+)\]/u', - function ($match) + function ($match) use ($row) { return isset($row->{$match[1]}) ? $row->{$match[1]} diff --git a/functions/func.sysblock.php b/functions/func.sysblock.php index a40e8ed..92c884e 100644 --- a/functions/func.sysblock.php +++ b/functions/func.sysblock.php @@ -15,17 +15,19 @@ * Обработка тега системного блока * * @param int $id идентификатор системного блока + * + * @return bool|mixed|null|string|string[] */ function parse_sysblock($id) { - global $AVE_DB, $AVE_Core; + global $AVE_DB; if (is_array($id)) $id = $id[1]; Debug::startTime('SYSBLOCK_' . $id); - $eval_sysblock = false; + // $eval_sysblock = false; if ($id != '') { @@ -101,5 +103,7 @@ return $return; } + + return false; } ?> \ No newline at end of file diff --git a/functions/func.thumbnails.php b/functions/func.thumbnails.php index d53c4eb..853f8ca 100644 --- a/functions/func.thumbnails.php +++ b/functions/func.thumbnails.php @@ -24,6 +24,8 @@ |
  • size - размер миниатюры
  • | | + | make_thumbnail(array('link' => URL, 'size' => SIZE)); + | | @return string */ function make_thumbnail ($params) @@ -42,15 +44,13 @@ if (! is_dir(dirname($path))) mkdir(dirname($path), 0777, true); - mkdir($path, 0777); + mkdir($path, 0777, true); } $link = ABS_PATH . UPLOAD_DIR . '/ext/' . substr($md5, 0, 4) . '/' . $md5 . '.jpg'; if (! file_exists(BASE_DIR . $link)) - { file_put_contents(BASE_DIR . $link . '.tmp', $params['link']); - } $params['link'] = $link; } diff --git a/functions/func.users.php b/functions/func.users.php index f57c390..a87fc7a 100644 --- a/functions/func.users.php +++ b/functions/func.users.php @@ -1,240 +1,246 @@ user_name); - $ava = (file_exists(BASE_DIR.$ava.'.jpg') ? $ava.'.jpg' : (file_exists(BASE_DIR.$ava.'.png') ? $ava.'.png' : (file_exists(BASE_DIR.$ava.'.gif') ? $ava.'.gif' : ''))); - $result[$id]=$ava; + /** + * AVE.cms + * + * @package AVE.cms + * @version 3.x + * @filesource + * @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru + * + * @license GPL v.2 + */ + + + /** + * Возвращаем аватар по пользователю + * + * @param int $id Ид пользователя- если не придет то текущий пользователь + * @param int $size размер картинки по краю + * @param string $prefix + * @return string путь до файла с превью + */ + function getAvatar($id = null, $size = 58, $prefix = '') + { + global $AVE_DB; + + static $result = array(); + + if ($id === null) + $id = $_SESSION['user_id']; + + if (! isset($result[$id])) + { + $user = get_user_rec_by_id($id); + $ava = ABS_PATH . UPLOAD_DIR . '/avatars/' . (($prefix === '') ? '' : $prefix) . md5($user->user_name); + $ava = (file_exists(BASE_DIR.$ava.'.jpg') ? $ava.'.jpg' : (file_exists(BASE_DIR . $ava . '.png') ? $ava . '.png' : (file_exists(BASE_DIR.$ava.'.gif') ? $ava.'.gif' : ''))); + $result[$id] = $ava; + } + + $ava = $result[$id]; + + $src = (file_exists(BASE_DIR . $ava) + ? make_thumbnail(array('link' => $ava,'size' => 'c' . $size . 'x' . $size)) + : make_thumbnail(array('link' => $AVE_DB->Query("SELECT default_avatar FROM " . PREFIX . "_user_groups WHERE user_group=" . (int)$user->user_group)->GetCell(), 'size' => 'c' . $size . 'x' . $size)) + ); + + return $src; } - $ava=$result[$id]; - $src = (file_exists(BASE_DIR.$ava) ? - make_thumbnail(array('link' => $ava,'size' => 'c' . $size . 'x' . $size)): - make_thumbnail(array('link' => $AVE_DB->Query("SELECT default_avatar FROM " . PREFIX . "_user_groups WHERE user_group=" . (int)$user->user_group)->GetCell(), 'size' => 'c' . $size . 'x' . $size)) - ); + /** + * Устанавливаем аватар пользователю + * + * @param int $id Ид пользователя + * @param string $avatar путь до картинки которая будет аватаром + * @return bool установился аватар или нет + */ + function SetAvatar($id, $avatar) + { + if ($id === null) $id = $_SESSION['user_id']; - return $src; -} + $user = get_user_rec_by_id($id); + $file_ext = pathinfo($avatar, PATHINFO_EXTENSION); -/** - * Устанавливаем аватар пользователю - * - * @param int $id Ид пользователя - * @param string $avatar путь до картинки которая будет аватаром - * @return bool установился аватар или нет - */ -function SetAvatar($id, $avatar) -{ - if ($id === null) $id = $_SESSION['user_id']; + if (! file_exists($avatar)) + return false; - $user = get_user_rec_by_id($id); + $new_ava = BASE_DIR . '/' . UPLOAD_DIR . '/avatars/' . md5($user->user_name) . '.' . strtolower($file_ext); - $file_ext = pathinfo($avatar, PATHINFO_EXTENSION); + foreach (glob(BASE_DIR . '/' . UPLOAD_DIR . '/avatars/' . md5($user->user_name) . '.*') AS $filename) + @unlink($filename); - if (! file_exists($avatar)) - return false; + //Чистим превьюшки + foreach (glob(BASE_DIR . '/' . UPLOAD_DIR . '/avatars/' . THUMBNAIL_DIR . '/' . md5($user->user_name) . '*.*') AS $filename) + @unlink($filename); - $new_ava = BASE_DIR . '/' . UPLOAD_DIR . '/avatars/' . md5($user->user_name) . '.' . strtolower($file_ext); + @file_put_contents($new_ava, file_get_contents($avatar)); + @unlink($avatar); - foreach (glob(BASE_DIR . '/' . UPLOAD_DIR . '/avatars/' . md5($user->user_name) . '.*') as $filename) - { - @unlink($filename); - } - - //Чистим превьюшки - foreach (glob(BASE_DIR . '/' . UPLOAD_DIR . '/avatars/' . THUMBNAIL_DIR . '/' . md5($user->user_name) . '*.*') as $filename) - { - @unlink($filename); + return true; } - @file_put_contents($new_ava, file_get_contents($avatar)); - @unlink($avatar); - - return true; -} - - -/** - * Формирование строки имени пользователя - * При наличии всех параметров пытается сформировать строку Имя Фамилия - * Если задать $short=1 - формирует короткую форму И. Фамилия - * Когда отсутствует информация о Имени или Фамилии пытается сформировать - * строку на основе имеющихся данных, а если данных нет вообще - выводит - * имя анонимного пользователя которое задается в основных настройках системы. - * - * @todo добавить параметр 'anonymous' в настройки - * - * @param string $login логин пользователя - * @param string $first_name имя пользователя - * @param string $last_name фамилия пользователя - * @param int $short {0|1} признак формирования короткой формы - * @return string - */ -function get_username($login = '', $first_name = '', $last_name = '', $short = 1) -{ - if ($first_name != '' && $last_name != '') - { - if ($short == 1) $first_name = mb_substr($first_name, 0, 1, 'utf-8') . '.'; - return ucfirst_utf8(mb_strtolower($first_name)) . ' ' . ucfirst_utf8(mb_strtolower($last_name)); - return ucfirst_utf8(mb_strtolower($login)); - } - elseif ($first_name != '' && $last_name == '') + + /** + * Формирование строки имени пользователя + * При наличии всех параметров пытается сформировать строку Имя Фамилия + * Если задать $short=1 - формирует короткую форму И. Фамилия + * Когда отсутствует информация о Имени или Фамилии пытается сформировать + * строку на основе имеющихся данных, а если данных нет вообще - выводит + * имя анонимного пользователя которое задается в основных настройках системы. + * + * @todo добавить параметр 'anonymous' в настройки + * + * @param string $login логин пользователя + * @param string $first_name имя пользователя + * @param string $last_name фамилия пользователя + * @param int $short {0|1} признак формирования короткой формы + * @return string + */ + function get_username($login = '', $first_name = '', $last_name = '', $short = 1) { - return ucfirst_utf8(mb_strtolower($first_name)); + if ($first_name != '' && $last_name != '') + { + if ($short == 1) + $first_name = mb_substr($first_name, 0, 1, 'utf-8') . '.'; + + return ucfirst_utf8(mb_strtolower($first_name)) . ' ' . ucfirst_utf8(mb_strtolower($last_name)); + } + elseif ($first_name != '' && $last_name == '') + { + return ucfirst_utf8(mb_strtolower($first_name)); + } + elseif ($first_name == '' && $last_name != '') + { + return ucfirst_utf8(mb_strtolower($last_name)); + } + elseif ($login != '') + { + return ucfirst_utf8(mb_strtolower($login)); + } + + return 'Anonymous'; } - elseif ($first_name == '' && $last_name != '') + + + /** + * Возвращает запись для пользователя по идентификатору + * не делает лишних запросов + * + * @param int $id - идентификатор пользователя + * @return object + */ + function get_user_rec_by_id($id) { - return ucfirst_utf8(mb_strtolower($last_name)); + global $AVE_DB; + + static $users = array(); + + if (! isset($users[$id])) + { + $row = $AVE_DB->Query(" + SELECT + * + FROM " . PREFIX . "_users + WHERE Id = '" . (int)$id . "' + ")->FetchRow(); + + $users[$id] = $row; + } + + return $users[$id]; } - elseif ($login != '') + + + /** + * Возвращает параметры группы пользователей по идентификатору + * не делает лишних запросов + * + * @param int $id - идентификатор группы + * @return object + */ + function get_usergroup_rec_by_id($id) { - return ucfirst_utf8(mb_strtolower($login)); + global $AVE_DB; + + static $usergroups = array(); + + if (! isset($usergroups[$id])) + { + $row = $AVE_DB->Query(" + SELECT + * + FROM " . PREFIX . "_user_groups + WHERE user_group = '" . (int)$id . "' + ")->FetchRow(); + + $usergroups[$id] = $row; + } + + return $usergroups[$id]; + } - return 'Anonymous'; -} + /** + * Возвращает login пользователя по его идентификатору + * + * @param int $id - идентификатор пользователя + * @return string + */ + function get_userlogin_by_id($id) + { + $rec = get_user_rec_by_id($id); -/** - * Возвращает запись для пользователя по идентификатору - * не делает лишних запросов - * - * @param int $id - идентификатор пользователя - * @return object - */ -function get_user_rec_by_id($id){ - global $AVE_DB; + return $rec->user_name; + } - static $users = array(); - if (!isset($users[$id])) + /** + * Возвращает имя группы пользователя по его идентификатору + * + * @param int $id - идентификатор группы пользователя + * @return string + */ + function get_usergroup_by_id($id) { - $row = $AVE_DB->Query(" - SELECT - * - FROM " . PREFIX . "_users - WHERE Id = '" . (int)$id . "' - ")->FetchRow(); - - $users[$id] = $row; + $rec = get_usergroup_rec_by_id($id); + + return $rec->user_group_name; } - return $users[$id]; -} + /** + * Возвращает email пользователя по его идентификатору + * + * @param int $id - идентификатор пользователя + * @return string + */ + function get_useremail_by_id($id) + { + $rec = get_user_rec_by_id($id); -/** - * Возвращает параметры группы пользователей по идентификатору - * не делает лишних запросов - * - * @param int $id - идентификатор группы - * @return object - */ -function get_usergroup_rec_by_id($id){ - global $AVE_DB; + return $rec->email; + } - static $usergroups = array(); - if (!isset($usergroups[$id])) + /** + * Возвращает имя пользователя по его идентификатору + * + * @param int $id - идентификатор пользователя + * @param int $param - Сокрашать имя (1 - да, 0 - нет) + * + * @return string + */ + function get_username_by_id($id, $param = 1) { - $row = $AVE_DB->Query(" - SELECT - * - FROM " . PREFIX . "_user_groups - WHERE user_group = '" . (int)$id . "' - ")->FetchRow(); - - $usergroups[$id] = $row; + $row = get_user_rec_by_id($id); + $row = (! empty($row)) + ? get_username($row->user_name, $row->firstname, $row->lastname, $param) + : get_username(); + + return $row; } - return $usergroups[$id]; - -} - - -/** - * Возвращает login пользователя по его идентификатору - * - * @param int $id - идентификатор пользователя - * @return string - */ -function get_userlogin_by_id($id) -{ - $rec = get_user_rec_by_id($id); - - return $rec->user_name; -} - - -/** - * Возвращает имя группы пользователя по его идентификатору - * - * @param int $id - идентификатор группы пользователя - * @return string - */ -function get_usergroup_by_id($id) -{ - $rec = get_usergroup_rec_by_id($id); - - return $rec->user_group_name; -} - - -/** - * Возвращает email пользователя по его идентификатору - * - * @param int $id - идентификатор пользователя - * @return string - */ -function get_useremail_by_id($id) -{ - $rec = get_user_rec_by_id($id); - - return $rec->email; -} - - -/** - * Возвращает имя пользователя по его идентификатору - * - * @param int $id - идентификатор пользователя - * @param int $param - Сокрашать имя (1 - да, 0 - нет) - * - * @return string - */ -function get_username_by_id($id, $param = 1) -{ - $row = get_user_rec_by_id($id); - $row = !empty($row) ? get_username($row->user_name, $row->firstname, $row->lastname, $param) : get_username(); - return $row; -} ?> \ No newline at end of file diff --git a/functions/func.watermarks.php b/functions/func.watermarks.php index a41db52..2a87a7e 100644 --- a/functions/func.watermarks.php +++ b/functions/func.watermarks.php @@ -56,8 +56,6 @@ */ function watermarks ($file, $position='center', $transparency=100) { - global $AVE_DB; - if (! defined('WATERMARKS_DIR') || ! defined('WATERMARKS_FILE')) return $file; @@ -187,7 +185,7 @@ if ($watermark->_img['main']['type'] == 2) { - $image = getimagesize("$imagePath/$imageName", $info); + // $image = getimagesize("$imagePath/$imageName", $info); Not used if (! isset($info['APP13'])) { diff --git a/inc/init.php b/inc/init.php index a996739..1090ba2 100644 --- a/inc/init.php +++ b/inc/init.php @@ -63,16 +63,16 @@ * @param array $array обрабатываемый массив * @return array обработанный массив */ - function add_slashes($array=array()) + function add_slashes($array = array()) { @reset($array); - while (list($key, $val) = @each($array)) + foreach ($array AS $_k => $_v) { - if (is_string($val)) - $array[$key] = addslashes($val); - elseif (is_array($val)) - $array[$key] = add_slashes($val); + if (is_string($_v)) + $array[$_k] = addslashes($_v); + elseif (is_array($_v)) + $array[$_k] = add_slashes($_v); } return $array; diff --git a/install/data_base.sql b/install/data_base.sql index 0ff2e64..c3f1947 100755 --- a/install/data_base.sql +++ b/install/data_base.sql @@ -310,6 +310,7 @@ INSERT INTO `%%PRFX%%_settings` VALUES '%d %B %Y, %H:%M', 'RU', '0', + '0', '
    \n Содержимое скрыто.\n
    ' );#inst#