Файл: CMS/core/functions.php
Строк: 1221
<?php
if (!defined('CMS')) { die('Access Denied!'); }
if (!defined('ENGINE')) { define('ENGINE', dirname(__FILE__)); }
#Фильтрация чисел
function num($id){return abs(intval($id));}
#Фильтрация при записи в БД
function ms($text){return trim(mysql_real_escape_string($text));}
#Фильтрация при выводе из БД
function html($text){return nl2br(stripslashes(htmlspecialchars($text, ENT_QUOTES)));}
#Переадресация
function go($url){header("Location: ".$url);}
#Антиреклама
function anti_ads($str = '') {
$replace = array(
'.ru' => '***',
'.com' => '***',
'.biz' => '***',
'.cn' => '***',
'.in' => '***',
'.net' => '***',
'.org' => '***',
'.info' => '***',
'.mobi' => '***',
'.wen' => '***',
'.kmx' => '***',
'.h2m' => '***'
);
$str = preg_replace('~\[url=(https?://.+?)\](.+?)\[/url\]|(https?://(www.)?[0-9a-z.-]+.[0-9a-z]{2,6}[0-9a-zA-Z/?.~&_=/%-:#]*)~', '###', $str);
$str = preg_replace('#([a-z0-9\s-.]){3,20}(.|,)([a-z\s]){2,4}#si', '[реклама]', $str);
$str = strtr($str, $replace);
return $str;
}
# Функция антимата
function antimat($str = '') {
global $config;
if (!empty($config['anti_ads'])) $str = anti_ads($str);
if (file_exists(ENGINE . '/data/mat.dat')) {
$file = @file(ENGINE . '/data/mat.dat');
if ( @count($file) > 0 ) {
$array = array();
foreach ($file AS $value) {
if (empty($value)) continue;
$array[] = '/' . trim($value) . '/iu';
}
$str = preg_replace($array, '[<span style="color:gray"><b>мат</b></span>]', $str);
return $str;
}
}
return $str;
}
# Функция подсветки кода
function highlight_code($code) {
$code = nosmiles($code);
$code = strtr($code, array('<' => '<', '>' => '>', '&' => '&', '"' => '"', '$' => '$', '%' => '%', ''' => "'", '\' => '\', '^' => '^', '`' => '`', '|' => '|', '<br />' => "rn"));
$code = highlight_string($code, true);
$code = strtr($code, array("rn" => '<br />', '$' => '$', "'" => ''', '%' => '%', '\' => '\', '`' => '`', '^' => '^', '|' => '|'));
return $code;
}
# Вспомогательная функция для вставки ссылки
function url_replace($m) {
if (!isset($m[3])) {
$title = trim(stripslashes(preg_replace('/[rnt]/i', ' ', strip_tags($m[2]))));
$target = (strpos($m[1], $_SERVER['HTTP_HOST']) === false) ? ' target="_blank"' : '';
return '<a href="' . $m[1] . '" title="' . $title . '"' . $target . '>' . $m[2] . '</a>';
} else {
$target = (strpos($m[3], $_SERVER['HTTP_HOST']) === false) ? ' target="_blank"' : '';
return '<a href="' . $m[3] . '"' . $target . '>' . $m[3] . '</a>'; //http://...
}
}
# Функция скрытого текста
function hidden_text($str = '') {
global $is_logged;
if ($is_logged) {
return '<div class="hide"><b>Скрытый текст:</b> ' . $str . '</div>';
}
else {
return '<div class="hide"><b>Скрытый текст.</b> Для просмотра необходимо авторизоваться!</div>';
}
}
#BB-code
function bb_code($var) {
if (strpos($var, '[') === false) {
return $var;
}
$var = preg_replace('#[b](.*?)[/b]#si', '<b>1</b>', $var);
$var = preg_replace('#[i](.*?)[/i]#si', '<i>1</i>', $var);
$var = preg_replace('#[u](.*?)[/u]#si', '<u>1</u>', $var);
$var = preg_replace('#[s](.*?)[/s]#si', '<s>1</s>', $var);
$var = preg_replace('#[big](.*?)[/big]#si', '<big>1</big>', $var);
$var = preg_replace('#[small](.*?)[/small]#si', '<small>1</small>', $var);
$var = preg_replace('#[del](.*?)[/del]#si', '<del>1</del>', $var);
$var = preg_replace('#[(red|green|blue|black|lime|maroon|yellow|orange)](.*?)[/\1]#is', '<span style="color:1">2</span>', $var);
$var = preg_replace('#[color=(#[0-9A-F]{6}|[a-z]+)](.*?)[/color]#si', '<span style="color: 1">2</span>', $var);
$var = preg_replace('#[(left|right|center|justify)](.*?)[/\1]#is', '<div style="text-align:1">2</div>', $var);
//$var = preg_replace('#[q](.*?)[/q]#si', '<div class="q">1</div>', $var);
$var = str_replace('[q]', '<div class="q">', $var); // Так лучше...
$var = str_replace('[/q]', '</div>', $var);
$var = preg_replace('#[post=([0-9]+)](.*?)[/post]#si', '<a href="' . gen_uri('post','1') . '">2</a>', $var);
$var = preg_replace('#[page=([a-zA-Z0-0-_]+)](.*?)[/page]#si', '<a href="' . gen_uri('1') . '">2</a>', $var);
$var = preg_replace('#[url=(http://.+)](.+)[/url]#i','<a href="1">2</a>',$var);
$var = preg_replace('#[img](http://.+)[/img]#i','<img src="1">',$var);
$var = preg_replace('#[hide](.*?)[/hide]#ie', 'hidden_text("1")', $var);
if (function_exists('helper_bb')) $var = helper_bb($var);
return $var;
}
function format_text($text = '') {
global $config;
$text = preg_replace('#[(.*?)](.*?)[/(.*?)]#siu', '2', $text);
$text = cms_substr($text, 0, $config['substr_text']);
return nl2br($text);
}
# Функция замены и вывода смайлов
function smiles($str = '') {
global $config;
$str = str_replace(':',':', $str);
$str = preg_replace('|:|',':', $str, 5);
$arrsmiles = array();
$globsmiles = glob( ROOTPATH . '/images/smiles/*.gif' );
foreach($globsmiles as $filename) {
$arrsmiles[] = basename($filename, '.gif');
}
rsort($arrsmiles);
foreach($arrsmiles as $smval){
$str = str_replace(":$smval", '<img src="' . $config['site_url'] . '/images/smiles/' . $smval . '.gif" alt="" /> ', $str);
}
return str_replace(':',':',$str);
}
# Функция обратной замены смайлов
function nosmiles($str = '') {
$str = preg_replace('|<img src="(.*?)/smiles/(.*?).gif" alt="(.*?)" />|', ':$2', $str);
return $str;
}
#
function extensions($ext = '') {
if ( @file_exists( ROOTPATH . '/images/extensions/' . $ext . '.png' ) ) {
$ipath = '/images/extensions/' . $ext . '.png';
}
else {
$ipath = '/images/extensions/unknown.png';
}
return '<img src="' . $ipath . '" class="icon" alt="" /> ';
}
#функция определения размера файла или данных
function size($in){
if ($in >= 1073741824) {
return '<b>' . round($in/1073741824 ,2) . '</b> гб';
} else if ($in >= 1048576) {
return '<b>' . round($in/1048576 ,2) . '</b> мб';
} else if ($in >= 1024) {
return '<b>' . round($in/1024 ,2) . '</b> кб';
} else {
return '<b>' . round($in) . '</b> байт';
}
}
# Функция форматированного вывода размера файла
function read_file($file = '') {
if (file_exists($file)) {
return size( @filesize($file) );
} else {
return 0;
}
}
# Функция экранирования основных знаков
function check($str = '') {
if (is_array($str)) {
foreach( $str as $key => $val ) {
$str[$key] = check($val);
}
}
else {
if (is_int($str)) {
$str = intval($str);
}
else {
$str = htmlspecialchars($str);
$search = array('|', ''', '$', '\', '^', '%', '`', " ", "x00", "x1A");
$replace = array('|', ''', '$', '\', '^', '%', '`', '', '', '');
$str = str_replace($search, $replace, $str);
$str = stripslashes(trim($str));
}
}
return $str;
}
function request( $var, $default = NULL ) {
if (!isset($_REQUEST[$var])) {
return $default;
}
return htmlspecialchars(stripslashes(trim($_REQUEST[$var])));
}
function is_utf ($t = '') {
if ( @preg_match ('/.+/u', $t) ) {
return true;
}
return false;
}
# Функция преобразования в нижний регистр для UTF
function cms_tolower($str) {
if (function_exists('mb_strtolower')) return mb_strtolower($str, 'utf-8');
$arr = array('А' => 'а', 'Б' => 'б', 'В' => 'в', 'Г' => 'г', 'Д' => 'д', 'Е' => 'е', 'Ё' => 'ё', 'Ж' => 'ж', 'З' => 'з', 'И' => 'и', 'Й' => 'й', 'К' => 'к', 'Л' => 'л', 'М' => 'м', 'Н' => 'н', 'О' => 'о', 'П' => 'п', 'Р' => 'р', 'С' => 'с', 'Т' => 'т', 'У' => 'у', 'Ф' => 'ф', 'Х' => 'х', 'Ц' => 'ц', 'Ч' => 'ч', 'Ш' => 'ш', 'Щ' => 'щ', 'Ь' => 'ь', 'Ъ' => 'ъ', 'Ы' => 'ы', 'Э' => 'э', 'Ю' => 'ю', 'Я' => 'я', 'A' => 'a', 'B' => 'b', 'C' => 'c', 'D' => 'd', 'E' => 'e', 'I' => 'i', 'F' => 'f', 'G' => 'g', 'H' => 'h', 'J' => 'j', 'K' => 'k', 'L' => 'l', 'M' => 'm', 'N' => 'n', 'O' => 'o', 'P' => 'p', 'Q' => 'q', 'R' => 'r', 'S' => 's', 'T' => 't', 'U' => 'u', 'V' => 'v', 'W' => 'w', 'X' => 'x', 'Y' => 'y', 'Z' => 'z');
return strtr($str,$arr);
}
# Функция транслита букв
function tr($s, $reverse = false) {
$lat = array('Jo', 'jo', 'Yo', 'yo', 'Zh', 'zh', 'zh', 'Ch', 'ch', 'Sh', 'sh', 'Shc', 'shc', '', '', 'Ye', 'ye', 'Yu', 'yu', 'Ya', 'ya', 'Ja', 'ja', 'Y', 'y', 'A', 'a', 'B', 'b', 'C', 'c', 'D', 'd', 'E', 'e', 'F', 'f', 'G', 'g', 'H', 'h', 'I', 'i', 'K', 'k', 'L', 'l', 'M', 'm', 'N', 'n', 'O', 'o', 'P', 'p', 'Q', 'q', 'R', 'r', 'S', 's', 'T', 't', 'U', 'u', 'V', 'v', 'W', 'w', 'Y', 'y', 'Z', 'z');
$cyr = array('Ё', 'ё', 'Ё', 'ё', 'Ж', 'ж', 'ж', 'Ч', 'ч', 'Ш', 'ш', 'Щ', 'щ', 'ъ', 'ь', 'Э', 'э', 'Ю', 'ю', 'Я', 'я', 'Я', 'я', 'Ы', 'ы', 'А', 'а', 'Б', 'б', 'Ц', 'ц', 'Д', 'д', 'Е', 'е', 'Ф', 'ф', 'Г', 'г', 'Х', 'х', 'И', 'и', 'К', 'к', 'Л', 'л', 'М', 'м', 'Н', 'н', 'О', 'о', 'П', 'п', 'Ь', 'ь', 'Р', 'р', 'С', 'с', 'Т', 'т', 'У', 'у', 'В', 'в', 'Ш', 'ш', 'Й', 'й', 'З', 'з');
$result = array();
if( $reverse ) {
$tr = array_combine($cyr, $lat);
}
else
{
$tr = array_combine($lat, $cyr);
}
for($p = 0; true; $p = strlen(implode($result))) {
$part = substr($s, $p);
$pos = strpos($part, '<');
if( $pos !== false ) {
$result[] = substr($part, 0, $pos);
$result[] = substr($part, $pos, strpos($part, '>') - $pos + 1);
}
else
{
if( $part !== '' ) {
$result[] = $part;
}
break;
}
}
for($i = 0; $i < count( $result ); $i++) {
if( $result[$i] === '' ) {
continue;
}
if( $result[$i][0] != '<' ) {
$result[$i] = strtr($result[$i], $tr);
}
else if( !preg_match('#^<d+>$#', rtrim($result[$i])) ) {
$result[$i] = substr($result[$i], 1, strlen($result[$i]) - 2);
}
}
return implode( $result );
}
# Функция генерации ссылок
function gen_uri($m, $id = '', $q = '', $v = '', $with_v = true, $with_sid = true) {
$result = '';
if ( $id ) {
$result = $id . '.' . $m;
}
else if ( $with_v == false && $m == 'index' ) {
$result = '';
}
else {
$result = $m;
}
if ( $with_v ) {
if ( $v ) {
$result .= '.' . $v;
}
else
{
$result .= '.' . VERSION;
}
}
if ( $q ) {
$result .= '?' . $q;
}
return $result;
}
# Функция генерации ссылки для юзеров
function gen_users($user = '', $m, $id = '', $q = '', $v = '', $with_v = true, $with_sid = true) {
global $config;
$host = str_replace('http://', 'http://' . cms_tolower($user) . '.', $config['site_url']);
return $host . DS . gen_uri($m, $id, $q, $v, $with_v, $with_sid);
//return $config['site_url'] . DS . $user . DS . gen_uri($m, $id, $q, $v, $with_v, $with_sid);
}
# Функция генерации ссылки для админа
function gen_admin($q = '') {
global $config;
return $config['site_url'] . DS . $config['admin_dir'] . DS . 'index.php' . $q;
}
# Функция вывода ссылки на анкету
function users_anketa($user = '', $color = '') {
global $config;
if (!empty($color)) {
$name = '<span style="color:' . $color . '">' . nickname($user) . '</span>';
}
else $name = '<b>' . nickname($user) . '</b>';
$host = str_replace('http://', 'http://' . cms_tolower($user) . '.', $config['site_url']);
return '<a href="' . $host . '/" title="' . $user . '">' . $name . '</a>';
//return '<a href="' . $config['site_url'] . '/' . $user . '/" title="' . $user . '">' . $name . '</a>';
}
# Функция переключения версий
function show_version($im = ' / ') {
global $config, $arr_themes;
$v = array();
foreach($arr_themes as $val) {
if ($config['themes'] == $val) $v[] = '<b>' . strtoupper($val) . '</b>';
else $v[] = '<a href="?action_skin_change=' . $val . '">' . strtoupper($val) . '</a>';
}
return implode($im,$v);
}
# Функция обработки массива (int)
function intar($str) {
if (is_array($str)) {
return array_map('intval', $str);
} else {
return intval($str);
}
}
# Функция обрезки по словам
function strip_str( $str, $num = 25 ) {
$str = str_replace('<br />', ' ', $str);
return implode(' ', array_slice(explode(' ', strip_tags($str)), 0, $num));
}
# Функция поиска текста в массиве
function strsearch($str, $arr) {
foreach ($arr as $search) {
if (stristr($str, $search)) {
return true;
}
}
return false;
}
# Функция генерирования паролей
function random_string($len = '') {
$chrs = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnPpQqRrSsTtUuVvWwXxYyZz0123456789';
for($s = '', $i = 0; $i < $len; $i++) {
$s .= $chrs[rand(0, strlen($chrs) - 1)];
}
return $s;
}
# Переадресация
function redirect($url, $code = '303') {
if ($code == '301') {
header('HTTP/1.1 301 Moved Permanently');
} else {
header('HTTP/1.1 303 See Other');
}
$url = str_replace('&', '&', $url);
header('Location: ' . $url);
exit;
}
function gen_red($m = '', $id = '', $q = '', $code = '303') {
if ($code == '301') {
header('HTTP/1.1 301 Moved Permanently');
} else {
header('HTTP/1.1 303 See Other');
}
$url = gen_uri($m, $id, $q);
$url = str_replace('&', '&', $url);
header('Location: ' . $url);
exit;
}
# Функции проверки referer
function check_referer() {
if (!isset($_SERVER['HTTP_REFERER']) || $_SERVER['HTTP_REFERER'] == '') {
//die('Реферер не определен в вашем браузере. Пожалуйста, активируйте опцию передачи реферера.');
return false;
}
$host = parse_url(@$_SERVER['HTTP_REFERER']);
if (@$host['host'] != @$_SERVER['HTTP_HOST']) return false;
else return true;
}
# Добавляет сообщение в сессию
function addMessage($message, $class = 'error') {
if (!in_array($class, array('info', 'ok', 'warning', 'error', 'valid'))) return;
$_SESSION['core_message'][] = array($class, $message);
}
# Функции кеширования
function set_vars($file, $data) {
$fp = fopen( CACHE_PATH . $file . '.php', 'wb+' );
fwrite( $fp, serialize( $data ) );
fclose( $fp );
@chmod( CACHE_PATH . $file . '.php', 0644 );
}
function get_vars($file, $time = 0) {
if ( $time > 0 ) {
if ( @filemtime( CACHE_PATH . $file . '.php' ) < time()-$time ) {
return false;
}
}
return unserialize( @file_get_contents( CACHE_PATH . $file . '.php' ) );
}
function del_vars($file) {
return @unlink( CACHE_PATH . $file . '.php' );
}
/* Функция вкл. музыки
* src - адрес звукового файла
* loop - число повторов звукового файла
* balance - стереобаланс
* volume - громкость
*/
function sound_privat() {
$str = '';
//if (empty($_SESSION[SP]['sound'])) {
$str = '<bgsound src="/images/privat.mid" volume="9" loop="1" balance="3000">';
//}
//$_SESSION[SP]['sound'] = 1;
return $str;
}
# Вспомагательная функция к навигации
function get_page($totals = '') {
global $page, $onpage, $total;
$onpage = !empty( $onpage ) ? (int) $onpage : 10;
$total = !empty( $totals ) ? (int) $totals : $total;
$page = !empty( $_GET['page'] ) ? (int) $_GET['page'] : 1;
if ( empty($total) ) return array(0, 0);
$start = ($page - 1) * $onpage;
if ($start < 0) $start = 0;
if ($start > $total - 1) $start = $total - 1;
$stop = $start + $onpage;
if ($stop > $total) $stop = $total;
return array($start, $stop);
}
# Постраничная навигация
function show_pages($path = '', $query = '', $rewrite = '') {
global $config, $themes, $page, $onpage, $total;
$onpage = isset( $onpage ) ? (int) $onpage : $config['onpage'];
$page = isset( $_GET['page'] ) ? (int) $_GET['page'] : 1;
$maxpage = ceil( $total / $onpage );
if ( empty( $page ) || $page < 1 || $page > $maxpage ) $page = 1;
$code = '';
$links = array();
$next = $page + 1;
$prev = $page - 1;
$show_start = '';
$show_stop = '';
if (!empty($rewrite)) {
$path = empty($path) ? str_replace('.php', '', basename($_SERVER['PHP_SELF'])) : $path;
if ($page > 1) $show_start .= '<a title="Назад" href="' . gen_uri($path, $rewrite . $prev, $query) . '"><< Назад</a>';
else $show_start .= '<span><< Назад</span>';
if ($maxpage > $page) $show_stop .= '<a title="Далее >>" href="' . gen_uri($path, $rewrite . $next, $query) . '">Далее >></a>';
else $show_stop .= '<span>Далее >></span>';
if ($maxpage < 5) {
$showform = false;
for ($i = 1; $i < ($maxpage + 1); $i++) {
if ($i == $page) $links[] = '<span>' . $i . '</span>';
else $links[] = '<a title="' . $i . '" href="' . gen_uri($path, $rewrite . $i, $query) . '">' . $i . '</a>';
}
}
else {
$showform = true;
if ($page == 1) $links[] = '<span>1</span>';
else $links[] = '<a title="1" href="' . gen_uri($path, $rewrite . '1', $query) . '">1</a>';
if ($page > 2) {
$links[] = '<span>...</span>';
$links[] = '<a title="' . $prev . '" href="' . gen_uri($path, $rewrite . $prev, $query) . '">' . $prev . '</a>';
}
if ($page > 1) $links[] = '<span>' . $page . '</span>';
if ($maxpage > $page) $links[] = '<a title="' . $next . '" href="' . gen_uri($path, $rewrite . $next, $query) . '">' . $next . '</a>';
if ($maxpage > $page + 2) {
$links[] .= '<span>...</span>';
$links[] .= '<a title="' . $maxpage . '" href="' . gen_uri($path, $rewrite . $maxpage, $query) . '">' . $maxpage . '</a>';
}
else if ($maxpage > $page + 1) $links[] = '<a title="' . $maxpage . '" href="' . gen_uri($path, $rewrite . $maxpage, $query) . '">' . $maxpage . '</a>';
}
}
else {
$path = empty( $path ) ? $_SERVER['PHP_SELF'] : $path;
if ( strpos($path, '?') === false ) {
$path = $path . '?page=';
}
else {
$path = $path . '&page=';
}
if ($page > 1) $show_start .= '<a title="Назад" href="' . $path . $prev . $query . '"><< Назад</a>';
else $show_start .= '<span><< Назад</span>';
if ($maxpage > $page) $show_stop .= '<a title="Далее" href="' . $path . $next . $query. '">Далее >></a>';
else $show_stop .= '<span>Далее >></span>';
if ($maxpage < 5) {
$showform = false;
for ($i = 1; $i < ($maxpage + 1); $i++) {
if ($i == $page) $links[] = '<span>' . $i . '</span>';
else $links[] = '<a title="' . $i . '" href="' . $path . $i . $query . '">' . $i . '</a>';
}
}
else {
$showform = true;
if ($page == 1) $links[] = '<span>1</span>';
else $links[] = '<a title="1" href="' . $path . '1' . $query . '">1</a>';
if ($page > 2) {
$links[] = '<span>...</span>';
$links[] = '<a title="' . $prev . '" href="' . $path . $prev . $query . '">' . $prev . '</a>';
}
if ($page > 1) $links[] = '<span>' . $page . '</span>';
if ($maxpage > $page) $links[] = '<a title="' . $next . '" href="' . $path . $next . $query . '">' . $next . '</a>';
if ($maxpage > $page + 2) {
$links[] .= '<span>...</span>';
$links[] .= '<a title="' . $maxpage . '" href="' . $path . $maxpage . $query . '">' . $maxpage . '</a>';
}
else if ($maxpage > $page + 1) $links[] = '<a title="' . $maxpage . '" href="' . $path . $maxpage . $query . '">' . $maxpage . '</a>';
}
}
if (count($links) < 2) return '';
$str = $show_start . ' ' . implode(' ', $links) . ' ' . $show_stop;
return str_replace('{PAGES}', $str, $themes['navigation']);
}
# Функции для обработки base64
function safe_encode($string) {
$data = base64_encode($string);
$data = str_replace(array('+', '/', '='), array('_', '-', ''), $data);
return $data;
}
function safe_decode($string) {
$string = str_replace(array('_', '-'), array('+', '/'), $string);
$data = base64_decode($string);
return $data;
}
# Функция шифрования по ключу
function xoft_encode($string, $key) {
$result = '';
for($i = 1; $i <= strlen($string); $i++) {
$char = substr($string, $i-1, 1);
$keychar = substr($key, ($i % strlen($key)) - 1, 1);
$char = chr(ord($char) + ord($keychar));
$result .= $char;
}
return safe_encode($result);
}
# Функция расшифровки по ключу
function xoft_decode($string, $key) {
$string = safe_decode($string);
$result = '';
for($i = 1; $i <= strlen($string); $i++) {
$char = substr($string, $i - 1, 1);
$keychar = substr($key, ($i % strlen($key)) - 1, 1);
$char = chr(ord($char) - ord($keychar));
$result .= $char;
}
return $result;
}
# Аналог функции substr
function cms_substr($str, $start, $length = null, $charset = 'utf-8') {
if ( strtolower($charset) == 'utf-8') {
if (function_exists('mb_substr')) return mb_substr($str, $start, $length, 'utf-8');
if (function_exists('iconv_substr')) return iconv_substr($str, $start, $length, 'utf-8');
$str = utf_to_win($str);
$str = substr($str, $start, $length);
return win_to_utf($str);
}
else return substr($str, $start, $length);
}
# Аналог функции strlen
function cms_strlen($str, $charset = 'utf-8') {
if ( strtolower($charset) == 'utf-8') {
if (function_exists('mb_strlen')) return mb_strlen($str, 'utf-8');
if (function_exists('iconv_strlen')) return iconv_strlen($str, 'utf-8');
return strlen(utf8_decode($str));
}
else return strlen($str);
}
# Аналог функции strrpos
function cms_strrpos($str, $needle, $charset = 'utf-8') {
if ( strtolower($charset) == 'utf-8') return iconv_strrpos($str, $needle, 'utf-8');
else return strrpos($str, $needle);
}
# Функция определения реального IP
function get_ip() {
if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && preg_match('|^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$|', $_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
else if (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('|^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$|', $_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
}
else {
$ip = $_SERVER['REMOTE_ADDR'];
}
return check($ip);
}
# Функция определения реального браузера
function get_ua() {
if (isset($_SERVER['HTTP_X_OPERAMINI_PHONE_UA'])) {
$brow = $_SERVER['HTTP_X_OPERAMINI_PHONE_UA'];
}
else if (isset($_SERVER['HTTP_USER_AGENT'])) {
$brow = $_SERVER['HTTP_USER_AGENT'];
}
else {
$brow = 'unknown';
}
$brow = preg_replace('|http://|i','', $brow);
$brow = strtok($brow,'( ');
$brow = cms_substr($brow,0,22);
return check($brow);
}
function StripMeta($str = '', $all = 0) {
if ( $all ) $bad = array("x22", "x60", "t", "n", "r", ",", ".", "/", "¬", "#", ";", ":", "@", "~", "[", "]", "{", "}", "=", "-", "+", ")", "(", "*", "^", "%", "$", "<", ">", "?", "!", '"');
else $bad = array("x22", "x60", "t", "n", "r", '"', "\", 'r', 'n', "/", "{", "}", "[", "]");
$str = html_entity_decode($str,ENT_QUOTES,'UTF-8');
$str = preg_replace('#[(.*?)](.*?)[/(.*?)]#si', '2', $str);
$str = preg_replace('#[(.*?)]#siu', '', $str);
$str = preg_replace('#[/(.*?)]#siu', '', $str);
$str = str_replace(array(' ', '<br>', '<br/>', '<br />'), ' ', $str);
$str = preg_replace('/s/u', ' ', $str);
$str = preg_replace('/ {2,}/u', ' ', $str);
$str = str_replace($bad, '', trim(strip_tags(stripslashes($str))));
return $str;
}
function genKeywords($str = '', $repeat = 0) {
global $config;
if ($str != '') {
$offset = 0;
$str = StripMeta($str,1);
$str = cms_tolower($str);
$str = str_replace(',', '', $str);
$str = str_replace(' - ', ' ', $str);
$keywords = Array();
$keywords = str_word_count($str, 1, 'абвгдеёжзийклмнопрстуфхцчшщъьыэюя.');
$new_keywords = $last_keywords = array();
foreach($keywords as $key => $value) {
if (cms_strlen(trim($value)) >= 4 && !is_numeric(trim($value))) $new_keywords[] = $value;
}
$new_keywords = array_count_values($new_keywords);
foreach ($new_keywords as $new_key => $new_value) {
if ($new_value > $repeat) $last_keywords[] = $new_key;
}
arsort($last_keywords);
$total = count($last_keywords);
$last_keywords = array_slice($last_keywords, $offset, 50);
$last_keywords = implode(', ', $last_keywords);
return $last_keywords;
}
else {
return $config['site_keys'];
}
}
function genDescription($str = '') {
global $config;
if ($str != '') {
if ( cms_strlen($str) < 20 ) $str .= ' ' . $config['site_desc'];
$str = StripMeta($str);
$str = implode(' ', array_slice(explode(' ', $str), 0, 40));
if ( cms_strlen($str) > 300 ) {
$str = implode(' ', array_slice(explode(' ', $str), 0, 25));
}
return $str;
}
else {
return $config['site_desc'];
}
}
# Функция приветствия
function WelCome($login = 'Гость') {
if ( !defined('SITE_TIME') ):
define( 'SITE_TIME', time() );
endif;
$chas = date( 'H', SITE_TIME );
if ( $chas > 24 ):
$chas = round($chas - 24);
endif;
if ( $chas < 0 ):
$chas = round($chas + 24);
endif;
if ( $chas <= 4 || $chas >= 23 ):
$welcome = 'Доброй ночи';
else:
if ( $chas >= 5 && $chas <= 10 ):
$welcome = 'Доброе утро';
else:
if ( $chas >= 11 && $chas <= 17 ):
$welcome = 'Добрый день';
else:
if ( $chas >= 18 && $chas <= 22 ):
$welcome = 'Добрый вечер';
endif;
endif;
endif;
endif;
return $welcome . ', ' . $login . '!';
}
# Функция показа русской даты
function get_date($time = '', $format = 'd.m.y / H:i') {
global $lang, $config;
if (!is_numeric($time)) {
$time = SITE_TIME;
}
$shift = $config['time_zone'] * 3600;
$date = date($format, $time + $shift);
$today = date("d.m.y", SITE_TIME + $shift);
$yesterday = date("d.m.y", strtotime("-1 day") + $shift);
$date = str_replace($today, 'Сегодня', $date);
$date = str_replace($yesterday, 'Вчера', $date);
$search = array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
$replace = array('Января', 'Февраля', 'Марта', 'Апреля', 'Мая', 'Июня', 'Июля', 'Августа', 'Сентября', 'Октября', 'Ноября', 'Декабря');
$date = str_replace($search, $replace, $date);
return $date;
}
# Функция перевода секунд во время
function maketime($time) {
if ($time < 3600) {
$time = sprintf("%02d:%02d", (int)($time / 60) % 60, $time % 60);
} else {
$time = sprintf("%02d:%02d:%02d", (int)($time / 3600) % 24, (int)($time / 60) % 60, $time % 60);
}
return $time;
}
# Функция перевода секунд в дни
function makestime($time) {
$day = floor($time / 86400);
$hours = floor(($time / 3600) - $day * 24);
$min = floor(($time - $hours * 3600 - $day * 86400) / 60);
$sec = $time - ($min * 60 + $hours * 3600 + $day * 86400);
return sprintf("%01d дн. %02d:%02d:%02d", $day, $hours, $min, $sec);
}
# Функция правильного вывода времени
function formattime($file_time) {
if ($file_time >= 86400) {
$file_time = round((($file_time / 60) / 60) / 24, 1).' дн.';
} else if ($file_time >= 3600) {
$file_time = round(($file_time / 60) / 60, 1).' час.';
} else if ($file_time >= 60) {
$file_time = round($file_time / 60).' мин.';
} else {
$file_time = round($file_time).' сек.';
}
return $file_time;
}
# Функция определения даты для расчетов
function calc_age($time) {
$cur_time = SITE_TIME; // текущее время
$age_time = $cur_time - $time; // вычислить разность
$age = floor($age_time / (365 * 24 * 60 * 60)); // преобразование из секунд в годы
return $age; // возраст
}
# Функция определения знака зодиака
function znakZodiaka($data) {
$day = str_replace('-','',substr($data,5));
$zodiak = array('ot' => array('0120','0219','0321','0421','0521','0622','0723','0823','0923','1024','1123','1222','0101'),
'do' => array('0218','0320','0420','0520','0621','0722','0822','0922','1023','1122','1221','1231','0119'),
'zn' => array('Водолей','Рыбы','Овен','Телец','Близнец','Рак','Лев','Дева','Весы','Скорпион','Стрелец','Козерог','Козерог'));
$i = 0;
while (empty($znak) && ($i < 13)) {
$znak = (($zodiak['ot'][$i] <= $day) && ($zodiak['do'][$i] >= $day)) ? $zodiak['zn'][$i] : null;
++$i;
}
return $znak;
}
# Функция удаления папки с содержимым
/**
* $w = 0 - удалить только содержимое
* $w = 1 - удалить вместе с папкой
*/
function deldir($dir, $w = 0) {
if (is_dir($dir)) {
$handle = opendir($dir);
while (false !== ($file = @readdir($handle))) {
if ($file != '.' and $file !== '..') {
if (is_file($dir . DS . $file)) {
unlink($dir . DS . $file);
}
else if (is_dir($dir . DS . $file)) {
deldir($dir . DS . $file);
rmdir($dir . DS . $file);
}
}
}
closedir($handle);
if (!empty($w)) rmdir($dir);
}
else if (is_file($dir)) {
unlink($dir);
}
return true;
}
# Функция удаления временных файлов
function DelTimeFiles($dir, $sec = '1200') {
if (is_dir($dir)) {
$handle = @opendir($dir);
while (false !== ($file = @readdir($handle))) {
if ($file != '.' && $file !== '..') {
if (is_file($dir . '/' . $file)) {
$ftime = filemtime($dir . '/' . $file) + $sec;
if (time() >= $ftime) {
unlink($dir . '/' . $file);
}
}
else if (is_dir($dir . '/' . $file)) {
DelTimeFiles($dir . '/' . $file, $sec);
rmdir($dir . '/' . $file);
}
}
}
closedir($handle);
}
return true;
}
# Функция выводящая картинку рейтинга статьи
function raiting_vote($str ='') {
global $rating_ext;
$rating_ext = !empty($rating_ext) ? $rating_ext : 'gif';
if (empty($str)) {
$vote = '0';
}
if ($str > '0' && $str <= '0.5') {
$vote = 1;
}
if ($str > '0.5' && $str <= '1') {
$vote = 2;
}
if ($str > '1' && $str <= '1.5') {
$vote = 3;
}
if ($str > '1.5' && $str <= '2') {
$vote = 4;
}
if ($str > '2' && $str <= '2.5') {
$vote = 5;
}
if ($str > '2.5' && $str <= '3') {
$vote = 6;
}
if ($str > '3' && $str <= '3.5') {
$vote = 7;
}
if ($str > '3.5' && $str <= '4') {
$vote = 8;
}
if ($str > '4' && $str <= '4.5') {
$vote = 9;
}
if ($str > '4.5' && $str <= '5') {
$vote = 10;
}
return '<img src="' . ICONS . 'rating' . $vote . '.' . $rating_ext . '" alt="" />';
}
# Функция отправки писем
function SendMail($user_address, $user_name, $subject, $message, $from_mail = '', $from_name = '') {
global $config;
require_once(ENGINE . '/classes/class.phpmailer.php');
$config['mailer_from'] = !empty($from_mail) ? $from_mail : $config['mailer_from'];
$config['mailer_fromname'] = !empty($from_name) ? $from_name : $config['mailer_fromname'];
$config['mailer_hostname'] = !empty($config['mailer_hostname']) ? $config['mailer_hostname'] : $_SERVER['HTTP_HOST'];
$mailer = new PHPMailer( TRUE );
if ( $config['mailer'] == 'smtp' ) {
$mailer->IsSMTP( );
$mailer->Host = $config['mailer_host'];
$mailer->Port = $config['mailer_port'];
$mailer->SMTPAuth = $config['mailer_smtpauth'];
$mailer->SMTPSecure = $config['mailer_smtpsecure'];
$mailer->Username = $config['mailer_username'];
$mailer->Password = $config['mailer_password'];
}
$mailer->CharSet = 'UTF-8';
$mailer->IsHTML( FALSE );
$mailer->Hostname = $config['mailer_hostname'];
$mailer->SetFrom( $config['mailer_from'], $config['mailer_fromname'] );
$mailer->Subject = $subject;
$mailer->Body = $message;
$mailer->AddAddress( $user_address, $user_name );
try {
$mailer->Send( );
return 'ok';
} catch (phpmailerException $e) {
return @$e->errorMessage( );
}
return 'ok';
}
function ChangeSkin($title = '') {
global $config;
$skin_list = <<<HTML
<form method="post" action="">
{$title} <select onchange="submit()" name="action_skin_change">
HTML;
$arrthemes = array();
$globs = glob(THEMES_PATH . '/*', GLOB_ONLYDIR);
foreach($globs as $glob) $arrthemes[] = basename($glob);
$arrthemes = array_unique($arrthemes);
foreach( $arrthemes as $theme ) {
if( $theme == $config['themes'] ) $selected = ' selected="selected"';
else $selected = '';
$skin_list .= <<<HTML
<option value="{$theme}"{$selected}>{$theme}</option>
HTML;
}
$skin_list .= <<<HTML
</select>
</form>
HTML;
return $skin_list;
}
# Функция правильного окончания названия
function num2name($string, $names = '', $num = true) {
global $config;
$string = (int)$string;
if (!is_array($names)) $names = explode(',', $names);
if (count($names) == 3) {
$str1 = abs($string) % 100;
$str2 = $string % 10;
if ($str1 > 10 && $str1 < 20) return ($num == true) ? $string . ' ' . $names[0] : $names[0];
if ($str2 > 1 && $str2 < 5) return ($num == true) ? $string . ' ' . $names[1] : $names[1];
if ($str2 == 1) return ($num == true) ? $string . ' ' . $names[2] : $names[2];
}
return ($num == true) ? $string . ' ' . $names[0] : $names[0];
}
# Функция правильного окончания валюты сайта
function moneys($money = '') {
global $config;
$exp = explode('.', $money);
if ( @count($exp) == 2) {
if ($exp[0] > 0 && $exp[1] > 0) {
$str = num2name($exp[0], $config['gold_money']) . ', ' . num2name($exp[1], $config['silver_money']);
$cach = $exp[1];
}
else if ($exp[0] > 0) {
$str = num2name($exp[0], $config['gold_money']);
$cach = $exp[0];
}
else if ($exp[1] > 0) {
$str = num2name($exp[1], $config['silver_money']);
$cach = $exp[1];
}
}
else {
$str = num2name($money, $config['gold_money']);
$cach = $money;
}
return $str . ' ' . num2name($cach, $config['money_name'], false);
}
# Функция должности юзера
function user_status($level) {
global $config;
$name = explode(',', $config['status_name']);
switch ($level):
case '101': $status = $name[0]; break;
case '102': $status = $name[1]; break;
case '103': $status = $name[2]; break;
case '105': $status = $name[3]; break;
case '106': $status = $name[4]; break;
default: $status = $name[5]; break;
endswitch;
return $status;
}
# Функция проверки авторизации
function is_user() {
global $db;
static $user = 0;
if (empty($user)) {
if (!empty($_SESSION[SP]['log']) && !empty($_SESSION[SP]['par']) && !empty($_SESSION[SP]['uip'])) {
$usip = substr(str_replace('.', '', $_SERVER['REMOTE_ADDR']), 0, 5);
$uset = $db->selectRow("SELECT `users_login`,`users_pass` FROM ?_users
WHERE `users_login` = ? LIMIT 1;", check($_SESSION[SP]['log']));
if (!empty($uset) && $usip == $_SESSION[SP]['uip']) {
if ($_SESSION[SP]['log'] == $uset['users_login'] && md5($_SESSION[SP]['par']) == $uset['users_pass']) {
$user = $uset;
}
}
}
}
return $user;
}
# Функция проверки администрации
function is_admin($access = array()) {
global $db, $uset, $is_logged;
if (empty($access)) {
$access = array(101, 102, 103, 105);
}
if ($is_logged) {
if (in_array($uset['users_level'], $access)) {
return true;
}
}
return false;
}
# Функция определение статуса юзера
function user_title($login = '') {
global $db;
$arrstat = get_vars('users_status', 3600);
if (!$arrstat || !is_array($arrstat)) {
$arrstat = array();
$rows = $db->select("SELECT `u`.`users_login`, `u`.`users_status`, `s`.`status_name`, `s`.`status_color`
FROM ?_users `u`, ?_users_status `s`
WHERE `u`.`users_point` BETWEEN `s`.`status_topoint` AND `s`.`status_point`;");
foreach($rows as $row) {
if (!empty($row['users_status'])) {
$arrstat[$row['users_login']] = '<span style="color:#ff0000">' . $row['users_status'] . '</span>';
continue;
}
if (!empty($row['status_color'])) {
$arrstat[$row['users_login']] = '<span style="color:' . $row['status_color'] . '">' . $row['status_name'] . '</span>';
continue;
}
$arrstat[$row['users_login']] = $row['status_name'];
}
set_vars('users_status', $arrstat);
}
return !empty($arrstat[$login]) ? $arrstat[$login] : 'Дух';
}
# Функция русского ника
function nickname($login) {
global $db;
$arrnick = get_vars('users_nickname', 1800);
if (!$arrnick || !is_array($arrnick)) {
$arrnick = array();
$rows = $db->select("SELECT `users_login`, `users_nickname` FROM ?_users");
foreach($rows as $row) {
$arrnick[$row['users_login']] = !empty($row['users_nickname']) ? $row['users_nickname'] : $row['users_login'];
}
set_vars('users_nickname', $arrnick);
}
return !empty($arrnick[$login]) ? $arrnick[$login] : $login;
}
# Функция карантина
function is_quarantine($log = '') {
global $db, $config;
if (!empty($config['karantin'])) {
$queryuser = $db->selectCell("SELECT `users_joined` FROM ?_users WHERE `users_login` = ? LIMIT 1;", $log);
if ($queryuser + $config['karantin'] > SITE_TIME) {
return false;
}
}
return true;
}
# Функция времени антифлуда
function flood_period() {
global $is_logged, $config, $uset;
$period = $config['floods_time'];
if ($is_logged && $uset['users_point'] >= 500) {
$period = round($config['floods_time'] / 2);
}
if ($is_logged && $uset['users_point'] >= 1000) {
$period = round($config['floods_time'] / 3);
}
if ($is_logged && $uset['users_point'] >= 5000) {
$period = round($config['floods_time'] / 6);
}
if (is_admin()) $period = 0;
return $period;
}
# Функция антифлуда
function is_flood($log, $period = '') {
global $db;
if (empty($period)) {
$period = flood_period();
}
if (empty($period)) {
return true;
}
$prs = @parse_url($_SERVER['REQUEST_URI']);
$db->query("DELETE FROM ?_users_flood WHERE `flood_time` < ?;", SITE_TIME);
$is_flood = (int) $db->selectCell("SELECT `flood_id` FROM ?_users_flood
WHERE `flood_user` = ? AND `flood_page` = ? LIMIT 1;", $log, $prs['path']);
if ($is_flood < 1) {
$db->query("INSERT INTO ?_users_flood (`flood_user`, `flood_page`, `flood_time`) VALUES (?, ?, ?);", $log, $prs['path'], SITE_TIME + $period);
return true;
}
else {
return false;
}
}
# Функция подсчета денег у юзера
function user_money($login) {
global $db;
$arrmoney = get_vars('users_money', 7200);
if (!$arrmoney || is_array($arrmoney)) {
$arrmoney = array();
$rows = $db->select("SELECT `users_login`, `users_money` FROM ?_users");
foreach($rows as $row) $arrmoney[$row['users_login']] = $row['users_money'];
set_vars('users_money', $arrmoney);
}
return !empty($arrmoney[$login]) ? $arrmoney[$login] : 0;
}
# Функция подсчета денег в банке
function user_bankmoney($login) {
global $db;
$arrbank = get_vars('users_moneybank', 7200);
if (!$arrbank || !is_array($arrbank)) {
$arrbank = array();
$rows = $db->select("SELECT `bank_user`,`bank_sum` FROM ?_users_bank");
foreach($rows as $row) $arrbank[$row['bank_user']] = $row['bank_sum'];
set_vars('users_moneybank', $arrbank);
}
return !empty($arrbank[$login]) ? $arrbank[$login] : 0;
}
# Функция вывода аватара пользователя
function user_avatars($login, $is_guest = 0) {
global $db, $config;
if ($login == $config['guest_name'] || $is_guest > 0) {
return '<img src="' . $config['site_url'] . '/images/avatars/guest.gif" alt="" /> ';
}
$arravat = get_vars('users_avatars', 3600);
if (!$arravat || !is_array($arravat)) {
$arravat = array();
$rows = $db->select("SELECT `users_login`, `users_avatar` FROM ?_users");
foreach($rows as $row) $arravat[$row['users_login']] = $row['users_avatar'];
set_vars('users_avatars', $arravat);
}
if (!empty($arravat[$login]) && file_exists(ROOTPATH . $arravat[$login])) {
return '<img src="' . $config['site_url'] . $arravat[$login] . '" alt="" /> ';
}
return '<img src="' . $config['site_url'] . '/themes/' . $config['themes'] . '/icons/no_ava_small.png" alt="" /> ';
}
# Функция кэширования уменьшенных изображений
function resize_image($dir, $name, $size = '', $alt = '') {
global $config;
if ( @file_exists( ROOTPATH . DS . $dir . $name ) ) {
$sign = !empty($alt) ? $alt : $name;
$prename = str_replace('/', '_', $dir);
$imgsize = @getimagesize( ROOTPATH . DS . $dir . $name );
if ($imgsize[0] <= $size && $imgsize[1] <= $size) {
return '<img src="' . $config['site_url'] . DS . $dir . $name . '" alt="' . $sign . '" />';
}
if (!file_exists(ROOTPATH . '/upload/thumbnail/' . $prename . $name) || filesize(ROOTPATH . '/upload/thumbnail/' . $prename . $name) < 18) {
include_once( ENGINE . '/classes/upload.class.php' );
$handle = new upload(ROOTPATH . DS . $dir . $name);
if ($handle -> uploaded) {
$handle -> file_name_body_pre = $prename;
$handle -> image_resize = true;
$handle -> image_ratio = true;
$handle -> image_ratio_no_zoom_in = true;
$handle -> image_y = $size;
$handle -> image_x = $size;
$handle -> file_overwrite = true;
$handle -> process(ROOTPATH . '/upload/thumbnail/');
}
}
return '<img src="' . $config['site_url'] . '/upload/thumbnail/' . $prename . $name . '" alt="' . $sign . '" />';
}
$param = ($size < 100) ? ' height="' . $size . '" width="' . $size . '"' : '';
return '<img src="' . $config['site_url'] . '/images/img/photo.jpg" alt="nophoto"' . $param . ' />';
}
# Функция удаление картинки с проверкой
function unlink_image($dir, $image = '') {
if (!empty($image)) {
clearstatcache();
$prename = str_replace('/', '_', $dir);
if ( @file_exists( ROOTPATH . DS . $dir . $image ) ) {
unlink( ROOTPATH . DS . $dir . $image );
}
if ( @file_exists( ROOTPATH . '/upload/thumbnail/' . $prename . $image ) ) {
unlink( ROOTPATH . '/upload/thumbnail/' . $prename . $image );
}
}
}
# Функция определение онлайн-статуса
function user_online($login) {
global $db;
$statwho = '<span style="color:#ff0000">[Off]</span>';
$arrvisit = get_vars('users_visit', 600);
if (!$arrvisit) {
$arrvisit = array();
$arrvisit = $db->selectCol("SELECT `visit_user` FROM ?_users_visit WHERE `visit_nowtime` > ?;", SITE_TIME-600);
set_vars('users_visit', $arrvisit);
}
if (in_array($login, $arrvisit)) {
$statwho = '<span style="color:#00cc00">[On]</span>';
}
return $statwho;
}
# Функция определение последнего посещения
function user_visit($login = '') {
global $db, $config;
$visit = '(Оффлайн)';
$visit_nowtime = (int) $db->selectCell("SELECT `visit_nowtime` FROM ?_users_visit WHERE `visit_user` = ? LIMIT 1;", $login);
if (!empty($visit_nowtime)) {
if ($visit_nowtime > SITE_TIME-600) {
$visit = '(Сейчас на сайте)';
}
else {
$visit = '(Последний визит: ' . get_date($visit_nowtime) . ')';
}
}
return $visit;
}
# Функция показа иконки последнего посещения
function user_visit_icon($login = '', $sex = '1', $time = '') {
global $db, $config;
$title = 'Оффлайн';
$sex = ($sex == 0) ? 1 : $sex;
$image = ($sex == 1) ? 'man_off.gif' : 'woman_off.gif';
if (!empty($time)) $visit_nowtime = $time;
else $visit_nowtime = (int) $db->selectCell("SELECT `visit_nowtime` FROM ?_users_visit WHERE `visit_user` = ? LIMIT 1;", $login);
if (!empty($visit_nowtime)) {
if ($visit_nowtime > SITE_TIME-600) {
$title = 'Сейчас на сайте';
$image = ($sex == 1) ? 'man_on.gif' : 'woman_on.gif';
}
else {
$title = '(Последний визит: ' . get_date($visit_nowtime) . ')';
}
}
return '<img src="' . $config['site_url'] . '/images/icons/' . $image . '" class="icon" title="' . $title . '" alt="' . $title . '" />';
}
#
function del_lider() {
$array = array();
$globs = glob(ROOTPATH . '/core/lider/*.dat');
foreach($globs as $glob) {
if (basename($glob) == date('dmy') . '.dat') continue;
unlink($glob);
}
}
# Функция добавления лидера дня для форума
function set_lider_forum($login = '') {
global $db, $config;
if (!empty($config['lider_allow'])) {
if (!file_exists(ROOTPATH . '/core/lider/' . date('dmy') . '.dat')) {
$cnt = (int) $db->selectCell("SELECT COUNT(1) FROM ?_forums_posts WHERE `posts_user` = ? AND `posts_time` BETWEEN UNIX_TIMESTAMP(CURRENT_DATE()) AND UNIX_TIMESTAMP(CURRENT_DATE()+INTERVAL 1 DAY);", $login);
$cnt = $cnt + 1; // Прибавляем текущий пост
if ($cnt >= $config['lider_add_posts']) {
$priv = "Поздравляем " . $login;
$priv .= "!nВы стали лидером дня!n";
$priv .= "Добавив " . num2name($cnt, array('сообщений','сообщения','сообщение'));
$priv .= " на форуме за сегодня.n";
$priv .= "Ваш приз: " . moneys($config['lider_prise_money']);
$priv .= "nЭто письмо сгенерировано автоматически и отвечать на него не нужно.";
$db->query("UPDATE ?_users SET `users_newprivat` = (`users_newprivat` + 1), `users_money` = (`users_money` + ?)
WHERE `users_login` = ?", $config['lider_prise_money'], $login);
$db->query("INSERT INTO ?_users_inbox (`inbox_user`, `inbox_author`, `inbox_text`, `inbox_time`)
VALUES (?, ?, ?, ?);", $login, $config['nickname'], $priv, SITE_TIME);
@file_put_contents(ROOTPATH . '/core/lider/' . date('dmy') . '.dat', $login);
del_lider();
}
}
}
}
# Функция добавления лидера дня для зоны обмена
function set_lider_files($login = '') {
global $db, $config;
if (!empty($config['lider_allow'])) {
if (!file_exists(ROOTPATH . '/core/lider/' . date('dmy') . '.dat')) {
$cnt = (int) $db->selectCell("SELECT COUNT(*) FROM ?_downs WHERE `downs_user` = ? AND `downs_time` BETWEEN UNIX_TIMESTAMP(CURRENT_DATE()) AND UNIX_TIMESTAMP(CURRENT_DATE()+INTERVAL 1 DAY);", $login);
if ($cnt >= $config['lider_add_posts']) {
$priv = "Поздравляем " . $login;
$priv .= "!nВы стали лидером дня!n";
$priv .= "Добавив " . num2name($cnt, array('файлов','файла','файл'));
$priv .= " за сегодня.n";
$priv .= "Ваш приз: " . moneys($config['lider_prise_money']);
$priv .= "nЭто письмо сгенерировано автоматически и отвечать на него не нужно.";
$db->query("UPDATE ?_users SET `users_newprivat` = (`users_newprivat` + 1), `users_money` = (`users_money` + ?)
WHERE `users_login` = ?", $config['lider_prise_money'], $login);
$db->query("INSERT INTO ?_users_inbox (`inbox_user`, `inbox_author`, `inbox_text`, `inbox_time`)
VALUES (?, ?, ?, ?);", $login, $config['nickname'], $priv, SITE_TIME);
@file_put_contents(ROOTPATH . '/core/lider/' . date('dmy') . '.dat', $login);
del_lider();
}
}
}
}
# Функция показа иконки страны
function show_country_icon($c = '') {
global $config, $countries;
$img = $config['site_url'] . '/images/flags/unknown.png';
if (empty($countries[$c])) $countries[$c] = 'Unknown';
if ( @file_exists( ROOTPATH . '/images/flags/' . cms_tolower($c) . '.png' ) ) {
$img = $config['site_url'] . '/images/flags/' . cms_tolower($c) . '.png';
}
return '<img src="' . $img . '" class="icon" title="' . $countries[$c] . '" alt="' . $countries[$c] . '" /> ';
}
# Функция создания JAD файла
function get_jad($jar_path, $jar_url) {
if (!class_exists('PclZip')) {
include( ENGINE . '/classes/pclzip.class.php' );
}
if (!file_exists($jar_path)) return false;
$jad_path = str_ireplace('.jar', '.jad', $jar_path);
if (file_exists($jad_path)) return true;
$zip = new PclZip($jar_path);
$manifest_arr = $zip->extract(PCLZIP_OPT_BY_NAME, 'META-INF/MANIFEST.MF', PCLZIP_OPT_EXTRACT_AS_STRING);
if (!$manifest = $manifest_arr[0]['content']) return false;
$jar_filesize = filesize($jar_path);
$midlet_jar_size = sprintf("MIDlet-Jar-Size: %d", $jar_filesize);
$midlet_jar_url = sprintf("MIDlet-Jar-URL: %s", $jar_url);
$jad_content = sprintf("%sn%sn%sn", trim($manifest), $midlet_jar_size, $midlet_jar_url);
return file_put_contents($jad_path, $jad_content);
}
function set_users_shop($login = '', $name = '', $type = '', $price = '') {
global $db;
//$row = $db->selectRow("SELECT * FROM ?_users_shop WHERE `shop_user` = ? AND `shop_type` = ?", $login, $type);
//if (!empty($row)) {
//$db->query("UPDATE ?_users_shop SET `shop_name` = ?, `shop_time` = ?, `shop_money` = ?
//WHERE `shop_user` = ? AND `shop_type` = ?", $name, SITE_TIME, $price, $login, $type);
//}
//else {
$db->query("INSERT INTO ?_users_shop
SET `shop_user` = ?, `shop_name` = ?, `shop_money` = ?, `shop_type` = ?, `shop_time` = ?", $login, $name, $price, $type, SITE_TIME);
//}
return true;
}
# Функция создания скрина из 3gp
function screen_3gp($file = '', $frame = 50, $output = '') {
if (!class_exists('ffmpeg_movie')) {
return 'Ничего не выйдет, нужна поддержка ffmpeg на хостинге!';
}
if (file_exists($file)) {
$mov = new ffmpeg_movie($file);
}
else {
return 'Невозможно найти файл!';
}
//ширина
$w = $mov->GetFrameWidth();
//высота
$h = $mov->GetFrameHeight();
//извлечение кадра
$ff_frame = $mov->getFrame($frame);
if ($ff_frame) {
//в формат GD
$gd_image = $ff_frame->toGDImage();
if ($gd_image) {
//вывод (для примера в gif)
//header('Content-type: image/gif');
imagegif($gd_image, $output);
return 'ok';
}
else {
return 'Невозможно преобразовать в GD!';
}
}
else {
return 'Невозможно извлечь кадр!';
}
}
?>