Source for file func.common.php

Documentation is available at func.common.php

  1. <?php
  2.  
  3. /**
  4.  * AVE.cms
  5.  *
  6.  * @package AVE.cms
  7.  * @filesource
  8.  */
  9.  
  10. /**
  11.  * Вычисление разницы между двумя метками времени
  12.  *
  13.  * @param string $a начальная метка
  14.  * @param string $b конечная метка
  15.  * @return int время между метками
  16.  */
  17. function microtime_diff($a$b)
  18. {
  19.     list($a_dec$a_secexplode(' '$a);
  20.     list($b_dec$b_secexplode(' '$b);
  21.     return $b_sec $a_sec $b_dec $a_dec;
  22. }
  23.  
  24. /**
  25.  * Регистронезависимый вариант функции strpos
  26.  * Возвращает числовую позицию первого вхождения needle в строке haystack.
  27.  *
  28.  * @param unknown_type $haystack проверяемая строка
  29.  * @param unknown_type $needle искомая подстрока
  30.  * @param unknown_type $offset с какого символа в haystack начинать поиск.
  31.  * @return int числовая позиция
  32.  */
  33. if (!function_exists("stripos"))
  34. {
  35.     function stripos($haystack$needle$offset 0)
  36.     {
  37.         return strpos(strtoupper($haystack)strtoupper($needle)$offset);
  38.     }
  39. }
  40.  
  41. /**
  42.  * Форматирование числа
  43.  *
  44.  * @param array $param значение и параметры
  45.  * @return string отформатированное значение
  46.  */
  47. function num_format($param)
  48. {
  49.     if (is_array($param)) return number_format($param['val']0',''.');
  50.     return '';
  51. }
  52.  
  53. /**
  54.  * Проверка начинается ли строка с указанной подстроки
  55.  *
  56.  * @param string $str проверяемая строка
  57.  * @param string $in подстрока
  58.  * @return boolean результат проверки
  59.  */
  60. function start_with($str$in)
  61. {
  62.     return(substr($in0strlen($str)) == $str);
  63. }
  64.  
  65. /**
  66.  * Проверка прав пользователя
  67.  *
  68.  * @param string $action проверяемое право
  69.  * @return boolean результат проверки
  70.  */
  71. function check_permission($action)
  72. {
  73.     global $_SESSION;
  74.  
  75.     if ((isset($_SESSION['user_group']&& $_SESSION['user_group'== 1||
  76.         (isset($_SESSION['alles'])      && $_SESSION['alles'== 1||
  77.         (isset($_SESSION[$action])      && $_SESSION[$action== 1))
  78.     {
  79.         return true;
  80.     }
  81.  
  82.     return false;
  83. }
  84.  
  85.  
  86. function clean_no_print_char($text)
  87. {
  88.     return trim(preg_replace('#[\x00-\x08\x0B-\x0C\x0E-\x1F]+#is'' '$text));
  89. }
  90.  
  91. /**
  92.  * Очистка текста от програмного кода
  93.  *
  94.  * @param string $text исходный текст
  95.  * @return string очищенный текст
  96.  */
  97. function clean_php($text)
  98. {
  99.     return str_replace(array('<?''?>''<script')''$text);
  100. }
  101.  
  102. /**
  103.  * Вывод системного сообщения
  104.  *
  105.  * @param string $message сообщение
  106.  */
  107. function display_notice($message)
  108. {
  109.     echo '<div style="background-color:#ff6;padding:5px;border:1px solid #f00;color:#f00;text-align:center;"><b>Системное сообщение: </b>' $message '</div>';
  110. }
  111.  
  112. /**
  113.  * Сообщение о запрете распечатки страницы
  114.  *
  115.  */
  116. function print_error()
  117. {
  118.     display_notice('Запрашиваемая страница не может быть распечатана.');
  119.     exit;
  120. }
  121.  
  122. /**
  123.  * Сообщение о проблемах доступа к файлам модуля
  124.  *
  125.  */
  126. function module_error()
  127. {
  128.     display_notice('Запрашиваемый модуль не может быть загружен.');
  129.     exit;
  130. }
  131.  
  132. /**
  133.  * Получение основных настроек
  134.  *
  135.  * @param string $field параметр настройки, если не указан - все параметры
  136.  * @return mixed 
  137.  */
  138. function get_settings($field '')
  139. {
  140.     global $AVE_DB;
  141.  
  142.     static $settings null;
  143.  
  144.     if ($settings === null)
  145.     {
  146.         $settings $AVE_DB->Query("SELECT * FROM " PREFIX "_settings")->FetchAssocArray();
  147.     }
  148.  
  149.     if ($field == ''return $settings;
  150.  
  151.     return isset($settings[$field]$settings[$fieldnull;
  152. }
  153.  
  154. function get_navigations($navi_id '')
  155. {
  156.     global $AVE_DB;
  157.  
  158.     static $navigations null;
  159.  
  160.     if ($navigations == null)
  161.     {
  162.         $navigations array();
  163.  
  164.         $sql $AVE_DB->Query("SELECT * FROM " PREFIX "_navigation");
  165.  
  166.         while ($row $sql->FetchRow())
  167.         {
  168.             $row->Gruppen explode(','$row->Gruppen);
  169.             $navigations[$row->id$row;
  170.         }
  171.     }
  172.  
  173.     if ($navi_id == ''return $navigations;
  174.  
  175.     return (isset($navigations[$navi_id]$navigations[$navi_idfalse);
  176. }
  177.  
  178. /**
  179.  * Проверка прав доступа к навигации по группе пользователя
  180.  *
  181.  * @param int $id идентификатор меню навигации
  182.  * @return boolean 
  183.  */
  184. function check_navi_permission($id)
  185. {
  186.     $navigation get_navigations($id);
  187.  
  188.     if (empty($navigation->Gruppen)) return false;
  189.  
  190.     if (!defined('UGROUP')) define('UGROUP'2);
  191.     if (!in_array(UGROUP$navigation->Gruppen)) return false;
  192.  
  193.     return true;
  194. }
  195.  
  196. /**
  197.  * Обработка парного тэга [hide:X,X]...[/hide] (скрытый текст)
  198.  * Заменяет скрываемый текст в зависимости от группы пользователя
  199.  *
  200.  * @param string $data обрабатываемый текст
  201.  * @return string обработанный текст
  202.  */
  203. function parse_hide($data)
  204. {
  205.     static $hidden_text null;
  206.  
  207.     if (!= preg_match('/\[hide:\d+(,\d+)*].*?\[\/hide]/s'$data)) return $data;
  208.  
  209.     if ($hidden_text === null$hidden_text trim(get_settings('hidden_text'));
  210.  
  211.     $data preg_replace('/\[hide:(\d+,)*' UGROUP '(,\d+)*].*?\[\/hide]/s'$hidden_text$data);
  212.     $data preg_replace('/\[hide:\d+(,\d+)*](.*?)\[\/hide]/s''\\2'$data);
  213.  
  214.     return $data;
  215. }
  216.  
  217. /**
  218.  * Получить идентификатор текущего документа
  219.  *
  220.  * @return int идентификатор текущего документа
  221.  */
  222. {
  223.     $_REQUEST['id'(isset($_REQUEST['id']&& is_numeric($_REQUEST['id'])) $_REQUEST['id'1;
  224.  
  225.     return $_REQUEST['id'];
  226. }
  227.  
  228. /**
  229.  * Формирование URL редиректа
  230.  *
  231.  * @return string URL
  232.  */
  233. function get_redirect_link($exclude '')
  234. {
  235.     $link 'index.php';
  236.  
  237.     if (!empty($_GET))
  238.     {
  239.         if ($exclude != '' && !is_array($exclude)) $exclude explode(','$exclude);
  240.  
  241.         $exclude['url';
  242.  
  243.         $params array();
  244.         foreach($_GET as $key => $value)
  245.         {
  246.             if (!in_array($key$exclude)) $params[@urlencode($key'=' @urlencode($value);
  247.         }
  248.  
  249.         if (sizeof($params)) $link .= '?' implode('&amp;'$params);
  250.     }
  251.  
  252.     return $link;
  253. }
  254.  
  255. /**
  256.  * Ссылка на главную страницу
  257.  *
  258.  * @return string ссылка
  259.  */
  260. function get_home_link()
  261. {
  262.     return HOST ABS_PATH;
  263. }
  264.  
  265. /**
  266.  * Ссылка на страницу версии для печати
  267.  *
  268.  * @return string ссылка
  269.  */
  270. function get_print_link()
  271. {
  272.     $link get_redirect_link('print');
  273.     $link .= (strpos($link'?')===false '?print=1' '&amp;print=1');
  274.  
  275.     return $link;
  276. }
  277.  
  278. function get_referer_link()
  279. {
  280.     $link false;
  281.     if (isset($_SERVER['HTTP_REFERER']))
  282.     {
  283.         $link parse_url($_SERVER['HTTP_REFERER']);
  284.         $link (trim($link['host']== $_SERVER['SERVER_NAME']);
  285.     }
  286.  
  287.     return ($link $_SERVER['HTTP_REFERER'get_home_link());
  288. }
  289.  
  290. function truncate_text($string$length 80$etc '...'$break_words false$middle false)
  291. {
  292.     if ($length == 0return '';
  293.  
  294.     if (strlen($string$length)
  295.     {
  296.         $length -= min($lengthstrlen($etc));
  297.         if (!$break_words && !$middle)
  298.         {
  299.             $string preg_replace('/\s+?(\S+)?$/'''substr($string0$length+1));
  300.         }
  301.  
  302.         if (!$middle)
  303.         {
  304.             return substr($string0$length$etc;
  305.         }
  306.         else
  307.         {
  308.             return substr($string0$length/2$etc substr($string-$length/2);
  309.         }
  310.     }
  311.     else
  312.     {
  313.         return $string;
  314.     }
  315. }
  316.  
  317. /**
  318.  * Swap named HTML entities with numeric entities.
  319.  *
  320.  * @see http://www.lazycat.org/software/html_entity_decode_full.phps
  321.  */
  322. function convert_entity($matches$destroy true)
  323. {
  324.     $table array(
  325.         'Aacute'   => '&#193;',  'aacute'   => '&#225;',  'Acirc'    => '&#194;',  'acirc'    => '&#226;',  'acute'    => '&#180;',
  326.         'AElig'    => '&#198;',  'aelig'    => '&#230;',  'Agrave'   => '&#192;',  'agrave'   => '&#224;',  'alefsym'  => '&#8501;',
  327.         'Alpha'    => '&#913;',  'alpha'    => '&#945;',  'amp'      => '&#38;',   'and'      => '&#8743;''ang'      => '&#8736;',
  328.         'Aring'    => '&#197;',  'aring'    => '&#229;',  'asymp'    => '&#8776;''Atilde'   => '&#195;',  'atilde'   => '&#227;',
  329.         'Auml'     => '&#196;',  'auml'     => '&#228;',  'bdquo'    => '&#8222;''Beta'     => '&#914;',  'beta'     => '&#946;',
  330.         'brvbar'   => '&#166;',  'bull'     => '&#8226;''cap'      => '&#8745;''Ccedil'   => '&#199;',  'ccedil'   => '&#231;',
  331.         'cedil'    => '&#184;',  'cent'     => '&#162;',  'Chi'      => '&#935;',  'chi'      => '&#967;',  'circ'     => '&#710;',
  332.         'clubs'    => '&#9827;''cong'     => '&#8773;''copy'     => '&#169;',  'crarr'    => '&#8629;''cup'      => '&#8746;',
  333.         'curren'   => '&#164;',  'dagger'   => '&#8224;''Dagger'   => '&#8225;''darr'     => '&#8595;''dArr'     => '&#8659;',
  334.         'deg'      => '&#176;',  'Delta'    => '&#916;',  'delta'    => '&#948;',  'diams'    => '&#9830;''divide'   => '&#247;',
  335.         'Eacute'   => '&#201;',  'eacute'   => '&#233;',  'Ecirc'    => '&#202;',  'ecirc'    => '&#234;',  'Egrave'   => '&#200;',
  336.         'egrave'   => '&#232;',  'empty'    => '&#8709;''emsp'     => '&#8195;''ensp'     => '&#8194;''Epsilon'  => '&#917;',
  337.         'epsilon'  => '&#949;',  'equiv'    => '&#8801;''Eta'      => '&#919;',  'eta'      => '&#951;',  'ETH'      => '&#208;',
  338.         'eth'      => '&#240;',  'Euml'     => '&#203;',  'euml'     => '&#235;',  'euro'     => '&#8364;''exist'    => '&#8707;',
  339.         'fnof'     => '&#402;',  'forall'   => '&#8704;''frac12'   => '&#189;',  'frac14'   => '&#188;',  'frac34'   => '&#190;',
  340.         'frasl'    => '&#8260;''Gamma'    => '&#915;',  'gamma'    => '&#947;',  'ge'       => '&#8805;''gt'       => '&#62;',
  341.         'harr'     => '&#8596;''hArr'     => '&#8660;''hearts'   => '&#9829;''hellip'   => '&#8230;''Iacute'   => '&#205;',
  342.         'iacute'   => '&#237;',  'Icirc'    => '&#206;',  'icirc'    => '&#238;',  'iexcl'    => '&#161;',  'Igrave'   => '&#204;',
  343.         'igrave'   => '&#236;',  'image'    => '&#8465;''infin'    => '&#8734;''int'      => '&#8747;''Iota'     => '&#921;',
  344.         'iota'     => '&#953;',  'iquest'   => '&#191;',  'isin'     => '&#8712;''Iuml'     => '&#207;',  'iuml'     => '&#239;',
  345.         'Kappa'    => '&#922;',  'kappa'    => '&#954;',  'Lambda'   => '&#923;',  'lambda'   => '&#955;',  'lang'     => '&#9001;',
  346.         'laquo'    => '&#171;',  'larr'     => '&#8592;''lArr'     => '&#8656;''lceil'    => '&#8968;''ldquo'    => '&#8220;',
  347.         'le'       => '&#8804;''lfloor'   => '&#8970;''lowast'   => '&#8727;''loz'      => '&#9674;''lrm'      => '&#8206;',
  348.         'lsaquo'   => '&#8249;''lsquo'    => '&#8216;''lt'       => '&#60;',   'macr'     => '&#175;',  'mdash'    => '&#8212;',
  349.         'micro'    => '&#181;',  'middot'   => '&#183;',  'minus'    => '&#8722;''Mu'       => '&#924;',  'mu'       => '&#956;',
  350.         'nabla'    => '&#8711;''nbsp'     => '&#160;',  'ndash'    => '&#8211;''ne'       => '&#8800;''ni'       => '&#8715;',
  351.         'not'      => '&#172;',  'notin'    => '&#8713;''nsub'     => '&#8836;''Ntilde'   => '&#209;',  'ntilde'   => '&#241;',
  352.         'Nu'       => '&#925;',  'nu'       => '&#957;',  'Oacute'   => '&#211;',  'oacute'   => '&#243;',  'Ocirc'    => '&#212;',
  353.         'ocirc'    => '&#244;',  'OElig'    => '&#338;',  'oelig'    => '&#339;',  'Ograve'   => '&#210;',  'ograve'   => '&#242;',
  354.         'oline'    => '&#8254;''Omega'    => '&#937;',  'omega'    => '&#969;',  'Omicron'  => '&#927;',  'omicron'  => '&#959;',
  355.         'oplus'    => '&#8853;''or'       => '&#8744;''ordf'     => '&#170;',  'ordm'     => '&#186;',  'Oslash'   => '&#216;',
  356.         'oslash'   => '&#248;',  'Otilde'   => '&#213;',  'otilde'   => '&#245;',  'otimes'   => '&#8855;''Ouml'     => '&#214;',
  357.         'ouml'     => '&#246;',  'para'     => '&#182;',  'part'     => '&#8706;''permil'   => '&#8240;''perp'     => '&#8869;',
  358.         'Phi'      => '&#934;',  'phi'      => '&#966;',  'Pi'       => '&#928;',  'pi'       => '&#960;',  'piv'      => '&#982;',
  359.         'plusmn'   => '&#177;',  'pound'    => '&#163;',  'prime'    => '&#8242;''Prime'    => '&#8243;''prod'     => '&#8719;',
  360.         'prop'     => '&#8733;''Psi'      => '&#936;',  'psi'      => '&#968;',  'quot'     => '&#34;',   'radic'    => '&#8730;',
  361.         'rang'     => '&#9002;''raquo'    => '&#187;',  'rarr'     => '&#8594;''rArr'     => '&#8658;''rceil'    => '&#8969;',
  362.         'rdquo'    => '&#8221;''real'     => '&#8476;''reg'      => '&#174;',  'rfloor'   => '&#8971;''Rho'      => '&#929;',
  363.         'rho'      => '&#961;',  'rlm'      => '&#8207;''rsaquo'   => '&#8250;''rsquo'    => '&#8217;''sbquo'    => '&#8218;',
  364.         'Scaron'   => '&#352;',  'scaron'   => '&#353;',  'sdot'     => '&#8901;''sect'     => '&#167;',  'shy'      => '&#173;',
  365.         'Sigma'    => '&#931;',  'sigma'    => '&#963;',  'sigmaf'   => '&#962;',  'sim'      => '&#8764;''spades'   => '&#9824;',
  366.         'sub'      => '&#8834;''sube'     => '&#8838;''sum'      => '&#8721;''sup'      => '&#8835;''sup1'     => '&#185;',
  367.         'sup2'     => '&#178;',  'sup3'     => '&#179;',  'supe'     => '&#8839;''szlig'    => '&#223;',  'Tau'      => '&#932;',
  368.         'tau'      => '&#964;',  'there4'   => '&#8756;''Theta'    => '&#920;',  'theta'    => '&#952;',  'thetasym' => '&#977;',
  369.         'thinsp'   => '&#8201;''THORN'    => '&#222;',  'thorn'    => '&#254;',  'tilde'    => '&#732;',  'times'    => '&#215;',
  370.         'trade'    => '&#8482;''Uacute'   => '&#218;',  'uacute'   => '&#250;',  'uarr'     => '&#8593;''uArr'     => '&#8657;',
  371.         'Ucirc'    => '&#219;',  'ucirc'    => '&#251;',  'Ugrave'   => '&#217;',  'ugrave'   => '&#249;',  'uml'      => '&#168;',
  372.         'upsih'    => '&#978;',  'Upsilon'  => '&#933;',  'upsilon'  => '&#965;',  'Uuml'     => '&#220;',  'uuml'     => '&#252;',
  373.         'weierp'   => '&#8472;''Xi'       => '&#926;',  'xi'       => '&#958;',  'Yacute'   => '&#221;',  'yacute'   => '&#253;',
  374.         'yen'      => '&#165;',  'Yuml'     => '&#376;',  'yuml'     => '&#255;',  'Zeta'     => '&#918;',  'zeta'     => '&#950;',
  375.         'zwj'      => '&#8205;''zwnj'     => '&#8204;'
  376.     );
  377.  
  378.     if (isset($table[$matches[1]])) return $table[$matches[1]];
  379.     else                            return $destroy '' $matches[0];
  380. }
  381.  
  382. /**
  383.  * Замена некоторых символов на их сущности
  384.  * замена и исправление HTML-тэгов
  385.  *
  386.  * @param unknown_type $s 
  387.  * @return unknown 
  388.  */
  389. function pretty_chars($s)
  390. {
  391.     return preg_replace(array("'©'"   "'®'"  "'<b>'i"  "'</b>'i"  "'<i>'i""'</i>'i""'<br>'i""'<br/>'i"),
  392.                         array('&copy;''&reg;''<strong>''</strong>''<em>'  '</em>'  '<br />' '<br />')$s);
  393. }
  394.  
  395. /**
  396.  * Транслитерация
  397.  *
  398.  * @param string $st строка для транслитерации
  399.  * @return string 
  400.  */
  401. function translit_string($st)
  402. {
  403. //    $st = htmlspecialchars_decode($st);
  404. //
  405. //    // Convert all named HTML entities to numeric entities
  406. //    $st = preg_replace_callback('/&([a-zA-Z][a-zA-Z0-9]{1,7});/', 'convert_entity', $st);
  407. //
  408. //    // Convert all numeric entities to their actual character
  409. //    $st = preg_replace('/&#x([0-9a-f]{1,7});/ei', 'chr(hexdec("\\1"))', $st);
  410. //    $st = preg_replace('/&#([0-9]{1,7});/e', 'chr("\\1")', $st);
  411. //
  412.     $st strtr ($starray('ье'=>'ye''ъе'=>'ye''ьи'=>'yi',  'ъи'=>'yi',
  413.                             'ъо'=>'yo''ьо'=>'yo''ё'=>'yo',   'ю'=>'yu',
  414.                             'я'=>'ya',  'ж'=>'zh',  'х'=>'kh',   'ц'=>'ts',
  415.                             'ч'=>'ch',  'ш'=>'sh',  'щ'=>'shch''ъ'=>'''ь'=>'')
  416.     );
  417.     $st strtr($st,'абвгдезийклмнопрстуфыэ',
  418.                     'abvgdeziyklmnoprstufye');
  419.  
  420.     return trim($st'-');
  421. }
  422.  
  423. /**
  424.  * Подготовка URL
  425.  *
  426.  * @param string $st 
  427.  * @return string 
  428.  */
  429. function prepare_url($st)
  430. {
  431.     $st strip_tags($st);
  432.  
  433.     $st strtolower($st);
  434.  
  435.     if (defined('TRANSLIT_URL'&& TRANSLIT_URLtranslit_string(trim($st));
  436.  
  437.     $st preg_replace(
  438.         array('/^[\/-]+|[\/-]+$|[^a-zа-яё0-9\/-]/''/--+/''/-*\/+-*/''/\/\/+/'),
  439.         array('-',                                  '-',     '/',         '/'),
  440.         $st
  441.     );
  442.  
  443.     return trim($st'-');
  444. }
  445.  
  446. /**
  447.  * Подготовка имени файла или директории
  448.  *
  449.  * @param string $st 
  450.  * @return string 
  451.  */
  452. function prepare_fname($st)
  453. {
  454.     $st strip_tags($st);
  455.  
  456.     $st strtolower($st);
  457.  
  458.     translit_string(trim($st));
  459.  
  460.     $st preg_replace(array('/[^a-zа-яё0-9-]/''/--+/')'-'$st);
  461.  
  462.     return trim($st'-');
  463. }
  464.  
  465. /**
  466.  * Формирование ЧПУ для документов
  467.  *
  468.  * @param string $s ссылка или текст с ссылками
  469.  * @return string 
  470.  */
  471. function rewrite_link($s)
  472. {
  473.     if (!REWRITE_MODEreturn $s;
  474.  
  475.     $doc_regex '/index.php(?:\?)id=(?:[0-9]+)&(?:amp;)*doc='.(TRANSLIT_URL '([a-z0-9\/-]+)' '([a-zа-яё0-9\/-]+)');
  476.     $page_regex '&(?:amp;)*(artpage|apage|page)=([{s}0-9]+)';
  477.  
  478.     $s preg_replace($doc_regex.$page_regex.$page_regex.$page_regex.'/'ABS_PATH.'$1/$2-$3/$4-$5/$6-$7'.URL_SUFF$s);
  479.     $s preg_replace($doc_regex.$page_regex.$page_regex.'/',             ABS_PATH.'$1/$2-$3/$4-$5'.URL_SUFF$s);
  480.     $s preg_replace($doc_regex.$page_regex.'/',                         ABS_PATH.'$1/$2-$3'.URL_SUFF$s);
  481.     $s preg_replace($doc_regex.'/',                                     ABS_PATH.'$1'.URL_SUFF$s);
  482.     $s preg_replace('/'.preg_quote(URL_SUFF'/').'[?|&](?:amp;)*print=1/''/print'.URL_SUFF$s);
  483.  
  484.     $mod_regex '/index.php(?:\?)module=(shop|forums|download)';
  485.  
  486.     $s preg_replace($mod_regex.'&(?:amp;)*page=([{s}]|\d+)/'ABS_PATH.'$1-$2.html'$s);
  487.     $s preg_replace($mod_regex.'&(?:amp;)*print=1/',          ABS_PATH.'$1-print.html'$s);
  488.     $s preg_replace($mod_regex.'(?!&)/',                      ABS_PATH.'$1.html'$s);
  489.  
  490.     return $s;
  491. }
  492.  
  493. function reportLog($meldung$typ 0$rub 0)
  494. {
  495.     global $AVE_DB;
  496.  
  497.     $AVE_DB->Query("
  498.         INSERT INTO " PREFIX "_log
  499.         SET
  500.             Id        = '',
  501.             Zeit    = '" time("',
  502.             IpCode    = '" addslashes($_SERVER['REMOTE_ADDR']"',
  503.             Seite    = '" addslashes($_SERVER['QUERY_STRING']"',
  504.             Meldung    = '" addslashes($meldung"',
  505.             LogTyp    = '" . (int)$typ "',
  506.             Rub        = '" . (int)$rub "'
  507.     ");
  508. }
  509.  
  510. function get_document_fields($document_id)
  511. {
  512.     global $AVE_DB;
  513.  
  514.     static $document_fields array();
  515.  
  516.     if (!is_numeric($document_id)) return false;
  517.  
  518.     if (!isset ($document_fields[$document_id]))
  519.     {
  520.         $fields false;
  521.  
  522.         $sql $AVE_DB->Query("
  523.             SELECT
  524.                 doc_field.Id,
  525.                 RubrikFeld,
  526.                 RubTyp,
  527.                 Inhalt,
  528.                 Redakteur,
  529.                 tpl_req,
  530.                 tpl_field
  531.             FROM
  532.                 " PREFIX "_document_fields AS doc_field
  533.             JOIN
  534.                 " PREFIX "_rubric_fields AS rub_field
  535.                     ON RubrikFeld = rub_field.Id
  536.             JOIN
  537.                 " PREFIX "_documents AS doc
  538.                     ON doc.Id = DokumentId
  539.             WHERE
  540.                 DokumentId = '" $document_id "'
  541.         ");
  542.  
  543.         while ($row $sql->FetchAssocArray())
  544.         {
  545.             $row['tpl_req_empty'(trim($row['tpl_req']== '');
  546.             $row['tpl_field_empty'(trim($row['tpl_field']== '');
  547.  
  548.             if ($row['Inhalt'=== '')
  549.             {
  550.                 $row['tpl_req']   preg_replace('/\[cp:not_empty](.*?)\[\/cp:not_empty]/si'''$row['tpl_req']);
  551.                 $row['tpl_req']   trim(str_replace(array('[cp:if_empty]','[/cp:if_empty]')''$row['tpl_req']));
  552.  
  553.                 $row['tpl_field'preg_replace('/\[cp:not_empty](.*?)\[\/cp:not_empty]/si'''$row['tpl_field']);
  554.                 $row['tpl_field'trim(str_replace(array('[cp:if_empty]','[/cp:if_empty]')''$row['tpl_field']));
  555.             }
  556.             else
  557.             {
  558.                 $row['tpl_req']   preg_replace('/\[cp:if_empty](.*?)\[\/cp:if_empty]/si'''$row['tpl_req']);
  559.                 $row['tpl_req']   trim(str_replace(array('[cp:not_empty]','[/cp:not_empty]')''$row['tpl_req']));
  560.  
  561.                 $row['tpl_field'preg_replace('/\[cp:if_empty](.*?)\[\/cp:if_empty]/si'''$row['tpl_field']);
  562.                 $row['tpl_field'trim(str_replace(array('[cp:not_empty]','[/cp:not_empty]')''$row['tpl_field']));
  563.             }
  564.  
  565.             $fields[$row['RubrikFeld']] $row;
  566.         }
  567.  
  568.         $document_fields[$document_id$fields;
  569.     }
  570.  
  571.     return $document_fields[$document_id];
  572. }
  573.  
  574. /**
  575.  * Формирование строки имени пользователя
  576.  * При наличии всех параметров пытается сформировать строку <b>Имя Фамилия</b>
  577.  * Если задать $short=1 - формирует короткую форму <b>И. Фамилия</b>
  578.  * Когда отсутствует информация о Имени или Фамилии пытается сформировать
  579.  * строку на основе имеющихся данных, а если данных нет вообще - выводит
  580.  * имя анонимного пользователя которое задается в основных настройках системы.
  581.  *
  582.  * @todo добавить параметр 'anonymous' в настройки
  583.  *
  584.  * @param string $login логин пользователя
  585.  * @param string $first_name имя пользователя
  586.  * @param string $last_name фамилия пользователя
  587.  * @param int $short {0|1} признак формирования короткой формы
  588.  * @return string 
  589.  */
  590. function get_username($login ''$first_name ''$last_name ''$short 1)
  591. {
  592.     if ($first_name != '' && $last_name != '')
  593.     {
  594.         if ($short == 1$first_name substr($first_name01'.';
  595.         return ucfirst(strtolower($first_name)) ' ' ucfirst(strtolower($last_name));
  596.     }
  597.     elseif ($first_name != '' && $last_name == '')
  598.     {
  599.         return ucfirst(strtolower($first_name));
  600.     }
  601.     elseif ($first_name == '' && $last_name != '')
  602.     {
  603.         return ucfirst(strtolower($last_name));
  604.     }
  605.     elseif ($login != '')
  606.     {
  607.         return ucfirst(strtolower($login));
  608.     }
  609.  
  610. //    return get_settings('anonymous');
  611.     return 'Anonymous';
  612. }
  613.  
  614. /**
  615.  * Возвращает имя пользователя по его идентификатору
  616.  *
  617.  * @param int $id - идентификатор пользователя
  618.  * @return string 
  619.  */
  620. function get_username_by_id($id)
  621. {
  622.     global $AVE_DB;
  623.  
  624.     static $users array();
  625.  
  626.     if (!isset($users[$id]))
  627.     {
  628.         $row $AVE_DB->Query("
  629.             SELECT
  630.                 UserName,
  631.                 Vorname,
  632.                 Nachname
  633.             FROM " PREFIX "_users
  634.             WHERE Id = '" . (int)$id "'
  635.         ")->FetchRow();
  636.  
  637.         $users[$id!empty($rowget_username($row->UserName$row->Vorname$row->Nachname1get_username();
  638.     }
  639.  
  640.     return $users[$id];
  641. }
  642.  
  643. /**
  644.  * Исправление форматирования даты
  645.  * Функцию можно использовать в шаблонах Smarty как модификатор
  646.  *
  647.  * @param string $string - дата отформатированная в соответствии с текущей локалью
  648.  * @param string $language - язык
  649.  * @return string 
  650.  */
  651. function pretty_date($string$language '')
  652. {
  653.     if ($language == '')
  654.     {
  655.         $language ACP $_SESSION['admin_language'$_SESSION['user_language'];
  656.     }
  657.  
  658.     $language strtolower($language);
  659.  
  660.     switch ($language)
  661.     {
  662.         case 'by':
  663.             break;
  664.  
  665.         case 'de':
  666.             break;
  667.  
  668.         case 'ru':
  669.             $pretty array(
  670.                 'Январь'     =>'января',      'Февраль'    =>'февраля',     'Март'    =>'марта',
  671.                 'Апрель'     =>'апреля',      'Май'        =>'мая',         'Июнь'    =>'июня',
  672.                 'Июль'       =>'июля',        'Август'     =>'августа',     'Сентябрь'=>'сентября',
  673.                 'Октябрь'    =>'октября',     'Ноябрь'     =>'ноября',      'Декабрь' =>'декабря',
  674.  
  675.                 'воскресенье'=>'Воскресенье''понедельник'=>'Понедельник''вторник' =>'Вторник',
  676.                 'среда'      =>'Среда',       'четверг'    =>'Четверг',     'пятница' =>'Пятница',
  677.                 'суббота'    =>'Суббота'
  678.             );
  679.             break;
  680.  
  681.         case 'ua':
  682.             break;
  683.  
  684.         default:
  685.             break;
  686.     }
  687.  
  688.     return (isset($prettystrtr($string$pretty$string);
  689. }
  690.  
  691. /**
  692.  * Формирование строки из случайных символов
  693.  *
  694.  * @param int $length количество символов в строке
  695.  * @param string $chars набор символов для формирования строки
  696.  * @return string сформированная строка
  697.  */
  698. function make_random_string($length 16$chars '')
  699. {
  700.     if ($chars == '')
  701.     {
  702.         $chars  'abcdefghijklmnopqrstuvwxyz';
  703.         $chars .= 'ABCDEFGHIJKLMNOPRQSTUVWXYZ';
  704.         $chars .= '~!@#$%^&*()-_=+{[;:/?.,]}';
  705.         $chars .= '0123456789';
  706.     }
  707.  
  708.     $clen strlen($chars1;
  709.  
  710.     $string '';
  711.     while (strlen($string$length$string .= $chars[mt_rand(0$clen)];
  712.  
  713.     return $string;
  714. }
  715.  
  716. function get_statistic($t=0$m=0$q=0$l=0)
  717. {
  718.     global $AVE_DB;
  719.  
  720.     $s '';
  721.  
  722.     if ($t$s .= "\n<br>Время генерации: " number_format(microtime_diff(START_MICROTIMEmicrotime())3','' '' сек.';
  723.     if ($m && function_exists('memory_get_peak_usage')) $s .= "\n<br>Пиковое значение " number_format(memory_get_peak_usage()/10240','' ''Kb';
  724. //    if ($q) $s .= "\n<br>Количество запросов: " . $AVE_DB->DBStatisticGet('count') . ' шт. за ' . number_format($AVE_DB->DBStatisticGet('time')*1000, 3, ',', '.') . ' мксек.';
  725. //    if ($l) $s .= style=\"text-align:left;padding-left:30px\"><small><ol>" . $AVE_DB->DBStatisticGet('list') . '</ol></small></div>';
  726.     if ($q$s .= "\n<br>Количество запросов: " $AVE_DB->DBProfilesGet('count'' шт. за ' $AVE_DB->DBProfilesGet('time'' сек.';
  727.     if ($l$s .= $AVE_DB->DBProfilesGet('list');
  728.  
  729.     return $s;
  730. }
  731.  
  732. function add_template_comment($tpl_source&$smarty)
  733. {
  734.     return "\n\n<!-- BEGIN SMARTY TEMPLATE " $smarty->_current_file " -->\n".$tpl_source."\n<!-- END SMARTY TEMPLATE " $smarty->_current_file " -->\n\n";
  735. }
  736.  
  737. /**
  738.  * Получения списка стран
  739.  *
  740.  * @param int $status статус стран входящих в список
  741.  *  <ul>
  742.  *  <li>1 - активные страны</li>
  743.  *  <li>0 - неактивные страны</li>
  744.  *  </ul>
  745.  *  если не указано возвращает список стран без учета статуса
  746.  * @return array 
  747.  */
  748. function get_country_list($status '')
  749. {
  750.     global $AVE_DB;
  751.  
  752.     $countries array();
  753.     $sql $AVE_DB->Query("
  754.         SELECT
  755.             Id,
  756.             LOWER(LandCode) AS LandCode,
  757.             LandName,
  758.             Aktiv,
  759.             IstEU
  760.         FROM " PREFIX "_countries
  761.         " (($status != ''"WHERE Aktiv = '" $status "'" ''"
  762.         ORDER BY LandName ASC
  763.     ");
  764.     while ($row $sql->FetchRow()) array_push($countries$row);
  765.  
  766.     return $countries;
  767. }
  768.  
  769. /**
  770.  * Отправка e-Mail
  771.  *
  772.  * @param string $to 
  773.  * @param string $text 
  774.  * @param string $subject 
  775.  * @param string $fromemail 
  776.  * @param string $from 
  777.  * @param string $content_type 
  778.  * @param string $attach 
  779.  * @param string $html 
  780.  */
  781. function send_mail($to$text$subject ''$fromemail ''$from ''$content_type ''$attach ''$html '')
  782. {
  783.     require_once(BASE_DIR '/class/class.phpmailer.php');
  784.     $PHPMailer new PHPMailer;
  785.  
  786.     $PHPMailer->ContentType (get_settings('mail_content_type'== 'text/plain' || $content_type == 'text''text/plain' 'text/html';
  787.     $PHPMailer->ContentType ($html == 1'text/html' $PHPMailer->ContentType;
  788.     $PHPMailer->From        ($fromemail != ''$fromemail get_settings('mail_from');
  789.     $PHPMailer->FromName    ($from != ''$from get_settings('mail_from_name');
  790.     $PHPMailer->Host        get_settings('mail_host');
  791.     $PHPMailer->Mailer      get_settings('mail_type');
  792.     $PHPMailer->AddAddress($to);
  793.     $PHPMailer->Subject     $subject;
  794.     $PHPMailer->Body        $text "\n\n" ($PHPMailer->ContentType == 'text/html' '' get_settings('mail_signature'));
  795.     $PHPMailer->Sendmail    get_settings('mail_sendmail_path');
  796.     $PHPMailer->WordWrap    get_settings('mail_word_wrap');
  797.  
  798.     if (!empty($attach))
  799.     {
  800.         if (is_array($attach))
  801.         {
  802.             foreach ($attach as $attachment)
  803.             {
  804.                 $PHPMailer->AddAttachment(BASE_DIR '/attachments/' $attachment);
  805.             }
  806.         }
  807.         else
  808.         {
  809.             $PHPMailer->AddAttachment(BASE_DIR '/attachments/' $attach);
  810.         }
  811.     }
  812.  
  813.     $PHPMailer->Send();
  814.  
  815. //    if (is_array($attach)) {
  816. //        foreach ($attach as $attachment) {
  817. //            @unlink(BASE_DIR . '/attachments/' . $attachment);
  818. //        }
  819. //    }
  820. //    else {
  821. //        @unlink(BASE_DIR . '/attachments/' . $attach);
  822. //    }
  823. }
  824.  
  825. ?>

Documentation generated on Fri, 04 Jun 2010 18:02:26 +0400 by phpDocumentor 1.4.3