Вход Регистрация
Файл: library/XenForo/DataWriter/UserBan.php
Строк: 167
<?php

/**
* Data writer for banned users.
*
* @package XenForo_Banning
*/
class XenForo_DataWriter_UserBan extends XenForo_DataWriter
{
    
/**
     * If non-zero, user is added to the specified group when being banned.
     * Value is a user group id.
     *
     * @var string
     */
    
const OPTION_ADD_GROUP 'addGroup';

    
/**
    * Gets the fields that are defined for the table. See parent for explanation.
    *
    * @return array
    */
    
protected function _getFields()
    {
        return array(
            
'xf_user_ban' => array(
                
'user_id'           => array('type' => self::TYPE_UINT'required' => true),
                
'ban_user_id'       => array('type' => self::TYPE_UINT'required' => true),
                
'ban_date'          => array('type' => self::TYPE_UINT'default' => XenForo_Application::$time),
                
'end_date'          => array('type' => self::TYPE_UINT'required' => true),
                
'user_reason'       => array('type' => self::TYPE_STRING'default' => '''maxLength' => 255),
                
'triggered'         => array('type' => self::TYPE_BOOLEAN'default' => 0)
            )
        );
    }

    
/**
    * Gets the actual existing data out of data that was passed in. See parent for explanation.
    *
    * @param mixed
    *
    * @return array|false
    */
    
protected function _getExistingData($data)
    {
        if (!
$id $this->_getExistingPrimaryKey($data'user_id'))
        {
            return 
false;
        }

        return array(
'xf_user_ban' => $this->_getBanningModel()->getBannedUserById($id));
    }

    
/**
    * Gets SQL condition to update the existing record.
    *
    * @return string
    */
    
protected function _getUpdateCondition($tableName)
    {
        return 
'user_id = ' $this->_db->quote($this->getExisting('user_id'));
    }

    
/**
     * Gets the default options for this data writer.
     */
    
protected function _getDefaultOptions()
    {
        
$options XenForo_Application::get('options');

        return array(
            
self::OPTION_ADD_GROUP => intval($options->addBanUserGroup)
        );
    }

    
/**
     * Pre-save handling.
     */
    
protected function _preSave()
    {
        if (
$this->isChanged('user_id'))
        {
            
$userBan $this->_getBanningModel()->getBannedUserById($this->get('user_id'));
            if (
$userBan)
            {
                
$this->error(new XenForo_Phrase('this_user_is_already_banned'), 'user_id');
            }
            else
            {
                
$user $this->getModelFromCache('XenForo_Model_User')->getUserById($this->get('user_id'));
                if (!
$user || $user['is_moderator'] || $user['is_admin'])
                {
                    
$this->error(new XenForo_Phrase('this_user_is_an_admin_or_moderator_choose_another'), 'user_id');
                }
            }
        }
    }

    
/**
     * Post-save handling.
     */
    
protected function _postSave()
    {
        if (
$this->isUpdate() && $this->isChanged('user_id'))
        {
            
$this->_setIsBanned($this->getExisting('user_id'), false);
        }

        if (
$this->isChanged('user_id'))
        {
            
$this->_setIsBanned($this->get('user_id'), true);
        }
    }

    
/**
     * Post-delete handling.
     */
    
protected function _postDelete()
    {
        
$this->_setIsBanned($this->get('user_id'), false);
    }

    
/**
     * Sets the is banned state for the specified user.
     *
     * @param integer $userId
     * @param boolean $isBanned
     */
    
protected function _setIsBanned($userId$isBanned)
    {
        
$dw XenForo_DataWriter::create('XenForo_DataWriter_User');
        
$dw->setExistingData($userId);
        
$dw->set('is_banned'$isBanned 0);
        
$dw->save();

        if (
$dw->isChanged('is_banned'))
        {
            if (
$isBanned)
            {
                
// newly banned - add to group
                
$addGroup $this->getOption(self::OPTION_ADD_GROUP);
                if (
$addGroup)
                {
                    
$this->_getUserModel()->addUserGroupChange($userId'banGroup'$addGroup);
                }
            }
            else
            {
                
// newly unbanned - remove
                
$this->_getUserModel()->removeUserGroupChange($userId'banGroup');
            }
        }
    }

    
/**
     * @return XenForo_Model_Banning
     */
    
protected function _getBanningModel()
    {
        return 
$this->getModelFromCache('XenForo_Model_Banning');
    }
}
Онлайн: 1
Реклама