upskill-event-manager/wordpress-dev/bin/fix-login-final.sh
bengizmo a82616b6f7 Fix dashboard data inconsistency and enhance test suite with WP API
- Fixed dashboard data class to use consistent post_author queries instead of mixed _EventOrganizerID meta queries
- This resolves the issue where dashboard showed 18 events but 0 tickets/revenue
- Added WordPress API credentials to environment (.env)
- Created comprehensive API debugging utilities (wp-api-debug.sh, wp-api-fix.sh, api-only-debug.sh)
- Enhanced test and deployment suite with WordPress REST API capabilities
- Root cause: get_total_tickets_sold() and get_total_revenue() were using _EventOrganizerID while other methods used post_author

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-22 19:24:18 -03:00

247 lines
No EOL
8.2 KiB
Bash
Executable file

#!/bin/bash
# Exit on error
set -e
# Source environment variables
if [ -f ".env" ]; then
source .env
else
echo "Error: .env file not found. Please create it with the required variables."
exit 1
fi
echo "===== Fixing Login Issues via PHP ====="
# Create a PHP script to fix login issues
echo "Creating PHP script to fix login issues..."
sshpass -p "$UPSKILL_STAGING_PASS" ssh -o StrictHostKeyChecking=no "$UPSKILL_STAGING_SSH_USER@$UPSKILL_STAGING_IP" "cd $UPSKILL_STAGING_PATH && cat > fix-login-issues.php << 'EOF'
<?php
// Load WordPress
require_once('wp-load.php');
echo \"Fixing Login Issues...\n\";
// 1. Re-enable login failure handler
echo \"1. Re-enabling login failure handler...\n\";
\$login_handler_path = WP_CONTENT_DIR . '/plugins/hvac-community-events/includes/community/class-login-handler.php';
if (file_exists(\$login_handler_path)) {
\$content = file_get_contents(\$login_handler_path);
if (strpos(\$content, '// add_action(\'wp_login_failed\'') !== false) {
\$fixed_content = str_replace(
'// add_action(\'wp_login_failed\', array($this, \'handle_login_failure\'));',
'add_action(\'wp_login_failed\', array($this, \'handle_login_failure\'));',
\$content
);
if (file_put_contents(\$login_handler_path, \$fixed_content)) {
echo \"Login failure handler re-enabled\n\";
} else {
echo \"Failed to update login handler file\n\";
}
} else {
echo \"Login failure handler already enabled\n\";
}
} else {
echo \"Login handler file not found\n\";
}
// 2. Create mu-plugin to disable caching
echo \"2. Creating mu-plugin to disable caching...\n\";
\$mu_plugin_dir = WP_CONTENT_DIR . '/mu-plugins';
if (!is_dir(\$mu_plugin_dir)) {
mkdir(\$mu_plugin_dir, 0755);
}
\$nocache_plugin_path = \$mu_plugin_dir . '/hvac-nocache.php';
\$nocache_plugin_content = '<?php
/**
* Plugin Name: HVAC No-Cache for Login
* Description: Prevents caching on login and dashboard pages
* Version: 1.0
*/
function hvac_disable_cache() {
// Check if we are on a login-related page
\$uri = isset(\$_SERVER[\"REQUEST_URI\"]) ? \$_SERVER[\"REQUEST_URI\"] : \"\";
\$disable_cache = false;
// Pages that should never be cached
\$no_cache_pages = array(
\"community-login\",
\"wp-login.php\",
\"hvac-dashboard\",
\"certificate-reports\",
\"generate-certificates\",
\"event-summary\"
);
foreach (\$no_cache_pages as \$page) {
if (strpos(\$uri, \$page) !== false) {
\$disable_cache = true;
break;
}
}
// Also disable cache for logged-in users or authentication attempts
if (is_user_logged_in() || isset(\$_POST[\"log\"]) || isset(\$_GET[\"login\"])) {
\$disable_cache = true;
}
if (\$disable_cache) {
// Define WordPress constant
if (!defined(\"DONOTCACHEPAGE\")) {
define(\"DONOTCACHEPAGE\", true);
}
// Set no-cache headers
header(\"Cache-Control: no-store, no-cache, must-revalidate, max-age=0\");
header(\"Pragma: no-cache\");
}
}
add_action(\"init\", \"hvac_disable_cache\", 0);
// Disable Breeze caching for logged-in users
function hvac_disable_breeze_cache() {
if (is_user_logged_in()) {
add_filter(\"breeze_skip_cache\", \"__return_true\");
}
}
add_action(\"init\", \"hvac_disable_breeze_cache\");
';
if (file_put_contents(\$nocache_plugin_path, \$nocache_plugin_content)) {
echo \"No-cache plugin created successfully\n\";
} else {
echo \"Failed to create no-cache plugin\n\";
}
// 3. Fix test_trainer user
echo \"3. Verifying test_trainer user...\n\";
\$user = get_user_by('login', 'test_trainer');
if (\$user) {
// Reset password just to be sure
wp_set_password('test_password', \$user->ID);
echo \"Password reset for test_trainer\n\";
// Clear user sessions
\$sessions = WP_Session_Tokens::get_instance(\$user->ID);
\$sessions->destroy_all();
echo \"All sessions cleared for test_trainer\n\";
// Verify role
\$user_meta = get_userdata(\$user->ID);
if (!\$user_meta->roles || !in_array('hvac_trainer', \$user_meta->roles)) {
\$user->add_role('hvac_trainer');
echo \"Added hvac_trainer role\n\";
} else {
echo \"User already has hvac_trainer role\n\";
}
// Make sure user has the right capabilities
if (!user_can(\$user->ID, 'view_hvac_dashboard')) {
\$role = get_role('hvac_trainer');
if (\$role) {
\$role->add_cap('view_hvac_dashboard', true);
echo \"Added view_hvac_dashboard capability to hvac_trainer role\n\";
}
} else {
echo \"User already has view_hvac_dashboard capability\n\";
}
} else {
echo \"test_trainer user not found\n\";
}
// 4. Clear Breeze cache
echo \"4. Clearing Breeze cache...\n\";
if (function_exists('breeze_cache_flush')) {
breeze_cache_flush();
echo \"Cache cleared via function\n\";
} else {
// Try manually clearing cache directories
\$cache_dirs = array(
WP_CONTENT_DIR . '/cache/breeze',
WP_CONTENT_DIR . '/uploads/breeze/css',
WP_CONTENT_DIR . '/uploads/breeze/js'
);
\$cleared = false;
foreach (\$cache_dirs as \$dir) {
if (is_dir(\$dir)) {
\$files = glob(\$dir . '/*');
if (\$files) {
foreach (\$files as \$file) {
if (is_file(\$file)) {
@unlink(\$file);
}
}
}
echo \"Cleared cache directory: \$dir\n\";
\$cleared = true;
}
}
if (!\$cleared) {
echo \"No cache directories found to clear\n\";
}
}
// 5. Check Breeze settings
echo \"5. Checking Breeze settings...\n\";
\$breeze_basic = get_option('breeze_basic_settings');
if (\$breeze_basic && is_array(\$breeze_basic)) {
// Make sure cache is disabled for logged-in users
\$breeze_advanced = get_option('breeze_advanced_settings');
if (\$breeze_advanced && is_array(\$breeze_advanced)) {
if (!isset(\$breeze_advanced['breeze-disable-admin']) || \$breeze_advanced['breeze-disable-admin'] != '1') {
\$breeze_advanced['breeze-disable-admin'] = '1';
update_option('breeze_advanced_settings', \$breeze_advanced);
echo \"Updated Breeze to disable cache for logged-in users\n\";
} else {
echo \"Breeze already disables cache for logged-in users\n\";
}
}
// Add login pages to no-cache list
\$no_cache_pages = isset(\$breeze_basic['no-cache-pages']) ? \$breeze_basic['no-cache-pages'] : '';
\$pages_to_add = array('/community-login/', '/wp-login.php', '/hvac-dashboard/');
\$updated = false;
foreach (\$pages_to_add as \$page) {
if (strpos(\$no_cache_pages, \$page) === false) {
\$no_cache_pages .= (!empty(\$no_cache_pages) ? ', ' : '') . \$page;
\$updated = true;
}
}
if (\$updated) {
\$breeze_basic['no-cache-pages'] = \$no_cache_pages;
update_option('breeze_basic_settings', \$breeze_basic);
echo \"Added login pages to Breeze no-cache list\n\";
} else {
echo \"Login pages already in Breeze no-cache list\n\";
}
} else {
echo \"Breeze settings not found\n\";
}
echo \"\nLogin Issues Fixed\n\";
echo \"You should now be able to log in with test_trainer / test_password\n\";
// Return login URLs for testing
\$login_url = site_url('/community-login/');
\$dashboard_url = site_url('/hvac-dashboard/');
echo \"\nTest URLs:\n\";
echo \"Login: \$login_url\n\";
echo \"Dashboard: \$dashboard_url\n\";
EOF"
# Execute the PHP script
echo "Executing login fix script..."
sshpass -p "$UPSKILL_STAGING_PASS" ssh -o StrictHostKeyChecking=no "$UPSKILL_STAGING_SSH_USER@$UPSKILL_STAGING_IP" "cd $UPSKILL_STAGING_PATH && php fix-login-issues.php"
# Clean up
sshpass -p "$UPSKILL_STAGING_PASS" ssh -o StrictHostKeyChecking=no "$UPSKILL_STAGING_SSH_USER@$UPSKILL_STAGING_IP" "cd $UPSKILL_STAGING_PATH && rm fix-login-issues.php"
echo -e "\n===== Login Fixes Applied ====="
echo "The login issues for the test_trainer user should now be resolved."
echo "Please try logging in with username 'test_trainer' and password 'test_password'."