is_safari_browser(); } /** * Get script path based on browser compatibility * Uses centralized browser detection service * * @param string $script_name * @return string */ private function get_compatible_script_path($script_name) { $browser_detection = HVAC_Browser_Detection::instance(); // If Safari and doesn't support ES6, load Safari-compatible version if ($browser_detection->is_safari_browser() && !$browser_detection->safari_supports_es6()) { $safari_script = HVAC_PLUGIN_DIR . 'assets/js/' . $script_name . '-safari-compatible.js'; if (file_exists($safari_script)) { return HVAC_PLUGIN_URL . 'assets/js/' . $script_name . '-safari-compatible.js'; } } // Default to standard version return HVAC_PLUGIN_URL . 'assets/js/' . $script_name . '.js'; } /** * Register menu locations */ public function register_menu_locations() { register_nav_menus(array( 'hvac_trainer_menu' => __('HVAC Trainer Navigation', 'hvac-community-events'), )); } /** * Setup trainer menu on appropriate pages */ public function setup_trainer_menu() { // Menu will be rendered directly in templates, not injected via JavaScript } /** * Check if current page is a trainer page */ private function is_trainer_page() { global $wp; $current_url = home_url(add_query_arg(array(), $wp->request)); return (strpos($current_url, '/trainer/') !== false || strpos($current_url, '/master-trainer/') !== false); } /** * Check if user can access trainer area */ private function user_can_access_trainer_area() { if (!is_user_logged_in()) { return false; } return current_user_can('hvac_trainer') || current_user_can('hvac_master_trainer') || current_user_can('manage_options'); } /** * Render the trainer menu */ public function render_trainer_menu() { if (!$this->user_can_access_trainer_area()) { return; } // Check if we're already showing a navigation menu if (defined('HVAC_NAV_RENDERED') && HVAC_NAV_RENDERED) { return; } // Mark that navigation has been rendered define('HVAC_NAV_RENDERED', true); $menu_items = $this->get_menu_structure(); echo '
'; } /** * Get menu structure based on user capabilities */ private function get_menu_structure() { $user = wp_get_current_user(); $is_master = in_array('hvac_master_trainer', $user->roles) || current_user_can('manage_options'); $menu = array(); // Add Master Dashboard conditionally (only if user has master trainer role) if ($is_master) { $menu[] = array( 'title' => 'Master Dashboard', 'url' => home_url('/master-trainer/master-dashboard/'), 'icon' => 'dashicons-star-filled' ); } // Events section $menu[] = array( 'title' => 'Events', 'url' => '#', 'icon' => 'dashicons-calendar-alt', 'children' => array( array( 'title' => 'Dashboard', 'url' => home_url('/trainer/dashboard/'), 'icon' => 'dashicons-dashboard' ), array( 'title' => 'New Event', 'url' => home_url('/trainer/event/manage/'), 'icon' => 'dashicons-plus-alt' ) ) ); // Certificates section $menu[] = array( 'title' => 'Certificates', 'url' => '#', 'icon' => 'dashicons-awards', 'children' => array( array( 'title' => 'Reports', 'url' => home_url('/trainer/certificate-reports/'), 'icon' => 'dashicons-analytics' ), array( 'title' => 'New Certificate', 'url' => home_url('/trainer/generate-certificates/'), 'icon' => 'dashicons-plus-alt' ) ) ); // Profile section (previously Customize) $menu[] = array( 'title' => 'Profile', 'url' => '#', 'icon' => 'dashicons-admin-users', 'children' => array( array( 'title' => 'Trainer Profile', 'url' => home_url('/trainer/profile/'), 'icon' => 'dashicons-admin-users' ), array( 'title' => 'Training Leads', 'url' => home_url('/trainer/training-leads/'), 'icon' => 'dashicons-email-alt' ), array( 'title' => 'Training Organizers', 'url' => home_url('/trainer/organizer/list/'), 'icon' => 'dashicons-groups', 'children' => array( array( 'title' => 'Add New Organizer', 'url' => home_url('/trainer/organizer/manage/'), 'icon' => 'dashicons-plus-alt' ) ) ), array( 'title' => 'Training Venues', 'url' => home_url('/trainer/venue/list/'), 'icon' => 'dashicons-location-alt', 'children' => array( array( 'title' => 'Add New Venue', 'url' => home_url('/trainer/venue/manage/'), 'icon' => 'dashicons-plus-alt' ) ) ), array( 'title' => 'Logout', 'url' => wp_logout_url(home_url('/training-login/')), 'icon' => 'dashicons-exit' ) ) ); // Help section (moved to end, with question mark icon) $menu[] = array( 'title' => '?', 'url' => home_url('/trainer/documentation/'), 'icon' => 'dashicons-editor-help', 'class' => 'hvac-help-menu-item' ); return $menu; } /** * Render individual menu item */ private function render_menu_item($item, $level = 0) { $has_children = !empty($item['children']); $icon = !empty($item['icon']) ? '' : ''; $classes = array('menu-item'); if ($has_children) { $classes[] = 'has-children'; } if ($level > 0) { $classes[] = 'sub-menu-item'; $classes[] = 'level-' . $level; } // Add custom class if specified if (!empty($item['class'])) { $classes[] = esc_attr($item['class']); } echo '