service = $service; $this->indexer = $indexer; $this->config = $config; } /** * @return void */ public function execute() { $fullIndexCronjobActive = (int)$this->config->get('supersearch_full_index_task_mutex'); // Diff-Index nur ausführen wenn Full-Index-Cronjob gerade nicht läuft if ($fullIndexCronjobActive === 0) { $this->updateIndexes(); } // Full-Index läuft gerade > Zähler erhöhen if ($fullIndexCronjobActive > 0) { $this->config->set('supersearch_full_index_task_mutex', (string)($fullIndexCronjobActive + 1)); } // Full-Index läuft schon sehr lange (eher ein Fehler) > Zähler zurücksetzen if ($fullIndexCronjobActive > 3) { $this->config->set('supersearch_full_index_task_mutex', '0'); } } /** * @return void */ private function updateIndexes() { $meta = $this->indexer->getProviderMetaData(); foreach ($meta as $row) { $indexName = $row['name']; $indexTitle = $row['title']; $moduleName = $row['module']; // Sicherstellen dass die Indexe für die registrierten Provider vorhanden sind if (!$this->service->existsIndex($indexName)) { $this->service->createIndex($indexName, $indexTitle, $moduleName); } /* * Such-Index befüllen */ // Diff-Index wurde schon einmal ausgeführt > Diff-Index wieder ausführen $lastDiffIndexTime = $this->indexer->getLastDiffIndexTime($indexName); if ($lastDiffIndexTime !== null) { $this->indexer->updateIndexSince($indexName, $lastDiffIndexTime); continue; } // Diff-Index und Full-Index wurden noch nie ausgeführt => FullIndex ausführen $lastFullIndexTime = $this->indexer->getLastFullIndexTime($indexName); if ($lastDiffIndexTime === null && $lastFullIndexTime === null) { $this->indexer->updateIndexFull($indexName); } } } /** * @return void */ public function cleanup() { // Nothing to do } }