| [ Index ] |
PHP Cross Reference of Drupal 6 (yi-drupal) |
[Summary view] [Print] [Text view]
1 <?php 2 3 define('FIELDSET_PREFIX', 'new_'); 4 5 /** 6 * Implementation of hook_menu(). 7 */ 8 function form_manager_menu() { 9 $items = array(); 10 11 $items['form/%'] = array( 12 'title' => 'Form', 13 'page callback' => 'form_manager_interface', 14 'page arguments' => array('form_manager', 1), 15 'access arguments' => array('access content'), 16 'file' => 'includes/form_manager.pages.inc', 17 'type' => MENU_CALLBACK, 18 ); 19 20 // Loop through all of the forms' settings to get the path and access options to generate this 21 $result = db_query("SELECT * FROM {form_manager_settings} WHERE status=1"); 22 while($formdata = db_fetch_array($result)) { 23 //if (!menu_get_item($formdata['path'])) { 24 $items[$formdata['path']] = array( 25 'title' => 'Form', 26 'page callback' => 'form_manager_interface', 27 'page arguments' => array('form_manager', $formdata['form_id']), 28 'access arguments' => array('access content'), 29 'file' => 'includes/form_manager.pages.inc', 30 'type' => MENU_CALLBACK, 31 ); 32 //} 33 } 34 35 36 /* Admin page menu items */ 37 $items['admin/build/forms'] = array( 38 'title' => 'Form Manager', 39 'page callback' => 'form_manager_admin', 40 'access arguments' => array('administer form_manager forms'), 41 'file' => 'includes/form_manager.admin.inc', 42 'type' => MENU_NORMAL_ITEM, 43 'file' => 'includes/form_manager.admin.inc', 44 ); 45 $items['admin/build/forms/list'] = array( 46 'title' => 'Form Manager', 47 'access arguments' => array('administer form_manager forms'), 48 'type' => MENU_DEFAULT_LOCAL_TASK, 49 ); 50 $items['admin/build/forms/add'] = array( 51 'title' => 'Edit', 52 'page callback' => 'drupal_get_form', 53 'page arguments' => array('form_manager_add'), 54 'access arguments' => array('administer form_manager forms'), 55 'type' => MENU_NORMAL_ITEM, 56 'file' => 'includes/form_manager.admin.inc', 57 ); 58 $items['admin/build/forms/edit/%'] = array( 59 'title' => 'Edit', 60 'page callback' => 'form_manager_edit', 61 'page arguments' => array('form_manager', 4), 62 'access arguments' => array('administer form_manager forms'), 63 'type' => MENU_NORMAL_ITEM, 64 'file' => 'includes/form_manager.admin.inc', 65 ); 66 $items['admin/build/forms/exportfapi/%'] = array( 67 'title' => 'Export FAPI code', 68 'page callback' => 'form_manager_export_form_page', 69 'page arguments' => array(4), 70 'access arguments' => array('administer form_manager forms'), 71 'type' => MENU_NORMAL_ITEM, 72 'file' => 'includes/form_manager.admin.inc', 73 ); 74 $items['admin/build/forms/export/%'] = array( 75 'title' => 'Export form', 76 'page arguments' => array(4), 77 'page callback' => 'form_manager_admin_exportable', 78 'access arguments' => array('administer form_manager forms'), 79 'type' => MENU_NORMAL_ITEM, 80 'file' => 'includes/form_manager.admin.inc', 81 ); 82 $items['admin/build/forms/import'] = array( 83 'title' => 'Import', 84 'page callback' => 'drupal_get_form', 85 'page arguments' => array('form_manager_admin_import'), 86 'access arguments' => array('administer form_manager forms'), 87 'type' => MENU_NORMAL_ITEM, 88 'file' => 'includes/form_manager.admin.inc', 89 ); 90 $items['admin/build/forms/delete/%'] = array( 91 'title' => 'Delete', 92 'page callback' => 'drupal_get_form', 93 'page arguments' => array('form_manager_confirm_delete'), 94 'access arguments' => array('administer form_manager forms'), 95 'type' => MENU_NORMAL_ITEM, 96 'file' => 'includes/form_manager.admin.inc', 97 ); 98 99 return $items; 100 } 101 102 103 /** 104 * Implementation of hook_perm(). 105 */ 106 function form_manager_perm() { 107 return array('administer form_manager forms'); 108 } 109 110 111 /** 112 * Callback function from hook_menu that displays the form to the user. 113 */ 114 function form_manager_interface($form_type, $form_id) { 115 //module_load_include('inc', 'form_manager', 'includes/form_manager.pages'); 116 $output = drupal_get_form('form_manager_form', $form_id); 117 return $output; 118 } 119 120 121 function form_manager_form_validate($form, &$form_state) { 122 // Will do things like compare email and email2, etc... 123 } 124 125 function form_manager_form_submit($form, &$form_state) { 126 // loop through submitted form values 127 foreach ($form_state['values'] as $k => $v) { 128 // add certain fields to storage 129 $form_state['storage'][$k] = $v; 130 } 131 132 // handle button action 133 switch ($form_state['clicked_button']['#value']) { 134 case 'Previous': 135 // set the state to rebuild 136 $form_state['rebuild'] = TRUE; 137 138 // set new step 139 if ($form_state['storage']['#navigation']['step'] > 1) { 140 $form_state['storage']['#navigation']['newStep'] = $form_state['storage']['#navigation']['step'] - 1; 141 } 142 break; 143 144 case 'Next': 145 // set the state to rebuild 146 $form_state['rebuild'] = TRUE; 147 148 // set new step 149 if ($form_state['storage']['#navigation']['step'] < $form_state['storage']['#navigation']['maxSteps']) { 150 $form_state['storage']['#navigation']['newStep'] = $form_state['storage']['#navigation']['step'] + 1; 151 } 152 break; 153 154 case 'Save': 155 // TODO 156 break; 157 158 // tabs 159 default: 160 // check if the button value maps to a tab 161 $key = array_search($form_state['clicked_button']['#value'], $form_state['storage']['#navigation']['tabs']); 162 if ($key) { 163 $form_state['storage']['#navigation']['newStep'] = $key; 164 } 165 break; 166 } 167 } 168 169 170 /** 171 * Implementation of hook_form_alter 172 * 173 * Form Builder module hardcodes the options limit, so we have to ovrecome 174 * that by setting it here. This could be a drupal variable, but left hardcoded 175 * for now. Needs to be at least 300 to allow for list of nations; 3000 is arbitrary. 176 */ 177 function form_manager_form_form_builder_field_configure_alter(&$form, &$form_state) { 178 if (isset($form['options']['#limit'])) { 179 // Set the options widget to a more helpful maximum value than 10 180 if ($form['options']['#limit'] == 10) { 181 $form['options']['#limit'] = 3000; 182 } 183 } 184 185 // Add a form element to set the form element's internal name to something other than new_`time()` 186 // [#OPP-19] Add an element to Form Builder to define the element's key 187 $form['element_name'] = array( 188 '#title' => 'Element name', 189 '#type' => 'textfield', 190 '#default_value' => ($form['#element']['#element_name']) ? $form['#element']['#element_name'] : $form['#element']['#key'], 191 '#weight' => 6, 192 ); 193 // do this to add our submit handler since the default form_builder_field_configure_submit 194 // function will print JSON and exit Drupal in the same step, preventing any other submit 195 // functions from executing. 196 array_unshift($form['#submit'], 'form_manager_form_form_builder_field_configure_submit'); 197 } 198 199 200 /** 201 * Form submission handler to allow adding an element to the AJAX form to set the name of the 202 * form's element key name. [#OPP-19] Add an element to Form Builder to define the element's key 203 */ 204 function form_manager_form_form_builder_field_configure_submit(&$form, &$form_state) { 205 $form['elementname']['#value'] = str_replace(' ', '_', $form['elementname']['#value']); 206 $form['elementname']['#value'] = str_replace('?', '', $form['elementname']['#value']); 207 $form['elementname']['#value'] = str_replace(',', '', $form['elementname']['#value']); 208 $form['elementname']['#value'] = str_replace('.', '', $form['elementname']['#value']); 209 } 210 211 212 /** 213 * Implementation of hook_form_builder_types(). 214 * 215 * Define the supported fields and properties supported by CCK. 216 */ 217 function form_manager_form_builder_types() { 218 $fields = array(); 219 220 $fields['fieldset'] = array( 221 'title' => t('Fieldset'), 222 'properties' => array( 223 'title', 224 'description', 225 'collapsible', 226 'collapsed', 227 'element_name', 228 ), 229 'default' => array( 230 '#title' => t('New fieldset'), 231 '#type' => 'fieldset', 232 '#collapsible' => TRUE, 233 '#collapsed' => FALSE, 234 ), 235 ); 236 237 $fields['number'] = array( 238 'title' => t('Number'), 239 'properties' => array( 240 'title', 241 'description', 242 'field_prefix', 243 'field_suffix', 244 'default_value', 245 'required', 246 'element_name', 247 ), 248 // TODO: how to handle validate functions? 249 'validate' => array( 250 'number', 251 ), 252 'default' => array( 253 '#key' => 'number', 254 '#title' => t('New number'), 255 '#type' => 'textfield', 256 ), 257 ); 258 259 $fields['select'] = array( 260 'title' => t('Select list'), 261 'properties' => array( 262 'title', 263 'description', 264 'default_value', 265 'required', 266 'options', 267 'multiple', // Handled by options element. 268 'key_type', // Handled by options element. 269 'element_name', 270 ), 271 'default' => array( 272 '#title' => t('New select list'), 273 '#type' => 'select', 274 '#options' => array('1' => 'one', '2' => 'two', '3' => 'three'), 275 '#multiple_toggle' => TRUE, 276 '#key_type' => 'mixed', 277 ), 278 ); 279 280 $fields['checkboxes'] = array( 281 'title' => t('Checkboxes'), 282 'properties' => array( 283 'title', 284 'description', 285 'default_value', 286 'required', 287 'options', 288 'multiple', 289 'key_type', // Handled by options element. 290 'element_name', 291 ), 292 'default' => array( 293 '#title' => t('New checkboxes'), 294 '#type' => 'checkboxes', 295 '#options' => array('one' => 'one', 'two' => 'two', 'three' => 'three'), 296 ), 297 ); 298 299 $fields['radios'] = array( 300 'title' => t('Radios'), 301 'properties' => array( 302 'title', 303 'description', 304 'default_value', 305 'required', 306 'options', 307 'key_type', // Handled by options element. 308 'element_name', 309 ), 310 'default' => array( 311 '#title' => t('New radios'), 312 '#type' => 'radios', 313 '#options' => array('one' => 'one', 'two' => 'two', 'three' => 'three'), 314 ), 315 ); 316 317 $fields['textfield'] = array( 318 'title' => t('Textfield'), 319 'properties' => array( 320 'title', 321 'description', 322 'field_prefix', 323 'field_suffix', 324 'default_value', 325 'required', 326 'size', 327 'element_name', 328 ), 329 'default' => array( 330 '#title' => t('New textfield'), 331 '#type' => 'textfield', 332 ), 333 ); 334 335 $fields['textarea'] = array( 336 'title' => t('Textarea'), 337 'properties' => array( 338 'title', 339 'description', 340 'default_value', 341 'required', 342 'rows', 343 'cols', 344 'input_format', 345 'element_name', 346 ), 347 'default' => array( 348 '#title' => t('New textarea'), 349 '#type' => 'textarea', 350 ), 351 ); 352 353 $fields['file'] = array( 354 'title' => t('File'), 355 'properties' => array( 356 'title', 357 'description', 358 'required', 359 'size', 360 'file_extension_validate', 361 'file_size_validate', 362 'element_name', 363 ), 364 'default' => array( 365 '#title' => t('New file'), 366 '#type' => 'file', 367 '#size' => 30, 368 ), 369 ); 370 371 $fields['image'] = array( 372 'title' => t('Image'), 373 'properties' => array( 374 'title', 375 'description', 376 'required', 377 'element_name', 378 ), 379 'validate' => array( 380 'file_extension_validate', 381 'file_size_validate', 382 'file_image_size', 383 ), 384 'default' => array( 385 '#title' => t('New image'), 386 '#type' => 'file', 387 '#size' => 30, 388 ), 389 ); 390 391 $fields['date_popup'] = array( 392 'title' => t('Date'), 393 'properties' => array( 394 'title', 395 'description', 396 'default_value', 397 'required', 398 'element_name', 399 'date_format', 400 'date_year_range', 401 ), 402 // TODO: how to handle validate functions? 403 'validate' => array( 404 'date_popup', 405 ), 406 'default' => array( 407 '#title' => t('New date'), 408 '#type' => 'date_popup', 409 '#date_format' => 'm/d/Y', 410 '#default_value' => 'YYYY-MM-DD 00:00:00', 411 '#date_year_range' => '-80:+1', 412 '#size' => 12, 413 ), 414 ); 415 416 $fields['hidden'] = array( 417 'title' => t('User ID'), 418 'properties' => array( 419 'title', 420 'value', 421 ), 422 'default' => array( 423 '#type' => 'hidden', 424 '#value' => 'user_id', // This will be handled as a special case in _form_manager_convert_form() 425 ), 426 ); 427 428 return array( 429 'form_manager' => $fields, 430 ); 431 } 432 433 434 /** 435 * Implementation of hook_form_builder_load(). 436 * 437 * @param $form_id 438 * The unique identifier for the form being edited. 439 */ 440 function form_manager_form_builder_load($form_type, $form_id) { 441 if ($form_type == 'form_manager') { 442 require_once ('includes/form_manager.pages.inc'); 443 $form = array(); 444 $form_state = array(); 445 _form_manager_form_add_fields($form, $form_state); 446 return $form; 447 } 448 } 449 450 451 /** 452 * Implementation of hook_form_builder_preview_alter(). 453 */ 454 function form_manager_form_builder_preview_alter($element, $form_type, $form_id) { 455 if ($form_type == 'form_manager') { 456 if (isset($element['#description'])) { 457 $element['#description'] = filter_xss($element['#description']); 458 } 459 } 460 } 461 462 463 /* TODO: Move these 2 functions into pages.inc */ 464 465 /** 466 * Preparring a FAPI form to be editible by Form Builder in form_builder_preview 467 */ 468 function _form_manager_convert_form(&$form, $form_id) { 469 foreach ($form as $key => $value) { 470 //print "Evaluating $key</br>"; 471 if (!empty($value['#type']) && empty($value['#form_builder'])) { 472 //print "$key needs to be converted ({$value['#type']})</br>"; 473 $element['#form_builder'] = _form_manager_convert_form_element($key, $form[$key]); 474 foreach (element_children($form[$key]) as $child_key) { 475 //print "$child_key is a child element ($child_key)</br>"; 476 _form_manager_convert_form($form[$key], $form_id); 477 } 478 } 479 else { 480 if ($value['#type'] == 'hidden') { 481 switch($value['#value']) { 482 case 'user_id': 483 global $user; 484 $form[$key]['#value'] = $user->uid; 485 break; 486 } 487 } 488 } 489 } 490 491 $form['#form_manager_form_id'] = (empty($form['#form_manager_form_id'])) ? $form_id : $form['#form_manager_form_id']; 492 } 493 494 495 function _form_manager_convert_form_element($key, &$element) { 496 $element['#form_builder'] = array( 497 'element_id' => $key, 498 'element_type' => $element['#type'], 499 'configurable' => TRUE, 500 'removable' => TRUE, 501 ); 502 } 503 504 505 function form_manager_theme() { 506 $theme = array( 507 'form_manager_form' => array( 508 'arguments' => array('form' => NULL, 'form_id' => NULL), 509 'template' => 'form_manager_form', 510 ), 511 ); 512 513 return $theme; 514 } 515 516 517 /** 518 * Implementation of hook_preprocess for the form_manager_form theme key. 519 * Sets the template suggestions for form_manager_form.tpl.php and 520 * form_manager_form-FORM_ID.tpl.php. 521 */ 522 function form_manager_preprocess_form_manager_form(&$vars) { 523 if ($vars['form']['#form_manager_form_id']) { 524 $vars['form_id'] = $vars['form']['#form_manager_form_id']; 525 } 526 else { 527 //$($vars['form']['captcha']); 528 } 529 530 // Add a template suggestion in the form of form_manager_form-FORM_ID.tpl.php 531 $vars['template_files'][] = 'form_manager_form-' . $vars['form_id']; 532 533 // Set a boolean value whether or not this is the first time the form has been 534 // seen (are we on the start page?) 535 $vars['startpage'] = TRUE; 536 foreach ($vars['form']['#parameters'] as $element) { 537 if (is_array($element)) { 538 if(!empty($element['storage'])) { 539 $vars['startpage'] = FALSE; 540 } 541 } 542 } 543 } 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558
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 |