Файл: core/functions.php
Строк: 361
<?PHP
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
СИСТЕМНЫЕ ФУНКЦИИ
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
/**
* проверяем, что функция mb_ucfirst не объявлена
* и включено расширение mbstring (Multibyte String Functions)
*/
if (!function_exists('mb_ucfirst') && extension_loaded('mbstring'))
{
/**
* mb_ucfirst - преобразует первый символ в верхний регистр
* @param string $str - строка
* @param string $encoding - кодировка, по-умолчанию UTF-8
* @return string
*/
function mb_ucfirst($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 check($text){
return trim(htmlspecialchars(mysql_escape_string($text)));
}
/*Функция для генерации случайной строки*/
function generateCode($length=6)
{
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPRQSTUVWXYZ0123456789";
$code = "";
$clen = strlen($chars) - 1;
while (strlen($code) < $length) {
$code .= $chars[mt_rand(0,$clen)];
}
return $code;
}
/*Обработка времени*/
function time_autoformat($ts, $full = false){
if($full)
{
$d = ''; $t = $ts;
$d1 = (floor($t/31622400)>0) ? floor($t/31622400) : '';
$d2 = (floor($t/2635200)>0) ? floor($t/2635200) % 12 : '';
$d3 = (floor($t/86400)>0) ? floor($t/86400) % 30 : '';
$d4 = (floor($t/3600)>0) ? floor($t/3600) % 24 : '';
$d5 = floor($t/60) % 60;
if($d1) $d .= sklonen($d1,'год ','года ','лет ');
if($d2) $d .= sklonen($d2,'месяц ','месяца ','месяцев ');
if($d3) $d .= sklonen($d3,'день ','дня ','дней ');
if($d4) $d .= sklonen($d4,'час ','часа ','часов ');
if($d5) $d .= sklonen($d5,'минута ','минуты ','минут ');
return $d;
} else {
$sec = $ts;
$min = round($ts/60);
$hour = round($ts/3600);
$days = round($ts/86400);
$month = round($ts/2635200);
$years = round($ts/31622400);
if($sec<60) return $sec.' сек.';
if($min<60) return $min.' мин.';
if($hour<24) return sklonen($hour,'час','часа','часов',false);
if($days<31) return sklonen($days,'день','дня','дней',false);
if($month<12) return sklonen($month,'месяц','месяца','месяцев',false);
else return sklonen($years,'год','года','лет',false);
}
}
function sklonen($n,$s1,$s2,$s3, $b = false)
{
$m = $n % 10; $j = $n % 100;
if($m==1) $s = $s1;
if($m>=2 && $m<=4) $s = $s2;
if($m==0 || $m>=5 || ($j>=10 && $j<=20)) $s = $s3;
if($b) $n = '<b>'.$n.'</b>';
return $n.' '.$s;
}
/// Пример echo time_autoformat(1234, 1);
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
# Отправка внутренней почты
function mail_go($id_us, $content, $who=FALSE)
{
global $user;
if($who == 1) $who = 1;
else $who = $user['id'];
/*[ДЛЯ ПЕРВОГО ЮЗЕРА] Добавляем сообщение*/
mysql_query("INSERT INTO `mail` SET `adresat`='".(int)$who."', `kto`='".(int)$who."', `komu`='".(int)$id_us."', `content`='".$content."', `data`='".date('d.m.Y в H:i')."', `time`='".time()."'");
/*[ДЛЯ ВТОРОГО ЮЗЕРА] Добавляем сообение*/
mysql_query("INSERT INTO `mail` SET `adresat`='".(int)$id_us."', `kto`='".(int)$who."', `komu`='".(int)$id_us."', `content`='".$content."', `data`='".date('d.m.Y в H:i')."', `time`='".time()."'");
/*[ДЛЯ ПЕРВОГО ЮЗЕРА] Обновляем время в контакте (что бы последните отвеченные были в верху) или добавляем контакт*/
if(mysql_result(mysql_query("SELECT COUNT(*) FROM `mail_kontakt` WHERE `us`='".(int)$who."' AND `kontakt`='".(int)$id_us."'"), 0))
{
mysql_query ("Update `mail_kontakt` set `time` = '".time()."' WHERE `us`='".(int)$who."' AND `kontakt`='".(int)$id_us."'");
}
else
{
mysql_query("INSERT INTO `mail_kontakt` SET `us`='".(int)$who."', `kontakt`='".(int)$id_us."', `time`='".time()."'");
}
/*[ДЛЯ ВТОРОГО ЮЗЕРА] Обновляем время в контакте (что бы последните отвеченные были в верху) или добавляем контакт*/
if(mysql_result(mysql_query("SELECT COUNT(*) FROM `mail_kontakt` WHERE `us`='".(int)$id_us."' AND `kontakt`='".(int)$who."'"), 0))
{
mysql_query ("Update `mail_kontakt` set `time` = '".time()."' WHERE `us`='".(int)$id_us."' AND `kontakt`='".(int)$who."'");
}
else
{
mysql_query("INSERT INTO `mail_kontakt` SET `us`='".(int)$id_us."', `kontakt`='".(int)$who."', `time`='".time()."'");
}
}
/*Меню навигиции*/
function page_nav($page,$total,$cssClass,$dopLink)
{
if ($page != 1) $pervpage = '<a href= ?'.$dopLink.'page=1><button class="button_navig"><<</button></a>
<a href= ?'.$dopLink.'page='. ($page - 1) .'><button class="button_navig"><</button></a>';
// Проверяем нужны ли стрелки вперед
if ($page != $total) $nextpage = ' <a href= ?'.$dopLink.'page='. ($page + 1) .'><button class="button_navig">></button></a>
<a href= ?'.$dopLink.'page=' .$total. '><button class="button_navig">>></button></a>';
// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 2 > 0) $page2left = '<a href= ?'.$dopLink.'page='. ($page - 2) .'><button class="button_navig">'. ($page - 2) .'</button></a>';
if($page - 1 > 0) $page1left = '<a href= ?'.$dopLink.'page='. ($page - 1) .'><button class="button_navig">'. ($page - 1) .'</button></a>';
if($page + 2 <= $total) $page2right = '<a href= ?'.$dopLink.'page='. ($page + 2) .'><button class="button_navig">'. ($page + 2) .'</button></a>';
if($page + 1 <= $total) $page1right = '<a href= ?'.$dopLink.'page='. ($page + 1) .'><button class="button_navig">'. ($page + 1) .'</button></a>';
// Вывод меню
if($total > $num-1)
{
echo '<div class="'.$cssClass.'">
<center>
'.$pervpage.$page2left.$page1left.'<button class="button_navig">'.$page.'</button>'.$page1right.$page2right.$nextpage.'
</center>
</div>';
}
}
/*Меню навигиции для Ajax*/
function page_nav_Ajax($page,$total,$cssClass,$dopLink)
{
if ($page != 1) $pervpage = '<button onClick="nav(1)" class="button_navig"><<</button>
<button onClick="nav('.($page - 1).')" class="button_navig"><</button>';
// Проверяем нужны ли стрелки вперед
if ($page != $total) $nextpage = ' <button onClick="nav('.($page + 1).')" class="button_navig">></button>
<button onClick="nav('.$total.')" class="button_navig">>></button>';
// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 2 > 0) $page2left = '<button onClick="nav('.($page - 2).')" class="button_navig">'. ($page - 2) .'</button>';
if($page - 1 > 0) $page1left = '<button onClick="nav('.($page - 1).')" class="button_navig">'. ($page - 1) .'</button>';
if($page + 2 <= $total) $page2right = '<button onClick="nav('.($page + 2).')" class="button_navig">'. ($page + 2) .'</button>';
if($page + 1 <= $total) $page1right = '<button onClick="nav('.($page + 1).')" class="button_navig">'. ($page + 1) .'</button>';
// Вывод меню
if($total > $num-1)
{
echo '<div class="'.$cssClass.'">
<center>
'.$pervpage.$page2left.$page1left.'<button class="button_navig">'.$page.'</button>'.$page1right.$page2right.$nextpage.'
</center>
</div>';
}
}
# старая навигация, используется в некоторых разделах
#function page#
function page($k_page=1){
$page=1;
if (isset($_GET['page'])){
if ($_GET['page']=='end')$page=intval($k_page);elseif(is_numeric($_GET['page'])) $page=intval($_GET['page']);}
if ($page<1)$page=1;
if ($page>$k_page)$page=$k_page;
return $page;
}
#function k_page#
function k_page($k_post=0,$k_p_str=10){
if ($k_post!=0){
$v_pages=ceil($k_post/$k_p_str);
return $v_pages;
} else return 1;
}
#function str#
function str($link='?',$k_page=1,$page=1){
if ($page<1)$page=1;
echo '<div class="page">';
if ($page!=1)echo '<a href="'.$link.'page=1" title="Первая страница"><<</a> ';
if ($page>1)echo '<a href="'.$link.'page='.($page-1).'" title="Предыдущая страница № '.($page-1).'"><</a> ';
echo ' ';
if ($page<$k_page)echo ' <a href="'.$link.'page='.($page+1).'" title="Следующая страница № '.($page+1).'">></a>';
if ($page!=$k_page)echo ' <a href="'.$link.'page=end" title="Последняя страница">>></a>';
echo '<br />';
if ($page!=1)echo '<a href="'.$link.'page=1" title="Страница № 1">1</a>'; else echo '<b>1</b>';
for ($ot=-3; $ot<=3; $ot++){
if ($page+$ot>1 && $page+$ot<$k_page){
if ($ot==-3 && $page+$ot>2)echo ' ..';
if ($ot!=0)echo ' <a href="'.$link.'page='.($page+$ot).'" title="Страница № '.($page+$ot).'">'.($page+$ot).'</a>'; else echo ' <b>'.($page+$ot).'</b>';
if ($ot==3 && $page+$ot<$k_page-1)echo ' ..';
}
}
if ($page!=$k_page)echo ' <a href="'.$link.'page=end" title="Страница № '.$k_page.'">'.$k_page.'</a>';elseif ($k_page>1)echo ' <b>'.$k_page.'</b>';
echo '</div>';
}
# number format
function n_f($i) {
if($i >= 10000 && $i < 1000000) {
$i = number_format($i, 0, '', '.');
$i = round($i,3).'K';
}
elseif($i >= 1000000) {
$i = number_format($i, 0, '', '.');
$i = round($i,3).'M';
}else{
$i = number_format($i, 0, '', ''');
}
return $i;
}
# Фильтрация чисел
function _num($i) {
$i = (int) abs($i);
return $i;
}
# Смайли
function smiles($text){
$aa = mysql_query("SELECT name,adres FROM `smiles` order by `id` desc");
while($ba = mysql_fetch_assoc($aa)){
$text=str_replace($ba['name'],'<img src="/file/smiles/'.$ba['adres'].'" alt="smile" class="smiles" />', $text);
}
# BBcode
$bbcode = array(
'/[i](.+)[/i]/isU' => '<em>$1</em>',
'/[b](.+)[/b]/isU' => '<strong>$1</strong>',
'/[u](.+)[/u]/isU' => '<span style="text-decoration:underline;">$1</span>',
'/[big](.+)[/big]/isU' => '<span style="font-size:large;">$1</span>',
'/[center](.+)[/center]/isU' => '<center>$1</center>',
'/[small](.+)[/small]/isU' => '<span style="font-size:xx-small;">$1</span>',
'/[red](.+)[/red]/isU' => '<span style="color:#ff0000;">$1</span>',
'/[green](.+)[/green]/isU' => '<span style="color:#00bb00;">$1</span>',
'/[blue](.+)[/blue]/isU' => '<span style="color:#0000bb;">$1</span>',
'/[white](.+)[/white]/isU' => '<span style="color:#ffffff;">$1</span>');
$text= preg_replace(array_keys($bbcode), array_values($bbcode), $text);
$text = preg_replace('/[img]{1}(.+?)[/img]{1}/', '<img src="$1"/>', $text);
return nl2br($text);
}
# панель смайлов
function fast_smile()
{
?>
<script>
/* Вставка смайлов */
function fast_smile(text)
{
$("#mess").focus();
document.getElementById("mess").value += " "+text;
}
</script>
<?PHP
$q = mysql_query("SELECT * FROM `smiles` WHERE `cat`='1' LIMIT 5");
while($arr = mysql_fetch_assoc($q))
{
$smil .= '<img src="/file/smiles/'.$arr['adres'].'" class="smiles_min" style="cursor: pointer;" alt="*" onClick="fast_smile(''.$arr['name'].'');">';
}
$smil .= ' <a href="/smiles" target="_blank">[Все]</a>';
return $smil;
}
# Время
function vremja($time=NULL)
{
global $user;
if ($time==NULL)$time=time();
if (isset($user))$time=$time+$user['set_timesdvig']*60*60;
$timep="".date("j M Y в H:i", $time)."";
$time_p[0]=date("j n Y", $time);
$time_p[1]=date("H:i", $time);
if ($time_p[0]==date("j n Y"))$timep=date("H:i:s", $time);
if (isset($user)){
if ($time_p[0]==date("j n Y", time()+$user['set_timesdvig']*60*60))$timep=date("H:i:s", $time);
if ($time_p[0]==date("j n Y", time()-60*60*(24-$user['set_timesdvig'])))$timep="Вчера в $time_p[1]";}
else{
if ($time_p[0]==date("j n Y"))$timep=date("H:i:s", $time);
if ($time_p[0]==date("j n Y", time()-60*60*24))$timep="Вчера в $time_p[1]";}
$timep=str_replace("Jan","Янв",$timep);
$timep=str_replace("Feb","Фев",$timep);
$timep=str_replace("Mar","Марта",$timep);
$timep=str_replace("May","Мая",$timep);
$timep=str_replace("Apr","Апр",$timep);
$timep=str_replace("Jun","Июня",$timep);
$timep=str_replace("Jul","Июля",$timep);
$timep=str_replace("Aug","Авг",$timep);
$timep=str_replace("Sep","Сент",$timep);
$timep=str_replace("Oct","Окт",$timep);
$timep=str_replace("Nov","Ноября",$timep);
$timep=str_replace("Dec","Дек",$timep);
return $timep;
}
/* Функция определения реального IP пользователя */
function RealIp()
{
if (!empty($_SERVER['HTTP_CLIENT_IP']))
{
$ip=$_SERVER['HTTP_CLIENT_IP'];
}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
$ip=$_SERVER['REMOTE_ADDR'];
}
return trim(mysql_real_escape_string(htmlspecialchars($ip)));
}
/* Проверяешь валидностьт ip */
function validate_ip($ip)
{
$ip = trim(str_replace(",", ".", $ip));
if (!@preg_match("/^([0-9]|[0-9][0-9]|[01][0-9]
[0-9]|2[0-4][0-9]|25[0-5])(.([0-9]|[0-9][0-9]|[01]
[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$/", $ip))
return false; else return true;
}
/*Удаляем изображения */
function no_img($text)
{
$text = preg_replace('#<img(.*?)>#si', '', $text);
return $text;
}
?>