Files
yogibook_aury_new/public/product_upload.php
T

59 lines
2.1 KiB
PHP

<?php
ob_start();
require_once('include/headscript.php');
require_once('include/csrf.php');
/**
* Catalogo prodotti - upload immagine (copertina o galleria).
* Salva in uploads/schools/{idschool}/products/ e restituisce il percorso relativo.
*/
function jsonOut(array $payload, int $code = 200): void
{
if (ob_get_length() !== false) {
ob_end_clean();
}
http_response_code($code);
header('Content-Type: application/json; charset=utf-8');
echo json_encode($payload, JSON_UNESCAPED_UNICODE);
exit;
}
if (!SchoolContext::isSchoolAdmin()) {
jsonOut(['ok' => false, 'error' => 'Accesso non autorizzato.'], 403);
}
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
jsonOut(['ok' => false, 'error' => 'Metodo non consentito.'], 405);
}
if (!yb_csrf_valid()) {
jsonOut(['ok' => false, 'error' => 'Sessione scaduta: ricarica la pagina.'], 403);
}
$f = $_FILES['image'] ?? null;
if (!is_array($f) || ($f['error'] ?? UPLOAD_ERR_NO_FILE) !== UPLOAD_ERR_OK || !is_uploaded_file($f['tmp_name'])) {
jsonOut(['ok' => false, 'error' => 'Nessun file ricevuto.'], 400);
}
if ($f['size'] > 5 * 1024 * 1024) {
jsonOut(['ok' => false, 'error' => "L'immagine supera i 5 MB."], 400);
}
$mime = (new finfo(FILEINFO_MIME_TYPE))->file($f['tmp_name']);
$exts = ['image/jpeg' => 'jpg', 'image/png' => 'png', 'image/webp' => 'webp', 'image/gif' => 'gif'];
if (!isset($exts[$mime]) || @getimagesize($f['tmp_name']) === false) {
jsonOut(['ok' => false, 'error' => 'Formato non valido: usa JPG, PNG, WEBP o GIF.'], 400);
}
$rel = 'uploads/schools/' . (int) $idschool . '/products/';
$dir = __DIR__ . '/' . $rel;
if (!is_dir($dir) && !mkdir($dir, 0755, true) && !is_dir($dir)) {
error_log('[product_upload] impossibile creare ' . $dir);
jsonOut(['ok' => false, 'error' => 'Caricamento non riuscito.'], 500);
}
$name = bin2hex(random_bytes(12)) . '.' . $exts[$mime];
if (!move_uploaded_file($f['tmp_name'], $dir . $name)) {
error_log('[product_upload] move_uploaded_file fallito');
jsonOut(['ok' => false, 'error' => 'Caricamento non riuscito.'], 500);
}
jsonOut(['ok' => true, 'path' => $rel . $name]);