E. srv / producto-modifica.php

1<?php
2
3require_once __DIR__ . "/../lib/php/NOT_FOUND.php";
4require_once __DIR__ . "/../lib/php/ejecutaServicio.php";
5require_once __DIR__ . "/../lib/php/recuperaIdEntero.php";
6require_once __DIR__ . "/../lib/php/recuperaTexto.php";
7require_once __DIR__ . "/../lib/php/recuperaBytes.php";
8require_once __DIR__ . "/../lib/php/validaNombre.php";
9require_once __DIR__ . "/../lib/php/selectFirst.php";
10require_once __DIR__ . "/../lib/php/ProblemDetails.php";
11require_once __DIR__ . "/../lib/php/insert.php";
12require_once __DIR__ . "/../lib/php/update.php";
13require_once __DIR__ . "/../lib/php/devuelveJson.php";
14require_once __DIR__ . "/Bd.php";
15require_once __DIR__ . "/TABLA_PRODUCTO.php";
16require_once __DIR__ . "/TABLA_ARCHIVO.php";
17require_once __DIR__ . "/validaImagen.php";
18
19ejecutaServicio(function () {
20
21 $prodId = recuperaIdEntero("id");
22 $nombre = recuperaTexto("nombre");
23 $bytes = recuperaBytes("imagen");
24
25 $nombre = validaNombre($nombre);
26 $bytes = validaImagen($bytes);
27
28 $pdo = Bd::pdo();
29 $pdo->beginTransaction();
30
31 $producto =
32 selectFirst(pdo: $pdo, from: PRODUCTO, where: [PROD_ID => $prodId]);
33
34 if ($producto === false) {
35 $prodIdHtml = htmlentities($prodId);
36 throw new ProblemDetails(
37 status: NOT_FOUND,
38 title: "Producto no encontrado.",
39 type: "/error/productonoencontrado.html",
40 detail: "No se encontró ningún producto con el id $prodIdHtml.",
41 );
42 }
43
44 $archId = $producto[ARCH_ID];
45
46 if ($bytes !== "") {
47 if ($archId === null) {
48 insert(pdo: $pdo, into: ARCHIVO, values: [ARCH_BYTES => $bytes]);
49 $archId = $pdo->lastInsertId();
50 } else {
51 update(
52 pdo: $pdo,
53 table: ARCHIVO,
54 set: [ARCH_BYTES => $bytes],
55 where: [ARCH_ID => $archId]
56 );
57 }
58 }
59
60 update(
61 pdo: $pdo,
62 table: PRODUCTO,
63 set: [PROD_NOMBRE => $nombre, ARCH_ID => $archId],
64 where: [PROD_ID => $prodId]
65 );
66
67 $pdo->commit();
68
69 $encodeArchId = $archId === null ? "" : urlencode($archId);
70 $htmlEncodeArchId = htmlentities($encodeArchId);
71 // Los bytes se descargan con "archivo.php"; no desde aquí.
72 devuelveJson([
73 "id" => ["value" => $prodId],
74 "nombre" => ["value" => $nombre],
75 "imagen" => [
76 "data-file" => $htmlEncodeArchId === ""
77 ? ""
78 : "srv/archivo.php?id=$htmlEncodeArchId"
79 ]
80 ]);
81});
82
skip_previous skip_next