View file xmyx.ru/sys/inc/fnc.php

File size: 9.14Kb
<?
// загрузка пользовательских функций "sys/fnc"
foreach (glob ($_SERVER['DOCUMENT_ROOT'] . '/sys/fnc/*.php') as $file)
    require_once $file;

// псевдонимы функций
function my_esc($str)
{
	return mysql_real_escape_string($str);
}


function __($str)
{
	return $str;
}


// антимат сделает автоматическое предупреждение, а затем бан
function antimat($str)
{
    global $user, $time, $set;
    if ($set['antimat']) {
        $antimat = (isset($_SESSION['antimat']) && is_numeric($_SESSION['antimat']) ?  ++$_SESSION['antimat'] : $_SESSION['antimat'] = 0);
        
        include_once H.'sys/inc/censure.php';
        
        $censure = censure($str);
        
        if ($censure) {
           
            if ($antimat > 3 && isset($user) && $user['level']) {
                $prich = "Обнаружен мат: $censure";
                $timeban = $time + 60 * 60; 
				unset($_SESSION['antimat']); // удаляем сессию 
                //mysql_query("INSERT INTO `ban` (`id_user`, `id_ban`, `prich`, `time`) VALUES ('$user[id]', '0', '$prich', '$timeban')");
                //exit(header('Location: /ban.php?'.SID));
				
            }
            return $censure;
        }
        else return false;
    }
    else return false;
}

if (!isset($hard_process)) 
{
	// очистка временной папки
    if(!is_file($_SERVER['DOCUMENT_ROOT'].'/sys/tmp/clear_tmp_dir.touch'))
        touch($_SERVER['DOCUMENT_ROOT'].'/sys/tmp/clear_tmp_dir.touch');
    if(filemtime($_SERVER['DOCUMENT_ROOT'].'/sys/tmp/clear_tmp_dir.touch') < ($time - 60 * 60 * 24))
    {
        foreach((array)glob($_SERVER['DOCUMENT_ROOT'].'/sys/tmp/*.{dat,ser}', GLOB_BRACE) as $file)
            if(is_file($file) && fileatime($file) < ($time - 60 * 60 * 24))
                unlink($file);
        touch($_SERVER['DOCUMENT_ROOT'].'/sys/tmp/clear_tmp_dir.touch');
    }

    $q =  mysql_query("SELECT * FROM `cron` WHERE `id` = 'everyday'");
    if (mysql_num_rows($q) == 0)
         mysql_query("INSERT INTO `cron` (`id`, `time`) VALUES ('everyday', '" . $time . "')");

    $everyday = mysql_fetch_assoc($q);
    if ($everyday['time'] == null || $everyday['time'] < $time - 60 * 60 * 24) 
    {
        $hard_process = true;
        if (function_exists('set_time_limit'))
            set_time_limit(600); // Ставим ограничение на 10 минут
        mysql_query("UPDATE `cron` SET `time` = '" . $time . "' WHERE `id` = 'everyday'");
        mysql_query("DELETE FROM `guests` WHERE `date_last` < '" . ($time - 600) . "'");
        mysql_query("DELETE FROM `user_log` WHERE `time` < '" . ($time - 60 * 60 * 168) . "'"); // удаление старых постов в чате
        mysql_query("DELETE FROM `user` WHERE `activation` != null AND `date_reg` < '" . ($time - 60 * 60 * 24) . "'"); // удаление неактивированных аккаунтов
        mysql_query("DELETE FROM `users_konts` WHERE `type` = 'deleted' AND `time` < ".($time-60 * 60 * 24 * 30)); // удаляем все контакты, помеченные на удаление более месяца назад

        $tab =  mysql_query('SHOW TABLES FROM ' . $set['mysql_db_name']);
        for ($i = 0; $i <  mysql_num_rows($tab); $i++) 
            mysql_query("OPTIMIZE TABLE `" . mysql_tablename($tab,$i) . "`"); // оптимизация таблиц
    }
}

// запись о переходах на сайт
if (isset($_SERVER['HTTP_REFERER']) && !preg_match('#'.preg_quote($_SERVER['HTTP_HOST']).'#', $_SERVER['HTTP_REFERER']) && $ref=@parse_url($_SERVER['HTTP_REFERER']))
    if (isset($ref['host']))
        $_SESSION['http_referer']=$ref['host'];

function br($msg,$br='<br />')// переносы строк
{
    return preg_replace("#((<br( ?/?)>)|\n|\r)+#i",$br, $msg);
} 

function esc($text, $br = false)
{
    $array = $br ? range(0, 31) : array_merge(range(0,9), range(11, 19), range(21, 31));
    return str_replace(array_map('chr', $array), null, $text);
}

