| [ Index ] |
PHP Cross Reference of Drupal 6 (gatewave) |
[Summary view] [Print] [Text view]
1 <?php 2 // $Id: rules_forms.module,v 1.1.2.7 2010/08/17 10:02:18 klausi Exp $ 3 4 5 /** 6 * @file 7 * Rules forms module. 8 */ 9 10 // Defines paths of the admin interface 11 define('RULES_ADMIN_FORMS_PATH', RULES_ADMIN_PATH .'/forms'); 12 13 14 /** 15 * Implementation of hook_help(). 16 */ 17 function rules_forms_help($path, $arg) { 18 if ($path === RULES_ADMIN_FORMS_PATH) { 19 return '<p>'. t('Settings and overview of form events.') .'</p>'; 20 } 21 } 22 23 /** 24 * Implementation of hook_menu(). 25 */ 26 function rules_forms_menu() { 27 $items = array(); 28 $items[RULES_ADMIN_FORMS_PATH] = array( 29 'title' => 'Form events', 30 'description' => 'Configure Rules forms events.', 31 'page callback' => 'drupal_get_form', 32 'page arguments' => array('rules_forms_admin_events'), 33 'access arguments' => array('administer rules'), 34 'type' => MENU_NORMAL_ITEM, 35 'weight' => 6, 36 'file' => 'rules_forms.admin.inc', 37 ); 38 $items[RULES_ADMIN_FORMS_PATH .'/%/activate'] = array( 39 'title' => 'Activate events for a form', 40 'type' => MENU_CALLBACK, 41 'page callback' => 'rules_forms_activate', 42 'page arguments' => array(3), 43 'access arguments' => array('administer rules'), 44 'file' => 'rules_forms.admin.inc', 45 ); 46 return $items; 47 } 48 49 /** 50 * Implementation of hook_form_alter(). 51 */ 52 function rules_forms_form_alter(&$form, &$form_state, $form_id) { 53 $form_events = variable_get('rules_forms_events', array()); 54 // Invoke event if form is enabled 55 if (isset($form_events[$form_id])) { 56 rules_forms_invoke_event('form_built', $form, $form_state, $form_id); 57 $form['#after_build'][] = 'rules_forms_after_build'; 58 } 59 // Display form ID message if enabled for this session. 60 if (!empty($_SESSION['rules_forms_message'])) { 61 $link = l($form_id, RULES_ADMIN_FORMS_PATH .'/'. $form_id .'/activate/'); 62 $msg = t('Activate events for '); 63 drupal_set_message($msg . $link, 'status', FALSE); 64 } 65 } 66 67 /** 68 * Submit handler to invoke "form submitted" events 69 */ 70 function rules_forms_event_submit(&$form, &$form_state) { 71 rules_forms_invoke_event('form_submit', $form, $form_state); 72 } 73 74 /** 75 * Validation handler to invoke "form validate" events 76 */ 77 function rules_forms_event_validate(&$form, &$form_state) { 78 rules_forms_invoke_event('form_validate', $form, $form_state); 79 } 80 81 /** 82 * Invoke rules event of a certain type. 83 */ 84 function rules_forms_invoke_event($event_type, &$form, &$form_state, $form_id = NULL) { 85 if (empty($form_id)) { 86 $form_id = $form['form_id']['#value']; 87 } 88 $action_args = array( 89 'form' => &$form, 90 'form_state' => &$form_state, 91 'form_id' => $form_id, 92 ); 93 rules_invoke_event($form_id .'_'. $event_type, $action_args); 94 } 95 96 /** 97 * Add element IDs as prefix/suffix code to all form elements. 98 */ 99 function rules_forms_add_element_id(&$form, $parent = '') { 100 $bracket = ($parent === '') ? '' : ']'; 101 foreach (element_children($form) as $key) { 102 if (isset($form[$key]['#type'])) { 103 if ($form[$key]['#type'] === 'hidden' || $form[$key]['#type'] === 'token') { 104 $element_id = '<div class="rules_forms_element_id">'. t('Hidden element ID: %elem', array('%elem' => $parent . $key . $bracket)) .'</div>'; 105 } 106 else { 107 $element_id = '<div class="rules_forms_element_id">'. t('Element ID: %elem', array('%elem' => $parent . $key . $bracket)) .'</div>'; 108 } 109 $form[$key]['#suffix'] = isset($form[$key]['#suffix']) ? $form[$key]['#suffix'] . $element_id : $element_id; 110 } 111 else { 112 $element_id = '<div class="rules_forms_element_id">'. t('Container element ID: %elem', array('%elem' => $parent . $key . $bracket)) .'</div>'; 113 $form[$key]['#prefix'] = isset($form[$key]['#suffix']) ? $form[$key]['#suffix'] . $element_id : $element_id; 114 } 115 // recursive call on children 116 rules_forms_add_element_id($form[$key], $parent . $key . $bracket .'['); 117 } 118 } 119 120 /** 121 * Add element IDs on the form if the setting is enabled. Add submit and 122 * validation callbacks to form, buttons, etc. to invoke corresponding events. 123 */ 124 function rules_forms_after_build($form, &$form_state) { 125 if (!empty($_SESSION['rules_forms_element_ids'])) { 126 rules_forms_add_element_id($form); 127 } 128 drupal_add_css(drupal_get_path('module', 'rules_forms') .'/rules_forms.css'); 129 if (!$form_state['submitted']) { 130 return $form; 131 } 132 if (empty($form_state['submit_handlers'])) { 133 $form['#submit'][] = 'rules_forms_event_submit'; 134 } 135 else { 136 $form_state['submit_handlers'][] = 'rules_forms_event_submit'; 137 } 138 if (empty($form_state['validate_handlers'])) { 139 $form['#validate'][] = 'rules_forms_event_validate'; 140 } 141 else { 142 $form_state['validate_handlers'][] = 'rules_forms_event_validate'; 143 } 144 return $form; 145 } 146 147 /** 148 * Implementation of hook_rules_import(). 149 * We need to activate the form event of the imported rule. 150 */ 151 function rules_forms_rules_import($rule) { 152 $event = $rule['#set']; 153 // Check if it is a form-event-triggered rule 154 if (preg_match('/^event_(.)+_form_(built|submit|validate)$/', $event)) { 155 // Remove prefix/suffixes to get the form ID 156 $exploded = explode('_', $event); 157 $length = count($exploded); 158 unset($exploded[0], $exploded[$length-1], $exploded[$length-2]); 159 $form_id = implode('_', $exploded); 160 $form_events = variable_get('rules_forms_events', array()); 161 // Activate event if it hasn't been activated yet. 162 if (!isset($form_events[$form_id])) { 163 $form_events[$form_id] = drupal_ucfirst(str_replace('_', ' ', $form_id)); 164 variable_set('rules_forms_events', $form_events); 165 } 166 } 167 } 168 169 /** 170 * Form after build handler to include *.rules.inc files that are needed for 171 * other after build handlers. This is necessary because forms get cached and 172 * required includes may not be available anymore. 173 */ 174 function rules_forms_include_after_build($form, &$form_state) { 175 rules_include('rules'); 176 return $form; 177 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Thu Mar 24 11:18:33 2011 | Cross-referenced by PHPXref 0.7 |