Newer
Older
<?php
/**
* @file
* Helper module for Ajax framework tests.
Angie Byron
committed
use Drupal\Core\Ajax\AjaxResponse;
catch
committed
use Drupal\Core\Ajax\AlertCommand;
Angie Byron
committed
use Drupal\Core\Ajax\OpenDialogCommand;
use Drupal\Core\Ajax\OpenModalDialogCommand;
use Drupal\Core\Ajax\CloseDialogCommand;
Angie Byron
committed
use Drupal\Core\Ajax\HtmlCommand;
/**
* Implements hook_system_theme_info().
*/
function ajax_test_system_theme_info() {
$themes['test_theme'] = drupal_get_path('module', 'system') . '/tests/themes/test_theme/test_theme.info.yml';
return $themes;
}
Angie Byron
committed
* Menu callback: Returns an element suitable for use by ajax_render().
*
* Additionally ensures that ajax_render() incorporates JavaScript settings
Dries Buytaert
committed
* generated during the page request by invoking drupal_add_js() with a dummy
* setting.
Angie Byron
committed
*
* @deprecated \Drupal\ajax_test\Controller\AjaxTestController::render()
*/
function ajax_test_render() {
$attached = array(
'#attached' => array(
'js' => array(
0 => array(
'type' => 'setting',
'data' => array('ajax' => 'test'),
),
),
),
);
drupal_render($attached);
catch
committed
$response = new AjaxResponse();
return $response;
Angie Byron
committed
/**
* Menu callback: Returns an AjaxResponse; settings command set last.
*
* Helps verifying AjaxResponse reorders commands to ensure correct execution.
Angie Byron
committed
*
* @deprecated \Drupal\ajax_test\Controller\AjaxTestController::order()
Angie Byron
committed
*/
function ajax_test_order() {
$response = new AjaxResponse();
$path = drupal_get_path('module', 'system');
// HTML insertion command.
$response->addCommand(new HtmlCommand('body', 'Hello, world!'));
$attached = array(
'#attached' => array(
'css' => array(
// Add two CSS files (order should remain the same).
$path . '/css/system.admin.css' => array(),
$path . '/css/system.maintenance.css' => array(),
),
'js' => array(
// Add two JavaScript files (first to the footer, should appear last).
$path . '/system.modules.js' => array('scope' => 'footer'),
$path . '/system.js' => array(),
// Finally, add a JavaScript setting.
0 => array(
'type' => 'setting',
'data' => array('ajax' => 'test'),
),
),
),
);
drupal_render($attached);
Angie Byron
committed
return $response;
}
Jennifer Hodgdon
committed
* Menu callback: Returns AJAX element with #error property set.
Angie Byron
committed
*
* @deprecated \Drupal\ajax_test\Controller\AjaxTestController::renderError()
Dries Buytaert
committed
function ajax_test_error() {
Angie Byron
committed
$query = \Drupal::request()->query;
if ($query->has('message')) {
$message = $query->get('message');
catch
committed
$response = new AjaxResponse();
$response->addCommand(new AlertCommand($message));
return $response;
Dries Buytaert
committed
/**
* Menu callback: Renders a form elements and links with #ajax['dialog'].
Angie Byron
committed
*
* @deprecated \Drupal\ajax_test\Controller\AjaxTestController::dialog()
*/
function ajax_test_dialog() {
// Add two wrapper elements for testing non-modal dialogs. Modal dialogs use
// the global drupal-modal wrapper by default.
$build['dialog_wrappers'] = array('#markup' => '<div id="ajax-test-dialog-wrapper-1"></div><div id="ajax-test-dialog-wrapper-2"></div>');
// Dialog behavior applied to a button.
$build['form'] = drupal_get_form('ajax_test_dialog_form');
// Dialog behavior applied to a #type => 'link'.
$build['link'] = array(
'#type' => 'link',
'#title' => 'Link 1 (modal)',
'#href' => 'ajax-test/dialog-contents',
'#attributes' => array(
'class' => array('use-ajax'),
'data-accepts' => 'application/vnd.drupal-modal',
),
);
// Dialog behavior applied to links rendered by theme_links().
$build['links'] = array(
'#theme' => 'links',
'#links' => array(
'link2' => array(
'title' => 'Link 2 (modal)',
'href' => 'ajax-test/dialog-contents',
'attributes' => array(
'class' => array('use-ajax'),
'data-accepts' => 'application/vnd.drupal-modal',
'data-dialog-options' => json_encode(array(
'width' => 400,
))
),
),
'link3' => array(
'title' => 'Link 3 (non-modal)',
'href' => 'ajax-test/dialog-contents',
'attributes' => array(
'class' => array('use-ajax'),
'data-accepts' => 'application/vnd.drupal-dialog',
'data-dialog-options' => json_encode(array(
'target' => 'ajax-test-dialog-wrapper-1',
'width' => 800,
))
),
Angie Byron
committed
),
'link4' => array(
'title' => 'Link 4 (close non-modal if open)',
'href' => 'ajax-test/dialog-close',
'attributes' => array(
'class' => array('use-ajax'),
),
),
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
'link5' => array(
'title' => 'Link 5 (form)',
'href' => 'ajax-test/dialog-form',
'attributes' => array(
'class' => array('use-ajax'),
'data-accepts' => 'application/vnd.drupal-modal',
),
),
'link6' => array(
'title' => 'Link 6 (entity form)',
'href' => 'admin/structure/contact/add',
'attributes' => array(
'class' => array('use-ajax'),
'data-accepts' => 'application/vnd.drupal-modal',
'data-dialog-options' => json_encode(array(
'width' => 800,
'height' => 500,
))
),
),
'link7' => array(
'title' => 'Link 7 (non-modal, no target)',
'href' => 'ajax-test/dialog-contents',
'attributes' => array(
'class' => array('use-ajax'),
'data-accepts' => 'application/vnd.drupal-dialog',
'data-dialog-options' => json_encode(array(
'width' => 800,
))
),
),
),
);
return $build;
}
/**
* Form builder: Renders buttons with #ajax['dialog'].
*/
function ajax_test_dialog_form($form, &$form_state) {
// In order to use WebTestBase::drupalPostAjaxForm() to POST from a link, we need
// to have a dummy field we can set in WebTestBase::drupalPostForm() else it won't
// submit anything.
$form['textfield'] = array(
'#type' => 'hidden'
);
$form['button1'] = array(
'#type' => 'submit',
Angie Byron
committed
'#name' => 'button1',
'#value' => 'Button 1 (modal)',
'#ajax' => array(
Angie Byron
committed
'callback' => 'ajax_test_dialog_form_callback_modal',
),
);
$form['button2'] = array(
'#type' => 'submit',
Angie Byron
committed
'#name' => 'button2',
'#value' => 'Button 2 (non-modal)',
'#ajax' => array(
Angie Byron
committed
'callback' => 'ajax_test_dialog_form_callback_nonmodal',
),
);
return $form;
}
/**
Angie Byron
committed
* Non-AJAX behavior of the dialog buttons.
*/
function ajax_test_dialog_form_submit($form, &$form_state) {
Angie Byron
committed
$form_state['redirect_route']['route_name'] = 'ajax_test.dialog_contents';
}
Angie Byron
committed
/**
* AJAX callback handler for ajax_test_dialog_form().
*/
function ajax_test_dialog_form_callback_modal($form, &$form_state) {
return _ajax_test_dialog(TRUE);
Angie Byron
committed
}
/**
* AJAX callback handler for ajax_test_dialog_form().
*/
function ajax_test_dialog_form_callback_nonmodal($form, &$form_state) {
return _ajax_test_dialog(FALSE);
Angie Byron
committed
}
/**
* Util to render dialog in ajax callback.
*
* @param bool $is_modal
* (optional) TRUE if modal, FALSE if plain dialog. Defaults to FALSE.
*/
function _ajax_test_dialog($is_modal = FALSE) {
$content = ajax_test_dialog_contents();
$response = new AjaxResponse();
$title = t('AJAX Dialog contents');
$html = drupal_render($content);
if ($is_modal) {
$response->addCommand(new OpenModalDialogCommand($title, $html));
}
else {
$selector = '#ajax-test-dialog-wrapper-1';
$response->addCommand(new OpenDialogCommand($selector, $title, $html));
}
return $response;
}
/**
* Returns example content for dialog tests.
*/
function ajax_test_dialog_contents() {
// This is a regular render array; the keys do not have special meaning.
Angie Byron
committed
$content = array(
'content' => array(
'#markup' => 'Example message',
),
'cancel' => array(
'#type' => 'link',
'#title' => 'Cancel',
'#href' => '',
'#attributes' => array(
// This is a special class to which JavaScript assigns dialog closing
// behavior.
'class' => array('dialog-cancel'),
),
),
);
Angie Byron
committed
return $content;
}
Angie Byron
committed
/**
* Menu callback: Close the ajax dialog.
Angie Byron
committed
*
* @deprecated \Drupal\ajax_test\Controller\AjaxTestController::dialogClose()
Angie Byron
committed
*/
function ajax_test_dialog_close() {
$response = new AjaxResponse();
$response->addCommand(new CloseDialogCommand('#ajax-test-dialog-wrapper-1'));
return $response;
}