From 4ff4a6dd49295cf08533ec1a25e112fbba9eb94d Mon Sep 17 00:00:00 2001 From: Repellent Date: Sat, 11 Apr 2026 12:26:48 +0500 Subject: [PATCH] =?UTF-8?q?=D0=92=20=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=20=D0=A1=D0=B8=D1=81=D1=82=D0=B5=D0=BC=D0=BD=D1=8B=D0=B5=20?= =?UTF-8?q?=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B9=D0=BA=D0=B8-->=D0=94?= =?UTF-8?q?=D0=BE=D0=BF=D0=BE=D0=BB=D0=BD=D0=B8=D1=82=D0=B5=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D1=8B=D0=B5=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B9?= =?UTF-8?q?=D0=BA=D0=B8-->=D0=92=D1=8B=D0=B2=D0=BE=D0=B4=20=D0=BE=D0=B1?= =?UTF-8?q?=D1=89=D0=B5=D0=B9=20=D1=81=D1=82=D0=B0=D1=82=D0=B8=D1=81=D1=82?= =?UTF-8?q?=D0=B8=D0=BA=D0=B8=20=D0=B2=20=D0=B0=D0=B4=D0=BC=D0=B8=D0=BD?= =?UTF-8?q?=D0=B8=D1=81=D1=82=D1=80=D0=B0=D1=82=D0=B8=D0=B2=D0=BD=D0=BE?= =?UTF-8?q?=D0=B9=20=D1=87=D0=B0=D1=81=D1=82=D0=B8=20=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=B2=D1=8B=D0=B1=D0=BE=D1=80?= =?UTF-8?q?=20=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=D0=B0=20=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D1=82=D0=B8=D1=81=D1=82=D0=B8=D0=BA=D0=B8=20.=20=D0=A0=D0=B5?= =?UTF-8?q?=D0=B6=D0=B8=D0=BC=20tpl=20=D0=B2=D1=8B=D0=B2=D0=B5=D0=B4=D0=B5?= =?UTF-8?q?=D1=82=20=D0=B2=D1=81=D0=B5=20.tpl=20=D1=88=D0=B0=D0=B1=D0=BB?= =?UTF-8?q?=D0=BE=D0=BD=D1=8B=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7?= =?UTF-8?q?=D1=83=D1=8E=D1=89=D0=B8=D0=B5=D1=81=D1=8F=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D1=81=D1=82=D1=80=D0=B0=D0=BD=D0=B8=D1=86=D0=B5=20=D1=81=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B4=D1=81=D0=B2=D0=B5=D1=82=D0=BA=D0=BE=D0=B9=20?= =?UTF-8?q?=D0=BE=D1=81=D0=BD=D0=BE=D0=B2=D0=BD=D0=BE=D0=B3=D0=BE.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin/index.php | 7 +- class/class.debug.php | 1958 ++++++++++++++++++++++---------------- class/class.template.php | 34 +- inc/config.php | 6 +- 4 files changed, 1139 insertions(+), 866 deletions(-) diff --git a/admin/index.php b/admin/index.php index 3dbd97a..9afac88 100644 --- a/admin/index.php +++ b/admin/index.php @@ -131,7 +131,8 @@ // Выводим шаблон $AVE_Template->display($tpl); - // Статистика - if ((defined('PROFILING_ADMIN') && PROFILING_ADMIN) && ! isAjax()) - echo Debug::displayInfo(); + // Проверяем, что профилирование не выключено ('off') + if (defined('PROFILING_ADMIN') && PROFILING_ADMIN !== 'off' && !isAjax()) { + echo Debug::displayInfo(PROFILING_ADMIN); // Передаем режим (full или tpl) в метод + } ?> \ No newline at end of file diff --git a/class/class.debug.php b/class/class.debug.php index 886c8a1..775ae2a 100644 --- a/class/class.debug.php +++ b/class/class.debug.php @@ -1,107 +1,115 @@ (\s+|\s$)/', " => ", $var_dump); - $var_dump = ob_get_contents(); + $var_dump = htmlspecialchars($var_dump); - $var_dump = preg_replace('/=>(\s+|\s$)/', ' => ', $var_dump); + $var_dump = preg_replace( + "/(=>)/", + '$1', + $var_dump, + ); - $var_dump = htmlspecialchars($var_dump); + ob_end_clean(); - $var_dump = preg_replace('/(=>)/', '$1', $var_dump); + if (!empty($name)) { + $fn_name = explode(",", $name[1]); + $fn_name = array_shift($fn_name); + } else { + $fn_name = "EVAL"; + } - ob_end_clean(); + if ($_bg) { + $bg = 'style="background: #' . $_bg . ';"'; + } else { + $bg = ""; + } - if (! empty($name)) - { - $fn_name = explode(',', $name[1]); - $fn_name = array_shift($fn_name); - } - else - $fn_name = 'EVAL'; - - if ($_bg) - $bg = 'style="background: #' . $_bg . ';"'; - else - $bg = ''; - - $var_dump = ' + $var_dump = + '
-
- var_dump(' . trim($fn_name) . ') +
+ var_dump(' . + trim($fn_name) . + ')
- '.self::_trace().' + ' . + self::_trace() . + '
-
'
-						. $var_dump .
-						'
+
' .
+                  $var_dump .
+                  '
'; - if (! $echo) - return $var_dump; + if (!$echo) { + return $var_dump; + } - echo $var_dump; + echo $var_dump; - if ($exit) - exit; - } + if ($exit) { + exit(); + } + } + /** + * Функция для вывода переменной (для отладки) + * + * @param mixed $var любая переменная + * @param bool $exit + * @param null $bg + * @param bool $echo + * + * @return null|string|string[] + */ + public static function _print( + $var, + $exit = false, + $_bg = null, + $echo = true, + ) { + $code = ""; - /** - * Функция для вывода переменной (для отладки) - * - * @param mixed $var любая переменная - * @param bool $exit - * @param null $bg - * @param bool $echo - * - * @return null|string|string[] - */ - public static function _print($var, $exit = false, $_bg = null, $echo = true) - { - $code = ''; + $backtrace = debug_backtrace(); - $backtrace = debug_backtrace(); + $backtrace = $backtrace[0]; - $backtrace = $backtrace[0]; + if (preg_match("/([^\(]*)\((.*)\)/i", $backtrace["file"])) { + preg_match("/([^\(]*)\((.*)\)/i", $backtrace["file"], $match); + $file = $match[1]; + } - if (preg_match('/([^\(]*)\((.*)\)/i', $backtrace['file'])) - { - preg_match('/([^\(]*)\((.*)\)/i', $backtrace['file'], $match); - $file = $match[1]; - } + $fh = fopen(isset($file) ? $file : $backtrace["file"], "r"); - $fh = fopen((isset($file) - ? $file - : $backtrace['file']), 'r'); + $line = 0; - $line = 0; + while (++$line <= $backtrace["line"]) { + $code = fgets($fh); + } - while (++$line <= $backtrace['line']) - $code = fgets($fh); + fclose($fh); - fclose($fh); + preg_match("/" . __FUNCTION__ . "\s*\((.*)\)\s*;/u", $code, $name); - preg_match('/' . __FUNCTION__ . '\s*\((.*)\)\s*;/u', $code, $name); + ob_start(); - ob_start(); + print_r($var); - print_r($var); + $var_dump = htmlspecialchars(ob_get_contents()); - $var_dump = htmlspecialchars(ob_get_contents()); + $var_dump = preg_replace( + "/(=>)/", + '$1', + $var_dump, + ); - $var_dump = preg_replace('/(=>)/', '$1', $var_dump); + ob_end_clean(); - ob_end_clean(); + if (!empty($name)) { + $fn_name = explode(",", $name[1]); + $fn_name = array_shift($fn_name); + } else { + $fn_name = "EVAL"; + } - if (! empty($name)) - { - $fn_name = explode(',', $name[1]); - $fn_name = array_shift($fn_name); - } - else - $fn_name = 'EVAL'; + if ($_bg) { + $bg = 'style="background: #' . $_bg . ';"'; + } else { + $bg = ""; + } - if ($_bg) - $bg = 'style="background: #' . $_bg . ';"'; - else - $bg = ''; - - $var_dump = ' + $var_dump = + '
-
- print_r(' . trim($fn_name) . ') +
+ print_r(' . + trim($fn_name) . + ')
- '.self::_trace().' + ' . + self::_trace() . + '
-
'
-						. $var_dump .
-						'
+
' .
+                  $var_dump .
+                  '
'; - if (! $echo) - return $var_dump; + if (!$echo) { + return $var_dump; + } - echo $var_dump; + echo $var_dump; - if ($exit) - exit; - } + if ($exit) { + exit(); + } + } + /** + * Функция для вывода переменной (для экспорта) + * + * @param mixed $var любая переменная + * @param bool $exit + * @param null $bg + * @param bool $echo + * + * @return string + */ + public static function _exp( + $var, + $exit = false, + $_bg = null, + $echo = true, + ) { + $code = ""; - /** - * Функция для вывода переменной (для экспорта) - * - * @param mixed $var любая переменная - * @param bool $exit - * @param null $bg - * @param bool $echo - * - * @return string - */ - public static function _exp($var, $exit = false, $_bg = null, $echo = true) - { - $code = ''; + $backtrace = debug_backtrace(); - $backtrace = debug_backtrace(); + $backtrace = $backtrace[0]; - $backtrace = $backtrace[0]; + if (preg_match("/([^\(]*)\((.*)\)/i", $backtrace["file"])) { + preg_match("/([^\(]*)\((.*)\)/i", $backtrace["file"], $match); + $file = $match[1]; + } - if (preg_match('/([^\(]*)\((.*)\)/i', $backtrace['file'])) - { - preg_match('/([^\(]*)\((.*)\)/i', $backtrace['file'], $match); - $file = $match[1]; - } + $fh = fopen(isset($file) ? $file : $backtrace["file"], "r"); - $fh = fopen((isset($file) - ? $file - : $backtrace['file']), 'r'); + $line = 0; - $line = 0; + while (++$line <= $backtrace["line"]) { + $code = fgets($fh); + } - while (++$line <= $backtrace['line']) - $code = fgets($fh); + fclose($fh); - fclose($fh); + preg_match("/" . __FUNCTION__ . "\s*\((.*)\)\s*;/u", $code, $name); - preg_match('/' . __FUNCTION__ . '\s*\((.*)\)\s*;/u', $code, $name); + ob_start(); - ob_start(); + var_export($var); - var_export($var); + if (!empty($name)) { + $fn_name = explode(",", $name[1]); + $fn_name = array_shift($fn_name); + } else { + $fn_name = "EVAL"; + } - if (! empty($name)) - { - $fn_name = explode(',', $name[1]); - $fn_name = array_shift($fn_name); - } - else - $fn_name = 'EVAL'; + if ($_bg) { + $bg = 'style="background: #' . $_bg . ';"'; + } else { + $bg = ""; + } - if ($_bg) - $bg = 'style="background: #' . $_bg . ';"'; - else - $bg = ''; + $var_export = htmlspecialchars(ob_get_contents()); - $var_export = htmlspecialchars(ob_get_contents()); + $var_export = preg_replace( + "/(=>)/", + '$1', + $var_export, + ); - $var_export = preg_replace('/(=>)/', '$1', $var_export); + ob_end_clean(); - ob_end_clean(); - - $var_dump = ' + $var_dump = + '
-
- var_export(' . trim($fn_name) . ') +
+ var_export(' . + trim($fn_name) . + ')
- '.self::_trace().' + ' . + self::_trace() . + '
-
'
-						. $var_export .
-						'
+
' .
+                  $var_export .
+                  '
'; - if (! $echo) - return $var_dump; + if (!$echo) { + return $var_dump; + } - echo $var_dump; + echo $var_dump; - if ($exit) - exit; - } + if ($exit) { + exit(); + } + } + /** + * Функция для вывода переменной (для отладки) + * + * @param mixed $var любая переменная + * @param bool $exit true - остановливает дальнейшее выполнение скрипта, false - продолжает выполнять скрипт + * @param null $bg + * @param bool $echo + * + * @return false|string + */ + public static function _html( + $var, + $exit = false, + $_bg = null, + $echo = true, + ) { + $code = ""; - /** - * Функция для вывода переменной (для отладки) - * - * @param mixed $var любая переменная - * @param bool $exit true - остановливает дальнейшее выполнение скрипта, false - продолжает выполнять скрипт - * @param null $bg - * @param bool $echo - * - * @return false|string - */ - public static function _html($var, $exit = false, $_bg = null, $echo = true) - { - $code = ''; + $backtrace = debug_backtrace(); - $backtrace = debug_backtrace(); + $backtrace = $backtrace[0]; - $backtrace = $backtrace[0]; + if (preg_match("/([^\(]*)\((.*)\)/i", $backtrace["file"])) { + preg_match("/([^\(]*)\((.*)\)/i", $backtrace["file"], $match); + $file = $match[1]; + } - if (preg_match('/([^\(]*)\((.*)\)/i', $backtrace['file'])) - { - preg_match('/([^\(]*)\((.*)\)/i', $backtrace['file'], $match); - $file = $match[1]; - } + $fh = fopen(isset($file) ? $file : $backtrace["file"], "r"); - $fh = fopen((isset($file) - ? $file - : $backtrace['file']), 'r'); + $line = 0; - $line = 0; + while (++$line <= $backtrace["line"]) { + $code = fgets($fh); + } - while (++$line <= $backtrace['line']) - $code = fgets($fh); + fclose($fh); - fclose($fh); + preg_match("/" . __FUNCTION__ . "\s*\((.*)\)\s*;/u", $code, $name); - preg_match('/' . __FUNCTION__ . '\s*\((.*)\)\s*;/u', $code, $name); + ob_start(); - ob_start(); + var_export($var); - var_export($var); + if (!empty($name)) { + $fn_name = explode(",", $name[1]); + $fn_name = array_shift($fn_name); + } else { + $fn_name = "EVAL"; + } - if (! empty($name)) - { - $fn_name = explode(',', $name[1]); - $fn_name = array_shift($fn_name); - } - else - $fn_name = 'EVAL'; + if ($_bg) { + $bg = 'style="background: #' . $_bg . ';"'; + } else { + $bg = ""; + } - if ($_bg) - $bg = 'style="background: #' . $_bg . ';"'; - else - $bg = ''; + $var_dump = ob_get_contents(); - $var_dump = ob_get_contents(); + ob_end_clean(); - ob_end_clean(); - - $var_dump = ' + $var_dump = + '
-
- var_export(' . trim($fn_name) . ') +
+ var_export(' . + trim($fn_name) . + ')
- '.self::_trace().' + ' . + self::_trace() . + '
-
'
-						. htmlentities($var_dump, ENT_QUOTES) .
-						'
+
' .
+                  htmlentities($var_dump, ENT_QUOTES) .
+                  '
'; - if (! $echo) - return $var_dump; + if (!$echo) { + return $var_dump; + } - echo $var_dump; + echo $var_dump; - if ($exit) - exit; - } + if ($exit) { + exit(); + } + } + /** + * Функция для записи переменной в файл (для отладки) + * + * @param mixed $var любая переменная + * @param bool $exit true - остановливает дальнейшее выполнение скрипта, false - продолжает выполнять скрипт + * @param null $bg + * @param bool $append + */ + public static function _dump( + $var, + $exit = false, + $bg = null, + $append = true, + ) { + $code = ""; - /** - * Функция для записи переменной в файл (для отладки) - * - * @param mixed $var любая переменная - * @param bool $exit true - остановливает дальнейшее выполнение скрипта, false - продолжает выполнять скрипт - * @param null $bg - * @param bool $append - */ - public static function _dump($var, $exit = false, $bg = null, $append = true) - { - $code = ''; + $backtrace = debug_backtrace(); - $backtrace = debug_backtrace(); + $backtrace = $backtrace[0]; - $backtrace = $backtrace[0]; + if (preg_match("/([^\(]*)\((.*)\)/i", $backtrace["file"])) { + $file = preg_match( + "/([^\(]*)\((.*)\)/i", + $backtrace["file"], + $match, + ); + $file = $match[1]; + } - if (preg_match('/([^\(]*)\((.*)\)/i', $backtrace['file'])) - { - $file = preg_match('/([^\(]*)\((.*)\)/i', $backtrace['file'], $match); - $file = $match[1]; - } + $fh = fopen(isset($file) ? $file : $backtrace["file"], "r"); - $fh = fopen((isset($file) - ? $file - : $backtrace['file']), 'r'); + $line = 0; - $line = 0; + while (++$line <= $backtrace["line"]) { + $code = fgets($fh); + } - while (++$line <= $backtrace['line']) - $code = fgets($fh); + fclose($fh); - fclose($fh); + preg_match("/" . __FUNCTION__ . "\s*\((.*)\)\s*;/u", $code, $name); - preg_match('/' . __FUNCTION__ . '\s*\((.*)\)\s*;/u', $code, $name); + ob_start(); - ob_start(); + var_dump($var); - var_dump($var); + $var_dump = ob_get_contents(); - $var_dump = ob_get_contents(); + $var_dump = preg_replace('/=>(\s+|\s$)/', " => ", $var_dump); - $var_dump = preg_replace('/=>(\s+|\s$)/', ' => ', $var_dump); + $var_dump = htmlspecialchars($var_dump); - $var_dump = htmlspecialchars($var_dump); + $var_dump = preg_replace( + "/(=> )+([a-zA-Z]+\(\d+\))/", + '$1$2', + $var_dump, + ); - $var_dump = preg_replace('/(=> )+([a-zA-Z]+\(\d+\))/', '$1$2', $var_dump); + ob_end_clean(); - ob_end_clean(); + if (!empty($name)) { + $fn_name = explode(",", $name[1]); + $fn_name = array_shift($fn_name); + } else { + $fn_name = "EVAL"; + } - if (! empty($name)) - { - $fn_name = explode(',', $name[1]); - $fn_name = array_shift($fn_name); - } - else - $fn_name = 'EVAL'; + if (!$bg) { + $br = "2a5885"; + $bg = "43648c"; + } else { + $br = $bg; + } - if (! $bg) - { - $br = '2a5885'; - $bg = '43648c'; - } - else - { - $br = $bg; - } - - $var_dump = ' + $var_dump = + '
- var_dump(' . trim($fn_name) . ') + var_dump(' . + trim($fn_name) . + ')
- '.self::_trace().' + ' . + self::_trace() . + '
-
'
-						. $var_dump .
-						'
+
' .
+                  $var_dump .
+                  '
'; - if ($append) - file_put_contents(BASE_DIR . '/debug.html', $var_dump, FILE_APPEND); - else - file_put_contents(BASE_DIR . '/debug.html', $var_dump); + if ($append) { + file_put_contents( + BASE_DIR . "/debug.html", + $var_dump, + FILE_APPEND, + ); + } else { + file_put_contents(BASE_DIR . "/debug.html", $var_dump); + } - if ($exit) - exit; - } + if ($exit) { + exit(); + } + } + /** + * Функция для вывода переменной (для отладки) + * + * @param mixed $var любая переменная + * @param bool $exit + * @param null $bg + * @param bool $echo + * + * @return false|null|string|string[] + */ + public static function _($var, $_bg = null, $from = "") + { + $code = ""; - /** - * Функция для вывода переменной (для отладки) - * - * @param mixed $var любая переменная - * @param bool $exit - * @param null $bg - * @param bool $echo - * - * @return false|null|string|string[] - */ - public static function _($var, $_bg = null, $from = '') - { - $code = ''; + $backtrace = debug_backtrace(); - $backtrace = debug_backtrace(); + $backtrace = $backtrace[0]; - $backtrace = $backtrace[0]; + if (preg_match("/([^\(]*)\((.*)\)/i", $backtrace["file"])) { + preg_match("/([^\(]*)\((.*)\)/i", $backtrace["file"], $match); + $file = $match[1]; + } - if (preg_match('/([^\(]*)\((.*)\)/i', $backtrace['file'])) - { - preg_match('/([^\(]*)\((.*)\)/i', $backtrace['file'], $match); - $file = $match[1]; - } + $fh = fopen(isset($file) ? $file : $backtrace["file"], "r"); - $fh = fopen((isset($file) - ? $file - : $backtrace['file']), 'r'); + $line = 0; - $line = 0; + while (++$line <= $backtrace["line"]) { + $code = fgets($fh); + } - while (++$line <= $backtrace['line']) - $code = fgets($fh); + fclose($fh); - fclose($fh); + preg_match("/" . __FUNCTION__ . "\s*\((.*)\)\s*;/u", $code, $name); - preg_match('/' . __FUNCTION__ . '\s*\((.*)\)\s*;/u', $code, $name); + unset($code, $backtrace); - unset ($code, $backtrace); + ob_start(); - ob_start(); + var_dump($var); - var_dump($var); + $var_dump = ob_get_contents(); - $var_dump = ob_get_contents(); + $var_dump = preg_replace('/=>(\s+|\s$)/', " => ", $var_dump); - $var_dump = preg_replace('/=>(\s+|\s$)/', ' => ', $var_dump); + $var_dump = htmlspecialchars($var_dump); - $var_dump = htmlspecialchars($var_dump); + $var_dump = preg_replace( + "/(=>)/", + '$1', + $var_dump, + ); - $var_dump = preg_replace('/(=>)/', '$1', $var_dump); + ob_end_clean(); - ob_end_clean(); + if (!empty($name)) { + $fn_name = explode(",", $name[1]); + $fn_name = array_shift($fn_name); + } else { + $fn_name = "EVAL"; + } - if (! empty($name)) - { - $fn_name = explode(',', $name[1]); - $fn_name = array_shift($fn_name); - } - else - $fn_name = 'EVAL'; + if ($_bg) { + $bg = 'style="background: #' . $_bg . ';"'; + } else { + $bg = ""; + } - if ($_bg) - $bg = 'style="background: #' . $_bg . ';"'; - else - $bg = ''; - - $var_dump = ' + $var_dump = + '
-
- var_dump(' . trim($fn_name) . ') ' . $from . ' +
+ var_dump(' . + trim($fn_name) . + ") " . + $from . + '
- '.self::_trace().' + ' . + self::_trace() . + '
-
'
-				. $var_dump .
-				'
+
' .
+                  $var_dump .
+                  '
'; - self::$_debug[] = $var_dump; - } + self::$_debug[] = $var_dump; + } + /** + * Функция для трейсинга дебаггера + * + * @param + * @return string + */ + public static function _trace() + { + $bt = debug_backtrace(); - /** - * Функция для трейсинга дебаггера - * - * @param - * @return string - */ - public static function _trace() - { - $bt = debug_backtrace(); + $trace = $bt[1]; - $trace = $bt[1]; + $line = $trace["line"]; - $line = $trace['line']; + $file = $trace["file"]; - $file = $trace['file']; + //$function = $trace['function']; - //$function = $trace['function']; + $class = isset($bt[2]["class"]) ? $bt[2]["class"] : "None"; - $class = (isset($bt[2]['class']) - ? $bt[2]['class'] - : 'None'); - - if (isset($bt[2]['class'])) - $type = $bt[2]['type']; - else - $type = 'Unknow'; - - $function = isset($bt[2]['function']) - ? $bt[2]['function'] - : 'None'; - - return sprintf('
Class: %s | Type: %s | Function: %s
File: %s line %s
', $class, $type, $function, $file, $line); - } - - - /** - * Функция отвечает за начало таймера - * - * @param string $name любая переменная (ключ массива) - */ - public static function startTime($name = '') - { - Debug::$time[$name] = microtime(true); - } - - - /** - * Функция отвечает за окончание таймера - * - * @param string $name любая переменная (ключ массива) - * - * @return string - */ - public static function endTime($name = '') - { - if (isset(Debug::$time[$name])) - return sprintf("%01.4f", microtime(true) - Debug::$time[$name]) . ' sec'; - } - - - /** - * Функция отвечает за начало подсчета используеой памяти - * - * @param string $name любая переменная (ключ массива) - */ - public static function startMemory($name = '') - { - Debug::$memory[$name] = memory_get_usage(); - } - - - /** - * Функция отвечает за окончание подсчета используемой памяти - * - * @param string $name любая переменная (ключ массива) - * @return string - */ - public static function endMemory($name = '') - { - if (isset(Debug::$memory[$name])) - return Debug::formatSize(memory_get_usage() - Debug::$memory[$name]); - } - - - /** - * Форматированный вывод размера - * - * @param int $size размер - * @return string нормированный размер с единицой измерения - */ - public static function formatSize($size) - { - if ($size >= 1073741824) - $size = round($size / 1073741824 * 100) / 100 . ' Gb'; - elseif ($size >= 1048576) - $size = round($size / 1048576 * 100) / 100 . ' Mb'; - elseif ($size >= 1024) - $size = round($size / 1024 * 100) / 100 . ' Kb'; - else - $size = $size . ' b'; - - return $size; - } - - - /** - * Форматированный вывод чисел - * - * @param int $number число - * @param int $decimal - * @param string $after - * @param string $thousand - * @return string - */ - public static function numFormat($number, $decimal = 0, $after = ',', $thousand= '.') - { - if ($number) - return number_format($number, $decimal, $after, $thousand); - - return ''; - } - - - /** - * @param $header - * @param $body - * @param $caller - * @param bool $exit - */ - public static function _errorSql ($header, $body, $caller, $exit = false) - { - // - } - - - /** - * Вывод статистики - * - * @param null $type - * - * @return int|null|string - */ - public static function getStatistic ($type = null) - { - global $AVE_DB; - - if (!defined('START_MEMORY')) { - define('START_MEMORY', memory_get_usage()); - } - - $stat = null; - - switch ($type) - { - case 'time': - $stat = number_format(microtime_diff(START_MICROTIME, microtime()), 3, ',', ' '); - break; - - case 'memory': - $stat = Debug::formatSize(memory_get_usage() - START_MEMORY); - break; - - case 'peak': - $stat = Debug::formatSize(memory_get_peak_usage()); - break; - - case 'template': - $mod = $_REQUEST['module'] ?? 'index'; - $act = $_REQUEST['action'] ?? 'main'; - $stat = "[{$mod}] -> {$act}.tpl"; - - if (isset($AVE_Template)) { - $real_tpl = $AVE_Template->template_resource ?? $AVE_Template->_current_file ?? null; - if ($real_tpl) { - $stat = basename($real_tpl); - } - } - break; - - case 'sqlcount': - $stat = $AVE_DB->DBProfilesGet('count'); - break; - - case 'sqltrace': - $stat = count($AVE_DB->_query_list); - break; - - case 'sqltime': - $stat = $AVE_DB->DBProfilesGet('time'); - break; - - case 'get': - $stat = self::_stat_get('get'); - break; - - case 'post': - $stat = self::_stat_get('post'); - break; - - case 'request': - $stat = self::_stat_get('request'); - break; - - case 'files': - $stat = self::_stat_get('files'); - break; - - case 'cookie': - $stat = self::_stat_get('cookie'); - break; - - case 'env': - $stat = self::_stat_get('env'); - break; - - case 'session': - $stat = self::_stat_get('session'); - break; - - case 'server': - $stat = self::_stat_get('server'); - break; - - case 'globals': - $stat = self::_stat_get('globals'); - break; - - case 'blocks': - $stat = self::_stat_get('blocks'); - break; - } - - return $stat; - } - - - /** - * @param string $type - * - * @return false|null|string|string[] - */ - public static function _stat_get (string $type = 'get') - { - ob_start(); - - if ($type == 'get') - var_dump($_GET); - else if ($type == 'post') - var_dump($_POST); - else if ($type == 'request') - var_dump($_REQUEST); - else if ($type == 'files') - var_dump($_FILES); - else if ($type == 'cookie') - var_dump($_COOKIE); - else if ($type == 'session') - var_dump($_SESSION); - else if ($type == 'server') - var_dump($_SERVER); - else if ($type == 'env') - var_dump($_ENV); - else if ($type == 'globals') - var_dump($GLOBALS); - else if ($type == 'blocks') - if (isset($GLOBALS['block_generate'])) { - var_dump($GLOBALS['block_generate']); + if (isset($bt[2]["class"])) { + $type = $bt[2]["type"]; + } else { + $type = "Unknow"; } - $stat = ob_get_contents(); - $stat = preg_replace('/=>(\s+|\s$)/', ' => ', $stat); - $stat = htmlspecialchars($stat); - $stat = preg_replace('/(=>)/', '$1', $stat); - $stat = '
'. $stat .'
'; - - ob_end_clean(); - return $stat; - } + $function = isset($bt[2]["function"]) ? $bt[2]["function"] : "None"; + return sprintf( + '
Class: %s | Type: %s | Function: %s
File: %s line %s
', + $class, + $type, + $function, + $file, + $line, + ); + } -public static function getDocumentInfo () - { - global $AVE_Template; + /** + * Функция отвечает за начало таймера + * + * @param string $name любая переменная (ключ массива) + */ + public static function startTime($name = "") + { + Debug::$time[$name] = microtime(true); + } - $_arr = [ - 'DOC' => '/admin/index.php?do=docs&action=edit&Id=', - 'RUBRIC' => '/admin/index.php?do=rubs&action=edit&Id=', - 'BLOCKS' => '/admin/index.php?do=blocks&action=edit&id=', - 'SYSBLOCK' => '/admin/index.php?do=sysblocks&action=edit&id=', - 'REQUESTS' => '/admin/index.php?do=request&action=edit&Id=', - 'NAVIAGTIONS' => '/admin/index.php?do=navigation&action=templates&navigation_id=' - ]; + /** + * Функция отвечает за окончание таймера + * + * @param string $name любая переменная (ключ массива) + * + * @return string + */ + public static function endTime($name = "") + { + if (isset(Debug::$time[$name])) { + return sprintf( + "%01.4f", + microtime(true) - Debug::$time[$name], + ) . " sec"; + } + } - // ИСПРАВЛЕНИЕ : Безопасно получаем 'id' из $_REQUEST - $doc = get_document($_REQUEST['id'] ?? ''); + /** + * Функция отвечает за начало подсчета используеой памяти + * + * @param string $name любая переменная (ключ массива) + */ + public static function startMemory($name = "") + { + Debug::$memory[$name] = memory_get_usage(); + } - $_edit = []; + /** + * Функция отвечает за окончание подсчета используемой памяти + * + * @param string $name любая переменная (ключ массива) + * @return string + */ + public static function endMemory($name = "") + { + if (isset(Debug::$memory[$name])) { + return Debug::formatSize( + memory_get_usage() - Debug::$memory[$name], + ); + } + } - // ИСПРАВЛЕНИЕ : Проверяем, что $doc содержит данные и нужные ключи - if (!empty($doc) && isset($doc['Id'], $doc['rubric_id'])) { - $_edit['DOC'][$doc['Id']] = $_arr['DOC'] . $doc['Id']; - $_edit['RUBRIC'][$doc['rubric_id']] = $_arr['RUBRIC'] . $doc['rubric_id']; - } - - // ИСПРАВЛЕНИЕ : Проверяем, что $GLOBALS['block_generate'] существует и является массивом/объектом - if (isset($GLOBALS['block_generate']) && (is_array($GLOBALS['block_generate']) || $GLOBALS['block_generate'] instanceof Traversable)) { - foreach ($GLOBALS['block_generate'] AS $k => $v) - { - if (! in_array($k, array_keys($_arr))) { - continue; - } + /** + * Форматированный вывод размера + * + * @param int $size размер + * @return string нормированный размер с единицой измерения + */ + public static function formatSize($size) + { + if ($size >= 1073741824) { + $size = round(($size / 1073741824) * 100) / 100 . " Gb"; + } elseif ($size >= 1048576) { + $size = round(($size / 1048576) * 100) / 100 . " Mb"; + } elseif ($size >= 1024) { + $size = round(($size / 1024) * 100) / 100 . " Kb"; + } else { + $size = $size . " b"; + } - // Защита внутреннего цикла - if (is_array($v) || $v instanceof Traversable) { - foreach ($v as $key => $value) { - $_edit[$k][$key] = $_arr[$k] . $key; - } - } - } - } + return $size; + } - $AVE_Template->assign('edit', $_edit); - $AVE_Template->assign('session', session_id()); + /** + * Форматированный вывод чисел + * + * @param int $number число + * @param int $decimal + * @param string $after + * @param string $thousand + * @return string + */ + public static function numFormat( + $number, + $decimal = 0, + $after = ",", + $thousand = ".", + ) { + if ($number) { + return number_format($number, $decimal, $after, $thousand); + } - $return = $AVE_Template->fetch(BASE_DIR . '/lib/debug/debug.tpl'); + return ""; + } - return $return; - } + /** + * @param $header + * @param $body + * @param $caller + * @param bool $exit + */ + public static function _errorSql($header, $body, $caller, $exit = false) + { + // + } + /** + * Вывод статистики + * + * @param null $type + * + * @return int|null|string + */ + public static function getStatistic($type = null) + { + global $AVE_DB; - /** - * @return string - */ - public static function displayInfo (): string - { - global $AVE_DB; + if (!defined("START_MEMORY")) { + define("START_MEMORY", memory_get_usage()); + } - $out = PHP_EOL; - $out .= ''; - $out .= PHP_EOL; - $out .= ''; - $out .= PHP_EOL; - $out .= ''; - $out .= PHP_EOL; - $out .= '
'; - $out .= PHP_EOL; - $out .= ' + $stat = null; + + switch ($type) { + case "time": + $stat = number_format( + microtime_diff(START_MICROTIME, microtime()), + 3, + ",", + " ", + ); + break; + + case "memory": + $stat = Debug::formatSize( + memory_get_usage() - START_MEMORY, + ); + break; + + case "peak": + $stat = Debug::formatSize(memory_get_peak_usage()); + break; + + case "template": + // Извлекаем все возможные ключи модуля + $req_do = $_REQUEST["do"] ?? ""; + $req_mod = $_REQUEST["mod"] ?? ""; + $req_module = $_REQUEST["module"] ?? ""; + $action = $_REQUEST["action"] ?? ""; + + // Определяем имя модуля + if ($req_do == "modules" || $req_module == "modules") { + $real_mod = !empty($req_mod) + ? $req_mod + : ($req_module != "modules" + ? $req_module + : "system"); + $display_name = "modules → {$real_mod}"; + $current_context = $real_mod; + } else { + $display_name = !empty($req_module) + ? $req_module + : ($req_do ?: + "index"); + $current_context = $display_name; + } + + $stat = + "[{$display_name}]" . + ($action + ? " {$action}" + : ""); + + if (!empty(self::$template_stack)) { + $tpls = array_unique(self::$template_stack); + + // Ищем целевой шаблон (Target) + $target = ""; + foreach ($tpls as $t) { + $pure = str_replace(".tpl", "", $t); + // Ищем совпадение с экшеном или именем модуля + if ( + $pure == $action || + $pure == $current_context || + ($current_context == "sysblocks" && + $pure == "start") + ) { + $target = $t; + break; + } + } + + if (!$target) { + $rev = array_reverse($tpls); + foreach ($rev as $t) { + if ( + !in_array($t, [ + "main.tpl", + "cp_links.tpl", + "header.tpl", + "footer.tpl", + ]) + ) { + $target = $t; + break; + } + } + } + + $stack_output = []; + foreach ($tpls as $t) { + if ($t === $target) { + $stack_output[] = "{$t}"; + } else { + $stack_output[] = "{$t}"; + } + } + $stat .= + " | " . + implode( + ' ', + $stack_output, + ); + } + break; + + case "sqlcount": + $stat = $AVE_DB->DBProfilesGet("count"); + break; + + case "sqltrace": + $stat = count($AVE_DB->_query_list); + break; + + case "sqltime": + $stat = $AVE_DB->DBProfilesGet("time"); + break; + + case "get": + $stat = self::_stat_get("get"); + break; + + case "post": + $stat = self::_stat_get("post"); + break; + + case "request": + $stat = self::_stat_get("request"); + break; + + case "files": + $stat = self::_stat_get("files"); + break; + + case "cookie": + $stat = self::_stat_get("cookie"); + break; + + case "env": + $stat = self::_stat_get("env"); + break; + + case "session": + $stat = self::_stat_get("session"); + break; + + case "server": + $stat = self::_stat_get("server"); + break; + + case "globals": + $stat = self::_stat_get("globals"); + break; + + case "blocks": + $stat = self::_stat_get("blocks"); + break; + } + + return $stat; + } + + /** + * @param string $type + * + * @return false|null|string|string[] + */ + public static function _stat_get(string $type = "get") + { + ob_start(); + + if ($type == "get") { + var_dump($_GET); + } elseif ($type == "post") { + var_dump($_POST); + } elseif ($type == "request") { + var_dump($_REQUEST); + } elseif ($type == "files") { + var_dump($_FILES); + } elseif ($type == "cookie") { + var_dump($_COOKIE); + } elseif ($type == "session") { + var_dump($_SESSION); + } elseif ($type == "server") { + var_dump($_SERVER); + } elseif ($type == "env") { + var_dump($_ENV); + } elseif ($type == "globals") { + var_dump($GLOBALS); + } elseif ($type == "blocks") { + if (isset($GLOBALS["block_generate"])) { + var_dump($GLOBALS["block_generate"]); + } + } + $stat = ob_get_contents(); + $stat = preg_replace('/=>(\s+|\s$)/', " => ", $stat); + $stat = htmlspecialchars($stat); + $stat = preg_replace( + "/(=>)/", + '$1', + $stat, + ); + $stat = + '
' .
+                  $stat .
+                  "
"; + + ob_end_clean(); + + return $stat; + } + + public static function getDocumentInfo() + { + global $AVE_Template; + + $_arr = [ + "DOC" => "/admin/index.php?do=docs&action=edit&Id=", + "RUBRIC" => "/admin/index.php?do=rubs&action=edit&Id=", + "BLOCKS" => "/admin/index.php?do=blocks&action=edit&id=", + "SYSBLOCK" => "/admin/index.php?do=sysblocks&action=edit&id=", + "REQUESTS" => "/admin/index.php?do=request&action=edit&Id=", + "NAVIAGTIONS" => + "/admin/index.php?do=navigation&action=templates&navigation_id=", + ]; + + // ИСПРАВЛЕНИЕ : Безопасно получаем 'id' из $_REQUEST + $doc = get_document($_REQUEST["id"] ?? ""); + + $_edit = []; + + // ИСПРАВЛЕНИЕ : Проверяем, что $doc содержит данные и нужные ключи + if (!empty($doc) && isset($doc["Id"], $doc["rubric_id"])) { + $_edit["DOC"][$doc["Id"]] = $_arr["DOC"] . $doc["Id"]; + $_edit["RUBRIC"][$doc["rubric_id"]] = + $_arr["RUBRIC"] . $doc["rubric_id"]; + } + + // ИСПРАВЛЕНИЕ : Проверяем, что $GLOBALS['block_generate'] существует и является массивом/объектом + if ( + isset($GLOBALS["block_generate"]) && + (is_array($GLOBALS["block_generate"]) || + $GLOBALS["block_generate"] instanceof Traversable) + ) { + foreach ($GLOBALS["block_generate"] as $k => $v) { + if (!in_array($k, array_keys($_arr))) { + continue; + } + + // Защита внутреннего цикла + if (is_array($v) || $v instanceof Traversable) { + foreach ($v as $key => $value) { + $_edit[$k][$key] = $_arr[$k] . $key; + } + } + } + } + + $AVE_Template->assign("edit", $_edit); + $AVE_Template->assign("session", session_id()); + + $return = $AVE_Template->fetch(BASE_DIR . "/lib/debug/debug.tpl"); + + return $return; + } + + /** + * Вывод отладочной информации + * Поддерживает режимы: off, full, tpl + * * @param string|null $force_mode Принудительный режим + * @return string + */ + public static function displayInfo($force_mode = null): string + { + global $AVE_DB; + + // 1. ОПРЕДЕЛЕНИЕ РЕЖИМА (Паблик vs Админка) + if ($force_mode !== null) { + $mode = $force_mode; + } elseif (defined("ACP") && defined("PROFILING_ADMIN")) { + // Режим для панели управления + $mode = PROFILING_ADMIN; + } elseif (defined("PROFILING")) { + // Режим для публичной части + $mode = PROFILING; + } else { + $mode = "off"; + } + + // 2. ЕСЛИ ВЫКЛЮЧЕНО + if ($mode === "off" || $mode === false || $mode === "0") { + return ""; + } + + // 3. РЕЖИМ ТОЛЬКО ШАБЛОН (Минималистичный вывод) + if ($mode === "tpl") { + return ' +
+ ' . + self::getStatistic("template") . + ' +
'; + } + + // 4. РЕЖИМ FULL (Твой стандартный дебаг-бар) + $out = PHP_EOL; + $out .= ''; + $out .= PHP_EOL; + $out .= + ''; + $out .= PHP_EOL; + $out .= ''; + $out .= PHP_EOL; + $out .= '
'; + $out .= PHP_EOL; + $out .= '
  • Timers
  • @@ -1089,131 +1300,179 @@ public static function getDocumentInfo ()
  • Edit
'; - $out .= PHP_EOL; - $out .= '
' . PHP_EOL; - $out .= 'Time generation: ' . self::getStatistic('time') . ' sec'; - $out .= '
'; - $out .= 'Memory usage: ' . self::getStatistic('memory'); - $out .= '
'; - $out .= 'Memory peak usage: ' . self::getStatistic('peak'); - $out .= '
'; - $out .= 'Real SQL Queries: ' . $AVE_DB->DBProfilesGet('count') . ' for ' . $AVE_DB->DBProfilesGet('time') . ' sec'; - $out .= '
'; - $out .= 'All SQL Queries: ' . (is_array($AVE_DB->_query_list) || $AVE_DB->_query_list instanceof Countable ? count($AVE_DB->_query_list) : 0); - $out .= '
'; + $out .= PHP_EOL; + $out .= + '
' . + PHP_EOL; - $out .= PHP_EOL; + // Выводим имя шаблона в первой вкладке + $out .= + "Template: " . + self::getStatistic("template") . + "
"; - $out .= ''; + $out .= "Time generation: " . self::getStatistic("time") . " sec"; + $out .= "
"; + $out .= "Memory usage: " . self::getStatistic("memory"); + $out .= "
"; + $out .= "Memory peak usage: " . self::getStatistic("peak"); + $out .= "
"; + $out .= + "Real SQL Queries: " . + $AVE_DB->DBProfilesGet("count") . + " for " . + $AVE_DB->DBProfilesGet("time") . + " sec"; + $out .= "
"; + $out .= + "All SQL Queries: " . + (is_array($AVE_DB->_query_list) || + $AVE_DB->_query_list instanceof Countable + ? count($AVE_DB->_query_list) + : 0); + $out .= "
"; - $out .= PHP_EOL; + $out .= PHP_EOL; - $out .= ''; + $out .= + '"; - $out .= PHP_EOL; + $out .= PHP_EOL; - $out .= ''; + $out .= + '"; - $out .= PHP_EOL; + $out .= PHP_EOL; - $out .= ''; + $out .= + '"; - $out .= PHP_EOL; + $out .= PHP_EOL; - $out .= ''; + $out .= + '"; - $out .= PHP_EOL; + $out .= PHP_EOL; - $out .= ''; + $out .= + '"; - $out .= PHP_EOL; + $out .= PHP_EOL; - $out .= ''; + $out .= + '"; - $out .= PHP_EOL; + $out .= PHP_EOL; - $out .= ''; + $out .= + '"; - $out .= PHP_EOL; + $out .= PHP_EOL; - $out .= ''; + $out .= + '"; - $out .= PHP_EOL; + $out .= PHP_EOL; - $out .= ''; + $out .= + '"; - $out .= PHP_EOL; - $out .= ''; + $out .= PHP_EOL; - $out .= PHP_EOL; - $out .= ''; + $out .= + '"; - $out .= PHP_EOL; - $out .= ''; + $out .= PHP_EOL; + $out .= + '"; - $out .= PHP_EOL; - $out .= ''; + $out .= PHP_EOL; + $out .= + '"; - $out .= PHP_EOL; - $out .= '
'; + $out .= PHP_EOL; + $out .= + '"; - return $out; - } + $out .= PHP_EOL; + $out .= + '"; - /** - * @return string - */ - public static function displayInfoLight (): string - { - global $AVE_DB; + $out .= PHP_EOL; + $out .= "
"; - $out = PHP_EOL; - $out .= ''; - $out .= PHP_EOL; - $out .= ''; - $out .= PHP_EOL; - $out .= ''; - $out .= PHP_EOL; - $out .= '
'; - $out .= PHP_EOL; - $out .= ' + return $out; + } + + /** + * @return string + */ + public static function displayInfoLight(): string + { + global $AVE_DB; + + $out = PHP_EOL; + $out .= ''; + $out .= PHP_EOL; + $out .= + ''; + $out .= PHP_EOL; + $out .= ''; + $out .= PHP_EOL; + $out .= '
'; + $out .= PHP_EOL; + $out .= '
  • Timers
  • @@ -1223,44 +1482,67 @@ public static function getDocumentInfo ()
  • Document
'; - $out .= PHP_EOL; - $out .= '
' . PHP_EOL; - $out .= 'Time generation: ' . self::getStatistic('time') . ' sec'; - $out .= '
'; - $out .= 'Memory usage: ' . self::getStatistic('memory'); - $out .= '
'; - $out .= 'Memory peak usage: ' . self::getStatistic('peak'); - $out .= '
'; - $out .= 'Real SQL Queries: ' . $AVE_DB->DBProfilesGet('count') . ' for ' . $AVE_DB->DBProfilesGet('time') . ' sec'; - $out .= '
'; - $out .= 'All SQL Queries: ' . (is_array($AVE_DB->_query_list) || $AVE_DB->_query_list instanceof Countable ? count($AVE_DB->_query_list) : 0); - $out .= '
'; + $out .= PHP_EOL; + $out .= + '
' . + PHP_EOL; + $out .= "Time generation: " . self::getStatistic("time") . " sec"; + $out .= "
"; + $out .= "Memory usage: " . self::getStatistic("memory"); + $out .= "
"; + $out .= "Memory peak usage: " . self::getStatistic("peak"); + $out .= "
"; + $out .= + "Real SQL Queries: " . + $AVE_DB->DBProfilesGet("count") . + " for " . + $AVE_DB->DBProfilesGet("time") . + " sec"; + $out .= "
"; + $out .= + "All SQL Queries: " . + (is_array($AVE_DB->_query_list) || + $AVE_DB->_query_list instanceof Countable + ? count($AVE_DB->_query_list) + : 0); + $out .= "
"; - $out .= PHP_EOL; - $out .= ''; + $out .= PHP_EOL; + $out .= + '"; - $out .= PHP_EOL; - $out .= ''; + $out .= PHP_EOL; + $out .= + '"; - $out .= PHP_EOL; - $out .= ''; + $out .= PHP_EOL; + $out .= + '"; - $out .= PHP_EOL; - $out .= ''; + $out .= PHP_EOL; + $out .= + '"; - $out .= PHP_EOL; - $out .= '
'; + $out .= PHP_EOL; + $out .= "
"; - return $out; - } - } + return $out; + } +} ?> \ No newline at end of file diff --git a/class/class.template.php b/class/class.template.php index 3951bf0..79cb319 100644 --- a/class/class.template.php +++ b/class/class.template.php @@ -5,7 +5,7 @@ * @package AVE.cms * @version 4.x (АДАПТИРОВАНО ДЛЯ SMARTY 5 С NAMESPACE) * @filesource - * @copyright © 2007-2025 AVE.cms, https://ave.gitget.ru + * @copyright © 2007-2026 AVE.cms, https://ave4cms.ru * */ @@ -16,12 +16,12 @@ require($smarty_path); - // Импортируем класс Smarty 5 для удобства + // Импортируем класс Smarty 5 use Smarty\Smarty; /** * Расширение класса шаблонизатора Smarty - * Теперь наследуемся от Smarty 5 через его namespace + * наследуемся от Smarty 5 через его namespace */ class AVE_Template extends Smarty { @@ -48,7 +48,6 @@ /** * Путь к директории шаблонов по умолчанию. - * Если вы не передадите тип ресурса во время подключения файлов, они будут искаться здесь. */ $this->template_dir = $template_dir; @@ -103,7 +102,6 @@ /** * Регистрация плагинов-функций Smarty. - * АДАПТАЦИЯ: register_function заменен на registerPlugin('function', ...) для Smarty 5. * Добавлены проверки function_exists для предотвращения ошибки "not callable". */ if (function_exists('check_permission')) { @@ -122,7 +120,6 @@ /** * Регистрация плагинов-модификаторов Smarty. - * АДАПТАЦИЯ: register_modifier заменен на registerPlugin('modifier', ...) для Smarty 5. */ if (function_exists('pretty_date')) { $this->registerPlugin('modifier', 'pretty_date', 'pretty_date'); @@ -134,49 +131,40 @@ $this->registerPlugin('modifier', 'utf8', 'utf8'); } if (function_exists('check_permission')) { - // Регистрируем как модификатор, если функция существует $this->registerPlugin('modifier', 'check_permission', 'check_permission'); } - // stripslashes - это нативная PHP-функция, проверка не нужна + $this->registerPlugin('modifier', 'stripslashes', 'stripslashes'); if (function_exists('htmlspecialchars')) { - // Регистрируем как модификатор, если функция существует $this->registerPlugin('modifier', 'htmlspecialchars', 'htmlspecialchars'); } if (function_exists('trim')) { - // Регистрируем как модификатор, если функция существует $this->registerPlugin('modifier', 'trim', 'trim'); } if (function_exists('format_size')) { - // Регистрируем как модификатор, если функция существует $this->registerPlugin('modifier', 'format_size', 'format_size'); } if (function_exists('urldecode')) { - // Регистрируем как модификатор, если функция существует $this->registerPlugin('modifier', 'urldecode', 'urldecode'); } if (function_exists('strtolower')) { - // Регистрируем как модификатор, если функция существует $this->registerPlugin('modifier', 'strtolower', 'strtolower'); } if (function_exists('constant')) { - // Регистрируем как модификатор, если функция существует $this->registerPlugin('modifier', 'constant', 'constant'); } if (function_exists('stripcslashes')) { - // Регистрируем как модификатор, если функция существует $this->registerPlugin('modifier', 'stripcslashes', 'stripcslashes'); } if (function_exists('html_entity_decode')) { - // Регистрируем как модификатор, если функция существует $this->registerPlugin('modifier', 'html_entity_decode', 'html_entity_decode'); } @@ -192,8 +180,6 @@ /** * Присваиваем общие значения для шаблонов. - * Можно явно передавать пары имя/значение, - * или ассоциативные массивы, содержащие пары имя/значение. */ $assign['BASE_DIR'] = BASE_DIR; $assign['ABS_PATH'] = ABS_PATH; @@ -243,7 +229,6 @@ * Переопределение одноименного метода Smarty * для конфигурационных файлов созданных в теме дизайна. * - * ИСПРАВЛЕНИЕ: Добавлен default = null к $file для совместимости с PHP 8/Smarty 5 * * @param string $file * @param string $section @@ -259,7 +244,6 @@ * Переопределение одноименного метода Smarty * для пользовательских шаблонов созданных в теме дизайна. * - * ИСПРАВЛЕНИЕ: Добавлен default = null к $tpl_file для совместимости с PHP 8/Smarty 5 * * @param string $tpl_file name of template file * @param string $cache_id @@ -276,7 +260,6 @@ * Переопределение одноименного метода Smarty * для пользовательских шаблонов созданных в теме дизайна. * - * ИСПРАВЛЕНИЕ: Добавлен default = null к $resource_name для совместимости с PHP 8/Smarty 5 * * @param string $resource_name * @param string $cache_id @@ -285,6 +268,10 @@ */ function fetch($resource_name = null, $cache_id = null, $compile_id = null) { + // Записываем каждый вызов в стек + if (class_exists('Debug')) { + Debug::$template_stack[] = basename($resource_name); + } // Вызываем родительский fetch return parent::fetch($this->_redefine_template($resource_name), $cache_id, $compile_id); } @@ -293,7 +280,6 @@ * Переопределение одноименного метода Smarty * для пользовательских шаблонов созданных в теме дизайна. * - * ИСПРАВЛЕНИЕ: Добавлен default = null к $resource_name для совместимости с PHP 8/Smarty 5 * * @param string $resource_name * @param string $cache_id @@ -302,6 +288,10 @@ */ function display($resource_name = null, $cache_id = null, $compile_id = null) { + // Записываем каждый вызов в стек + if (class_exists('Debug')) { + Debug::$template_stack[] = basename($resource_name); + } // Вызываем родительский display parent::display($this->_redefine_template($resource_name), $cache_id, $compile_id); } diff --git a/inc/config.php b/inc/config.php index dd1476c..c23bfc9 100644 --- a/inc/config.php +++ b/inc/config.php @@ -358,9 +358,9 @@ //-- Вывод общей статистики в административной части $GLOBALS['CMS_CONFIG']['_CONST_DEV']['PROFILING_ADMIN'] = [ 'DESCR' => 'Вывод общей статистики в административной части', - 'DEFAULT' => false, - 'TYPE' => 'bool', - 'VARIANT' => '' + 'DEFAULT' => 'off', + 'TYPE' => 'dropdown', + 'VARIANT' => ['off', 'full', 'tpl'] ]; //-- Собирать статистику выполненных запросов