2, 'day' => 10, 'night' => 30, 'dayfrom' => 10, 'dayto' => 22 ); $af = isset(self::$system_set['antiflood']) ? unserialize(self::$system_set['antiflood']) : $default; switch ($af['mode']) { case 1: // Адаптивный режим $adm = mysql_result(mysql_query("SELECT COUNT(*) FROM `users` WHERE `rights` > 0 AND `lastdate` > " . (time() - 300)), 0); $limit = $adm > 0 ? $af['day'] : $af['night']; break; case 3: // День $limit = $af['day']; break; case 4: // Ночь $limit = $af['night']; break; default: // По умолчанию день / ночь $c_time = date('G', time()); $limit = $c_time > $af['day'] && $c_time < $af['night'] ? $af['day'] : $af['night']; } if (self::$user_rights > 0) $limit = 4; // Для Администрации задаем лимит в 4 секунды $flood = self::$user_data['lastpost'] + $limit - time(); if ($flood > 0) return $flood; else return false; } /* ----------------------------------------------------------------- Маскировка ссылок в тексте ----------------------------------------------------------------- */ public static function antilink($var) { $var = preg_replace('~\\[url=(https?://.+?)\\](.+?)\\[/url\\]|(https?://(www.)?[0-9a-z\.-]+\.[0-9a-z]{2,6}[0-9a-zA-Z/\?\.\~&_=/%-:#]*)~', '###', $var); $replace = array( '.ru' => '***', '.com' => '***', '.biz' => '***', '.cn' => '***', '.in' => '***', '.net' => '***', '.org' => '***', '.info' => '***', '.mobi' => '***', '.wen' => '***', '.kmx' => '***', '.h2m' => '***' ); return strtr($var, $replace); } /* ----------------------------------------------------------------- Проверка переменных ----------------------------------------------------------------- */ public static function check($str) { $str = htmlentities(trim($str), ENT_QUOTES, 'UTF-8'); $str = nl2br($str); $str = strtr($str, array( chr(0) => '', chr(1) => '', chr(2) => '', chr(3) => '', chr(4) => '', chr(5) => '', chr(6) => '', chr(7) => '', chr(8) => '', chr(9) => '', chr(10) => '', chr(11) => '', chr(12) => '', chr(13) => '', chr(14) => '', chr(15) => '', chr(16) => '', chr(17) => '', chr(18) => '', chr(19) => '', chr(20) => '', chr(21) => '', chr(22) => '', chr(23) => '', chr(24) => '', chr(25) => '', chr(26) => '', chr(27) => '', chr(28) => '', chr(29) => '', chr(30) => '', chr(31) => '' )); $str = str_replace("'", "'", $str); $str = str_replace('\\', "\", $str); $str = str_replace("|", "I", $str); $str = str_replace("||", "I", $str); $str = str_replace("/\\\$/", "$", $str); $str = mysql_real_escape_string($str); return $str; } /* ----------------------------------------------------------------- Обработка текстов перед выводом на экран ----------------------------------------------------------------- $br=1 обработка переносов строк $br=2 подстановка пробела, вместо переноса $tags=1 обработка тэгов $tags=2 вырезание тэгов ----------------------------------------------------------------- */ public static function checkout($str, $br = 0, $tags = 0) { $str = htmlentities(trim($str), ENT_QUOTES, 'UTF-8'); if ($br == 1) $str = nl2br($str); elseif ($br == 2) $str = str_replace("\r\n", ' ', $str); if ($tags == 1) $str = bbcode::tags($str); elseif ($tags == 2) $str = bbcode::notags($str); $replace = array( chr(0) => '', chr(1) => '', chr(2) => '', chr(3) => '', chr(4) => '', chr(5) => '', chr(6) => '', chr(7) => '', chr(8) => '', chr(9) => '', chr(11) => '', chr(12) => '', chr(13) => '', chr(14) => '', chr(15) => '', chr(16) => '', chr(17) => '', chr(18) => '', chr(19) => '', chr(20) => '', chr(21) => '', chr(22) => '', chr(23) => '', chr(24) => '', chr(25) => '', chr(26) => '', chr(27) => '', chr(28) => '', chr(29) => '', chr(30) => '', chr(31) => '' ); return strtr($str, $replace); } /* ----------------------------------------------------------------- Показ различных счетчиков внизу страницы ----------------------------------------------------------------- */ public static function display_counters() { global $headmod; $req = mysql_query("SELECT * FROM `cms_counters` WHERE `switch` = '1' ORDER BY `sort` ASC"); if (mysql_num_rows($req) > 0) { while (($res = mysql_fetch_array($req)) !== false) { $link1 = ($res['mode'] == 1 || $res['mode'] == 2) ? $res['link1'] : $res['link2']; $link2 = $res['mode'] == 2 ? $res['link1'] : $res['link2']; $count = ($headmod == 'mainpage') ? $link1 : $link2; if (!empty($count)) echo $count; } } } /* ----------------------------------------------------------------- Показываем дату с учетом сдвига времени ----------------------------------------------------------------- */ public static function display_date($var) { $shift = (self::$system_set['timeshift'] + self::$user_set['timeshift']) * 3600; if (date('Y', $var) == date('Y', time())) { if (date('z', $var + $shift) == date('z', time() + $shift)) return self::$lng['today'] . ', ' . date("H:i", $var + $shift); if (date('z', $var + $shift) == date('z', time() + $shift) - 1) return self::$lng['yesterday'] . ', ' . date("H:i", $var + $shift); } return date("d.m.Y / H:i", $var + $shift); } /* ----------------------------------------------------------------- Сообщения об ошибках ----------------------------------------------------------------- */ public static function display_error($error = NULL, $link = NULL) { if (!empty($error)) { return '
'; } else { return false; } } /* ----------------------------------------------------------------- Отображение различных меню ----------------------------------------------------------------- $delimiter - разделитель между пунктами $end_space - выводится в конце ----------------------------------------------------------------- */ public static function display_menu($val = array(), $delimiter = ' | ', $end_space = '') { return implode($delimiter, array_diff($val, array(''))) . $end_space; } /* ----------------------------------------------------------------- Постраничная навигация За основу взята аналогичная функция от форума SMF2.0 ----------------------------------------------------------------- */ public static function display_pagination($base_url, $start, $max_value, $num_per_page) { $neighbors = 2; if ($start >= $max_value) $start = max(0, (int)$max_value - (((int)$max_value % (int)$num_per_page) == 0 ? $num_per_page : ((int)$max_value % (int)$num_per_page))); else $start = max(0, (int)$start - ((int)$start % (int)$num_per_page)); $base_link = '%s'; $out[] = $start == 0 ? '' : sprintf($base_link, $start / $num_per_page, '<<'); if ($start > $num_per_page * $neighbors) $out[] = sprintf($base_link, 1, '1'); if ($start > $num_per_page * ($neighbors + 1)) $out[] = '...'; for ($nCont = $neighbors; $nCont >= 1; $nCont--) if ($start >= $num_per_page * $nCont) { $tmpStart = $start - $num_per_page * $nCont; $out[] = sprintf($base_link, $tmpStart / $num_per_page + 1, $tmpStart / $num_per_page + 1); } $out[] = '' . ($start / $num_per_page + 1) . ''; $tmpMaxPages = (int)(($max_value - 1) / $num_per_page) * $num_per_page; for ($nCont = 1; $nCont <= $neighbors; $nCont++) if ($start + $num_per_page * $nCont <= $tmpMaxPages) { $tmpStart = $start + $num_per_page * $nCont; $out[] = sprintf($base_link, $tmpStart / $num_per_page + 1, $tmpStart / $num_per_page + 1); } if ($start + $num_per_page * ($neighbors + 1) < $tmpMaxPages) $out[] = '...'; if ($start + $num_per_page * $neighbors < $tmpMaxPages) $out[] = sprintf($base_link, $tmpMaxPages / $num_per_page + 1, $tmpMaxPages / $num_per_page + 1); if ($start + $num_per_page < $max_value) { $display_page = ($start + $num_per_page) > $max_value ? $max_value : ($start / $num_per_page + 2); $out[] = sprintf($base_link, $display_page, '>>'); } return implode(' ', $out); } /* ----------------------------------------------------------------- Показываем местоположение пользователя ----------------------------------------------------------------- */ public static function display_place($user_id = '', $place = '') { global $headmod; $place = explode(",", $place); $placelist = parent::load_lng('places'); if (array_key_exists($place[0], $placelist)) { if ($place[0] == 'profile') { if ($place[1] == $user_id) { return '' . $placelist['profile_personal'] . ''; } else { $user = self::get_user($place[1]); return $placelist['profile'] . ': ' . $user['name'] . ''; } } elseif ($place[0] == 'online' && isset($headmod) && $headmod == 'online') return $placelist['here']; else return str_replace('#home#', self::$system_set['homeurl'], $placelist[$place[0]]); } else return '' . $placelist['homepage'] . ''; } /* ----------------------------------------------------------------- Отображения личных данных пользователя ----------------------------------------------------------------- $user (array) массив запроса в таблицу `users` $arg (array) Массив параметров отображения [lastvisit] (boolean) Дата и время последнего визита [stshide] (boolean) Скрыть статус (если есть) [iphide] (boolean) Скрыть (не показывать) IP и UserAgent [iphist] (boolean) Показывать ссылку на историю IP [header] (string) Текст в строке после Ника пользователя [body] (string) Основной текст, под ником пользователя [sub] (string) Строка выводится вверху области "sub" [footer] (string) Строка выводится внизу области "sub" ----------------------------------------------------------------- */ public static function display_user($user = false, $arg = false) { global $rootpath, $mod; $out = false; if (!$user['id']) { $out = '' . self::$lng['guest'] . ''; if (!empty($user['name'])) $out .= ': ' . $user['name']; if (!empty($arg['header'])) $out .= ' ' . $arg['header']; } else { if (self::$user_set['avatar']) { $out .= ''; if (file_exists(($rootpath . 'files/users/avatar/' . $user['id'] . '.png'))) $out .= ' '; else $out .= ' '; $out .= ' | ';
}
if ($user['sex'])
$out .= ' ';
else
$out .= ' ';
$out .= !self::$user_id || self::$user_id == $user['id'] ? '' . $user['name'] . ' ' : '' . $user['name'] . '';
$rank = array(
0 => '',
1 => '(GMod)',
2 => '(CMod)',
3 => '(FMod)',
4 => '(DMod)',
5 => '(LMod)',
6 => '(Smd)',
7 => '(Adm)',
9 => '(SV!)'
);
$out .= ' ' . $rank[$user['rights']];
$out .= (time() > $user['lastdate'] + 300 ? ' [Off]' : ' [ON]');
if (!empty($arg['header']))
$out .= ' ' . $arg['header'];
if (!isset($arg['stshide']) && !empty($user['status']))
$out .= ' ' . $user['status'] . ' ';
if (self::$user_set['avatar'])
$out .= ' |