| [ Index ] |
PHP Cross Reference of Drupal 6 (gatewave) |
[Summary view] [Print] [Text view]
1 <?php 2 // $Id: rules_forms.rules.inc,v 1.1.2.9 2010/03/11 12:12:19 klausi Exp $ 3 4 5 /** 6 * @file 7 * Rules integration to provide form support 8 * 9 * @addtogroup rules 10 * @{ 11 */ 12 13 /** 14 * Implementation of hook_rules_event_info(). 15 */ 16 function rules_forms_rules_event_info() { 17 $form_events = variable_get('rules_forms_events', array()); 18 $events = array(); 19 foreach ($form_events as $form_id => $label) { 20 $events[$form_id .'_form_built'] = array( 21 'label' => t('@form is being built', array('@form' => $label)), 22 'module' => 'Rules Forms', 23 'arguments' => rules_forms_events_arguments(), 24 ); 25 $events[$form_id .'_form_submit'] = array( 26 'label' => t('@form is submitted', array('@form' => $label)), 27 'module' => 'Rules Forms', 28 'arguments' => rules_forms_events_arguments(), 29 ); 30 $events[$form_id .'_form_validate'] = array( 31 'label' => t('@form is being validated', array('@form' => $label)), 32 'module' => 'Rules Forms', 33 'arguments' => rules_forms_events_arguments(), 34 ); 35 } 36 return $events; 37 } 38 39 /** 40 * Returns some arguments suitable for hook form alter. 41 */ 42 function rules_forms_events_arguments() { 43 return array( 44 'form' => array('type' => 'form', 'label' => t('Form')), 45 'form_state' => array('type' => 'form_state', 'label' => t('Form state')), 46 'form_id' => array('type' => 'string', 'label' => t('Form ID')), 47 ) + rules_events_global_user_argument(); 48 } 49 50 /** 51 * Implementation of hook_rules_action_info(). 52 */ 53 function rules_forms_rules_action_info() { 54 return array( 55 'rules_forms_action_redirect' => array( 56 'label' => t('Set the redirect target of the form'), 57 'arguments' => array( 58 'form' => array('type' => 'form', 'label' => t('Form')), 59 'path' => array('type' => 'string', 'label' => t('Path')), 60 'query' => array('type' => 'string', 'label' => t('Query')), 61 'fragment' => array('type' => 'string', 'label' => t('Fragment')), 62 ), 63 'module' => 'Rules Forms', 64 'help' => t('Enter a Drupal path, path alias, or external URL to redirect to. Enter (optional) queries after "?" and (optional) anchor after "#".'), 65 ), 66 'rules_forms_action_hide_element' => array( 67 'label' => t('Hide an element of the form'), 68 'arguments' => array( 69 'form' => array('type' => 'form', 'label' => t('Form')), 70 'hide' => array( 71 'type' => 'string', 72 'label' => t('Form element ID'), 73 'description' => t('The element that should not appear.') .' '. _rules_forms_element_description(), 74 ), 75 ), 76 'module' => 'Rules Forms', 77 ), 78 'rules_forms_action_adjust_weight' => array( 79 'label' => t('Adjust weight of an element in the form'), 80 'arguments' => array( 81 'form' => array('type' => 'form', 'label' => t('Form')), 82 'element' => array( 83 'type' => 'string', 84 'label' => t('Form element ID'), 85 'description' => t('The element that should be adjusted.') .' '. _rules_forms_element_description(), 86 ), 87 'weight' => array( 88 'type' => 'number', 89 'label' => t('Element weight'), 90 'description' => t('Low numbers make the element bubble up, high numbers sink it down.'), 91 ), 92 ), 93 'module' => 'Rules Forms', 94 ), 95 'rules_forms_action_prefix_suffix_html' => array( 96 'label' => t('Insert HTML prefix/suffix code'), 97 'arguments' => array( 98 'form' => array('type' => 'form', 'label' => t('Form')), 99 'element' => array( 100 'type' => 'string', 101 'label' => t('Form element ID'), 102 'description' => t('ID of the form element to be targeted.') .' '. _rules_forms_element_description(), 103 ), 104 'prefix' => array( 105 'type' => 'string', 106 'label' => t('Prefixed HTML'), 107 'description' => t('HTML inserted before.'), 108 ), 109 'suffix' => array( 110 'type' => 'string', 111 'label' => t('Suffixed HTML'), 112 'description' => t('HTML inserted after.'), 113 ), 114 ), 115 'module' => 'Rules Forms', 116 ), 117 'rules_forms_action_set_error' => array( 118 'label' => t('Set a form error'), 119 'arguments' => array( 120 'form' => array('type' => 'form', 'label' => t('Form')), 121 'element' => array( 122 'type' => 'string', 123 'label' => t('Form element ID'), 124 'description' => t('The element that should be marked.') .' '. _rules_forms_element_description(), 125 ), 126 'message' => array( 127 'type' => 'string', 128 'label' => t('Message'), 129 'description' => t('The message that should be displayed to the user.'), 130 ), 131 ), 132 'module' => 'Rules Forms', 133 ), 134 'rules_forms_action_set_element' => array( 135 'label' => t('Set the default value of a form element'), 136 'arguments' => array( 137 'form' => array('type' => 'form', 'label' => t('Form')), 138 'element' => array( 139 'type' => 'string', 140 'label' => t('Form element ID'), 141 'description' => t('The element that should be targeted.') .' '. _rules_forms_element_description(), 142 ), 143 'value' => array( 144 'type' => 'string', 145 'label' => t('Default value'), 146 'description' => t('The value(s) that will be displayed as default. If the form element allows multiple values, enter one value per line.'), 147 ), 148 ), 149 'module' => 'Rules Forms', 150 ), 151 ); 152 } 153 154 function _rules_forms_element_description() { 155 return t('Examples on the "Create Story" form: "title" for the title field or "body_field[body]" for the body field.'); 156 } 157 158 /** 159 * Implementation of hook_rules_data_type_info(). 160 */ 161 function rules_forms_rules_data_type_info() { 162 return array( 163 'form' => array( 164 'label' => t('form'), 165 'class' => 'rules_data_type', 166 'savable' => FALSE, 167 'identifiable' => FALSE, 168 'use_input_form' => FALSE, 169 'module' => 'Rules Forms', 170 ), 171 'form_state' => array( 172 'label' => t('form state'), 173 'class' => 'rules_data_type', 174 'savable' => FALSE, 175 'identifiable' => FALSE, 176 'use_input_form' => FALSE, 177 'module' => 'Rules Forms', 178 ), 179 ); 180 } 181 182 /** 183 * Action implementation: Set the redirect target. 184 */ 185 function rules_forms_action_redirect(&$form, $path, $query, $fragment) { 186 $form['#redirect'] = array($path, $query, $fragment); 187 } 188 189 /** 190 * Action implementation: Hide a form element. 191 */ 192 function rules_forms_action_hide_element(&$form, $hide) { 193 $form_element = &_rules_forms_get_element($form, $hide); 194 $form_element['#access'] = FALSE; 195 } 196 197 /** 198 * Action implementation: Adjust weight of a form element. 199 */ 200 function rules_forms_action_adjust_weight(&$form, $element, $weight) { 201 // CCK overrides weight settings in #content_extra_fields 202 if (isset($form['#content_extra_fields'][$element]['weight'])) { 203 $form['#content_extra_fields'][$element]['weight'] = $weight; 204 } 205 else { 206 $form_element = &_rules_forms_get_element($form, $element); 207 $form_element['#weight'] = $weight; 208 } 209 } 210 211 /** 212 * Action implementation: Insert prefix/suffix HTML code. 213 */ 214 function rules_forms_action_prefix_suffix_html(&$form, $element, $prefix, $suffix) { 215 if (empty($element)) { 216 if (!empty($prefix)) { 217 $form['#prefix'] = $prefix; 218 } 219 if (!empty($suffix)) { 220 $form['#suffix'] = $suffix; 221 } 222 } 223 else { 224 $form_element = &_rules_forms_get_element($form, $element); 225 if (!empty($prefix)) { 226 $form_element['#prefix'] = $prefix; 227 } 228 if (!empty($suffix)) { 229 $form_element['#suffix'] = $suffix; 230 } 231 } 232 } 233 234 /** 235 * Action implementation: set form error. 236 */ 237 function rules_forms_action_set_error(&$form, $element, $message) { 238 if (substr($element, strlen($element)-1) === ']') { 239 $form_element = _rules_forms_get_element($form, $element); 240 if (isset($form_element['#parents'])) { 241 $element = implode('][', $form_element['#parents']); 242 } 243 else { 244 // remove trailing ']' 245 $element = substr($element, 0, strlen($element)-1); 246 // insert ']' before the first '[' 247 $first_part = substr($element, 0, strpos($element, '[')); 248 $second_part = substr($element, strpos($element, '[')); 249 $element = $first_part .']'. $second_part; 250 } 251 } 252 form_set_error($element, $message); 253 } 254 255 /** 256 * Action implementation: Set the default value. 257 */ 258 function rules_forms_action_set_element(&$form, $element, $value) { 259 $form_element = &_rules_forms_get_element($form, $element); 260 if (empty($form_element) || !array_key_exists('#default_value', $form_element)) { 261 return; 262 } 263 $lines = explode("\r\n", $value); 264 // Check if the form element is a CCK field 265 if (array_key_exists('#field_name', $form_element)) { 266 $default_value_key = $form_element['#columns'][0]; 267 // Check if multiple default values are allowed 268 if (isset($form_element['#default_value'][0])) { 269 // Unset old default values 270 $form_element['#default_value'] = array(); 271 foreach ($lines as $i => $line) { 272 $form_element['#default_value'][$i][$default_value_key] = $line; 273 } 274 } 275 else { 276 $form_element['#default_value'][$default_value_key] = $value; 277 } 278 } 279 else { 280 if (count($lines) == 1) { 281 $form_element['#default_value'] = $value; 282 } 283 else { 284 $form_element['#default_value'] = $lines; 285 } 286 } 287 } 288 289 /** 290 * Helper function to extract a reference to a form element by a given name. 291 */ 292 function &_rules_forms_get_element(&$form, $name) { 293 $names = explode('[', $name); 294 $element = &$form; 295 foreach ($names as $name) { 296 if (substr($name, strlen($name)-1) === ']') { 297 // remove trailing ']' 298 $name = substr($name, 0, strlen($name)-1); 299 } 300 $element = &$element[$name]; 301 } 302 return $element; 303 } 304 305 /** 306 * Implementation of hook_rules_condition_info(). 307 */ 308 function rules_forms_rules_condition_info() { 309 return array( 310 'rules_forms_condition_element_value' => array( 311 'label' => t('Form element has value'), 312 'arguments' => array( 313 'form' => array('type' => 'form', 'label' => t('Form')), 314 'form_state' => array('type' => 'form_state', 'label' => t('Form state')), 315 'element' => array( 316 'type' => 'string', 317 'label' => t('Form element ID'), 318 'description' => t('ID of the form element to be targeted.') .' '. _rules_forms_element_description(), 319 ), 320 'value' => array( 321 'type' => 'string', 322 'label' => t('Value(s)'), 323 'description' => t('Value(s) assigned to the form element. If the form element allows multiple values, enter one value per line.'), 324 ), 325 ), 326 'module' => 'Rules Forms', 327 ), 328 ); 329 } 330 331 /** 332 * Condition implementation: Check a form element value. 333 */ 334 function rules_forms_condition_element_value($form, $form_state, $element, $value) { 335 $form_element = _rules_forms_get_element($form, $element); 336 if (isset($form_element['#value'])) { 337 // Multiple values come in as array 338 if (is_array($form_element['#value'])) { 339 $lines = explode("\r\n", $value); 340 return rules_forms_equal_array_values($lines, $form_element['#value']); 341 } 342 return $form_element['#value'] === $value; 343 } 344 if (isset($form_element['#default_value'])) { 345 if (is_array($form_element['#default_value'])) { 346 $lines = explode("\r\n", $value); 347 return rules_forms_equal_array_values($lines, $form_element['#default_value']); 348 } 349 return $form_element['#default_value'] === $value; 350 } 351 return FALSE; 352 } 353 354 /** 355 * Returns TRUE if both arrays contain the same values, regardless of their keys 356 * and value ordering. 357 */ 358 function rules_forms_equal_array_values($array1, $array2) { 359 $diff1 = array_diff($array1, $array2); 360 $diff2 = array_diff($array2, $array1); 361 return empty($diff1) && empty($diff2); 362 } 363 364 /** 365 * @} 366 */
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 |