[ Index ]

PHP Cross Reference of Drupal 6 (gatewave)

title

Body

[close]

/sites/all/modules/rules/rules_forms/ -> rules_forms.rules.inc (source)

   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   */


Generated: Thu Mar 24 11:18:33 2011 Cross-referenced by PHPXref 0.7