indexer = $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', KernelEvents::TERMINATE => 'onKernelTerminate', ]; } public function onStructureChange(RecordStructureEvent $event) { $databox = $event->getDatabox(); $this->indexer->migrateMappingForDatabox($databox); } public function onCollectionChange(CollectionEvent $event) { $collection = $event->getCollection(); $this->indexer->scheduleRecordsFromCollectionForIndexing($collection); } public function onRecordChange(RecordEvent $event) { if ($event instanceof RecordSubDefinitionCreatedEvent && $event->getSubDefinitionName() !== 'thumbnail') { return; } $record = $event->getRecord(); $this->indexer->indexRecord($record); } public function onRecordDelete(RecordDeletedEvent $event) { $record = $event->getRecord(); $this->indexer->deleteRecord($record); } public function onKernelTerminate(PostResponseEvent $event) { // TODO flush queue synchronously in CLI (think task manager) $this->indexer->flushQueue(); } }