PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC]
);
echo '
';
// Verificar si ya está migrado
$checkTable = $pdo->query("SHOW TABLES LIKE 'admin_users'");
$alreadyMigrated = $checkTable->rowCount() > 0;
if ($alreadyMigrated && !isset($_GET['force'])) {
echo '
';
exit;
}
// Ejecutar migración
if (isset($_GET['migrate']) || isset($_GET['force'])) {
echo '
';
echo '
🚀 Ejecutando Migración...
';
$steps = [
'create_table' => 'Crear tabla admin_users',
'migrate_admin' => 'Migrar usuario administrador existente',
'verify_data' => 'Verificar datos migrados',
'update_config' => 'Actualizar configuración del sistema'
];
$results = [];
// Paso 1: Crear tabla
echo '
';
echo '
📋 Paso 1: Creando tabla admin_users...
';
try {
if ($alreadyMigrated) {
$pdo->exec("DROP TABLE IF EXISTS admin_users");
echo '
- Tabla existente eliminada (re-migración)
';
}
$createTableSQL = "
CREATE TABLE admin_users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
full_name VARCHAR(100),
email VARCHAR(100),
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
last_login TIMESTAMP NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci";
$pdo->exec($createTableSQL);
echo '
✅ Tabla admin_users creada exitosamente
';
$results['create_table'] = true;
} catch (Exception $e) {
echo '
❌ Error creando tabla: ' . $e->getMessage() . '
';
$results['create_table'] = false;
}
echo '
';
// Paso 2: Migrar usuario admin
echo '
';
echo '
👤 Paso 2: Migrando usuario administrador...
';
try {
if (defined('ADMIN_PASSWORD')) {
$stmt = $pdo->prepare("
INSERT INTO admin_users (username, password_hash, full_name, email, is_active)
VALUES (?, ?, ?, ?, ?)
");
$stmt->execute([
'admin',
ADMIN_PASSWORD, // Ya está hasheado
'Administrador Principal',
'admin@' . ($_SERVER['HTTP_HOST'] ?? 'localhost'),
1
]);
echo '
✅ Usuario admin migrado con contraseña existente
';
echo '
- Usuario: admin
';
echo '
- Contraseña: La misma que usabas antes
';
$results['migrate_admin'] = true;
} else {
echo '
❌ No se encontró ADMIN_PASSWORD en config.php
';
$results['migrate_admin'] = false;
}
} catch (Exception $e) {
echo '
❌ Error migrando admin: ' . $e->getMessage() . '
';
$results['migrate_admin'] = false;
}
echo '
';
// Paso 3: Verificar datos
echo '
';
echo '
🔍 Paso 3: Verificando datos migrados...
';
try {
$stmt = $pdo->query("SELECT * FROM admin_users");
$admins = $stmt->fetchAll();
if (empty($admins)) {
echo '
❌ No se encontraron administradores en la tabla
';
$results['verify_data'] = false;
} else {
echo '
✅ Verificación exitosa. Administradores encontrados:
';
foreach ($admins as $admin) {
echo '
';
echo 'ID: ' . $admin['id'] . ' | Usuario: ' . $admin['username'] . ' | Activo: ' . ($admin['is_active'] ? 'Sí' : 'No');
echo '
';
}
$results['verify_data'] = true;
}
} catch (Exception $e) {
echo '
❌ Error verificando datos: ' . $e->getMessage() . '
';
$results['verify_data'] = false;
}
echo '
';
// Paso 4: Actualizar configuración
echo '
';
echo '
⚙️ Paso 4: Actualizando configuración del sistema...
';
// Marcar migración completada
$migrationFlag = dirname(__FILE__) . '/.auth_migrated';
if (file_put_contents($migrationFlag, date('Y-m-d H:i:s'))) {
echo '
✅ Flag de migración creado
';
} else {
echo '
⚠️ No se pudo crear flag de migración
';
}
echo '
✅ Sistema configurado para usar autenticación por BD
';
$results['update_config'] = true;
echo '
';
// Resumen final
$allSuccess = !in_array(false, $results);
if ($allSuccess) {
echo '
';
echo '
🎉 ¡Migración Completada Exitosamente!
';
echo '
El sistema de autenticación ha sido migrado exitosamente a la base de datos.
';
echo '
📋 Qué cambió:
';
echo '
';
echo '- ✅ Las contraseñas se almacenan ahora en la tabla
admin_users ';
echo '- ✅ Se mantiene retrocompatibilidad durante la transición
';
echo '- ✅ El login ahora usa el nuevo sistema unificado
';
echo '- ✅ Se pueden crear múltiples administradores
';
echo '
';
echo '
🛠️ Gestionar Administradores
';
echo '
🔐 Probar Login
';
echo '
';
} else {
echo '
';
echo '
❌ Migración Parcial o con Errores
';
echo '
Algunos pasos fallaron. Revisa los errores arriba y contacta soporte si es necesario.
';
echo '
';
}
echo '
'; // Cierre progress-box
} else {
// Mostrar información pre-migración
echo '
';
}
} catch (Exception $e) {
echo '