/** * Renders the view. * * @param XenForo_ControllerResponse_Abstract Controller response object from last controller * @param XenForo_ViewRenderer_Abstract View renderer for specified response type * @param array Extra container params (probably "sections" from routing) * * @return string View output */ public function renderView(XenForo_ControllerResponse_Abstract $controllerResponse, XenForo_ViewRenderer_Abstract $viewRenderer, array $containerParams = array(), $innerContent = "", $newParams = array()) { $this->_dependencies->preRenderView($controllerResponse); $this->_response->setHeader('Last-Modified', gmdate('D, d M Y H:i:s') . ' GMT', true); if ($controllerResponse->responseCode) { $this->_response->setHttpResponseCode($controllerResponse->responseCode); } /* if ($controllerResponse instanceof XenForo_ControllerResponse_Error) { $innerContent = $viewRenderer->renderError($controllerResponse->errorText); } else if ($controllerResponse instanceof XenForo_ControllerResponse_Message) { $innerContent = $viewRenderer->renderMessage($controllerResponse->message); } else if ($controllerResponse instanceof XenForo_ControllerResponse_View) { $innerContent = $viewRenderer->renderView( $controllerResponse->viewName, $controllerResponse->params, $controllerResponse->templateName, $controllerResponse->subView ); } else if ($controllerResponse instanceof XenForo_ControllerResponse_Redirect) { $target = XenForo_Link::convertUriToAbsoluteUri($controllerResponse->redirectTarget); $innerContent = $viewRenderer->renderRedirect( $controllerResponse->redirectType, $target, $controllerResponse->redirectMessage, $controllerResponse->redirectParams ); } else { // generally shouldn't happen $innerContent = false; } if ($innerContent === false || $innerContent === null) { $innerContent = $viewRenderer->renderUnrepresentable(); } */ if ($viewRenderer->getNeedsContainer()) { $specificContainerParams = XenForo_Application::mapMerge($containerParams, $controllerResponse->containerParams); $containerParams = $this->_dependencies->getEffectiveContainerParams($specificContainerParams, $this->_request); return $viewRenderer->renderContainer($innerContent, $containerParams, $newParams); } else { return $innerContent; } }
/** * Intercept a request for a link redirect * * @param string|bool $error If non-false, an error that occurred when validating the request */ protected function _outputLinkRedirect($error) { if ($error === 'invalid_url') { header('Content-Type: text/html; utf-8', true, 500); die('Invalid URL'); } if (empty(XenForo_Application::getOptions()->imageLinkProxy['links'])) { $error = 'disabled'; } if (!$error) { /* @var $proxyModel XenForo_Model_LinkProxy */ $proxyModel = XenForo_Model::create('XenForo_Model_LinkProxy'); $linkId = $proxyModel->logVisit($this->_url); if ($linkId && !empty(XenForo_Application::getOptions()->imageLinkProxyReferrer['enabled']) && $this->_referrer) { $proxyModel->logLinkReferrer($linkId, $this->_referrer); } if ($this->_json) { header('Content-type: application/json; charset=UTF-8'); echo json_encode(array('logged' => true)); exit; } // this used to redirect, but we don't take this approach any longer, so we display an intersitial } $request = new Zend_Controller_Request_Http(); XenForo_Session::startPublicSession($request); $this->_dependencies->preRenderView(); if (!preg_match('#^https?://#i', $this->_url)) { throw new Exception('Unsafe proxy URL: ' . $this->_url); } $printable = urldecode($this->_url); if (!preg_match('/./u', $printable)) { $printable = $this->_url; } $renderer = new XenForo_ViewRenderer_HtmlPublic($this->_dependencies, $this->_response, $request); $contents = $renderer->createTemplateObject('link_redirect', array('url' => $this->_url, 'printable' => $printable, 'parts' => parse_url($this->_url))); $containerParams = $this->_dependencies->getEffectiveContainerParams(array(), $request); $output = $renderer->renderContainer($contents, $containerParams); $extraHeaders = XenForo_Application::gzipContentIfSupported($output); foreach ($extraHeaders as $extraHeader) { $this->_response->setHeader($extraHeader[0], $extraHeader[1], $extraHeader[2]); } $this->_response->setHeader('X-Proxy-Error', $error); $this->_response->sendHeaders(); echo $output; }
/** * Performs any pre-view rendering setup, such as getting style information and * ensuring the correct data is registered. * * @param XenForo_ControllerResponse_Abstract|null $controllerResponse */ public function preRenderView(XenForo_ControllerResponse_Abstract $controllerResponse = null) { parent::preRenderView($controllerResponse); XenForo_Template_Abstract::setLanguageId(XenForo_Phrase::getLanguageId()); $properties = XenForo_Application::get('adminStyleProperties'); XenForo_Template_Helper_Core::setStyleProperties($properties); $this->_defaultTemplateParams['_styleModifiedDate'] = XenForo_Application::get('adminStyleModifiedDate'); }
/** * Performs any pre-view rendering setup, such as getting style information and * ensuring the correct data is registered. * * @param XenForo_ControllerResponse_Abstract|null $controllerResponse */ public function preRenderView(XenForo_ControllerResponse_Abstract $controllerResponse = null) { parent::preRenderView($controllerResponse); if (!empty($this->_viewStateChanges['styleId'])) { $styleId = $this->_viewStateChanges['styleId']; $forceStyleId = true; } else { $user = XenForo_Visitor::getInstance(); $styleId = !empty($user['style_id']) ? $user['style_id'] : 0; $forceStyleId = $user['is_admin'] ? true : false; } XenForo_Template_Abstract::setLanguageId(XenForo_Phrase::getLanguageId()); $styles = XenForo_Application::isRegistered('styles') ? XenForo_Application::get('styles') : XenForo_Model::create('XenForo_Model_Style')->getAllStyles(); if ($styleId && isset($styles[$styleId]) && ($styles[$styleId]['user_selectable'] || $forceStyleId)) { $style = $styles[$styleId]; } else { $defaultStyleId = XenForo_Application::get('options')->defaultStyleId; $style = isset($styles[$defaultStyleId]) ? $styles[$defaultStyleId] : reset($styles); } $defaultProperties = XenForo_Application::get('defaultStyleProperties'); if ($style) { $properties = XenForo_Helper_Php::safeUnserialize($style['properties']); XenForo_Template_Helper_Core::setStyleProperties(XenForo_Application::mapMerge($defaultProperties, $properties)); XenForo_Template_Public::setStyleId($style['style_id']); } else { XenForo_Template_Helper_Core::setStyleProperties($defaultProperties); } // setup the default template params if ($style) { $this->_defaultTemplateParams['visitorStyle'] = $style; } // expose the user fields info array $this->_defaultTemplateParams['userFieldsInfo'] = XenForo_Application::get('userFieldsInfo'); }