/** * Default the form actions when none are defined. * * @param FormBuilder $builder */ public function defaults(FormBuilder $builder) { if ($builder->getActions() === []) { if ($builder->getFormMode() == 'create') { $builder->setActions(['save', 'save_create']); } else { $builder->setActions(['update', 'save_exit']); } } }
/** * Normalize action input. * * @param FormBuilder $builder */ public function normalize(FormBuilder $builder) { $form = $builder->getForm(); $actions = $builder->getActions(); $prefix = $form->getOption('prefix'); foreach ($actions as $slug => &$action) { $action = $this->process($prefix, $slug, $action); } $builder->setActions($actions); }
/** * Guess the action's enabled parameter. * * @param FormBuilder $builder */ public function guess(FormBuilder $builder) { $actions = $builder->getActions(); $mode = $builder->getFormMode(); foreach ($actions as &$action) { if (isset($action['enabled']) && is_bool($action['enabled'])) { return; } if (isset($action['enabled']) && is_string($action['enabled'])) { $action['enabled'] = $mode === $action['enabled']; } } $builder->setActions($actions); }
/** * Merge in registered properties. * * @param FormBuilder $builder */ public function merge(FormBuilder $builder) { $actions = $builder->getActions(); foreach ($actions as &$parameters) { $action = $original = array_pull($parameters, 'action'); if ($action && ($action = $this->actions->get($action))) { $parameters = array_replace_recursive($action, array_except($parameters, 'action')); } $button = array_get($parameters, 'button', $original); if ($button && ($button = $this->buttons->get($button))) { $parameters = array_replace_recursive($button, array_except($parameters, 'button')); } } $builder->setActions($actions); }
/** * Guess the action's enabled parameter. * * @param FormBuilder $builder */ public function guess(FormBuilder $builder) { $actions = $builder->getActions(); $mode = $builder->getFormMode(); foreach ($actions as &$action) { if (!isset($action['enabled'])) { continue; } if (is_bool($action['enabled'])) { continue; } $action['enabled'] = $mode === $action['enabled']; } $builder->setActions($actions); }
/** * Guess some some form action parameters. * * @param FormBuilder $builder */ public function guess(FormBuilder $builder) { $actions = $builder->getActions(); $section = $this->sections->active(); reset($actions); $first = key($actions); foreach ($actions as $key => &$action) { // If we already have an HREF then skip it. if (isset($action['redirect'])) { continue; } if ($key == $first && ($redirect = $builder->getOption('redirect'))) { $action['redirect'] = $redirect; continue; } // Determine the HREF based on the action type. switch (array_get($action, 'action')) { case 'save': case 'submit': case 'save_exit': $action['redirect'] = $section ? $section->getHref() : $this->request->fullUrl(); break; case 'update': case 'save_edit': case 'save_continue': $action['redirect'] = function () use($section, $builder) { if ($section && $builder->getFormMode() == 'create') { return $section->getHref('edit/' . $builder->getContextualId()); } return $this->request->fullUrl(); }; break; case 'save_edit_next': $ids = array_filter(explode(',', $builder->getRequestValue('edit_next'))); if (!$ids) { $action['redirect'] = $section ? $section->getHref() : $this->request->fullUrl(); } elseif (count($ids) == 1) { $action['redirect'] = $section ? $section->getHref('edit/' . array_shift($ids)) : $this->request->fullUrl(); } else { $action['redirect'] = $section ? $section->getHref('edit/' . array_shift($ids) . '?' . $builder->getOption('prefix') . 'edit_next=' . implode(',', $ids)) : $this->request->fullUrl(); } break; } } $builder->setActions($actions); }
/** * Build dropdown items. * * @param FormBuilder $builder */ public function build(FormBuilder $builder) { $actions = $builder->getActions(); foreach ($actions as $key => &$action) { if ($dropdown = array_get($action, 'parent')) { foreach ($actions as &$parent) { if (array_get($parent, 'slug') == $dropdown) { if (!isset($parent['dropdown'])) { $parent['dropdown'] = []; } $parent['dropdown'][] = $action; } } } } $builder->setActions($actions); }
/** * Guess some some form action parameters. * * @param FormBuilder $builder */ public function guess(FormBuilder $builder) { $actions = $builder->getActions(); $section = $this->sections->active(); reset($actions); $first = key($actions); foreach ($actions as $key => &$action) { /* * If we already have an * HREF then skip it. */ if (isset($action['redirect'])) { continue; } /* * If this is the first action and the * form builder has a redirect option * then use it for the action redirect. */ if ($key == $first && ($redirect = $builder->getOption('redirect'))) { $action['redirect'] = $redirect; continue; } /* * If we're not in admin then just assume we * need to head back to the form. No redirect * will redirect back in this case. */ if ($this->request->segment(1) !== 'admin') { continue; } // Determine the HREF based on the action type. switch (array_get($action, 'action')) { case 'save': case 'submit': case 'save_exit': $action['redirect'] = $section ? $section->getHref() : $this->request->fullUrl(); break; case 'save_create': $action['redirect'] = $this->request->fullUrl(); break; case 'update': case 'save_edit': case 'save_continue': $action['redirect'] = function () use($section, $builder) { if ($section && $builder->getFormMode() == 'create') { return $section->getHref('edit/' . $builder->getContextualId()); } return $this->request->fullUrl(); }; break; case 'save_edit_next': $ids = array_filter(explode(',', $builder->getRequestValue('edit_next'))); if (!$ids) { $action['redirect'] = $section ? $section->getHref() : $this->request->fullUrl(); } elseif (count($ids) == 1) { $action['redirect'] = $section ? $section->getHref('edit/' . array_shift($ids)) : $this->request->fullUrl(); } else { $action['redirect'] = $section ? $section->getHref('edit/' . array_shift($ids) . '?' . $builder->getOption('prefix') . 'edit_next=' . implode(',', $ids)) : $this->request->fullUrl(); } break; } } $builder->setActions($actions); }
/** * Predict if the save_and_edit_next action * should be included. * * @param FormBuilder $builder */ public function predict(FormBuilder $builder) { if (array_filter(explode(',', $builder->getRequestValue('edit_next')))) { $builder->setActions(array_merge(['save_edit_next'], $builder->getActions())); } }
/** * Parse the form buttons. * * @param FormBuilder $builder */ public function parse(FormBuilder $builder) { $entry = $builder->getFormEntry(); $builder->setActions($this->parser->parse($builder->getActions(), compact('entry'))); }
/** * Resolve form actions. * * @param FormBuilder $builder */ public function resolve(FormBuilder $builder) { $this->resolver->resolve($builder->getActions(), compact('builder')); }