Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Job/UserAction.php
<?php

namespace XF\Job;

use function
intval;

class
UserAction extends AbstractUserCriteriaJob
{
    protected
$defaultData = [
       
'actions' => []
    ];

    protected function
executeAction(\XF\Entity\User $user)
    {
        if (
$user->is_super_admin)
        {
            return;
// no updating of super admins
       
}

        if (
$this->getActionValue('delete'))
        {
            if (!
$user->is_admin && !$user->is_moderator)
            {
               
$user->delete(false, false);
            }
            return;
// no further action required
       
}

       
$this->applyInternalUserChange($user);
       
$user->save(false, false);

       
$this->applyExternalUserChange($user);
    }

    protected function
getActionDescription()
    {
       
$actionPhrase = \XF::phrase('updating');
       
$typePhrase = \XF::phrase('users');

        return
sprintf('%s... %s', $actionPhrase, $typePhrase);
    }

    protected function
getActionValue($action)
    {
        if (!empty(
$this->data['actions'][$action]))
        {
            return
$this->data['actions'][$action];
        }
        else
        {
            return
null;
        }
    }

    protected function
applyInternalUserChange(\XF\Entity\User $user)
    {
        if (
$setPrimaryGroupId = $this->getActionValue('set_primary_group_id'))
        {
           
$user->user_group_id = $setPrimaryGroupId;
        }

       
$groups = $user->secondary_group_ids;
       
$changeSecondaryGroups = false;
        if (
$addGroupId = $this->getActionValue('add_group_id'))
        {
           
$groups[] = $addGroupId;
           
$changeSecondaryGroups = true;
        }
        if (
$removeGroupId = $this->getActionValue('remove_group_id'))
        {
           
$key = array_search(intval($removeGroupId), $groups);
            if (
$key !== false)
            {
                unset(
$groups[$key]);
               
$changeSecondaryGroups = true;
            }
        }
        if (
$changeSecondaryGroups)
        {
           
$user->secondary_group_ids = $groups;
        }

        if (
$setUserState = $this->getActionValue('set_user_state'))
        {
           
$user->user_state = $setUserState;
        }

        if (
$setSecurityLock = $this->getActionValue('set_security_lock'))
        {
            if (!
$user->is_admin) // no security locking admins
           
{
                if (
$setSecurityLock == 'none')
                {
                   
$setSecurityLock = '';
                }
               
$user->security_lock = $setSecurityLock;
            }
        }

        if (
$enableActivitySummaryEmail = $this->getActionValue('enable_activity_summary_email'))
        {
            if (
$user->last_summary_email_date === null)
            {
               
$user->last_summary_email_date = \XF::$time;
            }
        }

        if (
$disableActivitySummaryEmail = $this->getActionValue('disable_activity_summary_email'))
        {
            if (
$user->last_summary_email_date !== null)
            {
               
$user->last_summary_email_date = null;
            }
        }

       
/** @var \XF\Entity\UserOption $option */
       
$option = $user->getRelationOrDefault('Option', false);

        if (
$this->getActionValue('discourage'))
        {
           
$option->is_discouraged = true;
           
$user->addCascadedSave($option);
        }
        if (
$this->getActionValue('undiscourage'))
        {
           
$option->is_discouraged = false;
           
$user->addCascadedSave($option);
        }

       
/** @var \XF\Entity\UserProfile $profile */
       
$profile = $user->getRelationOrDefault('Profile', false);
        if (
$this->getActionValue('remove_signature'))
        {
           
$profile->signature = '';
           
$user->addCascadedSave($profile);
        }
        if (
$this->getActionValue('remove_website'))
        {
           
$profile->website = '';
           
$user->addCascadedSave($profile);
        }

        if (
$customTitle = $this->getActionValue('custom_title'))
        {
           
$user->custom_title = $customTitle;
        }
    }

    protected function
applyExternalUserChange(\XF\Entity\User $user)
    {
        if (
$this->getActionValue('remove_avatar'))
        {
           
/** @var \XF\Service\User\Avatar $avatarService */
           
$avatarService = $this->app->service('XF:User\Avatar', $user);
           
$avatarService->deleteAvatar();
        }

        if (
$this->getActionValue('ban') && !$user->is_admin && !$user->is_moderator)
        {
           
/** @var \XF\Repository\Banning $banRepo */
           
$banRepo = $this->app->repository('XF:Banning');
           
$banRepo->banUser($user, 0, '');
        }

        if (
$this->getActionValue('unban') && $ban = $user->Ban)
        {
           
$ban->delete(false, false);
        }
    }

    public function
canCancel()
    {
        return
true;
    }

    public function
canTriggerByChoice()
    {
        return
false;
    }
}