/**
  * 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;
 }
Exemple #3
0
 /**
  * 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');
 }
Exemple #4
0
 /**
  * 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');
 }