- Add responsive button styles with mobile optimization - Implement accessibility focus styles and keyboard navigation support - Create animation system for smoother interactive elements - Add mobile navigation menu for dashboard and main pages - Include print stylesheet for better printable event summaries - Optimize all UI components for better usability and consistency 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
361 lines
13 KiB
PHP
361 lines
13 KiB
PHP
<?php
|
|
/**
|
|
* Plugin Name: HVAC Community Events
|
|
* Plugin URI: https://upskillhvac.com
|
|
* Description: Custom plugin for HVAC trainer event management system
|
|
* Version: 1.0.0
|
|
* Author: Upskill HVAC
|
|
* Author URI: https://upskillhvac.com
|
|
* License: GPL-2.0+
|
|
* License URI: http://www.gnu.org/licenses/gpl-2.0.txt
|
|
* Text Domain: hvac-community-events
|
|
*/
|
|
|
|
// Exit if accessed directly
|
|
if (!defined('ABSPATH')) {
|
|
exit;
|
|
}
|
|
|
|
// Define plugin constants
|
|
define('HVAC_CE_VERSION', '1.0.0');
|
|
define('HVAC_CE_PLUGIN_DIR', plugin_dir_path(__FILE__));
|
|
define('HVAC_CE_PLUGIN_URL', plugin_dir_url(__FILE__));
|
|
|
|
// Include the logger class early
|
|
require_once HVAC_CE_PLUGIN_DIR . 'includes/class-hvac-logger.php';
|
|
|
|
|
|
/**
|
|
* Create required pages and roles upon plugin activation.
|
|
*/
|
|
function hvac_ce_create_required_pages() {
|
|
|
|
// Ensure the roles class is available
|
|
require_once HVAC_CE_PLUGIN_DIR . 'includes/class-hvac-roles.php';
|
|
HVAC_Logger::info('Starting page creation process', 'Activation');
|
|
$required_pages = [
|
|
'community-login' => [
|
|
'title' => 'Trainer Login',
|
|
'content' => '<!-- wp:shortcode -->[hvac_community_login]<!-- /wp:shortcode -->',
|
|
'template' => 'page-community-login.php',
|
|
],
|
|
'trainer-registration' => [
|
|
'title' => 'Trainer Registration',
|
|
'content' => '<!-- wp:shortcode -->[hvac_trainer_registration]<!-- /wp:shortcode -->',
|
|
],
|
|
'hvac-dashboard' => [
|
|
'title' => 'Trainer Dashboard',
|
|
'content' => '<!-- wp:shortcode -->[hvac_trainer_dashboard]<!-- /wp:shortcode -->',
|
|
],
|
|
'manage-event' => [ // New page for TEC CE submission form shortcode
|
|
'title' => 'Manage Event',
|
|
'content' => '<!-- wp:shortcode -->[tribe_community_events view="submission_form"]<!-- /wp:shortcode -->',
|
|
],
|
|
'my-events' => [ // New page for TEC CE event list shortcode
|
|
'title' => 'My Events',
|
|
'content' => '<!-- wp:shortcode -->[tribe_community_events view="my_events"]<!-- /wp:shortcode -->',
|
|
],
|
|
'trainer-profile' => [ // Add trainer profile page
|
|
'title' => 'Trainer Profile',
|
|
'content' => '<!-- wp:shortcode -->[hvac_trainer_profile]<!-- /wp:shortcode -->',
|
|
],
|
|
'event-summary' => [ // Add event summary page
|
|
'title' => 'Event Summary',
|
|
'content' => '<!-- wp:shortcode -->[hvac_event_summary]<!-- /wp:shortcode -->',
|
|
],
|
|
'email-attendees' => [ // Add email attendees page
|
|
'title' => 'Email Attendees',
|
|
'content' => '<!-- wp:shortcode -->[hvac_email_attendees]<!-- /wp:shortcode -->',
|
|
],
|
|
// REMOVED: 'submit-event' page creation. Will link to default TEC CE page.
|
|
// 'submit-event' => [
|
|
// 'title' => 'Submit Event',
|
|
// 'content' => '<!-- wp:shortcode -->[hvac_event_form]<!-- /wp:shortcode -->',
|
|
// ],
|
|
// Add future required pages here
|
|
];
|
|
|
|
$created_pages_option = 'hvac_community_pages';
|
|
$created_pages = get_option($created_pages_option, []);
|
|
|
|
foreach ($required_pages as $slug => $page_data) {
|
|
// Check if page already exists (by slug)
|
|
$existing_page = get_page_by_path($slug, OBJECT, 'page');
|
|
|
|
// Log what we're getting back for debugging
|
|
HVAC_Logger::info("Checking for page with slug '{$slug}'. Result type: " . gettype($existing_page), 'Activation');
|
|
|
|
if (!$existing_page) {
|
|
HVAC_Logger::info("Page with slug '{$slug}' not found. Attempting to create.", 'Activation');
|
|
// Page does not exist, create it
|
|
$post_data = [
|
|
'post_title' => $page_data['title'],
|
|
'post_name' => $slug,
|
|
'post_content' => $page_data['content'],
|
|
'post_status' => 'publish',
|
|
'post_type' => 'page',
|
|
'comment_status' => 'closed',
|
|
'ping_status' => 'closed',
|
|
];
|
|
|
|
// Check if we should use a specific template
|
|
if (!empty($page_data['template'])) {
|
|
$post_data['page_template'] = $page_data['template'];
|
|
}
|
|
|
|
$page_id = wp_insert_post($post_data);
|
|
|
|
// Log the result of wp_insert_post
|
|
if (is_wp_error($page_id)) {
|
|
HVAC_Logger::error("Error creating page '{$slug}': " . $page_id->get_error_message(), 'Activation');
|
|
} else {
|
|
HVAC_Logger::info("Successfully created page '{$slug}' with ID: {$page_id}.", 'Activation');
|
|
}
|
|
|
|
// Store the created page ID - Rewritten to avoid tool issue with &&
|
|
if ($page_id) { // Check if page_id is truthy (non-zero, non-null, etc.)
|
|
if (!is_wp_error($page_id)) { // Then check if it's not a WP_Error object
|
|
// Use a key based on the slug or feature name for clarity
|
|
$feature_key = str_replace('-', '_', $slug);
|
|
$created_pages[$feature_key] = $page_id;
|
|
}
|
|
}
|
|
} else {
|
|
// Ensure existing pages are also recorded in the option if not already
|
|
$feature_key = str_replace('-', '_', $slug);
|
|
|
|
// Check if the existing page is an object and has an ID property
|
|
if (!isset($created_pages[$feature_key])) {
|
|
if (is_object($existing_page) && isset($existing_page->ID)) {
|
|
$created_pages[$feature_key] = $existing_page->ID;
|
|
HVAC_Logger::info("Page '{$slug}' exists. Recording ID: {$existing_page->ID}", 'Activation');
|
|
} else {
|
|
// If existing_page is not valid, log it but don't cause an error
|
|
HVAC_Logger::warning("Page '{$slug}' exists but could not retrieve ID properly.", 'Activation');
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Update the option with any newly created page IDs (and existing ones)
|
|
update_option($created_pages_option, $created_pages);
|
|
|
|
// Create the custom role (Moved inside the activation function)
|
|
$roles_manager = new HVAC_Roles();
|
|
$result = $roles_manager->create_trainer_role();
|
|
if ($result) {
|
|
HVAC_Logger::info('Successfully created hvac_trainer role.', 'Activation');
|
|
} else {
|
|
HVAC_Logger::error('Failed to create hvac_trainer role.', 'Activation');
|
|
}
|
|
HVAC_Logger::info('Completed page creation and role setup process', 'Activation');
|
|
|
|
} // <<-- Brace moved here
|
|
register_activation_hook(__FILE__, 'hvac_ce_create_required_pages');
|
|
|
|
|
|
/**
|
|
* Remove custom roles upon plugin deactivation.
|
|
*/
|
|
function hvac_ce_remove_roles() {
|
|
require_once HVAC_CE_PLUGIN_DIR . 'includes/class-hvac-roles.php';
|
|
$roles_manager = new HVAC_Roles();
|
|
$roles_manager->remove_trainer_role();
|
|
HVAC_Logger::info('Deactivation hook fired, attempted to remove hvac_trainer role.', 'Deactivation');
|
|
}
|
|
register_deactivation_hook(__FILE__, 'hvac_ce_remove_roles');
|
|
|
|
|
|
|
|
/**
|
|
* Enqueue common styles and scripts for all HVAC Community Events pages
|
|
*/
|
|
function hvac_ce_enqueue_common_assets() {
|
|
// Enqueue the common CSS file for all pages
|
|
wp_enqueue_style(
|
|
'hvac-common-style',
|
|
HVAC_CE_PLUGIN_URL . 'assets/css/hvac-common.css',
|
|
[], // No dependencies
|
|
HVAC_CE_VERSION
|
|
);
|
|
|
|
// Enqueue animations CSS file
|
|
wp_enqueue_style(
|
|
'hvac-animations',
|
|
HVAC_CE_PLUGIN_URL . 'assets/css/hvac-animations.css',
|
|
['hvac-common-style'], // Depends on common styles
|
|
HVAC_CE_VERSION
|
|
);
|
|
|
|
// Enqueue mobile navigation CSS file
|
|
wp_enqueue_style(
|
|
'hvac-mobile-nav',
|
|
HVAC_CE_PLUGIN_URL . 'assets/css/hvac-mobile-nav.css',
|
|
['hvac-common-style'], // Depends on common styles
|
|
HVAC_CE_VERSION
|
|
);
|
|
|
|
// Enqueue print stylesheet
|
|
wp_enqueue_style(
|
|
'hvac-print-style',
|
|
HVAC_CE_PLUGIN_URL . 'assets/css/hvac-print.css',
|
|
['hvac-common-style'], // Depends on common styles
|
|
HVAC_CE_VERSION,
|
|
'print' // Print media only
|
|
);
|
|
|
|
// Enqueue the accessibility helper JS for all pages
|
|
wp_enqueue_script(
|
|
'hvac-accessibility-js',
|
|
HVAC_CE_PLUGIN_URL . 'assets/js/hvac-accessibility.js',
|
|
[], // No dependencies
|
|
HVAC_CE_VERSION,
|
|
true // Load in footer
|
|
);
|
|
|
|
// Enqueue animations JS for all pages
|
|
wp_enqueue_script(
|
|
'hvac-animations-js',
|
|
HVAC_CE_PLUGIN_URL . 'assets/js/hvac-animations.js',
|
|
[], // No dependencies
|
|
HVAC_CE_VERSION,
|
|
true // Load in footer
|
|
);
|
|
|
|
// Enqueue mobile navigation JS for all pages
|
|
wp_enqueue_script(
|
|
'hvac-mobile-nav-js',
|
|
HVAC_CE_PLUGIN_URL . 'assets/js/hvac-mobile-nav.js',
|
|
[], // No dependencies
|
|
HVAC_CE_VERSION,
|
|
true // Load in footer
|
|
);
|
|
|
|
// Enqueue page-specific styles based on current page
|
|
if (is_page('hvac-dashboard')) {
|
|
wp_enqueue_style(
|
|
'hvac-dashboard-style',
|
|
HVAC_CE_PLUGIN_URL . 'assets/css/hvac-dashboard.css',
|
|
['hvac-common-style'], // Depends on common styles
|
|
HVAC_CE_VERSION
|
|
);
|
|
}
|
|
|
|
if (is_page('community-login')) {
|
|
wp_enqueue_style(
|
|
'hvac-community-login-style',
|
|
HVAC_CE_PLUGIN_URL . 'assets/css/community-login.css',
|
|
['hvac-common-style'], // Depends on common styles
|
|
HVAC_CE_VERSION
|
|
);
|
|
}
|
|
|
|
if (is_page('trainer-registration')) {
|
|
wp_enqueue_style(
|
|
'hvac-registration-style',
|
|
HVAC_CE_PLUGIN_URL . 'assets/css/hvac-registration.css',
|
|
['hvac-common-style'], // Depends on common styles
|
|
HVAC_CE_VERSION
|
|
);
|
|
}
|
|
|
|
if (is_page('email-attendees')) {
|
|
wp_enqueue_style(
|
|
'hvac-email-attendees-style',
|
|
HVAC_CE_PLUGIN_URL . 'assets/css/hvac-email-attendees.css',
|
|
['hvac-common-style'], // Depends on common styles
|
|
HVAC_CE_VERSION
|
|
);
|
|
}
|
|
|
|
if (is_singular(Tribe__Events__Main::POSTTYPE) || is_page('event-summary')) {
|
|
wp_enqueue_style(
|
|
'hvac-event-summary-style',
|
|
HVAC_CE_PLUGIN_URL . 'assets/css/hvac-event-summary.css',
|
|
['hvac-common-style'], // Depends on common styles
|
|
HVAC_CE_VERSION
|
|
);
|
|
}
|
|
}
|
|
add_action('wp_enqueue_scripts', 'hvac_ce_enqueue_common_assets');
|
|
|
|
/**
|
|
* Enqueue styles and scripts for admin dashboard
|
|
*/
|
|
function hvac_ce_enqueue_admin_assets($hook) {
|
|
// Only load on our dashboard page
|
|
if ($hook !== 'hvac-community-events_page_hvac-ce-dashboard') {
|
|
return;
|
|
}
|
|
|
|
// Enqueue dashboard CSS
|
|
wp_enqueue_style(
|
|
'hvac-admin-dashboard-style',
|
|
HVAC_CE_PLUGIN_URL . 'assets/css/admin-dashboard.css',
|
|
array('wp-admin'),
|
|
HVAC_CE_VERSION
|
|
);
|
|
|
|
// Enqueue dashboard JS
|
|
wp_enqueue_script(
|
|
'hvac-admin-dashboard-script',
|
|
HVAC_CE_PLUGIN_URL . 'assets/js/admin-dashboard.js',
|
|
array('jquery', 'wp-util'),
|
|
HVAC_CE_VERSION,
|
|
true
|
|
);
|
|
|
|
// Localize script with AJAX data
|
|
wp_localize_script('hvac-admin-dashboard-script', 'hvac_admin_dashboard', array(
|
|
'ajax_url' => admin_url('admin-ajax.php'),
|
|
'nonce' => wp_create_nonce('hvac_admin_nonce')
|
|
));
|
|
}
|
|
|
|
|
|
|
|
// Include the main plugin class
|
|
require_once HVAC_CE_PLUGIN_DIR . 'includes/class-hvac-community-events.php';
|
|
|
|
// Initialize the plugin
|
|
function hvac_community_events_init() {
|
|
HVAC_Logger::info('Initializing HVAC Community Events plugin', 'Core');
|
|
return HVAC_Community_Events::instance();
|
|
}
|
|
add_action('plugins_loaded', 'hvac_community_events_init');
|
|
|
|
|
|
/**
|
|
* Include custom template for single event summary page.
|
|
*
|
|
* @param string $template The path of the template to include.
|
|
* @return string The path of the template file.
|
|
*/
|
|
function hvac_ce_include_event_summary_template( $template ) {
|
|
// Check if it's a single event post type view
|
|
if ( is_singular( Tribe__Events__Main::POSTTYPE ) ) {
|
|
// Check if the custom template exists in the plugin's template directory
|
|
$custom_template = HVAC_CE_PLUGIN_DIR . 'templates/single-hvac-event-summary.php';
|
|
if ( file_exists( $custom_template ) ) {
|
|
// Return the path to the custom template
|
|
return $custom_template;
|
|
}
|
|
}
|
|
// Return the original template if not a single event or custom template doesn't exist
|
|
return $template;
|
|
}
|
|
|
|
/**
|
|
* Template routing for Order Summary Page.
|
|
*/
|
|
function hvac_ce_include_order_summary_template( $template ) {
|
|
if ( is_page( 'order-summary' ) && isset( $_GET['order_id'] ) && absint( $_GET['order_id'] ) > 0 ) {
|
|
$custom_template = HVAC_CE_PLUGIN_DIR . 'templates/single-hvac-order-summary.php';
|
|
if ( file_exists( $custom_template ) ) {
|
|
return $custom_template;
|
|
}
|
|
}
|
|
return $template;
|
|
}
|
|
// Removed - template handling is now in the main class
|
|
// add_filter( 'template_include', 'hvac_ce_include_event_summary_template', 99 );
|