danielebarchiesi@4
|
1 <?php
|
danielebarchiesi@4
|
2
|
danielebarchiesi@4
|
3 /**
|
danielebarchiesi@4
|
4 * @file
|
danielebarchiesi@4
|
5 * Fill form elements with data from GET or POST values.
|
danielebarchiesi@4
|
6 *
|
danielebarchiesi@4
|
7 * Originally written by ea. Farris <eafarris@gmail.com>
|
danielebarchiesi@4
|
8 * Based on an idea from chx, from the conversation at
|
danielebarchiesi@4
|
9 * http://www.drupal.org/node/27155.
|
danielebarchiesi@4
|
10 */
|
danielebarchiesi@4
|
11
|
danielebarchiesi@4
|
12 /**
|
danielebarchiesi@4
|
13 * Implementation of hook_help().
|
danielebarchiesi@4
|
14 */
|
danielebarchiesi@4
|
15 function prepopulate_help($path, $arg) {
|
danielebarchiesi@4
|
16 switch ($path) {
|
danielebarchiesi@4
|
17 case 'admin/modules#description':
|
danielebarchiesi@4
|
18 return t('Pre-populates forms with HTTP GET or POST data');
|
danielebarchiesi@4
|
19 break;
|
danielebarchiesi@4
|
20 }
|
danielebarchiesi@4
|
21 }
|
danielebarchiesi@4
|
22
|
danielebarchiesi@4
|
23 /**
|
danielebarchiesi@4
|
24 * Implementation of hook_form_alter().
|
danielebarchiesi@4
|
25 */
|
danielebarchiesi@4
|
26 function prepopulate_form_alter(&$form, $form_state, $form_id) {
|
danielebarchiesi@4
|
27 // Provide for accepting base64 encoded fields.
|
danielebarchiesi@4
|
28 if (isset($_REQUEST['pp'])) {
|
danielebarchiesi@4
|
29 parse_str(base64_decode($_REQUEST['pp']), $_REQUEST);
|
danielebarchiesi@4
|
30 }
|
danielebarchiesi@4
|
31 if (isset($_REQUEST['edit'])) {
|
danielebarchiesi@4
|
32 $form['#after_build'][] = 'prepopulate_after_build';
|
danielebarchiesi@4
|
33 }
|
danielebarchiesi@4
|
34 }
|
danielebarchiesi@4
|
35
|
danielebarchiesi@4
|
36 /**
|
danielebarchiesi@4
|
37 * An #after_build function to set the values prepopulated in the request.
|
danielebarchiesi@4
|
38 */
|
danielebarchiesi@4
|
39 function prepopulate_after_build($form, &$form_state) {
|
danielebarchiesi@4
|
40 if (isset($_REQUEST['pp'])) {
|
danielebarchiesi@4
|
41 parse_str(base64_decode($_REQUEST['pp']), $_REQUEST);
|
danielebarchiesi@4
|
42 }
|
danielebarchiesi@4
|
43 if (isset($_REQUEST['edit'])) {
|
danielebarchiesi@4
|
44 $request = (array)$_REQUEST['edit'];
|
danielebarchiesi@4
|
45 _prepopulate_request_walk($form, $request);
|
danielebarchiesi@4
|
46 }
|
danielebarchiesi@4
|
47 return $form;
|
danielebarchiesi@4
|
48 }
|
danielebarchiesi@4
|
49
|
danielebarchiesi@4
|
50 /**
|
danielebarchiesi@4
|
51 * Internal helper to set element values from the $_REQUEST variable.
|
danielebarchiesi@4
|
52 *
|
danielebarchiesi@4
|
53 * @param &$form
|
danielebarchiesi@4
|
54 * Array. A form element.
|
danielebarchiesi@4
|
55 * @param &$requestslice
|
danielebarchiesi@4
|
56 * String or array. Value(s) to be applied to the element.
|
danielebarchiesi@4
|
57 */
|
danielebarchiesi@4
|
58 function _prepopulate_request_walk(&$form, &$requestslice) {
|
danielebarchiesi@4
|
59 $limited_types = array('value', 'hidden', 'button', 'image_button');
|
danielebarchiesi@4
|
60 if (is_array($requestslice)) {
|
danielebarchiesi@4
|
61 foreach (array_keys($requestslice) as $requestvar) {
|
danielebarchiesi@4
|
62 if (element_child($requestvar) && !empty($form[$requestvar]) &&
|
danielebarchiesi@4
|
63 (!isset($form[$requestvar]['#type']) || !in_array($form[$requestvar]['#type'], $limited_types))) {
|
danielebarchiesi@4
|
64 if (!isset($form[$requestvar]['#access']) || $form[$requestvar]['#access'] != FALSE) {
|
danielebarchiesi@4
|
65 _prepopulate_request_walk($form[$requestvar], $requestslice[$requestvar]);
|
danielebarchiesi@4
|
66 }
|
danielebarchiesi@4
|
67 }
|
danielebarchiesi@4
|
68 }
|
danielebarchiesi@4
|
69 if (!empty($form['#default_value']) && is_array($form['#default_value'])) {
|
danielebarchiesi@4
|
70 $form['#default_value'] = array_merge($form['#default_value'], $requestslice);
|
danielebarchiesi@4
|
71 }
|
danielebarchiesi@4
|
72 }
|
danielebarchiesi@4
|
73 else {
|
danielebarchiesi@4
|
74 if ($form['#type'] == 'markup' || empty($form['#type']) ) {
|
danielebarchiesi@4
|
75 $form['#value'] = check_plain($requestslice);
|
danielebarchiesi@4
|
76 }
|
danielebarchiesi@4
|
77 else {
|
danielebarchiesi@4
|
78 $form['#value'] = $requestslice;
|
danielebarchiesi@4
|
79 }
|
danielebarchiesi@4
|
80 }
|
danielebarchiesi@4
|
81 } |