<?php
/*********************************************************************/
#---------------------------KokirCMS Соц сети-------------------------#
#---------------------Kiriyan и kokir Сайт kiriyan.org----------------#
#-------------------------------2012 г.-------------------------------#
#------------------Связь ICQ 455002004. [email protected]#
#----------------------------Пример ewwap.ru--------------------------#
/*********************************************************************/
/************************Регулярные выражения*************************/
$regulars = array(
'text' => "/(.*)/",
'url' => "#http://([а-яёa-z\d][а-яёa-z\d\-]*\.)+[а-яёa-z]{2,6}(/([а-яё\w\-\.]*[а-яё\w\-/]{1})*(\?(([a-z][\w\-]*)?(=(%[a-z\d]{2}|[\w\-\.\+])*)?)?(&(amp;)?(([a-z][\w\-]*)?(=(%[a-z\d]{2}|[\w\-\.\+])*)?)?)*)?)?#ui",
'int' => "/[0-9]+/",
'md5' => "/[0-9a-z]{32}/",
'lattext' => "/[^а-я]+/",
'email' => "#([a-z0-9_\.\-]{1,20})@([a-z0-9\.\-]{1,20})\.([a-z]{2,4})#is"
);
/*********************************************************************/
$rights = array(
1 => '(Mod)',
2 => '(Adm)'
);
$rightsFull = array(
1 => 'Модератор',
2 => 'Администратор'
);
/*****************************Месяцы года*****************************/
$monthesOfYear = array(
'01' => 'янв',
'02' => 'фев',
'03' => 'мар',
'04' => 'апр',
'05' => 'май',
'06' => 'июн',
'07' => 'июл',
'08' => 'авг',
'09' => 'сен',
'10' => 'окт',
'11' => 'ноя',
'12' => 'дек'
);
/*********************************************************************/
/********************Разрешенные разширения файлов********************/
$possibleFileFormats = array(
'png', 'jpg', 'jpeg', 'bmp',
'wbmp', 'tif', 'tiff', 'gif',
'ico', '3gp', 'mp4', 'divx',
'dlx', 'mpeg', 'mpeg4', 'avi',
'pdf', 'txt', 'sql', 'text',
'doc', 'docx', 'xls', 'xlsx',
'ppt', 'pptx', 'ppf', 'mdb',
'accdb', 'exe', 'jar', 'jad',
'zip', 'rar', '7z', 'tar',
'mp3', 'wav', 'wave', 'midi',
'mid', 'mp2', 'flac', 'djv',
'djvu', 'iso', 'mdf', 'mds',
'pas', 'thm', 'nth', 'sis'
);
$possibleImgFormats = array('png', 'jpg', 'jpeg', 'gif');
/*********************************************************************/
/****************************Массив ошибок****************************/
$errfile = file($home . '/errors.dat');
$errorArr = array();
$errorCount = count($errfile);
for($i = 0; $i < $errorCount; $i++)
{
list($key, $value) = explode(':', $errfile[$i]);
$errorArr[trim($key)] = trim($value);
}
/*********************************************************************/
/**********************Функция обработки ошибок***********************/
/*--------------------
$number -- номер ошибки
$url -- страница, на которую следует переадресовать при ошибке
--------------------*/
function error($number, $url = '')
{
global $home, $absolutpath;
if($url == '')
$url = $absolutpath;
$path = $home . $url;
if(substr($url, 0, 1) != '/')
$path = $url;
$_SESSION['error'] = $number;
header("Location: $path");
}
/*********************************************************************/
/************************Форматировка времени*************************/
/*--------------------
$t - дата в РНР-формате
--------------------*/
function fTime($t, $struct = TRUE)
{
global $time, $web, $monthesOfYear;
if(!$t)
return FALSE;
if($time - $t <= 60)
$out = 'меньше минуты назад';
else if(($time - $t >= 60*60*24) && ($time - $t <= 60*60*24*2))
$out = 'вчера в ' . date("H:i", $t);
else if(($time - $t >= 60*60*24*2) && ($time - $t <= 60*60*24*3))
$out = 'позавчера в ' . date("H:i", $t);
else if($time - $t >= 60*60*24*3)
{
if($struct)
$out = '<span><span class="date-date">' . date("d ", $t) . $monthesOfYear[date("m", $t)] . date(" Y", $t) . '</span><span class="date-time' . ($web ? ' hide' : '') . '"> ' . date("H:i", $t) . '</span></span>';
else
$out = '<span>' . date("d ", $t) . $monthesOfYear[date("m", $t)] . date(" Y H:i", $t) . '</span>';
}
else
{
$r = $time - $t;
if($r < 3600)
{
$vars = array('минут', 'минуту', 'минуты', 'минуты', 'минуты', 'минут', 'минут', 'минут', 'минут', 'минут');
$a = ($r / 60) % 10;
if(($r >= 11*60) && ($r <= 20*60))
$v = $vars['0'];
else
$v = $vars[$a];
$r = floor($r / 60);
}
else if($r >= 60*60 && $r <= 60*60*24)
{
$vars = array('часов', 'час', 'часа', 'часа', 'часа', 'часов', 'часов', 'часов', 'часов', 'часов');
$a = ($r/3600) % 10;
if(($r >= 11*60*60) && ($r <= 20*60*60))
$v = $vars['0'];
else
$v = $vars[$a];
$r = floor($r / 3600);
}
$out = '<a title="' . date("d ", $t) . $monthesOfYear[date("m", $t)] . date(" Y H:i", $t) . '" class="static">' . $r . ' ' . $v . ' назад</a>';
}
return $out;
}
/*********************************************************************/
/*****************************Вывод аватар****************************/
function getAvatar($id, $big = FALSE)
{
global $home, $documentRoot;
$dir = $documentRoot . '/files/avatars/' . $id;
$dir = scandir($dir);
unset($dir[0], $dir[1]);
if(!sizeof($dir))
{
$result = '<a href="' . $home . '/id' . $id . '"><img src="' . $home . '/theme/images/ava_m.png" alt="Avatar"/></a>';
if($big)
$result = '<img src="' . $home . '/theme/images/ava.png" alt="Avatar"/>';
}
else
{
sort($dir);
reset($dir);
$avatar = $dir[sizeof($dir) - 1];
$aDir = scandir($documentRoot . '/files/avatars/' . $id . '/' . $avatar);
unset($aDir[0], $aDir[1]);
$result = '<img src="' . $home . '/files/avatars/' . $id . '/' . $avatar . '/a' . ($big ? '_b' : '') . '.' . fileFormat($documentRoot . '/files/avatars/' . $id . '/' . $avatar . end($aDir)) . '" alt="Avatar"/>';
if($big)
$result = '<a href="' . $home . '/files/avatars/' . $id . '/' . $avatar . '/a_o.' . fileFormat($documentRoot . '/files/avatars/' . $id . '/' . $avatar . end($aDir)) . '" target="_blanc">' . $result . '</a>';
else
$result = '<a href="' . $home . '/id' . $id . '">' . $result . '</a>';
}
return $result;
}
/*********************************************************************/
/*************************Краткое инфо юзера**************************/
function userInfo($id, $o = TRUE, $t = FALSE, $a = FALSE)
{
global $home, $rights, $time, $user;
$u = mysql_fetch_array(mysql_query("SELECT * FROM `users` WHERE `id` = $id;"));
if(!$u)
return '';
$result = '<table><tr>';
$result .= '<td>' . getAvatar($id) . '</td>';
$result .= '<td>' . userSex($u['id']) . ' ';
if($user)
$result .= '<a href="' . $home . '/id' . $id . '">';
$result .= $u['login'];
if($user)
$result .= '</a>';
if($u['rights'])
$result .= ' ' . $rights[$u['rights']];
if($o)
{
if(online($id))
$result .= ' <span class="green">[ON]</span>';
else
$result .= ' <span class="red">[OFF]</span>';
}
if($a)
$result .= ' ' . $a;
if($t)
$result .= '<div>' . $t . '</div>';
else
{
$years = date("Y", $time) - date("Y", $u['birth']);
if(date("m", $time) < date("m", $u['birth']))
--$years;
$result .= '<div>(' . $years . ' лет)</div>';
}
$result .= '</td>';
$result .= '</tr></table>';
return $result;
}
/*********************************************************************/
/******************************Пол юзера******************************/
function userSex($id)
{
global $home;
$u = mysql_fetch_array(mysql_query("SELECT `sex`, `rights` FROM `users` WHERE `id` = $id;"));
$p = 'user';
if(!$u)
$p .= '_xz';
else
{
if($u['rights'])
$p .= '_a';
if($u['sex'] == 'w')
$p .= '_w';
}
return '<img src="' . $home . '/images/' . $p . '.png" alt="*"/>';
}
/*********************************************************************/
/***********************Постраничная навигация************************/
function pagination($url = '?', $total = FALSE, $page_ = FALSE, $chms_ = FALSE)
{
global $home, $pageNum, $chms, $total;
$total = ($total ? $total : error('53', '/'));
$page_ = ($page_ ? $page_ : $pageNum);
$chms_ = ($chms_ ? $chms_ : $chms);
$totalPages = ceil($total / $chms_);
if($page_ > $totalPages)
header("Location: {$url}page={$totalPages}");
$lite = FALSE;
if($totalPages <= 10)
$lite = TRUE;
if($lite)
{
$startPosition = 1;
$finishPosition = $totalPages;
}
else
{
$startPosition = ($page_ - 5 >= 1 ? $page_ - 5 : 1);
$finishPosition = ($page_ + 5 <= $totalPages ? $page_ + 5 : $totalPages);
}
$result = '';
$result .= '<a href="' . $url . 'page=1" class="link side"><<</a> ';
if(!$lite && $page_ - 6 > 1)
$result .= '<a href="' . $url . 'page=1" class="link">1</a> ... ';
$i = $startPosition;
while($i <= $finishPosition)
{
if($i != $page_)
$result .= '<a href="' . $url . 'page=' . $i . '" class="link">' . $i . '</a> ';
else
$result .= '<span class="current">' . $i . '</span> ';
++$i;
}
if(!$lite && $page_ + 6 < $totalPages)
$result .= ' ... <a href="' . $url . 'page=' . $totalPages . '" class="link">' . $totalPages . '</a>';
$result .= '<a href="' . $url . 'page=' . $totalPages . '" class="link side">>></a>';
return '<div class="pagination">' . $result . '</div>';
}
/*********************************************************************/
/*****Создание копии изображения с отличным от исходного размером*****/
function imageResize($outImageDir, $outImageName, $image, $newWidth, $newHeight)
{
global $possibleImgFormats, $documentRoot;
$format = fileFormat($image, TRUE, $possibleImgFormats);
if($format == 'gif')
$image = imageCreateFromGif($image);
else if($format == 'png')
$image = imageCreateFromPng($image);
else
$image = imageCreateFromJpeg($image);
$k1 = $newWidth / imagesx($image);
$k2 = $newHeight / imagesy($image);
$k = $k1 > $k2 ? $k2 : $k1;
$width = intval(imagesx($image) * $k);
$height = intval(imagesy($image) * $k);
$newImage = imageCreateTrueColor($width, $height);
$newImagePath = $documentRoot . $outImageDir . '/' . $outImageName . '.' . $format;
imagecopyresampled($newImage, $image, 0, 0, 0, 0, $width, $height, imagesx($image), imagesy($image));
if($format == 'jpg')
$image = imageJpeg($newImage, $newImagePath);
else if($format == 'gif')
$image = imageGif($newImage, $newImagePath);
else if($format == 'png')
$image = imagePng($newImage, $newImagePath);
else
return FALSE;
imagedestroy($image);
imagedestroy($newImage);
return TRUE;
}
/*********************************************************************/
/***********************Обработка BBcode тегов************************/
function tags($str, $links = TRUE)
{
global $regulars;
$str = preg_replace('#\[b\](.*?)\[/b\]#si', '<b>\1</b>', $str);
$str = preg_replace('#\[i\](.*?)\[/i\]#si', '<i>\1</i>', $str);
$str = preg_replace('#\[u\](.*?)\[/u\]#si', '<span style="text-decoration:underline;">\1</span>', $str);
$str = preg_replace('#\[cite\](.*?)\[/cite\]#si', '<cite>\1</cite>', $str);
$str = nl2br($str);
if($links)
$str = preg_replace_callback($regulars['url'], 'getURL', $str);
return $str;
}
function getURL($matches){
if(mb_strlen($matches[0]) > 50)
$urlName = mb_substr($matches[0], 0, 40) . '...' . mb_substr($matches[0], mb_strlen($matches[0]) - 5);
else
$urlName = $matches[0];
$url = '<a href="' . $matches[0] . '">' . $urlName . '</a>';
return $url;
}
/*********************************************************************/
/******************Перевод строк в безопасный режим*******************/
function escstr($str)
{
$str = str_replace('`', '', $str);
$str = stripslashes(htmlspecialchars(trim($str), ENT_QUOTES));
return $str;
}
/*********************************************************************/
/************************Транслитерация текста************************/
function translit($str)
{
$str = strtr($str, array (
'a' => 'а', 'b' => 'б', 'v' => 'в', 'g' => 'г', 'd' => 'д', 'e' => 'е', 'yo' => 'ё', 'zh' => 'ж',
'z' => 'з', 'i' => 'и', 'j' => 'й', 'k' => 'к', 'l' => 'л', 'm' => 'м', 'n' => 'н', 'o' => 'о',
'p' => 'п', 'r' => 'р', 's' => 'с', 't' => 'т', 'u' => 'у', 'f' => 'ф', 'h' => 'х', 'c' => 'ц',
'ch' => 'ч', 'w' => 'ш', 'sh' => 'щ', 'q' => 'ъ', 'y' => 'ы', 'x' => 'э', 'yu' => 'ю', 'ya' => 'я',
'A' => 'А', 'B' => 'Б', 'V' => 'В', 'G' => 'Г', 'D' => 'Д', 'E' => 'Е', 'YO' => 'Ё', 'ZH' => 'Ж',
'Z' => 'З', 'I' => 'И', 'J' => 'Й', 'K' => 'К', 'L' => 'Л', 'M' => 'М', 'N' => 'Н', 'O' => 'О',
'P' => 'П', 'R' => 'Р', 'S' => 'С', 'T' => 'Т', 'U' => 'У', 'F' => 'Ф', 'H' => 'Х', 'C' => 'Ц',
'CH' => 'Ч', 'W' => 'Ш', 'SH' => 'Щ', 'Q' => 'Ъ', 'Y' => 'Ы', 'X' => 'Э', 'YU' => 'Ю', 'YA' => 'Я'
));
return $str;
}
/*********************************************************************/
/*******************Обратная транслитерация текста********************/
function rus2lat($str)
{
$str = strtr($str, array (
'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'yo', 'ж' => 'zh',
'з' => 'z', 'и' => 'i', 'ё' => 'j', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o',
'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c',
'ч' => 'ch', 'ш' => 'w', 'щ' => 'sh', 'ъ' => 'q', 'ы' => 'y', 'э' => 'e', 'ю' => 'yu', 'я' => 'ya',
'і' => 'i', 'ї' => 'i', 'ґ' => 'g', 'є' => 'e', 'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G',
'Д' => 'D', 'Е' => 'E', 'Ё' => 'YO', 'Ж' => 'ZH', 'З' => 'Z', 'И' => 'I', 'Й' => 'J', 'К' => 'K',
'Л' => 'L', 'М' => 'M', 'Н' => 'N', 'О' => 'O', 'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T',
'У' => 'U', 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'C', 'Ч' => 'CH', 'Ш' => 'W', 'Щ' => 'SH', 'Ъ' => 'Q',
'Ы' => 'Y', 'Э' => 'E', 'Ю' => 'YU', 'Я' => 'YA', 'І' => 'I', 'Ї' => 'I', 'Ґ' => 'G', 'Є' => 'E'
));
return $str;
}
/*********************************************************************/
/**************************Проверка на онлайн*************************/
function online($id)
{
global $time;
$user = mysql_fetch_array(mysql_query("SELECT `visit` FROM `users` WHERE `id` = $id;"));
if($user['visit'] + 300 > $time)
return TRUE;
return FALSE;
}
/*********************************************************************/
/***********************Получение формата файла***********************/
/*--------------------
$fileName -- имя файла
$check -- определяет нужно ли делать проверку на правильность формата (по умолчанию проверка включена)
$formats -- определяет массив допустимых форматов (если не указывать, будет использоватся $possibleFileFormats)
--------------------*/
function fileFormat($fileName, $check = TRUE, $formats = FALSE)
{
global $possibleFileFormats;
if(!$formats)
$formats = $possibleFileFormats;
$format = strtolower(end(explode('.', $fileName)));
if($check)
{
if(in_array($format, $formats))
$out = $format;
else
$out = FALSE;
}
else
$out = $format;
return $out;
}
/*********************************************************************/
?>