Вход Регистрация
Файл: 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($textENT_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/?.~&amp;_=/%-:#]*)~''###'$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) > ) {

            
$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('&lt;' => '<''&gt;' => '>''&amp;' => '&''&quot;' => '"''&#36;' => '$''&#37;' => '%''&#39;' => "'"'&#92;' => '\', '&#94;' => '^', '&#96;' => '`', '&#124;' => '|', '<br />' => "rn"));
    
$code highlight_string($codetrue);
    
$code strtr($code, array("rn" => '<br />''$' => '&#36;'"'" => '&#39;''%' => '&#37;''\' => '&#92;', '`' => '&#96;', '^' => '&#94;', '|' => '&#124;'));
    
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($text0$config['substr_text']);
    return 
nl2br($text);
}

# Функция замены и вывода смайлов
function smiles($str '') {

    global 
$config;
    
$str str_replace(':','&#58;'$str);
    
$str preg_replace('|&#58;|',':'$str5); 
    
$arrsmiles = array();
    
$globsmiles globROOTPATH '/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('&#58;',':',$str);  
}

# Функция обратной замены смайлов
function nosmiles($str '') {

    
$str preg_replace('|<img src="(.*?)/smiles/(.*?).gif" alt="(.*?)" />|'':$2'$str);
    return 
$str;  
}


function extensions($ext '') {

    if ( @
file_existsROOTPATH '/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('&#124;', '&#39;', '&#36;', '&#92;', '&#94;', '&#37;', '&#96;', '', '', '');
            
$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('&amp;', '&', $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('&amp;', '&', $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) . '">&lt;&lt; Назад</a>'; 
        else 
$show_start .= '<span>&lt;&lt; Назад</span>';

        if (
$maxpage > $page$show_stop .= '<a title="Далее  &gt;&gt;" href="' . gen_uri($path$rewrite . $next$query) . '">Далее  &gt;&gt;</a>'; 
        else 
$show_stop .= '<span>Далее &gt;&gt;</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 . '&amp;page=';
        }

        if (
$page > 1) $show_start .= '<a title="Назад" href="' . $path . $prev . $query . '">&lt;&lt; Назад</a>';
        else 
$show_start .= '<span>&lt;&lt; Назад</span>';

        if (
$maxpage > $page$show_stop .= '<a title="Далее" href="' . $path . $next . $query. '">Далее &gt;&gt;</a>';
        else 
$show_stop .= '<span>Далее &gt;&gt;</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('&nbsp;', '<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 'Невозможно извлечь кадр!';
    }
}

?>
Онлайн: 0
Реклама