Index: branches/unlabeled/unlabeled-1.1.2/kernel/admin_templates/advanced_view.tpl =================================================================== diff -u -r5751 -r5763 --- branches/unlabeled/unlabeled-1.1.2/kernel/admin_templates/advanced_view.tpl (.../advanced_view.tpl) (revision 5751) +++ branches/unlabeled/unlabeled-1.1.2/kernel/admin_templates/advanced_view.tpl (.../advanced_view.tpl) (revision 5763) @@ -66,7 +66,7 @@ function edit() { $form_name = $Catalog.queryTabRegistry('prefix', $Catalog.ActivePrefix, 'tab_id') + '_form'; - set_hidden_field('remove_specials[' + $Catalog.ActivePrefix + '.showall]', 1); + set_hidden_field('remove_specials[' + $Catalog.ActivePrefix + ']', 1); std_edit_item($Catalog.ActivePrefix, $Catalog.queryTabRegistry('prefix', $Catalog.ActivePrefix, 'edit_template')); } Index: branches/unlabeled/unlabeled-1.155.2/core/kernel/application.php =================================================================== diff -u -r5762 -r5763 --- branches/unlabeled/unlabeled-1.155.2/core/kernel/application.php (.../application.php) (revision 5762) +++ branches/unlabeled/unlabeled-1.155.2/core/kernel/application.php (.../application.php) (revision 5763) @@ -236,14 +236,6 @@ $admin_on = getArrayValue($_REQUEST, 'admin') || $this->IsAdmin(); define('MOD_REWRITE', $rewrite_on && !$admin_on ? 1 : 0); - if ($this->UseOutputCompression()) { - header('Content-Encoding: gzip'); - safeDefine('DBG_COMPRESS_OUTPUT', 1); - $level = $this->ConfigValue('OutputCompressionLevel'); - if ($level < 0 || $level > 9) $level = 7; - safeDefine('DBG_COMPRESSION_LEVEL', $level); - } - $this->HttpQuery =& $this->recallObject('HTTPQuery'); $this->Session =& $this->recallObject('Session'); @@ -694,13 +686,26 @@ } //eval("?".">".$this->HTML); - - $this->HTML = ob_get_clean().$this->HTML; + if ($this->isDebugMode()) { - $this->HTML .= $this->Debugger->printReport(true); + $this->EventManager->RunRegularEvents(reAFTER); + $this->Session->SaveData(); + + $this->HTML = ob_get_clean() . $this->HTML . $this->Debugger->printReport(true); } + else { + $this->HTML = ob_get_clean().$this->HTML; + } - echo $this->UseOutputCompression() ? gzencode($this->HTML, DBG_COMPRESSION_LEVEL) : $this->HTML; + if ($this->UseOutputCompression()) { + header('Content-Encoding: gzip'); + $compression_level = $this->ConfigValue('OutputCompressionLevel'); + if ($compression_level < 0 || $compression_level > 9) $compression_level = 7; + echo gzencode($this->HTML, $compression_level); + } + else { + echo $this->HTML; + } $this->UpdateCache(); @@ -726,15 +731,6 @@ return $this->ConfigValue('UseOutputCompression') && function_exists('gzencode') && strstr($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip'); } - function SaveBlocksCache() - { - /*if (constOn('EXPERIMENTAL_PRE_PARSE')) { - $data = serialize($this->PreParsedCache); - - $this->Conn->Query('REPLACE '.TABLE_PREFIX.'Cache (VarName, Data, Cached) VALUES ("blocks_cache", '.$this->Conn->qstr($data).', '.adodb_mktime().')'); - }*/ - } - // Facade /** @@ -1444,13 +1440,9 @@ } } } - - $buffer_content = ob_get_clean(); - echo $this->UseOutputCompression() ? gzencode($buffer_content, DBG_COMPRESSION_LEVEL) : $buffer_content; - - $session =& $this->recallObject('Session'); - $session->SaveData(); - $this->SaveBlocksCache(); + + ob_end_flush(); + $this->Session->SaveData(); exit; } Index: branches/unlabeled/unlabeled-1.1.2/core/admin_templates/catalog/advanced_view.tpl =================================================================== diff -u -r5751 -r5763 --- branches/unlabeled/unlabeled-1.1.2/core/admin_templates/catalog/advanced_view.tpl (.../advanced_view.tpl) (revision 5751) +++ branches/unlabeled/unlabeled-1.1.2/core/admin_templates/catalog/advanced_view.tpl (.../advanced_view.tpl) (revision 5763) @@ -66,7 +66,7 @@ function edit() { $form_name = $Catalog.queryTabRegistry('prefix', $Catalog.ActivePrefix, 'tab_id') + '_form'; - set_hidden_field('remove_specials[' + $Catalog.ActivePrefix + '.showall]', 1); + set_hidden_field('remove_specials[' + $Catalog.ActivePrefix + ']', 1); std_edit_item($Catalog.ActivePrefix, $Catalog.queryTabRegistry('prefix', $Catalog.ActivePrefix, 'edit_template')); } Index: branches/unlabeled/unlabeled-1.59.2/core/kernel/utility/debugger.php =================================================================== diff -u -r5735 -r5763 --- branches/unlabeled/unlabeled-1.59.2/core/kernel/utility/debugger.php (.../debugger.php) (revision 5735) +++ branches/unlabeled/unlabeled-1.59.2/core/kernel/utility/debugger.php (.../debugger.php) (revision 5763) @@ -190,7 +190,7 @@ break; case 'var_dump': - return $this->highlightString( print_r($Data['value'], true) ); + return $this->highlightString( $this->print_r($Data['value'], true) ); break; case 'trace': @@ -219,7 +219,7 @@ // ensure parameter value is not longer then 200 symbols if ($has_args) { $this->processTraceArguments($traceRec['args']); - $args = $this->highlightString(print_r($traceRec['args'], true)); + $args = $this->highlightString($this->print_r($traceRec['args'], true)); $ret .= ''; } $i++; @@ -290,8 +290,126 @@ return false; } + function processTraceObject(&$object) + { + $attribute_names = get_class_vars( get_class($object) ); + if (!$attribute_names) return 'NO_ATTRIBUTES'; + + // $attribute_value - default value for this attribute, not used here + foreach ($attribute_names as $attribute_name => $attribute_value) { + if (is_object($object->$attribute_name)) { + // it is object + $object_class = get_class($object->$attribute_name); + if (!in_array($object_class, $this->RecursionStack)) { + // object [not in recursion stack] + if ($this->IsBigObject($object->$attribute_name)) { + continue; + } + + array_push($this->RecursionStack, $object_class); + $this->processTraceObject($object->$attribute_name); + array_pop($this->RecursionStack); + } + else { + // object [in recursion stack] + $object->$attribute_name = '**** RECURSION ***'; + } + } + elseif (is_array($object->$attribute_name)) { + // it is array + $this->processTraceArguments($object->$attribute_name); + } + else { + $object->$attribute_name = $this->cutStringForHTML($object->$attribute_name); + } + } + } + function processTraceArguments(&$traceArgs) { + if (!$traceArgs) return 'EMPTY_ARRAY'; + $array_keys = array_keys($traceArgs); + foreach ($array_keys as $arg_id) { + $arg_value =& $traceArgs[$arg_id]; + + if (is_object($arg_value)) { + $this->processTraceObject($arg_value); + } + elseif (is_array($arg_value)) { + $this->processTraceArguments($arg_value); + } + else { + $traceArgs[$arg_id] = $this->cutStringForHTML($arg_value); + } + } + } + + function print_r(&$array, $return_output = false) + { + static $first_line = true, $tab_count = -1; + + if (!is_array($array)) return $array; + + $output = ''; + + $tab_count++; + $output .= "Array\n".str_repeat(' ', $tab_count)."(\n"; + + $tab_count++; + $tabsign = $tab_count ? str_repeat(' ', $tab_count) : ''; + + $array_keys = array_keys($array); + + foreach ($array_keys as $key) { + $value =& $array[$key]; + switch (gettype($value)) { + case 'array': + $output .= $tabsign.'['.$key.'] = '; + $output .= $this->print_r($value); + break; + + case 'boolean': + $output .= $tabsign.'['.$key.'] = '.($value ? 'true' : 'false')."\n"; + break; + + case 'integer': + $output .= $tabsign.'['.$key.'] = '.$value."\n"; + break; + + case 'double': + $output .= $tabsign.'['.$key.'] = '.$value."\n"; + break; + + case 'string': + $output .= $tabsign.'['.$key.'] = '.$value."\n"; + break; + + /*case 'object': + if (!$this->IsBigObject($value)) { + $output .= $this->print_r($value); + } + break;*/ + + default: + $output .= $tabsign.'['.$key.'] unknown = '.gettype($value)."\n"; + break; + } + } + + $tab_count--; + $output .= str_repeat(' ', $tab_count).")\n"; + + if ($first_line) { + $first_line = false; + $output .= "\n"; + } + + $tab_count--; + return $output; + } + + /*function processTraceArguments(&$traceArgs) + { if (!$traceArgs) return ''; $array_keys = array_keys($traceArgs); @@ -325,7 +443,7 @@ $traceArgs[$argID] = $this->cutStringForHTML($traceArgs[$argID]); } } - } + }*/ /** * Returns only first 200 chars of string, this allow to save amount of data sent to browser @@ -517,7 +635,7 @@ $value = 'no value'; } else { - $value = htmlspecialchars(print_r($value, true)); + $value = htmlspecialchars($this->print_r($value, true)); } $in_cookie = isset($_COOKIE[$key]); @@ -881,25 +999,22 @@ if (substr($errorType, 0, 5) == 'Fatal') { $this->IsFatalError = true; // append debugger report to data in buffer & clean buffer afterwards - $buffer_content = $this->breakOutofBuffering(false) . $this->printReport(true); - echo $this->constOn('DBG_COMPRESS_OUTPUT') ? gzencode($buffer_content, DBG_COMPRESSION_LEVEL) : $buffer_content; - exit; + die( $this->breakOutofBuffering(false) . $this->printReport(true) ); } } function breakOutofBuffering($flush = true) { $buffer_content = Array(); while (ob_get_level()) { - if ($flush) { - ob_end_flush(); - } - else { - $buffer_content[] = ob_get_clean(); -// ob_end_clean(); - } + $buffer_content[] = ob_get_clean(); } - return implode('', array_reverse($buffer_content)); + $ret = implode('', array_reverse($buffer_content)); + if ($flush) { + echo $ret; + flush(); + } + return $ret; } function saveToFile($msg)