59 lines
2.1 KiB
PHP
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]);
|