View file system/inc/classes/system_core.class.php

File size: 16.64Kb
<?php
class SHCMS_core
{
	/**
	 * @var  string  Набор символов входных и выходных
	 */
	public static $charset = 'utf-8';
	
	/**
	 * @var  string  имя сервера SHCMS размещается на
	 */
	public static $server_name = '';
	
	/**
	 * Отменяет эффекты `register_globals` настройки PHP при помощи сброса
     * Все глобальные varibles за исключением умолчанию супер глобальных прогнозов (ГЦП и др.),
	 * @return  void
	 */
	public static function globals()
	{
		if (isset($_REQUEST['GLOBALS']) OR isset($_FILES['GLOBALS']))
		{
			// Предотвращения вредоносных атак перегрузки GLOBALS
			echo "Глобальная переменная атаки определяется перегрузка! Запрос прерван.\n";

			// Выход с ошибкой статус
			exit(1);
		}

		// Получить переменную имена всех глобальных
		$global_variables = array_keys($GLOBALS);

		// Выньте стандартный глобальные переменные из списка
		$global_variables = array_diff($global_variables, array(
			'_COOKIE',
			'_ENV',
			'_GET',
			'_FILES',
			'_POST',
			'_REQUEST',
			'_SERVER',
			'_SESSION',
			'GLOBALS',
		));

		foreach ($global_variables as $name)
		{
			// Верните в исходное положение глобальной переменной, эффективно отключение register_globals
			unset($GLOBALS[$name]);
		}
	}
	
	/**
	 * Гости на сайте	
	 * @return  void
	 */
	public static function online_guest() {
	global $user_id,$vi_shcms,$browsers;
		//Выводим информацию о госте
          $sys = mysql_fetch_array(mysql_query("SELECT * FROM `online_guest` WHERE `ip` = '$vi_shcms'"));
		  $cmp = ua_browser::checkForBrowserVersion($browsers, array(
			'Opera' => array(9, 4),
			'Firefox' => array(3, 0),
			'Safari' => array(528, 16),
			'Chrome' => array(2, 0),
			'Internet Explorer' => array(7, 0)
		));
		if (is_null($browsers['name'])) {
		    echo 'Браузер не определен';
	        return;
		}
       $ua = $browsers['name'] . ' ' . join('.', array_filter($browsers['version'], create_function('$x', 'return !is_null($x);')));
       if($user_id == false) {
       if($sys['ip'] == $vi_shcms) {
		//Обновляем гостя в базе
          mysql_query("UPDATE `online_guest` SET `ip`='$vi_shcms',`time`='".time()."',`ua`='$ua' WHERE `ip` = $sys[ip]");
        }
       else
        {
		//Добавляем гостя в базу
          mysql_query("INSERT INTO `online_guest` (`ip`,`time`,`ua`) VALUES ('$vi_shcms','".time()."',`ua`='$ua')");
        }
       }
	   //Удаление гостей
          mysql_query("DELETE FROM `online_guest` WHERE `time` < '".(time()-600)."' AND `ip`='$vi_shcms'");
	
	
	}
	/*
	 * @var  string Ручной вывод классов include_once(@name)
	*/	
	public static function manual_output() {
	include_once(H.'system/inc/library/uploads.class.php');
	
	}
	
	/**
	 * Транслит (с RUSSIAN / на ENGLISH)
	 * @return  void
	 */
	public static function Upload_end($str) {
    $tr = array(
        "А"=>"A","Б"=>"B","В"=>"V","Г"=>"G",
        "Д"=>"D","Е"=>"E","Ж"=>"J","З"=>"Z","И"=>"I",
        "Й"=>"Y","К"=>"K","Л"=>"L","М"=>"M","Н"=>"N",
        "О"=>"O","П"=>"P","Р"=>"R","С"=>"S","Т"=>"T",
        "У"=>"U","Ф"=>"F","Х"=>"H","Ц"=>"TS","Ч"=>"CH",
        "Ш"=>"SH","Щ"=>"SCH","Ъ"=>"","Ы"=>"YI","Ь"=>"",
        "Э"=>"E","Ю"=>"YU","Я"=>"YA","а"=>"a","б"=>"b",
        "в"=>"v","г"=>"g","д"=>"d","е"=>"e","ж"=>"j",
        "з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
        "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
        "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",
        "ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y",
        "ы"=>"yi","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya"," " =>"_"
    );
    return strtr($str,$tr);
}

