function views_ui_get_display_tab_details

3.x admin.inc views_ui_get_display_tab_details($view, $display)

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

Parameters

$view:

$display:

Return value

array A renderable page build array.

1 call to views_ui_get_display_tab_details()
views_ui_get_display_tab in includes/admin.inc
Returns a renderable array representing the edit page for one display.

File

includes/admin.inc, line 1554
Provides the Views' administrative interface.

Code

function views_ui_get_display_tab_details($view, $display) {
  $display_title = views_ui_get_display_label($view, $display->id, FALSE);
  $build = array(
    '#theme_wrappers' => array('container'),
    '#attributes' => array('id' => 'edit-display-settings-details',),
  );

  $plugin = views_fetch_plugin_data('display', $view->display[$display->id]->display_plugin);
  // The following is for display purposes only. We need to determine if there is more than one button and wrap
  // the buttons in a .ctools-dropbutton class if more than one is present.  Otherwise, we'll just wrap the
  // actions in the .ctools-button class.
  $isDisplayDeleted = !empty($display->deleted);
  $isDeletable = empty($plugin['no remove']);
  // The master display cannot be cloned.
  $isDefault = $display->id == 'default';
  // @todo: Figure out why get_option doesn't work here.
  $isEnabled = $display->handler->get_option('enabled');

  if (!$isDisplayDeleted && $isDeletable && !$isDefault) {
    $prefix = '<div class="ctools-no-js ctools-button ctools-dropbutton"><div class="ctools-link"><a href="#" class="ctools-twisty ctools-text">open</a></div><div class="ctools-content"><ul class="horizontal right actions">';
    $suffix = '</ul></div></div>';
    $itemElement = 'li';
  }
  else {
    $prefix = '<div class="ctools-button"><div class="ctools-content"><ul class="horizontal right actions">';
    $suffix = '</ul></div></div>';
    $itemElement = 'li';
  }

  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', 'views-ui-display-tab-bucket', 'clearfix');

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

    if (!$isDisplayDeleted) {
      if (!$isEnabled) {
        $build['top']['actions']['enable'] = array(
          '#type' => 'submit',
          '#value' => t('enable @display_title', array('@display_title' => $display_title)),
          '#limit_validation_errors' => array(),
          '#submit' => array('views_ui_edit_form_submit_enable_display', 'views_ui_edit_form_submit_delay_destination'),
          '#prefix' => '<' . $itemElement . ' class="enable">',
          "#suffix" => '</' . $itemElement . '>',
        );
      }
      // Add a link to view the page.
      elseif ($display->handler->has_path()) {
        $path = $display->handler->get_path();
        if (strpos($path, '%') === FALSE) {
          $build['top']['actions']['path'] = array(
            '#type' => 'link',
            '#title' => t('view @display', array('@display' => $display->display_title)),
            '#options' => array('alt' => array(t("Go to the real page for this display"))),
            '#href' => $path,
            '#prefix' => '<' . $itemElement . ' class="view">',
            "#suffix" => '</' . $itemElement . '>',
          );
        }
      }
      if (!$isDefault) {
        $build['top']['actions']['duplicate'] = array(
          '#type' => 'submit',
          '#value' => t('clone @display_title', array('@display_title' => $display_title)),
          '#limit_validation_errors' => array(),
          '#submit' => array('views_ui_edit_form_submit_duplicate_display', 'views_ui_edit_form_submit_delay_destination'),
          '#prefix' => '<' . $itemElement . ' class="duplicate">',
          "#suffix" => '</' . $itemElement . '>',
        );
      }
      if ($isDeletable) {
        $build['top']['actions']['delete'] = array(
          '#type' => 'submit',
          '#value' => t('delete @display_title', array('@display_title' => $display_title)),
          '#limit_validation_errors' => array(),
          '#submit' => array('views_ui_edit_form_submit_delete_display', 'views_ui_edit_form_submit_delay_destination'),
          '#prefix' => '<' . $itemElement . ' class="delete">',
          "#suffix" => '</' . $itemElement . '>',
        );
      }
      if ($isEnabled) {
        $build['top']['actions']['disable'] = array(
          '#type' => 'submit',
          '#value' => t('disable @display_title', array('@display_title' => $display_title)),
          '#limit_validation_errors' => array(),
          '#submit' => array('views_ui_edit_form_submit_disable_display', 'views_ui_edit_form_submit_delay_destination'),
          '#prefix' => '<' . $itemElement . ' class="disable">',
          "#suffix" => '</' . $itemElement . '>',
        );
      }
    }
    else {
      $build['top']['actions']['undo_delete'] = array(
        '#type' => 'submit',
        '#value' => t('undo delete of @display_title', array('@display_title' => $display_title)),
        '#limit_validation_errors' => array(),
        '#submit' => array('views_ui_edit_form_submit_undo_delete_display', 'views_ui_edit_form_submit_delay_destination'),
        '#prefix' => '<' . $itemElement . ' class="undo-delete">',
        "#suffix" => '</' . $itemElement . '>',
      );
    }

    // The area above the three columns.
    $build['top']['display_title'] = array(
      '#theme' => 'views_ui_display_tab_setting',
      '#description' => t('Display name'),
      '#link' => $display->handler->option_link(check_plain($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']['pager'] = array();

  // The third column buckets are wrapped in a CTools collapsible div
  $build['columns']['third']['#theme_wrappers'] = array('container');
  $build['columns']['third']['#attributes'] = array('class' => array('views-display-column', 'third', 'ctools-collapsible-container', 'ctools-collapsible-remember'));
  // Specify an id that won't change after AJAX requests, so ctools can keep
  // track of the user's preferred collapsible state. Use the same id across
  // different displays of the same view, so changing displays doesn't
  // recollapse the column.
  $build['columns']['third']['#attributes']['id'] = 'views-ui-advanced-column-' . $view->name;
  // Collapse the div by default.
  if (!variable_get('views_ui_show_advanced_column', FALSE)) {
    $build['columns']['third']['#attributes']['class'][] = 'ctools-collapsed';
  }
  $build['columns']['third']['advanced'] = array('#markup' => '<h3 class="ctools-collapsible-handle"><a href="">' . t('Advanced') . '</a></h3>',);
  $build['columns']['third']['collapse']['#theme_wrappers'] = array('container');
  $build['columns']['third']['collapse']['#attributes'] = array('class' => array('ctools-collapsible-content',),);

  // 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();
  $display->handler->options_summary($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] = views_ui_edit_form_get_build_from_option($id, $option, $view, $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'])) {
      // The third column is a CTools collapsible div, so
      // the structure of the form is a little different for this column
      if ($column === 'third') {
        $build['columns'][$column]['collapse'][$id] = $bucket['build'];
        $build['columns'][$column]['collapse'][$id]['#theme_wrappers'][] = 'views_ui_display_tab_bucket';
        $build['columns'][$column]['collapse'][$id]['#title'] = !empty($bucket['title']) ? $bucket['title'] : '';
        $build['columns'][$column]['collapse'][$id]['#name'] = !empty($bucket['title']) ? $bucket['title'] : $id;
      }
      else {
        $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'] = !empty($bucket['title']) ? $bucket['title'] : $id;
      }
    }
  }

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

  return $build;
}