[ Index ]

PHP Cross Reference of Drupal 6 (gatewave)

title

Body

[close]

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

   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  }


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