<?php
use Drupal\views\ViewExecutable;
use Drupal\views\Plugin\Core\Entity\View;
use Drupal\views_ui\ViewUI;
use Drupal\views\Analyzer;
use Drupal\Core\Entity\EntityInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
function views_ui_menu() {
$items = array();
$base = array(
'access callback' => 'user_access',
'access arguments' => array(
'administer views',
),
'file' => 'admin.inc',
);
$ajax_base = array(
'page callback' => 'views_ui_ajax_callback',
'page arguments' => array(
4,
5,
),
'type' => MENU_CALLBACK,
) + $base;
$items['admin/structure/views/add'] = array(
'title' => 'Add new view',
'page callback' => 'views_ui_add_page',
'type' => MENU_LOCAL_ACTION,
) + $base;
$items['admin/structure/views'] = array(
'title' => 'Views',
'description' => 'Manage customized lists of content.',
'page callback' => 'views_ui_list_page',
) + $base;
$items['admin/structure/views/list'] = array(
'title' => 'List',
'weight' => -10,
'type' => MENU_DEFAULT_LOCAL_TASK,
) + $base;
$items['admin/structure/views/view/%views_ui_cache/clone'] = array(
'title callback' => 'views_ui_clone_title',
'title arguments' => array(
4,
),
'page callback' => 'entity_get_form',
'page arguments' => array(
4,
'clone',
),
'type' => MENU_CALLBACK,
) + $base;
$items['admin/structure/views/view/%views_ui/enable'] = array(
'title' => 'Enable a view',
) + $ajax_base;
$items['admin/structure/views/view/%views_ui/disable'] = array(
'title' => 'Disable a view',
) + $ajax_base;
$items['admin/structure/views/view/%views_ui/delete'] = array(
'title' => 'Delete a view',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'views_ui_confirm_delete',
4,
),
'type' => MENU_CALLBACK,
) + $base;
$items['admin/structure/views/settings'] = array(
'title' => 'Settings',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'views_ui_admin_settings_basic',
),
'type' => MENU_LOCAL_TASK,
) + $base;
$items['admin/structure/views/settings/basic'] = array(
'title' => 'Basic',
'page arguments' => array(
'views_ui_admin_settings_basic',
),
'type' => MENU_DEFAULT_LOCAL_TASK,
) + $base;
$items['admin/structure/views/settings/advanced'] = array(
'title' => 'Advanced',
'page arguments' => array(
'views_ui_admin_settings_advanced',
),
'type' => MENU_LOCAL_TASK,
'weight' => 1,
) + $base;
$items['admin/structure/views/view/%views_ui_cache'] = array(
'title callback' => 'views_ui_edit_page_title',
'title arguments' => array(
4,
),
'page callback' => 'views_ui_edit_page',
'page arguments' => array(
4,
),
) + $base;
$items['admin/structure/views/view/%views_ui_cache/edit'] = array(
'title' => 'Edit view',
'type' => MENU_DEFAULT_LOCAL_TASK,
'context' => MENU_CONTEXT_PAGE | MENU_CONTEXT_INLINE,
'weight' => -10,
'theme callback' => 'ajax_base_page_theme',
) + $base;
$items['admin/structure/views/view/%views_ui_cache/edit/%/ajax'] = array(
'page callback' => 'views_ui_ajax_get_form',
'page arguments' => array(
'views_ui_edit_form',
4,
6,
),
'delivery callback' => 'ajax_deliver',
'theme callback' => 'ajax_base_page_theme',
'type' => MENU_CALLBACK,
) + $base;
$items['admin/structure/views/view/%views_ui_cache/preview/%'] = array(
'page callback' => 'views_ui_build_preview',
'page arguments' => array(
4,
6,
),
'context' => MENU_CONTEXT_PAGE | MENU_CONTEXT_INLINE,
'type' => MENU_VISIBLE_IN_BREADCRUMB,
) + $base;
$items['admin/structure/views/view/%views_ui_cache/preview/%/ajax'] = array(
'page callback' => 'views_ui_build_preview',
'page arguments' => array(
4,
6,
),
'delivery callback' => 'ajax_deliver',
'theme callback' => 'ajax_base_page_theme',
'type' => MENU_CALLBACK,
) + $base;
$items['admin/structure/views/view/%views_ui_cache/break-lock'] = array(
'title' => 'Break lock',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'views_ui_break_lock_confirm',
4,
),
'type' => MENU_VISIBLE_IN_BREADCRUMB,
) + $base;
$items['admin/structure/views/nojs/%/%views_ui_cache'] = array(
'page callback' => 'views_ui_ajax_form',
'page arguments' => array(
FALSE,
4,
5,
),
'type' => MENU_CALLBACK,
) + $base;
$items['admin/structure/views/ajax/%/%views_ui_cache'] = array(
'page callback' => 'views_ui_ajax_form',
'page arguments' => array(
TRUE,
4,
5,
),
'delivery callback' => 'ajax_deliver',
'type' => MENU_CALLBACK,
) + $base;
$items['admin/structure/views/nojs/preview/%views_ui_cache/%'] = array(
'page callback' => 'views_ui_preview',
'page arguments' => array(
5,
6,
),
) + $base;
$items['admin/structure/views/ajax/preview/%views_ui_cache/%'] = array(
'page callback' => 'views_ui_preview',
'page arguments' => array(
5,
6,
),
'delivery callback' => 'ajax_deliver',
) + $base;
$items['admin/views/ajax/autocomplete/tag'] = array(
'page callback' => 'views_ui_autocomplete_tag',
'type' => MENU_CALLBACK,
) + $base;
$items['admin/reports/fields/list'] = array(
'title' => 'List',
'type' => MENU_DEFAULT_LOCAL_TASK,
'weight' => -10,
);
$items['admin/reports/fields/views-fields'] = array(
'title' => 'Used in views',
'description' => 'Overview of fields used in all views.',
'page callback' => 'views_ui_field_list',
'type' => MENU_LOCAL_TASK,
'weight' => 0,
) + $base;
$items['admin/reports/views-plugins'] = array(
'title' => 'Views plugins',
'description' => 'Overview of plugins used in all views.',
'page callback' => 'views_ui_plugin_list',
) + $base;
return $items;
}
function views_ui_theme() {
$path = drupal_get_path('module', 'views_ui');
return array(
'views_ui_display_tab_setting' => array(
'variables' => array(
'description' => '',
'link' => '',
'settings_links' => array(),
'overridden' => FALSE,
'defaulted' => FALSE,
'description_separator' => TRUE,
'class' => array(),
),
'template' => 'views-ui-display-tab-setting',
'path' => "{$path}/theme",
'file' => 'theme.inc',
),
'views_ui_display_tab_bucket' => array(
'render element' => 'element',
'template' => 'views-ui-display-tab-bucket',
'path' => "{$path}/theme",
'file' => 'theme.inc',
),
'views_ui_edit_item' => array(
'variables' => array(
'type' => NULL,
'view' => NULL,
'display' => NULL,
'no_fields' => FALSE,
),
'template' => 'views-ui-edit-item',
'path' => "{$path}/theme",
),
'views_ui_rearrange_form' => array(
'render element' => 'form',
'path' => "{$path}/theme",
'file' => 'theme.inc',
),
'views_ui_rearrange_filter_form' => array(
'render element' => 'form',
'path' => "{$path}/theme",
'file' => 'theme.inc',
),
'views_ui_expose_filter_form' => array(
'render element' => 'form',
'path' => "{$path}/theme",
'file' => 'theme.inc',
),
'views_ui_view_info' => array(
'variables' => array(
'view' => NULL,
'base' => NULL,
),
'path' => "{$path}/theme",
'file' => 'theme.inc',
),
'views_ui_build_group_filter_form' => array(
'render element' => 'form',
'path' => "{$path}/theme",
'file' => 'theme.inc',
),
'views_tabset' => array(
'variables' => array(
'tabs' => NULL,
),
),
'views_tab' => array(
'variables' => array(
'body' => NULL,
),
),
'views_ui_reorder_displays_form' => array(
'render element' => 'form',
'path' => "{$path}/theme",
'file' => 'theme.inc',
),
'views_ui_style_plugin_table' => array(
'render element' => 'form',
'path' => "{$path}/theme",
'file' => 'theme.inc',
),
'views_ui_view_preview_section' => array(
'variables' => array(
'view' => NULL,
'section' => NULL,
'content' => NULL,
'links' => '',
),
'path' => "{$path}/theme",
'file' => 'theme.inc',
),
'views_ui_container' => array(
'render element' => 'element',
'path' => "{$path}/theme",
'file' => 'theme.inc',
),
);
}
function views_ui_library_info() {
$libraries = array();
$libraries['views_ui.admin'] = array(
'title' => 'Views UI ADMIN',
'version' => VERSION,
'js' => array(
drupal_get_path('module', 'views_ui') . '/js/views-admin.js' => array(
'group' => JS_DEFAULT,
),
),
'dependencies' => array(
array(
'system',
'jquery',
),
array(
'system',
'drupal',
),
array(
'system',
'drupalSettings',
),
array(
'system',
'jquery.once',
),
array(
'system',
'jquery.form',
),
array(
'system',
'drupal.ajax',
),
array(
'views',
'views.ajax',
),
),
);
return $libraries;
}
function views_ui_edit_page_title(ViewUI $view) {
module_load_include('inc', 'views_ui', 'admin');
$bases = views_fetch_base_tables();
$name = $view
->getHumanName();
if (isset($bases[$view
->get('base_table')])) {
$name .= ' (' . $bases[$view
->get('base_table')]['title'] . ')';
}
return $name;
}
function views_ui_cache_load($name) {
$views_temp_store = drupal_container()
->get('user.tempstore')
->get('views');
$view = $views_temp_store
->get($name);
$storage = entity_load('view', $name);
$original_view = $storage ? new ViewUI($storage) : NULL;
if (empty($view)) {
$view = $original_view;
if (!empty($view)) {
$view->editing = TRUE;
}
}
else {
if ($original_view) {
$view
->set('disabled', $original_view
->get('disabled'));
}
}
if (empty($view)) {
return FALSE;
}
$view->locked = $views_temp_store
->getMetadata($view
->get('name'));
return $view;
}
function views_ui_cache_set(ViewUI $view) {
if (isset($view->locked) && is_object($view->locked) && $view->locked->owner != $GLOBALS['user']->uid) {
drupal_set_message(t('Changes cannot be made to a locked view.'), 'error');
return;
}
$view->changed = TRUE;
$executable = $view
->get('executable');
if (isset($executable->current_display)) {
$view->changed_display[$executable->current_display] = TRUE;
unset($executable->current_display);
}
unset($executable->display_handler);
unset($executable->default_display);
$executable->query = NULL;
$executable->displayHandlers = array();
drupal_container()
->get('user.tempstore')
->get('views')
->set($view
->get('name'), $view);
}
function views_ui_clone_title(ViewUI $view) {
return t('Clone of @human_name', array(
'@human_name' => $view
->getHumanName(),
));
}
function views_ui_preprocess_views_view(&$vars) {
$view = $vars['view'];
if (!empty($view->views_ui_context) && module_exists('contextual')) {
$view->hide_admin_links = TRUE;
foreach (array(
'title',
'header',
'exposed',
'rows',
'pager',
'more',
'footer',
'empty',
'attachment_after',
'attachment_before',
) as $section) {
if (!empty($vars[$section])) {
$vars[$section] = array(
'#theme' => 'views_ui_view_preview_section',
'#view' => $view,
'#section' => $section,
'#content' => is_array($vars[$section]) ? drupal_render($vars[$section]) : $vars[$section],
'#theme_wrappers' => array(
'views_ui_container',
),
'#attributes' => array(
'class' => 'contextual-region',
),
);
$vars[$section] = drupal_render($vars[$section]);
}
}
}
}
function views_ui_view_preview_section_handler_links(ViewUI $view, $type, $title = FALSE) {
$display = $view->executable->display_handler->display;
$handlers = $view->executable->display_handler
->getHandlers($type);
$links = array();
$types = ViewExecutable::viewsHandlerTypes();
if ($title) {
$links[$type . '-title'] = array(
'title' => $types[$type]['title'],
);
}
foreach ($handlers as $id => $handler) {
$field_name = $handler
->adminLabel(TRUE);
$links[$type . '-edit-' . $id] = array(
'title' => t('Edit @section', array(
'@section' => $field_name,
)),
'href' => "admin/structure/views/nojs/config-item/{$view->get('name')}/{$display['id']}/{$type}/{$id}",
'attributes' => array(
'class' => array(
'views-ajax-link',
),
),
);
}
$links[$type . '-add'] = array(
'title' => t('Add new'),
'href' => "admin/structure/views/nojs/add-item/{$view->get('name')}/{$display['id']}/{$type}",
'attributes' => array(
'class' => array(
'views-ajax-link',
),
),
);
return $links;
}
function views_ui_view_preview_section_display_category_links(ViewUI $view, $type, $title) {
$display = $view->display_handler->display;
$links = array(
$type . '-edit' => array(
'title' => t('Edit @section', array(
'@section' => $title,
)),
'href' => "admin/structure/views/nojs/display/{$view->get('name')}/{$display['id']}/{$type}",
'attributes' => array(
'class' => array(
'views-ajax-link',
),
),
),
);
return $links;
}
function views_ui_view_preview_section_rows_links(ViewUI $view) {
$display = $view->executable->display_handler->display;
$links = array();
$links = array_merge($links, views_ui_view_preview_section_handler_links($view, 'filter', TRUE));
$links = array_merge($links, views_ui_view_preview_section_handler_links($view, 'field', TRUE));
$links = array_merge($links, views_ui_view_preview_section_handler_links($view, 'sort', TRUE));
$links = array_merge($links, views_ui_view_preview_section_handler_links($view, 'argument', TRUE));
$links = array_merge($links, views_ui_view_preview_section_handler_links($view, 'relationship', TRUE));
return $links;
}
function views_ui_views_plugins_display_alter(&$plugins) {
foreach ($plugins as &$display) {
$display['contextual links']['views_ui'] = array(
'parent path' => 'admin/structure/views/view',
'argument properties' => array(
'name',
),
);
}
}
function views_ui_contextual_links_view_alter(&$element, $items) {
if (views_ui_contextual_links_suppress()) {
$element['#links'] = array();
}
elseif (!empty($element['#links']['views-ui-edit']) && !empty($element['#element']['#views_contextual_links_info']['views_ui']['view_display_id'])) {
$display_id = $element['#element']['#views_contextual_links_info']['views_ui']['view_display_id'];
$element['#links']['views-ui-edit']['href'] .= '/' . $display_id;
}
}
function views_ui_contextual_links_suppress($set = NULL) {
$suppress =& drupal_static(__FUNCTION__);
if (isset($set)) {
$suppress = $set;
}
return $suppress;
}
function views_ui_contextual_links_suppress_push() {
views_ui_contextual_links_suppress((int) views_ui_contextual_links_suppress() + 1);
}
function views_ui_contextual_links_suppress_pop() {
views_ui_contextual_links_suppress((int) views_ui_contextual_links_suppress() - 1);
}
function views_ui_ajax_get_form($form_id) {
$form_state = array(
'no_redirect' => TRUE,
);
$form_state['rebuild_info']['copy']['#build_id'] = TRUE;
$form_state['rebuild_info']['copy']['#action'] = TRUE;
$args = func_get_args();
array_shift($args);
$form_state['build_info']['args'] = $args;
$form = drupal_build_form($form_id, $form_state);
if (!empty($form_state['triggering_element'])) {
$callback = $form_state['triggering_element']['#ajax']['callback'];
}
if (!empty($callback) && function_exists($callback)) {
return $callback($form, $form_state);
}
}
function views_ui_library_alter(&$libraries, $module) {
if ($module == 'system' && isset($libraries['jquery.ui.dialog'])) {
if (version_compare($libraries['jquery.ui.dialog']['version'], '1.7.2', '>=')) {
$libraries['jquery.ui.dialog']['js'][drupal_get_path('module', 'views') . '/js/jquery.ui.dialog.patch.js'] = array();
}
}
}
function views_ui_views_analyze($view) {
$ret = array();
if (count($view->displayHandlers) < 2) {
$ret[] = Analyzer::formatMessage(t('This view has only a default display and therefore will not be placed anywhere on your site; perhaps you want to add a page or a block display.'), 'warning');
}
foreach ($view->displayHandlers as $display) {
if (empty($display)) {
continue;
}
if ($display
->hasPath() && ($path = $display
->getOption('path'))) {
$normal_path = drupal_container()
->get('path.alias_manager')
->getSystemPath($path);
if ($path != $normal_path) {
$ret[] = Analyzer::formatMessage(t('You have configured display %display with a path which is an path alias as well. This might lead to unwanted effects so better use an internal path.', array(
'%display' => $display['display_title'],
)), 'warning');
}
}
}
return $ret;
}
function views_ui_truncate($string, $length) {
if (drupal_strlen($string) > $length) {
$string = drupal_substr($string, 0, $length);
$string .= '...';
}
return $string;
}
function views_ui_load($name) {
return views_get_view($name);
}
function views_ui_ajax_callback(ViewExecutable $view, $op) {
$view->storage
->{$op}();
if (drupal_container()
->get('request')->request
->get('js')) {
$list = entity_list_controller('view')
->render();
$commands = array(
ajax_command_replace('#views-entity-list', drupal_render($list)),
);
return new JsonResponse(ajax_render($commands));
}
else {
$entity_info = entity_get_info('view');
drupal_goto('admin/structure/views');
}
}
function views_ui_confirm_delete($form, &$form_state, ViewExecutable $view) {
$form['view'] = array(
'#type' => 'value',
'#value' => $view,
);
return confirm_form($form, t('Are you sure you want to delete the %name view?', array(
'%name' => $view->storage
->getHumanName(),
)), 'admin/structure/views', t('This action cannot be undone.'), t('Delete'), t('Cancel'));
}
function views_ui_confirm_delete_submit($form, &$form_state) {
$form_state['values']['view']->storage
->delete();
$form_state['redirect'] = 'admin/structure/views';
}
function views_ui_list_page() {
return entity_list_controller('view')
->render();
}