$form['default_group']['All']], '', array( 'data' => \Drupal::config('views.settings')->get('ui.exposed_filter_any_label') == 'old_any' ? t('<Any>') : t('- Any -'), 'colspan' => 4, 'class' => array('class' => 'any-default-radios-row'), ), ); // Remove the 'All' default_group form element because it's added to the // table row. unset($variables['form']['default_group']['All']); foreach (Element::children($form['group_items']) as $group_id) { $form['group_items'][$group_id]['value']['#title'] = ''; $default = [ $form['default_group'][$group_id], $form['default_group_multiple'][$group_id], ]; // Remove these fields from the form since they are moved into the table. unset($variables['form']['default_group'][$group_id]); unset($variables['form']['default_group_multiple'][$group_id]); $link = [ '#type' => 'link', '#url' => Url::fromRoute('', [], [ 'attributes' => [ 'id' => 'views-remove-link-' . $group_id, 'class' => [ 'views-hidden', 'views-button-remove', 'views-groups-remove-link', 'views-remove-link', ], 'alt' => t('Remove this item'), 'title' => t('Remove this item'), ], ]), '#title' => SafeMarkup::format('@text', ['@text' => t('Remove')]), ]; $remove = [$form['group_items'][$group_id]['remove'], $link]; $data = array( 'default' => ['data' => $default], 'weight' => ['data' => $form['group_items'][$group_id]['weight']], 'title' => ['data' => $form['group_items'][$group_id]['title']], 'operator' => ['data' => $form['group_items'][$group_id]['operator']], 'value' => ['data' => $form['group_items'][$group_id]['value']], 'remove' => ['data' => $remove], ); $rows[] = array('data' => $data, 'id' => 'views-row-' . $group_id, 'class' => array('draggable')); } $variables['table'] = array( '#type' => 'table', '#header' => $header, '#rows' => $rows, '#attributes' => array( 'class' => array('views-filter-groups'), 'id' => 'views-filter-groups', ), '#tabledrag' => array( array( 'action' => 'order', 'relationship' => 'sibling', 'group' => 'weight', ) ), ); // Hide fields used in table. unset($variables['form']['group_items']); } /** * Prepares variables for Views UI rearrange filter form templates. * * Default template: views-ui-rearrange-filter-form.html.twig. * * @param array $variables * An associative array containing: * - form: A render element representing the form. */ function template_preprocess_views_ui_rearrange_filter_form(&$variables) { $form = &$variables['form']; $rows = $ungroupable_rows = array(); // Enable grouping only if > 1 group. $variables['grouping'] = count(array_keys($form['#group_options'])) > 1; foreach ($form['#group_renders'] as $group_id => $contents) { // Header row for the group. if ($group_id !== 'ungroupable') { // Set up tabledrag so that it changes the group dropdown when rows are // dragged between groups. $options = array( 'table_id' => 'views-rearrange-filters', 'action' => 'match', 'relationship' => 'sibling', 'group' => 'views-group-select', 'subgroup' => 'views-group-select-' . $group_id, ); drupal_attach_tabledrag($form['override'], $options); // Title row, spanning all columns. $row = array(); // Add a cell to the first row, containing the group operator. $row[] = array( 'class' => array('group', 'group-operator', 'container-inline'), 'data' => $form['filter_groups']['groups'][$group_id], 'rowspan' => max(array(2, count($contents) + 1)), ); // Title. $row[] = array( 'class' => array('group', 'group-title'), 'data' => array( '#prefix' => '', '#markup' => $form['#group_options'][$group_id], '#suffix' => '', ), 'colspan' => 4, ); $rows[] = array( 'class' => array('views-group-title'), 'data' => $row, 'id' => 'views-group-title-' . $group_id, ); // Row which will only appear if the group has nothing in it. $row = array(); $class = 'group-' . (count($contents) ? 'populated' : 'empty'); $instructions = '' . t('No filters have been added.') . ' ' . t('Drag to add filters.') . ''; // When JavaScript is enabled, the button for removing the group (if it's // present) should be hidden, since it will be replaced by a link on the // client side. if (!empty($form['remove_groups'][$group_id]['#type']) && $form['remove_groups'][$group_id]['#type'] == 'submit') { $form['remove_groups'][$group_id]['#attributes']['class'][] = 'js-hide'; } $row[] = array( 'colspan' => 5, 'data' => array( array('#markup' => $instructions), $form['remove_groups'][$group_id], ), ); $rows[] = array( 'class' => array( 'group-message', 'group-' . $group_id . '-message', $class, ), 'data' => $row, 'id' => 'views-group-' . $group_id, ); } foreach ($contents as $id) { if (isset($form['filters'][$id]['name'])) { $row = array(); $row[]['data'] = $form['filters'][$id]['name']; $form['filters'][$id]['weight']['#attributes']['class'] = array('weight'); $row[]['data'] = $form['filters'][$id]['weight']; $form['filters'][$id]['group']['#attributes']['class'] = array('views-group-select views-group-select-' . $group_id); $row[]['data'] = $form['filters'][$id]['group']; $form['filters'][$id]['removed']['#attributes']['class'][] = 'js-hide'; $remove_link = array( '#type' => 'link', '#url' => Url::fromRoute(''), '#title' => SafeMarkup::format('@text', array('@text' => t('Remove'))), '#weight' => '1', '#options' => array( 'attributes' => array( 'id' => 'views-remove-link-' . $id, 'class' => array( 'views-hidden', 'views-button-remove', 'views-groups-remove-link', 'views-remove-link', ), 'alt' => t('Remove this item'), 'title' => t('Remove this item'), ), ), ); $row[]['data'] = array( $form['filters'][$id]['removed'], $remove_link, ); $row = array( 'data' => $row, 'class' => array('draggable'), 'id' => 'views-row-' . $id, ); if ($group_id !== 'ungroupable') { $rows[] = $row; } else { $ungroupable_rows[] = $row; } } } } if (!$variables['grouping']) { $form['filter_groups']['groups'][0]['#title'] = t('Operator'); } if (!empty($ungroupable_rows)) { $header = array( t('Ungroupable filters'), t('Weight'), array( 'data' => t('Group'), 'class' => array('views-hide-label'), ), array( 'data' => t('Remove'), 'class' => array('views-hide-label'), ), ); $variables['ungroupable_table'] = array( '#type' => 'table', '#header' => $header, '#rows' => $ungroupable_rows, '#attributes' => array( 'id' => 'views-rearrange-filters-ungroupable', 'class' => array('arrange'), ), '#tabledrag' => array( array( 'action' => 'order', 'relationship' => 'sibling', 'group' => 'weight', ) ), ); } if (empty($rows)) { $rows[] = array(array('data' => t('No fields available.'), 'colspan' => '2')); } // Set up tabledrag so that the weights are changed when rows are dragged. $variables['table'] = array( '#type' => 'table', '#rows' => $rows, '#attributes' => array( 'id' => 'views-rearrange-filters', 'class' => array('arrange'), ), '#tabledrag' => array( array( 'action' => 'order', 'relationship' => 'sibling', 'group' => 'weight', ), ), ); // When JavaScript is enabled, the button for adding a new group should be // hidden, since it will be replaced by a link on the client side. $form['actions']['add_group']['#attributes']['class'][] = 'js-hide'; } /** * Prepares variables for style plugin table templates. * * Default template: views-ui-style-plugin-table.html.twig. * * @param array $variables * An associative array containing: * - form: A render element representing the form. */ function template_preprocess_views_ui_style_plugin_table(&$variables) { $form = $variables['form']; $header = array( t('Field'), t('Column'), t('Align'), t('Separator'), array( 'data' => t('Sortable'), 'align' => 'center', ), array( 'data' => t('Default order'), 'align' => 'center', ), array( 'data' => t('Default sort'), 'align' => 'center', ), array( 'data' => t('Hide empty column'), 'align' => 'center', ), array( 'data' => t('Responsive'), 'align' => 'center', ), ); $rows = array(); foreach (Element::children($form['columns']) as $id) { $row = array(); $row[]['data'] = $form['info'][$id]['name']; $row[]['data'] = $form['columns'][$id]; $row[]['data'] = $form['info'][$id]['align']; $row[]['data'] = $form['info'][$id]['separator']; if (!empty($form['info'][$id]['sortable'])) { $row[] = array( 'data' => $form['info'][$id]['sortable'], 'align' => 'center', ); $row[] = array( 'data' => $form['info'][$id]['default_sort_order'], 'align' => 'center', ); $row[] = array( 'data' => $form['default'][$id], 'align' => 'center', ); } else { $row[] = ''; $row[] = ''; $row[] = ''; } $row[] = array( 'data' => $form['info'][$id]['empty_column'], 'align' => 'center', ); $row[] = array( 'data' => $form['info'][$id]['responsive'], 'align' => 'center', ); $rows[] = $row; } // Add the special 'None' row. $rows[] = array(array('data' => t('None'), 'colspan' => 6), array('align' => 'center', 'data' => $form['default'][-1]), array('colspan' => 2)); // Unset elements from the form array that are used to build the table so that // they are not rendered twice. unset($form['default']); unset($form['info']); unset($form['columns']); $variables['table'] = array( '#type' => 'table', '#theme' => 'table__views_ui_style_plugin_table', '#header' => $header, '#rows' => $rows, ); $variables['form'] = $form; } /** * Prepares variables for views UI view preview section templates. * * Default template: views-ui-view-preview-section.html.twig. * * @param array $variables * An associative array containing: * - view: The view object. * - section: The section name of a View (e.g. title, rows or pager). */ function template_preprocess_views_ui_view_preview_section(&$variables) { switch ($variables['section']) { case 'title': $variables['title'] = t('Title'); $links = views_ui_view_preview_section_display_category_links($variables['view'], 'title', $variables['title']); break; case 'header': $variables['title'] = t('Header'); $links = views_ui_view_preview_section_handler_links($variables['view'], $variables['section']); break; case 'empty': $variables['title'] = t('No results behavior'); $links = views_ui_view_preview_section_handler_links($variables['view'], $variables['section']); break; case 'exposed': // @todo Sorts can be exposed too, so we may need a better title. $variables['title'] = t('Exposed Filters'); $links = views_ui_view_preview_section_display_category_links($variables['view'], 'exposed_form_options', $variables['title']); break; case 'rows': // @todo The title needs to depend on what is being viewed. $variables['title'] = t('Content'); $links = views_ui_view_preview_section_rows_links($variables['view']); break; case 'pager': $variables['title'] = t('Pager'); $links = views_ui_view_preview_section_display_category_links($variables['view'], 'pager_options', $variables['title']); break; case 'more': $variables['title'] = t('More'); $links = views_ui_view_preview_section_display_category_links($variables['view'], 'use_more', $variables['title']); break; case 'footer': $variables['title'] = t('Footer'); $links = views_ui_view_preview_section_handler_links($variables['view'], $variables['section']); break; case 'attachment_before': // @todo: Add links to the attachment configuration page. $variables['title'] = t('Attachment before'); break; case 'attachment_after': // @todo: Add links to the attachment configuration page. $variables['title'] = t('Attachment after'); break; } if (isset($links)) { $build = array( '#theme' => 'links__contextual', '#links' => $links, '#attributes' => array('class' => array('contextual-links')), '#attached' => array( 'library' => array('contextual/drupal.contextual-links'), ), ); $variables['links'] = $build; } } /** * Implements hook_theme_suggestions_HOOK(). */ function views_ui_theme_suggestions_views_ui_view_preview_section(array $variables) { return array('views_ui_view_preview_section__' . $variables['section']); }