Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/ControllerPlugin/Node.php
<?php

namespace XF\ControllerPlugin;

class
Node extends AbstractPlugin
{
    public function
applyNodeContext(\XF\Entity\Node $node)
    {
       
$this->controller->setContainerKey('node-' . $node->node_id);

        if (
$node->effective_style_id)
        {
           
$this->controller->setViewOption('style_id', $node->effective_style_id);
        }
        if (
$node->effective_navigation_id)
        {
           
$this->controller->setSectionContext($node->effective_navigation_id);
        }
    }

    public static function
getNodeActivityDetails(
        array
$activities, $nodeTypeId, $phrase, \Closure $fallbackHandler = null
   
)
    {
       
$nodeIds = [];
       
$nodeNames = [];
       
$nodeData = [];

       
$nodeTypes = \XF::app()->container('nodeTypes');
        if (!isset(
$nodeTypes[$nodeTypeId]))
        {
            return
$phrase;
        }

       
$nodeType = $nodeTypes[$nodeTypeId];
       
$entityType = $nodeType['entity_identifier'];
       
$routeName = $nodeType['public_route'];
       
$router = \XF::app()->router('public');

        foreach (
$activities AS $activity)
        {
           
$nodeId = $activity->pluckParam('node_id');
            if (
$nodeId)
            {
               
$nodeIds[$nodeId] = $nodeId;
                continue;
            }
           
$nodeName = $activity->pluckParam('node_name');
            if (
$nodeName)
            {
               
$nodeNames[$nodeName] = $nodeName;
            }
        }

       
$with = ['Node', 'Node.Permissions|' . \XF::visitor()->permission_combination_id];

        if (
$nodeNames)
        {
           
$nodes = \XF::finder($entityType)
                ->
where('Node.node_name', $nodeNames)
                ->
with($with)
                ->
fetch()
                ->
filterViewable();

            foreach (
$nodes AS $nodeId => $node)
            {
               
$nodeData[$node->node_name] = [
                   
'title' => $node->title,
                   
'url' => $router->buildLink($routeName, $node)
                ];
            }
        }

        if (
$nodeIds)
        {
           
$nodes = \XF::em()
                ->
findByIds($entityType, $nodeIds, $with)
                ->
filterViewable();

            foreach (
$nodes AS $nodeId => $node)
            {
               
$nodeData[$nodeId] = [
                   
'title' => $node->title,
                   
'url' => $router->buildLink($routeName, $node)
                ];
            }
        }

       
$output = [];

        foreach (
$activities AS $key => $activity)
        {
           
$nodeId = $activity->pluckParam('node_id');
           
$node = $nodeId && isset($nodeData[$nodeId]) ? $nodeData[$nodeId] : null;
            if (
$node)
            {
               
$output[$key] = [
                   
'description' => $phrase,
                   
'title' => $node['title'],
                   
'url' => $node['url']
                ];
                continue;
            }

           
$nodeName = $activity->pluckParam('node_name');
           
$node = $nodeName && isset($nodeData[$nodeName]) ? $nodeData[$nodeName] : null;
            if (
$node)
            {
               
$output[$key] = [
                   
'description' => $phrase,
                   
'title' => $node['title'],
                   
'url' => $node['url']
                ];
                continue;
            }

            if (
$fallbackHandler)
            {
               
$output[$key] = $fallbackHandler($activity, $nodeId, $nodeName);
            }
            else
            {
               
$output[$key] = $phrase;
            }
        }

        return
$output;
    }
}