94 lines
2.6 KiB
PHP
94 lines
2.6 KiB
PHP
<?php
|
|
session_start();
|
|
header('Content-Type: application/json; charset=utf-8');
|
|
require_once 'db/config.php';
|
|
require_once 'includes/marketing_bootstrap.php';
|
|
|
|
if (!isset($_SESSION['user_id'])) {
|
|
http_response_code(403);
|
|
echo json_encode(['error' => 'Acceso no autorizado.']);
|
|
exit;
|
|
}
|
|
|
|
$data = json_decode(file_get_contents('php://input'), true);
|
|
|
|
if (!$data || !isset($data['id']) || !isset($data['field']) || !isset($data['value'])) {
|
|
http_response_code(400);
|
|
echo json_encode(['error' => 'Datos incompletos.']);
|
|
exit;
|
|
}
|
|
|
|
$video_id = (int)($data['id'] ?? 0);
|
|
$field = $data['field'];
|
|
$value = $data['value'];
|
|
|
|
if ($video_id <= 0) {
|
|
http_response_code(400);
|
|
echo json_encode(['error' => 'ID de video no válido.']);
|
|
exit;
|
|
}
|
|
|
|
if (is_array($value) || is_object($value)) {
|
|
http_response_code(400);
|
|
echo json_encode(['error' => 'Valor no válido.']);
|
|
exit;
|
|
}
|
|
|
|
$value = is_string($value) ? trim($value) : (string)$value;
|
|
if ($field === 'resultados' && $value === '') {
|
|
$value = null;
|
|
}
|
|
|
|
// Whitelist allowed fields for security
|
|
$allowed_fields = ['material', 'estado', 'angulo_video', 'observacion', 'resultados'];
|
|
if (!in_array($field, $allowed_fields, true)) {
|
|
http_response_code(400);
|
|
echo json_encode(['error' => 'Campo no permitido.']);
|
|
exit;
|
|
}
|
|
|
|
if ($field === 'estado') {
|
|
$allowedStatuses = ['PENDIENTE', 'EN PROCESO', 'TERMINADO', 'OBSERVADO', 'APROBADO', 'PUBLICADO'];
|
|
if (!in_array($value, $allowedStatuses, true)) {
|
|
http_response_code(400);
|
|
echo json_encode(['error' => 'Estado no permitido.']);
|
|
exit;
|
|
}
|
|
}
|
|
|
|
if ($field === 'resultados') {
|
|
$userRole = $_SESSION['user_role'] ?? ($_SESSION['role'] ?? '');
|
|
$isAdminUser = in_array($userRole, ['Administrador', 'admin'], true);
|
|
|
|
if (!$isAdminUser) {
|
|
http_response_code(403);
|
|
echo json_encode(['error' => 'Solo un administrador puede cambiar resultados.']);
|
|
exit;
|
|
}
|
|
|
|
$allowedResults = ['DESCONTINUADO', 'REDIMIENTO MEDIUM', 'BUEN RENDIMIENTO'];
|
|
if ($value !== null && !in_array($value, $allowedResults, true)) {
|
|
http_response_code(400);
|
|
echo json_encode(['error' => 'Resultado no permitido.']);
|
|
exit;
|
|
}
|
|
}
|
|
|
|
try {
|
|
$pdo = db();
|
|
marketing_ensure_schema($pdo);
|
|
|
|
$sql = "UPDATE marketing_videos SET $field = ? WHERE id = ?";
|
|
$stmt = $pdo->prepare($sql);
|
|
$stmt->execute([$value, $video_id]);
|
|
|
|
echo json_encode([
|
|
'success' => true,
|
|
'message' => 'Campo actualizado correctamente.'
|
|
]);
|
|
} catch (PDOException $e) {
|
|
http_response_code(500);
|
|
echo json_encode(['error' => 'Error al actualizar la base de datos: ' . $e->getMessage()]);
|
|
}
|
|
?>
|