Files
whatsapp/test_config_system.php
T
2026-01-12 11:06:43 -05:00

452 lines
18 KiB
PHP

<?php
/**
* Script de prueba para el sistema de configuraciones
* Permite probar todas las funciones de manejo de configuraciones
*/
require_once 'config/config.php';
?>
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Prueba Sistema de Configuraciones</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container mt-4">
<h1 class="mb-4">🔧 Prueba Sistema de Configuraciones</h1>
<?php if (!isInstallationCompleted()): ?>
<div class="alert alert-warning">
<strong>⚠️ Instalación no completada:</strong> Algunas funciones pueden no estar disponibles.
</div>
<?php endif; ?>
<!-- Información del sistema -->
<div class="card mb-4">
<div class="card-header">
<h5>📊 Estado del Sistema</h5>
</div>
<div class="card-body">
<div class="row">
<div class="col-md-6">
<p><strong>Instalación completada:</strong> <?= isInstallationCompleted() ? '✅ Sí' : '❌ No' ?></p>
<p><strong>Sistema migrado:</strong> <?= isAuthSystemMigrated() ? '✅ Sí' : '❌ No' ?></p>
<p><strong>BD conectada:</strong>
<?php
try {
$pdo = createDbConnection();
echo '✅ Conectada';
} catch (Exception $e) {
echo '❌ Error: ' . $e->getMessage();
}
?>
</p>
</div>
<div class="col-md-6">
<p><strong>Tabla system_config:</strong>
<?php
try {
$pdo = createDbConnection();
$exists = $pdo->query("SHOW TABLES LIKE 'system_config'")->rowCount() > 0;
if ($exists) {
$count = $pdo->query("SELECT COUNT(*) as total FROM system_config")->fetch()['total'];
echo "✅ Existe ($count registros)";
} else {
echo '❌ No existe';
}
} catch (Exception $e) {
echo '❌ Error: ' . $e->getMessage();
}
?>
</p>
</div>
</div>
</div>
</div>
<!-- Pruebas de configuración -->
<div class="row">
<div class="col-md-6">
<!-- Probar guardar configuración -->
<div class="card mb-3">
<div class="card-header">
<h6>💾 Probar Guardar Configuración</h6>
</div>
<div class="card-body">
<form id="testSaveForm">
<div class="mb-2">
<input type="text" class="form-control" name="key" placeholder="Clave" value="test_key_<?= time() ?>" required>
</div>
<div class="mb-2">
<input type="text" class="form-control" name="value" placeholder="Valor" value="Valor de prueba" required>
</div>
<div class="mb-2">
<input type="text" class="form-control" name="description" placeholder="Descripción (opcional)" value="Configuración de prueba">
</div>
<button type="submit" class="btn btn-primary btn-sm">Guardar</button>
</form>
<div id="saveResult" class="mt-2"></div>
</div>
</div>
<!-- Probar obtener configuración -->
<div class="card mb-3">
<div class="card-header">
<h6>📖 Probar Obtener Configuración</h6>
</div>
<div class="card-body">
<form id="testGetForm">
<div class="mb-2">
<input type="text" class="form-control" name="key" placeholder="Clave a buscar" required>
</div>
<button type="submit" class="btn btn-info btn-sm">Obtener</button>
</form>
<div id="getResult" class="mt-2"></div>
</div>
</div>
</div>
<div class="col-md-6">
<!-- Probar configuración de WhatsApp -->
<div class="card mb-3">
<div class="card-header">
<h6>📱 Configuración WhatsApp</h6>
</div>
<div class="card-body">
<form id="testWhatsAppForm">
<div class="mb-2">
<input type="text" class="form-control" name="token" placeholder="Token de WhatsApp">
</div>
<div class="mb-2">
<input type="text" class="form-control" name="phone_number_id" placeholder="Phone Number ID">
</div>
<div class="mb-2">
<input type="text" class="form-control" name="webhook_verify_token" placeholder="Webhook Token">
</div>
<button type="submit" class="btn btn-success btn-sm">Guardar WhatsApp</button>
</form>
<div id="whatsappResult" class="mt-2"></div>
</div>
</div>
<!-- Acciones del sistema -->
<div class="card">
<div class="card-header">
<h6>🔧 Acciones del Sistema</h6>
</div>
<div class="card-body">
<button onclick="initializeDefaults()" class="btn btn-warning btn-sm mb-2">Inicializar Defaults</button><br>
<button onclick="migrateConfigs()" class="btn btn-secondary btn-sm mb-2">Migrar a BD</button><br>
<button onclick="clearCache()" class="btn btn-danger btn-sm mb-2">Limpiar Cache</button><br>
<button onclick="getAllConfigs()" class="btn btn-primary btn-sm">Ver Todas</button>
<div id="systemResult" class="mt-2"></div>
</div>
</div>
</div>
</div>
<!-- Configuraciones actuales -->
<div class="card mt-4">
<div class="card-header d-flex justify-content-between">
<h5>📋 Configuraciones Actuales</h5>
<button onclick="refreshConfigs()" class="btn btn-outline-primary btn-sm">🔄 Actualizar</button>
</div>
<div class="card-body">
<div id="currentConfigs">
<div class="text-center text-muted">
<div class="spinner-border spinner-border-sm" role="status"></div>
Cargando configuraciones...
</div>
</div>
</div>
</div>
<!-- Validación de WhatsApp -->
<div class="card mt-4">
<div class="card-header">
<h5>✅ Validación WhatsApp</h5>
</div>
<div class="card-body">
<div id="whatsappValidation">
<div class="text-center text-muted">
<div class="spinner-border spinner-border-sm" role="status"></div>
Validando configuración...
</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
<script>
// Funciones para probar la API
// Guardar configuración individual
document.getElementById('testSaveForm').addEventListener('submit', async function(e) {
e.preventDefault();
const formData = new FormData(e.target);
try {
const response = await fetch('api/manage_config.php?action=save', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
key: formData.get('key'),
value: formData.get('value'),
description: formData.get('description')
})
});
const result = await response.json();
document.getElementById('saveResult').innerHTML = result.success ?
'<div class="alert alert-success alert-sm">✅ ' + result.message + '</div>' :
'<div class="alert alert-danger alert-sm">❌ ' + result.message + '</div>';
if (result.success) {
refreshConfigs();
}
} catch (error) {
document.getElementById('saveResult').innerHTML =
'<div class="alert alert-danger alert-sm">❌ Error: ' + error.message + '</div>';
}
});
// Obtener configuración
document.getElementById('testGetForm').addEventListener('submit', async function(e) {
e.preventDefault();
const formData = new FormData(e.target);
const key = formData.get('key');
try {
const response = await fetch(`api/manage_config.php?action=get&key=${encodeURIComponent(key)}`);
const result = await response.json();
if (result.success) {
const data = result.data;
const html = `
<div class="alert alert-${data.exists ? 'success' : 'warning'} alert-sm">
<strong>Clave:</strong> ${data.key}<br>
<strong>Valor:</strong> ${data.value || '(vacío)'}<br>
<strong>Existe:</strong> ${data.exists ? 'Sí' : 'No'}
</div>
`;
document.getElementById('getResult').innerHTML = html;
} else {
document.getElementById('getResult').innerHTML =
'<div class="alert alert-danger alert-sm">❌ Error: ' + result.error + '</div>';
}
} catch (error) {
document.getElementById('getResult').innerHTML =
'<div class="alert alert-danger alert-sm">❌ Error: ' + error.message + '</div>';
}
});
// Guardar configuración de WhatsApp
document.getElementById('testWhatsAppForm').addEventListener('submit', async function(e) {
e.preventDefault();
const formData = new FormData(e.target);
try {
const response = await fetch('api/manage_config.php?action=save_whatsapp', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
whatsapp: {
token: formData.get('token'),
phone_number_id: formData.get('phone_number_id'),
webhook_verify_token: formData.get('webhook_verify_token')
}
})
});
const result = await response.json();
let html = result.success ?
'<div class="alert alert-success alert-sm">✅ ' + result.message + '</div>' :
'<div class="alert alert-danger alert-sm">❌ ' + result.message + '</div>';
if (result.validation) {
html += `
<div class="mt-2">
<small>
<strong>Estado:</strong> ${result.validation.valid ? '✅ Válido' : '❌ Inválido'}<br>
<strong>Errores:</strong> ${result.validation.errors.join(', ') || 'Ninguno'}<br>
<strong>Advertencias:</strong> ${result.validation.warnings.join(', ') || 'Ninguna'}
</small>
</div>
`;
}
document.getElementById('whatsappResult').innerHTML = html;
if (result.success) {
refreshConfigs();
refreshWhatsAppValidation();
}
} catch (error) {
document.getElementById('whatsappResult').innerHTML =
'<div class="alert alert-danger alert-sm">❌ Error: ' + error.message + '</div>';
}
});
// Inicializar configuraciones por defecto
async function initializeDefaults() {
try {
const response = await fetch('api/manage_config.php?action=initialize_defaults', {
method: 'POST'
});
const result = await response.json();
document.getElementById('systemResult').innerHTML = result.success ?
'<div class="alert alert-success alert-sm">✅ ' + result.message + '</div>' :
'<div class="alert alert-danger alert-sm">❌ ' + result.message + '</div>';
if (result.success) {
refreshConfigs();
}
} catch (error) {
document.getElementById('systemResult').innerHTML =
'<div class="alert alert-danger alert-sm">❌ Error: ' + error.message + '</div>';
}
}
// Migrar configuraciones
async function migrateConfigs() {
try {
const response = await fetch('api/manage_config.php?action=migrate_to_database', {
method: 'POST'
});
const result = await response.json();
document.getElementById('systemResult').innerHTML = result.success ?
'<div class="alert alert-success alert-sm">✅ ' + result.message + '</div>' :
'<div class="alert alert-danger alert-sm">❌ ' + result.message + '</div>';
if (result.success) {
refreshConfigs();
}
} catch (error) {
document.getElementById('systemResult').innerHTML =
'<div class="alert alert-danger alert-sm">❌ Error: ' + error.message + '</div>';
}
}
// Limpiar cache
async function clearCache() {
try {
const response = await fetch('api/manage_config.php?action=clear_cache', {
method: 'DELETE'
});
const result = await response.json();
document.getElementById('systemResult').innerHTML = result.success ?
'<div class="alert alert-success alert-sm">✅ ' + result.message + '</div>' :
'<div class="alert alert-danger alert-sm">❌ ' + result.message + '</div>';
} catch (error) {
document.getElementById('systemResult').innerHTML =
'<div class="alert alert-danger alert-sm">❌ Error: ' + error.message + '</div>';
}
}
// Obtener todas las configuraciones
async function getAllConfigs() {
refreshConfigs();
}
// Actualizar lista de configuraciones
async function refreshConfigs() {
try {
const response = await fetch('api/manage_config.php?action=all');
const result = await response.json();
if (result.success) {
const configs = result.data;
let html = '';
if (Object.keys(configs).length === 0) {
html = '<div class="text-muted text-center">No hay configuraciones guardadas</div>';
} else {
html = '<div class="table-responsive"><table class="table table-sm table-striped">';
html += '<thead><tr><th>Clave</th><th>Valor</th><th>Descripción</th><th>Actualizado</th></tr></thead><tbody>';
for (const [key, config] of Object.entries(configs)) {
const value = config.value ? (config.value.length > 50 ? config.value.substring(0, 50) + '...' : config.value) : '(vacío)';
html += `
<tr>
<td><code>${key}</code></td>
<td>${value}</td>
<td><small>${config.description || '—'}</small></td>
<td><small>${config.updated_at || config.created_at}</small></td>
</tr>
`;
}
html += '</tbody></table></div>';
}
document.getElementById('currentConfigs').innerHTML = html;
}
} catch (error) {
document.getElementById('currentConfigs').innerHTML =
'<div class="alert alert-danger">Error cargando configuraciones: ' + error.message + '</div>';
}
}
// Actualizar validación de WhatsApp
async function refreshWhatsAppValidation() {
try {
const response = await fetch('api/manage_config.php?action=validate_whatsapp');
const result = await response.json();
if (result.success) {
const validation = result.data;
let html = `
<div class="alert alert-${validation.valid ? 'success' : 'warning'}">
<h6>${validation.valid ? '✅ Configuración válida' : '⚠️ Configuración incompleta'}</h6>
`;
if (validation.errors.length > 0) {
html += '<p><strong>Errores:</strong></p><ul>';
validation.errors.forEach(error => {
html += `<li>${error}</li>`;
});
html += '</ul>';
}
if (validation.warnings.length > 0) {
html += '<p><strong>Advertencias:</strong></p><ul>';
validation.warnings.forEach(warning => {
html += `<li>${warning}</li>`;
});
html += '</ul>';
}
html += '<p><strong>Campos configurados:</strong></p><ul>';
for (const [field, configured] of Object.entries(validation.configured_fields)) {
html += `<li>${field}: ${configured ? '✅' : '❌'}</li>`;
}
html += '</ul></div>';
document.getElementById('whatsappValidation').innerHTML = html;
}
} catch (error) {
document.getElementById('whatsappValidation').innerHTML =
'<div class="alert alert-danger">Error validando WhatsApp: ' + error.message + '</div>';
}
}
// Cargar datos iniciales
refreshConfigs();
refreshWhatsAppValidation();
</script>
</body>
</html>