admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('hvac_profile_nonce')
));
// Enqueue media uploader for profile photo
if (is_page('trainer/profile/edit')) {
wp_enqueue_media();
}
}
}
/**
* Render profile view
*/
public function render_profile_view() {
if (!is_user_logged_in()) {
return '
You must be logged in to view this page.
';
}
// Allow trainers, master trainers, or WordPress admins
if (!current_user_can('hvac_trainer') && !current_user_can('hvac_master_trainer') && !current_user_can('manage_options')) {
return 'You must be a trainer to view this page.
';
}
$user_id = get_current_user_id();
$user = get_userdata($user_id);
// Get user meta
$phone = get_user_meta($user_id, 'user_phone', true);
$city = get_user_meta($user_id, 'user_city', true);
$state = get_user_meta($user_id, 'user_state', true);
$country = get_user_meta($user_id, 'user_country', true);
$linkedin = get_user_meta($user_id, 'user_linkedin', true);
$certifications = get_user_meta($user_id, 'trainer_certifications', true);
$years_experience = get_user_meta($user_id, 'years_experience', true);
$profile_photo_id = get_user_meta($user_id, 'profile_photo_id', true);
$application_details = get_user_meta($user_id, 'application_details', true);
$role = get_user_meta($user_id, 'role', true);
$website = $user->user_url;
// Get certification fields
$date_certified = get_user_meta($user_id, 'date_certified', true);
$certification_type = get_user_meta($user_id, 'certification_type', true);
$certification_status = get_user_meta($user_id, 'certification_status', true);
// Get organization info
$organizer_id = get_user_meta($user_id, 'organizer_id', true);
$organization = null;
if ($organizer_id) {
$organization = get_post($organizer_id);
}
ob_start();
?>
render_breadcrumbs();
}
?>
Certification Information
Certification Status:
Certification Type:
Date Certified:
Personal Information
Name:
first_name . ' ' . $user->last_name); ?>
Email:
user_email); ?>
Role:
Phone:
Location:
Application Details:
description)): ?>
Training Organization
Organization:
post_title); ?>
Headquarters:
You must be logged in to view this page.';
}
// Allow trainers, master trainers, or WordPress admins
if (!current_user_can('hvac_trainer') && !current_user_can('hvac_master_trainer') && !current_user_can('manage_options')) {
return 'You must be a trainer to view this page.
';
}
$user_id = get_current_user_id();
$user = get_userdata($user_id);
// Get user meta
$phone = get_user_meta($user_id, 'user_phone', true);
$city = get_user_meta($user_id, 'user_city', true);
$state = get_user_meta($user_id, 'user_state', true);
$country = get_user_meta($user_id, 'user_country', true);
$linkedin = get_user_meta($user_id, 'user_linkedin', true);
$website = $user->user_url;
$certifications = get_user_meta($user_id, 'trainer_certifications', true);
$years_experience = get_user_meta($user_id, 'years_experience', true);
$profile_photo_id = get_user_meta($user_id, 'profile_photo_id', true);
$application_details = get_user_meta($user_id, 'application_details', true);
$role = get_user_meta($user_id, 'role', true);
// Get certification fields
$date_certified = get_user_meta($user_id, 'date_certified', true);
$certification_type = get_user_meta($user_id, 'certification_type', true);
$certification_status = get_user_meta($user_id, 'certification_status', true);
// Check if current user can edit certification fields
$current_user_id = get_current_user_id();
$can_edit_certifications = current_user_can('administrator') || current_user_can('hvac_master_trainer');
ob_start();
?>
render_breadcrumbs();
}
?>
$user_id,
'first_name' => sanitize_text_field($_POST['first_name']),
'last_name' => sanitize_text_field($_POST['last_name']),
'display_name' => sanitize_text_field($_POST['display_name']),
'user_email' => sanitize_email($_POST['email']),
'user_url' => esc_url_raw($_POST['website']),
'description' => wp_kses_post($_POST['description'])
);
$result = wp_update_user($user_data);
if (is_wp_error($result)) {
wp_send_json_error($result->get_error_message());
}
// Update user meta
update_user_meta($user_id, 'user_phone', sanitize_text_field($_POST['phone']));
update_user_meta($user_id, 'user_city', sanitize_text_field($_POST['city']));
update_user_meta($user_id, 'user_state', sanitize_text_field($_POST['state']));
update_user_meta($user_id, 'user_country', sanitize_text_field($_POST['country']));
update_user_meta($user_id, 'user_linkedin', esc_url_raw($_POST['linkedin']));
update_user_meta($user_id, 'years_experience', intval($_POST['years_experience']));
update_user_meta($user_id, 'trainer_certifications', sanitize_textarea_field($_POST['certifications']));
update_user_meta($user_id, 'application_details', sanitize_textarea_field($_POST['application_details']));
update_user_meta($user_id, 'role', sanitize_text_field($_POST['role']));
// Update certification fields (only if user has permission)
if (current_user_can('administrator') || current_user_can('hvac_master_trainer')) {
update_user_meta($user_id, 'date_certified', sanitize_text_field($_POST['date_certified']));
update_user_meta($user_id, 'certification_type', sanitize_text_field($_POST['certification_type']));
update_user_meta($user_id, 'certification_status', sanitize_text_field($_POST['certification_status']));
}
// Update profile photo if changed
if (isset($_POST['profile_photo_id'])) {
update_user_meta($user_id, 'profile_photo_id', intval($_POST['profile_photo_id']));
}
wp_send_json_success('Profile updated successfully.');
}
/**
* AJAX handler for uploading profile photo
*/
public function ajax_upload_profile_photo() {
check_ajax_referer('hvac_profile_nonce', 'nonce');
if (!current_user_can('hvac_trainer') && !current_user_can('hvac_master_trainer') && !current_user_can('manage_options')) {
wp_send_json_error('Unauthorized');
}
if (!isset($_FILES['profile_photo'])) {
wp_send_json_error('No file uploaded');
}
require_once(ABSPATH . 'wp-admin/includes/image.php');
require_once(ABSPATH . 'wp-admin/includes/file.php');
require_once(ABSPATH . 'wp-admin/includes/media.php');
$attachment_id = media_handle_upload('profile_photo', 0);
if (is_wp_error($attachment_id)) {
wp_send_json_error($attachment_id->get_error_message());
}
// Update user meta
update_user_meta(get_current_user_id(), 'profile_photo_id', $attachment_id);
wp_send_json_success(array(
'attachment_id' => $attachment_id,
'url' => wp_get_attachment_image_url($attachment_id, 'thumbnail')
));
}
/**
* Get trainer event count
*/
private function get_trainer_event_count($user_id) {
$post_type = class_exists('Tribe__Events__Main') ? Tribe__Events__Main::POSTTYPE : 'tribe_events';
$count = count_user_posts($user_id, $post_type);
return $count;
}
/**
* Get trainer student count
*/
private function get_trainer_student_count($user_id) {
global $wpdb;
// Get all events by this trainer
$post_type = class_exists('Tribe__Events__Main') ? Tribe__Events__Main::POSTTYPE : 'tribe_events';
$events = get_posts(array(
'post_type' => $post_type,
'author' => $user_id,
'posts_per_page' => -1,
'fields' => 'ids'
));
if (empty($events)) {
return 0;
}
// Count attendees across all events
$attendee_count = 0;
foreach ($events as $event_id) {
$attendees = get_post_meta($event_id, '_tribe_tickets_attendees', true);
if (is_array($attendees)) {
$attendee_count += count($attendees);
}
}
return $attendee_count;
}
}