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

class XenForo_Model_UserIgnore extends XenForo_Model
{
    public function 
getIgnoredUsers($userId)
    {
        return 
$this->fetchAllKeyed('
            SELECT user.*
            FROM xf_user_ignored AS ignored
            INNER JOIN xf_user AS user ON (ignored.ignored_user_id = user.user_id)
            WHERE ignored.user_id = ?
            ORDER BY user.username
        '
'user_id'$userId);
    }

    public function 
getUserIgnoreCache($userId)
    {
        return 
$this->_getDb()->fetchPairs('
            SELECT user.user_id, user.username
            FROM xf_user_ignored AS ignored
            INNER JOIN xf_user AS user ON
                (ignored.ignored_user_id = user.user_id
                AND user.is_admin = 0 AND user.is_moderator = 0
                AND user.user_id <> ignored.user_id)
            WHERE ignored.user_id = ?
            ORDER BY user.username
        '
$userId);
    }

    public function 
getUserIdsIgnoringUser($userId)
    {
        return 
$this->_getDb()->fetchCol('
            SELECT user_id
            FROM xf_user_ignored
            WHERE ignored_user_id = ?
        '
$userId);
    }

    public function 
rebuildUserIgnoreCacheByIgnoring($ignoredUserId)
    {
        foreach (
$this->getUserIdsIgnoringUser($ignoredUserId) AS $ignoringUserId)
        {
            
$this->rebuildUserIgnoreCache($ignoringUserId);
        }
    }

    public function 
rebuildUserIgnoreCache($userId)
    {
        try
        {
            
$users $this->getUserIgnoreCache($userId);
            
$this->_getUserModel()->update($userId'ignored'serialize($users));
        }
        catch (
XenForo_Exception $e)
        {
            
$users = array();
        }

        return 
$users;
    }

    public function 
ignoreUsers($userId$ignoredUserIds)
    {
        if (!
is_array($ignoredUserIds))
        {
            if (!
$ignoredUserIds)
            {
                return 
false;
            }

            
$ignoredUserIds = array($ignoredUserIds);
        }


        if (!
$ignoredUserIds || !$userId)
        {
            return 
false;
        }

        foreach (
$ignoredUserIds AS $ignoredUserId)
        {
            
$this->_getDb()->query('
                INSERT IGNORE INTO xf_user_ignored
                    (user_id, ignored_user_id)
                VALUES
                    (?, ?)
            '
, array($userId$ignoredUserId));
        }

        return 
$this->rebuildUserIgnoreCache($userId);
    }

    public function 
unignoreUser($userId$ignoredUserId)
    {
        
$db $this->_getDb();

        
$db->delete('xf_user_ignored',
            
sprintf('user_id = %s AND ignored_user_id = %s'$db->quote($userId), $db->quote($ignoredUserId))
        );

        return 
$this->rebuildUserIgnoreCache($userId);
    }

    public function 
canIgnoreUser($userId, array $user, &$error '')
    {
        
$setError = (func_num_args() >= 3);

        if (!
$userId)
        {
            return 
false;
        }

        if (
$user['is_staff'])
        {
            if (
$setError)
            {
                
$error = new XenForo_Phrase('staff_members_may_not_be_ignored');
            }
            return 
false;
        }

        if (
$userId == $user['user_id'])
        {
            if (
$setError)
            {
                
$error = new XenForo_Phrase('you_may_not_ignore_yourself');
            }
            return 
false;
        }

        return 
true;
    }

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