diff --git a/wordpress-dev/wordpress/wp-content/plugins/hvac-community-events/assets/css/hvac-dashboard.css b/wordpress-dev/wordpress/wp-content/plugins/hvac-community-events/assets/css/hvac-dashboard.css index 3977564c..2569915e 100644 --- a/wordpress-dev/wordpress/wp-content/plugins/hvac-community-events/assets/css/hvac-dashboard.css +++ b/wordpress-dev/wordpress/wp-content/plugins/hvac-community-events/assets/css/hvac-dashboard.css @@ -305,4 +305,318 @@ .hvac-stat-col { flex-basis: 100%; } +} + +/* Master Dashboard Specific Styles */ + +/* Dashboard Section Styling */ +.dashboard-section { + margin-bottom: var(--hvac-spacing-8); + background: #ffffff; + border-radius: var(--hvac-radius-lg); + padding: var(--hvac-spacing-6); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); +} + +.section-title { + margin: 0 0 var(--hvac-spacing-6) 0; + color: var(--hvac-theme-text); + font-size: 1.5rem; + font-weight: 600; + border-bottom: 2px solid var(--hvac-primary); + padding-bottom: var(--hvac-spacing-2); +} + +/* Events Filters */ +.events-filters { + display: flex; + flex-wrap: wrap; + gap: var(--hvac-spacing-4); + margin-bottom: var(--hvac-spacing-6); + padding: var(--hvac-spacing-4); + background: #f8f9fa; + border: 1px solid var(--hvac-border); + border-radius: var(--hvac-radius-md); +} + +.filter-group { + display: flex; + flex-direction: column; + gap: 5px; +} + +.filter-group label { + font-weight: 600; + color: var(--hvac-theme-text); + font-size: 0.9rem; +} + +.filter-group select, +.filter-group input[type="text"], +.filter-group input[type="date"] { + padding: 8px 12px; + border: 1px solid var(--hvac-border); + border-radius: 4px; + font-size: 14px; + min-width: 150px; +} + +.filter-group select:focus, +.filter-group input:focus { + outline: none; + border-color: var(--hvac-primary); + box-shadow: 0 0 0 2px rgba(0, 128, 128, 0.2); +} + +/* Trainers Table */ +.trainers-table-container, +.events-table-container { + overflow-x: auto; + border: 1px solid var(--hvac-border); + border-radius: var(--hvac-radius-md); + margin-bottom: var(--hvac-spacing-6); +} + +.trainers-table, +.events-table { + width: 100%; + border-collapse: collapse; + background: #ffffff; +} + +.trainers-table th, +.trainers-table td, +.events-table th, +.events-table td { + padding: 12px 15px; + text-align: left; + border-bottom: 1px solid var(--hvac-border); +} + +.trainers-table th, +.events-table th { + background-color: #f8f9fa; + font-weight: 600; + color: var(--hvac-theme-text); + border-bottom: 2px solid var(--hvac-border); +} + +.trainers-table tr:hover, +.events-table tr:hover { + background-color: #f8f9fa; +} + +.trainer-name { + font-weight: 600; +} + +.number { + text-align: center; + font-weight: 500; +} + +.revenue { + text-align: right; + font-weight: 600; + color: var(--hvac-success); +} + +/* Status Badge */ +.status-badge { + padding: 4px 8px; + border-radius: 4px; + font-size: 0.8rem; + font-weight: 600; + text-transform: uppercase; +} + +.status-publish { + background-color: var(--hvac-success-light); + color: var(--hvac-success); +} + +.status-future { + background-color: var(--hvac-info-light); + color: var(--hvac-accent); +} + +.status-draft { + background-color: var(--hvac-warning-light); + color: var(--hvac-warning); +} + +.status-pending { + background-color: var(--hvac-warning-light); + color: var(--hvac-warning); +} + +.status-private { + background-color: var(--hvac-secondary-light); + color: var(--hvac-secondary); +} + +/* Pagination */ +.pagination-container { + display: flex; + justify-content: space-between; + align-items: center; + margin-top: var(--hvac-spacing-6); + padding: var(--hvac-spacing-4); + background: #f8f9fa; + border-top: 1px solid var(--hvac-border); +} + +.pagination-info { + color: var(--hvac-theme-text-light); + font-size: 0.9rem; +} + +.pagination-controls { + display: flex; + gap: 5px; +} + +.pagination-btn { + padding: 8px 12px; + border: 1px solid var(--hvac-border); + background: #ffffff; + color: var(--hvac-theme-text); + border-radius: 4px; + cursor: pointer; + font-size: 0.9rem; + transition: all 0.2s ease; +} + +.pagination-btn:hover { + background: var(--hvac-primary-light); + border-color: var(--hvac-primary); +} + +.pagination-btn.active { + background: var(--hvac-primary); + color: #ffffff; + border-color: var(--hvac-primary); +} + +.pagination-btn:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +/* Button Styling */ +.btn { + display: inline-block; + padding: 8px 16px; + border: 1px solid var(--hvac-border); + background: #ffffff; + color: var(--hvac-theme-text); + text-decoration: none; + border-radius: 4px; + cursor: pointer; + font-size: 0.9rem; + transition: all 0.2s ease; +} + +.btn-primary { + background: var(--hvac-primary); + color: #ffffff; + border-color: var(--hvac-primary); +} + +.btn-primary:hover { + background: var(--hvac-primary-dark); + border-color: var(--hvac-primary-dark); +} + +.btn-secondary { + background: var(--hvac-secondary-light); + color: var(--hvac-secondary); +} + +.btn-secondary:hover { + background: var(--hvac-secondary); + color: #ffffff; +} + +.btn-small { + padding: 6px 12px; + font-size: 0.8rem; +} + +/* Loading and Error States */ +.loading-placeholder { + text-align: center; + padding: var(--hvac-spacing-10); + color: var(--hvac-theme-text-light); + font-style: italic; +} + +.error-message { + text-align: center; + padding: var(--hvac-spacing-6); + color: var(--hvac-error); + background: var(--hvac-error-light); + border: 1px solid var(--hvac-error); + border-radius: var(--hvac-radius-md); +} + +.no-data-message { + text-align: center; + padding: var(--hvac-spacing-10); + color: var(--hvac-theme-text-light); + font-style: italic; +} + +/* Responsive Design for Master Dashboard */ +@media (max-width: 768px) { + .events-filters { + flex-direction: column; + } + + .filter-group { + width: 100%; + } + + .filter-group select, + .filter-group input { + min-width: auto; + width: 100%; + } + + .trainers-table th, + .trainers-table td, + .events-table th, + .events-table td { + padding: 8px 10px; + font-size: 0.9rem; + } + + .pagination-container { + flex-direction: column; + gap: var(--hvac-spacing-2); + } + + .pagination-controls { + flex-wrap: wrap; + justify-content: center; + } +} + +@media (max-width: 480px) { + .dashboard-section { + padding: var(--hvac-spacing-4); + } + + .trainers-table th, + .trainers-table td, + .events-table th, + .events-table td { + padding: 6px 8px; + font-size: 0.8rem; + } + + .pagination-btn { + padding: 6px 10px; + font-size: 0.8rem; + } } \ No newline at end of file diff --git a/wordpress-dev/wordpress/wp-content/plugins/hvac-community-events/hvac-community-events.php b/wordpress-dev/wordpress/wp-content/plugins/hvac-community-events/hvac-community-events.php index 643fee8b..eeb76b32 100644 --- a/wordpress-dev/wordpress/wp-content/plugins/hvac-community-events/hvac-community-events.php +++ b/wordpress-dev/wordpress/wp-content/plugins/hvac-community-events/hvac-community-events.php @@ -716,6 +716,47 @@ function hvac_ce_enqueue_common_assets() { } add_action('wp_enqueue_scripts', 'hvac_ce_enqueue_common_assets'); +/** + * Handle AJAX request for master dashboard events table + */ +function hvac_ce_handle_master_dashboard_events_ajax() { + // Verify nonce + if ( ! wp_verify_nonce( $_POST['nonce'], 'hvac_master_dashboard_nonce' ) ) { + wp_die( 'Security check failed' ); + } + + // Check permissions + if ( ! current_user_can( 'view_master_dashboard' ) && ! current_user_can( 'view_all_trainer_data' ) && ! current_user_can( 'manage_options' ) ) { + wp_die( 'Insufficient permissions' ); + } + + // Load master dashboard data class + if ( ! class_exists( 'HVAC_Master_Dashboard_Data' ) ) { + require_once HVAC_CE_PLUGIN_DIR . 'includes/class-hvac-master-dashboard-data.php'; + } + + // Initialize master dashboard data handler + $master_data = new HVAC_Master_Dashboard_Data(); + + // Get table data with filters + $args = array( + 'status' => sanitize_text_field( $_POST['status'] ?? 'all' ), + 'search' => sanitize_text_field( $_POST['search'] ?? '' ), + 'orderby' => sanitize_text_field( $_POST['orderby'] ?? 'date' ), + 'order' => sanitize_text_field( $_POST['order'] ?? 'DESC' ), + 'page' => absint( $_POST['page'] ?? 1 ), + 'per_page' => absint( $_POST['per_page'] ?? 10 ), + 'date_from' => sanitize_text_field( $_POST['date_from'] ?? '' ), + 'date_to' => sanitize_text_field( $_POST['date_to'] ?? '' ), + 'trainer_id' => absint( $_POST['trainer_id'] ?? 0 ), + ); + + $table_data = $master_data->get_events_table_data( $args ); + wp_send_json_success( $table_data ); +} +add_action( 'wp_ajax_hvac_master_dashboard_events', 'hvac_ce_handle_master_dashboard_events_ajax' ); +add_action( 'wp_ajax_nopriv_hvac_master_dashboard_events', 'hvac_ce_handle_master_dashboard_events_ajax' ); + /** * Enqueue styles and scripts for admin dashboard */ diff --git a/wordpress-dev/wordpress/wp-content/plugins/hvac-community-events/templates/template-hvac-master-dashboard.php b/wordpress-dev/wordpress/wp-content/plugins/hvac-community-events/templates/template-hvac-master-dashboard.php index 617624d5..b28d9390 100644 --- a/wordpress-dev/wordpress/wp-content/plugins/hvac-community-events/templates/template-hvac-master-dashboard.php +++ b/wordpress-dev/wordpress/wp-content/plugins/hvac-community-events/templates/template-hvac-master-dashboard.php @@ -66,29 +66,7 @@ if ( ! class_exists( 'HVAC_Master_Dashboard_Data' ) ) { // Initialize master dashboard data handler (no user ID needed - shows all data) $master_data = new HVAC_Master_Dashboard_Data(); -// Handle AJAX request for events table -if ( defined('DOING_AJAX') && DOING_AJAX && isset($_POST['action']) && $_POST['action'] === 'hvac_master_dashboard_events' ) { - // Verify nonce - if ( ! wp_verify_nonce( $_POST['nonce'], 'hvac_master_dashboard_nonce' ) ) { - wp_die( 'Security check failed' ); - } - - // Get table data with filters - $args = array( - 'status' => sanitize_text_field( $_POST['status'] ?? 'all' ), - 'search' => sanitize_text_field( $_POST['search'] ?? '' ), - 'orderby' => sanitize_text_field( $_POST['orderby'] ?? 'date' ), - 'order' => sanitize_text_field( $_POST['order'] ?? 'DESC' ), - 'page' => absint( $_POST['page'] ?? 1 ), - 'per_page' => absint( $_POST['per_page'] ?? 10 ), - 'date_from' => sanitize_text_field( $_POST['date_from'] ?? '' ), - 'date_to' => sanitize_text_field( $_POST['date_to'] ?? '' ), - 'trainer_id' => absint( $_POST['trainer_id'] ?? 0 ), - ); - - $table_data = $master_data->get_events_table_data( $args ); - wp_send_json_success( $table_data ); -} +// AJAX handling is now done through proper WordPress hooks in the main plugin file // Get statistics $total_events = $master_data->get_total_events_count(); @@ -120,6 +98,8 @@ if ( isset( $_GET['error'] ) && $_GET['error'] === 'access_denied' ) { $error_message = 'You were redirected here because you do not have permission to access the Master Dashboard.'; } +// Get header to load theme CSS and trigger wp_enqueue_scripts +get_header(); ?>