upskill-event-manager/wordpress-dev/wordpress/wp-content/plugins/hvac-community-events/templates/single-hvac-event-summary.php
bengizmo 0bcae8792c fix(tests): Resolve Task 4.7 integration test issues & UMB
- 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.
2025-04-02 07:02:06 -03:00

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(); ?>