--- signup_status.module.form_alter 2009-01-24 00:17:05.000000000 -0800 +++ signup_status.module 2009-01-24 00:17:26.000000000 -0800 @@ -112,9 +112,16 @@ function signup_status_views_api() { // Signup form altering /** - * Alter the signup form to add a status selector, if available. + * Helper function to generate the signup status form element. + * + * @param $current_status + * Optional code for the current signup status to use as the default. + * + * @return + * FormAPI array defining the signup status form element. */ -function signup_status_form_signup_form_alter(&$form, $form_state) { +function _signup_status_status_form_element($current_status = NULL) { + $element = array(); $options = array(); foreach (signup_status_codes() as $cid => $code) { if ($code['show_on_form']) { @@ -122,18 +129,45 @@ function signup_status_form_signup_form_ } } if (!empty($options)) { - $form['collapse']['signup_status'] = array( + if (!isset($current_status)) { + $options = array(-1 => t('- Please choose -')) + $options; + } + $element = array( '#type' => 'select', '#title' => t('Status'), '#options' => $options, '#weight' => 1, ); + if (isset($current_status)) { + $element['#default_value'] = $current_status; + } + } + return $element; +} + +/** + * Alter the signup form to add a status selector, if available. + */ +function signup_status_form_signup_form_alter(&$form, $form_state) { + $status_element = _signup_status_status_form_element(); + if (!empty($status_element)) { + $form['collapse']['signup_status'] = $status_element; $form['collapse']['submit']['#weight'] = 2; + $form['#validate'][] = 'signup_status_signup_form_validate_status'; $form['#submit'][] = 'signup_status_alter_signup_form_submit'; } } /** + * Validate the status field on the altered signup form. + */ +function signup_status_signup_form_validate_status($form, $form_state) { + if (!isset($form_state['values']['signup_status']) || $form_state['values']['signup_status'] == -1) { + form_set_error('signup_status', t('You must select a valid status.')); + } +} + +/** * Handles submission of the altered signup form. */ function signup_status_alter_signup_form_submit($form, &$form_state) { @@ -154,20 +188,9 @@ function signup_status_alter_signup_form */ function signup_status_form_signup_edit_form_alter(&$form, $form_state) { $signup = $form['#signup']; - $options = array(); - foreach (signup_status_codes() as $cid => $code) { - if ($code['show_on_form']) { - $options[$cid] = $code['name']; - } - } - if (!empty($options)) { - $form['elements']['signup_status'] = array( - '#type' => 'select', - '#title' => t('Status'), - '#options' => $options, - '#default_value' => $signup->status, - '#weight' => 1, - ); + $status_element = _signup_status_status_form_element($signup->status); + if (!empty($status_element)) { + $form['elements']['signup_status'] = $status_element; $form['elements']['save']['#submit'][] = 'signup_status_alter_signup_edit_form_submit'; $form['elements']['save']['#weight'] = 2; $form['elements']['cancel-signup']['#weight'] = 3;