public ViewUI::getStandardButtons(&$form, FormStateInterface $form_state, $form_id, $name = NULL)
Provide a standard set of Apply/Cancel/OK buttons for the forms. Also provide a hidden op operator because the forms plugin doesn't seem to properly provide which button was clicked.
TODO: Is the hidden op operator still here somewhere, or is that part of the docblock outdated?
File
- core/modules/views_ui/src/ViewUI.php, line 279
Class
- ViewUI
- Stores UI related temporary settings.
Namespace
Drupal\views_ui
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 | public function getStandardButtons(& $form , FormStateInterface $form_state , $form_id , $name = NULL) { $form [ 'actions' ] = array ( '#type' => 'actions' , ); if ( empty ( $name )) { $name = t( 'Apply' ); if (! empty ( $this ->stack) && count ( $this ->stack) > 1) { $name = t( 'Apply and continue' ); } $names = array (t( 'Apply' ), t( 'Apply and continue' )); } // Forms that are purely informational set an ok_button flag, so we know not // to create an "Apply" button for them. if (! $form_state ->get( 'ok_button' )) { $form [ 'actions' ][ 'submit' ] = array ( '#type' => 'submit' , '#value' => $name , '#id' => 'edit-submit-' . Html::getUniqueId( $form_id ), // The regular submit handler ($form_id . '_submit') does not apply if // we're updating the default display. It does apply if we're updating // the current display. Since we have no way of knowing at this point // which display the user wants to update, views_ui_standard_submit will // take care of running the regular submit handler as appropriate. '#submit' => array ( array ( $this , 'standardSubmit' )), '#button_type' => 'primary' , ); // Form API button click detection requires the button's #value to be the // same between the form build of the initial page request, and the // initial form build of the request processing the form submission. // Ideally, the button's #value shouldn't change until the form rebuild // step. However, \Drupal\views_ui\Form\Ajax\ViewsFormBase::getForm() // implements a different multistep form workflow than the Form API does, // and adjusts $view->stack prior to form processing, so we compensate by // extending button click detection code to support any of the possible // button labels. if (isset( $names )) { $form [ 'actions' ][ 'submit' ][ '#values' ] = $names ; $form [ 'actions' ][ 'submit' ][ '#process' ] = array_merge ( array ( 'views_ui_form_button_was_clicked' ), \Drupal::service( 'element_info' )->getInfoProperty( $form [ 'actions' ][ 'submit' ][ '#type' ], '#process' , array ())); } // If a validation handler exists for the form, assign it to this button. $form [ 'actions' ][ 'submit' ][ '#validate' ][] = [ $form_state ->getFormObject(), 'validateForm' ]; } // Create a "Cancel" button. For purely informational forms, label it "OK". $cancel_submit = function_exists( $form_id . '_cancel' ) ? $form_id . '_cancel' : array ( $this , 'standardCancel' ); $form [ 'actions' ][ 'cancel' ] = array ( '#type' => 'submit' , '#value' => ! $form_state ->get( 'ok_button' ) ? t( 'Cancel' ) : t( 'Ok' ), '#submit' => array ( $cancel_submit ), '#validate' => array (), '#limit_validation_errors' => array (), ); // Compatibility, to be removed later: // TODO: When is "later"? // We used to set these items on the form, but now we want them on the $form_state: if (isset( $form [ '#title' ])) { $form_state ->set( 'title' , $form [ '#title' ]); } if (isset( $form [ '#section' ])) { $form_state ->set( '#section' , $form [ '#section' ]); } // Finally, we never want these cached -- our object cache does that for us. $form [ '#no_cache' ] = TRUE; } |
Please login to continue.