/** * Guess the HREF for a button. * * @param TableBuilder $builder */ public function guess(TableBuilder $builder) { $buttons = $builder->getButtons(); if (!($section = $this->sections->active())) { return; } if (!($module = $this->modules->active())) { return; } $stream = $builder->getTableStream(); foreach ($buttons as &$button) { // If we already have an HREF then skip it. if (isset($button['attributes']['href'])) { continue; } switch (array_get($button, 'button')) { case 'restore': $button['attributes']['href'] = $this->url->to('entry/handle/restore/' . $module->getNamespace() . '/' . $stream->getNamespace() . '/' . $stream->getSlug() . '/{entry.id}'); break; default: // Determine the HREF based on the button type. $type = array_get($button, 'segment', array_get($button, 'button')); if ($type && !str_contains($type, '\\') && !class_exists($type)) { $button['attributes']['href'] = $section->getHref($type . '/{entry.id}'); } break; } } $builder->setButtons($buttons); }
/** * Guess the HREF for the views. * * @param TableBuilder $builder */ public function guess(TableBuilder $builder) { $views = $builder->getViews(); foreach ($views as &$view) { // Only automate it if not set. if (!isset($view['attributes']['href'])) { $view['attributes']['href'] = $this->url->to($this->request->path() . '?' . array_get($view, 'prefix') . 'view=' . $view['slug']); } } $builder->setViews($views); }
/** * Handle the command. * * @param ResponseFactory $response */ public function handle(ResponseFactory $response) { $table = $this->builder->getTable(); $options = $table->getOptions(); $data = $table->getData(); $table->setResponse($response->view($options->get('wrapper_view', $this->builder->isAjax() ? 'streams::ajax' : 'streams::blank'), $data)); }
/** * Guess the action text. * * @param TableBuilder $builder */ public function guess(TableBuilder $builder) { $actions = $builder->getActions(); $stream = $builder->getTableStream(); if (!($module = $this->modules->active())) { return; } $section = $this->controlPanel->getControlPanelActiveSection(); foreach ($actions as &$action) { /* * Nothing to do if set already. */ if (isset($action['permission'])) { continue; } /* * Try and guess the permission. */ if ($stream) { $action['permission'] = $module->getNamespace($stream->getSlug() . '.' . $action['slug']); } elseif ($section) { $action['permission'] = $module->getNamespace($section->getSlug() . '.' . $action['slug']); } } $builder->setActions($actions); }
/** * Guess the text for a button. * * @param TableBuilder $builder */ public function guess(TableBuilder $builder) { $buttons = $builder->getButtons(); if (!($module = $this->modules->active())) { return; } if (!($stream = $builder->getTableStream())) { return; } foreach ($buttons as &$button) { if (isset($button['permission'])) { continue; } /** * Try and guess the permission value. */ switch (array_get($button, 'button')) { case 'edit': $button['permission'] = $module->getNamespace($stream->getSlug() . '.write'); break; default: break; } } $builder->setButtons($buttons); }
/** * Handle the command. * * @param Request $request * @param Container $container */ public function handle(Request $request, ViewHandler $handler) { $table = $this->builder->getTable(); $options = $table->getOptions(); $views = $table->getViews(); if ($views->active()) { return; } if ($view = $views->findBySlug($request->get($options->get('prefix') . 'view'))) { $view->setActive(true); } if (!$view && ($view = $views->first())) { $view->setActive(true); } // Nothing to do. if (!$view) { return; } // Set columns from active view. if (($columns = $view->getColumns()) !== null) { $this->builder->setColumns($columns); } // Set buttons from active view. if (($buttons = $view->getButtons()) !== null) { $this->builder->setButtons($buttons); } // Set actions from active view. if (($actions = $view->getActions()) !== null) { $this->builder->setActions($actions); } $handler->handle($this->builder, $view); }
/** * Handle the command. */ public function handle() { $table = $this->builder->getTable(); $model = $this->builder->getModel(); /* * If the model is already instantiated * then use it as is. */ if (is_object($model)) { $table->setModel($model); return; } /* * If no model is set, try guessing the * model based on best practices. */ if ($model === null) { $parts = explode('\\', str_replace('TableBuilder', 'Model', get_class($this->builder))); unset($parts[count($parts) - 2]); $model = implode('\\', $parts); $this->builder->setModel($model); } /* * If the model does not exist or * is disabled then skip it. */ if (!$model || !class_exists($model)) { return; } /* * Set the model on the table! */ $table->setModel(app($model)); }
/** * Set defaults. * * @param TableBuilder $builder */ public function defaults(TableBuilder $builder) { $stream = $builder->getTableStream(); if ($builder->getColumns() == []) { $builder->setColumns([$stream->getTitleColumn()]); } }
/** * Handle the command. */ public function handle() { $stream = $this->builder->getTableStream(); if (!$stream instanceof StreamInterface) { return; } $eager = []; if ($stream->isTranslatable()) { $eager[] = 'translations'; } $assignments = $stream->getRelationshipAssignments(); foreach ($this->builder->getColumns() as $column) { /** * If the column value is a string and uses a dot * format then check if it's a relation. */ if (isset($column['value']) && is_string($column['value']) && preg_match("/^entry.([a-zA-Z\\_]+)./", $column['value'], $match)) { if ($assignment = $assignments->findByFieldSlug($match[1])) { if ($assignment->getFieldType()->getNamespace() == 'anomaly.field_type.polymorphic') { continue; } $eager[] = camel_case($match[1]); } } } $this->builder->setTableOption('eager', array_unique($this->builder->getTableOption('eager', []) + $eager)); }
/** * 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. */ public function handle(ActionExecutor $executor) { $actions = $this->builder->getTableActions(); if ($action = $actions->active()) { $executor->execute($this->builder, $action); } }
/** * Handle the command. * * @param Resolver $resolver * @param Evaluator $evaluator */ public function handle(Resolver $resolver, Evaluator $evaluator) { $evaluator->evaluate($resolver->resolve($this->builder->getOptions(), ['builder' => $this->builder]), ['builder' => $this->builder]); foreach ($this->builder->getOptions() as $key => $value) { $this->builder->setTableOption($key, $value); } }
/** * Authorize the table. * * @param TableBuilder $builder */ public function authorize(TableBuilder $builder) { // Try the option first. $permission = $builder->getTableOption('permission'); if ($permission && !$this->authorizer->authorize($permission)) { abort(403); } }
/** * Normalize button input. * * @param TableBuilder $builder */ public function normalize(TableBuilder $builder) { $buttons = $builder->getButtons(); foreach ($buttons as $key => &$button) { $button = $this->process($key, $button); } $builder->setButtons($buttons); }
/** * Set the active action. * * @param SetActiveAction $command */ public function handle() { $prefix = $this->builder->getTableOption('prefix'); $actions = $this->builder->getTableActions(); if ($action = $actions->findBySlug(app('request')->get($prefix . 'action'))) { $action->setActive(true); } }
/** * Default table views. * * @param TableBuilder $builder */ public function defaults(TableBuilder $builder) { if (!($stream = $builder->getTableStream())) { return; } if ($stream->isTrashable() && !$builder->getViews()) { $builder->setViews(['all', 'trash']); } }
/** * Save the order of the entries. * * @param SectionCollection $sections * @param TableBuilder $builder * @param array $selected */ public function handle(SectionCollection $sections, Redirector $redirector, TableBuilder $builder, array $selected) { $prefix = $builder->getTableOption('prefix'); $edit = array_shift($selected); $ids = implode(',', $selected); if ($section = $sections->active()) { $builder->setTableResponse($redirector->to($section->getHref('edit/' . $edit . '?' . $prefix . 'edit_next=' . $ids))); } }
/** * Handle the command. */ public function handle() { $table = $this->builder->getTable(); $options = $table->getOptions(); $data = $table->getData(); $content = view($options->get('table_view', $this->builder->isAjax() ? 'streams::table/ajax' : 'streams::table/table'), $data)->render(); $table->setContent($content); $table->addData('content', $content); }
/** * Normalize action input. * * @param TableBuilder $builder */ public function normalize(TableBuilder $builder) { $actions = $builder->getActions(); $prefix = $builder->getTableOption('prefix'); foreach ($actions as $slug => &$action) { $action = $this->process($prefix, $slug, $action); } $builder->setActions($actions); }
/** * Handle the command. */ public function handle() { /* @var FilterInterface $filter */ foreach ($this->builder->getTableFilters() as $filter) { if (app('request')->get($filter->getInputName())) { $filter->setActive(true); } } }
/** * Build the actions. * * @param TableBuilder $builder */ public function build(TableBuilder $builder) { $table = $builder->getTable(); $this->input->read($builder); foreach ($builder->getActions() as $action) { if (array_get($action, 'enabled', true)) { $table->addAction($this->factory->make($action)); } } }
/** * Handle the command. * * @param Request $request * @param ResponseFactory $response * @throws \Exception */ public function handle(Request $request, ResponseFactory $response) { if ($this->builder instanceof MultipleTableBuilder) { return; } $this->dispatch(new ExecuteAction($this->builder)); if (!$this->builder->getTableResponse()) { $this->builder->setTableResponse($response->redirectTo($request->fullUrl())); } }
/** * Merge in registered parameters. * * @param TableBuilder $builder */ public function merge(TableBuilder $builder) { $views = $builder->getViews(); foreach ($views as &$parameters) { if ($view = $this->views->get(array_get($parameters, 'view'))) { $parameters = array_replace_recursive($view, array_except($parameters, ['view'])); } } $builder->setViews($views); }
/** * Guess the HREF for a button. * * @param TableBuilder $builder */ public function guess(TableBuilder $builder) { $buttons = $builder->getButtons(); foreach ($buttons as &$button) { if (isset($button['permission']) && !$this->authorizer->authorize($button['permission'])) { $button['enabled'] = false; } } $builder->setButtons($buttons); }
/** * Merge in registered properties. * * @param TableBuilder $builder */ public function merge(TableBuilder $builder) { $buttons = $builder->getButtons(); foreach ($buttons as &$parameters) { if ($button = $this->buttons->get(array_get($parameters, 'button'))) { $parameters = array_replace_recursive($button, $parameters); } } $builder->setButtons($buttons); }
/** * Normalize the column input. * * @param TableBuilder $builder */ public function normalize(TableBuilder $builder) { $columns = $builder->getColumns(); foreach ($columns as $key => &$column) { /* * If the key is non-numerical then * use it as the header and use the * column as the column if it's a class. */ if (!is_numeric($key) && !is_array($column) && class_exists($column)) { $column = ['heading' => $key, 'column' => $column]; } /* * If the key is non-numerical then * use it as the header and use the * column as the value. */ if (!is_numeric($key) && !is_array($column) && !class_exists($column)) { $column = ['heading' => $key, 'value' => $column]; } /* * If the column is not already an * array then treat it as the value. */ if (!is_array($column)) { $column = ['value' => $column]; } /* * If the key is non-numerical and * the column is an array without * a heading then use the key. */ if (!is_numeric($key) && is_array($column) && !array_has($column, 'field')) { $column['field'] = $key; } /* * If the key is non-numerical and * the column is an array without * a value then use the key. */ if (!is_numeric($key) && is_array($column) && !isset($column['value'])) { $column['value'] = $key; } /* * If no value wrap is set * then use a default. */ array_set($column, 'wrapper', array_get($column, 'wrapper', '{value}')); /* * If there is no value then use NULL */ array_set($column, 'value', array_get($column, 'value', null)); } $builder->setColumns($columns); }
/** * Set the active filter. * * @param $slug * @param TableBuilder $builder */ protected function setActiveFilter($slug, TableBuilder $builder) { /* @var FilterInterface $filter */ foreach ($builder->getTableFilters() as $filter) { if ($filter->getSlug() === $slug) { $filter->setPrefix($builder->getTableOption('prefix')); $filter->setActive(true); break; } } }
/** * Set the active action. * * @param $slug * @param TableBuilder $builder */ protected function setActiveAction($slug, TableBuilder $builder) { /* @var ActionInterface $action */ foreach ($builder->getTableActions() as $action) { if ($action->getSlug() === $slug) { $action->setPrefix($builder->getTableOption('prefix')); $action->setActive(true); break; } } }
/** * Build the filters. * * @param TableBuilder $builder */ public function build(TableBuilder $builder) { $table = $builder->getTable(); $this->input->read($builder); foreach ($builder->getFilters() as $filter) { if (array_get($filter, 'enabled') === false) { continue; } $table->addFilter($this->factory->make($filter)); } }
/** * Normalize filter input. * * @param TableBuilder $builder */ public function normalize(TableBuilder $builder) { $filters = $builder->getFilters(); $stream = $builder->getTableStream(); foreach ($filters as $slug => &$filter) { /** * If the filter is a string then use * it for everything. */ if (is_string($filter) && !str_contains($filter, '/')) { $filter = ['slug' => $filter, 'field' => $filter, 'filter' => 'field']; } /** * If the filter is a class string then use * it for the filter. */ if (is_string($filter) && str_contains($filter, '/')) { $filter = ['slug' => $slug, 'filter' => $filter]; } /** * Move the slug into the filter. */ if (!isset($filter['slug'])) { $filter['slug'] = $slug; } /** * Move the slug to the filter. */ if (!isset($filter['filter'])) { $filter['filter'] = $filter['slug']; } /** * Fallback the field. */ if (!isset($filter['field']) && $stream && $stream->hasAssignment($filter['slug'])) { $filter['field'] = $filter['slug']; } /** * If there is no filter type * then assume it's the slug. */ if (!isset($filter['filter'])) { $filter['filter'] = $filter['slug']; } /** * Set the table's stream. */ if ($stream) { $filter['stream'] = $stream; } } $builder->setFilters($filters); }