diff --git a/class/class.debug.php b/class/class.debug.php index 775ae2a..6410ce5 100644 --- a/class/class.debug.php +++ b/class/class.debug.php @@ -2,7 +2,7 @@ // Проверка if (!defined("BASE_DIR")) { - exit("Access denied"); + exit("Access denied"); } /** @@ -21,1528 +21,1296 @@ if (!defined("BASE_DIR")) { class Debug { - protected static $time = []; - - protected static $memory = []; - - protected static $_debug = []; - - public static $_document_content = ""; - - public static $template_stack = []; - - public function __construct() - { - // - } - - /** - * Функция для вывода переменной (для отладки) - * - * @param mixed $var любая переменная - * @param bool $exit - * @param null $bg - * @param bool $echo - * - * @return false|null|string|string[] - */ - public static function _echo( - $var, - $exit = false, - $_bg = null, - $echo = true, - ) { - $code = ""; - - $backtrace = debug_backtrace(); - - $backtrace = $backtrace[0]; - - if (preg_match("/([^\(]*)\((.*)\)/i", $backtrace["file"])) { - preg_match("/([^\(]*)\((.*)\)/i", $backtrace["file"], $match); - $file = $match[1]; - } - - $fh = fopen(isset($file) ? $file : $backtrace["file"], "r"); - - $line = 0; - - while (++$line <= $backtrace["line"]) { - $code = fgets($fh); - } - - fclose($fh); - - preg_match("/" . __FUNCTION__ . "\s*\((.*)\)\s*;/u", $code, $name); - - unset($code, $backtrace); - - ob_start(); - - var_dump($var); - - $var_dump = ob_get_contents(); - - $var_dump = preg_replace('/=>(\s+|\s$)/', " => ", $var_dump); - - $var_dump = htmlspecialchars($var_dump); - - $var_dump = preg_replace( - "/(=>)/", - '$1', - $var_dump, - ); - - ob_end_clean(); - - 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 . - '-
' . - $var_export . - '-
' . - htmlentities($var_dump, ENT_QUOTES) . - '-
' . - $var_dump . - '-
' . - $var_dump . - '-
' . $var_dump . '+
' . $var_dump . '+
' . $var_export . '+
' . htmlentities($var_dump, ENT_QUOTES) . '+
' . $var_dump . '+
' . $var_dump . '+
' . $stat . ""; - return $stat; - } + ob_end_clean(); - /** - * @param string $type - * - * @return false|null|string|string[] - */ - public static function _stat_get(string $type = "get") - { - ob_start(); + return $stat; + } - 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"]); - } + 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; + } + } } - $stat = ob_get_contents(); - $stat = preg_replace('/=>(\s+|\s$)/', " => ", $stat); - $stat = htmlspecialchars($stat); - $stat = preg_replace( - "/(=>)/", - '$1', - $stat, - ); - $stat = - '
' . - $stat . - ""; + } - ob_end_clean(); + $AVE_Template->assign("edit", $_edit); + $AVE_Template->assign("session", session_id()); - return $stat; - } + $return = $AVE_Template->fetch(BASE_DIR . "/lib/debug/debug.tpl"); - public static function getDocumentInfo() - { - global $AVE_Template; + return $return; + } - $_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=", - ]; + /** + * Вывод отладочной информации + * Поддерживает режимы: off, full, tpl + * @param string|null $force_mode Принудительный режим + * @return string + */ + public static function displayInfo($force_mode = null): string + { + global $AVE_DB; - // ИСПРАВЛЕНИЕ : Безопасно получаем 'id' из $_REQUEST - $doc = get_document($_REQUEST["id"] ?? ""); + // 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"; + } - $_edit = []; + // 2. ЕСЛИ ВЫКЛЮЧЕНО + if ($mode === "off" || $mode === false || $mode === "0") { + return ""; + } - // ИСПРАВЛЕНИЕ : Проверяем, что $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"]; - } + // РЕЖИМ ТОЛЬКО ШАБЛОН + if ($mode === "tpl") { + $id = 'stats_plate_' . uniqid(); + return ' +