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

namespace XF\Job;

class
ReactionDelete extends AbstractJob
{
    protected
$defaultData = [
       
'reaction_id' => null,
       
'reaction_score' => 0,
       
'count' => 0,
       
'total' => null
   
];

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

        if (!
$this->data['reaction_id'])
        {
            throw new \
InvalidArgumentException('Cannot delete without a reaction_id.');
        }

       
$reactionFinder = $this->app->finder('XF:ReactionContent')
            ->
where('reaction_id', $this->data['reaction_id']);

        if (
$this->data['total'] === null)
        {
           
$this->data['total'] = $reactionFinder->total();
            if (!
$this->data['total'])
            {
                return
$this->complete();
            }
        }

       
$maxFetch = 1000;

       
// note that the order doesn't matter here -- we're deleting every entry
       
$reactionContents = $reactionFinder->fetch($maxFetch);
       
$continue = $reactionContents->count() < $maxFetch ? false : true;

        foreach (
$reactionContents AS $reactionContent)
        {
           
/** @var \XF\Entity\ReactionContent $reactionContent */
           
$this->data['count']++;

           
// the base reaction is gone, so we need to force this to recalculate properly
           
$reactionContent->setOption('force_reaction_score', $this->data['reaction_score']);
           
$reactionContent->delete(false);

            if (
$maxRunTime && microtime(true) - $s > $maxRunTime)
            {
               
$continue = true;
                break;
            }
        }

        if (
$continue)
        {
            return
$this->resume();
        }
        else
        {
            return
$this->complete();
        }
    }

    public function
getStatusMessage()
    {
       
$actionPhrase = \XF::phrase('deleting');
       
$typePhrase = \XF::phrase('reactions');
        return
sprintf('%s... %s (%s/%s)', $actionPhrase, $typePhrase,
            \
XF::language()->numberFormat($this->data['count']), \XF::language()->numberFormat($this->data['total'])
        );
    }

    public function
canCancel()
    {
        return
false;
    }

    public function
canTriggerByChoice()
    {
        return
false;
    }
}