452 lines
18 KiB
PHP
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>
|