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

class XenForo_Deferred_UserAction extends XenForo_Deferred_Abstract
{
    public function 
canTriggerManually()
    {
        return 
false;
    }

    public function 
execute(array $deferred, array $data$targetRunTime, &$status)
    {
        
$data array_merge(array(
            
'criteria' => null,
            
'start' => 0,
            
'count' => 0,
            
'total' => null,
            
'userIds' => null,
            
'actions' => array()
        ), 
$data);

        
$s microtime(true);

        
/* @var $userModel XenForo_Model_User */
        
$userModel XenForo_Model::create('XenForo_Model_User');

        if (
is_array($data['criteria']))
        {
            
$userIds $userModel->getUserIds($data['criteria'], $data['start'], 1000);
        }
        else if (
is_array($data['userIds']))
        {
            
$userIds $data['userIds'];
        }
        else
        {
            
$userIds = array();
        }

        if (!
$userIds)
        {
            return 
false;
        }

        
$limitTime = ($targetRunTime 0);

        
XenForo_Db::beginTransaction();

        foreach (
$userIds AS $key => $userId)
        {
            
$data['count']++;
            
$data['start'] = $userId;
            unset(
$userIds[$key]);

            
/* @var $userDw XenForo_DataWriter_User */
            
$userDw XenForo_DataWriter::create('XenForo_DataWriter_User'XenForo_DataWriter::ERROR_SILENT);
            if (
$userDw->setExistingData($userId))
            {
                if (
$userModel->isUserSuperAdmin($userDw->getMergedData()))
                {
                    
// no updating of super admins
                    
continue;
                }

                if (!empty(
$data['actions']['delete']))
                {
                    if (!
$userDw->get('is_admin') && !$userDw->get('is_moderator'))
                    {
                        
$userDw->delete();
                    }
                }
                else
                {
                    if (!empty(
$data['actions']['set_primary_group_id']))
                    {
                        
$userDw->set('user_group_id'$data['actions']['set_primary_group_id']);
                    }

                    
$groups explode(','$userDw->get('secondary_group_ids'));

                    if (!empty(
$data['actions']['add_group_id']))
                    {
                        
$groups[] = $data['actions']['add_group_id'];
                        
$userDw->setSecondaryGroups($groups);
                    }

                    if (!empty(
$data['actions']['remove_group_id']))
                    {
                        
$searchKey array_search(intval($data['actions']['remove_group_id']), $groups);
                        if (
$searchKey !== false)
                        {
                            unset(
$groups[$searchKey]);
                        }
                        
$userDw->setSecondaryGroups($groups);
                    }

                    if (!empty(
$data['actions']['discourage']))
                    {
                        
$userDw->set('is_discouraged'1);
                    }

                    if (!empty(
$data['actions']['undiscourage']))
                    {
                        
$userDw->set('is_discouraged'0);
                    }

                    if (!empty(
$data['actions']['remove_avatar']))
                    {
                        
XenForo_Model::create('XenForo_Model_Avatar')->deleteAvatar($userId);
                    }

                    if (!empty(
$data['actions']['remove_signature']))
                    {
                        
$userDw->set('signature''');
                    }

                    if (!empty(
$data['actions']['remove_homepage']))
                    {
                        
$userDw->set('homepage''');
                    }

                    if (!empty(
$data['actions']['custom_title']))
                    {
                        
$userDw->set('custom_title'$data['actions']['custom_title']);
                    }

                    if (!empty(
$data['actions']['ban']) && !$userDw->get('is_admin') && !$userDw->get('is_moderator'))
                    {
                        if (
$ban XenForo_Model::create('XenForo_Model_Banning')->getBannedUserById($userId))
                        {
                            
$existing true;
                        }
                        else
                        {
                            
$existing false;
                        }

                        
$userModel->ban($userId0''$existing);
                    }

                    if (!empty(
$data['actions']['unban']))
                    {
                        
$userModel->liftBan($userId);
                    }

                    
$userDw->save();
                }
            }

            if (
$limitTime && microtime(true) - $s $targetRunTime)
            {
                break;
            }
        }

        
XenForo_Db::commit();

        if (
is_array($data['userIds']) && !$userIds)
        {
            return 
false;
        }

        if (
is_array($data['userIds']))
        {
            
$data['userIds'] = $userIds;
        }

        
$actionPhrase = new XenForo_Phrase('updating');
        
$typePhrase = new XenForo_Phrase('users');
        if (
$data['total'])
        {
            
$status sprintf('%s... %s (%d/%d)'$actionPhrase$typePhrase$data['count'], $data['total']);
        }
        else
        {
            
$status sprintf('%s... %s (%d)'$actionPhrase$typePhrase$data['count']);
        }

        return 
$data;
    }

    public function 
canCancel()
    {
        return 
true;
    }
}
Онлайн: 1
Реклама