1 views_ui.admin.inc | views_ui_get_display_tab_details($view, $display) |
Helper function to get the display details section of the configure UI.
Parameters
$view:
$display:
Return value
array: A renderable page build array.
File
- core/
modules/ views_ui/ views_ui.admin.inc, line 1606 - Admin page callbacks for the Views UI module.
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);
$is_display_deleted = !empty($display->deleted);
$is_deletable = empty($plugin['no remove']);
// The default display cannot be cloned.
$is_default = $display->id == 'default';
// @todo: Figure out why get_option doesn't work here.
$is_enabled = $display->handler->get_option('enabled');
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(
'#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' => 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' => '<li class="enable">',
'#suffix' => '</li>',
);
}
// 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' => '<li class="view">',
'#suffix' => '</li>',
);
}
}
if (!$is_default) {
// Add "Clone" operation for the current plugin type.
$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' => '<li class="duplicate">',
'#suffix' => '</li>',
);
$plugin_names = views_fetch_plugin_names('display', NULL, array($view->base_table));
// Remove the plugin type of the current display from the list of
// plugins.
unset($plugin_names[$display->display_plugin]);
// Add "Clone as" operations for the remaining plugin types.
foreach ($plugin_names as $type => $label) {
$build['top']['actions']['clone_as'][$type] = array(
'#type' => 'submit',
'#value' => t('clone as @type', array('@type' => $label)),
'#limit_validation_errors' => array(),
'#submit' => array('views_ui_edit_form_submit_clone_display_as_type', 'views_ui_edit_form_submit_delay_destination'),
'#prefix' => '<li class="duplicate duplicate-as-"' . $type . '>',
"#suffix" => '</li>',
);
}
}
if ($is_deletable) {
$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' => '<li class="delete">',
'#suffix' => '</li>',
);
}
if ($is_enabled) {
$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' => '<li class="disable">',
'#suffix' => '</li>',
);
}
}
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' => '<li class="undo-delete">',
'#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' => 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 container.
// @todo: Convert this to #type = details when available.
$build['columns']['third']['#theme_wrappers'] = array('container');
$build['columns']['third']['#attributes'] = array('class' => array('views-display-column', 'third'));
// Specify an id that won't change after AJAX requests. Use the same ID across
// different displays of the same view, so changing displays doesn't
// affect the column display.
$build['columns']['third']['#attributes']['id'] = 'views-ui-advanced-column-' . $view->name;
$build['columns']['third']['collapse']['#theme_wrappers'] = array('container');
$build['columns']['third']['collapse']['#attributes'] = array();
// 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 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;
}