| [ Index ] |
PHP Cross Reference of Drupal 6 (yi-drupal) |
[Summary view] [Print] [Text view]
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 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Mon Jul 9 18:01:44 2012 | Cross-referenced by PHPXref 0.7 |