Files
shopify-ai-backup/chat/templates/headers and footers/pc-head-and-foot/verify-plugin.php
2026-02-09 18:09:12 +00:00

476 lines
16 KiB
PHP

<?php
/**
* Final Verification Script
* Tests all plugin functionality comprehensively
*/
// Include WordPress
require_once dirname(__FILE__) . '/../../../../wp-load.php';
header('Content-Type: text/html; charset=UTF-8');
echo '<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Plugin Verification</title>
<style>
body { font-family: Arial, sans-serif; margin: 20px; max-width: 1200px; }
.pass { color: green; font-weight: bold; }
.fail { color: red; font-weight: bold; }
.skip { color: orange; }
h2 { color: #333; border-bottom: 2px solid #0073aa; padding-bottom: 10px; }
.test-section { background: #f9f9f9; padding: 15px; margin: 10px 0; border-radius: 5px; border: 1px solid #ddd; }
pre { background: #f0f0f0; padding: 10px; overflow-x: auto; border-radius: 3px; }
.summary { background: #0073aa; color: white; padding: 20px; border-radius: 5px; margin-top: 20px; }
</style>
</head>
<body>
<h1>Headers & Footers Plugin - Final Verification</h1>
<p>Date: ' . date('Y-m-d H:i:s') . '</p>
<p>PHP Version: ' . PHP_VERSION . '</p>';
$results = array();
$all_passed = true;
// ============================================
// TEST 1: Plugin Files Exist
// ============================================
echo '<div class="test-section">';
echo '<h2>TEST 1: Plugin Files Verification</h2>';
$required_files = array(
'pc-headers-and-footers-and-ad-pixels-5ake.php',
'includes/class-database.php',
'includes/class-snippet.php',
'admin/class-admin.php',
'public/class-public.php'
);
foreach ($required_files as $file) {
$full_path = dirname(__FILE__) . '/' . $file;
if (file_exists($full_path)) {
echo '<p class="pass">✓ ' . $file . ' exists (' . filesize($full_path) . ' bytes)</p>';
} else {
echo '<p class="fail">✗ ' . $file . ' NOT FOUND</p>';
$all_passed = false;
}
}
echo '</div>';
// ============================================
// TEST 2: Plugin Constants
// ============================================
echo '<div class="test-section">';
echo '<h2>TEST 2: Plugin Constants</h2>';
$constants = array(
'PC_HFAP_VERSION',
'PC_HFAP_PLUGIN_DIR',
'PC_HFAP_PLUGIN_URL',
'PC_HFAP_PLUGIN_BASENAME'
);
foreach ($constants as $const) {
if (defined($const)) {
$value = constant($const);
if (strlen($value) > 50) {
$value = substr($value, 0, 50) . '...';
}
echo '<p class="pass">✓ ' . $const . ' = ' . htmlspecialchars($value) . '</p>';
} else {
echo '<p class="fail">✗ ' . $const . ' NOT DEFINED</p>';
$all_passed = false;
}
}
echo '</div>';
// ============================================
// TEST 3: Database Table
// ============================================
echo '<div class="test-section">';
echo '<h2>TEST 3: Database Table</h2>';
try {
PC_HFAP_Database::create_tables();
global $wpdb;
$table_name = PC_HFAP_Database::get_table_name();
$table_exists = $wpdb->get_var($wpdb->prepare('SHOW TABLES LIKE %s', $table_name));
if ($table_name === $table_exists) {
echo '<p class="pass">✓ Table exists: ' . $table_name . '</p>';
// Check table structure
$columns = $wpdb->get_results("DESCRIBE $table_name", ARRAY_A);
echo '<p>Table Structure:</p>';
echo '<table border="1" cellpadding="5">';
echo '<tr><th>Field</th><th>Type</th><th>Null</th><th>Key</th><th>Default</th></tr>';
foreach ($columns as $col) {
echo '<tr>';
echo '<td>' . $col['Field'] . '</td>';
echo '<td>' . $col['Type'] . '</td>';
echo '<td>' . $col['Null'] . '</td>';
echo '<td>' . ($col['Key'] ? $col['Key'] : '-') . '</td>';
echo '<td>' . ($col['Default'] ? $col['Default'] : 'NULL') . '</td>';
echo '</tr>';
}
echo '</table>';
// Count existing snippets
$count = $wpdb->get_var("SELECT COUNT(*) FROM $table_name");
echo '<p>Current snippets: ' . $count . '</p>';
} else {
echo '<p class="fail">✗ Table does NOT exist!</p>';
$all_passed = false;
}
} catch (Exception $e) {
echo '<p class="fail">✗ Database error: ' . $e->getMessage() . '</p>';
$all_passed = false;
}
echo '</div>';
// ============================================
// TEST 4: CRUD Operations
// ============================================
echo '<div class="test-section">';
echo '<h2>TEST 4: CRUD Operations</h2>';
$test_results = array();
// CREATE
echo '<h3>Create Snippet</h3>';
try {
$data = array(
'title' => 'Verification Test - ' . time(),
'location' => 'header',
'code' => '<script>console.log("Test snippet created at ' . date('Y-m-d H:i:s') . '");</script>'
);
$snippet = new PC_HFAP_Snippet($data);
$insert_id = $snippet->save();
if ($insert_id) {
echo '<p class="pass">✓ Snippet created with ID: ' . $insert_id . '</p>';
$test_results['create'] = $insert_id;
} else {
echo '<p class="fail">✗ Failed to create snippet</p>';
echo '<p>Error: ' . $wpdb->last_error . '</p>';
$all_passed = false;
$test_results['create'] = false;
}
} catch (Exception $e) {
echo '<p class="fail">✗ Create error: ' . $e->getMessage() . '</p>';
$all_passed = false;
$test_results['create'] = false;
}
// READ
echo '<h3>Read Snippet</h3>';
if ($test_results['create']) {
try {
$retrieved = PC_HFAP_Snippet::get_by_id($test_results['create']);
if ($retrieved && $retrieved->get_id()) {
echo '<p class="pass">✓ Snippet retrieved successfully</p>';
echo '<ul>';
echo '<li>ID: ' . $retrieved->get_id() . '</li>';
echo '<li>Title: ' . esc_html($retrieved->get_title()) . '</li>';
echo '<li>Location: ' . $retrieved->get_location() . '</li>';
echo '<li>Code length: ' . strlen($retrieved->get_code()) . ' chars</li>';
echo '</ul>';
$test_results['read'] = true;
} else {
echo '<p class="fail">✗ Failed to retrieve snippet</p>';
$all_passed = false;
$test_results['read'] = false;
}
} catch (Exception $e) {
echo '<p class="fail">✗ Read error: ' . $e->getMessage() . '</p>';
$all_passed = false;
$test_results['read'] = false;
}
} else {
echo '<p class="skip">⚠ Skipped (create failed)</p>';
$test_results['read'] = false;
}
// UPDATE
echo '<h3>Update Snippet</h3>';
if ($test_results['create']) {
try {
$snippet = PC_HFAP_Snippet::get_by_id($test_results['create']);
if ($snippet) {
$new_title = 'Updated Title - ' . time();
$new_code = '<style>/* Updated CSS */</style>';
$snippet->set_title($new_title);
$snippet->set_code($new_code);
$update_result = $snippet->save();
if ($update_result !== false) {
// Verify update
$updated = PC_HFAP_Snippet::get_by_id($test_results['create']);
if ($updated->get_title() === $new_title) {
echo '<p class="pass">✓ Snippet updated successfully</p>';
$test_results['update'] = true;
} else {
echo '<p class="fail">✗ Title mismatch after update</p>';
$all_passed = false;
$test_results['update'] = false;
}
} else {
echo '<p class="fail">✗ Update failed</p>';
echo '<p>Error: ' . $wpdb->last_error . '</p>';
$all_passed = false;
$test_results['update'] = false;
}
} else {
echo '<p class="fail">✗ Snippet not found for update</p>';
$all_passed = false;
$test_results['update'] = false;
}
} catch (Exception $e) {
echo '<p class="fail">✗ Update error: ' . $e->getMessage() . '</p>';
$all_passed = false;
$test_results['update'] = false;
}
} else {
echo '<p class="skip">⚠ Skipped (create failed)</p>';
$test_results['update'] = false;
}
// DELETE
echo '<h3>Delete Snippet</h3>';
if ($test_results['create']) {
try {
$snippet = PC_HFAP_Snippet::get_by_id($test_results['create']);
if ($snippet) {
$delete_result = $snippet->delete();
if ($delete_result) {
// Verify deletion
$deleted = PC_HFAP_Snippet::get_by_id($test_results['create']);
if (!$deleted) {
echo '<p class="pass">✓ Snippet deleted successfully</p>';
$test_results['delete'] = true;
} else {
echo '<p class="fail">✗ Snippet still exists after delete</p>';
$all_passed = false;
$test_results['delete'] = false;
}
} else {
echo '<p class="fail">✗ Delete operation failed</p>';
echo '<p>Error: ' . $wpdb->last_error . '</p>';
$all_passed = false;
$test_results['delete'] = false;
}
} else {
echo '<p class="fail">✗ Snippet not found for delete</p>';
$all_passed = false;
$test_results['delete'] = false;
}
} catch (Exception $e) {
echo '<p class="fail">✗ Delete error: ' . $e->getMessage() . '</p>';
$all_passed = false;
$test_results['delete'] = false;
}
} else {
echo '<p class="skip">⚠ Skipped (create failed)</p>';
$test_results['delete'] = false;
}
echo '</div>';
// ============================================
// TEST 5: WordPress Hooks
// ============================================
echo '<div class="test-section">';
echo '<h2>TEST 5: WordPress Hooks</h2>';
// Check if admin class is instantiated
global $pc_hfap_admin;
if (isset($pc_hfap_admin) || class_exists('PC_HFAP_Admin')) {
echo '<p class="pass">✓ PC_HFAP_Admin class exists</p>';
// Check menu registration
global $menu;
$menu_found = false;
foreach ($menu as $item) {
if (strpos($item[0], 'Headers & Footers') !== false) {
echo '<p class="pass">✓ Admin menu item found: ' . $item[0] . '</p>';
$menu_found = true;
break;
}
}
if (!$menu_found) {
echo '<p class="skip">⚠ Admin menu item not found in global $menu (may be hidden)</p>';
}
} else {
echo '<p class="skip">⚠ Admin class not instantiated (may be in admin only)</p>';
}
// Check public hooks
$hooks_to_check = array(
'wp_head',
'wp_body_open',
'wp_footer',
'wp_enqueue_scripts'
);
echo '<p>Public hooks registered:</p>';
foreach ($hooks_to_check as $hook) {
$callbacks = $wp_filter[$hook] ?? array();
$found = false;
foreach ($callbacks as $priority => $callbacks_list) {
foreach ($callbacks_list as $callback) {
if (is_array($callback[0] ?? null) &&
strpos(get_class($callback[0][0] ?? ''), 'PC_HFAP') !== false) {
echo '<p class="pass">✓ ' . $hook . ' has PC_HFAP callback</p>';
$found = true;
break 2;
}
}
}
if (!$found) {
echo '<p class="skip">⚠ ' . $hook . ' - PC_HFAP callback not detected (may be normal)</p>';
}
}
echo '</div>';
// ============================================
// TEST 6: Code with Special Characters
// ============================================
echo '<div class="test-section">';
echo '<h2>TEST 6: Special Character Handling</h2>';
$special_tests = array(
'JavaScript' => '<script>alert("Hello World");</script>',
'CSS' => '<style>.class { color: #ff0000; }</style>',
'HTML Comment' => '<!-- This is a comment -->',
'Quotes' => '<div onclick="test(\'quote\')">Test</div>',
'Unicode' => '<p>Héllo Wörld 你好</p>',
'Ampersand' => '<p>Coffee & Tea</p>',
);
foreach ($special_tests as $type => $code) {
$data = array(
'title' => 'Special Chars Test - ' . $type,
'location' => 'header',
'code' => $code
);
$snippet = new PC_HFAP_Snippet($data);
$insert_id = $snippet->save();
if ($insert_id) {
$retrieved = PC_HFAP_Snippet::get_by_id($insert_id);
if ($retrieved && $retrieved->get_code() === $code) {
echo '<p class="pass">✓ ' . $type . ' - preserved correctly</p>';
} else {
echo '<p class="fail">✗ ' . $type . ' - code mismatch</p>';
echo '<pre>Expected: ' . htmlspecialchars($code) . '</pre>';
echo '<pre>Got: ' . htmlspecialchars($retrieved->get_code() ?? 'NULL') . '</pre>';
$all_passed = false;
}
// Clean up
$retrieved->delete();
} else {
echo '<p class="fail">✗ ' . $type . ' - insert failed</p>';
$all_passed = false;
}
}
echo '</div>';
// ============================================
// TEST 7: Admin Form Simulation
// ============================================
echo '<div class="test-section">';
echo '<h2>TEST 7: Admin Form Simulation</h2>';
$form_data = array(
'pc_hfap_title' => 'Form Test Snippet ' . time(),
'pc_hfap_location' => 'footer',
'pc_hfap_code' => '<script>console.log("Form test");</script>',
'pc_hfap_nonce' => wp_create_nonce('pc_hfap_save_snippet'),
'submit_snippet' => '1'
);
echo '<p>Simulating form submission with:</p>';
echo '<ul>';
echo '<li>Title: ' . $form_data['pc_hfap_title'] . '</li>';
echo '<li>Location: ' . $form_data['pc_hfap_location'] . '</li>';
echo '<li>Code: ' . htmlspecialchars($form_data['pc_hfap_code']) . '</li>';
echo '</ul>';
// Verify nonce
if (wp_verify_nonce($form_data['pc_hfap_nonce'], 'pc_hfap_save_snippet')) {
echo '<p class="pass">✓ Nonce verification: PASSED</p>';
// Create snippet
$data = array(
'title' => sanitize_text_field($form_data['pc_hfap_title']),
'location' => in_array($form_data['pc_hfap_location'], array('header', 'footer', 'body'))
? $form_data['pc_hfap_location']
: 'header',
'code' => wp_unslash($form_data['pc_hfap_code'])
);
$snippet = new PC_HFAP_Snippet($data);
$result = $snippet->save();
if ($result) {
echo '<p class="pass">✓ Form simulation: Snippet saved (ID: ' . $result . ')</p>';
// Clean up
$snippet->delete();
} else {
echo '<p class="fail">✗ Form simulation: Save failed</p>';
$all_passed = false;
}
} else {
echo '<p class="fail">✗ Nonce verification: FAILED</p>';
$all_passed = false;
}
echo '</div>';
// ============================================
// FINAL SUMMARY
// ============================================
echo '<div class="summary">';
echo '<h2>FINAL SUMMARY</h2>';
echo '<p>Test Results:</p>';
echo '<ul>';
echo '<li>Files: ✓</li>';
echo '<li>Constants: ✓</li>';
echo '<li>Database: ' . ($table_exists === $table_name ? '✓' : '✗') . '</li>';
echo '<li>Create: ' . ($test_results['create'] ? '✓' : '✗') . '</li>';
echo '<li>Read: ' . ($test_results['read'] ? '✓' : '✗') . '</li>';
echo '<li>Update: ' . ($test_results['update'] ? '✓' : '✗') . '</li>';
echo '<li>Delete: ' . ($test_results['delete'] ? '✓' : '✗') . '</li>';
echo '</ul>';
if ($all_passed) {
echo '<h1 class="pass">✓ ALL TESTS PASSED - PLUGIN IS WORKING CORRECTLY</h1>';
} else {
echo '<h1 class="fail">✗ SOME TESTS FAILED - REVIEW RESULTS ABOVE</h1>';
}
echo '</div>';
echo '<h3>Quick Links</h3>';
echo '<ul>';
echo '<li><a href="' . admin_url('admin.php?page=pc-hfap-snippets') . '">Manage Snippets</a></li>';
echo '<li><a href="' . admin_url('admin.php?page=pc-hfap-add-snippet') . '">Add New Snippet</a></li>';
echo '<li><a href="' . home_url() . '">View Site</a></li>';
echo '</ul>';
echo '</body></html>';