Init PercoVitrine — app de gestion de fiches produits
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
<?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);
|
||||
Reference in New Issue
Block a user