0 ? false : true; } /** * Очистка текста от програмного кода * * @param string $text исходный текст * @return string очищенный текст */ function clean_php($text) { return str_replace(array('', 'Системное сообщение: ' . $message . ''; } /** * Сообщение о запрете распечатки страницы * */ function print_error() { display_notice('Запрашиваемая страница не может быть распечатана.'); exit; } /** * Сообщение о проблемах доступа к файлам модуля * */ function module_error() { display_notice('Запрашиваемый модуль не может быть загружен.'); exit; } /** * Получение основных настроек * * @param string $field параметр настройки, если не указан - все параметры * @return mixed */ function get_settings($field = '') { global $AVE_DB; static $settings = null; if ($settings === null) $settings = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_settings", SYSTEM_CACHE_LIFETIME, 'settings')->FetchAssocArray(); if ($field == '') return $settings; return isset($settings[$field]) ? $settings[$field] : null; } /** * Формирование URL редиректа * * @param string|mixed $exclude * @return string URL */ function get_redirect_link($exclude = '') { global $AVE_Core; $link = 'index.php'; if (! empty($_GET)) { if ($exclude != '' && ! is_array($exclude)) $exclude = explode(',', $exclude); if (empty($exclude)) $exclude = array(); $exclude[] = 'url'; $params = array(); foreach($_GET as $key => $value) { if (! in_array($key, $exclude)) { if ($key == 'doc') { $params[] = 'doc=' . (empty($AVE_Core->curentdoc->document_alias) ? prepare_url($AVE_Core->curentdoc->document_title) : $AVE_Core->curentdoc->document_alias); } else { if (! is_array($value)) { $params[] = @urlencode($key) . '=' . @urlencode($value); } else { foreach($value AS $k => $v) { $params[] = @urlencode($k) . '=' . @urlencode($v); } } } } } if (sizeof($params)) $link .= '?' . implode('&', $params); } return $link; } /** * Ссылка на главную страницу * * @return string ссылка */ function get_home_link() { return HOST . ABS_PATH . ($_SESSION['user_language'] == DEFAULT_LANGUAGE ? '' : $_SESSION['accept_langs'][$_SESSION['user_language']] . URL_SUFF); } /** * Ссылка на страницу версии для печати * * @return string ссылка */ function get_print_link() { /* $link = get_redirect_link('print'); $link .= (strpos($link, '?')===false ? '?print=1' : '&print=1'); */ /* Временное решение */ $link = ABS_PATH."index.php?id=".get_current_document_id()."&print=1"; return $link; } /** * Ссылка на реферал * * @return string ссылка */ function get_referer_link() { static $link = null; if ($link === null) { if (isset($_SERVER['HTTP_REFERER'])) { $link = parse_url($_SERVER['HTTP_REFERER']); $link = (trim($link['host']) == $_SERVER['SERVER_NAME']); } $link = ($link === true ? $_SERVER['HTTP_REFERER'] : get_home_link()); } return $link; } /** * Замена некоторых символов на их сущности * замена и исправление HTML-тегов * * @param string|mixed $string * @return string|mixed */ function pretty_chars($string) { return preg_replace(array("'©'" , "'®'"), array('©', '®'), $string); } /** * Подготовка текста через API Яндекса (перевод с русского на английский) * * @param string $text * @return string */ function y_translate($text) { include_once BASE_DIR.'/lib/translate/Yandex_Translate.php'; $translator = new Yandex_Translate(); $translatedText = $translator->yandexTranslate('ru', 'en', $text); $translatedText = strtolower($translatedText); $translatedText = preg_replace( array('/^[\/-]+|[\/-]+$|^[\/_]+|[\/_]+$|[^\.a-zа-яеёA-ZА-ЯЕЁ0-9\/_-]/u', '/--+/', '/-*\/+-*/', '/\/\/+/'), array('-', '-', '/', '/'), $translatedText ); return $translatedText; } /** * Подготовка URL * * @param string $url * @return string */ function prepare_url($url) { $new_url = strip_tags($url); // спецсимволы $table = array( '«' => '', '»' => '', '—' => '', '–' => '', '“' => '', '”' => '' ); $new_url = str_replace(array_keys($table), array_values($table), $new_url); if (defined('TRANSLIT_URL') && TRANSLIT_URL) $new_url = translit_string(trim(_strtolower($new_url))); $new_url = preg_replace( array( '/^[\/-]+|[\/-]+$|^[\/_]+|[\/_]+$|[^\.a-zа-яеёA-ZА-ЯЕЁ0-9\/_-]/u', '/--+/', '/-*\/+-*/', '/\/\/+/' ), array( '-', '-', '/', '/' ), $new_url ); $new_url = trim($new_url, '-'); if (substr(URL_SUFF, 0, 1) != '/' && substr($url, -1) == '/') $new_url = $new_url . "/"; return mb_strtolower(rtrim($new_url, '.'), 'UTF-8'); } /** * Формирование ЧПУ для документов * * @param string $s ссылка или текст с ссылками * @return string */ function rewrite_link($s) { if (!REWRITE_MODE) return $s; $doc_regex = '/index.php(?:\?)id=(?:[0-9]+)&(?:amp;)*doc='.(TRANSLIT_URL ? '([\.a-z0-9\/_-]+)' : '([\.a-zа-яёїєі0-9\/_-]+)'); $page_regex = '&(?:amp;)*(artpage|apage|page)=([{s}0-9]+)'; $s = preg_replace($doc_regex.$page_regex.$page_regex.$page_regex.'/', ABS_PATH.'$1/$2-$3/$4-$5/$6-$7'.URL_SUFF, $s); $s = preg_replace($doc_regex.$page_regex.$page_regex.'/', ABS_PATH.'$1/$2-$3/$4-$5'.URL_SUFF, $s); $s = preg_replace($doc_regex.$page_regex.'/', ABS_PATH.'$1/$2-$3'.URL_SUFF, $s); $s = preg_replace($doc_regex.'/', ABS_PATH.'$1'.URL_SUFF, $s); //$s = preg_replace('/'.preg_quote(URL_SUFF, '/').'[?|&](?:amp;)*print=1/', '/print'.URL_SUFF, $s); return $s; } /** * Возвращаем полный домен сайта * * @return mixed|string */ function getSiteUrl() { $protocol = isset($_SERVER['HTTPS']) ? 'https' : 'http'; $url = $protocol . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; $url = parse_url($url); $url = $url['scheme'] . '://' . $url['host']; return $url; } /** * Преобразует первый символ в верхний регистр * @param string $str - строка * @param string $encoding - кодировка, по-умолчанию UTF-8 * @return string */ function ucfirst_utf8($str, $encoding='utf-8') { $str = mb_ereg_replace('^[\ ]+', '', $str); $str = mb_strtoupper(mb_substr($str, 0, 1, $encoding), $encoding) . mb_substr($str, 1, mb_strlen($str), $encoding); return $str; } /** * Вывод статистики */ function get_statistic($t=0, $m=0, $q=0, $l=0) { global $AVE_DB; $s = ''; if ($t) $s .= "\n
Время генерации: " . number_format(microtime_diff(START_MICROTIME, microtime()), 3, ',', ' ') . ' сек.'; if ($m && function_exists('memory_get_peak_usage')) $s .= "\n
Использовано памяти: " . Debug::formatSize(memory_get_usage() - START_MEMORY); if ($m && function_exists('memory_get_peak_usage')) $s .= "\n
Пиковое значение: " . Debug::formatSize(memory_get_peak_usage()); if ($q && (defined('SQL_PROFILING') && SQL_PROFILING)) $s .= "\n
Количество запросов: " . $AVE_DB->DBProfilesGet('count') . ' шт. за ' . $AVE_DB->DBProfilesGet('time') . ' сек.'; if ($l && (defined('SQL_PROFILING') && SQL_PROFILING)) $s .= $AVE_DB->DBProfilesGet('list'); return $s; } /** * Комментарии в SMARTY */ function add_template_comment($tpl_source, &$smarty) { return "\n\n\n".$tpl_source."\n\n\n"; } /** * Получения списка стран * * @param int $status статус стран входящих в список * * если не указано возвращает список стран без учета статуса * * @return array */ function get_country_list($status = null) { global $AVE_DB; $countries = array(); $sql = $AVE_DB->Query(" SELECT country_code, country_name, country_status FROM " . PREFIX . "_countries " . (($status != '') ? "WHERE country_status = '" . $status . "'" : '') . " ORDER BY country_name ASC "); while ($row = $sql->FetchRow()) array_push($countries, $row); return $countries; } /** * Получение списка изображений из заданной папки * @param string $path путь до директории с изображениями * @return array */ function image_multi_import($path) { $images_ext = array('jpg', 'jpeg', 'png', 'gif'); $dir = BASE_DIR . "/" . $path; $dir_abs = "/" . $path; $files = array(); $thumbs = array(); if ($handle = opendir($dir)) { while (false !== ($file = readdir($handle))) { $nameParts = explode('.', $file); $ext = strtolower(end($nameParts)); if ($file != "." && $file != ".." && in_array($ext, $images_ext)) { if (! is_dir($dir . "/" . $file)) { $files[] = $file; $thumbs[] = make_thumbnail(array('link' => $dir_abs . $file, 'size' => 'f128x128')); } } } closedir($handle); } $return = array( 'files' => $files, 'thumbs' => $thumbs ); return $files; } /** * Получение списка файлов из заданной папки * @param string $path путь до директории с файлами * @return array */ function file_multi_import($path) { $dir = BASE_DIR . "/" . $path; if ($handle = opendir($dir)) { while (false !== ($file = readdir($handle))) { $nameParts = explode('.', $file); $ext = strtolower(end($nameParts)); if ($file != "." && $file != ".." && $ext == "php" || $ext == "inc") { if (! is_dir($dir . "/" . $file)) $files[] = $file; } } closedir($handle); } return $files; } /** * Replace PHP_EOL constant * * @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/reserved.constants.core * @author Aidan Lister * @version $Revision: 1.3 $ * @since PHP 5.0.2 */ if (! defined('PHP_EOL')) { switch (strtoupper(substr(PHP_OS, 0, 3))) { // Windows case 'WIN': define('PHP_EOL', "\r\n"); break; // Mac case 'DAR': define('PHP_EOL', "\r"); break; // Unix default: define('PHP_EOL', "\n"); } } /** * Функция записывает в указанную папку .htaccess с содержанием "Deny from all" * */ function write_htaccess_deny($dir) { $file = $dir . '/.htaccess'; if(! file_exists($file)) { if(! is_dir($dir)) @mkdir($dir); @file_put_contents($dir . '/.htaccess','Deny from all'); } } /** * Функция которая паникует если приблизились к memory_limit * * @return bool превышение лимита использования памяти */ function memory_panic() { if (defined('MEMORY_LIMIT_PANIC') && MEMORY_LIMIT_PANIC != -1) { $use_mem = memory_get_usage(); $lim = MEMORY_LIMIT_PANIC * 1024 * 1024; return ($use_mem > $lim ? true : false); } else return false; } /** * Первод Array в Object * * @param array $array * @return array obj */ function array2object($array) { if (is_array($array)) { $obj = new StdClass(); foreach ($array as $key => $val) { $obj->$key = $val; } } else $obj = $array; return $obj; } /** * Первод Object в Array * * @param array $object * @return array */ function object2array($object) { $object = (array)$object; if($object === array()) return; foreach($object as $key => &$value) { if ((is_object($value) || is_array($value))) { $object[$key] = object2array($value); } } return $object; } /** * Sort a 2 dimensional array based on 1 or more indexes. * * 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. * * @return array The sorted array. */ function msort($array, $key, $sort_flags = SORT_REGULAR, $sort_way = SORT_ASC) { if (is_array($array) && count($array) > 0) { if (! empty($key)) { $mapping = array(); foreach ($array as $k => $v) { $sort_key = ''; if (!is_array($key)) { $sort_key = $v[$key]; } else { // @TODO This should be fixed, now it will be sorted as string foreach ($key as $key_key) { $sort_key .= $v[$key_key]; } $sort_flags = SORT_STRING; } $mapping[$k] = $sort_key; } switch ($sort_way) { case SORT_ASC: asort($mapping, $sort_flags); break; case SORT_DESC: arsort($mapping, $sort_flags); break; } $sorted = array(); foreach ($mapping as $k => $v) { $sorted[] = $array[$k]; } return $sorted; } } return $array; } /** * Функция возвращает каноническое имя страницы * * @param string $url текущий УРЛ * @return string */ function canonical($url) { $link = preg_replace('/^(.+?)(\?.*?)?(#.*)?$/', '$1$3', $url); return $link; } /** * Функция поиска автора документа, для autocmplite * * @param string $string * @param $limit * @return string */ function findautor($string, $limit) { global $AVE_DB; $search = " AND (UPPER(email) LIKE UPPER('%" . $string . "%') OR UPPER(email) = UPPER('" . $string . "') OR Id = '" . intval($string) . "' OR UPPER(user_name) LIKE UPPER('" . $string . "%') OR UPPER(firstname) LIKE UPPER('" . $string . "%') OR UPPER(lastname) LIKE UPPER('" . $string . "%')) "; $limit = (!empty($limit)) ? 'LIMIT 0,'.$limit : ''; $sql = $AVE_DB->Query(" SELECT * FROM " . PREFIX . "_users WHERE 1" . $search . $limit ); $users = array(); while ($row = $sql->FetchRow()) { $ava=getAvatar($row->Id,40); $users[]=array( 'userid'=>$row->Id, 'login'=>$row->user_name, 'email'=>$row->email, 'lastname'=>$row->lastname, 'firstname'=>$row->firstname, 'avatar'=>($ava ? $ava : ABS_PATH.'admin/templates/images/user.png') ); } echo json_encode($users); } /** * Функция поиска ключевых слов * * @param string $string - запрос * @return string */ function searchKeywords($string) { global $AVE_DB; $search = " AND (UPPER(keyword) LIKE UPPER('" . $string . "%')) "; $sql = $AVE_DB->Query(" SELECT * FROM " . PREFIX . "_document_keywords WHERE 1" . $search ); while ($row = $sql->FetchRow()) { $keyword = $row->keyword; echo "$keyword\n"; } } /** * Функция поиска ключевых слов * * @param string $string - запрос * @return string */ function searchTags() { global $AVE_DB; $sql = $AVE_DB->Query(" SELECT DISTINCT tag FROM " . PREFIX . "_document_tags "); $tags = array(); $ii = 0; while ($row = $sql->GetCell()) { $tags[]['value'] = $row; } echo json_encode($tags); exit; } /** * Формирование строки из случайных символов * * @param int $length количество символов в строке * @param string $chars набор символов для формирования строки * @return string сформированная строка */ function make_random_string($length = 16, $chars = '') { if ($chars == '') { $chars = 'abcdefghijklmnopqrstuvwxyz'; $chars .= 'ABCDEFGHIJKLMNOPRQSTUVWXYZ'; $chars .= '~!@#$%^&*()-_=+{[;:/?.,]}'; $chars .= '0123456789'; } $clen = strlen($chars) - 1; $string = ''; while (strlen($string) < $length) $string .= $chars[mt_rand(0, $clen)]; return $string; } /** * Функция preg_replace для кириллицы * если заменять русские символы в строке UTF-8 при помощи preg_replace, то появляются вопросы * * @param mixed $pattern шаблон заменяемой части строки * @param mixed $replacement на что заменяем * @param mixed $string входящая строка * @param int $limit максимум вхождений * mixed preg_replace_ru ( mixed pattern, mixed replacement, mixed subject [, int limit] ) * * @return mixed */ function preg_replace_ru($pattern="", $replacement="", $string="", $limit=-1) { $string = iconv('UTF-8', 'cp1251', $string); $string = preg_replace($pattern, $replacement, $string, $limit); return iconv('cp1251', 'UTF-8', $string); } /** * Создание cookie */ function set_cookie_domain($cookie_domain = '') { global $cookie_domain; if ($cookie_domain == '' && defined('COOKIE_DOMAIN') && COOKIE_DOMAIN != '') { $cookie_domain = COOKIE_DOMAIN; } elseif ($cookie_domain == '' && !empty($_SERVER['HTTP_HOST'])) { $cookie_domain = htmlspecialchars($_SERVER['HTTP_HOST'], ENT_QUOTES); } // Удаляем ведущие www. и номер порта в имени домена для использования в cookie. $cookie_domain = ltrim($cookie_domain, '.'); if (strpos($cookie_domain, 'www.') === 0) { $cookie_domain = substr($cookie_domain, 4); } $cookie_domain = explode(':', $cookie_domain); $cookie_domain = '.'. $cookie_domain[0]; // В соответствии с RFC 2109, имя домена для cookie должно быть второго или более уровня. // Для хостов 'localhost' или указанных IP-адресом имя домена для cookie не устанавливается. if (count(explode('.', $cookie_domain)) > 2 && !is_numeric(str_replace('.', '', $cookie_domain))) { ini_set('session.cookie_domain', $cookie_domain); } ini_set('session.cookie_path', ABS_PATH); } /** * Функция проверяет наличие Ajax запроса * * @return bool true|false - Ajax */ function isAjax() { return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')); } /** * Функция делает html в 1 строчку, удаляет лишние пробелы, комментарии и т.д. * * @return string */ function compress_htlm($data) { $search = array( '/\>[^\S ]+/s', // strip whitespaces after tags, except space '/[^\S ]+\/' // Remove HTML comments ); $replace = array( '>', '<', '\\1', '' ); $data = preg_replace($search, $replace, $data); return $data; } /** * Функция делает компрессию данных * * @return string */ function output_compress($data) { $Gzip = strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false; if (HTML_COMPRESSION) $data = compress_htlm($data); if ($Gzip && GZIP_COMPRESSION) { $content = gzencode($data, 9); header ('Content-Encoding: gzip'); } else { $content = $data; } header ('Content-Type: text/html; charset=utf-8'); header ('Cache-Control: must-revalidate'); if (OUTPUT_EXPIRE) { $expire = 'Expires: ' . gmdate ("D, d M Y H:i:s", time() + OUTPUT_EXPIRE_OFFSET) . ' GMT'; header ($expire); } header ('Content-Length: ' . strlen($content)); header ('Vary: Accept-Encoding'); echo $content; } ?>