[ Index ]

PHP Cross Reference of Drupal 6 (yi-drupal)

title

Body

[close]

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

   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  


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