CraftCli\Command\UpdateAssetIndexesCommand::fire PHP Method

fire() protected method

protected fire ( )
    protected function fire()
    {
        $indexes = array();
        $sessionId = craft()->assetIndexing->getIndexingSessionId();
        $this->info('Fetching sources...');
        $sources = craft()->assetSources->getAllSources();
        $sourceIds = $this->argument('sourceIds');
        if ($sourceIds) {
            $sources = array_filter($sources, function ($source) use($sourceIds) {
                return in_array($source->id, $sourceIds);
            });
        } else {
            $sourceIds = array_map(function ($source) {
                return $source->id;
            }, $sources);
        }
        $missingFolders = array();
        $grandTotal = 0;
        $this->info('Fetching indexes...');
        foreach ($sourceIds as $sourceId) {
            // Get the indexing list
            $indexList = craft()->assetIndexing->getIndexListForSource($sessionId, $sourceId);
            if (!empty($indexList['error'])) {
                $this->error($indexList['error']);
                return;
            }
            if (isset($indexList['missingFolders'])) {
                $missingFolders += $indexList['missingFolders'];
            }
            $grandTotal += $indexList['total'];
            $indexes[$sourceId] = $indexList['total'];
        }
        $this->info('Updating indexes...');
        $progressBar = new ProgressBar($this->output, $grandTotal);
        $count = 0;
        // Index the file
        foreach ($indexes as $sourceId => $total) {
            for ($i = 0; $i < $total; $i++) {
                craft()->assetIndexing->processIndexForSource($sessionId, $i, $sourceId);
                $progressBar->setProgress(++$count);
            }
        }
        $progressBar->finish();
        $this->line('');
        $this->info('Deleting stale index data...');
        // Clean up stale indexing data (all sessions that have all recordIds set)
        $sessionsInProgress = craft()->db->createCommand()->select('sessionId')->from('assetindexdata')->where('recordId IS NULL')->group('sessionId')->queryScalar();
        if (empty($sessionsInProgress)) {
            craft()->db->createCommand()->delete('assetindexdata');
        } else {
            craft()->db->createCommand()->delete('assetindexdata', array('not in', 'sessionId', $sessionsInProgress));
        }
        if ($this->option('delete-missing-files')) {
            $this->info('Deleting missing files...');
            $missingFiles = craft()->assetIndexing->getMissingFiles($sourceIds, $sessionId);
            if ($missingFiles) {
                craft()->assetIndexing->removeObsoleteFileRecords(array_keys($missingFiles));
            }
        }
        if ($missingFolders && $this->option('delete-missing-folders')) {
            $this->info('Deleting missing folders...');
            craft()->assetIndexing->removeObsoleteFolderRecords(array_keys($missingFolders));
        }
        $this->info('Asset indexes have been updated.');
    }
UpdateAssetIndexesCommand