'; foreach ($errors as $error) { echo '

'.$error.'

'; } echo ''; delete_transient('hvac_registration_errors'); } // Form HTML will be generated here ?>

HVAC Trainer Registration

Personal Information

Business Information

Address Information

Training Information

validate_registration($_POST); if (empty($errors)) { // Process valid form submission $user_id = $this->create_trainer_account($_POST); if ($user_id && !is_wp_error($user_id)) { $this->send_registration_notification($user_id, $_POST); wp_safe_redirect(home_url('/registration-success/')); exit; } } else { // Store errors to display to user set_transient('hvac_registration_errors', $errors, 60); wp_safe_redirect(wp_get_referer()); exit; } } } /** * Validate registration form data */ /** * Create HVAC trainer account */ private function create_trainer_account($data) { // Generate username from email $username = sanitize_user(current(explode('@', $data['business_email'])), true); $counter = 1; $original_username = $username; // Ensure username is unique while (username_exists($username)) { $username = $original_username . $counter++; } // Create user $user_id = wp_create_user( $username, $data['user_pass'], $data['business_email'] ); if (is_wp_error($user_id)) { return false; } // Set basic user info wp_update_user([ 'ID' => $user_id, 'first_name' => sanitize_text_field($data['first_name']), 'last_name' => sanitize_text_field($data['last_name']), 'display_name' => sanitize_text_field($data['first_name'] . ' ' . $data['last_name']), 'role' => 'hvac_trainer' ]); // Save custom fields update_user_meta($user_id, 'business_name', sanitize_text_field($data['business_name'])); update_user_meta($user_id, 'business_phone', sanitize_text_field($data['business_phone'])); update_user_meta($user_id, 'business_website', esc_url_raw($data['business_website'])); update_user_meta($user_id, 'user_country', sanitize_text_field($data['user_country'])); update_user_meta($user_id, 'user_state', sanitize_text_field($data['user_state'])); update_user_meta($user_id, 'user_city', sanitize_text_field($data['user_city'])); update_user_meta($user_id, 'user_zip', sanitize_text_field($data['user_zip'])); update_user_meta($user_id, 'business_type', sanitize_text_field($data['business_type'])); update_user_meta($user_id, 'training_audience', array_map('sanitize_text_field', $data['training_audience'])); // Create Events Calendar organizer profile $this->create_organizer_profile($user_id, $data); // Create venue if requested if (isset($data['create_venue']) && $data['create_venue'] === 'Yes') { $this->create_training_venue($user_id, $data); } // TODO: Send admin notification email // TODO: Send welcome email to user return true; } /** * Create a training venue in The Events Calendar */ /** * Create organizer profile in The Events Calendar */ private function create_organizer_profile($user_id, $data) { if (!function_exists('tribe_create_organizer')) { return false; } $organizer_data = array( 'Organizer' => sanitize_text_field($data['business_name']), 'Phone' => sanitize_text_field($data['business_phone']), 'Email' => sanitize_email($data['business_email']), 'Website' => esc_url_raw($data['business_website']), ); $organizer_id = tribe_create_organizer($organizer_data); if ($organizer_id) { // Associate organizer with user update_user_meta($user_id, '_hvac_organizer_id', $organizer_id); return true; } return false; } private function create_training_venue($user_id, $data) { if (!function_exists('tribe_create_venue')) { return false; } $venue_data = array( 'Venue' => sanitize_text_field($data['business_name']), 'Address' => sanitize_text_field($data['user_city']), 'City' => sanitize_text_field($data['user_city']), 'State' => sanitize_text_field($data['user_state']), 'Zip' => sanitize_text_field($data['user_zip']), 'Country' => sanitize_text_field($data['user_country']), 'ShowMap' => true, 'ShowMapLink' => true ); $venue_id = tribe_create_venue($venue_data); if ($venue_id) { // Associate venue with user update_user_meta($user_id, '_hvac_training_venue_id', $venue_id); return true; } return false; } /** * Send admin notification about new trainer registration */ private function send_registration_notification($user_id, $data) { $options = get_option('hvac_ce_options'); $emails = isset($options['notification_emails']) ? array_map('trim', explode(',', $options['notification_emails'])) : array(get_option('admin_email')); if (empty($emails)) { return false; } $user = get_userdata($user_id); $subject = sprintf(__('New HVAC Trainer Registration: %s', 'hvac-ce'), $user->display_name); $message = __('A new HVAC trainer has registered:', 'hvac-ce') . "\n\n"; $message .= __('Name:', 'hvac-ce') . ' ' . $user->first_name . ' ' . $user->last_name . "\n"; $message .= __('Email:', 'hvac-ce') . ' ' . $user->user_email . "\n"; $message .= __('Business:', 'hvac-ce') . ' ' . get_user_meta($user_id, 'business_name', true) . "\n"; $message .= __('Phone:', 'hvac-ce') . ' ' . get_user_meta($user_id, 'business_phone', true) . "\n"; $message .= __('Location:', 'hvac-ce') . ' ' . get_user_meta($user_id, 'user_city', true) . ', ' . get_user_meta($user_id, 'user_state', true) . "\n\n"; $message .= __('Business Type:', 'hvac-ce') . ' ' . get_user_meta($user_id, 'business_type', true) . "\n"; $message .= __('Training Audience:', 'hvac-ce') . ' ' . implode(', ', get_user_meta($user_id, 'training_audience', true)) . "\n\n"; $message .= __('View profile:', 'hvac-ce') . ' ' . admin_url('user-edit.php?user_id=' . $user_id); foreach ($emails as $email) { if (is_email($email)) { wp_mail($email, $subject, $message); } } return true; } public function validate_registration($data) { // Changed visibility to public $errors = array(); // Required field validation $required = array( 'first_name', 'last_name', 'business_name', 'business_phone', 'business_email', 'user_country', 'user_state', 'user_city', 'user_zip', 'business_type' ); foreach ($required as $field) { if (empty($data[$field])) { $errors[$field] = 'This field is required'; } } // Email validation if (!is_email($data['business_email'])) { $errors['business_email'] = 'Please enter a valid email address'; } // Password validation if (empty($data['user_pass']) || strlen($data['user_pass']) < 8 || !preg_match('/[A-Z]/', $data['user_pass']) || !preg_match('/[a-z]/', $data['user_pass']) || !preg_match('/[0-9]/', $data['user_pass'])) { $errors['user_pass'] = 'Password must be at least 8 characters with uppercase, lowercase and numbers'; } // URL validation if (!empty($data['business_website']) && !filter_var($data['business_website'], FILTER_VALIDATE_URL)) { $errors['business_website'] = 'Please enter a valid website URL'; } return $errors; } }