Page MenuHomeIn-Portal Phabricator

D225.diff
No OneTemporary

File Metadata

Created
Mon, Jan 6, 7:02 AM

D225.diff

Index: branches/5.2.x/core/kernel/application.php
===================================================================
--- branches/5.2.x/core/kernel/application.php
+++ branches/5.2.x/core/kernel/application.php
@@ -1078,17 +1078,26 @@
}
/**
- * Only renders template
+ * Replaces current rendered template with given one.
*
- * @see kDBEventHandler::_errorNotFound()
+ * @param string|null $template Template.
+ *
+ * @return void
*/
- public function QuickRun()
+ public function QuickRun($template)
{
- // Replace current page content with 404.
- $this->InitParser();
+ /** @var kThemesHelper $themes_helper */
+ $themes_helper = $this->recallObject('ThemesHelper');
+ // Set Web Request variables to affect link building on template itself.
+ $this->SetVar('t', $template);
+ $this->SetVar('m_cat_id', $themes_helper->getPageByTemplate($template));
+ $this->SetVar('passed', 'm');
+
+ // Replace current page content with given template.
+ $this->InitParser();
$this->Parser->Clear();
- $this->HTML = $this->Parser->Run($this->GetVar('t'));
+ $this->HTML = $this->Parser->Run($template);
}
/**
Index: branches/5.2.x/core/kernel/managers/rewrite_url_processor.php
===================================================================
--- branches/5.2.x/core/kernel/managers/rewrite_url_processor.php
+++ branches/5.2.x/core/kernel/managers/rewrite_url_processor.php
@@ -152,6 +152,9 @@
// don't cache 404 Not Found
$this->_setCachedUrl($url, Array ('vars' => $vars, 'passed' => $passed));
}
+ else {
+ header('HTTP/1.0 404 Not Found');
+ }
if ( $this->Application->GetVarDirect('t', 'Post') ) {
// template from POST overrides template from URL.
@@ -445,7 +448,13 @@
}
if ( $this->_partsToParse ) {
- $vars = array_merge($vars, $this->manager->prepare404($vars['m_theme']));
+ /** @var kThemesHelper $themes_helper */
+ $themes_helper = $this->Application->recallObject('ThemesHelper');
+
+ $not_found = $this->Application->ConfigValue('ErrorTemplate');
+ $vars['t'] = $not_found ? $not_found : 'error_notfound';
+ $vars['m_cat_id'] = $themes_helper->getPageByTemplate($vars['t'], $vars['m_theme']);
+ $vars['pass'] = array('m');
}
return $vars;
@@ -1078,4 +1087,4 @@
return $ret;
}
-}
\ No newline at end of file
+}
Index: branches/5.2.x/core/kernel/managers/url_manager.php
===================================================================
--- branches/5.2.x/core/kernel/managers/url_manager.php
+++ branches/5.2.x/core/kernel/managers/url_manager.php
@@ -452,31 +452,6 @@
}
/**
- * Prepares case, when requested page wasn't found
- *
- * @param int $theme_id
- * @return array
- */
- public function prepare404($theme_id = null)
- {
- if ( !isset($theme_id) ) {
- $theme_id = $this->Application->GetVar('m_theme');
- }
-
- $not_found = $this->Application->ConfigValue('ErrorTemplate');
- $vars['t'] = $not_found ? $not_found : 'error_notfound';
-
- $themes_helper = $this->Application->recallObject('ThemesHelper');
- /* @var $themes_helper kThemesHelper */
-
- $vars['m_cat_id'] = $themes_helper->getPageByTemplate($vars['t'], $theme_id);
-
- header('HTTP/1.0 404 Not Found');
-
- return $vars;
- }
-
- /**
* Show 404 page and exit
*
* @return void
@@ -484,15 +459,13 @@
*/
public function show404()
{
- $vars = $this->prepare404();
+ header('HTTP/1.0 404 Not Found');
- foreach ($vars as $var_name => $var_value) {
- $this->Application->SetVar($var_name, $var_value);
- }
+ $not_found = $this->Application->ConfigValue('ErrorTemplate');
+ $template = $not_found ? $not_found : 'error_notfound';
- // ensure parser is available (e.g. 404 page requested from event)
- $this->Application->QuickRun();
+ $this->Application->QuickRun($template);
$this->Application->Done();
exit;
}
-}
\ No newline at end of file
+}
Index: branches/5.2.x/core/kernel/nparser/nparser.php
===================================================================
--- branches/5.2.x/core/kernel/nparser/nparser.php
+++ branches/5.2.x/core/kernel/nparser/nparser.php
@@ -142,8 +142,12 @@
function Clear()
{
- // Discard any half-parsed content.
- ob_clean();
+ // Discard any half-parsed content (e.g. from nested RenderElements).
+ $keep_buffering_levels = kUtil::constOn('SKIP_OUT_COMPRESSION') ? 1 : 2;
+
+ while ( ob_get_level() > $keep_buffering_levels ) {
+ ob_end_clean();
+ }
$this->Stack = array();
$this->Level = 0;
Index: branches/5.2.x/core/units/categories/categories_event_handler.php
===================================================================
--- branches/5.2.x/core/units/categories/categories_event_handler.php
+++ branches/5.2.x/core/units/categories/categories_event_handler.php
@@ -1766,17 +1766,7 @@
}
}
else {
- $not_found = $this->Application->ConfigValue('ErrorTemplate');
- $real_t = $not_found ? $not_found : 'error_notfound';
-
- $themes_helper = $this->Application->recallObject('ThemesHelper');
- /* @var $themes_helper kThemesHelper */
-
- $theme_id = $this->Application->GetVar('m_theme');
- $category_id = $themes_helper->getPageByTemplate($real_t, $theme_id);
- $this->Application->SetVar('m_cat_id', $category_id);
-
- header('HTTP/1.0 404 Not Found');
+ $this->Application->UrlManager->show404();
}
// replace alias in form #alias_name# to actual template used in this theme

Event Timeline