views_ui_basic.module in Views UI: Edit Basic Settings 6
Same filename and directory in other branches
views_ui_basic.module User interface to edit basic settings of Views.
File
views_ui_basic.moduleView source
<?php
/**
* @file views_ui_basic.module
* User interface to edit basic settings of Views.
*/
/**
* Return list of editable fields.
*/
function _views_ui_basic_fields() {
$fields = array(
// Views form name => label
'header' => t('Header'),
'footer' => t('Footer'),
'title' => t('Title'),
'empty' => t('Empty text'),
);
switch (_views_ui_basic_ver()) {
case 2:
$fields['items_per_page'] = t('Items per page');
break;
case 3:
$fields['pager_options'] = t('Pager options');
break;
}
return $fields;
}
/**
* Return Views API major version number.
*/
function _views_ui_basic_ver() {
return (int) substr(views_api_version(), 0, 1);
}
/**
* Implements hook_menu().
*/
function views_ui_basic_menu() {
$items = array();
$items['admin/content/views_ui_basic'] = array(
'title' => t('Edit views'),
'page callback' => 'views_ui_basic_list_page',
'access arguments' => array(
'edit views basic settings',
),
'type' => MENU_NORMAL_ITEM,
);
$items['views_ui_basic'] = array(
// different URI to support rich text editors
'title' => t('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/build/views/views_ui_basic'] = array(
'title' => t('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_perm().
*/
function views_ui_basic_perm() {
return array(
'edit views basic settings',
);
}
/**
* 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']);
}
// WYSIWYG support
if (module_exists('wysiwyg')) {
$form_rename = array();
// Format key must be renamed and same key order maintained
foreach ($form as $key => $value) {
if (strpos($key, '_format') !== FALSE) {
// e.g., 'header_format' to 'format'
$key = 'format';
}
$form_rename[$key] = $value;
}
$form = $form_rename;
}
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)
}
}
/**
* Preprocess page hook.
*/
function views_ui_basic_preprocess_page(&$vars) {
if (arg(0) == 'views_ui_basic' && arg(1)) {
// Determine tabs
$fields = _views_ui_basic_fields();
foreach (variable_get('views_ui_basic_fields', array()) as $field) {
$tabpages[$field] = $fields[$field];
}
if (isset($tabpages)) {
$tabs = theme('menu_local_task', theme('menu_item_link', array(
'title' => '< Edit views',
'href' => 'admin/content/views_ui_basic',
'type' => MENU_LOCAL_TASK,
)));
foreach ($tabpages as $field => $label) {
$link = array(
'title' => $label,
'href' => 'views_ui_basic/' . arg(1) . '/' . arg(2) . '/' . $field,
'type' => MENU_LOCAL_TASK,
);
$item_link = theme('menu_item_link', $link);
$tabs .= theme('menu_local_task', $item_link, strpos($item_link, 'active'));
}
}
$vars['tabs'] = "<ul class=\"tabs primary clearfix\">\n" . $tabs . "</ul>\n";
}
}
/**
* Views save/submit handler (overrides Views UI)
* Redirects afer save.
* @see views_ui_basic_form_alter().
*/
function views_ui_basic_submit($form, &$form_state) {
// Views 3.x config item
if ($form_state['form_id'] == 'views_ui_config_item_form') {
// @todo Defaults override
views_ui_config_item_form_submit($form, $form_state);
}
else {
$display =& $form_state['view']->display[$form_state['display_id']];
// Do not save as default Views value; instead save field value as "override"
$display->display_options['defaults'][$form_state['section']] = NULL;
$display->handler->options['defaults'][$form_state['section']] = NULL;
$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();
// Remove this view from cache so we can edit it properly.
views_object_cache_clear('view', $form_state['view']->name);
// Redirect back to view page or admin page
if (_views_ui_basic_is_tab()) {
$menuitem = menu_get_item();
drupal_goto($menuitem['tab_root']);
}
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() for form tweaks
*/
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)
if (_views_ui_basic_ver() == 3) {
$config_item = array(
'header',
'footer',
'empty',
);
$config_area = 'area';
$view_area = $view->display[$display_name]->display_options[$type];
// If empty config item, auto-create add form.
if (in_array($type, $config_item) && empty($view_area)) {
// 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'),
),
);
views_ui_add_item_form_submit($form, $form_state);
}
else {
if (is_array($view_area) && count($view_area) > 1) {
// Get area from URL
$args = arg();
$last_arg = $args[count($args) - 1];
if (strpos($last_arg, 'area') !== FALSE) {
$config_area = $last_arg;
}
foreach ($view_area as $key => $area) {
if (isset($area['ui_name']) && $area['ui_name']) {
$title = $area['ui_name'];
}
else {
if (isset($area['label']) && $area['label']) {
$title = $area['label'];
}
else {
$title = t('Text area');
}
}
$options[$key] = $title;
}
$output .= drupal_get_form('views_ui_basic_switch_form', $type, $options, $config_area);
}
}
}
else {
$config_item = array();
$config_area = NULL;
}
$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);
return $output;
}
/**
* Switch between config items (for Views 3.x)
* @param $options
* Select drop-down values
*/
function views_ui_basic_switch_form($form_state, $view_type, $options, $default_value = NULL) {
$form['#suffix'] = '<hr/>';
$form['#view_type'] = $view_type;
$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:1em 0.5em',
),
'#value' => t('Switch Area'),
);
return $form;
}
/**
* Submit handler for switch area form.
*/
function views_ui_basic_switch_form_submit($form, &$form_state) {
if (arg(0) == 'views_ui_basic') {
$prefix = arg(0) . '/' . arg(1) . '/' . arg(2);
}
else {
$base = str_replace(base_path(), '', $form['#action']);
$prefix = substr($base, 0, strpos($base, 'views_ui_edit') + 13);
}
$form_state['redirect'] = "{$prefix}/{$form['#view_type']}/{$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,
),
));
}
$item = "{$display_key} ({$views_display->display_title}) Edit: " . implode(' | ', $editlink);
/*
//print_r($views_display);
$item =
"$display_key ($views_display->display_title) " .
l("edit header", "views_ui_basic/$view_key/$display_key/header") . ' | ' .
l("edit footer", "views_ui_basic/$view_key/$display_key/footer");
*/
if (_views_ui_basic_ver() == 2) {
if ($header = node_teaser($views_display->display_options['header'], 1)) {
$header = check_markup($header, $views_display->display_options['header_format']);
$item .= "<fieldset><legend>" . l("Header", "views_ui_basic/{$view_key}/{$display_key}/header") . "</legend>{$header}</fieldset>";
}
if ($footer = node_teaser($views_display->display_options['footer'], 1)) {
$footer = check_markup($footer, $views_display->display_options['footer_format']);
$item .= "<fieldset><legend>" . l("Footer", "views_ui_basic/{$view_key}/{$display_key}/footer") . "</legend>{$footer}</fieldset>";
}
}
$items[$view_key]['children'][$display_key][] = $item;
}
}
}
}
if (!empty($items)) {
return theme('item_list', $items);
}
else {
return 'No Views configured. Please ' . l('select the views', 'admin/build/views/views_ui_basic') . ' you wish to use.';
}
}
//
// Internal helper functions
//
/**
* Retrieve Views pages
* @todo if default selected, check if overriden view is also selected
*/
function _views_ui_basic_get_pages() {
$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 == 'page' && (in_array($display_key, $allowed[$view_key]) || $allowed[$view_key][0] == 'default')) {
$items[$view_display->display_options['path']] = array(
'view_name' => $view_key,
'display_name' => $display_key,
);
}
}
}
}
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
*/
function _views_ui_basic_define_menu(&$items) {
// Determine tabs
$fields = _views_ui_basic_fields();
foreach (variable_get('views_ui_basic_fields', array()) as $field) {
$tabs[$field] = $fields[$field];
}
if (!isset($tabs)) {
return;
}
$first_field = key($tabs);
$weight = 10;
$views_pages = _views_ui_basic_get_pages();
// views_ui_basic/test/default/header
foreach ($views_pages as $path => $viewinfo) {
// View/Edit tabs
$items["{$path}/view_ui_view"] = array(
'title' => t('View'),
'type' => MENU_DEFAULT_LOCAL_TASK,
'weight' => -10,
);
$items["{$path}/views_ui_edit"] = array(
'title' => t('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 == $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,
);
}
}
}
}
Functions
Name![]() |
Description |
---|---|
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_perm | Implements hook_perm(). |
views_ui_basic_preprocess_page | Preprocess page hook. |
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 |
_views_ui_basic_fields | Return list of editable fields. |
_views_ui_basic_get_pages | Retrieve Views pages @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)? |
_views_ui_basic_ver | Return Views API major version number. |