<?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.'"> ';
}elseif($img_title == true) {
print '<img title="'.$img_title.'" src="'.$img.'"> ';
}
}
/*
* Функция Оброботка текста (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"> Система';
}else {
return '<img src="../template/icon/users/system.png"> Система';
}
}
/*
* Функция простого использование 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('|', ''', '$', '\', '^', '%', '`', '', '', '', '');
$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);
}
}
?>