Same filename and directory in other branches
  1. 5.x-1.x views_ui.module
  2. 7.x-3.x views_ui.module

views_ui.module Provide structure for the administrative interface to Views.

File

views_ui.module
View source
<?php

/**
 * @file views_ui.module
 * Provide structure for the administrative interface to Views.
 */

/*
 * Implementation of hook_menu()
 */
function views_ui_menu() {
  $items = array();

  // Minor code reduction technique
  $base = array(
    'access callback' => 'user_access',
    'access arguments' => array(
      'administer views',
    ),
    'file' => 'includes/admin.inc',
  );
  $callback = $base + array(
    'type' => MENU_CALLBACK,
  );
  $convert = array(
    'file' => 'includes/convert.inc',
  ) + $base;
  $items['admin/build/views'] = $base + array(
    'title' => 'Views',
    'page callback' => 'views_ui_list_views',
    'description' => 'Views are customized lists of content on your system; they are highly configurable and give you control over how lists of content are presented.',
    'type' => MENU_NORMAL_ITEM,
  );
  $items['admin/build/views/list'] = $base + array(
    'title' => 'List',
    'page callback' => 'views_ui_list_views',
    'type' => MENU_DEFAULT_LOCAL_TASK,
    'weight' => '-1',
  );
  $items['admin/build/views/add'] = $base + array(
    'title' => 'Add',
    'page callback' => 'views_ui_add_page',
    'type' => MENU_LOCAL_TASK,
  );
  $items['admin/build/views/import'] = array(
    'title' => 'Import',
    'page callback' => 'drupal_get_form',
    'page arguments' => array(
      'views_ui_import_page',
    ),
    'access callback' => 'views_import_access',
    'type' => MENU_LOCAL_TASK,
  ) + $base;
  $items['admin/build/views/tools'] = $base + array(
    'title' => 'Tools',
    'page callback' => 'drupal_get_form',
    'page arguments' => array(
      'views_ui_admin_tools',
    ),
    'type' => MENU_LOCAL_TASK,
  );
  $items['admin/build/views/tools/basic'] = $base + array(
    'title' => 'Basic',
    'page callback' => 'drupal_get_form',
    'page arguments' => array(
      'views_ui_admin_tools',
    ),
    'type' => MENU_DEFAULT_LOCAL_TASK,
    'weight' => -10,
  );
  $items['admin/build/views/tools/convert'] = $convert + array(
    'title' => 'Convert',
    'description' => 'Convert stored Views 1 views.',
    'page callback' => 'views_ui_admin_convert',
    'type' => MENU_LOCAL_TASK,
    'weight' => 1,
  );
  $items['admin/build/views1/delete'] = $convert + array(
    'title' => 'Delete view',
    'page callback' => 'drupal_get_form',
    'page arguments' => array(
      'views_ui_delete1_confirm',
      4,
    ),
    'type' => MENU_CALLBACK,
  );
  $items['admin/build/views1/convert'] = $convert + array(
    'title' => 'Convert view',
    'page callback' => 'views_ui_convert1',
    'page arguments' => array(
      4,
    ),
    'type' => MENU_CALLBACK,
  );
  $items['admin/build/views/delete/%views_ui_cache'] = $callback + array(
    'title' => 'Delete view',
    'page callback' => 'drupal_get_form',
    'page arguments' => array(
      'views_ui_delete_confirm',
      4,
    ),
  );
  $items['admin/build/views/break-lock/%views_ui_cache'] = $callback + array(
    'title' => 'Delete view',
    'page callback' => 'drupal_get_form',
    'page arguments' => array(
      'views_ui_break_lock_confirm',
      4,
    ),
  );
  $items['admin/build/views/export/%views_ui_cache'] = $callback + array(
    'page callback' => 'drupal_get_form',
    'page arguments' => array(
      'views_ui_export_page',
      4,
    ),
    'type' => MENU_LOCAL_TASK,
  );
  $items['admin/build/views/clone/%views_ui_cache'] = $callback + array(
    'page callback' => 'views_ui_clone_page',
    'page arguments' => array(
      4,
    ),
    'type' => MENU_LOCAL_TASK,
  );
  $items['admin/build/views/enable/%views_ui_default'] = $callback + array(
    'page callback' => 'views_ui_enable_page',
    'page arguments' => array(
      4,
    ),
  );
  $items['admin/build/views/disable/%views_ui_default'] = $callback + array(
    'page callback' => 'views_ui_disable_page',
    'page arguments' => array(
      4,
    ),
  );

  // Many line items for editing a view.
  $items['admin/build/views/edit/%views_ui_cache'] = $base + array(
    'title' => 'Edit',
    'page callback' => 'views_ui_edit_page',
    'page arguments' => array(
      4,
    ),
    'type' => MENU_LOCAL_TASK,
  );

  // lots of little edit form pieces.
  $items['admin/build/views/%views_ui_js/analyze/%views_ui_cache'] = $callback + array(
    'page callback' => 'views_ui_analyze_view',
    'page arguments' => array(
      3,
      5,
    ),
  );
  $items['admin/build/views/%views_ui_js/reorder-displays/%views_ui_cache'] = $callback + array(
    'page callback' => 'views_ui_reorder_view',
    'page arguments' => array(
      3,
      5,
    ),
  );
  $items['admin/build/views/%views_ui_js/human_name/%views_ui_cache'] = $callback + array(
    'page callback' => 'views_ui_edit_details',
    'page arguments' => array(
      'human_name',
      3,
      5,
    ),
  );
  $items['admin/build/views/%views_ui_js/tag/%views_ui_cache'] = $callback + array(
    'page callback' => 'views_ui_edit_details',
    'page arguments' => array(
      'tag',
      3,
      5,
    ),
  );
  $items['admin/build/views/%views_ui_js/description/%views_ui_cache'] = $callback + array(
    'page callback' => 'views_ui_edit_details',
    'page arguments' => array(
      'description',
      3,
      5,
    ),
  );
  $items['admin/build/views/%views_ui_js/add-display/%views_ui_cache'] = $callback + array(
    'page callback' => 'views_ui_add_display',
    'page arguments' => array(
      3,
      5,
    ),
  );
  $items['admin/build/views/%views_ui_js/clone-display/%views_ui_cache'] = $callback + array(
    'page callback' => 'views_ui_clone_display',
    'page arguments' => array(
      3,
      5,
      6,
    ),
  );

  // Live preview
  $items['admin/build/views/%views_ui_js/preview/%views_ui_cache'] = $callback + array(
    'page callback' => 'views_ui_preview',
    'page arguments' => array(
      3,
      5,
    ),
  );

  // autocompletes for handlers and such
  $items['admin/views/ajax/autocomplete/tag'] = $callback + array(
    'page callback' => 'views_ui_autocomplete_tag',
  );

  // Generic ajax callback
  // display specific parameters
  $items['admin/build/views/%views_ui_js/%/%views_ui_cache'] = $callback + array(
    'page callback' => 'views_ui_ajax_form',
    'page arguments' => array(
      3,
      4,
      5,
    ),
  );
  return $items;
}