	/*
	 * @var  Функция легкой прописки ссылок
	 * string  $link_name = Название ссылки
	 * string  $link = URL название
	 * string  $link_title = Комментария к ссылке
	*/	
    public static function link_shcms($link_name,$link,$link_title = false) {
	    if($link_title == false) {
	        print '<a href="'.$link.'">'.$link_name.'</a>';
		}elseif($link_title == true) {
	        print '<a title="'.$link_title.'" href="'.$link.'">'.$link_name.'</a>';		
		}
	
	}
	
	/*
	 * @var  string Функция выделения текста из поиска
	*/	
    public static function search_text($search, $txt) {
        $r = preg_split( '((>)|(<))', $txt, - 1, PREG_SPLIT_DELIM_CAPTURE );
            for($i = 0; $i < count( $r ); $i ++) {
                if( $r[$i] == "<" ) {
                    $i ++;
                    continue;
                }
                    $r[$i] = preg_replace( "#($search)#i", "<span style='background-color:yellow;'><font color='red'>\\1</font></span>", $r[$i] );
            }
        return join( "", $r );
    }
	/*
	 * @var  Функция обработки иконок
	 * string  $img = IMG название
	 * string  $img_title = Комментария к иконке
	*/		
	public static function img_shcms($img,$img_title){
	    if($img_title == false) {
	        print '<img src="'.$img.'">&nbsp;';
		}elseif($img_title == true) {
	        print '<img title="'.$img_title.'" src="'.$img.'">&nbsp;';
		}	
	}
	/*
	 * Функция Оброботка текста  (0 - 999)
	 * string format()
	*/	
	public static function format($name) {
        $f1 = strrpos($name, ".");
        $f2 = substr($name, $f1 + 1, 999);
        $fname = strtolower($f2);
    return $fname;
    }
	/*
	 * Функция Оброботка текста  (999 - 0)
	 * string format()
	*/	
	public static function format2($name1) {
        $f12 = strrpos($name1, ".");
        $f21 = substr($name1, $f12 - 999, -4);
        $fname12 = strtolower($f21);
    return $fname12;
    }
	/*
	 * Функция Системного ника
	 * string system_nick()
	*/	
	function system_nick($image = ''){
        if($image == true) {
            echo '<img src="../template/icon/users/system.png">&nbsp;Система';
        }else {
            return  '<img src="../template/icon/users/system.png">&nbsp;Система';
        }
    }
	/*
	 * Функция простого использование printf()
	 * string prinf_array()
	*/
	public static function printf_array($format, $arr) { 
        return call_user_func_array('printf', array_merge((array)$format, $arr)); 
    }
 	/*
	 * Функция отсчета времени ()
	 * string prinf_array()
	*/   
	public static function countdown($timediff){
        $oneMinute=60;
        $oneHour=60*60;
        $oneDay=60*60*24;
            $dayfield = floor($timediff/$oneDay);
            $hourfield = floor(($timediff-$dayfield*$oneDay)/$oneHour);
            $minutefield = floor(($timediff-$dayfield*$oneDay-$hourfield*$oneHour)/$oneMinute);
            $secondfield = floor(($timediff-$dayfield*$oneDay-$hourfield*$oneHour-$minutefield*$oneMinute));
            $time_1="$hourfield ч. $minutefield м. $secondfield c";
        return $time_1;
    }
    /**
     * Фильтрация строк
     * @param string $str
     */
    public static function filtering($str) {
			$check = htmlspecialchars(mysql_real_escape_string($check));
			$search = array('|', '\'', '$', '\\', '^', '%', '`', "\0", "\x00", "\x1A", "‮⁄∩");
			$replace = array('&#124;', '&#39;', '&#36;', '&#92;', '&#94;', '&#37;', '&#96;', '', '', '', '');
			$msg = str_replace($search, $replace, $msg);
			$msg = stripslashes(trim($msg));
		return $check;
    }
	
