service = $service; $this->indexer = $indexer; $this->config = $config; } /** * @throws SuperSearchExceptionInterface * * @return void */ public function execute() { // Prüfen ob Full-Index-Cronjob bereits läuft > Mehrfachausführung verhindern $fullIndexActive = (int)$this->config->get('supersearch_full_index_task_mutex'); if ($fullIndexActive > 0) { throw new SchedulerTaskAlreadyRunningException( 'SuperSearch full index task is already running. Task can only run once at a time.' ); } // Full-Index-Cronjob als Aktiv markieren > // Diff-Index-Cronjob prüft den Wert und überspringt dann wenn Full-Index-Cronjob läuft. $this->config->set('supersearch_full_index_task_mutex', '1'); $this->updateIndexes(); } /** * @return void */ public function cleanup() { $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 $this->indexer->updateIndexFull($indexName); } } }