## Major Enhancements ### 🏗️ Architecture & Infrastructure - Implement comprehensive Docker testing infrastructure with hermetic environment - Add Forgejo Actions CI/CD pipeline for automated deployments - Create Page Object Model (POM) testing architecture reducing test duplication by 90% - Establish security-first development patterns with input validation and output escaping ### 🧪 Testing Framework Modernization - Migrate 146+ tests from 80 duplicate files to centralized architecture - Add comprehensive E2E test suites for all user roles and workflows - Implement WordPress error detection with automatic site health monitoring - Create robust browser lifecycle management with proper cleanup ### 📚 Documentation & Guides - Add comprehensive development best practices guide - Create detailed administrator setup documentation - Establish user guides for trainers and master trainers - Document security incident reports and migration guides ### 🔧 Core Plugin Features - Enhance trainer profile management with certification system - Improve find trainer functionality with advanced filtering - Strengthen master trainer area with content management - Add comprehensive venue and organizer management ### 🛡️ Security & Reliability - Implement security-first patterns throughout codebase - Add comprehensive input validation and output escaping - Create secure credential management system - Establish proper WordPress role-based access control ### 🎯 WordPress Integration - Strengthen singleton pattern implementation across all classes - Enhance template hierarchy with proper WordPress integration - Improve page manager with hierarchical URL structure - Add comprehensive shortcode and menu system ### 🔍 Developer Experience - Add extensive debugging and troubleshooting tools - Create comprehensive test data seeding scripts - Implement proper error handling and logging - Establish consistent code patterns and standards ### 📊 Performance & Optimization - Optimize database queries and caching strategies - Improve asset loading and script management - Enhance template rendering performance - Streamline user experience across all interfaces 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
148 lines
No EOL
4.8 KiB
PHP
148 lines
No EOL
4.8 KiB
PHP
<?php
|
|
/**
|
|
* Direct test of Find a Trainer functionality
|
|
* Upload to staging server and access via browser to test
|
|
*/
|
|
|
|
// Enable error reporting
|
|
error_reporting(E_ALL);
|
|
ini_set('display_errors', 1);
|
|
ini_set('log_errors', 1);
|
|
|
|
echo "<h1>Find a Trainer Direct Test</h1>";
|
|
|
|
// Try to load WordPress
|
|
$wp_load_paths = [
|
|
__DIR__ . '/../../../wp-load.php',
|
|
__DIR__ . '/../../../../wp-load.php',
|
|
dirname(__DIR__) . '/../../../wp-load.php'
|
|
];
|
|
|
|
$wp_loaded = false;
|
|
foreach ($wp_load_paths as $path) {
|
|
if (file_exists($path)) {
|
|
try {
|
|
require_once $path;
|
|
$wp_loaded = true;
|
|
echo "<p style='color:green'>✓ WordPress loaded from: $path</p>";
|
|
break;
|
|
} catch (Exception $e) {
|
|
echo "<p style='color:red'>✗ Failed to load WordPress from: $path - " . $e->getMessage() . "</p>";
|
|
}
|
|
} else {
|
|
echo "<p style='color:orange'>- wp-load.php not found at: $path</p>";
|
|
}
|
|
}
|
|
|
|
if (!$wp_loaded) {
|
|
die('<p style="color:red">FATAL: Could not load WordPress</p>');
|
|
}
|
|
|
|
// Test WordPress basics
|
|
echo "<h2>WordPress Environment Test</h2>";
|
|
echo "<p>WordPress version: " . get_bloginfo('version') . "</p>";
|
|
echo "<p>Site URL: " . get_site_url() . "</p>";
|
|
echo "<p>Plugin directory: " . WP_PLUGIN_DIR . "</p>";
|
|
|
|
// Test plugin loading
|
|
echo "<h2>Plugin Loading Test</h2>";
|
|
|
|
// Check if HVAC plugin is active
|
|
if (is_plugin_active('hvac-community-events/hvac-community-events.php')) {
|
|
echo "<p style='color:green'>✓ HVAC plugin is active</p>";
|
|
} else {
|
|
echo "<p style='color:red'>✗ HVAC plugin is NOT active</p>";
|
|
}
|
|
|
|
// Check if HVAC plugin function exists
|
|
if (function_exists('hvac_community_events')) {
|
|
echo "<p style='color:green'>✓ hvac_community_events function exists</p>";
|
|
|
|
try {
|
|
$plugin = hvac_community_events();
|
|
echo "<p style='color:green'>✓ Plugin instance created: " . get_class($plugin) . "</p>";
|
|
} catch (Exception $e) {
|
|
echo "<p style='color:red'>✗ Plugin instantiation failed: " . $e->getMessage() . "</p>";
|
|
}
|
|
} else {
|
|
echo "<p style='color:red'>✗ hvac_community_events function does not exist</p>";
|
|
}
|
|
|
|
// Test Find a Trainer class
|
|
echo "<h2>Find a Trainer Class Test</h2>";
|
|
|
|
if (class_exists('HVAC_Find_Trainer_Page')) {
|
|
echo "<p style='color:green'>✓ HVAC_Find_Trainer_Page class exists</p>";
|
|
|
|
try {
|
|
$find_trainer = HVAC_Find_Trainer_Page::get_instance();
|
|
echo "<p style='color:green'>✓ Find a Trainer instance created</p>";
|
|
} catch (Exception $e) {
|
|
echo "<p style='color:red'>✗ Find a Trainer instantiation failed: " . $e->getMessage() . "</p>";
|
|
}
|
|
} else {
|
|
echo "<p style='color:red'>✗ HVAC_Find_Trainer_Page class does not exist</p>";
|
|
}
|
|
|
|
// Check file existence
|
|
echo "<h2>File Existence Test</h2>";
|
|
|
|
$critical_files = [
|
|
'hvac-community-events.php',
|
|
'includes/class-hvac-plugin.php',
|
|
'includes/find-trainer/class-hvac-find-trainer-page.php',
|
|
'includes/find-trainer/class-hvac-mapgeo-integration.php',
|
|
'assets/css/find-trainer.css',
|
|
'assets/js/find-trainer.js'
|
|
];
|
|
|
|
$plugin_dir = WP_PLUGIN_DIR . '/hvac-community-events/';
|
|
|
|
foreach ($critical_files as $file) {
|
|
$full_path = $plugin_dir . $file;
|
|
if (file_exists($full_path)) {
|
|
echo "<p style='color:green'>✓ $file exists</p>";
|
|
} else {
|
|
echo "<p style='color:red'>✗ $file MISSING</p>";
|
|
}
|
|
}
|
|
|
|
// Test page existence
|
|
echo "<h2>Page Existence Test</h2>";
|
|
|
|
$page = get_page_by_path('find-a-trainer');
|
|
if ($page) {
|
|
echo "<p style='color:green'>✓ find-a-trainer page exists (ID: {$page->ID})</p>";
|
|
echo "<p>Page status: {$page->post_status}</p>";
|
|
echo "<p>Page title: {$page->post_title}</p>";
|
|
} else {
|
|
echo "<p style='color:red'>✗ find-a-trainer page does not exist in database</p>";
|
|
}
|
|
|
|
// Test direct URL
|
|
echo "<h2>URL Test</h2>";
|
|
$find_trainer_url = home_url('/find-a-trainer/');
|
|
echo "<p>Expected URL: <a href='$find_trainer_url' target='_blank'>$find_trainer_url</a></p>";
|
|
|
|
// Test shortcodes
|
|
echo "<h2>Shortcode Test</h2>";
|
|
|
|
if (shortcode_exists('hvac_find_trainer')) {
|
|
echo "<p style='color:green'>✓ hvac_find_trainer shortcode exists</p>";
|
|
} else {
|
|
echo "<p style='color:red'>✗ hvac_find_trainer shortcode does not exist</p>";
|
|
}
|
|
|
|
if (shortcode_exists('hvac_trainer_directory')) {
|
|
echo "<p style='color:green'>✓ hvac_trainer_directory shortcode exists</p>";
|
|
} else {
|
|
echo "<p style='color:red'>✗ hvac_trainer_directory shortcode does not exist</p>";
|
|
}
|
|
|
|
echo "<h2>Memory and Environment</h2>";
|
|
echo "<p>Memory usage: " . number_format(memory_get_usage() / 1024 / 1024, 2) . " MB</p>";
|
|
echo "<p>Memory limit: " . ini_get('memory_limit') . "</p>";
|
|
echo "<p>Max execution time: " . ini_get('max_execution_time') . "</p>";
|
|
|
|
echo "<h2>Test Complete</h2>";
|
|
echo "<p>If all tests pass but the page still shows error, check the server error logs for specific PHP errors.</p>"; |