public AddHandler::buildForm(array $form, FormStateInterface $form_state)
Form constructor.
Parameters
array $form: An associative array containing the structure of the form.
\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.
Return value
array The form structure.
Overrides FormInterface::buildForm
File
- core/modules/views_ui/src/Form/Ajax/AddHandler.php, line 47
Class
- AddHandler
- Provides a form for adding an item in the Views UI.
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 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 | public function buildForm( array $form , FormStateInterface $form_state ) { $view = $form_state ->get( 'view' ); $display_id = $form_state ->get( 'display_id' ); $type = $form_state ->get( 'type' ); $form = array ( 'options' => array ( '#theme_wrappers' => array ( 'container' ), '#attributes' => array ( 'class' => array ( 'scroll' ), 'data-drupal-views-scroll' => TRUE), ), ); $executable = $view ->getExecutable(); if (! $executable ->setDisplay( $display_id )) { $form [ 'markup' ] = array ( '#markup' => $this ->t( 'Invalid display id @display' , array ( '@display' => $display_id ))); return $form ; } $display = & $executable ->displayHandlers->get( $display_id ); $types = ViewExecutable::getHandlerTypes(); $ltitle = $types [ $type ][ 'ltitle' ]; $section = $types [ $type ][ 'plural' ]; if (! empty ( $types [ $type ][ 'type' ])) { $type = $types [ $type ][ 'type' ]; } $form [ '#title' ] = $this ->t( 'Add @type' , array ( '@type' => $ltitle )); $form [ '#section' ] = $display_id . 'add-handler' ; // Add the display override dropdown. views_ui_standard_display_dropdown( $form , $form_state , $section ); // Figure out all the base tables allowed based upon what the relationships provide. $base_tables = $executable ->getBaseTables(); $options = Views::viewsDataHelper()->fetchFields( array_keys ( $base_tables ), $type , $display ->useGroupBy(), $form_state ->get( 'type' )); if (! empty ( $options )) { $form [ 'override' ][ 'controls' ] = array ( '#theme_wrappers' => array ( 'container' ), '#id' => 'views-filterable-options-controls' , '#attributes' => [ 'class' => [ 'form--inline' , 'views-filterable-options-controls' ]], ); $form [ 'override' ][ 'controls' ][ 'options_search' ] = array ( '#type' => 'textfield' , '#title' => $this ->t( 'Search' ), ); $groups = array ( 'all' => $this ->t( '- All -' )); $form [ 'override' ][ 'controls' ][ 'group' ] = array ( '#type' => 'select' , '#title' => $this ->t( 'Category' ), '#options' => array (), ); $form [ 'options' ][ 'name' ] = array ( '#prefix' => '<div class="views-radio-box form-checkboxes views-filterable-options">' , '#suffix' => '</div>' , '#type' => 'tableselect' , '#header' => array ( 'title' => $this ->t( 'Title' ), 'group' => $this ->t( 'Category' ), 'help' => $this ->t( 'Description' ), ), '#js_select' => FALSE, ); $grouped_options = array (); foreach ( $options as $key => $option ) { $group = preg_replace( '/[^a-z0-9]/' , '-' , strtolower ( $option [ 'group' ])); $groups [ $group ] = $option [ 'group' ]; $grouped_options [ $group ][ $key ] = $option ; if (! empty ( $option [ 'aliases' ]) && is_array ( $option [ 'aliases' ])) { foreach ( $option [ 'aliases' ] as $id => $alias ) { if ( empty ( $alias [ 'base' ]) || ! empty ( $base_tables [ $alias [ 'base' ]])) { $copy = $option ; $copy [ 'group' ] = $alias [ 'group' ]; $copy [ 'title' ] = $alias [ 'title' ]; if (isset( $alias [ 'help' ])) { $copy [ 'help' ] = $alias [ 'help' ]; } $group = preg_replace( '/[^a-z0-9]/' , '-' , strtolower ( $copy [ 'group' ])); $groups [ $group ] = $copy [ 'group' ]; $grouped_options [ $group ][ $key . '$' . $id ] = $copy ; } } } } foreach ( $grouped_options as $group => $group_options ) { foreach ( $group_options as $key => $option ) { $form [ 'options' ][ 'name' ][ '#options' ][ $key ] = array ( '#attributes' => array ( 'class' => array ( 'filterable-option' , $group ), ), 'title' => array ( 'data' => array ( '#title' => $option [ 'title' ], '#plain_text' => $option [ 'title' ], ), 'class' => array ( 'title' ), ), 'group' => $option [ 'group' ], 'help' => array ( 'data' => $option [ 'help' ], 'class' => array ( 'description' ), ), ); } } $form [ 'override' ][ 'controls' ][ 'group' ][ '#options' ] = $groups ; } else { $form [ 'options' ][ 'markup' ] = array ( '#markup' => '<div class="js-form-item form-item">' . $this ->t( 'There are no @types available to add.' , array ( '@types' => $ltitle )) . '</div>' , ); } // Add a div to show the selected items $form [ 'selected' ] = array ( '#type' => 'item' , '#markup' => '<span class="views-ui-view-title">' . $this ->t( 'Selected:' ) . '</span> ' . '<div class="views-selected-options"></div>' , '#theme_wrappers' => array ( 'form_element' , 'views_ui_container' ), '#attributes' => array ( 'class' => array ( 'container-inline' , 'views-add-form-selected' , 'views-offset-bottom' ), 'data-drupal-views-offset' => 'bottom' , ), ); $view ->getStandardButtons( $form , $form_state , 'views_ui_add_handler_form' , $this ->t( 'Add and configure @types' , array ( '@types' => $ltitle ))); // Remove the default submit function. $form [ 'actions' ][ 'submit' ][ '#submit' ] = array_filter ( $form [ 'actions' ][ 'submit' ][ '#submit' ], function ( $var ) { return !( is_array ( $var ) && isset( $var [1]) && $var [1] == 'standardSubmit' ); }); $form [ 'actions' ][ 'submit' ][ '#submit' ][] = array ( $view , 'submitItemAdd' ); return $form ; } |
Please login to continue.