PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]); $success[] = "✅ Conexión exitosa a '{$dbName}'"; // Ejecutar schema - PASO 1: Crear solo las tablas $tablesCreated = 0; $creationErrors = []; echo ""; foreach ($integratedSchema as $index => $sql) { try { echo ""; $result = $pdo->exec($sql); $tablesCreated++; // Extraer nombre de tabla para log if (preg_match('/CREATE TABLE IF NOT EXISTS (\w+)/', $sql, $matches)) { $tableName = $matches[1]; $success[] = "✅ Tabla '{$tableName}' creada/verificada"; // Verificar que la tabla realmente existe try { $checkQuery = "DESCRIBE `{$tableName}`"; $pdo->query($checkQuery); } catch (PDOException $e) { $creationErrors[] = "❌ Error verificando tabla '{$tableName}': " . $e->getMessage(); } } // Pequeña pausa para evitar problemas de timing usleep(100000); // 0.1 segundos } catch (PDOException $e) { $errorMsg = $e->getMessage(); if (strpos($errorMsg, 'already exists') === false) { $creationErrors[] = "❌ Error en tabla " . ($index + 1) . ": " . $errorMsg; } else { $tablesCreated++; // Contar como creada si ya existe } } } // Mostrar errores de creación si los hay if (!empty($creationErrors)) { foreach ($creationErrors as $error) { $errors[] = $error; } } // Solo continuar si se crearon las tablas principales $essentialTables = ['users', 'conversations', 'menus', 'system_config']; $missingTables = []; foreach ($essentialTables as $table) { try { $pdo->query("DESCRIBE `{$table}`"); } catch (PDOException $e) { $missingTables[] = $table; } } if (!empty($missingTables)) { $errors[] = "❌ Tablas esenciales no creadas: " . implode(', ', $missingTables); $errors[] = "ℹ️ Intenta ejecutar el SQL manualmente en phpMyAdmin primero"; } else { $success[] = "✅ Todas las tablas esenciales verificadas"; // PASO 2: Insertar datos solo si las tablas existen $dataInserted = 0; foreach ($initialData as $sql) { try { $pdo->exec($sql); $dataInserted++; } catch (PDOException $e) { $errorMsg = $e->getMessage(); if (strpos($errorMsg, 'Duplicate entry') === false) { $errors[] = "⚠️ Error insertando datos: " . $errorMsg; } } } $success[] = "✅ {$tablesCreated} tablas procesadas, {$dataInserted} conjuntos de datos insertados"; } // Actualizar config.php $configFile = 'config/config.php'; if (file_exists($configFile)) { $config = file_get_contents($configFile); $config = preg_replace("/define\('DB_HOST',\s*'[^']*'\);/", "define('DB_HOST', '$dbHost');", $config); $config = preg_replace("/define\('DB_PORT',\s*'[^']*'\);/", "define('DB_PORT', '$dbPort');", $config); $config = preg_replace("/define\('DB_NAME',\s*'[^']*'\);/", "define('DB_NAME', '$dbName');", $config); $config = preg_replace("/define\('DB_USER',\s*'[^']*'\);/", "define('DB_USER', '$dbUser');", $config); $config = preg_replace("/define\('DB_PASS',\s*'[^']*'\);/", "define('DB_PASS', '$dbPass');", $config); $config = preg_replace("/define\('ADMIN_PASSWORD',\s*'[^']*'\);/", "define('ADMIN_PASSWORD', '" . password_hash($adminPassword, PASSWORD_DEFAULT) . "');", $config); // Auto-detectar URL $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https://' : 'http://'; $host = $_SERVER['HTTP_HOST']; $path = dirname($_SERVER['SCRIPT_NAME']); $autoUrl = $protocol . $host . $path; $config = preg_replace("/define\('APP_URL',\s*'[^']*'\);/", "define('APP_URL', '$autoUrl');", $config); if (file_put_contents($configFile, $config)) { $success[] = "✅ Configuración actualizada"; } else { $errors[] = "❌ No se pudo actualizar config.php"; } } // Verificar instalación if (empty($errors)) { try { $userCount = $pdo->query("SELECT COUNT(*) FROM users")->fetchColumn(); $configCount = $pdo->query("SELECT COUNT(*) FROM system_config")->fetchColumn(); $success[] = "✅ Verificación: {$userCount} usuarios, {$configCount} configuraciones"; // Marcar como instalado file_put_contents('.installation_completed', date('Y-m-d H:i:s')); // Credenciales $credentials = "USUARIO: admin\nCONTRASEÑA: {$adminPassword}\nFECHA: " . date('Y-m-d H:i:s'); file_put_contents('CREDENCIALES.txt', $credentials); $success[] = "✅ Instalación completada exitosamente"; $step = 'completed'; } catch (Exception $e) { $errors[] = "❌ Error en verificación: " . $e->getMessage(); } } } catch (PDOException $e) { $errors[] = "❌ Error de conexión: " . $e->getMessage(); } } } ?>
Evita problemas de parsing del archivo schema.sql
Sistema WhatsApp Bot instalado correctamente
= $adminPassword ?>