upskill-event-manager/wordpress-dev/wordpress/wp-content/plugins/hvac-community-events/includes/class-hvac-community-events.php
bengizmo 31dae475a6 Fix certificate reports page 500 error
This commit addresses the 500 error on the certificate-reports page by:
1. Adding proper error handling to certificate templates
2. Ensuring required classes are loaded in the right order
3. Adding try-catch blocks for better error reporting
4. Creating diagnostic and troubleshooting tools
5. Fixing method signature issues in the certificate manager

The issues were caused by missing database tables or classes not being loaded in the correct order.

Additional improvements:
- Added certificate system diagnostic scripts
- Added comprehensive troubleshooting documentation
- Added automated fix deploy script
2025-05-20 23:29:41 -03:00

562 lines
No EOL
18 KiB
PHP

<?php
/**
* Main plugin class for HVAC Community Events
*/
if (!defined('ABSPATH')) {
exit;
}
class HVAC_Community_Events {
/**
* The single instance of the class
*/
private static $instance = null;
/**
* Main instance
*/
public static function instance() {
if (is_null(self::$instance)) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Constructor
*/
public function __construct() {
HVAC_Logger::info('HVAC_Community_Events constructor started', 'Core');
$this->define_constants();
HVAC_Logger::info('Constants defined', 'Core');
$this->includes();
HVAC_Logger::info('Includes completed', 'Core');
$this->init_hooks();
HVAC_Logger::info('Hooks initialized', 'Core');
}
/**
* Define constants
*/
private function define_constants() {
// Additional constants can be defined here
}
/**
* Include required files
*/
private function includes() {
HVAC_Logger::info('Loading required files', 'Core');
$files_to_include = [
'class-hvac-roles.php',
'class-hvac-registration.php',
'class-hvac-settings.php',
'community/class-login-handler.php',
'community/class-event-handler.php',
'class-hvac-dashboard-data.php',
'class-event-form-handler.php', // Add our form handler
'class-event-author-fixer.php', // Fix event author assignment
'class-hvac-dashboard.php', // New dashboard handler
'certificates/class-certificate-installer.php', // Certificate database installer
'certificates/class-certificate-manager.php', // Certificate management
'certificates/class-certificate-generator.php', // Certificate generation
'certificates/class-certificate-settings.php', // Certificate settings
'certificates/class-certificate-template.php', // Certificate template
'certificates/class-certificate-security.php', // Certificate security
'certificates/class-certificate-ajax-handler.php', // Certificate AJAX handling
'community/class-email-debug.php' // Email debugging tools
];
// Make sure Login_Handler is loaded first for shortcode registration
$login_handler_path = HVAC_CE_PLUGIN_DIR . 'includes/community/class-login-handler.php';
if (file_exists($login_handler_path)) {
require_once $login_handler_path;
HVAC_Logger::info("Included file: community/class-login-handler.php", 'Core');
}
foreach ($files_to_include as $file) {
// Skip Login_Handler as we've already loaded it
if ($file === 'community/class-login-handler.php') {
continue;
}
$path = HVAC_CE_PLUGIN_DIR . 'includes/' . $file;
if (file_exists($path)) {
require_once $path;
HVAC_Logger::info("Included file: {$file}", 'Core');
} else {
HVAC_Logger::error("Failed to include file: {$file} - File not found", 'Core');
}
}
// Load Zoho integration if in admin
if (is_admin()) {
$zoho_path = HVAC_CE_PLUGIN_DIR . 'includes/admin/class-zoho-admin.php';
if (file_exists($zoho_path)) {
require_once $zoho_path;
HVAC_Logger::info("Included Zoho admin interface", 'Core');
}
}
HVAC_Logger::info('All required files loaded', 'Core');
}
/**
* Initialize hooks
*/
private function init_hooks() {
// Register activation/deactivation hooks
// Note: These hooks are typically registered outside the class instance context
// register_activation_hook(__FILE__, array($this, 'activate')); // This won't work correctly here
// register_deactivation_hook(__FILE__, array($this, 'deactivate')); // This won't work correctly here
// Initialize other hooks
add_action('init', array($this, 'init'));
// Template loading for custom pages
add_filter('template_include', array($this, 'load_custom_templates'));
// Add authentication check for event summary page
add_action('template_redirect', array($this, 'check_event_summary_auth'));
// Add authentication check for email attendees page
add_action('template_redirect', array($this, 'check_email_attendees_auth'));
// Add authentication check for certificate pages
add_action('template_redirect', array($this, 'check_certificate_pages_auth'));
} // End init_hooks
/**
* Check authentication for event summary page
*/
public function check_event_summary_auth() {
// Check if we're on the event-summary page
if (is_page('event-summary') && !is_user_logged_in()) {
// Redirect to login page
wp_redirect(home_url('/community-login/?redirect_to=' . urlencode($_SERVER['REQUEST_URI'])));
exit;
}
}
/**
* Check authentication for email attendees page
*/
public function check_email_attendees_auth() {
// Check if we're on the email-attendees page
if (is_page('email-attendees') && !is_user_logged_in()) {
// Redirect to login page
wp_redirect(home_url('/community-login/?redirect_to=' . urlencode($_SERVER['REQUEST_URI'])));
exit;
}
}
/**
* Check authentication for certificate pages
*/
public function check_certificate_pages_auth() {
// Check if we're on certificate-related pages
if ((is_page('certificate-reports') || is_page('generate-certificates')) && !is_user_logged_in()) {
// Redirect to login page
wp_redirect(home_url('/community-login/?redirect_to=' . urlencode($_SERVER['REQUEST_URI'])));
exit;
}
}
/**
* Plugin activation (Should be called statically or from the main plugin file context)
*/
public static function activate() {
// Activation code here (e.g., page creation, role creation)
// Note: This method might need to be moved or called differently
}
/**
* Plugin deactivation (Should be called statically or from the main plugin file context)
*/
public static function deactivate() {
// Remove the hvac_trainer role
require_once HVAC_CE_PLUGIN_DIR . 'includes/class-hvac-roles.php'; // Ensure class is available
HVAC_Roles::remove_hvac_trainer_role();
HVAC_Logger::info('Deactivation completed: HVAC trainer role removed.', 'Core');
}
/**
* Initialize function (hooked on 'init')
*/
public function init() {
// Initialize roles
$this->init_roles();
// Initialize settings (admin menu)
$this->init_settings();
// Initialize Zoho admin if in admin
if (is_admin()) {
$this->init_zoho_admin();
$this->init_admin_dashboard();
}
// Initialize forms
$this->init_forms();
// Initialize shortcodes
$this->init_shortcodes();
// Initialize certificate AJAX handler
if (class_exists('HVAC_Certificate_AJAX_Handler')) {
HVAC_Certificate_AJAX_Handler::instance();
}
// Initialize event form handler
if (class_exists('HVAC_Community_Events\Event_Form_Handler')) {
new \HVAC_Community_Events\Event_Form_Handler();
}
}
/**
* Initialize roles
*/
private function init_roles() {
$roles = new HVAC_Roles();
// Note: Role creation is handled in the activate method or the class constructor
}
/**
* Initialize settings
*/
private function init_settings() {
new HVAC_Settings();
}
/**
* Initialize Zoho admin
*/
private function init_zoho_admin() {
if (file_exists(HVAC_CE_PLUGIN_DIR . 'includes/admin/class-zoho-admin.php')) {
require_once HVAC_CE_PLUGIN_DIR . 'includes/admin/class-zoho-admin.php';
new HVAC_Zoho_Admin();
}
}
/**
* Initialize admin dashboard
*/
private function init_admin_dashboard() {
if (file_exists(HVAC_CE_PLUGIN_DIR . 'includes/admin/class-admin-dashboard.php')) {
require_once HVAC_CE_PLUGIN_DIR . 'includes/admin/class-admin-dashboard.php';
new HVAC_Admin_Dashboard();
}
}
/**
* Initialize forms
*/
private function init_forms() {
$registration = new HVAC_Registration();
// Note: Form registration is handled in the class constructor
}
/**
* Initialize shortcodes
*/
private function init_shortcodes() {
// Registration form shortcode
add_shortcode('hvac_trainer_registration', array('HVAC_Registration', 'render_registration_form'));
// Community login shortcode - initialize Login_Handler to register the shortcode
new \HVAC_Community_Events\Community\Login_Handler();
// Dashboard shortcode
add_shortcode('hvac_dashboard', array($this, 'render_dashboard'));
// Add the event summary shortcode
add_shortcode('hvac_event_summary', array($this, 'render_event_summary'));
// Add trainer profile shortcode
add_shortcode('hvac_trainer_profile', array($this, 'render_trainer_profile'));
// Add edit profile shortcode
add_shortcode('hvac_edit_profile', array('HVAC_Registration', 'render_edit_profile_form'));
// Add email attendees shortcode
add_shortcode('hvac_email_attendees', array($this, 'render_email_attendees'));
// Add certificate reports shortcode
add_shortcode('hvac_certificate_reports', array($this, 'render_certificate_reports'));
// Add generate certificates shortcode
add_shortcode('hvac_generate_certificates', array($this, 'render_generate_certificates'));
// Remove the event form shortcode as we're using TEC's shortcode instead
// add_shortcode('hvac_event_form', array('HVAC_Community_Event_Handler', 'render_event_form'));
// Add future shortcodes here
}
/**
* Render dashboard content
*/
public function render_dashboard() {
if (!is_user_logged_in()) {
return '<p>Please log in to view the dashboard.</p>';
}
// Include the dashboard template
ob_start();
include HVAC_CE_PLUGIN_DIR . 'templates/template-hvac-dashboard.php';
return ob_get_clean();
}
/**
* Render event summary content
*/
public function render_event_summary() {
// Check if user is logged in
if (!is_user_logged_in()) {
return '<p>Please log in to view the event summary.</p>';
}
// Get event ID from URL parameter
$event_id = isset($_GET['event_id']) ? absint($_GET['event_id']) : 0;
if ($event_id <= 0) {
return '<div class="hvac-error">No event ID provided. Please access this page from your dashboard.</div>';
}
// Check if the event exists and user has permission to view it
$event = get_post($event_id);
if (!$event || get_post_type($event) !== Tribe__Events__Main::POSTTYPE) {
return '<div class="hvac-error">Event not found or invalid.</div>';
}
// Check if the current user has permission to view this event
// For now, we'll check if they're the post author or have edit_posts capability
if ($event->post_author != get_current_user_id() && !current_user_can('edit_posts')) {
return '<div class="hvac-error">You do not have permission to view this event summary.</div>';
}
// Include the event summary template
ob_start();
include HVAC_CE_PLUGIN_DIR . 'templates/event-summary/template-event-summary.php';
return ob_get_clean();
}
/**
* Render trainer profile content
*/
public function render_trainer_profile() {
if (!is_user_logged_in()) {
return '<p>Please log in to view your profile.</p>';
}
// Include the trainer profile template
ob_start();
include HVAC_CE_PLUGIN_DIR . 'templates/template-trainer-profile.php';
return ob_get_clean();
}
/**
* Render email attendees content
*/
public function render_email_attendees() {
// Check if user is logged in
if (!is_user_logged_in()) {
return '<p>Please log in to email event attendees.</p>';
}
// Get event ID from URL parameter
$event_id = isset($_GET['event_id']) ? absint($_GET['event_id']) : 0;
if ($event_id <= 0) {
return '<div class="hvac-error">No event ID provided. Please access this page from your dashboard or event summary page.</div>';
}
// Check if the event exists and user has permission to view it
$event = get_post($event_id);
if (!$event || get_post_type($event) !== Tribe__Events__Main::POSTTYPE) {
return '<div class="hvac-error">Event not found or invalid.</div>';
}
// Check if the current user has permission to view this event
// For now, we'll check if they're the post author or have edit_posts capability
if ($event->post_author != get_current_user_id() && !current_user_can('edit_posts')) {
return '<div class="hvac-error">You do not have permission to email attendees for this event.</div>';
}
// Include the email attendees template
ob_start();
include HVAC_CE_PLUGIN_DIR . 'templates/email-attendees/template-email-attendees.php';
return ob_get_clean();
}
/**
* Render certificate reports content
*/
public function render_certificate_reports() {
// Check if user is logged in
if (!is_user_logged_in()) {
return '<p>Please log in to view certificate reports.</p>';
}
// Check if the current user has permission to view certificate reports
// For now, we'll check if they're a trainer or have edit_posts capability
if (!current_user_can('hvac_trainer') && !current_user_can('edit_posts')) {
return '<div class="hvac-error">You do not have permission to view certificate reports.</div>';
}
// Make sure certificate manager is loaded
require_once HVAC_CE_PLUGIN_DIR . 'includes/certificates/class-certificate-manager.php';
// Make sure certificate security is loaded
require_once HVAC_CE_PLUGIN_DIR . 'includes/certificates/class-certificate-security.php';
// Include the certificate reports template with error handling
try {
ob_start();
include HVAC_CE_PLUGIN_DIR . 'templates/certificates/template-certificate-reports.php';
return ob_get_clean();
} catch (Exception $e) {
return '<div class="hvac-error">Error loading certificate reports: ' . esc_html($e->getMessage()) . '</div>';
}
}
/**
* Render generate certificates content
*/
public function render_generate_certificates() {
// Check if user is logged in
if (!is_user_logged_in()) {
return '<p>Please log in to generate certificates.</p>';
}
// Get event ID from URL parameter if available
$event_id = isset($_GET['event_id']) ? absint($_GET['event_id']) : 0;
// Check if the event exists and user has permission to view it when event_id is provided
if ($event_id > 0) {
$event = get_post($event_id);
if (!$event || get_post_type($event) !== Tribe__Events__Main::POSTTYPE) {
return '<div class="hvac-error">Event not found or invalid.</div>';
}
// Check if the current user has permission to view this event
if ($event->post_author != get_current_user_id() && !current_user_can('edit_posts')) {
return '<div class="hvac-error">You do not have permission to generate certificates for this event.</div>';
}
} else {
// If no event ID is provided, check general permissions
if (!current_user_can('hvac_trainer') && !current_user_can('edit_posts')) {
return '<div class="hvac-error">You do not have permission to generate certificates.</div>';
}
}
// Make sure certificate manager is loaded
require_once HVAC_CE_PLUGIN_DIR . 'includes/certificates/class-certificate-manager.php';
// Make sure certificate security is loaded
require_once HVAC_CE_PLUGIN_DIR . 'includes/certificates/class-certificate-security.php';
// Make sure certificate generator is loaded
require_once HVAC_CE_PLUGIN_DIR . 'includes/certificates/class-certificate-generator.php';
// Include the generate certificates template with error handling
try {
ob_start();
include HVAC_CE_PLUGIN_DIR . 'templates/certificates/template-generate-certificates.php';
return ob_get_clean();
} catch (Exception $e) {
return '<div class="hvac-error">Error loading certificate generation: ' . esc_html($e->getMessage()) . '</div>';
}
}
/**
* Include custom templates for plugin pages
*/
public function load_custom_templates($template) {
// Check for dashboard page
if (is_page('hvac-dashboard')) {
$custom_template = HVAC_CE_PLUGIN_DIR . 'templates/template-hvac-dashboard.php';
if (file_exists($custom_template)) {
return $custom_template;
}
}
// Check for community-login page
if (is_page('community-login')) {
$custom_template = HVAC_CE_PLUGIN_DIR . 'templates/page-community-login.php';
if (file_exists($custom_template)) {
return $custom_template;
}
}
// Check for my-events page
if (is_page('my-events')) {
$custom_template = HVAC_CE_PLUGIN_DIR . 'templates/page-my-events.php';
if (file_exists($custom_template)) {
return $custom_template;
}
}
// Check for trainer-profile page
if (is_page('trainer-profile')) {
$custom_template = HVAC_CE_PLUGIN_DIR . 'templates/template-trainer-profile.php';
if (file_exists($custom_template)) {
return $custom_template;
}
}
// Check for event-summary page
if (is_page('event-summary')) {
$custom_template = HVAC_CE_PLUGIN_DIR . 'templates/template-event-summary.php';
if (file_exists($custom_template)) {
return $custom_template;
}
}
// Check for email-attendees page
if (is_page('email-attendees')) {
$custom_template = HVAC_CE_PLUGIN_DIR . 'templates/email-attendees/template-email-attendees.php';
if (file_exists($custom_template)) {
return $custom_template;
}
}
// Check for certificate-reports page
if (is_page('certificate-reports')) {
$custom_template = HVAC_CE_PLUGIN_DIR . 'templates/certificates/template-certificate-reports.php';
if (file_exists($custom_template)) {
return $custom_template;
}
}
// Check for generate-certificates page
if (is_page('generate-certificates')) {
$custom_template = HVAC_CE_PLUGIN_DIR . 'templates/certificates/template-generate-certificates.php';
if (file_exists($custom_template)) {
return $custom_template;
}
}
// Check for edit-profile page
if (is_page('edit-profile')) {
$custom_template = HVAC_CE_PLUGIN_DIR . 'templates/template-edit-profile.php';
if (file_exists($custom_template)) {
return $custom_template;
}
}
// Check for single event view (temporary)
if ( is_singular( 'tribe_events' ) ) {
$custom_template = HVAC_CE_PLUGIN_DIR . 'templates/single-tribe_events.php';
if ( file_exists( $custom_template ) ) {
return $custom_template;
}
}
// Add future custom templates here
return $template;
} // End load_custom_templates
} // End class HVAC_Community_Events