container->tag([ Seeders\DiscussionSeeder::class, Seeders\CommentSeeder::class, ], 'blomstra.search.seeders'); /** @var SettingsRepositoryInterface $settings */ $settings = $this->container->make(SettingsRepositoryInterface::class); /** @var Config $config */ $config = $this->container->make(Config::class); $this->container->singleton(Elastic::class, function (Container $container) use ($settings, $config) { $builder = ClientBuilder::create() ->setHosts([$settings->get('blomstra-search.elastic-endpoint')]); if ($config->inDebugMode()) { $builder->setLogger($container->make(LoggerInterface::class)); } if ($settings->get('blomstra-search.elastic-username')) { $builder->setBasicAuthentication( $settings->get('blomstra-search.elastic-username'), $settings->get('blomstra-search.elastic-password') ); } return $builder->build(); }); $this->container->instance( 'blomstra.search.elastic_index', $settings->get('blomstra-search.elastic-index', 'flarum') ); $this->container->extend( Client::class, function () { $pipe = new MiddlewarePipe(); $exclude = resolve('flarum.api_client.exclude_middleware'); $middlewareStack = array_filter(resolve('flarum.api.middleware'), function ($middlewareClass) use ($exclude) { return !in_array($middlewareClass, $exclude); }); foreach ($middlewareStack as $middleware) { $pipe->pipe(resolve($middleware)); } $pipe->pipe(new ExecuteRoute()); return new Api\Client($pipe); } ); } public function boot() { /** @var array|string[] $seeders */ $seeders = $this->container->tagged('blomstra.search.seeders'); /** @var Dispatcher $events */ $events = resolve(Dispatcher::class); /** @var Queue $queue */ $queue = resolve(Queue::class); /** @var string|Seeders\Seeder $seeder */ foreach ($seeders as $seeder) { $seeder::savingOn($events, function ($model) use ($queue, $seeder) { $queue->pushOn(Job::$onQueue, new SavingJob(Collection::make([$model]), $seeder)); }); $seeder::deletingOn($events, function ($model) use ($queue, $seeder) { $queue->pushOn(Job::$onQueue, new DeletingJob(Collection::make([$model]), $seeder)); }); } } }