Ejemplo n.º 1
0
 /**
  * Execute the console command.
  *
  * @param Search                    $search
  * @param IndexManager              $manager
  * @param StreamRepositoryInterface $streams
  */
 public function fire(Search $search, IndexManager $manager, StreamRepositoryInterface $streams, EntryRepositoryInterface $repository)
 {
     $stream = $this->argument('stream');
     list($namespace, $slug) = explode('.', $stream);
     if (!($stream = $streams->findBySlugAndNamespace($slug, $namespace))) {
         $this->error('Stream [' . $this->argument('stream') . '] could not be found.');
         return;
     }
     /* @var EntryModel $model */
     $repository->setModel($model = $stream->getEntryModel());
     /**
      * If the stream is empty we can't
      * really index it.
      */
     if (!($entry = $repository->first())) {
         $this->error('Stream [' . $this->argument('stream') . '] is empty.');
     }
     /**
      * If the stream does not have a valid
      * search configuration then we don't
      * know how to insert it's entries.
      */
     if (!($config = $this->dispatch(new GetConfig($entry)))) {
         $this->error('Stream [' . $this->argument('stream') . '] does not have a search configuration.');
     }
     $this->info('Deleting ' . $this->argument('stream'));
     $search->search('stream', $stream)->delete();
     $this->info('Rebuilding ' . $this->argument('stream'));
     $this->output->progressStart($repository->count());
     foreach ($repository->all() as $entry) {
         $manager->insert($entry, $config);
         $this->output->progressAdvance();
     }
     $this->output->progressFinish();
 }
Ejemplo n.º 2
0
 /**
  * Handle the command.
  *
  * @param ModuleCollection $modules
  * @param Decorator        $decorator
  * @param Repository       $config
  * @param Container        $container
  * @param Request          $request
  * @param Search           $search
  * @return LengthAwarePaginator
  */
 public function handle(ModuleCollection $modules, Decorator $decorator, Repository $config, Container $container, Request $request, Search $search)
 {
     /* @var Query $query */
     $query = $search->index($this->criteria->option('index', 'default'));
     $constraint = $this->criteria->option('in');
     if (!empty($constraint) && is_string($constraint)) {
         $query = $query->search('stream', $constraint, ['required' => true]);
     }
     if (!empty($constraint) && is_array($constraint)) {
         /* @var Module $module */
         foreach ($modules->withConfig('search') as $module) {
             foreach ($config->get($module->getNamespace('search')) as $model => $definition) {
                 /* @var EntryInterface $model */
                 $model = $container->make($model);
                 $stream = $model->getStreamNamespace() . '.' . $model->getStreamSlug();
                 if (!in_array($stream, $constraint)) {
                     $query = $query->search('stream', $stream, ['required' => false, 'prohibited' => true]);
                 }
             }
         }
     }
     foreach ($this->criteria->getOperations() as $operation) {
         $query = call_user_func_array([$query, $operation['name']], $operation['arguments']);
     }
     $page = $request->get('page', 1);
     $perPage = $this->criteria->option('paginate', $this->criteria->option('limit', 15));
     $query->limit($perPage, ($page - 1) * $perPage);
     $collection = new SearchCollection(array_map(function ($result) use($decorator) {
         return $decorator->decorate(new SearchItem($result));
     }, $query->get()));
     return (new LengthAwarePaginator($collection, $query->count(), $perPage, $page))->setPath($request->path())->appends($request->all());
 }
Ejemplo n.º 3
0
 /**
  * Execute the console command.
  *
  * @param ModuleCollection $modules
  * @param Repository       $config
  * @param Search           $search
  * @param Kernel           $console
  */
 public function fire(ModuleCollection $modules, Repository $config, Search $search, Kernel $console)
 {
     $stream = $this->argument('stream');
     if (!$stream) {
         $this->info('Destroying index');
         $console->call('search:destroy');
     } else {
         $this->info('Deleting ' . $stream);
         $search->search('stream', $stream)->delete();
     }
     /* @var Module $module */
     foreach ($modules->withConfig('search') as $module) {
         foreach ($config->get($module->getNamespace('search')) as $model => $search) {
             /* @var EntryModel $model */
             $model = new $model();
             if (!$stream || $stream == $model->getStreamNamespace() . '.' . $model->getStreamSlug()) {
                 $this->info('Rebuilding ' . $stream);
                 $this->output->progressStart($model->count());
                 foreach ($model->all() as $entry) {
                     $entry->save();
                     $this->output->progressAdvance();
                 }
                 $this->output->progressFinish();
             }
         }
     }
 }
Ejemplo n.º 4
0
 /**
  * Delete the selected entries.
  *
  * @param Search|Search $search
  * @param array        $selected
  */
 public function handle(Search $search, array $selected)
 {
     foreach ($selected as $id) {
         $search->delete($id);
     }
     if ($selected) {
         $this->messages->success(trans('streams::message.delete_success', ['count' => count($selected)]));
     }
 }
Ejemplo n.º 5
0
 /**
  * Deletes search index entry
  */
 public function deleteSearchIndex()
 {
     $search = new Search();
     $search->index($this->table)->delete($this->id);
 }
Ejemplo n.º 6
0
 /**
  * Destroy the index.
  */
 public function destroy()
 {
     $this->search->deleteIndex();
 }
Ejemplo n.º 7
0
 /**
  * Handles full text search
  * 
  * @param string $search Search string
  * @param string $index Search index
  * @return Array
  */
 protected function search($search, $index)
 {
     $search_instance = new Search();
     $result = $search_instance->index($index)->search(null, $search)->get();
     $array = $this->formIdsArray($result);
     return $array;
 }