    /**
     * Панель HTML тэгов 
	 * @var $javascript
     * @param string $textarea
     */
	public static function panelhtml() {
		$panelhtml = '<script language="JavaScript" type="text/javascript"> 
					function tag(text1, text2) { 
						if ((document.selection)) { 
							document.form.msg.focus(); 
							document.form.document.selection.createRange().text = text1+document.form.document.selection.createRange().text+text2; 
						} else if(document.forms[\'form\'].elements[\'text\'].selectionStart!=undefined) { 
							var element = document.forms[\'form\'].elements[\'text\']; 
							var str = element.value; 
							var start = element.selectionStart; 
							var length = element.selectionEnd - element.selectionStart; 
							element.value = str.substr(0, start) + text1 + str.substr(start, length) + text2 + str.substr(start + length); 
						} else document.form.msg.value += text1+text2; 
					}
				</script>';
		$panelhtml.='<div class="code_textarea">
      				    <a href="#form" onclick="javascript:tag(\'[b]\', \'[/b]\');"><span title="Текст жирным шрифтом">B</span></a>
                        <a href="#form" onclick="javascript:tag(\'[i]\', \'[/i]\');"> <span title="Текст курсивом">I</span></a>
                        <a title="sa" href="#form" onclick="javascript:tag(\'[u]\', \'[/u]\');"><span title="Подчеркнутый текст">U</span></a>
                        <a href="#form" onclick="javascript:tag(\'[s]\', \'[/s]\');" title="Зачеркнутый текст"><span title="Зачеркнутый текст">S</span></a>
                        <a href="#form" onclick="javascript:tag(\'[img]\', \'[/img]\');"><span title="Вставка картинки">IMG</span></a>
                        <a href="#form" onclick="javascript:tag(\'[php]\', \'[/php]\');"><span title="Вставка php кода">PHP</span></a>
                        <a href="#form" onclick="javascript:tag(\'[url=http://]\', \'[/url]\');"><span title="Вставка ссылки">URL</span></a>
                        <a href="#form" onclick="javascript:tag(\'[hide]\', \'[/hide]\');"><span title="Скрытый текст">HIDE</span></a>
	                    <a href="#form" onclick="javascript:tag(\'[spoiler]\', \'[/spoiler]\');"><span title="Спрятать содержимое в спойлер">SPOILER</span></a>
                   </div>';
			return $panelhtml;
    }

    /**
     * Функция определяет возрост пользователя
	 * @param getAge(год,месяц,день);
     */	
	public static function getAge($y, $m, $d) {
	 	if($m > date('m') || $m == date('m') && $d > date('d'))
            return (date('Y') - $y - 1);
	 	else
            return (date('Y') - $y);
    }
    /**
     * Функция поиска пользователей на сайте
	 * @var search users;
     */		
	public static function search($query) { 
	global $timedate;
    $query = trim($query); 
    $query = mysql_real_escape_string($query);
    $query = htmlspecialchars($query);

    if (!empty($query)) 
    { 
        if (strlen($query) < 3) {
            $text = '<p>Слишком короткий поисковый запрос.</p>';
        } else if (strlen($query) > 128) {
            $text = '<p>Слишком длинный поисковый запрос.</p>';
        } else { 
            $q = "SELECT `id`,`name`, `login`, `email`,`datelast`
                  FROM `users` WHERE `name` LIKE '%$query%'
                  OR `login` LIKE '%$query%' OR `email` LIKE '%$query%'";

            $result = mysql_query($q);

            if (mysql_affected_rows() > 0) { 
                $row = mysql_fetch_assoc($result); 
                $num = mysql_num_rows($result);

                $text = '<div class="maintitle">По запросу <b>'.$query.'</b> найдено совпадений: '.$num.'</div><div class="maintext">';
                       
                do {
                    // Делаем запрос, получающий пользователей
                    $q1 = "SELECT * FROM `users` WHERE `id` = '$row[id]'";
                    $result1 = mysql_query($q1);

                    if (mysql_affected_rows() > 0) {
                        $row1 = mysql_fetch_assoc($result1);
                    }

                    $text .= '<div class="posts"><strong><a href="'.DIR_SHCMS.'change_view.php?id='.$row['id'].'">'.$row['login'].'</strong></a><br/>Последний визит: '.$timedate->times($row['datelast']).'</div>';
                } while ($row = mysql_fetch_assoc($result)); 
            $text .='</div>';
			} else {
                $text = '<p>По вашему запросу ничего не найдено.</p>';
            }
        } 
    } else {
        $text = '<p>Задан пустой поисковый запрос.</p>';
    }

    return $text; 
}
    /**
     * функция обработки операционной системы и поисковые системы
	 * @var search users;
     */	
	public static function GET_OS($userAgent) {
		// Создадим список операционных систем
		$oses = array (
        	'iPhone' => '(iPhone)',
			'Android' => '(android)',
			'iPad' => '(iPad)',
			'Blackberry OS' => '(rim)',
  	    	'Windows 3.11' => 'Win16',
   		    'Windows 95' => '(Windows 95)|(Win95)|(Windows_95)',
        	'Windows 98' => '(Windows 98)|(Win98)',
   	    	'Windows 2000' => '(Windows NT 5.0)|(Windows 2000)',
        	'Windows XP' => '(Windows NT 5.1)|(Windows XP)',
        	'Windows 2003' => '(Windows NT 5.2)',
        	'Windows Vista' => '(Windows NT 6.0)|(Windows Vista)',
        	'Windows 7' => '(Windows NT 6.1)|(Windows 7)',
			'Windows 8' => '(Windows NT 6.2)|(Windows 8)',
        	'Windows NT 4.0' => '(Windows NT 4.0)|(WinNT4.0)|(WinNT)|(Windows NT)',
        	'Windows ME' => 'Windows ME',
        	'Open BSD'=>'OpenBSD',
        	'Sun OS'=>'SunOS',
        	'Linux'=>'(Linux)|(X11)',
        	'Safari' => '(Safari)',
        	'Macintosh'=>'(Mac_PowerPC)|(Macintosh)',
        	'QNX'=>'QNX',
        	'BeOS'=>'BeOS',
        	'OS/2'=>'OS/2',
			'Google' => '(Googlebot)',
			'Yahoo! | AOL' => '(Slurp) | (Yahoo! Slurp) | (Yammybot)',
			'MSN | Live' => '(MSNBot)',
			'Ask' => '(Teoma)',
			'AltaVista' => '(Scooter)',
			'Alexa' => '(ia_archiver)',
			'Lycos' => '(Lycos)',
			'Яндекс' => '(Yandex)',
			'Рамблер' => '(StackRambler)',
			'Мэйл.ру' => '(Mail.Ru)',
			'Aport' => '(Aport)',
        	'Search Bot'=>'(nuhk)|(Openbot)|(Slurp/cat)'
		);  
		foreach($oses as $os=>$pattern){
			if(eregi($pattern, $userAgent)) {
				return $os;
			}
		}
		return 'Не определен';
	}
    /**
     * Это регулярное выражение извлекает все электронные письма из строки:
	 * @var extract_emails;
	 * print_r(SHCMS_core::extract_emails($text));
     */	
	public static function extract_emails($str){
            
            $regexp = '/([a-z0-9_\.\-])+\@(([a-z0-9\-])+\.)+([a-z0-9]{2,4})+/i';
            preg_match_all($regexp, $str, $m);
 
        return isset($m[0]) ? $m[0] : array();
    }
	
    /**
     * Удаление ссылок из текста
	 * @var Removing_links;
	 * echo(SHCMS_core::removing_links($text));
     */		
	public static function removing_links($string_text) {
            $removing = $string_text;
            $removing = preg_replace('/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i', '', $removing);
        
		return $removing;
	
	}
	
    /**
     * Определяет подозрительных пользователей
	 * @var suspicion;
	 * echo(SHCMS_core::suspicion($str));
     */			
	public static function suspicion($str) {
        // три и более согласных подряд
        if (preg_match('#[БВГДЖЗКЛМНПРСТФХЦЧШЩBCDFGHJKLMNPQRSTVXZ]{4,}#ui', $str, $m)) {
            return $m[0];
        }
        // повторение одного символа или выражения более 3-х раз подряд
        if (preg_match('#([[:alpha:]]+)\1{2,}#ui', $str)) {
            return $m[0];
        }

        return false;
    }
    /**
     * Определяет ip  адреса
	 * @var get_ip;
	 * echo(SHCMS_core::get_ip());
     */				
	public static function get_ip() {
		$ip_split = explode( ".", $_SERVER['REMOTE_ADDR'] );
		$_IP = array();
	
			for($i = 0; $i < 4; $i++) {
				$_IP[] = intval($ip_split[$i]);
			}
	
		return implode(".", $_IP);
	}
    
}
?>