26 $lower_class_name = str_replace(
'\\',
'/', $lower_class_name);
27 if($CONFIG[
'site'][
'skin']) {
28 $fname = $CONFIG[
'site'][
'location'].
'/skins/'.$CONFIG[
'site'][
'skin'].
'/include/'.$lower_class_name.
'.php';
29 if(is_readable($fname)) {
34 $filename = dirname(__DIR__)
36 .str_replace(
'\\', DIRECTORY_SEPARATOR,
$class_name)
38 if(is_readable($filename)) {
39 include_once $filename;
44 spl_autoload_register(
'core_autoload');
51 if($phone[0]!=
'+')
return $phone;
52 $divs=array(
'',
'',
'-',
'',
'',
'-',
'',
'',
'-',
'',
'-',
'',
'-',
'',
'-',
'',
'-',
'',
'-',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'');
57 $fphone.=$divs[
$i].$phone[
$i];
69 header(
'HTTP/1.0 500 Internal error');
70 header(
'Status: 500 Internal error');
72 $ff =
html_out($_SERVER[
'REQUEST_URI']);
73 echo
"<!DOCTYPE html><html><meta charset=\"utf-8\"><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">
74 <head><title>Error 500: Необработанная внутренняя ошибка</title>
75 <style type='text/css'>body{color: #000; background-color: #eee; text-align: center;}</style></head><body>
76 <h1>Необработанная внутренняя ошибка</h1>".get_class($exception).
": $s<br>Страница:$ff<br>Сообщение об ошибке передано администратору</body></html>";
79 set_exception_handler(
'exception_handler');
87 $tmp = explode($substr,
' ' .
$str .
' ');
89 foreach ($tmp as
$t) {
93 $result.=
"<span class='b_selection'>" .
html_out($substr) .
"</span>$t";
100 $phone = preg_replace(
"/[^0-9+]/",
"", $phone);
101 if(strlen($phone)<3) {
104 $phoneplus = $phone[0]==
'+';
105 $phone = preg_replace(
"/[^0-9]/",
"", $phone);
106 if($phoneplus && $phone[0]==7 && strlen($phone)==11) {
108 } elseif(!$phoneplus && $phone[0]==8 && strlen($phone)==11) {
109 return '+7'.substr($phone,1);
110 } elseif(!$phoneplus && $phone[0]==9 && strlen($phone)==10) {
119 if (headers_sent()) {
124 header(
'Location: '. $url,
true, 301);
126 if ( isset($_SERVER[
'REQUEST_METHOD']) && $_SERVER[
'REQUEST_METHOD'] !=
'HEAD') {
128 <p>Redirecting to: <a href="'.str_replace(
'"',
'%22', $url).
'">'
129 .htmlspecialchars($url).
'</a>.</p>
130 <script type="text/javascript">
132 if (location.replace == null) {
133 location.replace = location.assign;
135 location.replace("'.str_replace(
'"',
'\\"', $url).
'");
149 if($minlen<1) $minlen = 5;
150 if($maxlen>10000) $maxlen = 10000;
151 if($maxlen<$minlen) $maxlen = $minlen;
153 $sstr =
"bcdfghjklmnprstvwxz";
154 $gstr =
"aeiouy1234567890aeiouy";
155 $rstr =
"aeiouy1234567890aeiouybcdfghjklmnprstvwxz";
156 $sln = strlen(
$sstr)-1;
157 $gln = strlen(
$gstr)-1;
158 $rln = strlen(
$rstr)-1;
164 $sln = strlen(
$sstr)-1;
165 $gln = strlen(
$gstr)-1;
166 $rln = strlen(
$rstr)-1;
170 $ln = rand($minlen,$maxlen);
192 if(isset($_REQUEST[$varname]))
return $_REQUEST[$varname];
201 $a=array_fill_keys($var_array, $def);
202 $v=array_intersect_key($_REQUEST, $a);
203 $r=array_merge($a,$v);
210 if(isset($_REQUEST[$varname]))
return intval($_REQUEST[$varname]);
217 if(isset($_REQUEST[$varname]))
return round($_REQUEST[$varname],$round);
224 if(isset($_REQUEST[$varname]))
return date(
"Y-m-d", strtotime($_REQUEST[$varname]));
231 if(isset($_REQUEST[$varname]))
return date(
"H:i:s", strtotime($_REQUEST[$varname]));
238 if(isset($_REQUEST[$varname]))
return date(
"Y-m-d H:i:s", strtotime($_REQUEST[$varname]));
245 return html_entity_decode(
$data, ENT_QUOTES,
"UTF-8");
251 return htmlentities(
$data, ENT_QUOTES,
"UTF-8");
263 $_SESSION[
'last_page']=$_SERVER[
'REQUEST_URI'];
282 $res = $db->query(
"SELECT `last_session_id` FROM `users` WHERE `id`=".intval(
$_SESSION[
'uid']));
284 list($stored_session_id) =
$res->fetch_row();
285 if($stored_session_id != session_id()) {
298 "А"=>
"A",
"Б"=>
"B",
"В"=>
"V",
"Г"=>
"G",
299 "Д"=>
"D",
"Е"=>
"E",
"Ж"=>
"J",
"З"=>
"Z",
"И"=>
"I",
300 "Й"=>
"Y",
"К"=>
"K",
"Л"=>
"L",
"М"=>
"M",
"Н"=>
"N",
301 "О"=>
"O",
"П"=>
"P",
"Р"=>
"R",
"С"=>
"S",
"Т"=>
"T",
302 "У"=>
"U",
"Ф"=>
"F",
"Х"=>
"H",
"Ц"=>
"TS",
"Ч"=>
"CH",
303 "Ш"=>
"SH",
"Щ"=>
"SCH",
"Ъ"=>
"",
"Ы"=>
"YI",
"Ь"=>
"",
304 "Э"=>
"E",
"Ю"=>
"YU",
"Я"=>
"YA",
"а"=>
"a",
"б"=>
"b",
305 "в"=>
"v",
"г"=>
"g",
"д"=>
"d",
"е"=>
"e",
"ж"=>
"j",
306 "з"=>
"z",
"и"=>
"i",
"й"=>
"y",
"к"=>
"k",
"л"=>
"l",
307 "м"=>
"m",
"н"=>
"n",
"о"=>
"o",
"п"=>
"p",
"р"=>
"r",
308 "с"=>
"s",
"т"=>
"t",
"у"=>
"u",
"ф"=>
"f",
"х"=>
"h",
309 "ц"=>
"ts",
"ч"=>
"ch",
"ш"=>
"sh",
"щ"=>
"sch",
"ъ"=>
"y",
310 "ы"=>
"yi",
"ь"=>
"",
"э"=>
"e",
"ю"=>
"yu",
"я"=>
"ya"
313 foreach($tr as
$s=>
$r)
322 if($template) $tmpl->loadTemplate($template);
328 settype(
$uid,
'int');
329 $user_profile = array();
330 $user_profile[
'main'] = array();
331 $user_profile[
'dop'] = array();
333 $res = $db->query(
"SELECT * FROM `users` WHERE `id`='$uid'");
334 if (!
$res->num_rows) {
335 return $user_profile;
337 $user_profile[
'main'] =
$res->fetch_assoc();
338 unset($user_profile[
'main'][
'pass']);
339 unset($user_profile[
'main'][
'pass_change']);
340 $res = $db->query(
"SELECT `param`,`value` FROM `users_data` WHERE `uid`='$uid'");
341 while ($nn =
$res->fetch_row()) {
342 $user_profile[
'dop'][$nn[0]] = $nn[1];
344 return $user_profile;
359 if ($CONFIG[
'site'][
'skin'])
368 $fd = @file(
'skins/' .
$s .
'/style.tpl');
371 foreach (
$fd as $item)
379 $this->hide_blocks[$block] =
true;
385 unset($this->hide_blocks[$block]);
390 @$this->page_blocks[
'top'] =
$s;
395 @$this->page_blocks[
'top'].=
$s;
400 @$this->page_blocks[
'right'] =
$s;
405 @$this->page_blocks[
'right'] =
$s . $this->page_blocks[
'right'];
410 @$this->page_blocks[
'right'].=
$s;
415 @$this->page_blocks[
'left'].=
$s;
420 @$this->page_blocks[
'left'] =
$s;
425 @$this->page_blocks[
'title'] =
$s;
430 @$this->page_blocks[
'meta_keywords'] =
$s;
435 @$this->page_blocks[
'meta_description'] =
$s;
440 @$this->page_blocks[
'content'] =
$s;
445 @$this->page_blocks[
'content'].=
$s;
450 @$this->page_blocks[
'stylesheet'].=
$s;
457 @$this->page_blocks[$block_name] =
$data;
464 @$this->page_blocks[$block_name].=
$data;
512 $head =
"Информация";
515 @$this->page_blocks[
'content'].=
"<div class='$mode'><b>$head</b><br>$text</div>";
528 $this->breadcrumbs =
$data;
533 $this->breadcrumbs[$name] = array(
'name'=>$name,
'link'=>$link);
540 if (stripos(getenv(
"HTTP_USER_AGENT"),
"MSIE") !== FALSE) {
541 $this->page_blocks[
'notsupportbrowser'] =
"<div style='background: #ffb; border: 1px #fff outset; padding: 3px; padding-right: 15px; text-align: right; font-size: 14px;'><img src='/img/win/important.png' alt='info' style='float: left'>
542 Вероятно, Вы используете неподдерживаемую версию броузера.<br>
543 <b>Для правильной работы сайта, скачайте и установите последнюю версию <a href='http://mozilla.com'>Mozilla</a>, <a href='http://www.opera.com/download/'>Opera</a> или <a href='http://www.google.com/intl/ru/chrome/browser/'>Chrome</a></b><div style='clear: both'></div></div>";
546 $this->page_blocks[
'gentime'] = round($time, 4);
548 @include_once(
"skins/" . $this->tplname .
"/style.php");
550 echo @$this->page_blocks[
'content'];
552 @include_once(
"skins/" . $this->tplname .
"/style.php");
553 $this->page_blocks[
'breadcrumbs'] =
'';
554 if(count($this->breadcrumbs)) {
555 $this->page_blocks[
'breadcrumbs'] .=
"<div id='breadcrumbs'>";
556 foreach($this->breadcrumbs as $item) {
558 $this->page_blocks[
'breadcrumbs'] .=
"<a href='{$item['link']}'>".html_out($item[
'name']).
"</a> ";
559 else $this->page_blocks[
'breadcrumbs'] .=
html_out($item[
'name']);
561 $this->page_blocks[
'breadcrumbs'] .=
"</div>";
563 if (function_exists(
'skin_prepare')) {
567 if (function_exists(
'skin_render')) {
568 $res = skin_render($this->page_blocks, $this->tpl);
570 $signatures = array();
571 foreach ($this->page_blocks as $key => $value) {
572 $signatures[] =
"<!--site-$key-->";
574 $res = str_replace($signatures, $this->page_blocks, $this->tpl);
580 $this->
logger(
"Exec time: $time", 1);
589 function logger(
$s, $silent = 0, $hidden_data =
'') {
595 settype(
$uid,
"int");
596 $ip = $db->real_escape_string(getenv(
"REMOTE_ADDR"));
597 $s_sql = $db->real_escape_string(
$s);
598 $ag = $db->real_escape_string(getenv(
"HTTP_USER_AGENT"));
599 $rf = $db->real_escape_string(urldecode(getenv(
"HTTP_REFERER")));
600 $ff = $db->real_escape_string($_SERVER[
'REQUEST_URI']);
601 $db->query(
"INSERT INTO `errorlog` (`page`,`referer`,`msg`,`date`,`ip`,`useragent`, `uid`) VALUES
602 ('$ff','$rf','$s_sql',NOW(),'$ip','$ag', '$uid')");
606 $ff =
html_out($_SERVER[
'REQUEST_URI']);
607 $this->
msg(
"$s<br>Страница:$ff<br>Сообщение об ошибке передано администратору",
"err",
"Внутренняя ошибка!");
609 return $db->insert_id;
618 header(
'HTTP/1.0 403 Forbidden');
619 parent::__construct(
$text, $code, $previous);
627 header(
'HTTP/1.0 403 Forbidden');
628 parent::__construct(
$text, $code, $previous);
636 header(
'HTTP/1.0 404 Not found');
637 parent::__construct(
$text, $code, $previous);
646 parent::__construct(
$text, $code, $previous);
664 $data[
'page'] = urldecode($_SERVER[
'REQUEST_URI']);
665 $data[
'referer'] = urldecode(getenv(
"HTTP_REFERER"));
666 $data[
'class'] = get_class($e);
667 $data[
'code'] = $e->getCode();
668 $data[
'msg'] = $e->getMessage();
669 $data[
'file'] = $e->getFile();
670 $data[
'line'] = $e->getLine();
671 $data[
'trace'] = $e->getTraceAsString();
672 $data[
'ip'] = getenv(
"REMOTE_ADDR");
673 $data[
'useragent'] = getenv(
"HTTP_USER_AGENT");
674 $data[
'date'] = date(
'Y-m-d H:i:s');
676 return $db->insertA(
'errorlog',
$data);
695 if(!function_exists(
'mysqli_query'))
697 header(
"HTTP/1.0 500 Internal Server Error");
698 header(
"Retry-After: 3000");
699 die(
"<h1>500 Внутренняя ошибка сервера</h1>Расширение php-mysqli не найдено. Программа установлена некорректно. Обратитесь к администратору c описанием проблемы.");
702 if(!function_exists(
'mb_internal_encoding'))
704 header(
"HTTP/1.0 500 Internal Server Error");
705 header(
"Retry-After: 3000");
706 header(
"Retry-After: 3000");
707 die(
"<h1>500 Внутренняя ошибка сервера</h1>Расширение php-mbstring не найдено. Программа установлена некорректно. Обратитесь к администратору c описанием проблемы.");
713 mb_internal_encoding(
"UTF-8");
716 if(! include_once(
"$base_path/config_site.php")) {
717 header(
"HTTP/1.0 500 Internal Server Error");
718 header(
"Retry-After: 3000");
719 die(
"<h1>500 Внутренняя ошибка сервера</h1>Конфигурационный файл не найден! Программа установлена некорректно. Обратитесь к администратору c описанием проблемы.");
722 if (@
$CONFIG[
'site'][
'maintain_ip']) {
723 if(
$CONFIG[
'site'][
'maintain_ip']!=getenv(
'REMOTE_ADDR')) {
724 header(
"HTTP/1.0 503 Service temporary unavariable");
725 header(
"Retry-After: 300");
729 <meta charset=\"utf-8\">
730 <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">
731 <title>Error 500: Необработанная внутренняя ошибка</title>
732 <style type='text/css'>body{color: #000; background-color: #eee; text-align: center;}</style></head><body>
733 <h1>503 Service temporary unavariable</h1>Сайт отключне на техобслуживание. Повторите попытку через несколько минут!<br>
734 The site in maintenance mode. Please try again in a few minutes!</body></html>"
739 if(isset(
$CONFIG[
'site'][
'session_cookie_domain'])) {
740 if(
$CONFIG[
'site'][
'session_cookie_domain']) {
741 session_set_cookie_params(0,
'/' ,
$CONFIG[
'site'][
'session_cookie_domain']);
746 require_once(
$CONFIG[
'location'].
"/common/core.common.php");
748 if (
$CONFIG[
'site'][
'force_https'] && !isset($_SERVER[
'HTTPS'])) {
749 header(
'Location: https://' . $_SERVER[
"HTTP_HOST"] . $_SERVER[
'REQUEST_URI'],
true, 301);
760 if(
$db->connect_error) {
761 header(
"HTTP/1.0 503 Service temporary unavariable");
762 header(
"Retry-After: 3000");
766 <meta charset=\"utf-8\">
767 <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">
768 <title>Error 500: Необработанная внутренняя ошибка</title>
769 <style type='text/css'>body{color: #000; background-color: #eee; text-align: center;}</style></head><body>
770 <h1>503 Сервис временно недоступен!</h1>Не удалось соединиться с сервером баз данных. Возможно он перегружен, и слишком медленно отвечает на запросы, либо выключен. Попробуйте подключиться через 5 минут. Если проблема сохранится - пожалуйста, напишите письмо <a href='mailto:{$CONFIG['site']['admin_email']}'>{$CONFIG['site']['admin_email']}</a> c описанием проблемы: ErrorCode: {$db->connect_errno} ({$db->connect_error})</body></html>"
775 mysqli_report(MYSQLI_REPORT_STRICT | MYSQLI_REPORT_ERROR);
777 if(!
$db->set_charset(
"utf8"))
779 header(
"HTTP/1.0 503 Service temporary unavariable");
780 header(
"Retry-After: 3000");
784 <meta charset=\"utf-8\">
785 <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">
786 <title>Error 500: Необработанная внутренняя ошибка</title>
787 <style type='text/css'>body{color: #000; background-color: #eee; text-align: center;}</style></head><body>
788 <h1>503 Сервис временно недоступен!</h1>Невозможно задать кодировку соединения с базой данных: " .
$db->error .
"</body></html>"
797 if ((\
cfg::get(
'site',
'force_https') || \
cfg::get(
'site',
'force_https_login')) && isset($_SERVER[
'HTTPS'])) {
798 header(
"Strict-Transport-Security: max-age=31536000");
803 $ip =
$db->real_escape_string(getenv(
"REMOTE_ADDR"));
804 $ag =
$db->real_escape_string(getenv(
"HTTP_USER_AGENT"));
805 $rf =
$db->real_escape_string(urldecode(getenv(
"HTTP_REFERER")));
806 $qq =
$db->real_escape_string(urldecode($_SERVER[
'REQUEST_URI'] .
'?' . $_SERVER[
'QUERY_STRING']));
807 $ff =
$db->real_escape_string($_SERVER[
'SCRIPT_NAME']);
809 $db->query(
"INSERT INTO `counter` (`date`,`ip`,`agent`,`refer`,`query`,`file`) VALUES ('$tim','$ip','$ag','$rf','$qq','$ff')");
static requiredFilled($sect, $param)
rcvint($varname, $def=0)
Безопасное получение целого значения
setBrearcrumbs($data)
Установить "хлебные крошки".
addLeft($s)
Вставить HTML содержимое в начало левой колонки страницы
exception_handler($exception)
Обработчик неперехваченных исключений
setRight($s)
Задать HTML содержимое правой колонки страницы
if(!function_exists('mysqli_query')) if(!function_exists('mb_internal_encoding')) $time_start
addContent($s)
Добавить HTML содержимое к основному блоку страницы (content)
$breadcrumbs
"Хлебные крошки" - массив в формате текст->ссылка
html_out($data)
Обёртка над htmlentities.
__construct($text= '', $code=0, $previous=NULL)
Класс-исключение используется для информирования о отсутствии привилегий на доступ к запрошенной функ...
request($varname, $def='')
insRight($s)
Вставить HTML содержимое в начало правой колонки страницы
errorMessage($text, $head="")
__construct($text='', $code=0, $previous=NULL)
rcvdate($varname, $def='1970-01-01')
Безопасное получение строки с датой
rcvtime($varname, $def='1970-01-01')
Безопасное получение строки с временем
$tplname
Наименование загруженного шаблона
setTop($s)
Задать HTML содержимое шапки страницы
html_in($data)
Преобразование HTML сущностей в их ASCII представление. Обёртка над html_entity_decode.
addStyle($s)
Добавить содержимое к таблице стилей страницы (тэг style)
setTitle($s)
Задать текст заголовка (обычно тэг title) страницы
addRight($s)
Добавить HTML содержимое в конец правой колонки страницы
keygen_unique($num=0, $minlen=5, $maxlen=12)
Генератор псевдоуникального кода.
addTabsWidget($list, $opened, $link_prefix, $param_name)
Базовый класс для создания автожурналируемых исключений
rcvdatetime($varname, $def='1970-01-01')
Безопасное получение строки с датой и временем
msg($text="", $mode="", $head="")
SearchHilight($str, $substr)
write()
Сформировать HTML и отправить его, в соответствии с загруженным шаблоном и установленным содержимым б...
formatPhoneNumber($phone)
Форматирование номера телефона, записанного в международном формате, в легкочитаемый вид...
__construct($text= '', $code=404, $previous=NULL)
SafeLoadTemplate($template)
Загрузка шаблона с заданным названием
Класс-исключение используется для информирования о отсутствии привилегий на доступ к запрошенной функ...
setMetaDescription($s)
Задать содержимое мета-тэга description.
if((\cfg::get('site', 'force_https')||\cfg::get('site', 'force_https_login'))&&isset($_SERVER['HTTPS'])) if(!isset($_REQUEST['ncnt'])&&!isset($not_use_counter)) $tmpl
addTop($s)
Добавить HTML содержимое в конец шапки страницы
__construct($text= '', $code=0, $previous=NULL)
$page_blocks
Новые блоки шаблонизатора. Ассоциативный массив. Замена устаревшего $page.
normalizePhone($phone)
Нормализация номера телефона
setCustomBlockData($block_name, $data)
setMetaKeywords($s)
Задать содержимое мета-тэга keywords.
getUserProfile($uid)
Получить данные профиля пользователя по uid.
auth()
Проверка аутентификации
rcvrounded($varname, $round=3, $def=0)
Безопасное получение числа заданной точности
translitIt($str)
Транслитерация строки
addTableWidget($table_header, $table_body, $head_each_lines=100)
need_auth()
Требование аутентификации.
core_autoload($class_name)
TODO: После рефакторинга, файл должен быть удалён. Код переностится, главным образом, в include/webcore.php.
$hide_blocks
Скрытые блоки. Блоки, отображать которые не нужно
setLeft($s)
Задать HTML содержимое левой колонки страницы
static get($sect, $param, $default=null)
logger($s, $silent=0, $hidden_data= '')
addCustomBlockData($block_name, $data)
addBreadcrumb($name, $link)
Добавить "хлебные крошки".
Класс-исключение используется для информирования о отсутствии запрашиваемого объекта. Устанавливает заголовок 404 Not found.
Класс расширяет функциональность mysqli Т.к. используется почти везде, нет смысла выносить в отдельны...
setContent($s)
Задать HTML содержимое основного блока страницы (content)
loadTemplate($s)
Загрузка шаблона по его имени
if(!preg_match('/^\\w+$/', $object) $class_name)
redirect($url)
Отсылает заголовок перенаправления в броузер и завершает скрипт
Класс шаблонизатора вывода страницы. Содержит методы, отвечающие за загрузку темы оформления...
requestA($var_array, $def='')
$CONFIG['site']['admin_name']