Files

81 lines
4.2 KiB
PHP

<?php
require __DIR__ . '/includes/db.php';
require __DIR__ . '/includes/helpers.php';
$action = $_GET['action'] ?? '';
$method = $_SERVER['REQUEST_METHOD'];
/* ─── DELETE product ─────────────────────────────────────── */
if ($action === 'product' && $method === 'DELETE') {
$id = (int)($_GET['id'] ?? 0);
if (!$id) err('id manquant');
$medias = $pdo->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);