danielebarchiesi@0
|
1 <?php
|
danielebarchiesi@0
|
2
|
danielebarchiesi@0
|
3 /**
|
danielebarchiesi@0
|
4 * @file
|
danielebarchiesi@0
|
5 * Sample AJAX functionality so people can see some of the CTools AJAX
|
danielebarchiesi@0
|
6 * features in use.
|
danielebarchiesi@0
|
7 */
|
danielebarchiesi@0
|
8
|
danielebarchiesi@0
|
9 // ---------------------------------------------------------------------------
|
danielebarchiesi@0
|
10 // Drupal hooks.
|
danielebarchiesi@0
|
11
|
danielebarchiesi@0
|
12 /**
|
danielebarchiesi@0
|
13 * Implementation of hook_menu()
|
danielebarchiesi@0
|
14 */
|
danielebarchiesi@0
|
15 function ctools_ajax_sample_menu() {
|
danielebarchiesi@0
|
16 $items['ctools_ajax_sample'] = array(
|
danielebarchiesi@0
|
17 'title' => 'Chaos Tools AJAX Demo',
|
danielebarchiesi@0
|
18 'page callback' => 'ctools_ajax_sample_page',
|
danielebarchiesi@0
|
19 'access callback' => TRUE,
|
danielebarchiesi@0
|
20 'type' => MENU_NORMAL_ITEM,
|
danielebarchiesi@0
|
21 );
|
danielebarchiesi@0
|
22 $items['ctools_ajax_sample/simple_form'] = array(
|
danielebarchiesi@0
|
23 'title' => 'Simple Form',
|
danielebarchiesi@0
|
24 'page callback' => 'ctools_ajax_simple_form',
|
danielebarchiesi@0
|
25 'access callback' => TRUE,
|
danielebarchiesi@0
|
26 'type' => MENU_CALLBACK,
|
danielebarchiesi@0
|
27 );
|
danielebarchiesi@0
|
28 $items['ctools_ajax_sample/%ctools_js/hello'] = array(
|
danielebarchiesi@0
|
29 'title' => 'Hello World',
|
danielebarchiesi@0
|
30 'page callback' => 'ctools_ajax_sample_hello',
|
danielebarchiesi@0
|
31 'page arguments' => array(1),
|
danielebarchiesi@0
|
32 'access callback' => TRUE,
|
danielebarchiesi@0
|
33 'type' => MENU_CALLBACK,
|
danielebarchiesi@0
|
34 );
|
danielebarchiesi@0
|
35 $items['ctools_ajax_sample/%ctools_js/tablenix/%'] = array(
|
danielebarchiesi@0
|
36 'title' => 'Hello World',
|
danielebarchiesi@0
|
37 'page callback' => 'ctools_ajax_sample_tablenix',
|
danielebarchiesi@0
|
38 'page arguments' => array(1, 3),
|
danielebarchiesi@0
|
39 'access callback' => TRUE,
|
danielebarchiesi@0
|
40 'type' => MENU_CALLBACK,
|
danielebarchiesi@0
|
41 );
|
danielebarchiesi@0
|
42 $items['ctools_ajax_sample/%ctools_js/login'] = array(
|
danielebarchiesi@0
|
43 'title' => 'Login',
|
danielebarchiesi@0
|
44 'page callback' => 'ctools_ajax_sample_login',
|
danielebarchiesi@0
|
45 'page arguments' => array(1),
|
danielebarchiesi@0
|
46 'access callback' => TRUE,
|
danielebarchiesi@0
|
47 'type' => MENU_CALLBACK,
|
danielebarchiesi@0
|
48 );
|
danielebarchiesi@0
|
49 $items['ctools_ajax_sample/%ctools_js/animal'] = array(
|
danielebarchiesi@0
|
50 'title' => 'Animal',
|
danielebarchiesi@0
|
51 'page callback' => 'ctools_ajax_sample_animal',
|
danielebarchiesi@0
|
52 'page arguments' => array(1),
|
danielebarchiesi@0
|
53 'access callback' => TRUE,
|
danielebarchiesi@0
|
54 'type' => MENU_CALLBACK,
|
danielebarchiesi@0
|
55 );
|
danielebarchiesi@0
|
56 $items['ctools_ajax_sample/%ctools_js/login/%'] = array(
|
danielebarchiesi@0
|
57 'title' => 'Post-Login Action',
|
danielebarchiesi@0
|
58 'page callback' => 'ctools_ajax_sample_login_success',
|
danielebarchiesi@0
|
59 'page arguments' => array(1, 3),
|
danielebarchiesi@0
|
60 'access callback' => TRUE,
|
danielebarchiesi@0
|
61 'type' => MENU_CALLBACK,
|
danielebarchiesi@0
|
62 );
|
danielebarchiesi@0
|
63 $items['ctools_ajax_sample/jumped'] = array(
|
danielebarchiesi@0
|
64 'title' => 'Successful Jumping',
|
danielebarchiesi@0
|
65 'page callback' => 'ctools_ajax_sample_jump_menu_page',
|
danielebarchiesi@0
|
66 'access callback' => TRUE,
|
danielebarchiesi@0
|
67 'type' => MENU_NORMAL_ITEM,
|
danielebarchiesi@0
|
68 );
|
danielebarchiesi@0
|
69
|
danielebarchiesi@0
|
70 return $items;
|
danielebarchiesi@0
|
71 }
|
danielebarchiesi@0
|
72
|
danielebarchiesi@0
|
73 function ctools_ajax_simple_form() {
|
danielebarchiesi@0
|
74 ctools_include('content');
|
danielebarchiesi@0
|
75 ctools_include('context');
|
danielebarchiesi@0
|
76 $node = node_load(1);
|
danielebarchiesi@0
|
77 $context = ctools_context_create('node', $node);
|
danielebarchiesi@0
|
78 $context = array('context_node_1' => $context);
|
danielebarchiesi@0
|
79 return ctools_content_render('node_comment_form', 'node_comment_form', ctools_ajax_simple_form_pane(), array(), array(), $context);
|
danielebarchiesi@0
|
80 }
|
danielebarchiesi@0
|
81
|
danielebarchiesi@0
|
82 function ctools_ajax_simple_form_pane() {
|
danielebarchiesi@0
|
83 $configuration = array(
|
danielebarchiesi@0
|
84 'anon_links' => 0,
|
danielebarchiesi@0
|
85 'context' => 'context_node_1',
|
danielebarchiesi@0
|
86 'override_title' => 0,
|
danielebarchiesi@0
|
87 'override_title_text' => '',
|
danielebarchiesi@0
|
88 );
|
danielebarchiesi@0
|
89 return $configuration;
|
danielebarchiesi@0
|
90 }
|
danielebarchiesi@0
|
91
|
danielebarchiesi@0
|
92 /**
|
danielebarchiesi@0
|
93 * Implementation of hook_theme()
|
danielebarchiesi@0
|
94 *
|
danielebarchiesi@0
|
95 * Render some basic output for this module.
|
danielebarchiesi@0
|
96 */
|
danielebarchiesi@0
|
97 function ctools_ajax_sample_theme() {
|
danielebarchiesi@0
|
98 return array(
|
danielebarchiesi@0
|
99 // Sample theme functions.
|
danielebarchiesi@0
|
100 'ctools_ajax_sample_container' => array(
|
danielebarchiesi@0
|
101 'arguments' => array('content' => NULL),
|
danielebarchiesi@0
|
102 ),
|
danielebarchiesi@0
|
103 );
|
danielebarchiesi@0
|
104 }
|
danielebarchiesi@0
|
105
|
danielebarchiesi@0
|
106 // ---------------------------------------------------------------------------
|
danielebarchiesi@0
|
107 // Page callbacks
|
danielebarchiesi@0
|
108
|
danielebarchiesi@0
|
109 /**
|
danielebarchiesi@0
|
110 * Page callback to display links and render a container for AJAX stuff.
|
danielebarchiesi@0
|
111 */
|
danielebarchiesi@0
|
112 function ctools_ajax_sample_page() {
|
danielebarchiesi@0
|
113 global $user;
|
danielebarchiesi@0
|
114
|
danielebarchiesi@0
|
115 // Include the CTools tools that we need.
|
danielebarchiesi@0
|
116 ctools_include('ajax');
|
danielebarchiesi@0
|
117 ctools_include('modal');
|
danielebarchiesi@0
|
118
|
danielebarchiesi@0
|
119 // Add CTools' javascript to the page.
|
danielebarchiesi@0
|
120 ctools_modal_add_js();
|
danielebarchiesi@0
|
121
|
danielebarchiesi@0
|
122 // Create our own javascript that will be used to theme a modal.
|
danielebarchiesi@0
|
123 $sample_style = array(
|
danielebarchiesi@0
|
124 'ctools-sample-style' => array(
|
danielebarchiesi@0
|
125 'modalSize' => array(
|
danielebarchiesi@0
|
126 'type' => 'fixed',
|
danielebarchiesi@0
|
127 'width' => 500,
|
danielebarchiesi@0
|
128 'height' => 300,
|
danielebarchiesi@0
|
129 'addWidth' => 20,
|
danielebarchiesi@0
|
130 'addHeight' => 15,
|
danielebarchiesi@0
|
131 ),
|
danielebarchiesi@0
|
132 'modalOptions' => array(
|
danielebarchiesi@0
|
133 'opacity' => .5,
|
danielebarchiesi@0
|
134 'background-color' => '#000',
|
danielebarchiesi@0
|
135 ),
|
danielebarchiesi@0
|
136 'animation' => 'fadeIn',
|
danielebarchiesi@0
|
137 'modalTheme' => 'CToolsSampleModal',
|
danielebarchiesi@0
|
138 'throbber' => theme('image', array('path' => ctools_image_path('ajax-loader.gif', 'ctools_ajax_sample'), 'alt' => t('Loading...'), 'title' => t('Loading'))),
|
danielebarchiesi@0
|
139 ),
|
danielebarchiesi@0
|
140 );
|
danielebarchiesi@0
|
141
|
danielebarchiesi@0
|
142 drupal_add_js($sample_style, 'setting');
|
danielebarchiesi@0
|
143
|
danielebarchiesi@0
|
144 // Since we have our js, css and images in well-known named directories,
|
danielebarchiesi@0
|
145 // CTools makes it easy for us to just use them without worrying about
|
danielebarchiesi@0
|
146 // using drupal_get_path() and all that ugliness.
|
danielebarchiesi@0
|
147 ctools_add_js('ctools-ajax-sample', 'ctools_ajax_sample');
|
danielebarchiesi@0
|
148 ctools_add_css('ctools-ajax-sample', 'ctools_ajax_sample');
|
danielebarchiesi@0
|
149
|
danielebarchiesi@0
|
150 // Create a list of clickable links.
|
danielebarchiesi@0
|
151 $links = array();
|
danielebarchiesi@0
|
152
|
danielebarchiesi@0
|
153 // Only show login links to the anonymous user.
|
danielebarchiesi@0
|
154 if ($user->uid == 0) {
|
danielebarchiesi@0
|
155 $links[] = ctools_modal_text_button(t('Modal Login (default style)'), 'ctools_ajax_sample/nojs/login', t('Login via modal'));
|
danielebarchiesi@0
|
156
|
danielebarchiesi@0
|
157 // The extra class points to the info in ctools-sample-style which we added
|
danielebarchiesi@0
|
158 // to the settings, prefixed with 'ctools-modal'.
|
danielebarchiesi@0
|
159 $links[] = ctools_modal_text_button(t('Modal Login (custom style)'), 'ctools_ajax_sample/nojs/login', t('Login via modal'), 'ctools-modal-ctools-sample-style');
|
danielebarchiesi@0
|
160 }
|
danielebarchiesi@0
|
161
|
danielebarchiesi@0
|
162 // Four ways to do our animal picking wizard.
|
danielebarchiesi@0
|
163 $button_form = ctools_ajax_sample_ajax_button_form();
|
danielebarchiesi@0
|
164 $links[] = l(t('Wizard (no modal)'), 'ctools_ajax_sample/nojs/animal');
|
danielebarchiesi@0
|
165 $links[] = ctools_modal_text_button(t('Wizard (default modal)'), 'ctools_ajax_sample/nojs/animal', t('Pick an animal'));
|
danielebarchiesi@0
|
166 $links[] = ctools_modal_text_button(t('Wizard (custom modal)'), 'ctools_ajax_sample/nojs/animal', t('Pick an animal'), 'ctools-modal-ctools-sample-style');
|
danielebarchiesi@0
|
167 $links[] = drupal_render($button_form);
|
danielebarchiesi@0
|
168
|
danielebarchiesi@0
|
169 $links[] = ctools_ajax_text_button(t('Hello world!'), "ctools_ajax_sample/nojs/hello", t('Replace text with "hello world"'));
|
danielebarchiesi@0
|
170
|
danielebarchiesi@0
|
171 $output = theme('item_list', array('items' => $links, 'title' => t('Actions')));
|
danielebarchiesi@0
|
172
|
danielebarchiesi@0
|
173 // This container will have data AJAXed into it.
|
danielebarchiesi@0
|
174 $output .= theme('ctools_ajax_sample_container', array('content' => '<h1>' . t('Sample Content') . '</h1>'));
|
danielebarchiesi@0
|
175
|
danielebarchiesi@0
|
176 // Create a table that we can have data removed from via AJAX.
|
danielebarchiesi@0
|
177 $header = array(t('Row'), t('Content'), t('Actions'));
|
danielebarchiesi@0
|
178 $rows = array();
|
danielebarchiesi@0
|
179 for($i = 1; $i < 11; $i++) {
|
danielebarchiesi@0
|
180 $rows[] = array(
|
danielebarchiesi@0
|
181 'class' => array('ajax-sample-row-'. $i),
|
danielebarchiesi@0
|
182 'data' => array(
|
danielebarchiesi@0
|
183 $i,
|
danielebarchiesi@0
|
184 md5($i),
|
danielebarchiesi@0
|
185 ctools_ajax_text_button("remove", "ctools_ajax_sample/nojs/tablenix/$i", t('Delete this row')),
|
danielebarchiesi@0
|
186 ),
|
danielebarchiesi@0
|
187 );
|
danielebarchiesi@0
|
188 }
|
danielebarchiesi@0
|
189
|
danielebarchiesi@0
|
190 $output .= theme('table', array('header' => $header, 'rows' => $rows, array('class' => array('ajax-sample-table'))));
|
danielebarchiesi@0
|
191
|
danielebarchiesi@0
|
192 // Show examples of ctools javascript widgets
|
danielebarchiesi@0
|
193 $output .= '<h2>'. t('CTools Javascript Widgets') .'</h2>';
|
danielebarchiesi@0
|
194
|
danielebarchiesi@0
|
195 // Create a drop down menu
|
danielebarchiesi@0
|
196 $links = array();
|
danielebarchiesi@0
|
197 $links[] = array('title' => t('Link 1'), 'href' => $_GET['q']);
|
danielebarchiesi@0
|
198 $links[] = array('title' => t('Link 2'), 'href' => $_GET['q']);
|
danielebarchiesi@0
|
199 $links[] = array('title' => t('Link 3'), 'href' => $_GET['q']);
|
danielebarchiesi@0
|
200
|
danielebarchiesi@0
|
201 $output .= '<h3>' . t('Drop Down Menu') . '</h3>';
|
danielebarchiesi@0
|
202 $output .= theme('ctools_dropdown', array('title' => t('Click to Drop Down'), 'links' => $links));
|
danielebarchiesi@0
|
203
|
danielebarchiesi@0
|
204 // Create a collapsible div
|
danielebarchiesi@0
|
205 $handle = t('Click to Collapse');
|
danielebarchiesi@0
|
206 $content = 'Nulla ligula ante, aliquam at adipiscing egestas, varius vel arcu. Etiam laoreet elementum mi vel consequat. Etiam scelerisque lorem vel neque consequat quis bibendum libero congue. Nulla facilisi. Mauris a elit a leo feugiat porta. Phasellus placerat cursus est vitae elementum.';
|
danielebarchiesi@0
|
207 $output .= '<h3>'. t('Collapsible Div') .'</h3>';
|
danielebarchiesi@0
|
208 $output .= theme('ctools_collapsible', array('handle' => $handle, 'content' => $content, 'collapsed' => FALSE));
|
danielebarchiesi@0
|
209
|
danielebarchiesi@0
|
210 // Create a jump menu
|
danielebarchiesi@0
|
211 ctools_include('jump-menu');
|
danielebarchiesi@0
|
212 $form = drupal_get_form('ctools_ajax_sample_jump_menu_form');
|
danielebarchiesi@0
|
213 $output .= '<h3>'. t('Jump Menu') .'</h3>';
|
danielebarchiesi@0
|
214 $output .= drupal_render($form);
|
danielebarchiesi@0
|
215
|
danielebarchiesi@0
|
216 return array('markup' => array('#markup' => $output));
|
danielebarchiesi@0
|
217 }
|
danielebarchiesi@0
|
218
|
danielebarchiesi@0
|
219 /**
|
danielebarchiesi@0
|
220 * Returns a "take it all over" hello world style request.
|
danielebarchiesi@0
|
221 */
|
danielebarchiesi@0
|
222 function ctools_ajax_sample_hello($js = NULL) {
|
danielebarchiesi@0
|
223 $output = '<h1>' . t('Hello World') . '</h1>';
|
danielebarchiesi@0
|
224 if ($js) {
|
danielebarchiesi@0
|
225 ctools_include('ajax');
|
danielebarchiesi@0
|
226 $commands = array();
|
danielebarchiesi@0
|
227 $commands[] = ajax_command_html('#ctools-sample', $output);
|
danielebarchiesi@0
|
228 print ajax_render($commands); // this function exits.
|
danielebarchiesi@0
|
229 exit;
|
danielebarchiesi@0
|
230 }
|
danielebarchiesi@0
|
231 else {
|
danielebarchiesi@0
|
232 return $output;
|
danielebarchiesi@0
|
233 }
|
danielebarchiesi@0
|
234 }
|
danielebarchiesi@0
|
235
|
danielebarchiesi@0
|
236 /**
|
danielebarchiesi@0
|
237 * Nix a row from a table and restripe.
|
danielebarchiesi@0
|
238 */
|
danielebarchiesi@0
|
239 function ctools_ajax_sample_tablenix($js, $row) {
|
danielebarchiesi@0
|
240 if (!$js) {
|
danielebarchiesi@0
|
241 // We don't support degrading this from js because we're not
|
danielebarchiesi@0
|
242 // using the server to remember the state of the table.
|
danielebarchiesi@0
|
243 return MENU_ACCESS_DENIED;
|
danielebarchiesi@0
|
244 }
|
danielebarchiesi@0
|
245 ctools_include('ajax');
|
danielebarchiesi@0
|
246
|
danielebarchiesi@0
|
247 $commands = array();
|
danielebarchiesi@0
|
248 $commands[] = ajax_command_remove("tr.ajax-sample-row-$row");
|
danielebarchiesi@0
|
249 $commands[] = ajax_command_restripe("table.ajax-sample-table");
|
danielebarchiesi@0
|
250 print ajax_render($commands);
|
danielebarchiesi@0
|
251 exit;
|
danielebarchiesi@0
|
252 }
|
danielebarchiesi@0
|
253
|
danielebarchiesi@0
|
254 /**
|
danielebarchiesi@0
|
255 * A modal login callback.
|
danielebarchiesi@0
|
256 */
|
danielebarchiesi@0
|
257 function ctools_ajax_sample_login($js = NULL) {
|
danielebarchiesi@0
|
258 // Fall back if $js is not set.
|
danielebarchiesi@0
|
259 if (!$js) {
|
danielebarchiesi@0
|
260 return drupal_get_form('user_login');
|
danielebarchiesi@0
|
261 }
|
danielebarchiesi@0
|
262
|
danielebarchiesi@0
|
263 ctools_include('modal');
|
danielebarchiesi@0
|
264 ctools_include('ajax');
|
danielebarchiesi@0
|
265 $form_state = array(
|
danielebarchiesi@0
|
266 'title' => t('Login'),
|
danielebarchiesi@0
|
267 'ajax' => TRUE,
|
danielebarchiesi@0
|
268 );
|
danielebarchiesi@0
|
269 $output = ctools_modal_form_wrapper('user_login', $form_state);
|
danielebarchiesi@0
|
270 if (!empty($form_state['executed'])) {
|
danielebarchiesi@0
|
271 // We'll just overwrite the form output if it was successful.
|
danielebarchiesi@0
|
272 $output = array();
|
danielebarchiesi@0
|
273 $inplace = ctools_ajax_text_button(t('remain here'), 'ctools_ajax_sample/nojs/login/inplace', t('Go to your account'));
|
danielebarchiesi@0
|
274 $account = ctools_ajax_text_button(t('your account'), 'ctools_ajax_sample/nojs/login/user', t('Go to your account'));
|
danielebarchiesi@0
|
275 $output[] = ctools_modal_command_display(t('Login Success'), '<div class="modal-message">Login successful. You can now choose whether to '. $inplace .', or go to '. $account.'.</div>');
|
danielebarchiesi@0
|
276 }
|
danielebarchiesi@0
|
277 print ajax_render($output);
|
danielebarchiesi@0
|
278 exit;
|
danielebarchiesi@0
|
279 }
|
danielebarchiesi@0
|
280
|
danielebarchiesi@0
|
281 /**
|
danielebarchiesi@0
|
282 * Post-login processor: should we go to the user account or stay in place?
|
danielebarchiesi@0
|
283 */
|
danielebarchiesi@0
|
284 function ctools_ajax_sample_login_success($js, $action) {
|
danielebarchiesi@0
|
285 if (!$js) {
|
danielebarchiesi@0
|
286 // we should never be here out of ajax context
|
danielebarchiesi@0
|
287 return MENU_NOT_FOUND;
|
danielebarchiesi@0
|
288 }
|
danielebarchiesi@0
|
289
|
danielebarchiesi@0
|
290 ctools_include('ajax');
|
danielebarchiesi@0
|
291 ctools_add_js('ajax-responder');
|
danielebarchiesi@0
|
292 $commands = array();
|
danielebarchiesi@0
|
293 if ($action == 'inplace') {
|
danielebarchiesi@0
|
294 // stay here
|
danielebarchiesi@0
|
295 $commands[] = ctools_ajax_command_reload();
|
danielebarchiesi@0
|
296 }
|
danielebarchiesi@0
|
297 else {
|
danielebarchiesi@0
|
298 // bounce bounce
|
danielebarchiesi@0
|
299 $commands[] = ctools_ajax_command_redirect('user');
|
danielebarchiesi@0
|
300 }
|
danielebarchiesi@0
|
301 print ajax_render($commands);
|
danielebarchiesi@0
|
302 exit;
|
danielebarchiesi@0
|
303 }
|
danielebarchiesi@0
|
304
|
danielebarchiesi@0
|
305 /**
|
danielebarchiesi@0
|
306 * A modal login callback.
|
danielebarchiesi@0
|
307 */
|
danielebarchiesi@0
|
308 function ctools_ajax_sample_animal($js = NULL, $step = NULL) {
|
danielebarchiesi@0
|
309 if ($js) {
|
danielebarchiesi@0
|
310 ctools_include('modal');
|
danielebarchiesi@0
|
311 ctools_include('ajax');
|
danielebarchiesi@0
|
312 }
|
danielebarchiesi@0
|
313
|
danielebarchiesi@0
|
314 $form_info = array(
|
danielebarchiesi@0
|
315 'id' => 'animals',
|
danielebarchiesi@0
|
316 'path' => "ctools_ajax_sample/" . ($js ? 'ajax' : 'nojs') . "/animal/%step",
|
danielebarchiesi@0
|
317 'show trail' => TRUE,
|
danielebarchiesi@0
|
318 'show back' => TRUE,
|
danielebarchiesi@0
|
319 'show cancel' => TRUE,
|
danielebarchiesi@0
|
320 'show return' => FALSE,
|
danielebarchiesi@0
|
321 'next callback' => 'ctools_ajax_sample_wizard_next',
|
danielebarchiesi@0
|
322 'finish callback' => 'ctools_ajax_sample_wizard_finish',
|
danielebarchiesi@0
|
323 'cancel callback' => 'ctools_ajax_sample_wizard_cancel',
|
danielebarchiesi@0
|
324 // this controls order, as well as form labels
|
danielebarchiesi@0
|
325 'order' => array(
|
danielebarchiesi@0
|
326 'start' => t('Choose animal'),
|
danielebarchiesi@0
|
327 ),
|
danielebarchiesi@0
|
328 // here we map a step to a form id.
|
danielebarchiesi@0
|
329 'forms' => array(
|
danielebarchiesi@0
|
330 // e.g. this for the step at wombat/create
|
danielebarchiesi@0
|
331 'start' => array(
|
danielebarchiesi@0
|
332 'form id' => 'ctools_ajax_sample_start'
|
danielebarchiesi@0
|
333 ),
|
danielebarchiesi@0
|
334 ),
|
danielebarchiesi@0
|
335 );
|
danielebarchiesi@0
|
336
|
danielebarchiesi@0
|
337 // We're not using any real storage here, so we're going to set our
|
danielebarchiesi@0
|
338 // object_id to 1. When using wizard forms, id management turns
|
danielebarchiesi@0
|
339 // out to be one of the hardest parts. Editing an object with an id
|
danielebarchiesi@0
|
340 // is easy, but new objects don't usually have ids until somewhere
|
danielebarchiesi@0
|
341 // in creation.
|
danielebarchiesi@0
|
342 //
|
danielebarchiesi@0
|
343 // We skip all this here by just using an id of 1.
|
danielebarchiesi@0
|
344
|
danielebarchiesi@0
|
345 $object_id = 1;
|
danielebarchiesi@0
|
346
|
danielebarchiesi@0
|
347 if (empty($step)) {
|
danielebarchiesi@0
|
348 // We reset the form when $step is NULL because that means they have
|
danielebarchiesi@0
|
349 // for whatever reason started over.
|
danielebarchiesi@0
|
350 ctools_ajax_sample_cache_clear($object_id);
|
danielebarchiesi@0
|
351 $step = 'start';
|
danielebarchiesi@0
|
352 }
|
danielebarchiesi@0
|
353
|
danielebarchiesi@0
|
354 // This automatically gets defaults if there wasn't anything saved.
|
danielebarchiesi@0
|
355 $object = ctools_ajax_sample_cache_get($object_id);
|
danielebarchiesi@0
|
356
|
danielebarchiesi@0
|
357 $animals = ctools_ajax_sample_animals();
|
danielebarchiesi@0
|
358
|
danielebarchiesi@0
|
359 // Make sure we can't somehow accidentally go to an invalid animal.
|
danielebarchiesi@0
|
360 if (empty($animals[$object->type])) {
|
danielebarchiesi@0
|
361 $object->type = 'unknown';
|
danielebarchiesi@0
|
362 }
|
danielebarchiesi@0
|
363
|
danielebarchiesi@0
|
364 // Now that we have our object, dynamically add the animal's form.
|
danielebarchiesi@0
|
365 if ($object->type == 'unknown') {
|
danielebarchiesi@0
|
366 // If they haven't selected a type, add a form that doesn't exist yet.
|
danielebarchiesi@0
|
367 $form_info['order']['unknown'] = t('Configure animal');
|
danielebarchiesi@0
|
368 $form_info['forms']['unknown'] = array('form id' => 'nothing');
|
danielebarchiesi@0
|
369 }
|
danielebarchiesi@0
|
370 else {
|
danielebarchiesi@0
|
371 // Add the selected animal to the order so that it shows up properly in the trail.
|
danielebarchiesi@0
|
372 $form_info['order'][$object->type] = $animals[$object->type]['config title'];
|
danielebarchiesi@0
|
373 }
|
danielebarchiesi@0
|
374
|
danielebarchiesi@0
|
375 // Make sure all animals forms are represented so that the next stuff can
|
danielebarchiesi@0
|
376 // work correctly:
|
danielebarchiesi@0
|
377 foreach ($animals as $id => $animal) {
|
danielebarchiesi@0
|
378 $form_info['forms'][$id] = array('form id' => $animals[$id]['form']);
|
danielebarchiesi@0
|
379 }
|
danielebarchiesi@0
|
380
|
danielebarchiesi@0
|
381 $form_state = array(
|
danielebarchiesi@0
|
382 'ajax' => $js,
|
danielebarchiesi@0
|
383 // Put our object and ID into the form state cache so we can easily find
|
danielebarchiesi@0
|
384 // it.
|
danielebarchiesi@0
|
385 'object_id' => $object_id,
|
danielebarchiesi@0
|
386 'object' => &$object,
|
danielebarchiesi@0
|
387 );
|
danielebarchiesi@0
|
388
|
danielebarchiesi@0
|
389 // Send this all off to our form. This is like drupal_get_form only wizardy.
|
danielebarchiesi@0
|
390 ctools_include('wizard');
|
danielebarchiesi@0
|
391 $form = ctools_wizard_multistep_form($form_info, $step, $form_state);
|
danielebarchiesi@0
|
392 $output = drupal_render($form);
|
danielebarchiesi@0
|
393
|
danielebarchiesi@0
|
394 if ($output === FALSE || !empty($form_state['complete'])) {
|
danielebarchiesi@0
|
395 // This creates a string based upon the animal and its setting using
|
danielebarchiesi@0
|
396 // function indirection.
|
danielebarchiesi@0
|
397 $animal = $animals[$object->type]['output']($object);
|
danielebarchiesi@0
|
398 }
|
danielebarchiesi@0
|
399
|
danielebarchiesi@0
|
400 // If $output is FALSE, there was no actual form.
|
danielebarchiesi@0
|
401 if ($js) {
|
danielebarchiesi@0
|
402 // If javascript is active, we have to use a render array.
|
danielebarchiesi@0
|
403 $commands = array();
|
danielebarchiesi@0
|
404 if ($output === FALSE || !empty($form_state['complete'])) {
|
danielebarchiesi@0
|
405 // Dismiss the modal.
|
danielebarchiesi@0
|
406 $commands[] = ajax_command_html('#ctools-sample', $animal);
|
danielebarchiesi@0
|
407 $commands[] = ctools_modal_command_dismiss();
|
danielebarchiesi@0
|
408 }
|
danielebarchiesi@0
|
409 else if (!empty($form_state['cancel'])) {
|
danielebarchiesi@0
|
410 // If cancelling, return to the activity.
|
danielebarchiesi@0
|
411 $commands[] = ctools_modal_command_dismiss();
|
danielebarchiesi@0
|
412 }
|
danielebarchiesi@0
|
413 else {
|
danielebarchiesi@0
|
414 $commands = ctools_modal_form_render($form_state, $output);
|
danielebarchiesi@0
|
415 }
|
danielebarchiesi@0
|
416 print ajax_render($commands);
|
danielebarchiesi@0
|
417 exit;
|
danielebarchiesi@0
|
418 }
|
danielebarchiesi@0
|
419 else {
|
danielebarchiesi@0
|
420 if ($output === FALSE || !empty($form_state['complete'])) {
|
danielebarchiesi@0
|
421 return $animal;
|
danielebarchiesi@0
|
422 }
|
danielebarchiesi@0
|
423 else if (!empty($form_state['cancel'])) {
|
danielebarchiesi@0
|
424 drupal_goto('ctools_ajax_sample');
|
danielebarchiesi@0
|
425 }
|
danielebarchiesi@0
|
426 else {
|
danielebarchiesi@0
|
427 return $output;
|
danielebarchiesi@0
|
428 }
|
danielebarchiesi@0
|
429 }
|
danielebarchiesi@0
|
430 }
|
danielebarchiesi@0
|
431
|
danielebarchiesi@0
|
432 // ---------------------------------------------------------------------------
|
danielebarchiesi@0
|
433 // Themes
|
danielebarchiesi@0
|
434
|
danielebarchiesi@0
|
435 /**
|
danielebarchiesi@0
|
436 * Theme function for main rendered output.
|
danielebarchiesi@0
|
437 */
|
danielebarchiesi@0
|
438 function theme_ctools_ajax_sample_container($vars) {
|
danielebarchiesi@0
|
439 $output = '<div id="ctools-sample">';
|
danielebarchiesi@0
|
440 $output .= $vars['content'];
|
danielebarchiesi@0
|
441 $output .= '</div>';
|
danielebarchiesi@0
|
442
|
danielebarchiesi@0
|
443 return $output;
|
danielebarchiesi@0
|
444 }
|
danielebarchiesi@0
|
445
|
danielebarchiesi@0
|
446 // ---------------------------------------------------------------------------
|
danielebarchiesi@0
|
447 // Stuff needed for our little wizard.
|
danielebarchiesi@0
|
448
|
danielebarchiesi@0
|
449 /**
|
danielebarchiesi@0
|
450 * Get a list of our animals and associated forms.
|
danielebarchiesi@0
|
451 *
|
danielebarchiesi@0
|
452 * What we're doing is making it easy to add more animals in just one place,
|
danielebarchiesi@0
|
453 * which is often how it will work in the real world. If using CTools, what
|
danielebarchiesi@0
|
454 * you would probably really have, here, is a set of plugins for each animal.
|
danielebarchiesi@0
|
455 */
|
danielebarchiesi@0
|
456 function ctools_ajax_sample_animals() {
|
danielebarchiesi@0
|
457 return array(
|
danielebarchiesi@0
|
458 'sheep' => array(
|
danielebarchiesi@0
|
459 'title' => t('Sheep'),
|
danielebarchiesi@0
|
460 'config title' => t('Configure sheep'),
|
danielebarchiesi@0
|
461 'form' => 'ctools_ajax_sample_configure_sheep',
|
danielebarchiesi@0
|
462 'output' => 'ctools_ajax_sample_show_sheep',
|
danielebarchiesi@0
|
463 ),
|
danielebarchiesi@0
|
464 'lizard' => array(
|
danielebarchiesi@0
|
465 'title' => t('Lizard'),
|
danielebarchiesi@0
|
466 'config title' => t('Configure lizard'),
|
danielebarchiesi@0
|
467 'form' => 'ctools_ajax_sample_configure_lizard',
|
danielebarchiesi@0
|
468 'output' => 'ctools_ajax_sample_show_lizard',
|
danielebarchiesi@0
|
469 ),
|
danielebarchiesi@0
|
470 'raptor' => array(
|
danielebarchiesi@0
|
471 'title' => t('Raptor'),
|
danielebarchiesi@0
|
472 'config title' => t('Configure raptor'),
|
danielebarchiesi@0
|
473 'form' => 'ctools_ajax_sample_configure_raptor',
|
danielebarchiesi@0
|
474 'output' => 'ctools_ajax_sample_show_raptor',
|
danielebarchiesi@0
|
475 ),
|
danielebarchiesi@0
|
476 );
|
danielebarchiesi@0
|
477 }
|
danielebarchiesi@0
|
478
|
danielebarchiesi@0
|
479 // ---------------------------------------------------------------------------
|
danielebarchiesi@0
|
480 // Wizard caching helpers.
|
danielebarchiesi@0
|
481
|
danielebarchiesi@0
|
482 /**
|
danielebarchiesi@0
|
483 * Store our little cache so that we can retain data from form to form.
|
danielebarchiesi@0
|
484 */
|
danielebarchiesi@0
|
485 function ctools_ajax_sample_cache_set($id, $object) {
|
danielebarchiesi@0
|
486 ctools_include('object-cache');
|
danielebarchiesi@0
|
487 ctools_object_cache_set('ctools_ajax_sample', $id, $object);
|
danielebarchiesi@0
|
488 }
|
danielebarchiesi@0
|
489
|
danielebarchiesi@0
|
490 /**
|
danielebarchiesi@0
|
491 * Get the current object from the cache, or default.
|
danielebarchiesi@0
|
492 */
|
danielebarchiesi@0
|
493 function ctools_ajax_sample_cache_get($id) {
|
danielebarchiesi@0
|
494 ctools_include('object-cache');
|
danielebarchiesi@0
|
495 $object = ctools_object_cache_get('ctools_ajax_sample', $id);
|
danielebarchiesi@0
|
496 if (!$object) {
|
danielebarchiesi@0
|
497 // Create a default object.
|
danielebarchiesi@0
|
498 $object = new stdClass;
|
danielebarchiesi@0
|
499 $object->type = 'unknown';
|
danielebarchiesi@0
|
500 $object->name = '';
|
danielebarchiesi@0
|
501 }
|
danielebarchiesi@0
|
502
|
danielebarchiesi@0
|
503 return $object;
|
danielebarchiesi@0
|
504 }
|
danielebarchiesi@0
|
505
|
danielebarchiesi@0
|
506 /**
|
danielebarchiesi@0
|
507 * Clear the wizard cache.
|
danielebarchiesi@0
|
508 */
|
danielebarchiesi@0
|
509 function ctools_ajax_sample_cache_clear($id) {
|
danielebarchiesi@0
|
510 ctools_include('object-cache');
|
danielebarchiesi@0
|
511 ctools_object_cache_clear('ctools_ajax_sample', $id);
|
danielebarchiesi@0
|
512 }
|
danielebarchiesi@0
|
513
|
danielebarchiesi@0
|
514 // ---------------------------------------------------------------------------
|
danielebarchiesi@0
|
515 // Wizard in-between helpers; what to do between or after forms.
|
danielebarchiesi@0
|
516
|
danielebarchiesi@0
|
517 /**
|
danielebarchiesi@0
|
518 * Handle the 'next' click on the add/edit pane form wizard.
|
danielebarchiesi@0
|
519 *
|
danielebarchiesi@0
|
520 * All we need to do is store the updated pane in the cache.
|
danielebarchiesi@0
|
521 */
|
danielebarchiesi@0
|
522 function ctools_ajax_sample_wizard_next(&$form_state) {
|
danielebarchiesi@0
|
523 ctools_ajax_sample_cache_set($form_state['object_id'], $form_state['object']);
|
danielebarchiesi@0
|
524 }
|
danielebarchiesi@0
|
525
|
danielebarchiesi@0
|
526 /**
|
danielebarchiesi@0
|
527 * Handle the 'finish' click on teh add/edit pane form wizard.
|
danielebarchiesi@0
|
528 *
|
danielebarchiesi@0
|
529 * All we need to do is set a flag so the return can handle adding
|
danielebarchiesi@0
|
530 * the pane.
|
danielebarchiesi@0
|
531 */
|
danielebarchiesi@0
|
532 function ctools_ajax_sample_wizard_finish(&$form_state) {
|
danielebarchiesi@0
|
533 $form_state['complete'] = TRUE;
|
danielebarchiesi@0
|
534 }
|
danielebarchiesi@0
|
535
|
danielebarchiesi@0
|
536 /**
|
danielebarchiesi@0
|
537 * Handle the 'cancel' click on the add/edit pane form wizard.
|
danielebarchiesi@0
|
538 */
|
danielebarchiesi@0
|
539 function ctools_ajax_sample_wizard_cancel(&$form_state) {
|
danielebarchiesi@0
|
540 $form_state['cancel'] = TRUE;
|
danielebarchiesi@0
|
541 }
|
danielebarchiesi@0
|
542
|
danielebarchiesi@0
|
543 // ---------------------------------------------------------------------------
|
danielebarchiesi@0
|
544 // Wizard forms for our simple info collection wizard.
|
danielebarchiesi@0
|
545
|
danielebarchiesi@0
|
546 /**
|
danielebarchiesi@0
|
547 * Wizard start form. Choose an animal.
|
danielebarchiesi@0
|
548 */
|
danielebarchiesi@0
|
549 function ctools_ajax_sample_start($form, &$form_state) {
|
danielebarchiesi@0
|
550 $form_state['title'] = t('Choose animal');
|
danielebarchiesi@0
|
551
|
danielebarchiesi@0
|
552 $animals = ctools_ajax_sample_animals();
|
danielebarchiesi@0
|
553 foreach ($animals as $id => $animal) {
|
danielebarchiesi@0
|
554 $options[$id] = $animal['title'];
|
danielebarchiesi@0
|
555 }
|
danielebarchiesi@0
|
556
|
danielebarchiesi@0
|
557 $form['type'] = array(
|
danielebarchiesi@0
|
558 '#title' => t('Choose your animal'),
|
danielebarchiesi@0
|
559 '#type' => 'radios',
|
danielebarchiesi@0
|
560 '#options' => $options,
|
danielebarchiesi@0
|
561 '#default_value' => $form_state['object']->type,
|
danielebarchiesi@0
|
562 '#required' => TRUE,
|
danielebarchiesi@0
|
563 );
|
danielebarchiesi@0
|
564
|
danielebarchiesi@0
|
565 return $form;
|
danielebarchiesi@0
|
566 }
|
danielebarchiesi@0
|
567
|
danielebarchiesi@0
|
568 /**
|
danielebarchiesi@0
|
569 * They have selected a sheep. Set it.
|
danielebarchiesi@0
|
570 */
|
danielebarchiesi@0
|
571 function ctools_ajax_sample_start_submit(&$form, &$form_state) {
|
danielebarchiesi@0
|
572 $form_state['object']->type = $form_state['values']['type'];
|
danielebarchiesi@0
|
573 // Override where to go next based on the animal selected.
|
danielebarchiesi@0
|
574 $form_state['clicked_button']['#next'] = $form_state['values']['type'];
|
danielebarchiesi@0
|
575 }
|
danielebarchiesi@0
|
576
|
danielebarchiesi@0
|
577 /**
|
danielebarchiesi@0
|
578 * Wizard form to configure your sheep.
|
danielebarchiesi@0
|
579 */
|
danielebarchiesi@0
|
580 function ctools_ajax_sample_configure_sheep($form, &$form_state) {
|
danielebarchiesi@0
|
581 $form_state['title'] = t('Configure sheep');
|
danielebarchiesi@0
|
582
|
danielebarchiesi@0
|
583 $form['name'] = array(
|
danielebarchiesi@0
|
584 '#type' => 'textfield',
|
danielebarchiesi@0
|
585 '#title' => t('Name your sheep'),
|
danielebarchiesi@0
|
586 '#default_value' => $form_state['object']->name,
|
danielebarchiesi@0
|
587 '#required' => TRUE,
|
danielebarchiesi@0
|
588 );
|
danielebarchiesi@0
|
589
|
danielebarchiesi@0
|
590 $form['sheep'] = array(
|
danielebarchiesi@0
|
591 '#title' => t('What kind of sheep'),
|
danielebarchiesi@0
|
592 '#type' => 'radios',
|
danielebarchiesi@0
|
593 '#options' => array(
|
danielebarchiesi@0
|
594 t('Wensleydale') => t('Wensleydale'),
|
danielebarchiesi@0
|
595 t('Merino') => t('Merino'),
|
danielebarchiesi@0
|
596 t('Corriedale') => t('Coriedale'),
|
danielebarchiesi@0
|
597 ),
|
danielebarchiesi@0
|
598 '#default_value' => !empty($form_state['object']->sheep) ? $form_state['object']->sheep : '',
|
danielebarchiesi@0
|
599 '#required' => TRUE,
|
danielebarchiesi@0
|
600 );
|
danielebarchiesi@0
|
601 return $form;
|
danielebarchiesi@0
|
602 }
|
danielebarchiesi@0
|
603
|
danielebarchiesi@0
|
604 /**
|
danielebarchiesi@0
|
605 * Submit the sheep and store the values from the form.
|
danielebarchiesi@0
|
606 */
|
danielebarchiesi@0
|
607 function ctools_ajax_sample_configure_sheep_submit(&$form, &$form_state) {
|
danielebarchiesi@0
|
608 $form_state['object']->name = $form_state['values']['name'];
|
danielebarchiesi@0
|
609 $form_state['object']->sheep = $form_state['values']['sheep'];
|
danielebarchiesi@0
|
610 }
|
danielebarchiesi@0
|
611
|
danielebarchiesi@0
|
612 /**
|
danielebarchiesi@0
|
613 * Provide some output for our sheep.
|
danielebarchiesi@0
|
614 */
|
danielebarchiesi@0
|
615 function ctools_ajax_sample_show_sheep($object) {
|
danielebarchiesi@0
|
616 return t('You have a @type sheep named "@name".', array(
|
danielebarchiesi@0
|
617 '@type' => $object->sheep,
|
danielebarchiesi@0
|
618 '@name' => $object->name,
|
danielebarchiesi@0
|
619 ));
|
danielebarchiesi@0
|
620 }
|
danielebarchiesi@0
|
621
|
danielebarchiesi@0
|
622 /**
|
danielebarchiesi@0
|
623 * Wizard form to configure your lizard.
|
danielebarchiesi@0
|
624 */
|
danielebarchiesi@0
|
625 function ctools_ajax_sample_configure_lizard($form, &$form_state) {
|
danielebarchiesi@0
|
626 $form_state['title'] = t('Configure lizard');
|
danielebarchiesi@0
|
627
|
danielebarchiesi@0
|
628 $form['name'] = array(
|
danielebarchiesi@0
|
629 '#type' => 'textfield',
|
danielebarchiesi@0
|
630 '#title' => t('Name your lizard'),
|
danielebarchiesi@0
|
631 '#default_value' => $form_state['object']->name,
|
danielebarchiesi@0
|
632 '#required' => TRUE,
|
danielebarchiesi@0
|
633 );
|
danielebarchiesi@0
|
634
|
danielebarchiesi@0
|
635 $form['lizard'] = array(
|
danielebarchiesi@0
|
636 '#title' => t('Venomous'),
|
danielebarchiesi@0
|
637 '#type' => 'checkbox',
|
danielebarchiesi@0
|
638 '#default_value' => !empty($form_state['object']->lizard),
|
danielebarchiesi@0
|
639 );
|
danielebarchiesi@0
|
640 return $form;
|
danielebarchiesi@0
|
641 }
|
danielebarchiesi@0
|
642
|
danielebarchiesi@0
|
643 /**
|
danielebarchiesi@0
|
644 * Submit the lizard and store the values from the form.
|
danielebarchiesi@0
|
645 */
|
danielebarchiesi@0
|
646 function ctools_ajax_sample_configure_lizard_submit(&$form, &$form_state) {
|
danielebarchiesi@0
|
647 $form_state['object']->name = $form_state['values']['name'];
|
danielebarchiesi@0
|
648 $form_state['object']->lizard = $form_state['values']['lizard'];
|
danielebarchiesi@0
|
649 }
|
danielebarchiesi@0
|
650
|
danielebarchiesi@0
|
651 /**
|
danielebarchiesi@0
|
652 * Provide some output for our raptor.
|
danielebarchiesi@0
|
653 */
|
danielebarchiesi@0
|
654 function ctools_ajax_sample_show_lizard($object) {
|
danielebarchiesi@0
|
655 return t('You have a @type lizard named "@name".', array(
|
danielebarchiesi@0
|
656 '@type' => empty($object->lizard) ? t('non-venomous') : t('venomous'),
|
danielebarchiesi@0
|
657 '@name' => $object->name,
|
danielebarchiesi@0
|
658 ));
|
danielebarchiesi@0
|
659 }
|
danielebarchiesi@0
|
660
|
danielebarchiesi@0
|
661 /**
|
danielebarchiesi@0
|
662 * Wizard form to configure your raptor.
|
danielebarchiesi@0
|
663 */
|
danielebarchiesi@0
|
664 function ctools_ajax_sample_configure_raptor($form, &$form_state) {
|
danielebarchiesi@0
|
665 $form_state['title'] = t('Configure raptor');
|
danielebarchiesi@0
|
666
|
danielebarchiesi@0
|
667 $form['name'] = array(
|
danielebarchiesi@0
|
668 '#type' => 'textfield',
|
danielebarchiesi@0
|
669 '#title' => t('Name your raptor'),
|
danielebarchiesi@0
|
670 '#default_value' => $form_state['object']->name,
|
danielebarchiesi@0
|
671 '#required' => TRUE,
|
danielebarchiesi@0
|
672 );
|
danielebarchiesi@0
|
673
|
danielebarchiesi@0
|
674 $form['raptor'] = array(
|
danielebarchiesi@0
|
675 '#title' => t('What kind of raptor'),
|
danielebarchiesi@0
|
676 '#type' => 'radios',
|
danielebarchiesi@0
|
677 '#options' => array(
|
danielebarchiesi@0
|
678 t('Eagle') => t('Eagle'),
|
danielebarchiesi@0
|
679 t('Hawk') => t('Hawk'),
|
danielebarchiesi@0
|
680 t('Owl') => t('Owl'),
|
danielebarchiesi@0
|
681 t('Buzzard') => t('Buzzard'),
|
danielebarchiesi@0
|
682 ),
|
danielebarchiesi@0
|
683 '#default_value' => !empty($form_state['object']->raptor) ? $form_state['object']->raptor : '',
|
danielebarchiesi@0
|
684 '#required' => TRUE,
|
danielebarchiesi@0
|
685 );
|
danielebarchiesi@0
|
686
|
danielebarchiesi@0
|
687 $form['domesticated'] = array(
|
danielebarchiesi@0
|
688 '#title' => t('Domesticated'),
|
danielebarchiesi@0
|
689 '#type' => 'checkbox',
|
danielebarchiesi@0
|
690 '#default_value' => !empty($form_state['object']->domesticated),
|
danielebarchiesi@0
|
691 );
|
danielebarchiesi@0
|
692 return $form;
|
danielebarchiesi@0
|
693 }
|
danielebarchiesi@0
|
694
|
danielebarchiesi@0
|
695 /**
|
danielebarchiesi@0
|
696 * Submit the raptor and store the values from the form.
|
danielebarchiesi@0
|
697 */
|
danielebarchiesi@0
|
698 function ctools_ajax_sample_configure_raptor_submit(&$form, &$form_state) {
|
danielebarchiesi@0
|
699 $form_state['object']->name = $form_state['values']['name'];
|
danielebarchiesi@0
|
700 $form_state['object']->raptor = $form_state['values']['raptor'];
|
danielebarchiesi@0
|
701 $form_state['object']->domesticated = $form_state['values']['domesticated'];
|
danielebarchiesi@0
|
702 }
|
danielebarchiesi@0
|
703
|
danielebarchiesi@0
|
704 /**
|
danielebarchiesi@0
|
705 * Provide some output for our raptor.
|
danielebarchiesi@0
|
706 */
|
danielebarchiesi@0
|
707 function ctools_ajax_sample_show_raptor($object) {
|
danielebarchiesi@0
|
708 return t('You have a @type @raptor named "@name".', array(
|
danielebarchiesi@0
|
709 '@type' => empty($object->domesticated) ? t('wild') : t('domesticated'),
|
danielebarchiesi@0
|
710 '@raptor' => $object->raptor,
|
danielebarchiesi@0
|
711 '@name' => $object->name,
|
danielebarchiesi@0
|
712 ));
|
danielebarchiesi@0
|
713 }
|
danielebarchiesi@0
|
714
|
danielebarchiesi@0
|
715 /**
|
danielebarchiesi@0
|
716 * Helper function to provide a sample jump menu form
|
danielebarchiesi@0
|
717 */
|
danielebarchiesi@0
|
718 function ctools_ajax_sample_jump_menu_form() {
|
danielebarchiesi@0
|
719 $url = url('ctools_ajax_sample/jumped');
|
danielebarchiesi@0
|
720 $form_state = array();
|
danielebarchiesi@0
|
721 $form = ctools_jump_menu(array(), $form_state, array($url => t('Jump!')), array());
|
danielebarchiesi@0
|
722 return $form;
|
danielebarchiesi@0
|
723 }
|
danielebarchiesi@0
|
724
|
danielebarchiesi@0
|
725 /**
|
danielebarchiesi@0
|
726 * Provide a message to the user that the jump menu worked
|
danielebarchiesi@0
|
727 */
|
danielebarchiesi@0
|
728 function ctools_ajax_sample_jump_menu_page() {
|
danielebarchiesi@0
|
729 $return_link = l(t('Return to the examples page.'), 'ctools_ajax_sample');
|
danielebarchiesi@0
|
730 $output = t('You successfully jumped! !return_link', array('!return_link' => $return_link));
|
danielebarchiesi@0
|
731 return $output;
|
danielebarchiesi@0
|
732 }
|
danielebarchiesi@0
|
733
|
danielebarchiesi@0
|
734 /**
|
danielebarchiesi@0
|
735 * Provide a form for an example ajax modal button
|
danielebarchiesi@0
|
736 */
|
danielebarchiesi@0
|
737 function ctools_ajax_sample_ajax_button_form() {
|
danielebarchiesi@0
|
738 $form = array();
|
danielebarchiesi@0
|
739
|
danielebarchiesi@0
|
740 $form['url'] = array(
|
danielebarchiesi@0
|
741 '#type' => 'hidden',
|
danielebarchiesi@0
|
742 // The name of the class is the #id of $form['ajax_button'] with "-url"
|
danielebarchiesi@0
|
743 // suffix.
|
danielebarchiesi@0
|
744 '#attributes' => array('class' => array('ctools-ajax-sample-button-url')),
|
danielebarchiesi@0
|
745 '#value' => url('ctools_ajax_sample/nojs/animal'),
|
danielebarchiesi@0
|
746 );
|
danielebarchiesi@0
|
747
|
danielebarchiesi@0
|
748 $form['ajax_button'] = array(
|
danielebarchiesi@0
|
749 '#type' => 'button',
|
danielebarchiesi@0
|
750 '#value' => 'Wizard (button modal)',
|
danielebarchiesi@0
|
751 '#attributes' => array('class' => array('ctools-use-modal')),
|
danielebarchiesi@0
|
752 '#id' => 'ctools-ajax-sample-button',
|
danielebarchiesi@0
|
753 );
|
danielebarchiesi@0
|
754
|
danielebarchiesi@0
|
755 return $form;
|
danielebarchiesi@0
|
756 }
|