/*
 * Implementation of hook_help()
 */
function views_ui_help($path, $arg = '') {
  switch ($path) {
    case 'admin/build/views/tools/convert':
      return '<p>' . t('The converter will make a best-effort attempt to convert a Views 1 view to Views 2. This conversion is not reliable; you will very likely have to make adjustments to your view to get it to match. You can import Views 1 views through the normal Import tab.') . '</p>';
  }
}

/*
 * Implementation of hook_theme()
 */
function views_ui_theme() {
  $path = drupal_get_path('module', 'views');
  require_once "./{$path}/includes/admin.inc";
  return array(
    // edit a view
    'views_ui_edit_view' => array(
      'arguments' => array(
        'view' => NULL,
      ),
      'template' => 'views-ui-edit-view',
      'path' => "{$path}/theme",
    ),
    'views_ui_edit_tab' => array(
      'arguments' => array(
        'view' => NULL,
        'display' => NULL,
      ),
      'template' => 'views-ui-edit-tab',
      'path' => "{$path}/theme",
    ),
    'views_ui_edit_item' => array(
      'arguments' => array(
        'type' => NULL,
        'view' => NULL,
        'display' => NULL,
        'no_fields' => FALSE,
      ),
      'template' => 'views-ui-edit-item',
      'path' => "{$path}/theme",
    ),
    'views_ui_rearrange_form' => array(
      'arguments' => array(
        'form' => NULL,
      ),
      'file' => 'includes/admin.inc',
    ),
    'views_ui_rearrange_filter_form' => array(
      'arguments' => array(
        'form' => NULL,
      ),
      'file' => 'includes/admin.inc',
    ),
    // list views
    'views_ui_list_views' => array(
      'template' => 'views-ui-list-views',
      'path' => "{$path}/theme",
    ),
    'views_ui_list_views_form' => array(
      'file' => 'includes/admin.inc',
      'arguments' => array(
        'form' => NULL,
      ),
    ),
    // tab themes
    'views_tabset' => array(
      'arguments' => array(
        'tabs' => NULL,
      ),
      'file' => 'includes/tabs.inc',
    ),
    'views_tab' => array(
      'arguments' => array(
        'body' => NULL,
      ),
      'file' => 'includes/tabs.inc',
    ),
    'views_ui_reorder_displays_form' => array(
      'arguments' => array(
        'form' => NULL,
      ),
      'file' => 'includes/admin.inc',
    ),
    // On behalf of a plugin
    'views_ui_style_plugin_table' => array(
      'arguments' => array(
        'form' => NULL,
      ),
      'file' => 'includes/admin.inc',
    ),
  );
}

