/** * Handle the filter. * * @param Builder $query * @param SearchFilterInterface $filter */ public function handle(Builder $query, TableBuilder $builder, SearchFilterInterface $filter) { $stream = $filter->getStream(); $model = $builder->getTableModel(); /** * If the model is translatable then * join it's translations so they * are filterable too. * * @var EloquentQueryBuilder $query */ if ($model->getTranslationModelName() && !$query->hasJoin($model->getTranslationTableName())) { $query->leftJoin($model->getTranslationTableName(), $model->getTableName() . '.id', '=', $model->getTranslationTableName() . '.' . $model->getRelationKey()); } $query->where(function (Builder $query) use($filter, $stream) { foreach ($filter->getColumns() as $column) { $query->orWhere($column, 'LIKE', "%{$filter->getValue()}%"); } foreach ($filter->getFields() as $field) { $filter->setField($field); $fieldType = $stream->getFieldType($field); $fieldTypeQuery = $fieldType->getQuery(); $fieldTypeQuery->setConstraint('or'); $this->container->call([$fieldTypeQuery, 'filter'], compact('query', 'filter', 'builder')); } }); }
/** * Handle the command. * * @param Container $container */ public function handle(Container $container) { /** * Set the default options handler based * on the builder class. Defaulting to * no handler. */ if (!$this->builder->getRepository()) { $model = $this->builder->getTableModel(); if (!$this->builder->getRepository() && $model instanceof EntryModel) { $this->builder->setRepository($container->make(EntryTableRepository::class, compact('model'))); } elseif (!$this->builder->getRepository() && $model instanceof EloquentModel) { $this->builder->setRepository($container->make(EloquentTableRepository::class, compact('model'))); } } }
/** * Save the order of the entries. * * @param TableBuilder $builder * @param Request $request */ public function handle(TableBuilder $builder, Request $request) { $count = 0; $model = $builder->getTableModel(); /* @var EloquentModel $entry */ foreach ($request->get($builder->getTableOption('prefix') . 'order', []) as $k => $id) { if ($entry = $model->find($id)) { $entry->sort_order = $k + 1; $entry->save(); $count++; } } $builder->fire('reordered', compact('count', 'builder')); $this->messages->success(trans('streams::message.reorder_success', compact('count'))); }
/** * ExportAll the selected entries. * * @param TableBuilder $builder * @param ResponseFactory $response * @param array $selected */ public function handle(TableBuilder $builder, ResponseFactory $response, array $selected) { $model = $builder->getTableModel(); $stream = $builder->getTableStream(); $headers = ['Content-Disposition' => 'attachment; filename=' . $stream->getSlug() . '.csv', 'Cache-Control' => 'must-revalidate, post-check=0, pre-check=0', 'Content-type' => 'text/csv', 'Pragma' => 'public', 'Expires' => '0']; $callback = function () use($selected, $model) { $output = fopen('php://output', 'w'); /* @var EloquentModel $entry */ foreach ($model->all() as $k => $entry) { if ($k == 0) { fputcsv($output, array_keys($entry->toArray())); } fputcsv($output, $entry->toArray()); } fclose($output); }; $builder->setTableResponse($response->stream($callback, 200, $headers)); }
/** * Delete the selected entries. * * @param TableBuilder $builder * @param array $selected */ public function handle(TableBuilder $builder, array $selected) { $count = 0; $model = $builder->getTableModel(); /* @var EloquentModel $entry */ foreach ($selected as $id) { $entry = $model->find($id); if ($entry && $entry->isDeletable() && $entry->delete()) { $builder->fire('row_deleted', compact('builder', 'model', 'entry')); $count++; } } if ($count) { $builder->fire('rows_deleted', compact('count', 'builder', 'model')); } if ($selected) { $this->messages->success(trans('streams::message.delete_success', compact('count'))); } }
/** * ForceDelete the selected entries. * * @param TableBuilder $builder * @param array $selected */ public function handle(TableBuilder $builder, EloquentRepositoryInterface $repository, array $selected) { $count = 0; $repository->setModel($builder->getTableModel()); /* @var EloquentModel $entry */ foreach ($selected as $id) { if ($entry = $repository->findTrashed($id)) { if ($entry->trashed() && $repository->forceDelete($entry)) { $builder->fire('row_deleted', compact('builder', 'model', 'entry')); $count++; } } } if ($count) { $builder->fire('rows_deleted', compact('count', 'builder', 'model')); } if ($selected) { $this->messages->success(trans('streams::message.delete_success', compact('count'))); } }