getConnection(); if (!isset($iduserlogin)) { header("Location: login.php"); exit; } if ((int)$kindofrole !== ROLE_ADMIN) { header("Location: index.php"); exit; } function setFlash(string $type, string $text): void { $_SESSION['flash'] = ['type' => $type, 'text' => $text]; } if ($_SERVER['REQUEST_METHOD'] !== 'POST') { setFlash('danger', 'Richiesta non valida.'); header("Location: admin_shops.php"); exit; } $shop_id = (int)($_POST['shop_id'] ?? 0); $action = trim($_POST['action'] ?? ''); $ret = trim($_POST['ret'] ?? ''); function back(string $ret): void { header("Location: admin_shops.php" . ($ret !== '' ? '?' . $ret : '')); exit; } if ($shop_id <= 0 || $action === '') { setFlash('danger', 'Dati azione mancanti.'); back($ret); } try { $s = $pdo->prepare("SELECT id FROM shops WHERE id = ?"); $s->execute([$shop_id]); if (!$s->fetch()) { setFlash('danger', 'Salone non trovato.'); back($ret); } // ===== Attiva / disattiva ===== if ($action === 'set_active') { $active = (int)($_POST['active'] ?? 0) === 1 ? 1 : 0; $upd = $pdo->prepare("UPDATE shops SET active = ? WHERE id = ?"); $upd->execute([$active, $shop_id]); setFlash('success', $active ? 'Salone attivato.' : 'Salone disattivato.'); back($ret); } // ===== Modifica dati essenziali ===== if ($action === 'edit') { $name = trim($_POST['name'] ?? ''); $address = trim($_POST['address'] ?? ''); $city = trim($_POST['city'] ?? ''); $province = trim($_POST['province'] ?? ''); $zip = trim($_POST['zip_code'] ?? ''); $phone = trim($_POST['phone'] ?? ''); $email = trim($_POST['email'] ?? ''); // Campi NOT NULL della tabella: name, address, city, zip_code if ($name === '' || $address === '' || $city === '' || $zip === '') { setFlash('danger', 'Nome, indirizzo, città e CAP sono obbligatori.'); back($ret); } $upd = $pdo->prepare(" UPDATE shops SET name = ?, address = ?, city = ?, province = ?, zip_code = ?, phone = ?, email = ? WHERE id = ? "); $upd->execute([$name, $address, $city, ($province ?: null), $zip, ($phone ?: null), ($email ?: null), $shop_id]); setFlash('success', 'Dati salone aggiornati.'); back($ret); } // ===== Elimina ===== if ($action === 'delete') { // shops ha FK con ON DELETE CASCADE su molte tabelle figlie (staff, services, // appointments...), quindi eliminare un salone rimuove anche i suoi dati collegati. $del = $pdo->prepare("DELETE FROM shops WHERE id = ?"); $del->execute([$shop_id]); setFlash('success', 'Salone eliminato (con tutti i dati collegati).'); back($ret); } setFlash('danger', 'Azione non riconosciuta.'); back($ret); } catch (Throwable $e) { error_log('admin_shop_action: ' . $e->getMessage()); setFlash('danger', 'Operazione non riuscita.'); back($ret); }