// получаем данные пользователя и уровень прав (+ кеширование)
function get_user($id = 0)
{
    $id = intval($id);
	
    static $users = array();
	
    if (!array_key_exists($id, $users)) {
        if ($id === 0) {
            $users[0] = array(
                'id' => 0,
                'nick' => 'Система',
                'level' => 999,
                'pol' => 1,
                'group_access' => 999,
                'rating' => 999,
                'date_last' => $_SERVER['REQUEST_TIME'],
                'browser' => 'web',
                'group_name' => 'Системный робот',
                'ank_o_sebe' => 'Создан для уведомлений',
                'is_user' => false
            );
        } else {

            $request =  mysql_query("select `users`.*, `users_groups`.`level` as `level`, `users_groups`.`name` as `group_name` 
                from `user` as `users`, `user_group` as `users_groups` 
                where `users`.`id` = '".$id."' and `users_groups`.`id` = `users`.`group_access` LIMIT 1");

            $users[$id] =  mysql_num_rows($request) ? mysql_fetch_assoc($request) : false;
            mysql_free_result($request);
        }
    }

    return $users[$id];
}

// определение оператора
function opsos($ips = null)
{
    global $ip;
    if ($ips == null) 
        $ips = $ip;

    $ipl = ip2long($ips);
    if (!mysql_result(mysql_query("SELECT COUNT(*) FROM `opsos` WHERE `min` <= '$ipl' AND `max` >= '$ipl'"), 0) != 0) 
        return false;
    $opsos = mysql_fetch_assoc(mysql_query("SELECT opsos FROM `opsos` WHERE `min` <= '$ipl' AND `max` >= '$ipl' LIMIT 1"));

    return stripcslashes(htmlspecialchars($opsos['opsos']));
}


// вывод времени
function vremja($time = NULL) 
{
    static $ank;
    if(empty($ank))
    {
        global $user;
        $ank = $user;
        unset($user);
    }
    if(!$time) 
        $time = time();
    $time = (isset($ank) ? ($time + $ank['set_timesdvig']) : $time);
    $data = date('j.n.y', $time);

    if($data == date('j.n.y')) 
        $res = 'Сегодня в '. date('G:i', $time);
    elseif($data == date('j.n.y', time() - 86400)) 
        $res = 'Вчера в '. date('G:i', $time);
    else 
    {
        $m = array(1 => 'Янв', 2 => 'Фев', 3 => 'Мар', 4 => 'Апр', 5 => 'Май', 6 => 'Июн', 7 => 'Июл', 8 => 'Авг', 9 => 'Сен', 10 => 'Окт', 11 => 'Ноя', 12 => 'Дек');
        $res = date('j '. $m[date('n', $time)] .' Y в G:i', $time);
    }
    return $res;
}


// только для зарегистрированых
function only_reg($link = NULL) 
{
global $user;
if (!isset($user))
{
if ($link==NULL)$link='/';
header("Location: $link");exit;}}


// только для незарегистрированых
function only_unreg($link = NULL) {
global $user;
if (isset($user)){
if ($link==NULL)$link='/';
header("Location: $link");exit;}}


// только для тех, у кого уровень доступа больше или равен $level
function only_level($level=0,$link = NULL) {
global $user;
if (!isset($user) || $user['level']<$level){
if ($link==NULL)$link='/';
header("Location: $link");exit;}}



// вывод ошибок
function err()
{
    global $err;
    
    if (isset($err)) 
    {
        if (is_array($err)) 
            foreach ($err as $key => $value){ 
?>
<div class="fi_row"><div class="service_msg_box">
  <div class="service_msg service_msg_warning"><?= $value?></div>
</div></div>
<?
        }
        else{ 
?>
<div class="fi_row"><div class="service_msg_box">
  <div class="service_msg service_msg_warning"><?= $err?></div>
</div></div>
<?
        }
    }
}
// вывод сообщений
function msg($msg){
?>
<div class="fi_row"><div class="service_msg_box"><div class="service_msg service_msg_ok"><?= $msg?></div></div></div>
<?
} 


// сохранение настроек системы
function save_settings($set)
{
    unset($set['web']);
    if(file_put_contents(H.'sys/dat/settings.json', json_encode($set, JSON_PRETTY_PRINT), LOCK_EX))
    {
        chmod(H.'sys/dat/settings.json', 0644);
        return true;
    }
    else
        return false;
}

// запись действий администрации
function admin_log($mod, $act, $opis)
{
    global $user;
    $q =  mysql_query("SELECT * FROM `admin_log_mod` WHERE `name` = '" .my_esc($mod) . "' LIMIT 1");
    if (mysql_num_rows($q) == 0) {
         mysql_query("INSERT INTO `admin_log_mod` (`name`) VALUES ('" .my_esc($mod) . "')");
        $id_mod = mysql_insert_id();
    } else {
        $id_mod = mysql_result($q, 0);
    }
    $q2 = mysql_query("SELECT * FROM `admin_log_act` WHERE `name` = '" . my_esc($act) . "' AND `id_mod` = '$id_mod' LIMIT 1");
    if (mysql_num_rows($q2) == 0) {
         mysql_query("INSERT INTO `admin_log_act` (`name`, `id_mod`) VALUES ('" . my_esc($act) . "', '$id_mod')");
        $id_act = mysql_insert_id();
    } else {
        $id_act =  mysql_result($q2, 0);
    }
    mysql_query("INSERT INTO `admin_log` (`time`, `id_user`, `mod`, `act`, `opis`) VALUES
('" . TIME . "','$user[id]', '$id_mod', '$id_act', '" .my_esc($opis) . "')");
}

?>