Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/InlineMod/AbstractAction.php
<?php

namespace XF\InlineMod;

use
XF\Http\Request;
use
XF\Http\Response;
use
XF\Mvc\Entity\AbstractCollection;
use
XF\Mvc\Entity\Entity;
use
XF\Mvc\Reply\AbstractReply;

abstract class
AbstractAction
{
   
/**
     * @var AbstractHandler
     */
   
protected $handler;

   
/**
     * @var AbstractCollection
     */
   
protected $entities;

    protected
$returnUrl;

    abstract public function
getTitle();
    abstract protected function
canApplyToEntity(Entity $entity, array $options, &$error = null);
    abstract protected function
applyToEntity(Entity $entity, array $options);

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

    public function
getBaseOptions()
    {
        return [];
    }

    public function
renderForm(AbstractCollection $entities, \XF\Mvc\Controller $controller)
    {
        return
null;
    }

    public function
getFormOptions(AbstractCollection $entities, Request $request)
    {
        return [];
    }

    protected function
standardizeOptions(array $options)
    {
        return
array_merge($this->getBaseOptions(), $options);
    }

    public function
canApply(AbstractCollection $entities, array $options = [], &$error = null)
    {
       
$options = $this->standardizeOptions($options);
        return
$this->canApplyInternal($entities, $options, $error);
    }

    protected function
canApplyInternal(AbstractCollection $entities, array $options, &$error)
    {
        foreach (
$entities AS $entity)
        {
            if (!
$this->handler->canViewContent($entity, $error))
            {
                return
false;
            }
            if (!
$this->canApplyToEntity($entity, $options, $error))
            {
                return
false;
            }
        }

        return
true;
    }

    public function
apply(AbstractCollection $entities, array $options = [])
    {
       
$options = $this->standardizeOptions($options);
       
$this->applyInternal($entities, $options);
    }

    protected function
applyInternal(AbstractCollection $entities, array $options)
    {
        foreach (
$entities AS $entity)
        {
           
$this->applyToEntity($entity, $options);
        }
    }

    public function
getReturnUrl()
    {
        return
$this->returnUrl;
    }

    public function
postApply(AbstractCollection $entities, AbstractReply &$reply, Response $response)
    {
       
$this->handler->clearCookie($response);
    }

    protected function
app()
    {
        return
$this->handler->app();
    }
}