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

namespace XF\Job\Upgrade;

use
XF\Job\AbstractJob;

class
UserAvatar200 extends AbstractJob
{
    protected
$defaultData = [
       
'start' => 0,
       
'batch' => 100,
       
'max' => null
   
];

    public function
run($maxRunTime)
    {
       
$startTime = microtime(true);

       
$db = $this->app->db();
       
$em = $this->app->em();

       
$ids = $db->fetchAllColumn($db->limit(
           
"
                SELECT user_id
                FROM xf_user
                WHERE user_id > ?
                    AND avatar_date > 0
                ORDER BY user_id
            "
, $this->data['batch']
        ),
$this->data['start']);
        if (!
$ids)
        {
            return
$this->complete();
        }

        if (
$this->data['max'] === null)
        {
           
$this->data['max'] = $db->fetchOne("SELECT MAX(user_id) FROM xf_user");
        }

       
// disable the memory limit to try to prevent issues
       
\XF::setMemoryLimit(-1);

       
$done = 0;

        foreach (
$ids AS $id)
        {
           
$this->data['start'] = $id;

           
/** @var \XF\Entity\User $user */
           
$user = $em->find('XF:User', $id, ['Profile']);
            if (!
$user || !$user->avatar_date)
            {
                continue;
            }

           
/** @var \XF\Service\User\Avatar $avatarService */
           
$avatarService = $this->app->service('XF:User\Avatar', $user);
           
$userProfile = $user->Profile;
            if (
$userProfile)
            {
               
$avatarService->setCrop($userProfile->avatar_crop_x, $userProfile->avatar_crop_y);
            }

            if (!
$avatarService->createOSizeAvatarFromL())
            {
               
$avatarService->deleteAvatar();
            }

           
$done++;

            if (
microtime(true) - $startTime >= $maxRunTime)
            {
                break;
            }

        }

       
$this->data['batch'] = $this->calculateOptimalBatch($this->data['batch'], $done, $startTime, $maxRunTime, 1000);

        return
$this->resume();
    }

    public function
getStatusMessage()
    {
       
$actionPhrase = \XF::phrase('rebuilding');
       
$typePhrase = 'User avatar sizes';
        return
sprintf('%s... %s (%d / %d)', $actionPhrase, $typePhrase, $this->data['start'], $this->data['max']);
    }

    public function
canCancel()
    {
        return
false;
    }

    public function
canTriggerByChoice()
    {
        return
false;
    }
}