drupal/core/modules/views/includes/ajax.inc

74 lines
2.1 KiB
PHP

<?php
/**
* @file
* Handles the server side AJAX interactions of Views.
*/
use Drupal\views\Ajax\HighlightCommand;
use Drupal\Core\Ajax\OpenModalDialogCommand;
use Drupal\Core\Ajax\AjaxResponse;
/**
* @defgroup views_ajax Views AJAX library
* @{
* Handles the server side AJAX interactions of Views.
*/
/**
* Wrapper around drupal_build_form to handle some AJAX stuff automatically.
* This makes some assumptions about the client.
*/
function views_ajax_form_wrapper($form_id, &$form_state) {
// This won't override settings already in.
$form_state += array(
'rerender' => FALSE,
'no_redirect' => !empty($form_state['ajax']),
'no_cache' => TRUE,
'build_info' => array(
'args' => array(),
),
);
$form = drupal_build_form($form_id, $form_state);
$output = drupal_render($form);
// These forms have the title built in, so set the title here:
if (empty($form_state['ajax']) && !empty($form_state['title'])) {
$form['#attached']['css'][] = drupal_get_path('module', 'views_ui') . '/css/views_ui.admin.css';
}
if (!empty($form_state['ajax']) && (empty($form_state['executed']) || !empty($form_state['rerender']))) {
// If the form didn't execute and we're using ajax, build up a
// Ajax command list to execute.
$response = new AjaxResponse();
$display = '';
$status_messages = array('#theme' => 'status_messages');
if ($messages = drupal_render($status_messages)) {
$display = '<div class="views-messages">' . $messages . '</div>';
}
$display .= $output;
$title = empty($form_state['title']) ? '' : $form_state['title'];
$options = array(
'dialogClass' => 'views-ui-dialog',
'width' => '50%',
);
$response->addCommand(new OpenModalDialogCommand($title, $display, $options));
if (!empty($form_state['#section'])) {
$response->addCommand(new HighlightCommand('.' . drupal_clean_css_identifier($form_state['#section'])));
}
return $response;
}
return (!empty($form_state['title'])) ? array('#title' => $form_state['title'], '#markup' => $output) : $output;
}
/**
* @}
*/