Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/ApprovalQueue/User.php
<?php

namespace XF\ApprovalQueue;

use
XF\Entity\ApprovalQueue;
use
XF\Mvc\Entity\Entity;

class
User extends AbstractHandler
{
    protected function
canViewContent(Entity $content, &$error = null)
    {
        return
true;
    }

    protected function
canActionContent(Entity $content, &$error = null)
    {
        return \
XF::visitor()->canApproveRejectUser();
    }

    public function
getEntityWith()
    {
        return [
'Profile', 'PreRegAction'];
    }

    public function
getTemplateData(ApprovalQueue $unapprovedItem)
    {
       
$templateData = parent::getTemplateData($unapprovedItem);

       
/** @var \XF\Entity\User $user */
       
$user = $unapprovedItem->Content;
       
$templateData['user'] = $user;

       
$preRegAction = $user->PreRegAction;
        if (
$preRegAction)
        {
           
$templateData['preRegAction'] = $preRegAction;
           
$templateData['preRegHandler'] = $preRegAction->getHandler();
        }

       
// If we suspect this user to be a spammer, let's also grab their recent change logs.
        // This will highlight spam-like changes to their account they made after being sent to the approval queue.
       
if ($user->isPossibleSpammer())
        {
           
$changeRepo = \XF::repository('XF:ChangeLog');
           
$changeFinder = $changeRepo->findChangeLogsByContent('user', $user->user_id);

           
// just get 5 most recent - ignore "protected" entries as these are set by the system
           
$changes = $changeFinder->where('protected', 0)->fetch(5);
           
$changeRepo->addDataToLogs($changes);

           
$templateData['changesGrouped'] = $changeRepo->groupChangeLogs($changes);
        }

        return
$templateData;
    }

    public function
actionApprove(\XF\Entity\User $user)
    {
       
$user->user_state = 'valid';
       
$user->save();

        \
XF::app()->logger()->logModeratorAction('user', $user, 'approved');

       
$notify = $this->getInput('notify', $user->user_id);
        if (
$notify && $user->email)
        {
            \
XF::app()->mailer()->newMail()
                ->
setTemplate('user_account_approved', ['user' => $user])
                ->
setToUser($user)
                ->
send();
        }

       
/** @var \XF\Service\User\RegistrationComplete $regComplete */
       
$regComplete = \XF::app()->service('XF:User\RegistrationComplete', $user);
       
$regComplete->triggerCompletionActions();
    }

    public function
actionReject(\XF\Entity\User $user)
    {
       
$notify = $this->getInput('notify', $user->user_id);
       
$reason = $this->getInput('reason', $user->user_id);

       
$user->rejectUser($reason, \XF::visitor());

        if (
$notify && $user->email)
        {
            \
XF::app()->mailer()->newMail()
                ->
setTemplate('user_account_rejected', ['user' => $user, 'reason' => $reason])
                ->
setToUser($user)
                ->
send();
        }

        \
XF::app()->logger()->logModeratorAction('user', $user, 'rejected', ['reason' => $reason]);
    }

    public function
actionSpamClean(\XF\Entity\User $user)
    {
       
$this->_spamCleanInternal($user);
    }
}