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

namespace XF\InlineMod\Post;

use
XF\Http\Request;
use
XF\InlineMod\AbstractAction;
use
XF\Mvc\Entity\AbstractCollection;
use
XF\Mvc\Entity\Entity;

use function
count;

class
Delete extends AbstractAction
{
    public function
getTitle()
    {
        return \
XF::phrase('delete_posts...');
    }

    protected function
canApplyToEntity(Entity $entity, array $options, &$error = null)
    {
       
/** @var \XF\Entity\Post $entity */
       
return $entity->canDelete($options['type'], $error);
    }

    protected function
applyInternal(AbstractCollection $entities, array $options)
    {
       
$skipped = [];

        foreach (
$entities AS $entity)
        {
            if (!empty(
$skipped[$entity->thread_id]))
            {
                continue;
            }

           
$this->applyToEntity($entity, $options);

           
$thread = $entity->Thread;
            if (
$options['type'] == 'hard' && $entity->post_id == $thread->first_post_id)
            {
               
// all posts in this thread have been removed, so skip them
               
$skipped[$thread->thread_id] = true;
            }
        }
    }

    protected function
applyToEntity(Entity $entity, array $options)
    {
       
/** @var \XF\Service\Post\Deleter $deleter */
       
$deleter = $this->app()->service('XF:Post\Deleter', $entity);

        if (
$options['alert'])
        {
           
$deleter->setSendAlert(true, $options['alert_reason']);
        }

       
$deleter->delete($options['type'], $options['reason']);

        if (
$deleter->wasThreadDeleted())
        {
           
$this->returnUrl = $this->app()->router('public')->buildLink('forums', $entity->Thread->Forum);
        }
    }

    public function
getBaseOptions()
    {
        return [
           
'type' => 'soft',
           
'reason' => '',
           
'alert' => false,
           
'alert_reason' => ''
       
];
    }

    public function
renderForm(AbstractCollection $entities, \XF\Mvc\Controller $controller)
    {
       
$firstPostCount = 0;
        foreach (
$entities AS $post)
        {
            if (
$post->post_id == $post->Thread->first_post_id)
            {
               
$firstPostCount++;
            }
        }

       
$viewParams = [
           
'posts' => $entities,
           
'firstPostCount' => $firstPostCount,
           
'total' => count($entities),
           
'canHardDelete' => $this->canApply($entities, ['type' => 'hard'])
        ];
        return
$controller->view('XF:Public:InlineMod\Post\Delete', 'inline_mod_post_delete', $viewParams);
    }

    public function
getFormOptions(AbstractCollection $entities, Request $request)
    {
        return [
           
'type' => $request->filter('hard_delete', 'bool') ? 'hard' : 'soft',
           
'reason' => $request->filter('reason', 'str'),
           
'alert' => $request->filter('author_alert', 'bool'),
           
'alert_reason' => $request->filter('author_alert_reason', 'str')
        ];
    }
}