function views_ui_edit_form_get_bucket in Views (for Drupal 7) 7.3
Add information about a section to a display.
1 call to views_ui_edit_form_get_bucket()
- views_ui_get_display_tab_details in includes/
admin.inc - Helper function to get the display details section of the edit UI.
File
- includes/
admin.inc, line 2334 - Provides the Views' administrative interface.
Code
function views_ui_edit_form_get_bucket($type, $view, $display) {
$build = array(
'#theme_wrappers' => array(
'views_ui_display_tab_bucket',
),
);
$types = views_object_types();
$build['#overridden'] = FALSE;
$build['#defaulted'] = FALSE;
if (module_exists('advanced_help')) {
$build['#item_help_icon'] = array(
'#theme' => 'advanced_help_topic',
'#module' => 'views',
'#topic' => $type,
);
}
$build['#name'] = $build['#title'] = $types[$type]['title'];
// Different types now have different rearrange forms, so we use this switch
// to get the right one.
switch ($type) {
case 'filter':
$rearrange_url = "admin/structure/views/nojs/rearrange-{$type}/{$view->name}/{$display->id}/{$type}";
$rearrange_text = t('And/Or, Rearrange');
// @todo Add another class to have another symbol for filter rearrange.
$class = 'icon compact rearrange';
break;
case 'field':
// Fetch the style plugin info so we know whether to list fields or not.
$style_plugin = $display->handler
->get_plugin();
$uses_fields = $style_plugin && $style_plugin
->uses_fields();
if (!$uses_fields) {
$build['fields'][] = array(
'#markup' => t('The selected style or row format does not utilize fields.'),
'#theme_wrappers' => array(
'views_container',
),
'#attributes' => array(
'class' => array(
'views-display-setting',
),
),
);
return $build;
}
default:
$rearrange_url = "admin/structure/views/nojs/rearrange/{$view->name}/{$display->id}/{$type}";
$rearrange_text = t('Rearrange');
$class = 'icon compact rearrange';
}
// Create an array of actions to pass to theme_links
$actions = array();
$count_handlers = count($display->handler
->get_handlers($type));
$actions['add'] = array(
'title' => t('Add'),
'href' => "admin/structure/views/nojs/add-item/{$view->name}/{$display->id}/{$type}",
'attributes' => array(
'class' => array(
'icon compact add',
'views-ajax-link',
),
'title' => t('Add'),
'id' => 'views-add-' . $type,
),
'html' => TRUE,
);
if ($count_handlers > 0) {
$actions['rearrange'] = array(
'title' => $rearrange_text,
'href' => $rearrange_url,
'attributes' => array(
'class' => array(
$class,
'views-ajax-link',
),
'title' => t('Rearrange'),
'id' => 'views-rearrange-' . $type,
),
'html' => TRUE,
);
}
// Render the array of links.
$build['#actions'] = theme('links__ctools_dropbutton', array(
'links' => $actions,
'attributes' => array(
'class' => array(
'inline',
'links',
'actions',
'horizontal',
'right',
),
),
'class' => array(
'views-ui-settings-bucket-operations',
),
));
if (!$display->handler
->is_default_display()) {
if (!$display->handler
->is_defaulted($types[$type]['plural'])) {
$build['#overridden'] = TRUE;
}
else {
$build['#defaulted'] = TRUE;
}
}
// If there's an options form for the bucket, link to it.
if (!empty($types[$type]['options'])) {
$build['#title'] = l($build['#title'], "admin/structure/views/nojs/config-type/{$view->name}/{$display->id}/{$type}", array(
'attributes' => array(
'class' => array(
'views-ajax-link',
),
'id' => 'views-title-' . $type,
),
));
}
static $relationships = NULL;
if (!isset($relationships)) {
// Get relationship labels.
$relationships = array();
// @todo: get_handlers()
$handlers = $display->handler
->get_option('relationships');
if ($handlers) {
foreach ($handlers as $id => $info) {
$handler = $display->handler
->get_handler('relationship', $id);
$relationships[$id] = $handler
->label();
}
}
}
// Filters can now be grouped so we do a little bit extra.
$groups = array();
$grouping = FALSE;
if ($type == 'filter') {
$group_info = $view->display_handler
->get_option('filter_groups');
// If there is only one group but it is using the "OR" filter, we still
// treat it as a group for display purposes, since we want to display the
// "OR" label next to items within the group.
if (!empty($group_info['groups']) && (count($group_info['groups']) > 1 || current($group_info['groups']) == 'OR')) {
$grouping = TRUE;
$groups = array(
0 => array(),
);
}
}
$build['fields'] = array();
foreach ($display->handler
->get_option($types[$type]['plural']) as $id => $field) {
// Build the option link for this handler ("Node: ID = article").
$build['fields'][$id] = array();
$build['fields'][$id]['#theme'] = 'views_ui_display_tab_setting';
$handler = $display->handler
->get_handler($type, $id);
if (empty($handler)) {
$build['fields'][$id]['#class'][] = 'broken';
$field_name = t('Broken/missing handler: @table > @field', array(
'@table' => $field['table'],
'@field' => $field['field'],
));
$build['fields'][$id]['#link'] = l($field_name, "admin/structure/views/nojs/config-item/{$view->name}/{$display->id}/{$type}/{$id}", array(
'attributes' => array(
'class' => array(
'views-ajax-link',
),
),
'html' => TRUE,
));
continue;
}
$field_name = check_plain($handler
->ui_name(TRUE));
if (!empty($field['relationship']) && !empty($relationships[$field['relationship']])) {
$field_name = '(' . $relationships[$field['relationship']] . ') ' . $field_name;
}
$description = filter_xss_admin($handler
->admin_summary());
$link_text = $field_name . (empty($description) ? '' : " ({$description})");
$link_attributes = array(
'class' => array(
'views-ajax-link',
),
);
if (!empty($field['exclude'])) {
$link_attributes['class'][] = 'views-field-excluded';
}
$build['fields'][$id]['#link'] = l($link_text, "admin/structure/views/nojs/config-item/{$view->name}/{$display->id}/{$type}/{$id}", array(
'attributes' => $link_attributes,
'html' => TRUE,
));
$build['fields'][$id]['#class'][] = drupal_clean_css_identifier($display->id . '-' . $type . '-' . $id);
if (!empty($view->changed_sections[$display->id . '-' . $type . '-' . $id])) {
// @todo: #changed is no longer being used?
$build['fields'][$id]['#changed'] = TRUE;
}
if ($display->handler
->use_group_by() && $handler
->use_group_by()) {
$build['fields'][$id]['#settings_links'][] = l('<span class="label">' . t('Aggregation settings') . '</span>', "admin/structure/views/nojs/config-item-group/{$view->name}/{$display->id}/{$type}/{$id}", array(
'attributes' => array(
'class' => 'views-button-configure views-ajax-link',
'title' => t('Aggregation settings'),
),
'html' => TRUE,
));
}
if ($handler
->has_extra_options()) {
$build['fields'][$id]['#settings_links'][] = l('<span class="label">' . t('Settings') . '</span>', "admin/structure/views/nojs/config-item-extra/{$view->name}/{$display->id}/{$type}/{$id}", array(
'attributes' => array(
'class' => array(
'views-button-configure',
'views-ajax-link',
),
'title' => t('Settings'),
),
'html' => TRUE,
));
}
if ($grouping) {
$gid = $handler->options['group'];
// Show in default group if the group does not exist.
if (empty($group_info['groups'][$gid])) {
$gid = 0;
}
$groups[$gid][] = $id;
}
}
// If using grouping, re-order fields so that they show up properly in the
// list.
if ($type == 'filter' && $grouping) {
$store = $build['fields'];
$build['fields'] = array();
foreach ($groups as $gid => $contents) {
// Display an operator between each group.
if (!empty($build['fields'])) {
$build['fields'][] = array(
'#theme' => 'views_ui_display_tab_setting',
'#class' => array(
'views-group-text',
),
'#link' => $group_info['operator'] == 'OR' ? t('OR') : t('AND'),
);
}
// Display an operator between each pair of filters within the group.
$keys = array_keys($contents);
$last = end($keys);
foreach ($contents as $key => $pid) {
if ($key != $last) {
$store[$pid]['#link'] .= ' ' . ($group_info['groups'][$gid] == 'OR' ? t('OR') : t('AND'));
}
$build['fields'][$pid] = $store[$pid];
}
}
}
return $build;
}