mirror of
				https://github.com/avecms/AVE.cms.git
				synced 2025-10-30 13:26:38 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			797 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			797 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | ||
| 
 | ||
| /**
 | ||
|  * AVE.cms
 | ||
|  *
 | ||
|  * @package AVE.cms
 | ||
|  * @version 3.x
 | ||
|  * @filesource
 | ||
|  * @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru
 | ||
|  *
 | ||
|  * @license GPL v.2
 | ||
|  */
 | ||
| 
 | ||
| 
 | ||
| /**
 | ||
|  * Функция очищает строку от пробелов
 | ||
|  *
 | ||
|  * @param string
 | ||
|  * @return string
 | ||
|  */
 | ||
| if (!function_exists('str_nospace')){
 | ||
| 	function str_nospace($string)
 | ||
| 	{
 | ||
| 		return trim(str_replace(array(' ',"\r","\n","\t"),'',$string));
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| /**
 | ||
|  * Функция убирает двойные пробелы
 | ||
|  *
 | ||
|  * @param string $string данные
 | ||
|  * @return string
 | ||
|  */
 | ||
| if (!function_exists('full_trim')){
 | ||
| 	function full_trim($string)
 | ||
| 	{
 | ||
| 		return trim(preg_replace('/\s{2,}/', ' ', $string));
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| /**
 | ||
|  * Функция перевода из 1251 в UTF8
 | ||
|  *
 | ||
|  * @param string $string данные
 | ||
|  * @return string
 | ||
|  */
 | ||
| if (!function_exists('utf8')){
 | ||
| 	function utf8($string){
 | ||
| 		$string = iconv('windows-1251', 'utf-8', $string);
 | ||
| 		return $string;
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| /**
 | ||
|  * Коллекционируем уникальные значения по типу
 | ||
|  *
 | ||
|  * @param string $type
 | ||
|  * @param null   $val
 | ||
|  * @return array
 | ||
|  */
 | ||
| if (!function_exists('collect_data')){
 | ||
| 	function collect_data($type='', $val = null)
 | ||
| 	{
 | ||
| 		static $arr = array();
 | ||
| 		if(empty($type)) return false;
 | ||
| 		if($val&& !trim($type) == ''){
 | ||
| 			if(!is_array($val))$val = array($val);
 | ||
| 			foreach($val as $value){
 | ||
| 				if(!isset($arr[$type])) $arr[$type] = array();
 | ||
| 				if(!in_array($value, $arr[$type]))
 | ||
| 					$arr[$type][] = $value;
 | ||
| 			}
 | ||
| 		}
 | ||
| 		return isset($arr[$type]) ? $arr[$type] : false;
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| /**
 | ||
|  * 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 код
 | ||
|  *   - защита от подделок типа: "<<fake>script>alert('hi')</</fake>script>"
 | ||
|  *
 | ||
|  * @param   string  $s
 | ||
|  * @param   array   $allowable_tags	 Массив тагов, которые не будут вырезаны
 | ||
|  *									  Пример: 'b' -- таг останется с атрибутами, '<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)
 | ||
| 	{
 | ||
| 		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')
 | ||
| 	{
 | ||
| 		$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 <aidan@php.net>, Arpad Ray <arpad@php.net>
 | ||
|  * @link		http://php.net/function.array_combine
 | ||
|  * @author	  Aidan Lister <aidan@php.net>
 | ||
|  * @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;
 | ||
| 	}
 | ||
| 
 | ||
| 	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;
 | ||
| 	}
 | ||
| 
 | ||
| 	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);
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| /**
 | ||
|  * post()
 | ||
|  *
 | ||
|  * @param mixed $var
 | ||
|  * @return string
 | ||
|  */
 | ||
| if (!function_exists('post')){
 | ||
| 	function post($var)
 | ||
| 	{
 | ||
| 		return (isset($_POST[$var])) ? $_POST[$var] : '';
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| /**
 | ||
|  * get()
 | ||
|  *
 | ||
|  * @param mixed $var
 | ||
|  * @return string
 | ||
|  */
 | ||
| if (!function_exists('get')){
 | ||
| 	function get($var)
 | ||
| 	{
 | ||
| 		return (isset($_GET[$var])) ? $_GET[$var] : '';
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| /**
 | ||
|  * 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)
 | ||
| 	{
 | ||
| 		$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;
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| /**
 | ||
|  * 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));
 | ||
| 
 | ||
| 			if (strlen($string) <= $trim) {
 | ||
| 				return $string;
 | ||
| 			}
 | ||
| 
 | ||
| 			$out = "";
 | ||
| 			foreach (explode(' ', trim($string)) as $val) {
 | ||
| 				$out .= $val . ' ';
 | ||
| 
 | ||
| 				if (strlen($out) >= $trim) {
 | ||
| 					$out = trim($out);
 | ||
| 					return (strlen($out) == strlen($string)) ? $out : $out . $end_char;
 | ||
| 				}
 | ||
| 			}
 | ||
| 		}
 | ||
| 		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)
 | ||
| 		{
 | ||
| 			$length -= min($length, mb_strlen($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 $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)
 | ||
| 		{
 | ||
| 			return $str;
 | ||
| 		}
 | ||
| 
 | ||
| 		$out = "";
 | ||
| 		foreach (explode(' ', trim($str)) as $val)
 | ||
| 		{
 | ||
| 			$out .= $val . ' ';
 | ||
| 
 | ||
| 			if (strlen($out) >= $n)
 | ||
| 			{
 | ||
| 				$out = trim($out);
 | ||
| 				return (strlen($out) == strlen($str))
 | ||
| 					? $out
 | ||
| 					: $out . $end_char;
 | ||
| 			}
 | ||
| 		}
 | ||
| 		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)
 | ||
| 	{
 | ||
| 		$string = stristr($string, $start);
 | ||
| 		$doend = stristr($string, $end);
 | ||
| 		return substr($string, strlen($start), -strlen($doend));
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| /**
 | ||
|  * stripExt()
 | ||
|  *
 | ||
|  * @param mixed $filename
 | ||
|  * @return string
 | ||
|  */
 | ||
| if (!function_exists('stripExt')){
 | ||
| 	function stripExt($filename)
 | ||
| 	{
 | ||
| 		if (strpos($filename, ".") === false) {
 | ||
| 			return ucwords($filename);
 | ||
| 		} else
 | ||
| 			return substr(ucwords($filename), 0, strrpos($filename, "."));
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| /**
 | ||
|  * Очиста текста
 | ||
|  *
 | ||
|  * @param mixed $text
 | ||
|  * @return string
 | ||
|  */
 | ||
| if (!function_exists('cleanOut')){
 | ||
| 	function cleanOut($text)
 | ||
| 	{
 | ||
| 		$text = strtr($text, array(
 | ||
| 			'\r\n' => "",
 | ||
| 			'\r' => "",
 | ||
| 			'\n' => ""));
 | ||
| 		$text = html_entity_decode($text, ENT_QUOTES, 'UTF-8');
 | ||
| 		$text = str_replace('<br>', '<br />', $text);
 | ||
| 		return stripslashes($text);
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| /**
 | ||
|  * Сравнение двух чисел
 | ||
|  *
 | ||
|  * @param mixed $float1
 | ||
|  * @param mixed $float2
 | ||
|  * @param string $operator
 | ||
|  * @return bool
 | ||
|  */
 | ||
| if (!function_exists('compareFloatNumbers')){
 | ||
| 	function compareFloatNumbers($float1, $float2, $operator='=')
 | ||
| 	{
 | ||
| 		// 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
 | ||
| 			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
 | ||
| 			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()");
 | ||
| 		}
 | ||
| 
 | ||
| 		return false;
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| /**
 | ||
|  * Поиск значения по массиву
 | ||
|  *
 | ||
|  * @param $array
 | ||
|  * @param $key
 | ||
|  * @param bool $value
 | ||
|  * @return bool
 | ||
|  */
 | ||
| if (!function_exists('searchforValue')){
 | ||
| 	function searchforValue($array, $key, $value)
 | ||
| 	{
 | ||
| 		if($array) {
 | ||
| 			foreach ($array as $val) {
 | ||
| 				if ($val->$key == $value) {
 | ||
| 					return true;
 | ||
| 				}
 | ||
| 			}
 | ||
| 		}
 | ||
| 		return false;
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| /**
 | ||
|  * Поиск в массиве
 | ||
|  *
 | ||
|  * @param mixed $array
 | ||
|  * @param mixed $val1
 | ||
|  * @param mixed $val2
 | ||
|  * @return array|int
 | ||
|  */
 | ||
| if (!function_exists('findInArray')){
 | ||
| 	function findInArray($array, $val1, $val2)
 | ||
| 	{
 | ||
| 		if($array) {
 | ||
| 			$result = array();
 | ||
| 			foreach ($array as $val) {
 | ||
| 				if ($val->$val1 == $val2) {
 | ||
| 					$result[] = $val;
 | ||
| 				}
 | ||
| 			}
 | ||
| 			return ($result) ? $result : 0;
 | ||
| 		}
 | ||
| 		return 0;
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| /**
 | ||
|  * Скачать файл
 | ||
|  *
 | ||
|  * @param $fileLocation
 | ||
|  * @param $fileName
 | ||
|  * @param int $maxSpeed
 | ||
|  * @return bool
 | ||
|  */
 | ||
| if (!function_exists('downloadFile')){
 | ||
| 	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);
 | ||
| 		}
 | ||
| 
 | ||
| 		if ($size == 0) {
 | ||
| 			die('Zero byte file! Aborting download');
 | ||
| 		}
 | ||
| 
 | ||
| 		$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);
 | ||
| 		}
 | ||
| 		fclose($fp);
 | ||
| 
 | ||
| 		exit;
 | ||
| 
 | ||
| 		return ((connection_status() == 0) and !connection_aborted());
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| 	/**
 | ||
| 	 * Конвертируем hex color в decimal color
 | ||
| 	 * @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;
 | ||
| 		}
 | ||
| 
 | ||
| 		return array(	"r" => hexdec(mb_substr($hexcolor, 1, 2)),
 | ||
| 						"g" => hexdec(mb_substr($hexcolor, 3, 2)),
 | ||
| 						"b" => hexdec(mb_substr($hexcolor, 5, 2)));
 | ||
| 	}
 | ||
| }
 | ||
| ?>
 |