';
foreach ($errors as $error) {
echo '
'.$error.'
';
}
echo '';
delete_transient('hvac_registration_errors');
}
// Form HTML will be generated here
?>
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;
}
}