Files

95 lines
4.4 KiB
PHP

<?php
require __DIR__ . '/includes/db.php';
require __DIR__ . '/includes/helpers.php';
require __DIR__ . '/includes/layout.php';
$status = $_GET['status'] ?? '';
$cat = $_GET['cat'] ?? '';
$q = trim($_GET['q'] ?? '');
$where = []; $params = [];
if ($status) { $where[] = 'p.status = ?'; $params[] = $status; }
if ($cat) { $where[] = 'p.category_id = ?'; $params[] = (int)$cat; }
if ($q) { $where[] = '(p.title LIKE ? OR p.sku LIKE ? OR p.tags LIKE ?)'; $params = array_merge($params, ["%$q%","%$q%","%$q%"]); }
$sql = "SELECT p.*, c.name as cat_name,
(SELECT filename FROM product_media WHERE product_id=p.id AND type='image' ORDER BY sort_order LIMIT 1) as thumb
FROM products p LEFT JOIN categories c ON c.id=p.category_id"
. ($where ? ' WHERE '.implode(' AND ',$where) : '')
. ' ORDER BY p.updated_at DESC';
$stmt = $pdo->prepare($sql); $stmt->execute($params);
$products = $stmt->fetchAll();
$cats = $pdo->query("SELECT * FROM categories ORDER BY name")->fetchAll();
$total = count($products);
layout_head('Produits');
layout_sidebar('products');
layout_main_open();
?>
<div class="page-header">
<div>
<div class="page-title"><i class="fas fa-store" style="color:var(--primary);margin-right:.4rem"></i>Mes produits</div>
<div class="page-sub"><?= $total ?> produit<?= $total!==1?'s':'' ?></div>
</div>
<a href="/form.php" class="btn btn-primary"><i class="fas fa-plus"></i> Nouveau produit</a>
</div>
<!-- Filtres -->
<div class="filters">
<form method="get" style="display:contents">
<input type="text" name="q" value="<?= h($q) ?>" placeholder="Rechercher…" style="width:200px;height:34px;padding:.3rem .7rem">
<?php if ($status||$cat) echo '<input type="hidden" name="status" value="'.h($status).'"><input type="hidden" name="cat" value="'.h($cat).'">'; ?>
</form>
<a href="/" class="filter-chip<?= !$status&&!$cat&&!$q?' active':'' ?>">Tous</a>
<a href="?status=brouillon<?= $q?"&q=".urlencode($q):'' ?>" class="filter-chip<?= $status==='brouillon'?' active':'' ?>">Brouillons</a>
<a href="?status=prêt<?= $q?"&q=".urlencode($q):'' ?>" class="filter-chip<?= $status==='prêt'?' active':'' ?>">Prêts</a>
<a href="?status=publié<?= $q?"&q=".urlencode($q):'' ?>" class="filter-chip<?= $status==='publié'?' active':'' ?>">Publiés</a>
<?php foreach ($cats as $c): ?>
<a href="?cat=<?= $c['id'] ?><?= $q?"&q=".urlencode($q):'' ?>" class="filter-chip<?= $cat==(string)$c['id']?' active':'' ?>"><?= h($c['name']) ?></a>
<?php endforeach ?>
</div>
<?php if (!$products): ?>
<div class="empty-state"><i class="fas fa-store"></i><p>Aucun produit pour l'instant.</p><a href="/form.php" class="btn btn-primary mt-3"><i class="fas fa-plus"></i> Créer mon premier produit</a></div>
<?php else: ?>
<div class="products-grid">
<?php foreach ($products as $p): ?>
<div class="product-card" style="cursor:default">
<?php if ($p['thumb']): ?>
<img src="/file.php?f=<?= urlencode($p['thumb']) ?>" alt="" class="product-thumb">
<?php else: ?>
<div class="product-thumb-placeholder"><i class="fas fa-image"></i></div>
<?php endif ?>
<div class="product-body">
<div class="product-title"><?= h($p['title']) ?></div>
<?php if ($p['cat_name']): ?><div class="product-cat"><i class="fas fa-tag" style="font-size:.65rem"></i> <?= h($p['cat_name']) ?></div><?php endif ?>
<?php if ($p['sku']): ?><div class="product-sku">Réf : <?= h($p['sku']) ?></div><?php endif ?>
<div class="product-meta">
<span class="product-price"><?= fmtPrice($p['price']) ?></span>
<?= statusBadge($p['status']) ?>
</div>
</div>
<div class="product-actions">
<a href="/produit.php?id=<?= $p['id'] ?>" class="btn btn-secondary btn-sm" title="Voir"><i class="fas fa-eye"></i></a>
<a href="/form.php?id=<?= $p['id'] ?>" class="btn btn-secondary btn-sm" title="Modifier"><i class="fas fa-pen"></i></a>
<button onclick="deleteProduct(<?= $p['id'] ?>,this)" class="btn btn-danger btn-sm" title="Supprimer"><i class="fas fa-trash"></i></button>
</div>
</div>
<?php endforeach ?>
</div>
<?php endif ?>
<script>
async function deleteProduct(id, btn) {
if (!confirm('Supprimer ce produit définitivement ?')) return;
const r = await fetch('/api.php?action=product&id=' + id, {method:'DELETE'});
const j = await r.json();
if (j.ok) { btn.closest('.product-card').remove(); toast('Produit supprimé'); }
else toast(j.error || 'Erreur', 'error');
}
</script>
<?php layout_foot(); ?>