'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; // Whitelist allowed fields for security $allowed_fields = ['material', 'estado', 'angulo_video', 'observacion']; 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; } } 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()]); } ?>