Вход Регистрация
Файл: library/XenForo/ViewRenderer/HtmlPublic.php
Строк: 303
<?php

/**
* Concrete renderer for HTML output.
*
* @package XenForo_Mvc
*/
class XenForo_ViewRenderer_HtmlPublic extends XenForo_ViewRenderer_Abstract
{
    protected 
$_contentTemplate '';

    
/**
     * Constructor
     * @see XenForo_ViewRenderer_Abstract::__construct()
     */
    
public function __construct(XenForo_Dependencies_Abstract $dependenciesZend_Controller_Response_Http $responseZend_Controller_Request_Http $request)
    {
        
parent::__construct($dependencies$response$request);
        
$this->_response->setHeader('Content-Type''text/html; charset=UTF-8'true);
    }

    
/**
    * Renders an error.
    * @see XenForo_ViewRenderer_Abstract::renderError()
    *
    * @param string|array $error
    *
    * @return string|false
    */
    
public function renderError($error)
    {
        if (!
is_array($error))
        {
            
$error = array($error);
        }

        
$this->_contentTemplate 'error';

        return 
$this->createTemplateObject('error', array('error' => $error));
    }

    
/**
     * Renders a message.
     *
     * @see XenForo_ViewRenderer_Abstract::renderMessage()
     */
    
public function renderMessage($message)
    {
        
$this->_contentTemplate 'message_page';

        return 
$this->createTemplateObject('message_page', array('message' => $message));
    }

    
/**
    * Renders a view.
    * @see XenForo_ViewRenderer_Abstract::renderView()
    */
    
public function renderView($viewName, array $params = array(), $templateName ''XenForo_ControllerResponse_View $subView null)
    {
        
$this->_contentTemplate $templateName;

        if (
$subView)
        {
            if (
$templateName)
            {
                
$this->preloadTemplate($templateName);
            }
            
$params['_subView'] = $this->renderSubView($subView);
        }

        
$viewOutput $this->renderViewObject($viewName'Html'$params$templateName);
        if (
$viewOutput === null)
        {
            if (!
$templateName)
            {
                return 
false;
            }
            else
            {
                return 
$this->createTemplateObject($templateName$params);
            }
        }
        else
        {
            return 
$viewOutput;
        }
    }

    
/**
    * Renders the container.
    * @see XenForo_ViewRenderer_Abstract::renderContainer()
    *
    * @param string
    * @param array
    *
    * @return string
    */
    
public function renderContainer($contents, array $params = array())
    {
        
$params['contentTemplate'] = $this->_contentTemplate;
        
$params['debugMode'] = XenForo_Application::debugMode();
        
$params['serverTimeInfo'] = XenForo_Locale::getDayStartTimestamps();

        if (!empty(
$params['extraTabs']))
        {
            foreach (
$params['extraTabs'] AS &$group)
            {
                foreach (
$group AS &$extraTab)
                {
                    if (!empty(
$extraTab['linksTemplate']))
                    {
                        
$extraTab['linksTemplate'] = $this->createTemplateObject($extraTab['linksTemplate'], $extraTab $params);
                    }
                }
            }
        }

        
$templateName = (!empty($params['containerTemplate']) ? $params['containerTemplate'] : 'PAGE_CONTAINER');
        
$template $this->createTemplateObject($templateName$params);

        if (
$contents instanceof XenForo_Template_Abstract)
        {
            
$contents $contents->render();
        }

        
$containerData $this->_dependencies->getExtraContainerData();

        
$containerData['notices'] = $this->_getNoticesContainerParams($template$containerData);

        
$template->setParams($containerData);
        
$template->setParam('contents'$contents);
        
$template->setParam('noH1', (isset($containerData['h1']) && $containerData['h1'] === ''));

        if (
$params['debugMode'])
        {
            
$template->setParams(XenForo_Debug::getDebugTemplateParams());
        }

        
$rendered $template->render();

        
$rendered $this->replaceRequiredExternalPlaceholders($template$rendered);

        
$language XenForo_Visitor::getInstance()->getLanguage();
        if (isset(
$language['text_direction']) && $language['text_direction'] == 'RTL')
        {
            
$rendered XenForo_Template_Helper_RightToLeft::replaceRtlEntities($rendered);
        }

        return 
$rendered;
    }

    
/**
    * Data that should be preloaded for the container. Templates/phrases may be
    * accidentally (or intentionally) rendered in the view or before the container
    * is set to be rendered. Preloading data here can allow all the data to be fetched
    * at once.
    */
    
protected function _preloadContainerData()
    {
        
$this->preloadTemplate('page_nav');
    }

    
/**
    * Fallback for rendering an "unrepresentable" message.
    * @see XenForo_ViewRenderer_Abstract::renderUnrepresentable()
    *
    * @return string
    */
    
public function renderUnrepresentable()
    {
        return 
$this->renderError(new XenForo_Phrase('requested_page_is_unrepresentable_in_html'));
    }

    
/**
     * Fetches all notices applicable to the visiting user
     *
     * @param XenForo_Template_Abstract $template
     * @param array $containerData
     *
     * @return array
     */
    
protected function _getNoticesContainerParams(XenForo_Template_Abstract $template, array $containerData)
    {
        
$notices = array();

        foreach (
$this->_dependencies->notices AS $param => $noticeKey)
        {
            if (
$template->getParam($param))
            {
                
$notices[$noticeKey] = array(
                    
'title' => new XenForo_Phrase($noticeKey),
                    
'message' => $template->create($noticeKey$template->getParams()),
                    
'wrap' => true,
                    
'dismissible' => false
                
);
            }
        }

        if (
XenForo_Application::get('options')->enableNotices)
        {
            if (
XenForo_Application::isRegistered('notices'))
            {
                
$user XenForo_Visitor::getInstance()->toArray();

                if (
XenForo_Application::isRegistered('session'))
                {
                    
$dismissedNotices XenForo_Application::getSession()->get('dismissedNotices');
                }

                if (!isset(
$dismissedNotices) || !is_array($dismissedNotices))
                {
                    
$dismissedNotices = array();
                }

                
// handle style overrides
                
$visitorStyle $template->getParam('visitorStyle');
                if (!empty(
$visitorStyle))
                {
                    
$user['style_id'] = $visitorStyle['style_id'];
                }

                
$noticeList XenForo_Application::get('notices');

                foreach (
XenForo_Application::get('notices') AS $noticeId => $notice)
                {
                    if (
in_array($noticeId$dismissedNotices)
                        || !
XenForo_Helper_Criteria::userMatchesCriteria($notice['user_criteria'], true$user)
                        || !
XenForo_Helper_Criteria::pageMatchesCriteria($notice['page_criteria'], true$template->getParams(), $containerData))
                    {
                        unset(
$noticeList[$noticeId]);
                    }
                }

                
$noticeTokens = array(
                    
'{name}' => $user['username'] !== '' $user['username'] : new XenForo_Phrase('guest'),
                    
'{user_id}' => $user['user_id'],
                );

                
XenForo_CodeEvent::fire('notices_prepare', array(&$noticeList, &$noticeTokens$template$containerData));

                foreach (
$noticeList AS $noticeId => $notice)
                {
                    
$notices[$noticeId] = array(
                        
'title' => $notice['title'],
                        
'message' => str_replace(array_keys($noticeTokens), $noticeTokens$notice['message']),
                        
'wrap' => $notice['wrap'],
                        
'dismissible' => ($notice['dismissible'] && XenForo_Visitor::getUserId())
                    );
                }
            }
        }

        return 
$notices;
    }
}
Онлайн: 3
Реклама