admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('hvac_organizers_nonce')
));
// Enqueue media uploader for logo upload
if (is_page('trainer/organizer/manage')) {
wp_enqueue_media();
}
}
}
/**
* Render organizers list
*/
public function render_organizers_list() {
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.
';
}
ob_start();
?>
render_breadcrumbs();
}
?>
render_organizers_table(); ?>
class_exists('Tribe__Events__Main') ? Tribe__Events__Main::ORGANIZER_POST_TYPE : 'tribe_organizer',
'posts_per_page' => $per_page,
'offset' => $offset,
'orderby' => 'title',
'order' => 'ASC',
'post_status' => 'publish',
'author' => $current_user_id // Only show organizers created by this user
);
// Filter handling
if (!empty($_GET['search'])) {
$query_args['s'] = sanitize_text_field($_GET['search']);
}
// Get organizers
$organizers_query = new WP_Query($query_args);
// Get total count for pagination
$total_organizers = $organizers_query->found_posts;
$total_pages = ceil($total_organizers / $per_page);
?>
| Logo |
Organization Name |
Headquarters |
Contact |
Website |
Actions |
have_posts()) {
while ($organizers_query->have_posts()) {
$organizers_query->the_post();
$organizer_id = get_the_ID();
// Get organizer meta
$phone = get_post_meta($organizer_id, '_OrganizerPhone', true);
$email = get_post_meta($organizer_id, '_OrganizerEmail', true);
$website = get_post_meta($organizer_id, '_OrganizerWebsite', true);
// Get headquarters location
$hq_city = get_post_meta($organizer_id, '_hvac_headquarters_city', true);
$hq_state = get_post_meta($organizer_id, '_hvac_headquarters_state', true);
$hq_country = get_post_meta($organizer_id, '_hvac_headquarters_country', true);
$hq_parts = array_filter(array($hq_city, $hq_state, $hq_country));
$headquarters = implode(', ', $hq_parts);
?>
|
|
|
|
|
Visit Website
Not specified
|
Edit
|
| No organizers found. |
1): ?>
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.
';
}
$organizer_id = isset($_GET['organizer_id']) ? intval($_GET['organizer_id']) : 0;
$organizer = null;
if ($organizer_id) {
$organizer = get_post($organizer_id);
// Check if user can edit this organizer
if (!$organizer || $organizer->post_author != get_current_user_id()) {
return 'You do not have permission to edit this organizer.
';
}
}
ob_start();
?>
render_breadcrumbs();
}
?>
post_author != get_current_user_id()) {
wp_send_json_error('You do not have permission to edit this organizer.');
}
}
// Prepare organizer data
$organizer_data = array(
'Organizer' => sanitize_text_field($_POST['org_name']),
'Description' => wp_kses_post($_POST['org_description']),
'Phone' => sanitize_text_field($_POST['org_phone']),
'Email' => sanitize_email($_POST['org_email']),
'Website' => esc_url_raw($_POST['org_website'])
);
if ($organizer_id) {
$organizer_data['ID'] = $organizer_id;
$result = function_exists('tribe_update_organizer') ?
tribe_update_organizer($organizer_id, $organizer_data) :
wp_update_post(array(
'ID' => $organizer_id,
'post_title' => $organizer_data['Organizer'],
'post_content' => $organizer_data['Description']
));
} else {
$organizer_data['post_status'] = 'publish';
$organizer_data['post_author'] = get_current_user_id();
$result = function_exists('tribe_create_organizer') ?
tribe_create_organizer($organizer_data) :
wp_insert_post(array(
'post_type' => 'tribe_organizer',
'post_title' => $organizer_data['Organizer'],
'post_content' => $organizer_data['Description'],
'post_status' => 'publish',
'post_author' => get_current_user_id()
));
}
if (is_wp_error($result)) {
wp_send_json_error($result->get_error_message());
}
// Update custom meta fields
$organizer_id = $organizer_id ?: $result;
update_post_meta($organizer_id, '_hvac_headquarters_city', sanitize_text_field($_POST['hq_city']));
update_post_meta($organizer_id, '_hvac_headquarters_state', sanitize_text_field($_POST['hq_state']));
update_post_meta($organizer_id, '_hvac_headquarters_country', sanitize_text_field($_POST['hq_country']));
// Update phone, email, website meta
update_post_meta($organizer_id, '_OrganizerPhone', sanitize_text_field($_POST['org_phone']));
update_post_meta($organizer_id, '_OrganizerEmail', sanitize_email($_POST['org_email']));
update_post_meta($organizer_id, '_OrganizerWebsite', esc_url_raw($_POST['org_website']));
// Handle logo
if (isset($_POST['org_logo_id'])) {
$logo_id = intval($_POST['org_logo_id']);
if ($logo_id) {
set_post_thumbnail($organizer_id, $logo_id);
} else {
delete_post_thumbnail($organizer_id);
}
}
// Update user's organizer_id if this is their first organizer
$user_organizer_id = get_user_meta(get_current_user_id(), 'organizer_id', true);
if (!$user_organizer_id) {
update_user_meta(get_current_user_id(), 'organizer_id', $organizer_id);
}
wp_send_json_success(array(
'message' => $organizer_id ? 'Organizer updated successfully.' : 'Organizer created successfully.',
'organizer_id' => $organizer_id
));
}
/**
* AJAX handler for deleting organizer
*/
public function ajax_delete_organizer() {
check_ajax_referer('hvac_organizers_nonce', 'nonce');
if (!current_user_can('hvac_trainer') && !current_user_can('hvac_master_trainer') && !current_user_can('manage_options')) {
wp_send_json_error('Unauthorized');
}
$organizer_id = isset($_POST['organizer_id']) ? intval($_POST['organizer_id']) : 0;
if (!$organizer_id) {
wp_send_json_error('Invalid organizer ID');
}
$organizer = get_post($organizer_id);
if (!$organizer || $organizer->post_author != get_current_user_id()) {
wp_send_json_error('You do not have permission to delete this organizer.');
}
// Check if organizer is being used by any events
$events_using_organizer = get_posts(array(
'post_type' => class_exists('Tribe__Events__Main') ? Tribe__Events__Main::POSTTYPE : 'tribe_events',
'meta_query' => array(
array(
'key' => '_EventOrganizerID',
'value' => $organizer_id,
'compare' => '='
)
),
'posts_per_page' => 1
));
if (!empty($events_using_organizer)) {
wp_send_json_error('Cannot delete organizer. It is being used by one or more events.');
}
$result = wp_trash_post($organizer_id);
if ($result) {
// If this was the user's primary organizer, clear it
$user_organizer_id = get_user_meta(get_current_user_id(), 'organizer_id', true);
if ($user_organizer_id == $organizer_id) {
delete_user_meta(get_current_user_id(), 'organizer_id');
}
wp_send_json_success('Organizer deleted successfully.');
} else {
wp_send_json_error('Failed to delete organizer.');
}
}
/**
* AJAX handler for uploading organization logo
*/
public function ajax_upload_org_logo() {
check_ajax_referer('hvac_organizers_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['org_logo'])) {
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('org_logo', 0);
if (is_wp_error($attachment_id)) {
wp_send_json_error($attachment_id->get_error_message());
}
wp_send_json_success(array(
'attachment_id' => $attachment_id,
'url' => wp_get_attachment_image_url($attachment_id, 'medium')
));
}
}