getConnection(); function e($value): string { return htmlspecialchars((string) $value, ENT_QUOTES, 'UTF-8'); } // --- Determina la classe principale (da GET id o POST idservice) --- $idmain = 0; if (isset($_GET['id'])) { $idmain = (int) $_GET['id']; } if (isset($_POST['idservice'])) { $idmain = (int) $_POST['idservice']; } if (isset($_POST['idmainservice'])) { $idmain = (int) $_POST['idmainservice']; } $insertFeedback = null; /* ------------------------------------------------------------------------- * Inserimento associazione (POST) * ---------------------------------------------------------------------- */ if (isset($_POST['formclass']) && $_POST['formclass'] === 'Y') { $idmainservice = (int) ($_POST['idmainservice'] ?? 0); $idassociateservice = (int) ($_POST['servicelist'] ?? 0); if ($idmainservice > 0 && $idassociateservice > 0) { // Evita duplicati: inserisci solo se l'associazione non esiste già $stmtCheck = $pdo->prepare( "SELECT COUNT(*) FROM associateclass WHERE idmainservice = :main AND idassociateservice = :assoc" ); $stmtCheck->execute([':main' => $idmainservice, ':assoc' => $idassociateservice]); $alreadyExists = (int) $stmtCheck->fetchColumn() > 0; if ($alreadyExists) { $insertFeedback = ['type' => 'error', 'text' => 'Questa classe è già associata.']; } else { $stmt = $pdo->prepare( "INSERT INTO associateclass (idmainservice, idassociateservice) VALUES (:main, :assoc)" ); $ok = $stmt->execute([ ':main' => $idmainservice, ':assoc' => $idassociateservice, ]); $insertFeedback = $ok ? ['type' => 'success', 'text' => 'Associazione aggiunta con successo.'] : ['type' => 'error', 'text' => 'Errore durante l\'associazione. Riprova.']; } } else { $insertFeedback = ['type' => 'error', 'text' => 'Seleziona una classe da associare.']; } } /* ------------------------------------------------------------------------- * Dati della classe principale * ---------------------------------------------------------------------- */ $mainService = null; if ($idmain > 0) { $stmtMain = $pdo->prepare( "SELECT service.*, servicecategory.namecategory FROM service LEFT JOIN servicecategory ON service.category = servicecategory.idservicecategory WHERE service.idservice = :idmain LIMIT 1" ); $stmtMain->execute([':idmain' => $idmain]); $mainService = $stmtMain->fetch(); } /* ------------------------------------------------------------------------- * Elenco delle classi per il dropdown: * esclude la principale E quelle già associate a questa principale. * ---------------------------------------------------------------------- */ $stmtAll = $pdo->prepare( "SELECT idservice, servicename FROM service WHERE idservice != :idmain AND idservice NOT IN ( SELECT idassociateservice FROM associateclass WHERE idmainservice = :idmain2 ) ORDER BY servicename" ); $stmtAll->execute([':idmain' => $idmain, ':idmain2' => $idmain]); $allServices = $stmtAll->fetchAll(); /* ------------------------------------------------------------------------- * Classi già associate alla principale * ---------------------------------------------------------------------- */ $stmtAssoc = $pdo->prepare( "SELECT associateclass.idassociateclass, service.servicename FROM associateclass LEFT JOIN service ON service.idservice = associateclass.idassociateservice WHERE associateclass.idmainservice = :idmain" ); $stmtAssoc->execute([':idmain' => $idmain]); $associatedClasses = $stmtAssoc->fetchAll(); ?>