/**
 * Specialized menu callback to load a view either out of the cache or just
 * load it.
 */
function views_ui_cache_load($name) {
  views_include('cache');
  views_include('view');
  $view = views_object_cache_get('view', $name);
  if (empty($view)) {
    $view = views_get_view($name);
    if (!empty($view)) {

      // Check to see if someone else is already editing this view.
      global $user;
      $view->locked = db_fetch_object(db_query("SELECT s.uid, v.updated FROM {views_object_cache} v INNER JOIN {sessions}  s ON v.sid = s.sid WHERE s.sid != '%s' and v.name = '%s' and v.obj = 'view' ORDER BY v.updated ASC", session_id(), $view->name));

      // Set a flag to indicate that this view is being edited.
      // This flag will be used e.g. to determine whether strings
      // should be localized.
      $view->editing = TRUE;
    }
  }
  if (empty($view)) {
    return FALSE;
  }
  else {
    return $view;
  }
}
function views_ui_check_lock($view) {
}

/**
 * Specialized cache function to add a flag to our view, include an appropriate
 * include, and cache more easily.
 */
function views_ui_cache_set(&$view) {
  if (!empty($view->locked)) {
    drupal_set_message(t('Changes cannot be made to a locked view.'), 'error');
    return;
  }
  views_include('cache');
  $view->changed = TRUE;

  // let any future object know that this view has changed.
  // Unset handlers; we don't want to write these into the cache
  unset($view->display_handler);
  unset($view->current_display);
  unset($view->default_display);
  $view->query = NULL;
  foreach (array_keys($view->display) as $id) {
    unset($view->display[$id]->handler);
    unset($view->display[$id]->default_display);
  }
  views_object_cache_set('view', $view->name, $view);
}

/**
 * Specialized menu callback to load a view that is only a default
 * view.
 */
function views_ui_default_load($name) {
  $view = views_get_view($name);
  if ($view->type == t('Default')) {
    return $view;
  }
  return FALSE;
}

/**
 * Check to see if the incoming menu item is js capable or not.
 */
function views_ui_js_load($js) {
  if ($js == 'ajax') {
    return TRUE;
  }
  return 0;
}

Functions

Namesort descending Description
views_ui_cache_load Specialized menu callback to load a view either out of the cache or just load it.
views_ui_cache_set Specialized cache function to add a flag to our view, include an appropriate include, and cache more easily.
views_ui_check_lock
views_ui_default_load Specialized menu callback to load a view that is only a default view.
views_ui_help
views_ui_js_load Check to see if the incoming menu item is js capable or not.
views_ui_menu
views_ui_theme