views_ui.module

Same filename in other branches
  1. 9 core/modules/views_ui/views_ui.module
  2. 8.9.x core/modules/views_ui/views_ui.module
  3. 10 core/modules/views_ui/views_ui.module

File

core/modules/views_ui/views_ui.module

View source
<?php


/**
 * @file
 */
use Drupal\Component\Utility\Xss;
use Drupal\Core\Url;
use Drupal\views\ViewExecutable;

/**
 * Implements hook_preprocess_HOOK() for views templates.
 */
function views_ui_preprocess_views_view(&$variables) : void {
    $view = $variables['view'];
    // Render title for the admin preview.
    if (!empty($view->live_preview)) {
        $variables['title'] = [
            '#markup' => $view->getTitle(),
            '#allowed_tags' => Xss::getHtmlTagList(),
        ];
    }
    if (!empty($view->live_preview) && \Drupal::moduleHandler()->moduleExists('contextual')) {
        $view->setShowAdminLinks(FALSE);
        foreach ([
            'title',
            'header',
            'exposed',
            'rows',
            'pager',
            'more',
            'footer',
            'empty',
            'attachment_after',
            'attachment_before',
        ] as $section) {
            if (!empty($variables[$section])) {
                $variables[$section] = [
                    '#theme' => 'views_ui_view_preview_section',
                    '#view' => $view,
                    '#section' => $section,
                    '#content' => $variables[$section],
                    '#theme_wrappers' => [
                        'views_ui_container',
                    ],
                    '#attributes' => [
                        'class' => [
                            'contextual-region',
                        ],
                    ],
                ];
            }
        }
    }
}

/**
 * Implements hook_theme_suggestions_HOOK().
 */
function views_ui_theme_suggestions_views_ui_view_preview_section(array $variables) : array {
    return [
        'views_ui_view_preview_section__' . $variables['section'],
    ];
}

/**
 * Returns contextual links for each handler of a certain section.
 *
 * @todo Bring in relationships.
 * @todo Refactor this function to use much stuff of
 *    views_ui_edit_form_get_bucket.
 *
 * @param string $title
 *   Add a bolded title of this section.
 */
function views_ui_view_preview_section_handler_links(ViewExecutable $view, $type, $title = FALSE) {
    $display = $view->display_handler->display;
    $handlers = $view->display_handler
        ->getHandlers($type);
    $links = [];
    $types = ViewExecutable::getHandlerTypes();
    if ($title) {
        $links[$type . '-title'] = [
            'title' => $types[$type]['title'],
        ];
    }
    foreach ($handlers as $id => $handler) {
        $field_name = $handler->adminLabel(TRUE);
        $links[$type . '-edit-' . $id] = [
            'title' => t('Edit @section', [
                '@section' => $field_name,
            ]),
            'url' => Url::fromRoute('views_ui.form_handler', [
                'js' => 'nojs',
                'view' => $view->storage
                    ->id(),
                'display_id' => $display['id'],
                'type' => $type,
                'id' => $id,
            ]),
            'attributes' => [
                'class' => [
                    'views-ajax-link',
                ],
            ],
        ];
    }
    $links[$type . '-add'] = [
        'title' => t('Add new'),
        'url' => Url::fromRoute('views_ui.form_add_handler', [
            'js' => 'nojs',
            'view' => $view->storage
                ->id(),
            'display_id' => $display['id'],
            'type' => $type,
        ]),
        'attributes' => [
            'class' => [
                'views-ajax-link',
            ],
        ],
    ];
    return $links;
}

/**
 * Returns a link to editing a certain display setting.
 */
function views_ui_view_preview_section_display_category_links(ViewExecutable $view, $type, $title) {
    $display = $view->display_handler->display;
    $links = [
        $type . '-edit' => [
            'title' => t('Edit @section', [
                '@section' => $title,
            ]),
            'url' => Url::fromRoute('views_ui.form_display', [
                'js' => 'nojs',
                'view' => $view->storage
                    ->id(),
                'display_id' => $display['id'],
                'type' => $type,
            ]),
            'attributes' => [
                'class' => [
                    'views-ajax-link',
                ],
            ],
        ],
    ];
    return $links;
}

/**
 * Returns all contextual links for the main content part of the view.
 */
function views_ui_view_preview_section_rows_links(ViewExecutable $view) {
    $links = [];
    $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;
}

/**
 * Sets a static variable for controlling whether contextual links are rendered.
 *
 * @see views_ui_contextual_links_view_alter()
 */
function views_ui_contextual_links_suppress($set = NULL) {
    $suppress =& drupal_static(__FUNCTION__);
    if (isset($set)) {
        $suppress = $set;
    }
    return $suppress;
}

/**
 * Increments the views_ui_contextual_links_suppress() static variable.
 *
 * When this function is added to the #pre_render of an element, and
 * 'views_ui_contextual_links_suppress_pop' is added to the #post_render of the
 * same element, then all contextual links within the element and its
 * descendants are suppressed from being rendered. This is used, for example,
 * during a View preview, when it is not desired for nodes in the Views result
 * to have contextual links.
 *
 * @see views_ui_contextual_links_suppress_pop()
 */
function views_ui_contextual_links_suppress_push() {
    views_ui_contextual_links_suppress((int) views_ui_contextual_links_suppress() + 1);
}

/**
 * Decrements the views_ui_contextual_links_suppress() static variable.
 *
 * @see views_ui_contextual_links_suppress_push()
 */
function views_ui_contextual_links_suppress_pop() {
    views_ui_contextual_links_suppress((int) views_ui_contextual_links_suppress() - 1);
}

Functions

Title Deprecated Summary
views_ui_contextual_links_suppress Sets a static variable for controlling whether contextual links are rendered.
views_ui_contextual_links_suppress_pop Decrements the views_ui_contextual_links_suppress() static variable.
views_ui_contextual_links_suppress_push Increments the views_ui_contextual_links_suppress() static variable.
views_ui_preprocess_views_view Implements hook_preprocess_HOOK() for views templates.
views_ui_theme_suggestions_views_ui_view_preview_section Implements hook_theme_suggestions_HOOK().
views_ui_view_preview_section_display_category_links Returns a link to editing a certain display setting.
views_ui_view_preview_section_handler_links Returns contextual links for each handler of a certain section.
views_ui_view_preview_section_rows_links Returns all contextual links for the main content part of the view.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.