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

class XenForo_Deferred_SearchIndex extends XenForo_Deferred_Abstract
{
    public function 
execute(array $deferred, array $data$targetRunTime, &$status)
    {
        
$inputHandler = new XenForo_Input($data);
        
$input $inputHandler->filter(array(
            
'batch' => XenForo_Input::UINT,
            
'start' => XenForo_Input::UINT,
            
'extra_data' => XenForo_Input::ARRAY_SIMPLE,
            
'delay' => XenForo_Input::UNUM,
            
'content_type' => XenForo_Input::STRING,
            
'delete_index' => XenForo_Input::UINT
        
));

        if (
$input['delay'] >= 0.01)
        {
            
usleep($input['delay'] * 1000000);
        }

        
/* @var $searchModel XenForo_Model_Search */
        
$searchModel XenForo_Model::create('XenForo_Model_Search');
        
$searchContentTypes $searchModel->getSearchContentTypes();

        
$extraData $input['extra_data'];
        if (!isset(
$extraData['content_types']) || !is_array($extraData['content_types']))
        {
            if (
$input['content_type'] && isset($searchContentTypes[$input['content_type']]))
            {
                
$extraData['content_types'] = array($input['content_type']);
            }
            else
            {
                
$extraData['content_types'] = array_keys($searchContentTypes);
            }
        }
        if (empty(
$extraData['current_type']))
        {
            
$extraData['current_type'] = array_shift($extraData['content_types']);
        }
        if (empty(
$extraData['type_start']))
        {
            
$extraData['type_start'] = 0;
        }

        
$originalExtraData $extraData;

        while (!isset(
$searchContentTypes[$extraData['current_type']]))
        {
            if (!
$extraData['content_types'])
            {
                return 
false;
            }

            
$extraData['current_type'] = array_shift($extraData['content_types']);
        }

        if (
$input['delete_index'])
        {
            
$source XenForo_Search_SourceHandler_Abstract::getDefaultSourceHandler();
            
$source->deleteIndex($input['content_type'] ? $input['content_type'] : null);
        }

        
$searchHandler $searchContentTypes[$extraData['current_type']];
        if (
class_exists($searchHandler))
        {
            
$dataHandler XenForo_Search_DataHandler_Abstract::create($searchHandler);
            
$indexer = new XenForo_Search_Indexer();
            
$indexer->setIsRebuild(true);

            
$nextStart $dataHandler->rebuildIndex($indexer$extraData['type_start'], $input['batch']);

            
$indexer->finalizeRebuildSet();
        }
        else
        {
            
$nextStart false;
        }

        if (
$nextStart === false)
        {
            
// move on to next type
            
$extraData['current_type'] = '';
            
$extraData['type_start'] = 0;
        }
        else
        {
            
$extraData['type_start'] = $nextStart;
        }

        
$data = array(
            
'batch' => $input['batch'],
            
'start' => $input['start'] + 1,
            
'extra_data' => $extraData,
            
'delay' => $input['delay']
        );

        
$actionPhrase = new XenForo_Phrase('rebuilding');
        
$typePhrase = new XenForo_Phrase('search_index');
        
$text = new XenForo_Phrase($originalExtraData['current_type']);

        
$status sprintf('%s... %s (%s)'$actionPhrase$typePhrase"$text " XenForo_Locale::numberFormat($originalExtraData['type_start']));

        return 
$data;
    }

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