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

class XenForo_ControllerPublic_Page extends XenForo_ControllerPublic_Abstract
{
    public function 
actionIndex()
    {
        
$nodeName $this->_input->filterSingle('node_name'XenForo_Input::STRING);
        
$page $this->_getPageOrError($nodeName);

        
$this->_canonicalizeRequestUrl($page);

        
$pageModel $this->_getPageModel();
        
$nodeModel $this->_getNodeModel();

        if (
$page['log_visits'])
        {
            
$pageModel->logVisit($pageXenForo_Visitor::getInstance()->toArray(), XenForo_Application::$time);

            
$page['view_count']++;
        }

        
$nodeBreadCrumbs $this->_getNodeModel()->getNodeBreadCrumbs($pagefalse);

        
$viewParams = array(
            
'page' => $page,
            
'templateTitle' => $pageModel->getTemplateTitle($page),
            
'nodeBreadCrumbs' => $nodeBreadCrumbs,

            
'listSiblingNodes' => $page['list_siblings'],
            
'siblingNodes' => $pageModel->getSiblingNodes($page),

            
'listChildNodes' => $page['list_children'],
            
'childNodes' => $pageModel->getChildNodes($page),

            
'parentNode' => (isset($nodeBreadCrumbs[$page['parent_node_id']]) ? $nodeBreadCrumbs[$page['parent_node_id']] : null),
        );

        
$response $this->responseView(
            
'XenForo_ViewPublic_Page_View',
            
'pagenode_container',
            
$viewParams
        
);

        if (!empty(
$page['callback_class']) && !empty($page['callback_method']))
        {
            
call_user_func_array(array($page['callback_class'], $page['callback_method']), array($this, &$response));
        }

        return 
$response;
    }

    
/**
     * Session activity details.
     * @see XenForo_Controller::getSessionActivityDetailsForList()
     */
    
public static function getSessionActivityDetailsForList(array $activities)
    {
        
$pageNames = array();
        foreach (
$activities AS $activity)
        {
            if (!empty(
$activity['params']['node_name']))
            {
                
$pageNames[$activity['params']['node_name']] = $activity['params']['node_name'];
            }
        }

        
$pageData = array();

        if (
$pageNames)
        {
            
/* @var $pageModel XenForo_Model_Page */
            
$pageModel XenForo_Model::create('XenForo_Model_Page');

            
$visitor XenForo_Visitor::getInstance();
            
$permissionCombinationId $visitor['permission_combination_id'];

            
$pages $pageModel->getPagesByNames($pageNames, array(
                
'permissionCombinationId' => $permissionCombinationId
            
));
            foreach (
$pages AS $page)
            {
                
$visitor->setNodePermissions($page['node_id'], $page['node_permission_cache']);
                if (
$pageModel->canViewPage($page))
                {
                    
$pageData[$page['node_name']] = array(
                        
'title' => $page['title'],
                        
'url' => XenForo_Link::buildPublicLink('pages'$page)
                    );
                }
            }
        }

        
$output = array();
        foreach (
$activities AS $key => $activity)
        {
            
$page false;
            if (!empty(
$activity['params']['node_name']))
            {
                
$pageName $activity['params']['node_name'];
                if (isset(
$pageData[$pageName]))
                {
                    
$page $pageData[$pageName];
                }
            }

            if (
$page)
            {
                
$output[$key] = array(
                    new 
XenForo_Phrase('viewing_page'),
                    
$page['title'],
                    
$page['url'],
                    
false
                
);
            }
            else
            {
                
$output[$key] = new XenForo_Phrase('viewing_page');
            }
        }

        return 
$output;
    }

    
/**
     * Returns a controller response with the template name corresponding to the page node_name
     *
     * @param XenForo_ControllerPublic_Abstract $controller
     * @param XenForo_ControllerResponse_Abstract $response
     */
    
public static function getCustomTemplate(XenForo_ControllerPublic_Abstract $controllerXenForo_ControllerResponse_Abstract $response)
    {
        
$response->templateName $controller->_input->filterSingle('node_name'XenForo_Input::STRING);
    }

    
/**
     * Gets the specified page or throws an error.
     *
     * @param string $nodeName
     *
     * @return array
     */
    
protected function _getPageOrError($nodeName)
    {
        
$visitor XenForo_Visitor::getInstance();
        
$fetchOptions = array('permissionCombinationId' => $visitor['permission_combination_id']);

        
$page $this->_getPageModel()->getPageByName($nodeName$fetchOptions);
        if (!
$page || $page['node_type_id'] != 'Page')
        {
            throw 
$this->responseException($this->responseError(new XenForo_Phrase('requested_page_not_found'), 404));
        }

        if (isset(
$page['node_permission_cache']))
        {
            
$visitor->setNodePermissions($page['node_id'], $page['node_permission_cache']);
            unset(
$page['node_permission_cache']);
        }

        if (!
$this->_getPageModel()->canViewPage($page$errorPhraseKey))
        {
            throw 
$this->getErrorOrNoPermissionResponseException($errorPhraseKey);
        }

        if (
$page['effective_style_id'])
        {
            
$this->setViewStateChange('styleId'$page['effective_style_id']);
        }

        return 
$page;
    }

    
/**
     * Force a redirect if we are not in the right place
     *
     * @param array $page
     */
    
protected function _canonicalizeRequestUrl(array $page)
    {
        
$this->canonicalizeRequestUrl(
            
XenForo_Link::buildPublicLink('pages'$page)
        );
    }

    
/**
     * @return XenForo_Model_Page
     */
    
protected function _getPageModel()
    {
        return 
$this->getModelFromCache('XenForo_Model_Page');
    }

    
/**
     * @return XenForo_Model_Node
     */
    
protected function _getNodeModel()
    {
        return 
$this->getModelFromCache('XenForo_Model_Node');
    }
}
Онлайн: 0
Реклама