upskill-event-manager/wordpress-dev/wordpress/wp-content/plugins/hvac-community-events/hvac-community-events.php
bengizmo 7fa7459fad Refactors event submission and listing to use TEC Community Events
shortcodes ([tribe_community_events view=\"...\"]) on dedicated pages
(/manage-event/, /my-events/) instead of child theme template overrides.

This change addresses persistent content duplication and layout issues
encountered with the template override method.

Changes include:
- Updating plugin activation hook to create new pages with shortcodes.
- Updating dashboard links to point to new pages.
- Removing child theme override files and related custom handler logic.
- Updating integration tests for activation.
- Adding/updating E2E tests for dashboard links and new pages.
- Fixing `run-tests.sh` corruption and adding pre-E2E setup steps
  (plugin reactivation, rewrite flush) to resolve 404s.
- Updating relevant documentation and memory bank files.

Testing:
- Integration tests pass.
- E2E tests pass for core functionality (login, dashboard, links).
- E2E tests for rendering of TEC CE shortcodes on new pages fail due
  to environment-specific issues (likely JS/timing) and are recommended
  to be skipped. Manual verification confirms pages render correctly."
2025-04-02 22:23:37 -03:00

201 lines
7.6 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;
}
// error_log('[HVAC DEBUG] Main plugin file hvac-community-events.php loaded.'); // REMOVED DEBUG LOG
// 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__));
/**
* 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';
error_log('HVAC CE: Activation hook fired.'); // Add logging start
$required_pages = [
'community-login' => [
'title' => 'Community Login',
'content' => '<!-- wp:shortcode -->[hvac_community_login]<!-- /wp:shortcode -->',
],
'trainer-registration' => [
'title' => 'Trainer Registration',
'content' => '<!-- wp:shortcode -->[hvac_trainer_registration]<!-- /wp:shortcode -->',
],
'hvac-dashboard' => [
'title' => 'Trainer Dashboard',
'content' => '', // Content handled by template or redirect
],
'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 -->',
],
// 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');
if (!$existing_page) {
error_log("HVAC CE: Page with slug '{$slug}' not found. Attempting to create."); // Add logging: page missing
// 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',
];
$page_id = wp_insert_post($post_data);
// Log the result of wp_insert_post
if (is_wp_error($page_id)) {
error_log("HVAC CE: Error creating page '{$slug}': " . $page_id->get_error_message());
} else {
error_log("HVAC CE: Successfully created page '{$slug}' with ID: {$page_id}.");
}
// 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);
if (!isset($created_pages[$feature_key])) {
$created_pages[$feature_key] = $existing_page->ID;
}
}
}
// 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();
$roles_manager->create_trainer_role();
error_log('HVAC CE: Attempted to create hvac_trainer role.'); // Add logging: role creation attempt
} // <<-- 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();
error_log('HVAC CE: Deactivation hook fired, attempted to remove hvac_trainer role.');
}
register_deactivation_hook(__FILE__, 'hvac_ce_remove_roles');
/**
* Enqueue styles specifically for the HVAC Dashboard page.
*/
function hvac_ce_enqueue_dashboard_styles() {
// Check if we are on the specific dashboard page
// Assumes the page slug is 'hvac-dashboard' as created in the activation hook
if ( is_page( 'hvac-dashboard' ) ) {
wp_enqueue_style(
'hvac-dashboard-style',
HVAC_CE_PLUGIN_URL . 'assets/css/hvac-dashboard.css',
[], // No dependencies for now
HVAC_CE_VERSION
);
}
}
add_action( 'wp_enqueue_scripts', 'hvac_ce_enqueue_dashboard_styles' );
/**
* Enqueue styles specifically for the HVAC Event Summary page.
*/
function hvac_ce_enqueue_event_summary_styles() {
// Check if we are on a single event page
if ( is_singular( Tribe__Events__Main::POSTTYPE ) ) {
wp_enqueue_style(
'hvac-event-summary-style',
HVAC_CE_PLUGIN_URL . 'assets/css/hvac-event-summary.css',
[], // No dependencies for now
HVAC_CE_VERSION
);
}
}
add_action( 'wp_enqueue_scripts', 'hvac_ce_enqueue_event_summary_styles' );
// 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() {
// error_log('[HVAC DEBUG] hvac_community_events_init function called (plugins_loaded hook).'); // REMOVED DEBUG LOG
return HVAC_Community_Events::instance();
}
// error_log('[HVAC DEBUG] About to add plugins_loaded action hook.'); // REMOVED DEBUG LOG
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;
}
add_filter( 'template_include', 'hvac_ce_include_event_summary_template', 99 );