🚨 CRITICAL: Fixed deployment blockers by adding missing core directories: **Community System (CRITICAL)** - includes/community/ - Login_Handler and all community classes - templates/community/ - Community login forms **Certificate System (CRITICAL)** - includes/certificates/ - 8+ certificate classes and handlers - templates/certificates/ - Certificate reports and generation templates **Core Individual Classes (CRITICAL)** - includes/class-hvac-event-summary.php - includes/class-hvac-trainer-profile-manager.php - includes/class-hvac-master-dashboard-data.php - Plus 40+ other individual HVAC classes **Major Feature Systems (HIGH)** - includes/database/ - Training leads database tables - includes/find-trainer/ - Find trainer directory and MapGeo integration - includes/google-sheets/ - Google Sheets integration system - includes/zoho/ - Complete Zoho CRM integration - includes/communication/ - Communication templates system **Template Infrastructure** - templates/attendee/, templates/email-attendees/ - templates/event-summary/, templates/status/ - templates/template-parts/ - Shared template components **Impact:** - 70+ files added covering 10+ missing directories - Resolves ALL deployment blockers and feature breakdowns - Plugin activation should now work correctly - Multi-machine deployment fully supported 🔧 Generated with Claude Code Co-Authored-By: Ben Reed <ben@tealmaker.com>
135 lines
No EOL
5.1 KiB
PHP
135 lines
No EOL
5.1 KiB
PHP
<?php
|
|
/**
|
|
* Certificate Fix Admin Page
|
|
*/
|
|
|
|
// Security check
|
|
if (!current_user_can('manage_options')) {
|
|
wp_die('Unauthorized access');
|
|
}
|
|
|
|
// Get header
|
|
get_header();
|
|
?>
|
|
|
|
<div class="hvac-container">
|
|
<div class="hvac-content-wrapper">
|
|
<h1>Certificate System Diagnostics</h1>
|
|
|
|
<div class="hvac-admin-section">
|
|
<h2>Rewrite Rules</h2>
|
|
<p>If certificate download URLs are returning 404 errors, flush the rewrite rules.</p>
|
|
|
|
<form method="post" action="">
|
|
<?php wp_nonce_field('hvac_flush_rewrite_rules', 'hvac_flush_nonce'); ?>
|
|
<button type="submit" name="flush_rewrite_rules" class="button button-primary">
|
|
Flush Rewrite Rules
|
|
</button>
|
|
</form>
|
|
|
|
<?php
|
|
if (isset($_POST['flush_rewrite_rules']) && wp_verify_nonce($_POST['hvac_flush_nonce'], 'hvac_flush_rewrite_rules')) {
|
|
// Initialize certificate security to ensure rules are added
|
|
if (class_exists('HVAC_Certificate_Security')) {
|
|
HVAC_Certificate_Security::instance();
|
|
}
|
|
|
|
flush_rewrite_rules();
|
|
echo '<div class="notice notice-success"><p>Rewrite rules have been flushed!</p></div>';
|
|
}
|
|
?>
|
|
|
|
<p><a href="<?php echo admin_url('admin.php?test_certificate_rewrite=1'); ?>" class="button">
|
|
Test Certificate Rewrite Rules
|
|
</a></p>
|
|
</div>
|
|
|
|
<div class="hvac-admin-section">
|
|
<h2>Certificate Database</h2>
|
|
<?php
|
|
global $wpdb;
|
|
$cert_table = $wpdb->prefix . 'hvac_certificates';
|
|
|
|
// Check if table exists
|
|
$table_exists = $wpdb->get_var("SHOW TABLES LIKE '$cert_table'") === $cert_table;
|
|
|
|
if ($table_exists) {
|
|
$total = $wpdb->get_var("SELECT COUNT(*) FROM $cert_table");
|
|
$active = $wpdb->get_var("SELECT COUNT(*) FROM $cert_table WHERE revoked = 0");
|
|
$revoked = $wpdb->get_var("SELECT COUNT(*) FROM $cert_table WHERE revoked = 1");
|
|
|
|
echo "<p>✅ Certificate table exists</p>";
|
|
echo "<ul>";
|
|
echo "<li>Total certificates: $total</li>";
|
|
echo "<li>Active certificates: $active</li>";
|
|
echo "<li>Revoked certificates: $revoked</li>";
|
|
echo "</ul>";
|
|
} else {
|
|
echo "<p>❌ Certificate table does not exist!</p>";
|
|
}
|
|
?>
|
|
</div>
|
|
|
|
<div class="hvac-admin-section">
|
|
<h2>Certificate Files</h2>
|
|
<?php
|
|
$upload_dir = wp_upload_dir();
|
|
$cert_dir = $upload_dir['basedir'] . '/hvac-certificates';
|
|
|
|
if (is_dir($cert_dir)) {
|
|
echo "<p>✅ Certificate directory exists: <code>$cert_dir</code></p>";
|
|
|
|
// Count PDF files
|
|
$pdf_count = count(glob($cert_dir . '/*.pdf'));
|
|
echo "<p>Total PDF files: $pdf_count</p>";
|
|
|
|
// Check .htaccess
|
|
if (file_exists($cert_dir . '/.htaccess')) {
|
|
echo "<p>✅ .htaccess file exists for security</p>";
|
|
} else {
|
|
echo "<p>⚠️ .htaccess file missing - certificates may not be protected</p>";
|
|
}
|
|
} else {
|
|
echo "<p>❌ Certificate directory does not exist!</p>";
|
|
}
|
|
?>
|
|
</div>
|
|
|
|
<div class="hvac-admin-section">
|
|
<h2>Recent Certificate Activity</h2>
|
|
<?php
|
|
if ($table_exists) {
|
|
$recent = $wpdb->get_results("
|
|
SELECT c.*, p.post_title as event_title
|
|
FROM $cert_table c
|
|
LEFT JOIN {$wpdb->posts} p ON c.event_id = p.ID
|
|
ORDER BY c.generated_date DESC
|
|
LIMIT 10
|
|
");
|
|
|
|
if ($recent) {
|
|
echo '<table class="wp-list-table widefat fixed striped">';
|
|
echo '<thead><tr><th>ID</th><th>Event</th><th>Generated</th><th>Status</th></tr></thead>';
|
|
echo '<tbody>';
|
|
|
|
foreach ($recent as $cert) {
|
|
$status = $cert->revoked ? 'Revoked' : 'Active';
|
|
echo '<tr>';
|
|
echo '<td>' . $cert->certificate_id . '</td>';
|
|
echo '<td>' . esc_html($cert->event_title) . '</td>';
|
|
echo '<td>' . date('Y-m-d H:i', strtotime($cert->generated_date)) . '</td>';
|
|
echo '<td>' . $status . '</td>';
|
|
echo '</tr>';
|
|
}
|
|
|
|
echo '</tbody></table>';
|
|
} else {
|
|
echo '<p>No certificates found.</p>';
|
|
}
|
|
}
|
|
?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<?php get_footer(); ?>
|