164 lines
4.7 KiB
PHP
164 lines
4.7 KiB
PHP
<?php
|
|
// app/controllers/proveedores.php
|
|
|
|
session_start();
|
|
|
|
// 1) Composer autoload (phpdotenv y demás libs)
|
|
require_once __DIR__ . '/../../vendor/autoload.php';
|
|
|
|
// 2) Carga nuestro helper de entorno y dispara la carga de .env
|
|
require_once __DIR__ . '/../helpers/env.php';
|
|
loadEnv();
|
|
|
|
/**
|
|
* Obtiene (y cachea en sesión) el JWT de la API usando las credenciales de $_ENV
|
|
*/
|
|
function getApiToken(): ?string
|
|
{
|
|
if (!empty($_SESSION['api_token'])) {
|
|
return $_SESSION['api_token'];
|
|
}
|
|
|
|
$url = rtrim($_ENV['API_URL'] ?? '', '/') . '/auth/login';
|
|
$user = $_ENV['API_USER'] ?? '';
|
|
$pass = $_ENV['API_PASS'] ?? '';
|
|
$body = json_encode(['username'=>$user,'password'=>$pass]);
|
|
|
|
error_log("[getApiToken] POST $url → body: $body");
|
|
|
|
$ch = curl_init($url);
|
|
curl_setopt_array($ch, [
|
|
CURLOPT_POST => true,
|
|
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
|
|
CURLOPT_POSTFIELDS => $body,
|
|
CURLOPT_RETURNTRANSFER => true,
|
|
CURLOPT_TIMEOUT => 5,
|
|
]);
|
|
$resp = curl_exec($ch);
|
|
$http = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
|
curl_close($ch);
|
|
|
|
error_log("[getApiToken] HTTP $http → resp: $resp");
|
|
|
|
if ($http === 200 && ($data = json_decode($resp, true)) && !empty($data['token'])) {
|
|
$_SESSION['api_token'] = $data['token'];
|
|
return $data['token'];
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* GET /IMPORTADORES/proveedores
|
|
* Muestra la vista de listado
|
|
*/
|
|
function index()
|
|
{
|
|
lista();
|
|
}
|
|
|
|
function lista()
|
|
{
|
|
if (empty($_SESSION['usuario_id'])) {
|
|
header('Location: /IMPORTADORES/login');
|
|
exit;
|
|
}
|
|
include __DIR__ . '/../../views/proveedores/lista.php';
|
|
}
|
|
|
|
/**
|
|
* GET /IMPORTADORES/proveedores/ajax_lista
|
|
* Devuelve JSON para DataTables
|
|
*/
|
|
/**
|
|
* GET /IMPORTADORES/proveedores/ajax_lista
|
|
* Devuelve JSON para DataTables (siempre HTTP 200)
|
|
*/
|
|
function ajax_lista()
|
|
{
|
|
// 1) Fijamos el header JSON
|
|
header('Content-Type: application/json; charset=utf-8');
|
|
|
|
// 2) Obtener o renovar token
|
|
$token = getApiToken();
|
|
if (!$token) {
|
|
error_log('[ajax_lista] Sin token válido');
|
|
// Devolvemos estructura vacía
|
|
echo json_encode(['data' => []]);
|
|
return;
|
|
}
|
|
|
|
// 3) Construimos la URL de la API
|
|
$apiBase = rtrim($_ENV['API_URL'] ?? '', '/');
|
|
$url = $apiBase . '/proveedores';
|
|
error_log("[ajax_lista] GET $url");
|
|
|
|
// 4) Ejecutamos cURL
|
|
$ch = curl_init($url);
|
|
curl_setopt_array($ch, [
|
|
CURLOPT_HTTPHEADER => ["Authorization: $token", 'Accept: application/json'],
|
|
CURLOPT_RETURNTRANSFER => true,
|
|
CURLOPT_TIMEOUT => 5,
|
|
]);
|
|
$resp = curl_exec($ch);
|
|
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
|
curl_close($ch);
|
|
|
|
error_log("[ajax_lista] HTTP $status → $resp");
|
|
|
|
// 5) Parseamos y formateamos
|
|
$dataList = [];
|
|
if ($status === 200 && ($json = json_decode($resp, true)) && is_array($json)) {
|
|
foreach ($json as $p) {
|
|
$clave = htmlspecialchars($p['Clave'] ?? '', ENT_QUOTES);
|
|
$dataList[] = [
|
|
$clave,
|
|
htmlspecialchars($p['Nombre'] ?? '', ENT_QUOTES),
|
|
htmlspecialchars($p['RFC'] ?? '', ENT_QUOTES),
|
|
htmlspecialchars($p['Ciudad'] ?? '', ENT_QUOTES),
|
|
htmlspecialchars($p['Telefono']?? '', ENT_QUOTES),
|
|
// Acciones
|
|
"<a href=\"/IMPORTADORES/proveedores/editar?clave=" . rawurlencode($clave) . "\" class=\"btn btn-sm btn-primary\">✏️</a>
|
|
<button class=\"btn btn-sm btn-danger\" onclick=\"confirmDelete('{$clave}')\">🗑️</button>"
|
|
];
|
|
}
|
|
} else {
|
|
error_log('[ajax_lista] Respuesta inválida o status != 200');
|
|
}
|
|
|
|
// 6) Devolvemos siempre HTTP 200 con data (posiblemente vacío)
|
|
echo json_encode(['data' => $dataList]);
|
|
}
|
|
|
|
|
|
/**
|
|
* GET /IMPORTADORES/proveedores/eliminar
|
|
* Llama a DELETE /api/proveedores/:clave y redirige
|
|
*/
|
|
function eliminar()
|
|
{
|
|
$token = getApiToken();
|
|
$clave = $_GET['clave'] ?? '';
|
|
if (!$token || !$clave) {
|
|
header('Location: /IMPORTADORES/proveedores');
|
|
exit;
|
|
}
|
|
|
|
$url = rtrim($_ENV['API_URL'] ?? '', '/') . '/api/proveedores/' . urlencode($clave);
|
|
error_log("[eliminar] DELETE $url");
|
|
|
|
$ch = curl_init($url);
|
|
curl_setopt_array($ch, [
|
|
CURLOPT_CUSTOMREQUEST => 'DELETE',
|
|
CURLOPT_HTTPHEADER => ["Authorization: Bearer $token",'Accept: application/json'],
|
|
CURLOPT_RETURNTRANSFER => true,
|
|
CURLOPT_TIMEOUT => 5,
|
|
]);
|
|
curl_exec($ch);
|
|
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
|
curl_close($ch);
|
|
|
|
header('Location: /IMPORTADORES/proveedores?deleted=' . ($status===200||$status===204 ? 'ok':'error'));
|
|
exit;
|
|
}
|