prepare("SELECT filename FROM product_media WHERE product_id=?")->execute([$id]) ? $pdo->query("SELECT filename FROM product_media WHERE product_id=$id")->fetchAll() : []; foreach ($medias as $m) { if ($m['filename']) @unlink($UPLOAD_DIR . $m['filename']); } $pdo->prepare("DELETE FROM products WHERE id=?")->execute([$id]); ok(null); } /* ─── DELETE media ───────────────────────────────────────── */ if ($action === 'media' && $method === 'DELETE') { $id = (int)($_GET['id'] ?? 0); if (!$id) err('id manquant'); $m = $pdo->prepare("SELECT filename FROM product_media WHERE id=?")->execute([$id]) ? $pdo->query("SELECT filename FROM product_media WHERE id=$id")->fetch() : null; if ($m && $m['filename']) @unlink($UPLOAD_DIR . $m['filename']); $pdo->prepare("DELETE FROM product_media WHERE id=?")->execute([$id]); ok(null); } /* ─── PATCH media sort ───────────────────────────────────── */ if ($action === 'media_sort' && $method === 'POST') { $body = json_decode(file_get_contents('php://input'), true); $ids = $body['ids'] ?? []; $stmt = $pdo->prepare("UPDATE product_media SET sort_order=? WHERE id=?"); foreach ($ids as $i => $id) $stmt->execute([$i, (int)$id]); ok(null); } /* ─── GET product JSON ───────────────────────────────────── */ if ($action === 'product' && $method === 'GET') { $id = (int)($_GET['id'] ?? 0); if (!$id) err('id manquant'); $p = $pdo->prepare("SELECT * FROM products WHERE id=?")->execute([$id]) ? $pdo->query("SELECT * FROM products WHERE id=$id")->fetch() : null; if (!$p) err('introuvable', 404); $p['media'] = $pdo->query("SELECT * FROM product_media WHERE product_id={$id} ORDER BY sort_order")->fetchAll(); ok($p); } /* ─── POST upload media ──────────────────────────────────── */ if ($action === 'upload' && $method === 'POST') { $pid = (int)($_POST['product_id'] ?? 0); if (!$pid) err('product_id manquant'); if (isset($_FILES['file']) && $_FILES['file']['error'] === UPLOAD_ERR_OK) { $orig = $_FILES['file']['name']; $ext = strtolower(pathinfo($orig, PATHINFO_EXTENSION)); $allowed = array_merge(imgExts(), vidExts()); if (!in_array($ext, $allowed)) err('format non supporté'); $fname = uniqid('m', true) . '.' . $ext; if (!move_uploaded_file($_FILES['file']['tmp_name'], $UPLOAD_DIR . $fname)) err('échec upload'); $type = isImage($fname) ? 'image' : 'video'; $order = (int)$pdo->query("SELECT COALESCE(MAX(sort_order),0)+1 FROM product_media WHERE product_id=$pid")->fetchColumn(); $pdo->prepare("INSERT INTO product_media (product_id,type,filename,original_name,sort_order) VALUES(?,?,?,?,?)") ->execute([$pid, $type, $fname, $orig, $order]); $newId = $pdo->lastInsertId(); ok(['id'=>$newId,'type'=>$type,'filename'=>$fname,'original_name'=>$orig,'sort_order'=>$order]); } // Video URL if (!empty($_POST['video_url'])) { $url = filter_var($_POST['video_url'], FILTER_SANITIZE_URL); $order = (int)$pdo->query("SELECT COALESCE(MAX(sort_order),0)+1 FROM product_media WHERE product_id=$pid")->fetchColumn(); $pdo->prepare("INSERT INTO product_media (product_id,type,video_url,sort_order) VALUES(?,?,?,?)") ->execute([$pid, 'video', $url, $order]); ok(['id'=>$pdo->lastInsertId(),'type'=>'video','video_url'=>$url,'sort_order'=>$order]); } err('aucun fichier'); } err('action inconnue', 404);