1<?php
2
3/**
4 * @file
5 * Simpletest mock module for Ajax forms testing.
6 */
7
8use Drupal\Core\Ajax\AddCssCommand;
9use Drupal\Core\Ajax\AfterCommand;
10use Drupal\Core\Ajax\AjaxResponse;
11use Drupal\Core\Ajax\AlertCommand;
12use Drupal\Core\Ajax\AnnounceCommand;
13use Drupal\Core\Ajax\AppendCommand;
14use Drupal\Core\Ajax\BeforeCommand;
15use Drupal\Core\Ajax\ChangedCommand;
16use Drupal\Core\Ajax\CssCommand;
17use Drupal\Core\Ajax\DataCommand;
18use Drupal\Core\Ajax\HtmlCommand;
19use Drupal\Core\Ajax\InsertCommand;
20use Drupal\Core\Ajax\InvokeCommand;
21use Drupal\Core\Ajax\PrependCommand;
22use Drupal\Core\Ajax\RemoveCommand;
23use Drupal\Core\Ajax\RestripeCommand;
24use Drupal\Core\Ajax\SettingsCommand;
25use Drupal\Core\Form\FormStateInterface;
26
27/**
28 * Ajax form callback: Selects 'after'.
29 */
30function ajax_forms_test_advanced_commands_after_callback($form, FormStateInterface $form_state) {
31  $selector = '#after_div';
32
33  $response = new AjaxResponse();
34  $response->addCommand(new AfterCommand($selector, "This will be placed after"));
35  return $response;
36}
37
38/**
39 * Ajax form callback: Selects 'alert'.
40 */
41function ajax_forms_test_advanced_commands_alert_callback($form, FormStateInterface $form_state) {
42  $response = new AjaxResponse();
43  $response->addCommand(new AlertCommand('Alert'));
44  return $response;
45}
46
47/**
48 * Ajax form callback: Selects 'announce' with no priority specified.
49 */
50function ajax_forms_test_advanced_commands_announce_callback($form, FormStateInterface $form_state) {
51  return (new AjaxResponse())->addCommand(new AnnounceCommand('Default announcement.'));
52}
53
54/**
55 * Ajax form callback: Selects 'announce' with 'polite' priority.
56 */
57function ajax_forms_test_advanced_commands_announce_polite_callback($form, FormStateInterface $form_state) {
58  return (new AjaxResponse())->addCommand(new AnnounceCommand('Polite announcement.', 'polite'));
59}
60
61/**
62 * Ajax form callback: Selects 'announce' with 'assertive' priority.
63 */
64function ajax_forms_test_advanced_commands_announce_assertive_callback($form, FormStateInterface $form_state) {
65  return (new AjaxResponse())->addCommand(new AnnounceCommand('Assertive announcement.', 'assertive'));
66}
67
68/**
69 * Ajax form callback: Selects 'announce' with two announce commands returned.
70 */
71function ajax_forms_test_advanced_commands_double_announce_callback($form, FormStateInterface $form_state) {
72  return (new AjaxResponse())->addCommand(new AnnounceCommand('Assertive announcement.', 'assertive'))
73    ->addCommand(new AnnounceCommand('Another announcement.'));
74}
75
76/**
77 * Ajax form callback: Selects 'append'.
78 */
79function ajax_forms_test_advanced_commands_append_callback($form, FormStateInterface $form_state) {
80  $selector = '#append_div';
81  $response = new AjaxResponse();
82  $response->addCommand(new AppendCommand($selector, "Appended text"));
83  return $response;
84}
85
86/**
87 * Ajax form callback: Selects 'before'.
88 */
89function ajax_forms_test_advanced_commands_before_callback($form, FormStateInterface $form_state) {
90  $selector = '#before_div';
91  $response = new AjaxResponse();
92  $response->addCommand(new BeforeCommand($selector, "Before text"));
93  return $response;
94}
95
96/**
97 * Ajax form callback: Selects 'changed'.
98 */
99function ajax_forms_test_advanced_commands_changed_callback($form, FormStateInterface $form_state) {
100  $response = new AjaxResponse();
101  $response->addCommand(new ChangedCommand('#changed_div'));
102  return $response;
103}
104
105/**
106 * Ajax form callback: Selects 'changed' with asterisk marking inner div.
107 */
108function ajax_forms_test_advanced_commands_changed_asterisk_callback($form, FormStateInterface $form_state) {
109  $response = new AjaxResponse();
110  $response->addCommand(new ChangedCommand('#changed_div', '#changed_div_mark_this'));
111  return $response;
112}
113
114/**
115 * Ajax form callback: Selects 'css'.
116 */
117function ajax_forms_test_advanced_commands_css_callback($form, FormStateInterface $form_state) {
118  $selector = '#css_div';
119  $color = 'blue';
120
121  $response = new AjaxResponse();
122  $response->addCommand(new CssCommand($selector, ['background-color' => $color]));
123  return $response;
124}
125
126/**
127 * Ajax form callback: Selects 'data'.
128 */
129function ajax_forms_test_advanced_commands_data_callback($form, FormStateInterface $form_state) {
130  $selector = '#data_div';
131  $response = new AjaxResponse();
132  $response->addCommand(new DataCommand($selector, 'testkey', 'testvalue'));
133  return $response;
134}
135
136/**
137 * Ajax form callback: Selects 'invoke'.
138 */
139function ajax_forms_test_advanced_commands_invoke_callback($form, FormStateInterface $form_state) {
140  $response = new AjaxResponse();
141  $response->addCommand(new InvokeCommand('#invoke_div', 'addClass', ['error']));
142  return $response;
143}
144
145/**
146 * Ajax form callback: Selects 'html'.
147 */
148function ajax_forms_test_advanced_commands_html_callback($form, FormStateInterface $form_state) {
149  $response = new AjaxResponse();
150  $response->addCommand(new HtmlCommand('#html_div', 'replacement text'));
151  return $response;
152}
153
154/**
155 * Ajax form callback: Selects 'insert'.
156 */
157function ajax_forms_test_advanced_commands_insert_callback($form, FormStateInterface $form_state) {
158  $response = new AjaxResponse();
159  $response->addCommand(new InsertCommand('#insert_div', 'insert replacement text'));
160  return $response;
161}
162
163/**
164 * Ajax form callback: Selects 'prepend'.
165 */
166function ajax_forms_test_advanced_commands_prepend_callback($form, FormStateInterface $form_state) {
167  $response = new AjaxResponse();
168  $response->addCommand(new PrependCommand('#prepend_div', "prepended text"));
169  return $response;
170}
171
172/**
173 * Ajax form callback: Selects 'remove'.
174 */
175function ajax_forms_test_advanced_commands_remove_callback($form, FormStateInterface $form_state) {
176  $response = new AjaxResponse();
177  $response->addCommand(new RemoveCommand('#remove_text'));
178  return $response;
179}
180
181/**
182 * Ajax form callback: Selects 'restripe'.
183 */
184function ajax_forms_test_advanced_commands_restripe_callback($form, FormStateInterface $form_state) {
185  $response = new AjaxResponse();
186  $response->addCommand(new RestripeCommand('#restripe_table'));
187  return $response;
188}
189
190/**
191 * Ajax form callback: Selects 'settings'.
192 */
193function ajax_forms_test_advanced_commands_settings_callback($form, FormStateInterface $form_state) {
194  $setting['ajax_forms_test']['foo'] = 42;
195  $response = new AjaxResponse();
196  $response->addCommand(new SettingsCommand($setting));
197  return $response;
198}
199
200/**
201 * Ajax callback for 'add_css'.
202 */
203function ajax_forms_test_advanced_commands_add_css_callback($form, FormStateInterface $form_state) {
204  $response = new AjaxResponse();
205  $response->addCommand(new AddCssCommand('my/file.css'));
206  return $response;
207}
208
209/**
210 * Ajax form callback: Selects the 'drivertext' element of the validation form.
211 */
212function ajax_forms_test_validation_form_callback($form, FormStateInterface $form_state) {
213  \Drupal::messenger()->addStatus("ajax_forms_test_validation_form_callback invoked");
214  \Drupal::messenger()->addStatus(t("Callback: drivertext=%drivertext, spare_required_field=%spare_required_field", ['%drivertext' => $form_state->getValue('drivertext'), '%spare_required_field' => $form_state->getValue('spare_required_field')]));
215  return ['#markup' => '<div id="message_area">ajax_forms_test_validation_form_callback at ' . date('c') . '</div>'];
216}
217
218/**
219 * Ajax form callback: Selects the 'drivernumber' element of the validation form.
220 */
221function ajax_forms_test_validation_number_form_callback($form, FormStateInterface $form_state) {
222  \Drupal::messenger()->addStatus("ajax_forms_test_validation_number_form_callback invoked");
223  \Drupal::messenger()->addStatus(t("Callback: drivernumber=%drivernumber, spare_required_field=%spare_required_field", ['%drivernumber' => $form_state->getValue('drivernumber'), '%spare_required_field' => $form_state->getValue('spare_required_field')]));
224  return ['#markup' => '<div id="message_area_number">ajax_forms_test_validation_number_form_callback at ' . date('c') . '</div>'];
225}
226
227/**
228 * AJAX form callback: Selects for the ajax_forms_test_lazy_load_form() form.
229 */
230function ajax_forms_test_lazy_load_form_ajax($form, FormStateInterface $form_state) {
231  $build = [
232    '#markup' => 'new content',
233  ];
234
235  if ($form_state->getValue('add_files')) {
236    $build['#attached']['library'][] = 'system/admin';
237    $build['#attached']['library'][] = 'system/drupal.system';
238    $build['#attached']['drupalSettings']['ajax_forms_test_lazy_load_form_submit'] = 'executed';
239  }
240
241  return $build;
242}
243