<?
// загрузка пользовательских функций "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) . "')");
}
?>