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

namespace XF\Service\Post;

use
XF\Entity\Post;
use
XF\Entity\User;

class
Deleter extends \XF\Service\AbstractService
{
   
/**
     * @var Post
     */
   
protected $post;

   
/**
     * @var User
     */
   
protected $user;

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

    protected
$threadDeleted = false;

    public function
__construct(\XF\App $app, Post $post)
    {
       
parent::__construct($app);
       
$this->post = $post;
       
$this->setUser(\XF::visitor());
    }

    public function
getPost()
    {
        return
$this->post;
    }

    protected function
setUser(\XF\Entity\User $user)
    {
       
$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 = '')
    {
       
$deleteThread = $this->isThreadDeleteRequired($type);

       
$user = $this->user;

       
/** @var \XF\Entity\Thread $thread */
       
$thread = $this->post->Thread;

       
$result = null;
       
$this->threadDeleted = $deleteThread;

       
$wasVisible = $this->post->message_state == 'visible';

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

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

        return
$result;
    }

    public function
wasThreadDeleted()
    {
        return
$this->threadDeleted;
    }

    protected function
isThreadDeleteRequired($type)
    {
        return
$this->post->isFirstPost();
    }
}