ViewEditForm::getDisplayDetails

public ViewEditForm::getDisplayDetails($view, $display)

Helper function to get the display details section of the edit UI.

Parameters

$display:

Return value

array A renderable page build array.

File

core/modules/views_ui/src/ViewEditForm.php, line 366

Class

ViewEditForm
Form controller for the Views edit form.

Namespace

Drupal\views_ui

Code

public function getDisplayDetails($view, $display) {
  $display_title = $this->getDisplayLabel($view, $display['id'], FALSE);
  $build = array(
    '#theme_wrappers' => array('container'),
    '#attributes' => array('id' => 'edit-display-settings-details'),
  );

  $is_display_deleted = !empty($display['deleted']);
  // The master display cannot be duplicated.
  $is_default = $display['id'] == 'default';
  // @todo: Figure out why getOption doesn't work here.
  $is_enabled = $view->getExecutable()->displayHandlers->get($display['id'])->isEnabled();

  if ($display['id'] != 'default') {
    $build['top']['#theme_wrappers'] = array('container');
    $build['top']['#attributes']['id'] = 'edit-display-settings-top';
    $build['top']['#attributes']['class'] = array('views-ui-display-tab-actions', 'edit-display-settings-top', 'views-ui-display-tab-bucket', 'clearfix');

    // The Delete, Duplicate and Undo Delete buttons.
    $build['top']['actions'] = array(
      '#theme_wrappers' => array('dropbutton_wrapper'),
    );

    // Because some of the 'links' are actually submit buttons, we have to
    // manually wrap each item in <li> and the whole list in <ul>.
    $build['top']['actions']['prefix']['#markup'] = '<ul class="dropbutton">';

    if (!$is_display_deleted) {
      if (!$is_enabled) {
        $build['top']['actions']['enable'] = array(
          '#type' => 'submit',
          '#value' => $this->t('Enable @display_title', ['@display_title' => $display_title]),
          '#limit_validation_errors' => array(),
          '#submit' => array('::submitDisplayEnable', '::submitDelayDestination'),
          '#prefix' => '<li class="enable">',
          "#suffix" => '</li>',
        );
      }
      // Add a link to view the page unless the view is disabled or has no
      // path.
      elseif ($view->status() && $view->getExecutable()->displayHandlers->get($display['id'])->hasPath()) {
        $path = $view->getExecutable()->displayHandlers->get($display['id'])->getPath();
        if ($path && (strpos($path, '%') === FALSE)) {
          if (!parse_url($path, PHP_URL_SCHEME)) {
            // @todo Views should expect and store a leading /. See:
            //   https://www.drupal.org/node/2423913
            $url = Url::fromUserInput('/' . ltrim($path, '/'));
          }
          else {
            $url = Url::fromUri("base:$path");
          }
          $build['top']['actions']['path'] = array(
            '#type' => 'link',
            '#title' => $this->t('View @display_title', ['@display_title' => $display_title]),
            '#options' => array('alt' => array($this->t("Go to the real page for this display"))),
            '#url' => $url,
            '#prefix' => '<li class="view">',
            "#suffix" => '</li>',
          );
        }
      }
      if (!$is_default) {
        $build['top']['actions']['duplicate'] = array(
          '#type' => 'submit',
          '#value' => $this->t('Duplicate @display_title', ['@display_title' => $display_title]),
          '#limit_validation_errors' => array(),
          '#submit' => array('::submitDisplayDuplicate', '::submitDelayDestination'),
          '#prefix' => '<li class="duplicate">',
          "#suffix" => '</li>',
        );
      }
      // Always allow a display to be deleted.
      $build['top']['actions']['delete'] = array(
        '#type' => 'submit',
        '#value' => $this->t('Delete @display_title', ['@display_title' => $display_title]),
        '#limit_validation_errors' => array(),
        '#submit' => array('::submitDisplayDelete', '::submitDelayDestination'),
        '#prefix' => '<li class="delete">',
        "#suffix" => '</li>',
      );

      foreach (Views::fetchPluginNames('display', NULL, array($view->get('storage')->get('base_table'))) as $type => $label) {
        if ($type == $display['display_plugin']) {
          continue;
        }

        $build['top']['actions']['duplicate_as'][$type] = array(
          '#type' => 'submit',
          '#value' => $this->t('Duplicate as @type', ['@type' => $label]),
          '#limit_validation_errors' => array(),
          '#submit' => array('::submitDuplicateDisplayAsType', '::submitDelayDestination'),
          '#prefix' => '<li class="duplicate">',
          '#suffix' => '</li>',
        );
      }
    }
    else {
      $build['top']['actions']['undo_delete'] = array(
        '#type' => 'submit',
        '#value' => $this->t('Undo delete of @display_title', ['@display_title' => $display_title]),
        '#limit_validation_errors' => array(),
        '#submit' => array('::submitDisplayUndoDelete', '::submitDelayDestination'),
        '#prefix' => '<li class="undo-delete">',
        "#suffix" => '</li>',
      );
    }
    if ($is_enabled) {
      $build['top']['actions']['disable'] = array(
        '#type' => 'submit',
        '#value' => $this->t('Disable @display_title', ['@display_title' => $display_title]),
        '#limit_validation_errors' => array(),
        '#submit' => array('::submitDisplayDisable', '::submitDelayDestination'),
        '#prefix' => '<li class="disable">',
        "#suffix" => '</li>',
      );
    }
    $build['top']['actions']['suffix']['#markup'] = '</ul>';

    // The area above the three columns.
    $build['top']['display_title'] = array(
      '#theme' => 'views_ui_display_tab_setting',
      '#description' => $this->t('Display name'),
      '#link' => $view->getExecutable()->displayHandlers->get($display['id'])->optionLink($display_title, 'display_title'),
    );
  }

  $build['columns'] = array();
  $build['columns']['#theme_wrappers'] = array('container');
  $build['columns']['#attributes'] = array('id' => 'edit-display-settings-main', 'class' => array('clearfix', 'views-display-columns'));

  $build['columns']['first']['#theme_wrappers'] = array('container');
  $build['columns']['first']['#attributes'] = array('class' => array('views-display-column', 'first'));

  $build['columns']['second']['#theme_wrappers'] = array('container');
  $build['columns']['second']['#attributes'] = array('class' => array('views-display-column', 'second'));

  $build['columns']['second']['settings'] = array();
  $build['columns']['second']['header'] = array();
  $build['columns']['second']['footer'] = array();
  $build['columns']['second']['empty'] = array();
  $build['columns']['second']['pager'] = array();

  // The third column buckets are wrapped in details.
  $build['columns']['third'] = array(
    '#type' => 'details',
    '#title' => $this->t('Advanced'),
    '#theme_wrappers' => array('details'),
    '#attributes' => array(
      'class' => array(
        'views-display-column',
        'third',
      ),
    ),
  );
  // Collapse the details by default.
  $build['columns']['third']['#open'] = \Drupal::config('views.settings')->get('ui.show.advanced_column');

  // Each option (e.g. title, access, display as grid/table/list) fits into one
  // of several "buckets," or boxes (Format, Fields, Sort, and so on).
  $buckets = array();

  // Fetch options from the display plugin, with a list of buckets they go into.
  $options = array();
  $view->getExecutable()->displayHandlers->get($display['id'])->optionsSummary($buckets, $options);

  // Place each option into its bucket.
  foreach ($options as $id => $option) {
    // Each option self-identifies as belonging in a particular bucket.
    $buckets[$option['category']]['build'][$id] = $this->buildOptionForm($view, $id, $option, $display);
  }

  // Place each bucket into the proper column.
  foreach ($buckets as $id => $bucket) {
    // Let buckets identify themselves as belonging in a column.
    if (isset($bucket['column']) && isset($build['columns'][$bucket['column']])) {
      $column = $bucket['column'];
    }
    // If a bucket doesn't pick one of our predefined columns to belong to, put
    // it in the last one.
    else {
      $column = 'third';
    }
    if (isset($bucket['build']) && is_array($bucket['build'])) {
      $build['columns'][$column][$id] = $bucket['build'];
      $build['columns'][$column][$id]['#theme_wrappers'][] = 'views_ui_display_tab_bucket';
      $build['columns'][$column][$id]['#title'] = !empty($bucket['title']) ? $bucket['title'] : '';
      $build['columns'][$column][$id]['#name'] = $id;
    }
  }

  $build['columns']['first']['fields'] = $this->getFormBucket($view, 'field', $display);
  $build['columns']['first']['filters'] = $this->getFormBucket($view, 'filter', $display);
  $build['columns']['first']['sorts'] = $this->getFormBucket($view, 'sort', $display);
  $build['columns']['second']['header'] = $this->getFormBucket($view, 'header', $display);
  $build['columns']['second']['footer'] = $this->getFormBucket($view, 'footer', $display);
  $build['columns']['second']['empty'] = $this->getFormBucket($view, 'empty', $display);
  $build['columns']['third']['arguments'] = $this->getFormBucket($view, 'argument', $display);
  $build['columns']['third']['relationships'] = $this->getFormBucket($view, 'relationship', $display);

  return $build;
}
doc_Drupal
2016-10-29 09:53:59
Comments
Leave a Comment

Please login to continue.