- Debugged and resolved failures/skips in integration tests for Task 4.7 (Create/Modify Event Pages). The root cause was incorrect loading and initialization assumptions regarding The Events Calendar Community Events (TEC CE) within the PHPUnit environment.
- Corrected TEC CE loading in `tests/bootstrap.php` by:
    - Fixing the plugin filename (`tribe-community-events.php`).
    - Changing the loading hook from `muplugins_loaded` to `plugins_loaded`.
- Refactored `test-event-management-integration.php`:
    - Moved TEC CE availability checks from `wpSetUpBeforeClass` to `set_up` to avoid premature checks.
    - Removed skip logic based on incorrect assumptions about TEC CE's `$form_handler` property.
- Refactored `class-event-handler.php`:
    - Removed incorrect conditional delegation logic attempting to call a non-existent TEC CE method.
    - Fixed a PHP syntax error (missing closing brace) introduced during previous edits.
- Integration tests for Task 4.7 (`Event_Management_Integration_Test`) now pass successfully.
		
	
			
		
			
				
	
	
		
			222 lines
		
	
	
		
			No EOL
		
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			222 lines
		
	
	
		
			No EOL
		
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Template for displaying single HVAC Event Summary.
 | |
|  *
 | |
|  * This template overrides the default single event template provided by The Events Calendar
 | |
|  * when viewed by users with appropriate permissions (or potentially all users, depending on requirements).
 | |
|  * It leverages the Astra theme structure where possible.
 | |
|  *
 | |
|  * Design Reference: design_references/upskillhvac.com_hce-event-summary__event_id=1662 (1).png
 | |
|  */
 | |
| 
 | |
| if ( ! defined( 'ABSPATH' ) ) {
 | |
| 	exit; // Exit if accessed directly.
 | |
| }
 | |
| 
 | |
| // Ensure the data class is available
 | |
