Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Service/Thread/Deleter.php
<?php

namespace XF\Service\Thread;

use
XF\Entity\Thread;

class
Deleter extends \XF\Service\AbstractService
{
   
/**
     * @var Thread
     */
   
protected $thread;

    protected
$user;

    protected
$alert = false;
    protected
$alertReason = '';

    public function
__construct(\XF\App $app, Thread $thread)
    {
       
parent::__construct($app);
       
$this->thread = $thread;
    }

    public function
getThread()
    {
        return
$this->thread;
    }

    public function
setUser(\XF\Entity\User $user = null)
    {
       
$this->user = $user;
    }

    public function
getUser()
    {
        return
$this->user;
    }

    public function
setSendAlert($alert, $reason = null)
    {
       
$this->alert = (bool)$alert;
        if (
$reason !== null)
        {
           
$this->alertReason = $reason;
        }
    }

    public function
delete($type, $reason = '')
    {
        switch (
$type)
        {
            case
'soft':
            case
'hard':
                break;

            default:
                throw new \
InvalidArgumentException("Unexpected delete type '$type'. Should be soft or hard.");
        }

       
$user = $this->user ?: \XF::visitor();

       
$wasVisible = $this->thread->discussion_state == 'visible';

        if (
$type == 'soft')
        {
           
$result = $this->thread->softDelete($reason, $user);
        }
        else
        {
           
$result = $this->thread->delete();
        }

        if (
$result
           
&& $wasVisible
           
&& $this->alert
           
&& $this->thread->user_id != $user->user_id
           
&& $this->thread->discussion_state != 'redirect'
       
)
        {
           
/** @var \XF\Repository\Thread $threadRepo */
           
$threadRepo = $this->repository('XF:Thread');
           
$threadRepo->sendModeratorActionAlert($this->thread, 'delete', $this->alertReason);
        }

        return
$result;
    }
}