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

namespace XF\Pub\Controller;

use
XF\Mvc\ParameterBag;

use function
in_array;

class
ApprovalQueue extends AbstractController
{
    protected function
preDispatchController($action, ParameterBag $params)
    {
        if (!\
XF::visitor()->is_moderator)
        {
            throw
$this->exception($this->noPermission());
        }
    }

    public function
actionIndex()
    {
       
$approvalQueueRepo = $this->getApprovalQueueRepo();

       
$unapprovedFinder = $approvalQueueRepo->findUnapprovedContent();

       
$filters = $this->getQueueFilterInput();
       
$this->applyQueueFilters($unapprovedFinder, $filters);

       
/** @var \XF\Entity\ApprovalQueue[]|\XF\Mvc\Entity\ArrayCollection $unapprovedItems */
       
$unapprovedItems = $unapprovedFinder->fetch();

        if (
$unapprovedItems->count() != $this->app->unapprovedCounts['total'])
        {
           
$approvalQueueRepo->rebuildUnapprovedCounts();
        }

       
$approvalQueueRepo->addContentToUnapprovedItems($unapprovedItems);
       
$approvalQueueRepo->cleanUpInvalidRecords($unapprovedItems);
       
$unapprovedItems = $approvalQueueRepo->filterViewableUnapprovedItems($unapprovedItems);

       
$viewParams = [
           
'filters' => $filters,
           
'unapprovedItems' => $unapprovedItems->slice(0, 50),
        ];
        return
$this->view('XF:ApprovalQueue\Listing', 'approval_queue', $viewParams);
    }

    public function
actionFilters(ParameterBag $params)
    {
       
$filters = $this->getQueueFilterInput();

        if (
$this->filter('apply', 'bool'))
        {
            return
$this->redirect($this->buildLink('approval-queue', null, $filters));
        }

       
$contentTypes = $this->getApprovalQueueRepo()->getContentTypesFromCurrentQueue();

       
$viewParams = [
           
'filters' => $filters,
           
'contentTypes' => $contentTypes
       
];
        return
$this->view('XF:ApprovalQueue\Filters', 'approval_queue_filters', $viewParams);
    }

    protected function
getQueueFilterInput()
    {
       
$filters = [];

       
$input = $this->filter([
           
'content_type' => 'str',
           
'order' => 'str',
           
'direction' => 'str'
       
]);

        if (
$input['content_type'])
        {
           
$filters['content_type'] = $input['content_type'];
        }

       
$sorts = $this->getAvailableQueueSorts();

        if (
$input['order'] && isset($sorts[$input['order']]))
        {
            if (!
in_array($input['direction'], ['asc', 'desc']))
            {
               
$input['direction'] = 'asc';
            }

            if (
$input['order'] != 'content_date' || $input['direction'] != 'asc')
            {
               
$filters['order'] = $input['order'];
               
$filters['direction'] = $input['direction'];
            }
        }

        return
$filters;
    }

    protected function
getAvailableQueueSorts()
    {
       
// maps [name of sort] => field in/relative to ApprovalQueue entity
       
return [
           
'content_date' => 'content_date'
       
];
    }

    protected function
applyQueueFilters(\XF\Mvc\Entity\Finder $finder, array $filters)
    {
        if (!empty(
$filters['content_type']))
        {
           
$finder->where('content_type', $filters['content_type']);
        }

       
$sorts = $this->getAvailableQueueSorts();

        if (!empty(
$filters['order']) && isset($sorts[$filters['order']]))
        {
           
$finder->order($sorts[$filters['order']], $filters['direction']);
        }
       
// else the default order has already been applied
   
}

    public function
actionProcess()
    {
       
$this->assertPostOnly();

       
$approvalQueueRepo = $this->getApprovalQueueRepo();

       
$queue = $this->filter('queue', 'array');
       
$queue = $approvalQueueRepo->filterQueue($queue);

        if (
$queue)
        {
           
$jobManager = $this->app->jobManager();
           
$jobManager->enqueueAutoBlocking('XF:ApprovalQueueProcess', [
               
'asUserId' => \XF::visitor()->user_id,
               
'queue' => $queue,
               
'rawInput' => $this->request->getInput()
            ]);
           
$jobManager->setAutoBlockingMessage(\XF::phrase('processing_approval_queue...'));
        }

        return
$this->redirect($this->buildLink('approval-queue'));
    }

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

    public static function
getActivityDetails(array $activities)
    {
        return \
XF::phrase('performing_moderation_duties');
    }
}