| if ( ! class_exists( 'HVAC_Event_Summary_Data' ) ) {
 | |
|     // Attempt to include it if not loaded - adjust path as needed
 | |
|     $class_path = plugin_dir_path( __FILE__ ) . '../includes/community/class-event-summary-data.php';
 | |
|     if ( file_exists( $class_path ) ) {
 | |
|         require_once $class_path;
 | |
|     } else {
 | |
|         // Handle error: Class not found, cannot display summary
 | |
|         echo "<p>Error: Event Summary data handler not found.</p>";
 | |
|         return;
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| get_header();
 | |
| 
 | |
| ?>
 | |
| 
 | |
| <div id="primary" <?php astra_primary_class(); ?>>
 | |
| 
 | |
| 	<?php astra_primary_content_top(); ?>
 | |
| 
 | |
| 	<?php astra_content_loop(); // This typically includes the have_posts() and the_post() loop ?>
 | |
| 
 | |
| 		<?php
 | |
| 		// Ensure we are inside the loop and it's the correct post type
 | |
| 		if ( have_posts() && get_post_type() === Tribe__Events__Main::POSTTYPE ) {
 | |
| 			the_post();
 | |
| 
 | |
| 		          $event_id = get_the_ID();
 | |
|             $summary_data_handler = new HVAC_Event_Summary_Data( $event_id );
 | |
| 
 | |
|             if ( $summary_data_handler->is_valid_event() ) {
 | |
|                 $event_details = $summary_data_handler->get_event_details();
 | |
|                 $venue_details = $summary_data_handler->get_event_venue_details();
 | |
|                 $organizer_details = $summary_data_handler->get_event_organizer_details();
 | |
|                 $transactions = $summary_data_handler->get_event_transactions();
 | |
| 		?>
 | |
| 
 | |
| 			<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
 | |
| 
 | |
| 				<header class="entry-header <?php astra_entry_header_class(); ?>">
 | |
| 					<!-- Task 5.3: Implement breadcrumb navigation using theme's breadcrumb component -->
 | |
| 					<?php
 | |
| 					// Check if Astra breadcrumb function exists and call it
 | |
| 					if ( function_exists( 'astra_get_breadcrumb' ) ) {
 | |
| 						astra_get_breadcrumb();
 | |
| 					} else {
 | |
| 					                   // Fallback or alternative breadcrumb can be added here if needed
 | |
| 					                   echo '<!-- Breadcrumb not available -->';
 | |
| 					               }
 | |
| 					?>
 | |
| 
 | |
| 					<?php the_title( '<h1 class="entry-title">', '</h1>' ); ?>
 | |
| 
 | |
| 					               <!-- Add Edit Event Button (Task 5.6) - Conditionally shown for trainer -->
 | |
| 					               <?php
 | |
| 					               // Check if the current user can edit this specific event post
 | |
| 					               // Using 'edit_post' capability for now, might need refinement to a custom cap later
 | |
| 					               if ( current_user_can( 'edit_post', $event_id ) ) {
 | |
| 					                   // Get the URL of the 'manage-event' page
 | |
| 					                   $manage_event_page = get_page_by_path( 'manage-event' );
 | |
| 					                   if ( $manage_event_page ) {
 | |
| 					                       $edit_url = get_permalink( $manage_event_page->ID );
 | |
| 					                       $edit_url = add_query_arg( 'event_id', $event_id, $edit_url );
 | |
| 					                       // Apply Astra button classes
 | |
| 					                       printf(
 | |
| 					                           '<a href="%s" class="button astra-button">%s</a>',
 | |
| 					                           esc_url( $edit_url ),
 | |
| 					                           esc_html__( 'Edit Event', 'hvac-community-events' )
 | |
| 					                       );
 | |
| 					                   }
 | |
| 					               }
 | |
| 					               ?>
 | |
| 
 | |
|                     <!-- View Public Page Button -->
 | |
|                     <a href="<?php echo esc_url( get_permalink($event_id) ); ?>" class="button astra-button" target="_blank" style="margin-left: 1em;">View Public Event Page</a>
 | |
| 
 | |
|                     <!-- Email Attendees Button (Phase 2) -->
 | |
|                     <?php
 | |
|                     // TODO: Add capability check for emailing attendees (e.g., 'email_hvac_attendees')
 | |
|                     $can_email = current_user_can( 'edit_post', $event_id ); // Placeholder: Use edit cap for now
 | |
|                     if ( $can_email ) {
 | |
|                         // TODO: Link to actual Email Attendees page (Phase 2)
 | |
|                         $email_attendees_url = '#'; // Placeholder URL
 | |
|                         printf(
 | |
|                             '<a href="%s" class="button astra-button" style="margin-left: 1em;">%s</a>',
 | |
|                             esc_url( $email_attendees_url ),
 | |
|                             esc_html__( 'Email Attendees', 'hvac-community-events' )
 | |
|                         );
 | |
|                     }
 | |
|                     ?>
 | |
| 
 | |
| 
 | |
| 				</header> <!-- .entry-header -->
 | |
| 
 | |
| 				<div class="entry-content clear" <?php astra_schema_e( 'text' ); ?>>
 | |
| 
 | |
| 					<?php astra_entry_content_before(); ?>
 | |
| 
 | |
|                     <!-- Task 5.2 & 5.4: Display Event Details in theme-styled card sections / Format content -->
 | |
|                     <div class="hvac-event-summary-details">
 | |
|                         <h2>Event Details</h2>
 | |
|                         <?php if ( $event_details ) { ?>
 | |
|                             <p><strong>Date:</strong> <?php
 | |
|                                 if ( function_exists( 'tribe_events_event_schedule_details' ) ) {
 | |
|                                     echo tribe_events_event_schedule_details( $event_id );
 | |
|                                 } else {
 | |
|                                     // Fallback display if function doesn't exist
 | |
|                                     echo esc_html( $event_details['start_date'] ?? 'N/A' ) . ' - ' . esc_html( $event_details['end_date'] ?? 'N/A' );
 | |
|                                 }
 | |
|                             ?></p>
 | |
|                             <p><strong>Cost:</strong> <?php echo esc_html( $event_details['cost'] ?? 'N/A' ); ?></p>
 | |
|                             <div class="event-description">
 | |
|                                 <?php echo wp_kses_post( $event_details['description'] ); ?>
 | |
|                             </div>
 | |
|                         <?php } ?>
 | |
| 
 | |
|                         <?php if ( $venue_details ) { ?>
 | |
|                             <h3>Venue</h3>
 | |
|                             <p><strong>Name:</strong> <?php echo esc_html( $venue_details['name'] ); ?></p>
 | |
|                             <?php if ( ! empty( $venue_details['address'] ) ) : ?>
 | |
|                                 <p><strong>Address:</strong> <?php echo esc_html( $venue_details['address'] ); ?></p>
 | |
|                             <?php endif; ?>
 | |
|                             <?php if ( ! empty( $venue_details['phone'] ) ) : ?>
 | |
|                                 <p><strong>Phone:</strong> <?php echo esc_html( $venue_details['phone'] ); ?></p>
 | |
|                             <?php endif; ?>
 | |
|                             <?php if ( ! empty( $venue_details['website'] ) ) : ?>
 | |
|                                 <p><strong>Website:</strong> <?php echo wp_kses_post( $venue_details['website'] ); // Allow link HTML ?></p>
 | |
|                             <?php endif; ?>
 | |
|                             <?php // TODO: Add Map Link / Directions Link if needed ?>
 | |
|                         <?php } ?>
 | |
| 
 | |
|                         <?php if ( $organizer_details ) { ?>
 | |
|                             <h3>Organizer</h3>
 | |
|                             <p><strong>Name:</strong> <?php echo esc_html( $organizer_details['name'] ); ?></p>
 | |
|                              <?php if ( ! empty( $organizer_details['phone'] ) ) : ?>
 | |
|                                 <p><strong>Phone:</strong> <?php echo esc_html( $organizer_details['phone'] ); ?></p>
 | |
|                             <?php endif; ?>
 | |
|                             <?php if ( ! empty( $organizer_details['email'] ) ) : ?>
 | |
|                                 <p><strong>Email:</strong> <a href="mailto:<?php echo esc_attr( $organizer_details['email'] ); ?>"><?php echo esc_html( $organizer_details['email'] ); ?></a></p>
 | |
|                             <?php endif; ?>
 | |
|                             <?php if ( ! empty( $organizer_details['website'] ) ) : ?>
 | |
|                                 <p><strong>Website:</strong> <?php echo wp_kses_post( $organizer_details['website'] ); // Allow link HTML ?></p>
 | |
|                             <?php endif; ?>
 | |
|                         <?php } ?>
 | |
|                     </div>
 | |
| 
 | |
|                     <!-- Task 5.5: Implement Transactions Table using theme's table styling -->
 | |
|                     <div class="hvac-event-summary-transactions">
 | |
|                         <h2>Transactions / Attendees</h2>
 | |
|                         <?php if ( ! empty( $transactions ) ) { ?>
 | |
|                             <table class="hvac-transactions-table astra-table-cls"> <!-- Add theme table class -->
 | |
|                                 <thead>
 | |
|                                     <tr>
 | |
|                                         <th>Attendee Name</th>
 | |
|                                         <th>Email</th>
 | |
|                                         <th>Ticket Type</th>
 | |
|                                         <th>Order ID</th>
 | |
|                                         <th>Checked In</th>
 | |
|                                     </tr>
 | |
|                                 </thead>
 | |
|                                 <tbody>
 | |
|                                     <?php foreach ( $transactions as $txn ) { ?>
 | |
|                                         <tr>
 | |
|                                             <td><?php echo esc_html( $txn['purchaser_name'] ?? 'N/A' ); ?></td>
 | |
|                                             <td><?php echo esc_html( $txn['purchaser_email'] ?? 'N/A' ); ?></td>
 | |
|                                             <td><?php echo esc_html( $txn['ticket_type_name'] ?? 'N/A' ); ?></td>
 | |
|                                             <td><?php echo esc_html( $txn['order_id'] ?? 'N/A' ); ?></td>
 | |
|                                             <td><?php echo $txn['checked_in'] ? 'Yes' : 'No'; ?></td>
 | |
|                                         </tr>
 | |
|                                     <?php } ?>
 | |
|                                 </tbody>
 | |
|                             </table>
 | |
|                         <?php } else { ?>
 | |
|                             <p>No transactions found for this event.</p>
 | |
|                         <?php } ?>
 | |
|                     </div>
 | |
| 
 | |
| 					<?php wp_link_pages( /* ... */ ); ?>
 | |
| 
 | |
| 					<?php astra_entry_content_after(); ?>
 | |
| 
 | |
| 				</div><!-- .entry-content -->
 | |
| 
 | |
| 			</article><!-- #post-<?php the_ID(); ?> -->
 | |
| 
 | |
| 		<?php
 | |
|             } else {
 | |
|                 // Handle case where event data couldn't be loaded
 | |
|                 echo '<p>Could not load event summary data.</p>';
 | |
|             }
 | |
| 
 | |
| 		} else {
 | |
|             // Handle case where it's not a tribe_events post or no posts found
 | |
|              astra_content_page_loop(); // Fallback to default page loop? Or show error.
 | |
|              echo '<p>Event not found or invalid post type.</p>';
 | |
| 		}
 | |
| 		?>
 | |
| 
 | |
| 	<?php astra_primary_content_bottom(); ?>
 | |
| 
 | |
| </div><!-- #primary -->
 | |
| 
 | |
| <?php get_sidebar(); ?>
 | |
| 
 | |
| <?php get_footer(); ?>
 |