danielebarchiesi@4: danielebarchiesi@4: * Based on an idea from chx, from the conversation at danielebarchiesi@4: * http://www.drupal.org/node/27155. danielebarchiesi@4: */ danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * Implementation of hook_help(). danielebarchiesi@4: */ danielebarchiesi@4: function prepopulate_help($path, $arg) { danielebarchiesi@4: switch ($path) { danielebarchiesi@4: case 'admin/modules#description': danielebarchiesi@4: return t('Pre-populates forms with HTTP GET or POST data'); danielebarchiesi@4: break; danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * Implementation of hook_form_alter(). danielebarchiesi@4: */ danielebarchiesi@4: function prepopulate_form_alter(&$form, $form_state, $form_id) { danielebarchiesi@4: // Provide for accepting base64 encoded fields. danielebarchiesi@4: if (isset($_REQUEST['pp'])) { danielebarchiesi@4: parse_str(base64_decode($_REQUEST['pp']), $_REQUEST); danielebarchiesi@4: } danielebarchiesi@4: if (isset($_REQUEST['edit'])) { danielebarchiesi@4: $form['#after_build'][] = 'prepopulate_after_build'; danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * An #after_build function to set the values prepopulated in the request. danielebarchiesi@4: */ danielebarchiesi@4: function prepopulate_after_build($form, &$form_state) { danielebarchiesi@4: if (isset($_REQUEST['pp'])) { danielebarchiesi@4: parse_str(base64_decode($_REQUEST['pp']), $_REQUEST); danielebarchiesi@4: } danielebarchiesi@4: if (isset($_REQUEST['edit'])) { danielebarchiesi@4: $request = (array)$_REQUEST['edit']; danielebarchiesi@4: _prepopulate_request_walk($form, $request); danielebarchiesi@4: } danielebarchiesi@4: return $form; danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * Internal helper to set element values from the $_REQUEST variable. danielebarchiesi@4: * danielebarchiesi@4: * @param &$form danielebarchiesi@4: * Array. A form element. danielebarchiesi@4: * @param &$requestslice danielebarchiesi@4: * String or array. Value(s) to be applied to the element. danielebarchiesi@4: */ danielebarchiesi@4: function _prepopulate_request_walk(&$form, &$requestslice) { danielebarchiesi@4: $limited_types = array('value', 'hidden', 'button', 'image_button'); danielebarchiesi@4: if (is_array($requestslice)) { danielebarchiesi@4: foreach (array_keys($requestslice) as $requestvar) { danielebarchiesi@4: if (element_child($requestvar) && !empty($form[$requestvar]) && danielebarchiesi@4: (!isset($form[$requestvar]['#type']) || !in_array($form[$requestvar]['#type'], $limited_types))) { danielebarchiesi@4: if (!isset($form[$requestvar]['#access']) || $form[$requestvar]['#access'] != FALSE) { danielebarchiesi@4: _prepopulate_request_walk($form[$requestvar], $requestslice[$requestvar]); danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: if (!empty($form['#default_value']) && is_array($form['#default_value'])) { danielebarchiesi@4: $form['#default_value'] = array_merge($form['#default_value'], $requestslice); danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: else { danielebarchiesi@4: if ($form['#type'] == 'markup' || empty($form['#type']) ) { danielebarchiesi@4: $form['#value'] = check_plain($requestslice); danielebarchiesi@4: } danielebarchiesi@4: else { danielebarchiesi@4: $form['#value'] = $requestslice; danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: }