views_ui_basic.module in Views UI: Edit Basic Settings 7
Same filename and directory in other branches
User interface to edit basic settings of Views 7.x-3.x.
File
views_ui_basic.moduleView source
<?php
/**
* @file
* User interface to edit basic settings of Views 7.x-3.x.
*/
/**
* Return list of editable fields.
*/
function _views_ui_basic_fields() {
$fields = array(
// Views form name => label
'title' => t('Title'),
'header' => t('Header'),
'footer' => t('Footer'),
'empty' => t('Empty text'),
'pager_options' => t('Pager options'),
);
if (module_exists('metatag_views')) {
$fields['metatags'] = t('Meta tags');
}
return $fields;
}
/**
* Implements hook_menu().
*/
function views_ui_basic_menu() {
$items = array();
$items['admin/content/views_ui_basic'] = array(
'title' => 'Edit views',
'page callback' => 'views_ui_basic_list_page',
'access arguments' => array(
'edit views basic settings',
),
'type' => MENU_LOCAL_TASK,
);
$items['views_ui_basic'] = array(
// different URI to support rich text editors
'title' => 'Edit basic settings',
'page callback' => 'views_ui_basic_edit_form',
'page arguments' => array(
1,
2,
3,
),
'access arguments' => array(
'edit views basic settings',
),
'type' => MENU_CALLBACK,
);
$items['admin/structure/views/views_ui_basic'] = array(
'title' => 'Editable basic settings',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'views_ui_basic_admin_form',
),
'access arguments' => array(
'administer views',
),
'type' => MENU_LOCAL_TASK,
'file' => 'views_ui_basic.admin.inc',
'weight' => 50,
);
// Generate local tasks (menu tabs) for View pages
_views_ui_basic_define_menu($items);
return $items;
}
/**
* Implements hook_admin_paths().
*/
function views_ui_basic_admin_paths() {
// Cache paths, since this _views_ui_basic_define_menu() loads all Views.
if ($cached = cache_get('views_ui_basic_paths')) {
return $cached->data;
}
$paths = array();
$items = array();
_views_ui_basic_define_menu($items);
if ($items) {
$paths = array_keys($items);
$paths = array_combine($paths, array_fill(1, count($paths), TRUE));
}
cache_set('views_ui_basic_paths', $paths);
return $paths;
}
/**
* Implements hook_permission().
*/
function views_ui_basic_permission() {
return array(
'edit views basic settings' => array(
'title' => t('Edit views basic settings'),
'description' => t('Edit basic settings such as header, footer, empty text, etc.'),
),
);
}
/**
* Implements hook_block_view_alter().
*/
function views_ui_basic_block_view_alter(&$build, $block) {
if ($block->module == 'views' && isset($build['content']) && is_array($build['content']) && !empty($build['content']['#views_contextual_links_info'])) {
$info = $build['content']['#views_contextual_links_info']['views_ui'];
$contextual_links = array(
'views_ui_basic',
array(
$info['view_name'],
$info['view_display_id'],
),
);
$build['content']['#contextual_links']['views_ui_basic'] = $contextual_links;
}
}
/**
* Implements hook_form_alter().
*/
function views_ui_basic_form_alter(&$form, &$form_state, $form_id) {
if ((arg(0) == 'views_ui_basic' || _views_ui_basic_is_tab()) && ($form_id == 'views_ui_edit_display_form' || $form_id == 'views_ui_config_item_form')) {
// Views 3.x
if ($form_id == 'views_ui_config_item_form') {
unset($form['options']['override']);
// Keep track of switch form value
$form['config_area'] = array(
'#type' => 'hidden',
'#value' => $form_state['id'],
);
}
// WYSIWYG support
_views_ui_basic_enable_wysiwyg($form);
unset($form['buttons']['override_update']);
unset($form['buttons']['cancel']);
unset($form['buttons']['remove']);
unset($form['override']);
// We'll override the Views setting on submit.
if ($form['buttons']['submit']['#value'] == t('Update default display')) {
$form['buttons']['submit']['#value'] = t('Update');
$form['override_submit'] = array(
'#type' => 'hidden',
'#value' => 1,
);
}
$form['buttons']['submit']['#submit'] = array(
'views_ui_basic_submit',
);
// New submit handler (removes old)
}
}
/**
* Views save/submit handler (overrides Views UI)
* Redirects afer save.
* @see views_ui_basic_form_alter()
*/
function views_ui_basic_submit($form, &$form_state) {
// Save setting as "overriden"
$section_override = $form_state['section'];
if ($section_override == 'pager_options') {
$section_override = 'pager';
}
$display =& $form_state['view']->display[$form_state['display_id']];
$display->handler
->set_override($section_override, FALSE);
// Views 3.x config item
if ($form_state['form_id'] == 'views_ui_config_item_form') {
views_ui_config_item_form_submit($form, $form_state);
}
else {
$display =& $form_state['view']->display[$form_state['display_id']];
$display->handler
->options_submit($form, $form_state);
}
$form_state['view']
->save();
drupal_set_message(t('The @section has been updated.', array(
'@section' => str_replace('_', ' ', $form_state['section']),
)));
// Clear the views cache.
cache_clear_all('*', 'cache_views');
// Clear the page cache.
cache_clear_all();
// Redirect back to view page or admin page
if (_views_ui_basic_is_tab()) {
$menuitem = menu_get_item();
drupal_goto($menuitem['tab_root_href']);
}
else {
drupal_goto("admin/content/views_ui_basic");
}
}
/**
* Edit a View's setting (e.g., header/footer/empty text, etc)
* @return string (rendered views UI form).
* @see views_ui_basic_form_alter()
*/
function views_ui_basic_edit_form($view_name, $display_name, $type) {
$output = '';
$fields = variable_get('views_ui_basic_fields', array());
if (!isset($fields[$type])) {
return FALSE;
}
$path = drupal_get_path('module', 'views_ui');
require_once "{$path}/includes/admin.inc";
$view = views_get_view($view_name);
$view
->init_display();
// Views 3.x config items (not a "display" setting)
$config_item = array(
'header',
'footer',
'empty',
);
$config_area = isset($_POST['config_area']) ? $_POST['config_area'] : 'area';
// Find view_area to edit
$view_area = isset($view->display[$display_name]->display_options[$type]) ? $view->display[$display_name]->display_options[$type] : NULL;
// Does default exist?
if (!$view_area && isset($view->display['default']->display_options[$type])) {
$view_area_default = $view->display['default']->display_options[$type];
}
if ($type == 'metatags') {
if (!module_exists('metatag_views')) {
return t('The <em>Metatag UI</em> and <em>Metatag Views</em> modules must be enabled in order to edit meta tags here.');
}
$is_default = !empty($view->display[$display_name]->handler->options[$type]);
$view_area = NULL;
}
else {
$is_default = !empty($view->display[$display_name]->handler->options['defaults'][$type]);
}
// If empty config item and empty default, auto-create add form.
if (in_array($type, $config_item) && empty($view_area) && (empty($view_area_default) || !$is_default)) {
// Replicate keys needed for views_ui_add_item_form_submit().
$form_state = array(
'view' => $view,
'type' => $type,
'display_id' => $display_name,
'values' => array(
'name' => array(
'views.area' => 'views.area',
),
'op' => t('Add'),
),
);
$form = array();
// @ to hide Views debug message
@views_ui_add_item_form_submit($form, $form_state);
}
elseif (is_array($view_area) && count($view_area) > 1) {
foreach ($view_area as $key => $area) {
if (isset($area['ui_name']) && $area['ui_name']) {
$title = $area['ui_name'];
}
elseif (isset($area['label']) && $area['label']) {
$title = $area['label'];
}
else {
$title = t('Text area');
}
$options[$key] = $title;
}
$switch_form = drupal_get_form('views_ui_basic_switch_form', $type, $options);
if ($switch_form['area']['#default_value']) {
$config_area = $switch_form['area']['#default_value'];
}
$output .= render($switch_form);
}
$form_state['section'] = $display_name;
$key = in_array($type, $config_item) ? 'config-item' : 'display';
$output .= views_ui_ajax_form(FALSE, $key, $view, $display_name, $type, $config_area);
// Remove non-compatible HTML in title (Views bug?)
$title = drupal_get_title();
$title = str_replace('<em class="placeholder">', ' - ', $title);
$title = str_replace('</em>', '', $title);
drupal_set_title($title);
return $output;
}
/**
* Switch between config items (for Views 3.x)
* @param $options
* Select drop-down values
*/
function views_ui_basic_switch_form($form, $form_state, $view_type, $options) {
$form['#suffix'] = '<div class="clearfix"></div><hr/>';
$form['#view_type'] = $view_type;
$default_value = isset($form_state['storage']) && isset($form_state['storage']['area']) ? $default_value = $form_state['storage']['area'] : NULL;
$form['area'] = array(
'#type' => 'select',
'#options' => $options,
'#default_value' => $default_value,
'#prefix' => '<div style="float:left;">',
'#suffix' => '</div>',
'#attributes' => array(
'onchange' => 'this.form.submit();',
),
);
$form['submit'] = array(
'#type' => 'submit',
'#attributes' => array(
'style' => 'margin:0.5em;',
),
'#value' => t('Switch Area'),
);
return $form;
}
/**
* Submit handler for switch area form.
*/
function views_ui_basic_switch_form_submit($form, &$form_state) {
$form_state['rebuild'] = TRUE;
// Multi-step for storage.
$form_state['storage']['area'] = $form_state['values']['area'];
}
/**
* List Views that site administer has selected.
* @return string (HTML)
*/
function views_ui_basic_list_page() {
$fields = _views_ui_basic_fields();
$fields_allowed = variable_get('views_ui_basic_fields', array());
$views = views_get_all_views();
$items = array();
// For theme_item_list
$allowed = variable_get('views_ui_basic', array());
foreach ($views as $view_key => $view_object) {
if (isset($allowed[$view_key])) {
$title = isset($view_object->display['page']) ? l($view_key, $view_object->display['page']->display_options['path']) : $view_key;
$items[$view_key][] = "<h4>{$title}</h4>";
foreach ($view_object->display as $display_key => $views_display) {
if (in_array($display_key, $allowed[$view_key])) {
$editlink = array();
foreach ($fields_allowed as $field) {
$defaults = isset($views_display->display_options['defaults']) ? $views_display->display_options['defaults'] : array();
if (!isset($defaults[$field])) {
$value = isset($view_object->display['default']->display_options[$field]) ? $view_object->display['default']->display_options[$field] : '';
}
else {
$value = isset($views_display->display_options[$field]) ? $views_display->display_options[$field] : '';
}
$value = $value && !is_array($value) ? substr(strip_tags($value), 0, 100) : '';
$editlink[] = l("{$fields[$field]}", "views_ui_basic/{$view_key}/{$display_key}/{$field}", array(
'attributes' => array(
'title' => $value,
),
));
}
$displayname = $views_display->display_title;
if (!empty($displayname)) {
$item = "{$displayname} ({$views_display->display_title}) Edit: " . implode(' | ', $editlink);
}
else {
$item = "{$display_key} ({$views_display->display_title}) Edit: " . implode(' | ', $editlink);
}
$items[$view_key]['children'][$display_key][] = $item;
}
}
}
}
if (!empty($items)) {
return theme('item_list', array(
'items' => $items,
));
}
else {
return 'No Views configured. Please ' . l('select the views', 'admin/structure/views/views_ui_basic') . ' you wish to use.';
}
}
//
// Internal helper functions
//
/**
* Retrieve Views of a specific type.
* @todo if default selected, check if overriden view is also selected
*/
function _views_ui_basic_get_views($type) {
$views = views_get_all_views();
$allowed = variable_get('views_ui_basic', array());
$items = array();
foreach ($views as $view_key => $view_object) {
if (isset($allowed[$view_key])) {
foreach ($view_object->display as $display_key => $view_display) {
// If default selected, return all pages
if ($view_display->display_plugin == $type && (in_array($display_key, $allowed[$view_key]) || $allowed[$view_key][0] == 'default')) {
$item = array(
'view_name' => $view_key,
'display_name' => $display_key,
);
if ($view_display->display_plugin == 'page') {
$item['path'] = $view_display->display_options['path'];
}
$items[] = $item;
}
}
}
}
return $items;
}
/**
* Is the current page the edit form with a tab (local task)?
* @return boolen
*/
function _views_ui_basic_is_tab() {
$menuitem = menu_get_item();
// accessed via our edit tab?
return arg(0) != 'views_ui_basic' && isset($menuitem['page_callback']) && $menuitem['page_callback'] == 'views_ui_basic_edit_form';
}
/**
* Generate local tasks (menu tabs) for View pages and blocks
*/
function _views_ui_basic_define_menu(&$items) {
// Determine tabs
$fields = _views_ui_basic_fields();
foreach (variable_get('views_ui_basic_fields', array()) as $field) {
if (isset($fields[$field])) {
$tabs[$field] = $fields[$field];
}
}
if (!isset($tabs)) {
return;
}
$first_field = key($tabs);
$weight = 10;
$views_pages = _views_ui_basic_get_views('page');
// views_ui_basic/test/default/header
foreach ($views_pages as $viewinfo) {
$path = $viewinfo['path'];
// View/Edit tabs
$items["{$path}/view_ui_view"] = array(
'title' => 'View',
'type' => MENU_DEFAULT_LOCAL_TASK,
'weight' => -10,
);
$items["{$path}/views_ui_edit"] = array(
'title' => 'Edit',
'page callback' => 'views_ui_basic_edit_form',
'page arguments' => array(
$viewinfo['view_name'],
$viewinfo['display_name'],
$first_field,
),
'type' => MENU_LOCAL_TASK,
'weight' => ++$weight,
'access arguments' => array(
'edit views basic settings',
),
);
// Sub tabs
foreach ($tabs as $field => $label) {
if ($field == 'metatags' && !module_exists('metatag_views')) {
// metatag_views has been disabled, do not display tab
// for metatag
continue;
}
if ($field == $first_field) {
$items["{$path}/views_ui_edit/{$first_field}"] = array(
'title' => $label,
'type' => MENU_DEFAULT_LOCAL_TASK,
'weight' => -10,
'access arguments' => array(
'edit views basic settings',
),
);
}
else {
$items["{$path}/views_ui_edit/{$field}"] = array(
'title' => $label,
'page callback' => 'views_ui_basic_edit_form',
'page arguments' => array(
$viewinfo['view_name'],
$viewinfo['display_name'],
$field,
),
'access arguments' => array(
'edit views basic settings',
),
'type' => MENU_LOCAL_TASK,
'weight' => ++$weight,
);
}
}
}
$views_blocks = _views_ui_basic_get_views('block');
$block_defaults = array(
'page callback' => 'views_ui_basic_edit_form',
'page arguments' => array(
1,
2,
3,
),
'access arguments' => array(
'edit views basic settings',
),
);
foreach ($views_blocks as $info) {
$path = 'views_ui_basic/' . $info['view_name'] . '/' . $info['display_name'];
$items[$path] = array(
'title' => 'Edit basic settings',
'type' => MENU_CALLBACK,
) + $block_defaults;
foreach (variable_get('views_ui_basic_fields', array()) as $field) {
$items[$path . '/' . $field] = array(
'title' => "Edit {$field}",
'type' => MENU_LOCAL_ACTION,
'context' => MENU_CONTEXT_INLINE,
) + $block_defaults;
}
}
}
/**
* Enable WYSIWYG by recursively searching form array.
*/
function _views_ui_basic_enable_wysiwyg(&$form_element) {
foreach ($form_element as $key => $value) {
if (is_array($value)) {
if (isset($value['#wysiwyg'])) {
$form_element[$key]['#wysiwyg'] = TRUE;
}
else {
_views_ui_basic_enable_wysiwyg($form_element[$key]);
}
}
}
}
Functions
Name![]() |
Description |
---|---|
views_ui_basic_admin_paths | Implements hook_admin_paths(). |
views_ui_basic_block_view_alter | Implements hook_block_view_alter(). |
views_ui_basic_edit_form | Edit a View's setting (e.g., header/footer/empty text, etc) |
views_ui_basic_form_alter | Implements hook_form_alter(). |
views_ui_basic_list_page | List Views that site administer has selected. |
views_ui_basic_menu | Implements hook_menu(). |
views_ui_basic_permission | Implements hook_permission(). |
views_ui_basic_submit | Views save/submit handler (overrides Views UI) Redirects afer save. |
views_ui_basic_switch_form | Switch between config items (for Views 3.x) |
views_ui_basic_switch_form_submit | Submit handler for switch area form. |
_views_ui_basic_define_menu | Generate local tasks (menu tabs) for View pages and blocks |
_views_ui_basic_enable_wysiwyg | Enable WYSIWYG by recursively searching form array. |
_views_ui_basic_fields | Return list of editable fields. |
_views_ui_basic_get_views | Retrieve Views of a specific type. @todo if default selected, check if overriden view is also selected |
_views_ui_basic_is_tab | Is the current page the edit form with a tab (local task)? |