Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Admin/Controller/ThreadPrefix.php
<?php

namespace XF\Admin\Controller;

use
XF\Mvc\Entity\ArrayCollection;
use
XF\Mvc\ParameterBag;
use
XF\Mvc\FormAction;

class
ThreadPrefix extends AbstractPrefix
{
    protected function
preDispatchController($action, ParameterBag $params)
    {
       
$this->assertAdminPermission('thread');
    }

    protected function
getClassIdentifier()
    {
        return
'XF:ThreadPrefix';
    }

    protected function
getLinkPrefix()
    {
        return
'thread-prefixes';
    }

    protected function
getTemplatePrefix()
    {
        return
'thread_prefix';
    }

    protected function
getNodeParams(\XF\Entity\ThreadPrefix $prefix)
    {
       
/** @var \XF\Repository\Node $nodeRepo */
       
$nodeRepo = \XF::repository('XF:Node');
       
$nodeTree = $nodeRepo->createNodeTree($nodeRepo->getFullNodeList());

       
// only list nodes that are forums or contain forums
       
$nodeTree = $nodeTree->filter(null, function($id, $node, $depth, $children, $tree)
        {
            return (
$children || $node->node_type_id == 'Forum');
        });

       
/** @var \XF\Mvc\Entity\ArrayCollection $forumPrefixAssociations */
       
$forumPrefixAssociations = $prefix->getRelationOrDefault('ForumPrefixes', false);

        return [
           
'nodeTree' => $nodeTree,
           
'nodeIds' => $forumPrefixAssociations->pluckNamed('node_id')
        ];
    }

    protected function
prefixAddEditResponse(\XF\Entity\AbstractPrefix $prefix)
    {
       
$reply = parent::prefixAddEditResponse($prefix);

        if (
$reply instanceof \XF\Mvc\Reply\View)
        {
           
$nodeParams = $this->getNodeParams($prefix);
           
$reply->setParams($nodeParams);
        }

        return
$reply;
    }

    protected function
quickSetAdditionalData(FormAction $form, ArrayCollection $prefixes)
    {
       
$input = $this->filter([
           
'apply_node_ids' => 'bool',
           
'node_ids' => 'array-uint'
       
]);

        if (
$input['apply_node_ids'])
        {
           
$form->complete(function() use($prefixes, $input)
            {
               
$mapRepo = $this->getForumPrefixRepo();

                foreach (
$prefixes AS $prefix)
                {
                   
$mapRepo->updatePrefixAssociations($prefix, $input['node_ids']);
                }
            });
        }

        return
$form;
    }

    public function
actionQuickSet()
    {
       
$reply = parent::actionQuickSet();

        if (
$reply instanceof \XF\Mvc\Reply\View)
        {
            if (
$reply->getTemplateName() == $this->getTemplatePrefix() . '_quickset_editor')
            {
               
$nodeParams = $this->getNodeParams($reply->getParam('prefix'));
               
$reply->setParams($nodeParams);
            }
        }

        return
$reply;
    }

    protected function
saveAdditionalData(FormAction $form, \XF\Entity\AbstractPrefix $prefix)
    {
       
$nodeIds = $this->filter('node_ids', 'array-uint');

       
$form->complete(function() use($prefix, $nodeIds)
        {
           
$this->getForumPrefixRepo()->updatePrefixAssociations($prefix, $nodeIds);
        });

        return
$form;
    }

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