Multimag  0.2.988
core.php
См. документацию.
1 <?php
2 // MultiMag v0.2 - Complex sales system
3 //
4 // Copyright (C) 2005-2018, BlackLight, TND Team, http://tndproject.org
5 //
6 // This program is free software: you can redistribute it and/or modify
7 // it under the terms of the GNU Affero General Public License as
8 // published by the Free Software Foundation, either version 3 of the
9 // License, or (at your option) any later version.
10 //
11 // This program is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU Affero General Public License for more details.
15 //
16 // You should have received a copy of the GNU Affero General Public License
17 // along with this program. If not, see <http://www.gnu.org/licenses/>.
18 //
19 
21 
24  global $CONFIG;
25  $lower_class_name = strtolower($class_name);
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)) {
30  include_once $fname;
31  return;
32  }
33  }
34  $filename = dirname(__DIR__)
35  .DIRECTORY_SEPARATOR
36  .str_replace('\\', DIRECTORY_SEPARATOR, $class_name)
37  .'.php';
38  if(is_readable($filename)) {
39  include_once $filename;
40  return;
41  }
42 }
43 
44 spl_autoload_register('core_autoload');
45 
49 function formatPhoneNumber($phone)
50 {
51  if($phone[0]!='+') return $phone;
52  $divs=array('','','-','','','-','','','-','','-','','-','','-','','-','','-','','','','','','','','','','','','','','','','','','','','');
53  $fphone='';
54  $len=strlen($phone);
55  for($i=0;$i<$len;$i++)
56  {
57  $fphone.=$divs[$i].$phone[$i];
58  }
59  return $fphone;
60 }
61 
65 function exception_handler($exception)
66 {
67  global $db;
68  writeLogException($exception);
69  header('HTTP/1.0 500 Internal error');
70  header('Status: 500 Internal error');
71  $s = html_out($exception->getMessage());
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>";
77  die();
78 }
79 set_exception_handler('exception_handler');
80 
84 function SearchHilight($str, $substr) {
85  if (!$substr)
86  return $str;
87  $tmp = explode($substr, ' ' . $str . ' ');
88  $result = '';
89  foreach ($tmp as $t) {
90  if (!$result)
91  $result = $t;
92  else
93  $result.="<span class='b_selection'>" . html_out($substr) . "</span>$t";
94  }
95  return $result;
96 }
97 
99 function normalizePhone($phone) {
100  $phone = preg_replace("/[^0-9+]/", "", $phone);
101  if(strlen($phone)<3) {
102  return false;
103  }
104  $phoneplus = $phone[0]=='+';
105  $phone = preg_replace("/[^0-9]/", "", $phone);
106  if($phoneplus && $phone[0]==7 && strlen($phone)==11) {
107  return '+'.$phone;
108  } elseif(!$phoneplus && $phone[0]==8 && strlen($phone)==11) {
109  return '+7'.substr($phone,1);
110  } elseif(!$phoneplus && $phone[0]==9 && strlen($phone)==10) {
111  return '+7'.$phone;
112  } else {
113  return false;
114  }
115 }
116 
118 function redirect($url) {
119  if (headers_sent()) {
120  return false;
121  }
122 
123  //$url = HTTP::absoluteURI($url);
124  header('Location: '. $url, true, 301);
125 
126  if ( isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] != 'HEAD') {
127  echo '
128 <p>Redirecting to: <a href="'.str_replace('"', '%22', $url).'">'
129  .htmlspecialchars($url).'</a>.</p>
130 <script type="text/javascript">
131 //<![CDATA[
132 if (location.replace == null) {
133 location.replace = location.assign;
134 }
135 location.replace("'.str_replace('"', '\\"', $url).'");
136 // ]]>
137 </script>';
138  }
139  exit;
140 }
141 
148 function keygen_unique($num=0, $minlen=5, $maxlen=12) {
149  if($minlen<1) $minlen = 5;
150  if($maxlen>10000) $maxlen = 10000;
151  if($maxlen<$minlen) $maxlen = $minlen;
152  if(!$num) {
153  $sstr = "bcdfghjklmnprstvwxz";
154  $gstr = "aeiouy1234567890aeiouy";
155  $rstr = "aeiouy1234567890aeiouybcdfghjklmnprstvwxz";
156  $sln = strlen($sstr)-1;
157  $gln = strlen($gstr)-1;
158  $rln = strlen($rstr)-1;
159  }
160  else {
161  $sstr="135790";
162  $gstr="24680";
163  $rstr="1234567890";
164  $sln = strlen($sstr)-1;
165  $gln = strlen($gstr)-1;
166  $rln = strlen($rstr)-1;
167  }
168  $r = rand(0,$rln);
169  $s = $rstr[$r];
170  $ln = rand($minlen,$maxlen);
171  for($i=1;$i<$ln;$i++) {
172  $a = strpos($sstr, $s[$i-1]);
173  if($a!==false) {
174  $r=rand(0,$gln);
175  $s.=$gstr[$r];
176  }
177  else {
178  $r=rand(0,$sln);
179  $s.=$sstr[$r];
180  }
181  }
182  return $s;
183 }
184 
185 // ======================================= Обработчики ввода переменных ====================================
186 
190 function request($varname,$def='')
191 {
192  if(isset($_REQUEST[$varname])) return $_REQUEST[$varname];
193  return $def;
194 }
195 
199 function requestA($var_array, $def='')
200 {
201  $a=array_fill_keys($var_array, $def);
202  $v=array_intersect_key($_REQUEST, $a);
203  $r=array_merge($a,$v);
204  return $r;
205 }
206 
208 function rcvint($varname, $def=0)
209 {
210  if(isset($_REQUEST[$varname])) return intval($_REQUEST[$varname]);
211  return $def;
212 }
213 
215 function rcvrounded($varname, $round=3, $def=0)
216 {
217  if(isset($_REQUEST[$varname])) return round($_REQUEST[$varname],$round);
218  return $def;
219 }
220 
222 function rcvdate($varname, $def='1970-01-01')
223 {
224  if(isset($_REQUEST[$varname])) return date("Y-m-d", strtotime($_REQUEST[$varname]));
225  return $def;
226 }
227 
229 function rcvtime($varname, $def='1970-01-01')
230 {
231  if(isset($_REQUEST[$varname])) return date("H:i:s", strtotime($_REQUEST[$varname]));
232  return $def;
233 }
234 
236 function rcvdatetime($varname, $def='1970-01-01')
237 {
238  if(isset($_REQUEST[$varname])) return date("Y-m-d H:i:s", strtotime($_REQUEST[$varname]));
239  return $def;
240 }
241 
243 function html_in($data)
244 {
245  return html_entity_decode($data, ENT_QUOTES, "UTF-8");
246 }
247 
249 function html_out($data)
250 {
251  return htmlentities($data, ENT_QUOTES, "UTF-8");
252 }
253 
254 // =================================== Аутентификация и контроль привилегий ============================================
258 function need_auth()
259 {
260  global $tmpl;
261  if(!auth())
262  {
263  $_SESSION['last_page']=$_SERVER['REQUEST_URI'];
264  $_SESSION['cook_test']='data';
265  redirect('/login.php');
266  //$tmpl->msg("Для продолжения необходимо выполнить вход!","info","Требуется аутентификация");
267  $tmpl->write();
268  exit();
269  }
270  return 1;
271 }
272 
274 function auth() {
275  return (@$_SESSION['uid']==0)?0:1;
276 }
277 
278 // Проверка, не принадлежит ли текущая сессия другому пользователю
279 function testForeignSession() {
280  global $db, $tmpl;
281  if(auth()) {
282  $res = $db->query("SELECT `last_session_id` FROM `users` WHERE `id`=".intval($_SESSION['uid']));
283  if($res->num_rows) {
284  list($stored_session_id) = $res->fetch_row();
285  if($stored_session_id != session_id()) {
286  $_SESSION['another_device'] = 1;
287  $_SESSION['uid'] = 0;
288  need_auth();
289  }
290  }
291  }
292 }
293 
295 function translitIt($str)
296 {
297  $tr = array(
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"
311  );
312 
313  foreach($tr as $s=>$r)
314  $str=mb_ereg_replace ($s, $r, $str);
315  return $str;
316 }
317 
319 function SafeLoadTemplate($template)
320 {
321  global $tmpl, $CONFIG;
322  if($template) $tmpl->loadTemplate($template);
323 }
324 
326 function getUserProfile($uid) {
327  global $db;
328  settype($uid, 'int');
329  $user_profile = array();
330  $user_profile['main'] = array();
331  $user_profile['dop'] = array();
332 
333  $res = $db->query("SELECT * FROM `users` WHERE `id`='$uid'");
334  if (!$res->num_rows) { // Если не найден
335  return $user_profile;
336  }
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];
343  }
344  return $user_profile;
345 }
346 
348 class BETemplate {
349 
350  var $tpl;
351  var $ajax = 0;
352  var $tplname;
353  var $page_blocks = array();
354  var $hide_blocks = array();
355  var $breadcrumbs = array();
356 
357  function __construct() {
358  global $CONFIG;
359  if ($CONFIG['site']['skin'])
360  $this->loadTemplate($CONFIG['site']['skin']);
361  else
362  $this->loadTemplate('default');
363  }
364 
366  function loadTemplate($s) {
367  $this->tplname = $s;
368  $fd = @file('skins/' . $s . '/style.tpl');
369  if ($fd) {
370  $this->tpl = "";
371  foreach ($fd as $item)
372  $this->tpl.=$item;
373  }
374  }
375 
378  function hideBlock($block) {
379  $this->hide_blocks[$block] = true;
380  }
381 
384  function showBlock($block) {
385  unset($this->hide_blocks[$block]);
386  }
387 
389  function setTop($s) {
390  @$this->page_blocks['top'] = $s;
391  }
392 
394  function addTop($s) {
395  @$this->page_blocks['top'].=$s;
396  }
397 
399  function setRight($s) {
400  @$this->page_blocks['right'] = $s;
401  }
402 
404  function insRight($s) {
405  @$this->page_blocks['right'] = $s . $this->page_blocks['right'];
406  }
407 
409  function addRight($s) {
410  @$this->page_blocks['right'].=$s;
411  }
412 
414  function addLeft($s) {
415  @$this->page_blocks['left'].=$s;
416  }
417 
419  function setLeft($s) {
420  @$this->page_blocks['left'] = $s;
421  }
422 
424  function setTitle($s) {
425  @$this->page_blocks['title'] = $s;
426  }
427 
429  function setMetaKeywords($s) {
430  @$this->page_blocks['meta_keywords'] = $s;
431  }
432 
434  function setMetaDescription($s) {
435  @$this->page_blocks['meta_description'] = $s;
436  }
437 
439  function setContent($s) {
440  @$this->page_blocks['content'] = $s;
441  }
442 
444  function addContent($s) {
445  @$this->page_blocks['content'].=$s;
446  }
447 
449  function addStyle($s) {
450  @$this->page_blocks['stylesheet'].=$s;
451  }
452 
456  function setCustomBlockData($block_name, $data) {
457  @$this->page_blocks[$block_name] = $data;
458  }
459 
463  function addCustomBlockData($block_name, $data) {
464  @$this->page_blocks[$block_name].=$data;
465  }
466 
472  function addTabsWidget($list, $opened, $link_prefix, $param_name) {
473  $str = \widgets::getEscapedTabsWidget($list, $opened, $link_prefix, $param_name);
474  $this->addContent($str);
475  }
476 
477  function addTableWidget($table_header, $table_body, $head_each_lines = 100) {
478  $str = \widgets::getTable($table_header, $table_body, $head_each_lines);
479  $this->addContent($str);
480  }
481 
486  function msg($text = "", $mode = "", $head = "") {
487  if ($text == "") {
488  return;
489  }
490  switch($mode) {
491  case 'err':
492  case 'ok':
493  break;
494  case 'error':
495  $mode = 'err';
496  break;
497  case 'info':
498  $mode = 'notify';
499  break;
500  default:
501  $mode = "notify";
502  }
503  if ($head == "") {
504  switch($mode) {
505  case 'err':
506  $head = "Ошибка";
507  break;
508  case 'ok':
509  $head = "Сделано";
510  break;
511  default:
512  $head = "Информация";
513  }
514  }
515  @$this->page_blocks['content'].="<div class='$mode'><b>$head</b><br>$text</div>";
516  }
517 
521  function errorMessage($text, $head = "") {
522  $this->msg($text, 'err', $head);
523  }
524 
526  function setBrearcrumbs($data) {
527  if(is_array($data))
528  $this->breadcrumbs = $data;
529  }
530 
532  function addBreadcrumb($name, $link) {
533  $this->breadcrumbs[$name] = array('name'=>$name, 'link'=>$link);
534  }
535 
536 
538  function write() {
539  global $time_start;
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>";
544  }
545  $time = microtime(true) - $time_start;
546  $this->page_blocks['gentime'] = round($time, 4);
547 
548  @include_once("skins/" . $this->tplname . "/style.php");
549  if ($this->ajax)
550  echo @$this->page_blocks['content'];
551  else {
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) {
557  if($item['link'])
558  $this->page_blocks['breadcrumbs'] .= "<a href='{$item['link']}'>".html_out($item['name'])."</a> ";
559  else $this->page_blocks['breadcrumbs'] .= html_out($item['name']);
560  }
561  $this->page_blocks['breadcrumbs'] .= "</div>";
562  }
563  if (function_exists('skin_prepare')) {
564  $res = skin_prepare();
565  }
566 
567  if (function_exists('skin_render')) {
568  $res = skin_render($this->page_blocks, $this->tpl);
569  } else {
570  $signatures = array();
571  foreach ($this->page_blocks as $key => $value) {
572  $signatures[] = "<!--site-$key-->";
573  }
574  $res = str_replace($signatures, $this->page_blocks, $this->tpl);
575  }
576  echo"$res";
577  }
578  $time = microtime(true) - $time_start;
579  if ($time >= 3)
580  $this->logger("Exec time: $time", 1);
581  }
583 
589  function logger($s, $silent = 0, $hidden_data = '') {
590  global $db;
591  if (isset($_SESSION['uid']))
592  $uid = $_SESSION['uid'];
593  else
594  $uid = 0;
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')");
603 
604  if (!$silent) {
605  $s = html_out($s);
606  $ff = html_out($_SERVER['REQUEST_URI']);
607  $this->msg("$s<br>Страница:$ff<br>Сообщение об ошибке передано администратору", "err", "Внутренняя ошибка!");
608  }
609  return $db->insert_id;
610  }
611 
612 }
613 
615 class LoginException extends Exception {
616 
617  function __construct($text = '', $code = 0, $previous = NULL) {
618  header('HTTP/1.0 403 Forbidden');
619  parent::__construct($text, $code, $previous);
620  }
621 }
622 
624 class AccessException extends Exception {
625 
626  function __construct($text = '', $code = 0, $previous = NULL) {
627  header('HTTP/1.0 403 Forbidden');
628  parent::__construct($text, $code, $previous);
629  }
630 }
631 
633 class NotFoundException extends Exception {
634 
635  function __construct($text = '', $code = 404, $previous = NULL) {
636  header('HTTP/1.0 404 Not found');
637  parent::__construct($text, $code, $previous);
638  }
639 
640 }
641 
643 class AutoLoggedException extends Exception {
644 
645  function __construct($text='', $code=0, $previous=NULL) {
646  parent::__construct($text, $code, $previous);
647  writeLogException($this);
648  }
649 }
650 
651 
654 function writeLogException($e) {
655  global $db;
656  if($db) {
657  if (isset($_SESSION['uid'])) {
658  $uid = intval($_SESSION['uid']);
659  } else {
660  $uid = null;
661  }
662 
663  $data = array();
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');
675  $data['uid'] = $uid;
676  return $db->insertA('errorlog', $data);
677  }
678 }
679 
680 //class DB extends MysqiExtended {
681 // protected static $_instance;
682 // private function __construct(){}
683 // private function __clone() {}
684 // private function __wakeup() {}
685 //
686 // public static function getInstance(){
687 // if (self::$_instance === null) {
688 // self::$_instance = new self;
689 // }
690 // return self::$_instance;
691 // }
692 //};
693 
694 
695 if(!function_exists('mysqli_query'))
696 {
697  header("HTTP/1.0 500 Internal Server Error");
698  header("Retry-After: 3000");
699  die("<h1>500 Внутренняя ошибка сервера</h1>Расширение php-mysqli не найдено. Программа установлена некорректно. Обратитесь к администратору c описанием проблемы.");
700 }
701 
702 if(!function_exists('mb_internal_encoding'))
703 {
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 описанием проблемы.");
708 }
709 
710 $time_start = microtime(true);
711 
712 
713 mb_internal_encoding("UTF-8");
714 
715 $base_path = dirname(dirname(__FILE__));
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 описанием проблемы.");
720 }
721 
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");
726  die("<!DOCTYPE html>
727 <html>
728 <head>
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>"
735  );
736  }
737 }
738 
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']);
742  }
743 }
744 
745 session_start();
746 require_once($CONFIG['location']."/common/core.common.php");
747 
748 if ($CONFIG['site']['force_https'] && !isset($_SERVER['HTTPS'])) {
749  header('Location: https://' . $_SERVER["HTTP_HOST"] . $_SERVER['REQUEST_URI'], true, 301);
750 }
751 
752 cfg::requiredFilled('site', 'admin_name');
753 cfg::requiredFilled('site', 'admin_email');
754 cfg::requiredFilled('site', 'doc_adm_email');
755 cfg::requiredFilled('site', 'doc_adm_jid');
756 cfg::requiredFilled('site', 'name');
757 
758 $db = @ new MysqiExtended($CONFIG['mysql']['host'], $CONFIG['mysql']['login'], $CONFIG['mysql']['pass'], $CONFIG['mysql']['db']);
759 
760 if($db->connect_error) {
761  header("HTTP/1.0 503 Service temporary unavariable");
762  header("Retry-After: 3000");
763  die("<!DOCTYPE html>
764 <html>
765 <head>
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>"
771  );
772 }
773 
774 // Включаем автоматическую генерацию исключений для mysql
775 mysqli_report(MYSQLI_REPORT_STRICT | MYSQLI_REPORT_ERROR);
776 
777 if(!$db->set_charset("utf8"))
778 {
779  header("HTTP/1.0 503 Service temporary unavariable");
780  header("Retry-After: 3000");
781  die("<!DOCTYPE html>
782 <html>
783 <head>
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>"
789  );
790 }
791 
792 
793 header("X-Powered-By: MultiMag ".MULTIMAG_VERSION);
794 // не получилось из-за невалидного json в редакторе наименований документа. Нужен рефакторинг.
795 //header("Content-Security-Policy: default-src 'self' 'unsafe-inline' *.".$_SERVER["HTTP_HOST"]);
796 // HSTS Mode
797 if ((\cfg::get('site', 'force_https') || \cfg::get('site', 'force_https_login')) && isset($_SERVER['HTTPS'])) {
798  header("Strict-Transport-Security: max-age=31536000");
799 }
800 
801 // Счётчик-логгер посещений
802 if(!isset($_REQUEST['ncnt']) && !isset($not_use_counter)) {
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']);
808  $tim = time();
809  $db->query("INSERT INTO `counter` (`date`,`ip`,`agent`,`refer`,`query`,`file`) VALUES ('$tim','$ip','$ag','$rf','$qq','$ff')");
810 }
811 
static requiredFilled($sect, $param)
Definition: cfg.php:124
$res
Definition: fixer.php:178
$i
Definition: images.php:25
$tpl
Шаблон
Definition: core.php:350
rcvint($varname, $def=0)
Безопасное получение целого значения
Definition: core.php:208
setBrearcrumbs($data)
Установить "хлебные крошки".
Definition: core.php:526
addLeft($s)
Вставить HTML содержимое в начало левой колонки страницы
Definition: core.php:414
$result
Definition: api.php:36
skin_prepare()
Definition: style.php:30
$gstr
Definition: keygen.php:21
exception_handler($exception)
Обработчик неперехваченных исключений
Definition: core.php:65
setRight($s)
Задать HTML содержимое правой колонки страницы
Definition: core.php:399
if(!function_exists('mysqli_query')) if(!function_exists('mb_internal_encoding')) $time_start
Definition: core.php:710
addContent($s)
Добавить HTML содержимое к основному блоку страницы (content)
Definition: core.php:444
$not_use_counter
Definition: counter.php:20
$breadcrumbs
"Хлебные крошки" - массив в формате текст->ссылка
Definition: core.php:355
html_out($data)
Обёртка над htmlentities.
Definition: core.php:249
__construct($text= '', $code=0, $previous=NULL)
Definition: core.php:626
hideBlock($block)
Definition: core.php:378
Класс-исключение используется для информирования о отсутствии привилегий на доступ к запрошенной функ...
Definition: core.php:615
request($varname, $def='')
Definition: core.php:190
insRight($s)
Вставить HTML содержимое в начало правой колонки страницы
Definition: core.php:404
$str
Definition: c_img.php:23
errorMessage($text, $head="")
Definition: core.php:521
__construct($text='', $code=0, $previous=NULL)
Definition: core.php:645
rcvdate($varname, $def='1970-01-01')
Безопасное получение строки с датой
Definition: core.php:222
rcvtime($varname, $def='1970-01-01')
Безопасное получение строки с временем
Definition: core.php:229
$tplname
Наименование загруженного шаблона
Definition: core.php:352
setTop($s)
Задать HTML содержимое шапки страницы
Definition: core.php:389
$s
Definition: price_an.php:409
html_in($data)
Преобразование HTML сущностей в их ASCII представление. Обёртка над html_entity_decode.
Definition: core.php:243
const MULTIMAG_VERSION
Definition: core.common.php:21
addStyle($s)
Добавить содержимое к таблице стилей страницы (тэг style)
Definition: core.php:449
setTitle($s)
Задать текст заголовка (обычно тэг title) страницы
Definition: core.php:424
addRight($s)
Добавить HTML содержимое в конец правой колонки страницы
Definition: core.php:409
__construct()
Definition: core.php:357
keygen_unique($num=0, $minlen=5, $maxlen=12)
Генератор псевдоуникального кода.
Definition: core.php:148
$_SESSION['uid']
Definition: 1c_sync.php:65
addTabsWidget($list, $opened, $link_prefix, $param_name)
Definition: core.php:472
$rstr
Definition: keygen.php:22
$tim
Definition: resp_clear.php:27
Базовый класс для создания автожурналируемых исключений
Definition: core.php:643
rcvdatetime($varname, $def='1970-01-01')
Безопасное получение строки с датой и временем
Definition: core.php:236
writeLogException($e)
Definition: core.php:654
msg($text="", $mode="", $head="")
Definition: core.php:486
SearchHilight($str, $substr)
Definition: core.php:84
write()
Сформировать HTML и отправить его, в соответствии с загруженным шаблоном и установленным содержимым б...
Definition: core.php:538
formatPhoneNumber($phone)
Форматирование номера телефона, записанного в международном формате, в легкочитаемый вид...
Definition: core.php:49
$ip
Definition: 1c_sync.php:38
__construct($text= '', $code=404, $previous=NULL)
Definition: core.php:635
SafeLoadTemplate($template)
Загрузка шаблона с заданным названием
Definition: core.php:319
$uid
Definition: doc_service.php:30
static getEscapedTabsWidget($list, $opened, $link_prefix, $param_name)
Definition: widgets.php:48
Класс-исключение используется для информирования о отсутствии привилегий на доступ к запрошенной функ...
Definition: core.php:624
setMetaDescription($s)
Задать содержимое мета-тэга description.
Definition: core.php:434
if((\cfg::get('site', 'force_https')||\cfg::get('site', 'force_https_login'))&&isset($_SERVER['HTTPS'])) if(!isset($_REQUEST['ncnt'])&&!isset($not_use_counter)) $tmpl
Definition: core.php:812
addTop($s)
Добавить HTML содержимое в конец шапки страницы
Definition: core.php:394
__construct($text= '', $code=0, $previous=NULL)
Definition: core.php:617
$base_path
Definition: core.php:715
$page_blocks
Новые блоки шаблонизатора. Ассоциативный массив. Замена устаревшего $page.
Definition: core.php:353
$tmpl ajax
Definition: api.php:28
normalizePhone($phone)
Нормализация номера телефона
Definition: core.php:99
$text
Definition: gpb_check.php:72
setCustomBlockData($block_name, $data)
Definition: core.php:456
$mode
Definition: 1c_sync.php:75
static getTable($table_header, $table_body, $head_each_lines=100, $table_class='list')
Сформировать HTML код виджета *таблица* без экранирования данных
Definition: widgets.php:60
setMetaKeywords($s)
Задать содержимое мета-тэга keywords.
Definition: core.php:429
$data
Definition: api.php:27
testForeignSession()
Definition: core.php:279
getUserProfile($uid)
Получить данные профиля пользователя по uid.
Definition: core.php:326
auth()
Проверка аутентификации
Definition: core.php:274
showBlock($block)
Definition: core.php:384
rcvrounded($varname, $round=3, $def=0)
Безопасное получение числа заданной точности
Definition: core.php:215
translitIt($str)
Транслитерация строки
Definition: core.php:295
$t
Definition: images.php:30
addTableWidget($table_header, $table_body, $head_each_lines=100)
Definition: core.php:477
$fd
Definition: q_agents.php:83
need_auth()
Требование аутентификации.
Definition: core.php:258
core_autoload($class_name)
TODO: После рефакторинга, файл должен быть удалён. Код переностится, главным образом, в include/webcore.php.
Definition: core.php:23
$hide_blocks
Скрытые блоки. Блоки, отображать которые не нужно
Definition: core.php:354
setLeft($s)
Задать HTML содержимое левой колонки страницы
Definition: core.php:419
$ln
Definition: keygen.php:25
static get($sect, $param, $default=null)
Definition: cfg.php:46
$db
Definition: core.php:758
logger($s, $silent=0, $hidden_data= '')
Definition: core.php:589
addCustomBlockData($block_name, $data)
Definition: core.php:463
addBreadcrumb($name, $link)
Добавить "хлебные крошки".
Definition: core.php:532
$sstr
Definition: keygen.php:20
$r
Definition: keygen.php:23
Класс-исключение используется для информирования о отсутствии запрашиваемого объекта. Устанавливает заголовок 404 Not found.
Definition: core.php:633
Класс расширяет функциональность mysqli Т.к. используется почти везде, нет смысла выносить в отдельны...
setContent($s)
Задать HTML содержимое основного блока страницы (content)
Definition: core.php:439
loadTemplate($s)
Загрузка шаблона по его имени
Definition: core.php:366
if(!preg_match('/^\\w+$/', $object) $class_name)
Definition: api.php:44
redirect($url)
Отсылает заголовок перенаправления в броузер и завершает скрипт
Definition: core.php:118
$ajax
Флаг ajax выдачи
Definition: core.php:351
Класс шаблонизатора вывода страницы. Содержит методы, отвечающие за загрузку темы оформления...
Definition: core.php:348
requestA($var_array, $def='')
Definition: core.php:199
$CONFIG['site']['admin_name']
exit
Definition: c_img.php:64