admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('hvac_venues_nonce')
));
}
}
/**
* Render venues list
*/
public function render_venues_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_venues_table(); ?>
class_exists('Tribe__Events__Main') ? Tribe__Events__Main::VENUE_POST_TYPE : 'tribe_venue',
'posts_per_page' => $per_page,
'offset' => $offset,
'orderby' => 'title',
'order' => 'ASC',
'post_status' => 'publish'
);
// Filter handling
if (!empty($_GET['search'])) {
$query_args['s'] = sanitize_text_field($_GET['search']);
}
if (!empty($_GET['state'])) {
$query_args['meta_query'] = array(
array(
'key' => '_VenueStateProvince',
'value' => sanitize_text_field($_GET['state']),
'compare' => '='
)
);
}
// Get venues
$venues_query = new WP_Query($query_args);
// Get total count for pagination
$total_venues = $venues_query->found_posts;
$total_pages = ceil($total_venues / $per_page);
?>
| Venue Name |
Address |
City |
State |
Phone |
Actions |
have_posts()) {
while ($venues_query->have_posts()) {
$venues_query->the_post();
$venue_id = get_the_ID();
$is_author = (get_post_field('post_author', $venue_id) == $current_user_id);
// Get venue meta
$address = get_post_meta($venue_id, '_VenueAddress', true);
$city = get_post_meta($venue_id, '_VenueCity', true);
$state = get_post_meta($venue_id, '_VenueStateProvince', true);
$phone = get_post_meta($venue_id, '_VenuePhone', true);
?>
|
Your Venue
|
|
|
|
|
Edit
View Only
|
| No venues 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.
';
}
$venue_id = isset($_GET['venue_id']) ? intval($_GET['venue_id']) : 0;
$venue = null;
if ($venue_id) {
$venue = get_post($venue_id);
// Check if user can edit this venue
if (!$venue || $venue->post_author != get_current_user_id()) {
return 'You do not have permission to edit this venue.
';
}
}
ob_start();
?>
render_breadcrumbs();
}
?>
post_author != get_current_user_id()) {
wp_send_json_error('You do not have permission to edit this venue.');
}
}
// Prepare venue data
$venue_data = array(
'Venue' => sanitize_text_field($_POST['venue_name']),
'Description' => wp_kses_post($_POST['venue_description']),
'Address' => sanitize_text_field($_POST['venue_address']),
'City' => sanitize_text_field($_POST['venue_city']),
'StateProvince' => sanitize_text_field($_POST['venue_state']),
'State' => sanitize_text_field($_POST['venue_state']),
'Province' => sanitize_text_field($_POST['venue_state']),
'Zip' => sanitize_text_field($_POST['venue_zip']),
'Country' => sanitize_text_field($_POST['venue_country']),
'Phone' => sanitize_text_field($_POST['venue_phone']),
'URL' => esc_url_raw($_POST['venue_website']),
'ShowMap' => true,
'ShowMapLink' => true
);
if ($venue_id) {
$venue_data['ID'] = $venue_id;
$result = function_exists('tribe_update_venue') ?
tribe_update_venue($venue_id, $venue_data) :
wp_update_post($venue_data);
} else {
$venue_data['post_status'] = 'publish';
$venue_data['post_author'] = get_current_user_id();
$result = function_exists('tribe_create_venue') ?
tribe_create_venue($venue_data) :
wp_insert_post($venue_data);
}
if (is_wp_error($result)) {
wp_send_json_error($result->get_error_message());
} else {
wp_send_json_success(array(
'message' => $venue_id ? 'Venue updated successfully.' : 'Venue created successfully.',
'venue_id' => $result
));
}
}
/**
* AJAX handler for deleting venue
*/
public function ajax_delete_venue() {
check_ajax_referer('hvac_venues_nonce', 'nonce');
if (!current_user_can('hvac_trainer') && !current_user_can('hvac_master_trainer') && !current_user_can('manage_options')) {
wp_send_json_error('Unauthorized');
}
$venue_id = isset($_POST['venue_id']) ? intval($_POST['venue_id']) : 0;
if (!$venue_id) {
wp_send_json_error('Invalid venue ID');
}
$venue = get_post($venue_id);
if (!$venue || $venue->post_author != get_current_user_id()) {
wp_send_json_error('You do not have permission to delete this venue.');
}
// Check if venue is being used by any events
$events_using_venue = get_posts(array(
'post_type' => class_exists('Tribe__Events__Main') ? Tribe__Events__Main::POSTTYPE : 'tribe_events',
'meta_query' => array(
array(
'key' => '_EventVenueID',
'value' => $venue_id,
'compare' => '='
)
),
'posts_per_page' => 1
));
if (!empty($events_using_venue)) {
wp_send_json_error('Cannot delete venue. It is being used by one or more events.');
}
$result = wp_trash_post($venue_id);
if ($result) {
wp_send_json_success('Venue deleted successfully.');
} else {
wp_send_json_error('Failed to delete venue.');
}
}
/**
* AJAX handler for loading venue data
*/
public function ajax_load_venue() {
check_ajax_referer('hvac_venues_nonce', 'nonce');
if (!current_user_can('hvac_trainer') && !current_user_can('hvac_master_trainer') && !current_user_can('manage_options')) {
wp_send_json_error('Unauthorized');
}
$venue_id = isset($_GET['venue_id']) ? intval($_GET['venue_id']) : 0;
if (!$venue_id) {
wp_send_json_error('Invalid venue ID');
}
$venue = get_post($venue_id);
if (!$venue) {
wp_send_json_error('Venue not found');
}
$venue_data = array(
'id' => $venue_id,
'name' => $venue->post_title,
'description' => $venue->post_content,
'address' => get_post_meta($venue_id, '_VenueAddress', true),
'city' => get_post_meta($venue_id, '_VenueCity', true),
'state' => get_post_meta($venue_id, '_VenueStateProvince', true),
'zip' => get_post_meta($venue_id, '_VenueZip', true),
'country' => get_post_meta($venue_id, '_VenueCountry', true),
'phone' => get_post_meta($venue_id, '_VenuePhone', true),
'website' => get_post_meta($venue_id, '_VenueURL', true)
);
wp_send_json_success($venue_data);
}
}