/**
  * Set the form model object from the builder's model.
  *
  * @param SetDefaultParameters $command
  */
 public function handle()
 {
     /*
      * Set the form mode according
      * to the builder's entry.
      */
     if (!$this->builder->getFormMode()) {
         $this->builder->setFormMode($this->builder->getFormEntryId() || $this->builder->getEntry() ? 'edit' : 'create');
     }
     /*
      * Next we'll loop each property and look for a handler.
      */
     $reflection = new \ReflectionClass($this->builder);
     /* @var \ReflectionProperty $property */
     foreach ($reflection->getProperties(\ReflectionProperty::IS_PROTECTED) as $property) {
         if (in_array($property->getName(), $this->skips)) {
             continue;
         }
         /*
          * If there is no getter then skip it.
          */
         if (!method_exists($this->builder, $method = 'get' . ucfirst($property->getName()))) {
             continue;
         }
         /*
          * If the parameter already
          * has a value then skip it.
          */
         if ($this->builder->{$method}()) {
             continue;
         }
         /*
          * Check if we can transform the
          * builder property into a handler.
          * If it exists, then go ahead and use it.
          */
         $handler = str_replace('FormBuilder', 'Form' . ucfirst($property->getName()), get_class($this->builder));
         if (class_exists($handler)) {
             /*
              * Make sure the handler is
              * formatted properly.
              */
             if (!str_contains($handler, '@')) {
                 $handler .= '@handle';
             }
             $this->builder->{'set' . ucfirst($property->getName())}($handler);
             continue;
         }
         /*
          * If the handler does not exist and
          * we have a default handler, use it.
          */
         if ($default = array_get($this->defaults, $property->getName())) {
             $this->builder->{'set' . ucfirst($property->getName())}($default);
         }
     }
 }
Ejemplo n.º 2
0
 /**
  * Handle the command.
  *
  * @param Container            $container
  * @param ViewTemplate         $template
  * @param BreadcrumbCollection $breadcrumbs
  */
 public function handle(Container $container, ViewTemplate $template, BreadcrumbCollection $breadcrumbs)
 {
     $form = $this->builder->getForm();
     if ($handler = $form->getOption('data')) {
         $container->call($handler, compact('form'));
     }
     if ($layout = $form->getOption('layout_view')) {
         $template->put('layout', $layout);
     }
     if ($title = $form->getOption('title')) {
         $template->put('title', $title);
     }
     // Move this to options so we can read it.
     $this->builder->setFormOption('read_only', $this->builder->isReadOnly());
     $form->addData('form', $form);
     if ($breadcrumb = $form->getOption('breadcrumb', 'streams::form.mode.' . $this->builder->getFormMode())) {
         $breadcrumbs->put($breadcrumb, '#');
     }
 }
Ejemplo n.º 3
0
 /**
  * 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']);
         }
     }
 }
 /**
  * Guess the field instructions.
  *
  * @param FormBuilder $builder
  */
 public function guess(FormBuilder $builder)
 {
     $fields = $builder->getFields();
     $mode = $builder->getFormMode();
     foreach ($fields as &$field) {
         // Guess based on the form mode if applicable.
         if (in_array((string) ($disabled = array_get($field, 'disabled', null)), ['create', 'edit'])) {
             $field['disabled'] = $disabled === $mode;
         }
     }
     $builder->setFields($fields);
 }
Ejemplo n.º 5
0
 /**
  * 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);
 }
Ejemplo n.º 6
0
 /**
  * Guess the HREF for a button.
  *
  * @param FormBuilder $builder
  */
 public function guess(FormBuilder $builder)
 {
     $buttons = $builder->getButtons();
     $mode = $builder->getFormMode();
     foreach ($buttons as &$button) {
         if (!isset($button['enabled'])) {
             continue;
         }
         if (is_bool($button['enabled'])) {
             continue;
         }
         $button['enabled'] = $mode === $button['enabled'];
     }
     $builder->setButtons($buttons);
 }
Ejemplo n.º 7
0
 /**
  * Guess the HREF for a button.
  *
  * @param FormBuilder $builder
  */
 public function guess(FormBuilder $builder)
 {
     $buttons = $builder->getButtons();
     $mode = $builder->getFormMode();
     foreach ($buttons as &$button) {
         if (isset($button['enabled']) && is_bool($button['enabled'])) {
             return;
         }
         switch (array_get($button, 'button')) {
             case 'delete':
                 $button['enabled'] = $mode === 'edit';
                 break;
         }
     }
     $builder->setButtons($buttons);
 }
 /**
  * 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);
 }
 /**
  * Guess the field required flag.
  *
  * @param FormBuilder $builder
  */
 public function guess(FormBuilder $builder)
 {
     $fields = $builder->getFields();
     $mode = $builder->getFormMode();
     $entry = $builder->getFormEntry();
     foreach ($fields as &$field) {
         // Guess based on the assignment if possible.
         if (!isset($field['required']) && $entry instanceof EntryInterface && ($assignment = $entry->getAssignment($field['field']))) {
             $field['required'] = array_get($field, 'required', $assignment->isRequired());
         }
         // Guess based on the form mode if applicable.
         if (in_array($required = array_get($field, 'required'), ['create', 'edit'])) {
             $field['required'] = $required === $mode;
         }
         // Guess based on the rules.
         if (in_array('required', array_get($field, 'rules', []))) {
             $field['required'] = true;
         }
     }
     $builder->setFields($fields);
 }
Ejemplo n.º 10
0
 /**
  * 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);
 }
Ejemplo n.º 11
-1
 /**
  * Handle the command.
  */
 public function handle(MessageBag $messages, Translator $translator)
 {
     // If we can't save or there are errors then skip it.
     if ($this->builder->hasFormErrors() || !$this->builder->canSave()) {
         return;
     }
     // If there is no model and there isn't anything specific to say, skip it.
     if (!$this->builder->getFormEntry() && !$this->builder->getFormOption('success_message')) {
         return;
     }
     $mode = $this->builder->getFormMode();
     // False means no message is desired.
     if ($this->builder->getFormOption('success_message') === false) {
         return;
     }
     $entry = $this->builder->getFormEntry();
     $stream = $this->builder->getFormStream();
     $parameters = ['title' => is_object($entry) ? $entry->getTitle() : null, 'name' => is_object($stream) ? $stream->getName() : null];
     // If the name doesn't exist we need to be clever.
     if (str_contains($parameters['name'], '::') && !$translator->has($parameters['name']) && $stream) {
         $parameters['name'] = ucfirst(str_singular(str_replace('_', ' ', $stream->getSlug())));
     } elseif ($parameters['name']) {
         $parameters['name'] = str_singular(trans($parameters['name']));
     } else {
         $parameters['name'] = trans('streams::entry.name');
     }
     /**
      * Set the default success message.
      */
     if ($this->builder->getFormOption('success_message') === null) {
         $this->builder->setFormOption('success_message', trans('streams::message.' . $mode . '_success', $parameters));
     }
     $messages->{$this->builder->getFormOption('success_message_type', 'success')}($this->builder->getFormOption('success_message'));
 }