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

namespace XF\ApprovalQueue;

use
XF\Entity\ApprovalQueue;
use
XF\InputFiltererArray;
use
XF\Mvc\Entity\Entity;

use function
call_user_func_array, func_get_args, is_array;

abstract class
AbstractHandler
{
   
/**
     * @var InputFiltererArray
     */
   
protected $inputFilterer;

    protected
$filterCache = [];
    protected
$contentType;

    public function
__construct($contentType)
    {
       
$this->contentType = $contentType;
    }

    public function
canView(Entity $content, &$error = null)
    {
        if (!
$this->canViewContent($content, $error))
        {
            return
false;
        }

        if (!
$this->canActionContent($content, $error))
        {
            return
false;
        }

        return
true;
    }

    protected function
canViewContent(Entity $content, &$error = null)
    {
        if (
method_exists($content, 'canView'))
        {
            return
$content->canView($error);
        }

        throw new \
LogicException("Could not determine content viewability; please override");
    }

    protected function
canActionContent(Entity $content, &$error = null)
    {
        return
true;
    }

    public function
getTemplateName()
    {
        return
'public:approval_item_' . $this->contentType;
    }

    public function
getTemplateData(ApprovalQueue $unapprovedItem)
    {
        return [
           
'unapprovedItem' => $unapprovedItem,
           
'content' => $unapprovedItem->Content,
           
'spamDetails' => $unapprovedItem->SpamDetails,
           
'handler' => $this
       
];
    }

    public function
render(ApprovalQueue $unapprovedItem)
    {
       
$template = $this->getTemplateName();
        if (!
$template)
        {
            return
'';
        }

        return \
XF::app()->templater()->renderTemplate($template, $this->getTemplateData($unapprovedItem));
    }

    public function
getEntityWith()
    {
        return [];
    }

    public function
getContent($id)
    {
        return \
XF::app()->findByContentType($this->contentType, $id, $this->getEntityWith());
    }

    public function
getSpamDetails($id)
    {
       
/** @var \XF\Repository\Spam $spamRepo */
       
$spamRepo = \XF::app()->repository('XF:Spam');

       
$spamTriggerLogsFinder = $spamRepo->findSpamTriggerLogs()->forContent($this->contentType, $id);

        return
$spamTriggerLogsFinder->fetch()->pluckNamed('details', 'content_id');
    }

    public function
getDefaultActions()
    {
        return [
           
'' => \XF::phrase('do_nothing'),
           
'approve' => \XF::phrase('approve'),
           
'delete' => \XF::phrase('delete')
        ];
    }

    public function
performAction($action, Entity $entity)
    {
       
$args = func_get_args();
        unset (
$args[0]);

       
$method = 'action' . ucfirst(\XF\Util\Php::camelCase($action));
        if (!\
XF\Util\Php::validateCallbackPhrased($this, $method, $error))
        {
            throw new \
LogicException($error);
        }

        return
call_user_func_array([$this, $method], $args);
    }

    public function
setInput(array $input)
    {
       
$this->inputFilterer = new InputFiltererArray(
            \
XF::app()->inputFilterer(), $input
       
);
    }

    protected function
getInput($key, $id)
    {
        if (!isset(
$this->filterCache[$key]))
        {
           
$this->filterCache[$key] = $this->inputFilterer->filter($key, 'array');
        }

        return !empty(
$this->filterCache[$key][$this->contentType][$id]) ? $this->filterCache[$key][$this->contentType][$id] : '';
    }

    protected function
quickUpdate(Entity $entity, $field, $value = null)
    {
       
$values = $field;

        if (!
is_array($field))
        {
           
$values = [$field => $value];
        }

       
$entity->bulkSet($values);
       
$entity->save();
    }

    protected function
_spamCleanInternal(\XF\Entity\User $user)
    {
        if (!\
XF::visitor()->canCleanSpam() || !$user->isPossibleSpammer())
        {
            return;
        }

       
$cleanActions = \XF::options()->spamDefaultOptions;
        unset(
$cleanActions['check_ips']); // never check IPs in bulk

       
$cleaner = \XF::app()->spam()->cleaner($user);

        if (
$cleaner->isRecentlyCleaned())
        {
            return;
        }

        if (
$cleanActions['ban_user'])
        {
           
$cleaner->banUser();
        }

       
$cleaner->cleanUpContent($cleanActions);
       
$cleaner->finalize();
    }

    public function
getContentTypePhrase()
    {
        return \
XF::app()->getContentTypePhrase($this->contentType);
    }
}