C. srv / producto-agrega.php

1<?php
2
3require_once __DIR__ . "/../lib/php/BAD_REQUEST.php";
4require_once __DIR__ . "/../lib/php/ejecutaServicio.php";
5require_once __DIR__ . "/../lib/php/recuperaBytes.php";
6require_once __DIR__ . "/../lib/php/recuperaTexto.php";
7require_once __DIR__ . "/../lib/php/validaNombre.php";
8require_once __DIR__ . "/../lib/php/ProblemDetails.php";
9require_once __DIR__ . "/../lib/php/insert.php";
10require_once __DIR__ . "/../lib/php/devuelveCreated.php";
11require_once __DIR__ . "/Bd.php";
12require_once __DIR__ . "/TABLA_PRODUCTO.php";
13require_once __DIR__ . "/TABLA_ARCHIVO.php";
14require_once __DIR__ . "/validaImagen.php";
15
16ejecutaServicio(function () {
17
18 $nombre = recuperaTexto("nombre");
19 $bytes = recuperaBytes("imagen");
20
21 $nombre = validaNombre($nombre);
22 $bytes = validaImagen($bytes);
23
24 if ($bytes === "") {
25 throw new ProblemDetails(
26 status: BAD_REQUEST,
27 title: "Imagen vacía.",
28 type: "/error/imagenvacia.html",
29 detail: "Selecciona un archivo que no esté vacío."
30 );
31 }
32
33 $pdo = Bd::pdo();
34 $pdo->beginTransaction();
35
36 insert(pdo: $pdo, into: ARCHIVO, values: [ARCH_BYTES => $bytes]);
37 $archId = $pdo->lastInsertId();
38
39 insert(
40 pdo: $pdo,
41 into: PRODUCTO,
42 values: [PROD_NOMBRE => $nombre, ARCH_ID => $archId]
43 );
44 $id = $pdo->lastInsertId();
45
46 $pdo->commit();
47
48 $encodeId = urlencode($id);
49 $encodeArchId = urlencode($archId);
50 $htmlEncodeArchId = htmlentities($encodeArchId);
51 // Los bytes se descargan con "archivo.php"; no desde aquí.
52 devuelveCreated("/srv/producto.php?id=$encodeId", [
53 "id" => ["value" => $id],
54 "nombre" => ["value" => $nombre],
55 "imagen" => ["data-file" => "srv/archivo.php?id=$htmlEncodeArchId"]
56 ]);
57});
58
skip_previous skip_next