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

namespace XF\Job;

use function
intval;

class
SearchUserChange extends AbstractJob
{
    protected
$defaultData = [
       
'user_id' => null,
       
'before' => null,
       
'batch' => 500,
       
'none' => false
   
];

    public function
run($maxRunTime)
    {
       
$userId = intval($this->data['user_id']);
       
$before = intval($this->data['before']);

        if (!
$userId)
        {
            return
$this->complete();
        }

       
$search = $this->app->search();

       
$batchSize = max(1, intval($this->data['batch']));
       
$s = microtime(true);

       
$query = $search->getQuery();
       
$query->byUserId($userId)
            ->
orderedBy('date');

        if (
$before)
        {
           
$query->olderThan($before);
        }

       
$results = $search->search($query, $batchSize, false);
        if (!
$results)
        {
            return
$this->complete();
        }

       
$newBefore = $before;
       
$updated = 0;

        foreach (
$results AS $result)
        {
           
$type = $result[0];
           
$id = $result[1];

            if (!
$search->isValidContentType($type))
            {
                continue;
            }

           
$handler = $search->handler($type);
           
$entity = $handler->getContent($id);
            if (!
$entity)
            {
                continue;
            }

           
$date = $handler->getResultDate($entity);
            if (!
$newBefore || $date < $newBefore)
            {
               
$newBefore = $date;
            }

           
$search->index($type, $entity);
           
$updated++;

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

        if (!
$updated || $before == $newBefore)
        {
            if (
$this->data['none'])
            {
               
// We didn't process anything on the last attempt and the same thing happened here,
                // so we're likely to run an infinite loop. Bail out and prevent that.
               
return $this->complete();
            }

           
$this->data['none'] = true;
        }
        else
        {
           
$this->data['none'] = false;
        }

        if (
$updated && !$newBefore)
        {
           
// we found content that has a date of 0, have to break
           
return $this->complete();
        }

       
$this->data['before'] = $newBefore;

        return
$this->resume();
    }

    public function
getStatusMessage()
    {
       
$actionPhrase = \XF::phrase('rebuilding');
       
$typePhrase = \XF::phrase('search_index');
        return
sprintf('%s... %s', $actionPhrase, $typePhrase);
    }

    public function
canCancel()
    {
        return
false;
    }

    public function
canTriggerByChoice()
    {
        return
false;
    }
}