[ Index ]

PHP Cross Reference of Drupal 6 (yi-drupal)

title

Body

[close]

/sites/all/modules/form_builder/ -> form_builder.module (source)

   1  <?php
   2  
   3  /**
   4   * @file form_builder.module
   5   * Generic form building framework and user interface.
   6   */
   7  
   8  define('FORM_BUILDER_ROOT', 0);
   9  
  10  /**
  11   * Implementation of hook_menu().
  12   */
  13  function form_builder_menu() {
  14    $items = array();
  15  
  16    $items['admin/build/form-builder/add'] = array(
  17      'title' => 'Add field',
  18      'description' => 'Add a field to a form.',
  19      'page callback' => 'form_builder_add_page',
  20      'access callback' => 'form_builder_menu_field_access',
  21      'access arguments' => array('add', 4, 5, 6),
  22      'file' => 'includes/form_builder.admin.inc',
  23      'type' => MENU_CALLBACK,
  24    );
  25  
  26    $items['admin/build/form-builder/configure'] = array(
  27      'title' => 'Configure field',
  28      'description' => 'Configure a field within a form.',
  29      'page callback' => 'form_builder_configure_page',
  30      'access callback' => 'form_builder_menu_field_access',
  31      'access arguments' => array('configure', 4, 5, 6),
  32      'file' => 'includes/form_builder.admin.inc',
  33      'type' => MENU_CALLBACK,
  34    );
  35  
  36    $items['admin/build/form-builder/remove'] = array(
  37      'title' => 'Remove field',
  38      'description' => 'Remove a field from a form.',
  39      'page callback' => 'form_builder_remove_page',
  40      'access callback' => 'form_builder_menu_field_access',
  41      'access arguments' => array('remove', 4, 5, 6),
  42      'file' => 'includes/form_builder.admin.inc',
  43      'type' => MENU_CALLBACK,
  44    );
  45  
  46    $items['admin/build/form-builder/json'] = array(
  47      'title' => 'JSON representation',
  48      'description' => 'Display a form field as a JSON string.',
  49      'page callback' => 'form_builder_field_json',
  50      'access callback' => 'form_builder_menu_field_access',
  51      'access arguments' => array('view', 4, 5, 6),
  52      'file' => 'includes/form_builder.admin.inc',
  53      'type' => MENU_CALLBACK,
  54    );
  55  
  56    return $items;
  57  }
  58  
  59  /**
  60   * Implements hook_theme().
  61   */
  62  function form_builder_theme() {
  63    return array(
  64      'form_builder_wrapper' => array(
  65        'arguments' => array('element' => NULL, 'content' => NULL),
  66        'file' => 'includes/form_builder.admin.inc',
  67      ),
  68      'form_builder_element_wrapper' => array(
  69        'arguments' => array('element' => NULL, 'content' => NULL),
  70        'file' => 'includes/form_builder.admin.inc',
  71      ),
  72      'form_builder_empty_form' => array(
  73        'arguments' => array(),
  74        'file' => 'includes/form_builder.admin.inc',
  75      ),
  76      'form_builder_empty_fieldset' => array(
  77        'arguments' => array(),
  78        'file' => 'includes/form_builder.admin.inc',
  79      ),
  80      'form_builder_no_field_selected' => array(
  81        'variables' => array(),
  82        'file' => 'includes/form_builder.admin.inc',
  83      ),
  84      'form_builder_field_loading' => array(
  85        'variables' => array(),
  86        'file' => 'includes/form_builder.admin.inc',
  87      ),
  88      'form_builder_field_palette' => array(
  89        'arguments' => array('fields' => NULL, 'groups' => NULL, 'form_type' => NULL, 'form_id' => NULL),
  90        'file' => 'includes/form_builder.admin.inc',
  91      ),
  92    );
  93  }
  94  
  95  /**
  96   * Implements hook_block_info().
  97   */
  98  function form_builder_block_info() {
  99    $blocks = array();
 100    $blocks['fields'] = array(
 101      'info' => t('Form builder fields'),
 102      'weight' => 0,
 103    );
 104    return $blocks;
 105  }
 106  
 107  /**
 108   * Implements hook_block().
 109   */
 110  function form_builder_block($op = 'list', $delta = 0, $edit = array()) {
 111    if ($op == 'list') {
 112      return form_builder_block_info();
 113    }
 114  
 115    if ($op == 'view') {
 116      return form_builder_block_view($delta);
 117    }
 118  }
 119  
 120  /**
 121   * Implements hook_block_view().
 122   */
 123  function form_builder_block_view($delta = '') {
 124    $block = array();
 125    if ($delta == 'fields' && form_builder_active_form()) {
 126      module_load_include('inc', 'form_builder', 'includes/form_builder.admin');
 127      $block['content'] = form_builder_field_palette();
 128    }
 129    return $block;
 130  }
 131  
 132  /**
 133   * Access callback for field configuration, viewing, addition, and deletion.
 134   */
 135  function form_builder_menu_field_access($op, $form_type, $form_id, $element_id) {
 136    module_load_include('inc', 'form_builder', 'includes/form_builder.api');
 137    module_load_include('inc', 'form_builder', 'includes/form_builder.cache');
 138    $element = form_builder_cache_field_load($form_type, $form_id, $element_id);
 139    $access = FALSE;
 140  
 141    if ($op == 'add' || $op == 'view') {
 142      $access = TRUE;
 143    }
 144    if ($op == 'configure' && !empty($element['#form_builder']['configurable'])) {
 145      $access = TRUE;
 146    }
 147    if ($op == 'remove' && !empty($element['#form_builder']['removable'])) {
 148      $access = TRUE;
 149    }
 150  
 151    $module_accesses = module_invoke_all('form_builder_field_access', $op, $form_type, $form_id, $element);
 152    if (!empty($module_accesses)) {
 153      $access = array_pop($module_accesses);
 154    }
 155  
 156    return $access;
 157  
 158  }
 159  
 160  /**
 161   * Implementation of hook_form_builder_properties().
 162   */
 163  function form_builder_form_builder_properties($form_type) {
 164    module_load_include('inc', 'form_builder', 'includes/form_builder.properties');
 165  
 166    return array(
 167      'key' => array(
 168        'form' => 'form_builder_property_key_form',
 169      ),
 170      'title' => array(
 171        'form' => 'form_builder_property_title_form',
 172      ),
 173      'title_display' => array(
 174        'form' => 'form_builder_property_title_display_form',
 175      ),
 176      'description' => array(
 177        'form' => 'form_builder_property_description_form',
 178      ),
 179      'disabled' => array(
 180        'form' => 'form_builder_property_disabled_form',
 181      ),
 182      'weight' => array(
 183        'form' => 'form_builder_property_weight_form',
 184      ),
 185      'default_value' => array(
 186        'form' => 'form_builder_property_default_value_form',
 187      ),
 188      'markup' => array(
 189        'form' => 'form_builder_property_markup_form',
 190      ),
 191      'input_format' => array(
 192        'form' => 'form_builder_property_input_format_form',
 193      ),
 194      'required' => array(
 195        'form' => 'form_builder_property_required_form',
 196      ),
 197      'options' => array(
 198        'form' => 'form_builder_property_options_form',
 199        'submit' => array('form_builder_property_options_form_submit'),
 200      ),
 201      'size' => array(
 202        'form' => 'form_builder_property_size_form',
 203      ),
 204      'rows' => array(
 205        'form' => 'form_builder_property_rows_form',
 206      ),
 207      'cols' => array(
 208        'form' => 'form_builder_property_cols_form',
 209      ),
 210      'field_prefix' => array(
 211        'form' => 'form_builder_property_field_prefix_form',
 212      ),
 213      'field_suffix' => array(
 214        'form' => 'form_builder_property_field_suffix_form',
 215      ),
 216      'collapsible' => array(
 217        'form' => 'form_builder_property_collapsible_form',
 218      ),
 219      'collapsed' => array(
 220        'form' => 'form_builder_property_collapsed_form',
 221      ),
 222    );
 223  }
 224  
 225  /**
 226   * Implementation of hook_form_builder_property_groups().
 227   */
 228  function form_builder_form_builder_property_groups($form_type) {
 229    return array(
 230      'default' => array(
 231        'weight' => 0,
 232        'title' => t('Properties'),
 233      ),
 234      'hidden' => array(
 235        'weight' => 100,
 236        'title' => t('Advanced'),
 237        'collapsed' => TRUE,
 238        'collapsible' => TRUE,
 239      ),
 240      'display' => array(
 241        'weight' => 1,
 242        'title' => t('Display'),
 243      ),
 244      'options' => array(
 245        'weight' => 2,
 246        'title' => t('Options'),
 247      ),
 248      'validation' => array(
 249        'weight' => 3,
 250        'title' => t('Validation'),
 251      ),
 252    );
 253  }
 254  
 255  /**
 256   * Implementation of hook_form_builder_palette_groups().
 257   */
 258  function form_builder_form_builder_palette_groups() {
 259    return array(
 260      'default' => array(
 261        'weight' => 0,
 262        'title' => t('Standard'),
 263      ),
 264      'special' => array(
 265        'weight' => 5,
 266        'title' => t('Special'),
 267      ),
 268    );
 269  }
 270  
 271  /**
 272   * Implementation of hook_form_builder_validators().
 273   */
 274  function form_builder_form_builder_validators($form_type) {
 275    return array(
 276      'form_validate_integer' => array(
 277        'form' => 'form_builder_validate_integer',
 278      ),
 279      'form_validate_decimal' => array(
 280        'form' => 'form_builder_validate_decimal',
 281      ),
 282      'form_validate_email' => array(
 283        'form' => 'form_builder_validate_email',
 284      ),
 285      'form_validate_url' => array(
 286        'form' => 'form_builder_validate_url',
 287      ),
 288    );
 289  }
 290  
 291  /**
 292   * Static storage of the current type of form being edited (if any).
 293   *
 294   * @param $new_type_name
 295   *   The name of the type being edited. If this value is passed in, the static
 296   *   variable is set. If this parameter is ommited, the current type is
 297   *   returned. Pass in FALSE to reset current type.
 298   */
 299  function form_builder_active_form($new_type = NULL, $new_id = NULL) {
 300    static $active_form = FALSE;
 301  
 302    if (isset($new_type) && isset($new_id)) {
 303      if (!$new_type && !$new_id) {
 304        $active_form = FALSE;
 305      }
 306      else {
 307        $active_form['form_type'] = $new_type;
 308        $active_form['form_id'] = $new_id;
 309      }
 310    }
 311  
 312    return $active_form;
 313  }
 314  
 315  /**
 316   * A #post_render callback to backport Drupal 7's #theme_wrappers.
 317   *
 318   * This #after_build function can be added to any form element to make it
 319   * process #form_builder_wrappers functions which act in the same way as
 320   * Drupal 7's #theme_wrappers functions.
 321   */
 322  function form_builder_wrappers($content, $elements) {
 323    if (isset($elements['#form_builder_wrappers'])) {
 324      foreach ($elements['#form_builder_wrappers'] as $theme_wrapper) {
 325        $content = theme($theme_wrapper, $elements, $content);
 326      }
 327    }
 328    return $content;
 329  }
 330  
 331  /**
 332   * Generic validation function to check that an element has a integer value.
 333   */
 334  function form_validate_integer(&$element, &$form_state) {
 335    $value = $element['#value'];
 336  
 337    // Remove commas from numbers.
 338    $new_value = str_replace(array(' ', ','), '', $element);
 339    if (is_int($new_value) && $new_value != $value) {
 340      form_set_value($element, $new_value, $form_state);
 341      drupal_set_message(t('Commas and spaces were removed from the %title field.', array('%title' => $element['#title'])));
 342    }
 343    elseif (!is_int($new_value)) {
 344      form_error($element, t('The %title field value must be an integer.', array('%title' => $element['#title'])));
 345    }
 346  }
 347  
 348  /**
 349   * Generic validation function to check that an element has a decimal value.
 350   */
 351  function form_validate_decimal(&$element, &$form_state) {
 352    $value = $element['#value'];
 353  
 354    // Remove commas from numbers.
 355    $new_value = str_replace(array(' ', ','), '', $element);
 356    if (is_int($new_value) && $new_value != $value) {
 357      form_set_value($element, $new_value, $form_state);
 358      drupal_set_message(t('Commas and spaces were removed from the %title field.', array('%title' => $element['#title'])));
 359    }
 360    elseif (!is_int($new_value)) {
 361      form_error($element, t('The %title field value must be a decimal.', array('%title' => $element['#title'])));
 362    }
 363  }
 364  
 365  /**
 366   * Generic validation function to check for a valid e-mail value.
 367   */
 368  function form_validate_email(&$element, &$form_state) {
 369    if (valid_email_address($element['#value'])) {
 370      form_error($element, t('The %title field value must be a valid e-mail address.', array('%title' => $element['#title'])));
 371    }
 372  }
 373  
 374  /**
 375   * Generic validation function to check for a valid url value.
 376   */
 377  function form_validate_url(&$element, &$form_state) {
 378    if (valid_url($element['#value'], isset($element['#absolute_url']) ? $element['#absolute_url'] : TRUE)) {
 379      form_error($element, t('The %title field value must be a valid URL.', array('%title' => $element['#title'])));
 380    }
 381  }


Generated: Mon Jul 9 18:01:44 2012 Cross-referenced by PHPXref 0.7