public ViewsFormBase::getForm(ViewEntityInterface $view, $display_id, $js)
Creates a new instance of this form.
@todo When https://www.drupal.org/node/1843224 is in, this will return \Drupal\Core\Ajax\AjaxResponse instead of the array of AJAX commands.
Parameters
\Drupal\views\ViewEntityInterface $view: The view being edited.
string|null $display_id: The display ID being edited, or NULL to load the first available display.
string $js: If this is an AJAX form, it will be the string 'ajax'. Otherwise, it will be 'nojs'. This determines the response.
Return value
array An form for a specific operation in the Views UI, or an array of AJAX commands to render a form.
Overrides ViewsFormInterface::getForm
File
- core/modules/views_ui/src/Form/Ajax/ViewsFormBase.php, line 86
Class
- ViewsFormBase
- Provides a base class for Views UI AJAX forms.
Namespace
Drupal\views_ui\Form\Ajax
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | public function getForm(ViewEntityInterface $view , $display_id , $js ) { $form_state = $this ->getFormState( $view , $display_id , $js ); $view = $form_state ->get( 'view' ); $key = $form_state ->get( 'form_key' ); // @todo Remove the need for this. \Drupal::moduleHandler()->loadInclude( 'views_ui' , 'inc' , 'admin' ); // Reset the cache of IDs. Drupal rather aggressively prevents ID // duplication but this causes it to remember IDs that are no longer even // being used. Html::resetSeenIds(); // check to see if this is the top form of the stack. If it is, pop // it off; if it isn't, the user clicked somewhere else and the stack is // now irrelevant. if (! empty ( $view ->stack)) { $identifier = implode( '-' , array_filter ([ $key , $view ->id(), $display_id , $form_state ->get( 'type' ), $form_state ->get( 'id' )])); // Retrieve the first form from the stack without changing the integer keys, // as they're being used for the "2 of 3" progress indicator. reset( $view ->stack); list( $key , $top ) = each( $view ->stack); unset( $view ->stack[ $key ]); if ( array_shift ( $top ) != $identifier ) { $view ->stack = array (); } } // Automatically remove the form cache if it is set and the key does // not match. This way navigating away from the form without hitting // update will work. if (isset( $view ->form_cache) && $view ->form_cache[ 'key' ] != $key ) { unset( $view ->form_cache); } $form_class = get_class( $form_state ->getFormObject()); $response = $this ->ajaxFormWrapper( $form_class , $form_state ); // If the form has not been submitted, or was not set for rerendering, stop. if (! $form_state ->isSubmitted() || $form_state ->get( 'rerender' )) { return $response ; } // Sometimes we need to re-generate the form for multi-step type operations. if (! empty ( $view ->stack)) { $stack = $view ->stack; $top = array_shift ( $stack ); // Build the new form state for the next form in the stack. $reflection = new \ReflectionClass( $view :: $forms [ $top [1]]); /** @var $form_state \Drupal\Core\Form\FormStateInterface */ $form_state = $reflection ->newInstanceArgs( array_slice ( $top , 3, 2))->getFormState( $view , $top [2], $form_state ->get( 'ajax' )); $form_class = get_class( $form_state ->getFormObject()); $form_state ->setUserInput( array ()); $form_url = views_ui_build_form_url( $form_state ); if (! $form_state ->get( 'ajax' )) { return new RedirectResponse( $form_url ->setAbsolute()->toString()); } $form_state ->set( 'url' , $form_url ); $response = $this ->ajaxFormWrapper( $form_class , $form_state ); } elseif (! $form_state ->get( 'ajax' )) { // if nothing on the stack, non-js forms just go back to the main view editor. $display_id = $form_state ->get( 'display_id' ); return new RedirectResponse( $this ->url( 'entity.view.edit_display_form' , [ 'view' => $view ->id(), 'display_id' => $display_id ], [ 'absolute' => TRUE])); } else { $response = new AjaxResponse(); $response ->addCommand( new CloseModalDialogCommand()); $response ->addCommand( new ShowButtonsCommand(! empty ( $view ->changed))); $response ->addCommand( new TriggerPreviewCommand()); if ( $page_title = $form_state ->get( 'page_title' )) { $response ->addCommand( new ReplaceTitleCommand( $page_title )); } } // If this form was for view-wide changes, there's no need to regenerate // the display section of the form. if ( $display_id !== '' ) { \Drupal::entityManager()->getFormObject( 'view' , 'edit' )->rebuildCurrentTab( $view , $response , $display_id ); } return $response ; } |
Please login to continue.