Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Pub/Controller/Page.php
<?php

namespace XF\Pub\Controller;

use
XF\Mvc\ParameterBag;

use function
call_user_func_array;

class
Page extends AbstractController
{
    public function
actionIndex(ParameterBag $params)
    {
       
$page = $this->assertViewablePage($params->node_name);
       
$pageRepo = $this->getPageRepo();
       
$nodeRepo = $this->getNodeRepo();

       
$this->assertCanonicalUrl($this->buildLink('pages', $page));

        if (
$page->log_visits)
        {
           
$pageRepo->logView($page, \XF::visitor());
        }

       
$siblings = $page->list_siblings ? $nodeRepo->findSiblings($page->Node)->fetch() : null;
       
$children = $page->list_children ? $nodeRepo->findChildren($page->Node)->fetch() : null;

       
$testNodes = $this->em()->getEmptyCollection();
        if (
$siblings)
        {
           
$testNodes = $testNodes->merge($siblings);
        }
        if (
$children)
        {
           
$testNodes = $testNodes->merge($children);
        }
        if (
$testNodes->count())
        {
           
$nodeRepo->loadNodeTypeDataForNodes($testNodes);
        }
        if (
$siblings)
        {
           
$siblings = $nodeRepo->filterViewable($siblings);
        }
        if (
$children)
        {
           
$children = $nodeRepo->filterViewable($children);
        }

       
$viewParams = [
           
'page' => $page,
           
'parent' => $page->Node->Parent,
           
'siblings' => $siblings,
           
'children' => $children
       
];
       
$reply = $this->view('XF:Page\View', 'page_view', $viewParams);

        if (
$page->callback_class && $page->callback_method)
        {
           
call_user_func_array([$page->callback_class, $page->callback_method], [$this, &$reply]);
        }

        return
$reply;
    }

    public function
actionBookmark(ParameterBag $params)
    {
       
$page = $this->assertViewablePage($params->node_name);
       
$node = $page->Node;

       
/** @var \XF\ControllerPlugin\Bookmark $bookmarkPlugin */
       
$bookmarkPlugin = $this->plugin('XF:Bookmark');

        return
$bookmarkPlugin->actionBookmark(
           
$node, $this->buildLink('pages/bookmark', $node)
        );
    }

   
/**
     * @param string $nodeName
     * @param array $extraWith
     *
     * @return \XF\Entity\Page
     *
     * @throws \XF\Mvc\Reply\Exception
     */
   
protected function assertViewablePage($nodeName, array $extraWith = [])
    {
       
$visitor = \XF::visitor();
       
$extraWith[] = 'Node.Permissions|' . $visitor->permission_combination_id;

       
$finder = $this->em()->getFinder('XF:Page')
            ->
with('Node', true)
            ->
with('Node.Parent')
            ->
with($extraWith)
            ->
where([
               
'Node.node_name' => $nodeName,
               
'Node.node_type_id' => 'Page'
           
]);

       
/** @var \XF\Entity\Page $page */
       
$page = $finder->fetchOne();
        if (!
$page)
        {
            throw
$this->exception($this->notFound(\XF::phrase('requested_page_not_found')));
        }
        if (!
$page->canView($error))
        {
            throw
$this->exception($this->noPermission($error));
        }

       
$this->plugin('XF:Node')->applyNodeContext($page->Node);

        return
$page;
    }

   
/**
     * @return \XF\Repository\Node
     */
   
protected function getNodeRepo()
    {
        return
$this->repository('XF:Node');
    }

   
/**
     * @return \XF\Repository\Page
     */
   
protected function getPageRepo()
    {
        return
$this->repository('XF:Page');
    }

   
/**
     * @param \XF\Entity\SessionActivity[] $activities
     */
   
public static function getActivityDetails(array $activities)
    {
        return \
XF\ControllerPlugin\Node::getNodeActivityDetails(
           
$activities,
           
'Page',
            \
XF::phrase('viewing_page')
        );
    }

   
// in case these have custom URL which is a page node
   
public function assertPolicyAcceptance($action) {}
}