Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Entity/UserBan.php
<?php

namespace XF\Entity;

use
XF\Mvc\Entity\Entity;
use
XF\Mvc\Entity\Structure;

use function
intval;

/**
 * COLUMNS
 * @property int $user_id
 * @property int $ban_user_id
 * @property int $ban_date
 * @property int $end_date
 * @property string $user_reason
 * @property bool $triggered
 *
 * RELATIONS
 * @property \XF\Entity\User $User
 * @property \XF\Entity\User $BanUser
 */
class UserBan extends Entity
{
    protected function
_preSave()
    {
        if (
$this->isInsert())
        {
            if (!
$this->User || $this->User->is_admin || $this->User->is_moderator)
            {
               
$this->error(\XF::phraseDeferred('this_user_is_an_admin_or_moderator_choose_another'), 'user_id');
            }
           
// ban check handled in the unique part of the user_id structure
       
}
        else
        {
            if (
$this->isChanged('user_id'))
            {
                throw new \
LogicException("Cannot change user_id of a ban record");
            }
        }
    }

    protected function
_postSave()
    {
        if (
$this->isInsert())
        {
           
$this->setIsBanned(true);
        }
    }

    protected function
_postDelete()
    {
       
$this->setIsBanned(false);
    }

    protected function
setIsBanned($isBanned)
    {
       
/** @var \XF\Entity\User $user */
       
$user = $this->User;
        if (!
$user)
        {
            return;
        }

       
$user->is_banned = $isBanned;
       
$isChanged = $user->isChanged('is_banned');

        if (
           
$isBanned
           
&& $isChanged
           
&& $user->user_state == 'moderated'
           
&& !$this->end_date
       
)
        {
           
// User has been permanently banned while awaiting approval, so make them valid so they
            // don't appear on the approval list any longer. Don't use rejected as an unban would require
            // 2 steps then.
           
$user->user_state = 'valid';
        }

       
$user->save();

        if (
$isChanged)
        {
           
/** @var \XF\Service\User\UserGroupChange $userGroupChangeService */
           
$userGroupChangeService = $this->app()->service('XF:User\UserGroupChange');

            if (
$isBanned)
            {
                if (
$banGroup = $this->getOption('ban_user_group'))
                {
                   
$userGroupChangeService->addUserGroupChange($user->user_id, 'banGroup', $banGroup);
                }
            }
            else
            {
               
$userGroupChangeService->removeUserGroupChange($user->user_id, 'banGroup');
            }
        }
    }

    public static function
getStructure(Structure $structure)
    {
       
$structure->table = 'xf_user_ban';
       
$structure->shortName = 'XF:UserBan';
       
$structure->primaryKey = 'user_id';
       
$structure->columns = [
           
'user_id' => ['type' => self::UINT, 'required' => true,
               
'unique' => 'this_user_is_already_banned'
           
],
           
'ban_user_id' => ['type' => self::UINT, 'required' => true],
           
'ban_date' => ['type' => self::UINT, 'default' => \XF::$time],
           
'end_date' => ['type' => self::UINT, 'required' => true],
           
'user_reason' => ['type' => self::STR, 'maxLength' => 255, 'forced' => true, 'default' => ''],
           
'triggered' => ['type' => self::BOOL, 'default' => false]
        ];
       
$structure->getters = [];
       
$structure->relations = [
           
'User' => [
               
'entity' => 'XF:User',
               
'type' => self::TO_ONE,
               
'conditions' => 'user_id',
               
'primary' => true
           
],
           
'BanUser' => [
               
'entity' => 'XF:User',
               
'type' => self::TO_ONE,
               
'conditions' => [
                    [
'user_id', '=', '$ban_user_id']
                ],
               
'primary' => true
           
]
        ];

       
$options = \XF::options();

       
$structure->options = [
           
'ban_user_group' => !empty($options->addBanUserGroup)
                ?
intval($options->addBanUserGroup)
                :
0
       
];

       
$structure->defaultWith[] = 'User';

        return
$structure;
    }
}