- Strip WordPress block editor comments (<\!-- wp:shortcode -->) from content - Prevent duplicate header rendering when using page template vs shortcode - Add conditional header rendering based on URL path to avoid duplication - Header now only renders for non-hierarchical URLs where template isn't used The manage event page was showing duplicate "Create and Manage Your HVAC Training Events" sections and raw block editor comments because both the template and the header class were outputting content, and block editor wrapper comments weren't being stripped. Co-Authored-By: Ben Reed <ben@tealmaker.com>
422 lines
No EOL
12 KiB
PHP
422 lines
No EOL
12 KiB
PHP
<?php
|
|
/**
|
|
* HVAC Scripts and Styles Manager
|
|
*
|
|
* Centralized management of all plugin scripts and styles
|
|
*
|
|
* @package HVAC_Community_Events
|
|
* @since 2.0.0
|
|
*/
|
|
|
|
if (!defined('ABSPATH')) {
|
|
exit;
|
|
}
|
|
|
|
/**
|
|
* HVAC_Scripts_Styles class
|
|
*/
|
|
class HVAC_Scripts_Styles {
|
|
|
|
/**
|
|
* Instance
|
|
*
|
|
* @var HVAC_Scripts_Styles
|
|
*/
|
|
private static $instance = null;
|
|
|
|
/**
|
|
* Script version for cache busting
|
|
*
|
|
* @var string
|
|
*/
|
|
private $version;
|
|
|
|
/**
|
|
* Get instance
|
|
*
|
|
* @return HVAC_Scripts_Styles
|
|
*/
|
|
public static function instance() {
|
|
if (null === self::$instance) {
|
|
self::$instance = new self();
|
|
}
|
|
return self::$instance;
|
|
}
|
|
|
|
/**
|
|
* Constructor
|
|
*/
|
|
private function __construct() {
|
|
$this->version = HVAC_PLUGIN_VERSION;
|
|
$this->init_hooks();
|
|
}
|
|
|
|
/**
|
|
* Initialize hooks
|
|
*
|
|
* @return void
|
|
*/
|
|
private function init_hooks() {
|
|
// Frontend scripts and styles
|
|
add_action('wp_enqueue_scripts', array($this, 'enqueue_frontend_assets'));
|
|
|
|
// Admin scripts and styles
|
|
add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_assets'));
|
|
|
|
// Login page scripts and styles
|
|
add_action('login_enqueue_scripts', array($this, 'enqueue_login_assets'));
|
|
}
|
|
|
|
/**
|
|
* Enqueue frontend assets
|
|
*
|
|
* @return void
|
|
*/
|
|
public function enqueue_frontend_assets() {
|
|
// Only enqueue on plugin pages
|
|
if (!$this->is_plugin_page()) {
|
|
return;
|
|
}
|
|
|
|
// Main plugin styles
|
|
wp_enqueue_style(
|
|
'hvac-community-events',
|
|
HVAC_PLUGIN_URL . 'assets/css/hvac-community-events.css',
|
|
array(),
|
|
$this->version
|
|
);
|
|
|
|
// Page templates styles - ensures proper layout for all HVAC pages
|
|
wp_enqueue_style(
|
|
'hvac-page-templates',
|
|
HVAC_PLUGIN_URL . 'assets/css/hvac-page-templates.css',
|
|
array(),
|
|
$this->version
|
|
);
|
|
|
|
// Layout styles - ensure proper container width and padding
|
|
wp_enqueue_style(
|
|
'hvac-layout',
|
|
HVAC_PLUGIN_URL . 'assets/css/hvac-layout.css',
|
|
array('hvac-community-events'),
|
|
$this->version
|
|
);
|
|
|
|
// Dashboard styles
|
|
if ($this->is_dashboard_page()) {
|
|
wp_enqueue_style(
|
|
'hvac-dashboard',
|
|
HVAC_PLUGIN_URL . 'assets/css/hvac-dashboard.css',
|
|
array('hvac-community-events'),
|
|
$this->version
|
|
);
|
|
|
|
wp_enqueue_style(
|
|
'hvac-dashboard-enhanced',
|
|
HVAC_PLUGIN_URL . 'assets/css/hvac-dashboard-enhanced.css',
|
|
array('hvac-dashboard'),
|
|
$this->version
|
|
);
|
|
}
|
|
|
|
// Registration styles
|
|
if ($this->is_registration_page()) {
|
|
wp_enqueue_style(
|
|
'hvac-registration',
|
|
HVAC_PLUGIN_URL . 'assets/css/hvac-registration.css',
|
|
array('hvac-community-events'),
|
|
$this->version
|
|
);
|
|
}
|
|
|
|
// Communication templates styles
|
|
if ($this->is_communication_page()) {
|
|
wp_enqueue_style(
|
|
'communication-templates',
|
|
HVAC_PLUGIN_URL . 'assets/css/communication-templates.css',
|
|
array('hvac-community-events'),
|
|
$this->version
|
|
);
|
|
}
|
|
|
|
// Main plugin scripts
|
|
wp_enqueue_script(
|
|
'hvac-community-events',
|
|
HVAC_PLUGIN_URL . 'assets/js/hvac-community-events.js',
|
|
array('jquery'),
|
|
$this->version,
|
|
true
|
|
);
|
|
|
|
// Dashboard scripts
|
|
if ($this->is_dashboard_page()) {
|
|
wp_enqueue_script(
|
|
'hvac-dashboard',
|
|
HVAC_PLUGIN_URL . 'assets/js/hvac-dashboard.js',
|
|
array('jquery', 'hvac-community-events'),
|
|
$this->version,
|
|
true
|
|
);
|
|
|
|
wp_enqueue_script(
|
|
'hvac-dashboard-enhanced',
|
|
HVAC_PLUGIN_URL . 'assets/js/hvac-dashboard-enhanced.js',
|
|
array('hvac-dashboard'),
|
|
$this->version,
|
|
true
|
|
);
|
|
}
|
|
|
|
// Registration scripts
|
|
if ($this->is_registration_page()) {
|
|
wp_enqueue_script(
|
|
'hvac-registration',
|
|
HVAC_PLUGIN_URL . 'assets/js/hvac-registration.js',
|
|
array('jquery', 'hvac-community-events'),
|
|
$this->version,
|
|
true
|
|
);
|
|
}
|
|
|
|
// Help system scripts
|
|
wp_enqueue_script(
|
|
'hvac-help-system',
|
|
HVAC_PLUGIN_URL . 'assets/js/hvac-help-system.js',
|
|
array('jquery'),
|
|
$this->version,
|
|
true
|
|
);
|
|
|
|
// Localize main script
|
|
wp_localize_script('hvac-community-events', 'hvac_ajax', array(
|
|
'ajax_url' => admin_url('admin-ajax.php'),
|
|
'nonce' => wp_create_nonce('hvac_ajax_nonce'),
|
|
'is_logged_in' => is_user_logged_in(),
|
|
'plugin_url' => HVAC_PLUGIN_URL,
|
|
));
|
|
|
|
// Localize dashboard script
|
|
if ($this->is_dashboard_page()) {
|
|
wp_localize_script('hvac-dashboard', 'hvac_dashboard', array(
|
|
'ajax_url' => admin_url('admin-ajax.php'),
|
|
'nonce' => wp_create_nonce('hvac_dashboard_nonce'),
|
|
'strings' => array(
|
|
'loading' => __('Loading...', 'hvac-community-events'),
|
|
'error' => __('An error occurred. Please try again.', 'hvac-community-events'),
|
|
),
|
|
));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Enqueue admin assets
|
|
*
|
|
* @param string $hook Current admin page hook
|
|
* @return void
|
|
*/
|
|
public function enqueue_admin_assets($hook) {
|
|
// Global admin styles
|
|
wp_enqueue_style(
|
|
'hvac-admin',
|
|
HVAC_PLUGIN_URL . 'assets/css/hvac-admin.css',
|
|
array(),
|
|
$this->version
|
|
);
|
|
|
|
// Global admin scripts
|
|
wp_enqueue_script(
|
|
'hvac-admin',
|
|
HVAC_PLUGIN_URL . 'assets/js/hvac-admin.js',
|
|
array('jquery'),
|
|
$this->version . '.2', // Force cache refresh for jQuery fix
|
|
true
|
|
);
|
|
|
|
// Localize admin script
|
|
wp_localize_script('hvac-admin', 'hvac_admin', array(
|
|
'ajax_url' => admin_url('admin-ajax.php'),
|
|
'nonce' => wp_create_nonce('hvac_admin_nonce'),
|
|
));
|
|
|
|
// Plugin-specific admin pages
|
|
if (strpos($hook, 'hvac-community-events') !== false) {
|
|
// Add any additional plugin-specific admin assets here
|
|
}
|
|
|
|
// Certificate admin scripts
|
|
if (strpos($hook, 'certificate') !== false) {
|
|
wp_enqueue_script(
|
|
'hvac-certificate-admin',
|
|
HVAC_PLUGIN_URL . 'assets/js/hvac-certificate-admin.js',
|
|
array('jquery'),
|
|
$this->version,
|
|
true
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Enqueue login page assets
|
|
*
|
|
* @return void
|
|
*/
|
|
public function enqueue_login_assets() {
|
|
// Check if we're on the custom login page
|
|
if (!$this->is_custom_login_page()) {
|
|
return;
|
|
}
|
|
|
|
wp_enqueue_style(
|
|
'hvac-login',
|
|
HVAC_PLUGIN_URL . 'assets/css/hvac-login.css',
|
|
array(),
|
|
$this->version
|
|
);
|
|
|
|
wp_enqueue_script(
|
|
'hvac-login',
|
|
HVAC_PLUGIN_URL . 'assets/js/hvac-login.js',
|
|
array('jquery'),
|
|
$this->version,
|
|
true
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Check if current page is a plugin page
|
|
*
|
|
* @return bool
|
|
*/
|
|
private function is_plugin_page() {
|
|
// Check using template loader if available
|
|
if (class_exists('HVAC_Template_Loader')) {
|
|
return HVAC_Template_Loader::is_plugin_template();
|
|
}
|
|
|
|
// Fallback: check URL path
|
|
$current_path = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/');
|
|
$plugin_paths = array(
|
|
'trainer',
|
|
'master-trainer',
|
|
'training-login',
|
|
'hvac-dashboard',
|
|
'manage-event',
|
|
'event-summary',
|
|
);
|
|
|
|
foreach ($plugin_paths as $path) {
|
|
if (strpos($current_path, $path) !== false) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Check if current page is a dashboard page
|
|
*
|
|
* @return bool
|
|
*/
|
|
private function is_dashboard_page() {
|
|
// Check by page slug
|
|
$dashboard_pages = array(
|
|
'trainer-dashboard',
|
|
'master-dashboard',
|
|
'hvac-dashboard',
|
|
'trainer/dashboard',
|
|
'master-trainer/dashboard',
|
|
'master-trainer/master-dashboard',
|
|
'trainer/event/manage',
|
|
'manage-event',
|
|
'trainer/certificate-reports',
|
|
'trainer/generate-certificates'
|
|
);
|
|
|
|
foreach ($dashboard_pages as $page_slug) {
|
|
if (is_page($page_slug)) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
// Also check URL path as fallback
|
|
$current_path = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/');
|
|
$dashboard_paths = array(
|
|
'trainer/dashboard',
|
|
'master-trainer/dashboard',
|
|
'master-trainer/master-dashboard',
|
|
'trainer/event/manage',
|
|
'manage-event',
|
|
'trainer/certificate-reports',
|
|
'trainer/generate-certificates'
|
|
);
|
|
|
|
foreach ($dashboard_paths as $path) {
|
|
if (strpos($current_path, $path) !== false) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
// Check if this is a community events submission page
|
|
if (function_exists('tribe_is_community_edit_event_page') && tribe_is_community_edit_event_page()) {
|
|
return true;
|
|
}
|
|
|
|
if (function_exists('tribe_is_community_my_events_page') && tribe_is_community_my_events_page()) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Check if current page is registration page
|
|
*
|
|
* @return bool
|
|
*/
|
|
private function is_registration_page() {
|
|
return is_page('trainer-registration') ||
|
|
is_page('trainer/registration');
|
|
}
|
|
|
|
/**
|
|
* Check if current page is communication page
|
|
*
|
|
* @return bool
|
|
*/
|
|
private function is_communication_page() {
|
|
return is_page('communication-templates') ||
|
|
is_page('trainer/communication-templates') ||
|
|
is_page('communication-schedules') ||
|
|
is_page('trainer/communication-schedules');
|
|
}
|
|
|
|
/**
|
|
* Check if current page is custom login page
|
|
*
|
|
* @return bool
|
|
*/
|
|
private function is_custom_login_page() {
|
|
return is_page('training-login') ||
|
|
is_page('community-login') ||
|
|
is_page('trainer/login');
|
|
}
|
|
|
|
/**
|
|
* Get script version with cache busting
|
|
*
|
|
* @param string $file File path
|
|
* @return string
|
|
*/
|
|
public function get_asset_version($file = '') {
|
|
// In development, use file modification time
|
|
if (defined('WP_DEBUG') && WP_DEBUG && $file) {
|
|
$file_path = HVAC_PLUGIN_DIR . $file;
|
|
if (file_exists($file_path)) {
|
|
return filemtime($file_path);
|
|
}
|
|
}
|
|
|
|
return $this->version;
|
|
}
|
|
} |