Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/PreRegAction/Thread/Reply.php
<?php

namespace XF\PreRegAction\Thread;

use
XF\PreRegAction\AbstractHandler;
use
XF\Entity\PreRegAction;
use
XF\Entity\User;
use
XF\Mvc\Entity\Entity;

class
Reply extends AbstractHandler
{
    public function
getContainerContentType(): string
   
{
        return
'thread';
    }

    public function
getDefaultActionData(): array
    {
        return [
           
'message' => ''
       
];
    }

    protected function
canCompleteAction(PreRegAction $action, Entity $containerContent, User $newUser): bool
   
{
       
/** @var \XF\Entity\Thread $containerContent */
       
return $containerContent->canReply()
            && !
$this->isFlooding('post', $newUser);
    }

    protected function
executeAction(PreRegAction $action, Entity $containerContent, User $newUser)
    {
       
/** @var \XF\Entity\Thread $containerContent */

       
$replier = $this->setupThreadReply($action, $containerContent);
       
$replier->checkForSpam();

        if (!
$replier->validate())
        {
            return
null;
        }

       
$post = $replier->save();

        \
XF::repository('XF:ThreadWatch')->autoWatchThread($containerContent, $newUser, false);

       
$replier->sendNotifications();

        return
$post;
    }

    protected function
setupThreadReply(
       
PreRegAction $action,
        \
XF\Entity\Thread $thread
   
): \XF\Service\Thread\Replier
   
{
       
/** @var \XF\Service\Thread\Replier $replier */
       
$replier = \XF::app()->service('XF:Thread\Replier', $thread);
       
$replier->setMessage($action->action_data['message']);
       
$replier->logIp($action->ip_address);

        return
$replier;
    }

    protected function
sendSuccessAlert(
       
PreRegAction $action,
       
Entity $containerContent,
       
User $newUser,
       
Entity $executeContent
   
)
    {
        if (!(
$executeContent instanceof \XF\Entity\Post))
        {
            return;
        }

       
/** @var \XF\Entity\Post $post */
       
$post = $executeContent;

       
/** @var \XF\Repository\UserAlert $alertRepo */
       
$alertRepo = \XF::repository('XF:UserAlert');

       
$alertRepo->alertFromUser(
           
$newUser, null,
           
'post', $post->post_id,
           
'pre_reg',
            [
'welcome' => $action->isForNewUser()],
            [
'autoRead' => false]
        );
    }

    protected function
getStructuredContentData(PreRegAction $preRegAction, Entity $containerContent): array
    {
       
/** @var \XF\Entity\Thread $containerContent */

       
return [
           
'title' => \XF::phrase('post_in_thread_x', ['title' => $containerContent->title]),
           
'title_link' => $containerContent->getContentUrl(),
           
'bb_code' => $preRegAction->action_data['message']
        ];
    }
}