indexer = $indexer; } /** @return Indexer */ public function getIndexer() { if ($this->indexer instanceof Indexer) { return $this->indexer; } $indexer = call_user_func($this->indexer); if (!$indexer instanceof Indexer) { throw new \LogicException(sprintf( 'Expects locator to return instance of %s, got %s.', Indexer::class, is_object($indexer) ? get_class($indexer) : gettype($indexer) )); } $this->indexer = $indexer; return $this->indexer; } public static function getSubscribedEvents() { return [ RecordStructureEvents::FIELD_UPDATED => 'onStructureChange', RecordStructureEvents::FIELD_DELETED => 'onStructureChange', RecordStructureEvents::STATUS_BIT_UPDATED => 'onStructureChange', RecordStructureEvents::STATUS_BIT_DELETED => 'onStructureChange', CollectionEvents::NAME_CHANGED => 'onCollectionChange', RecordEvents::CREATED => 'onRecordChange', RecordEvents::DELETED => 'onRecordDelete', RecordEvents::COLLECTION_CHANGED => 'onRecordChange', RecordEvents::METADATA_CHANGED => 'onRecordChange', RecordEvents::ORIGINAL_NAME_CHANGED => 'onRecordChange', RecordEvents::STATUS_CHANGED => 'onRecordChange', RecordEvents::SUB_DEFINITION_CREATED => 'onRecordChange', RecordEvents::MEDIA_SUBSTITUTED => 'onRecordChange', ]; } public function onStructureChange(RecordStructureEvent $event) { $databox = $event->getDatabox(); $this->getIndexer()->migrateMappingForDatabox($databox); } public function onCollectionChange(CollectionEvent $event) { $collection = $event->getCollection(); $this->getIndexer()->scheduleRecordsFromCollectionForIndexing($collection); } public function onRecordChange(RecordEvent $event) { if ($event instanceof RecordSubDefinitionCreatedEvent && $event->getSubDefinitionName() !== 'thumbnail') { return; } $record = $event->getRecord(); $this->getIndexer()->indexRecord($record); } public function onRecordDelete(RecordDeletedEvent $event) { $record = $event->getRecord(); $this->getIndexer()->deleteRecord($record); } public function flushQueue() { // Only flush queue if indexer is initialized. if ($this->indexer instanceof Indexer) { $this->getIndexer()->flushQueue(); } } }