--- modules/coppa/coppa_email/coppa_email.1.module Thu Feb 24 18:09:03 2011 +++ modules/coppa/coppa_email/coppa_email.module Sat Jan 14 10:52:29 2012 @@ -14,8 +14,24 @@ case 'user_register': if (!in_array('coppa_email_user_register_validate', $form['#validate'])) { $form['#validate'][] = 'coppa_email_user_register_validate'; + $form['#submit'][] = 'coppa_email_user_register_submit'; } if ($form_state['storage']['parent_email']) { + $field = variable_get('coppa_dob_field', 'profile_dob'); + $type = variable_get('coppa_dob_field_type', 'profile'); + drupal_set_message("For COPPA compliance, please enter your parent or guardian's email address.", 'warning'); + // Attempt to retain form values. + if ($type == 'profile') { + $profile_category = db_result(db_query("SELECT category FROM {profile_fields} WHERE name = '%s'", $field)); + $form['account']['name']['#default_value'] = $form_state['storage']['values']['name']; + $form['account']['mail']['#default_value'] = $form_state['storage']['values']['mail']; + $form[$profile_category][$field]['#default_value'] = $form_state['storage']['values'][$field]; + } + else { + $form['name']['#default_value'] = $form_state['storage']['values']['name']; + $form['mail']['#default_value'] = $form_state['storage']['values']['mail']; + } + $form_state['values'] = $form_state['storage']['values']; $form['parent_email'] = array( '#type' => 'textfield', '#required' => TRUE, @@ -25,6 +41,7 @@ '#default_value' => $form_state['values']['parent_email'], ); } + break; } } @@ -35,11 +52,17 @@ function coppa_email_user_register_validate($form, &$form_state) { // Check age. $age = _coppa_get_dob_form($form, $form_state); - if (coppa_age($age) < COPPA_AGE) { + if (coppa_age($age) < COPPA_AGE && $form_state['values']['parent_email'] == FALSE) { $form_state['storage']['parent_email'] = TRUE; + $form_state['storage']['values'] = $form_state['values']; + $form_state['rebuild'] = TRUE; } } +function coppa_email_user_register_submit($form, &$form_state) { + unset($form_state['storage']); +} + /** * Valid email wrapper. */ @@ -52,6 +75,14 @@ // Parent/guardian's email can't be the same as the registration email. form_set_error($element['#name'], t("You must use your parent or guardian's email address, not your own.")); } - var_dump($form_state); - form_set_error($element['#name']); -} \ No newline at end of file + // var_dump($form_state); + // form_set_error($element['#name']); +} + +/** + * Check if parent email address is in {coppa_email} database table. + */ +function coppa_email_check_parent($email) { + $cid = db_result(db_query("SELECT cid FROM {coppa_email} WHERE mail='%s'", $email)); + return $cid; +}