From 4d3260b2ca17490ef19c3ddb5344b74f88ea6517 Mon Sep 17 00:00:00 2001 From: stephan Date: Wed, 1 Jul 2026 12:41:10 -0400 Subject: [PATCH] Add role deletion functionality in admin interface This commit introduces the ability to delete roles within the admin interface. It adds new functions to check if a role can be deleted based on active assignments and historical data. The UI is updated to include delete buttons with confirmation prompts, enhancing user interaction and management capabilities. The version code is updated to reflect these changes. --- superadm/eve_acces.php | 13 +++++ superadm/php/inc_fx_eve_acces_admin.php | 75 +++++++++++++++++++++++++ 2 files changed, 88 insertions(+) diff --git a/superadm/eve_acces.php b/superadm/eve_acces.php index 613b810..0677aa7 100644 --- a/superadm/eve_acces.php +++ b/superadm/eve_acces.php @@ -43,6 +43,19 @@ if (isset($_GET['action'])) { $strQ = ($arrResult['state'] === 'ok') ? 'ok=' . urlencode($arrResult['message']) : 'err=' . urlencode($arrResult['message']); header('Location: eve_acces.php?p=kits&' . $strQ); exit; + + case 'delete': + if ($intRoleId <= 0) { + header('Location: eve_acces.php?p=kits'); + exit; + } + $arrResult = fxEveAccesAdminDeleteRole($intRoleId); + if ($arrResult['state'] === 'ok') { + header('Location: eve_acces.php?p=kits&ok=' . urlencode($arrResult['message'])); + } else { + header('Location: eve_acces.php?p=kits&err=' . urlencode($arrResult['message'])); + } + exit; } } diff --git a/superadm/php/inc_fx_eve_acces_admin.php b/superadm/php/inc_fx_eve_acces_admin.php index 8a51231..5a06c63 100644 --- a/superadm/php/inc_fx_eve_acces_admin.php +++ b/superadm/php/inc_fx_eve_acces_admin.php @@ -169,6 +169,61 @@ function fxEveAccesAdminCountActiveAssignments($intRoleId) return intval($objDatabase->fxGetVar($sql)); } +function fxEveAccesAdminCountAllAssignments($intRoleId) +{ + global $objDatabase; + + $sql = "SELECT COUNT(*) FROM inscriptions_eve_acces + WHERE role_id = " . intval($intRoleId); + + return intval($objDatabase->fxGetVar($sql)); +} + +function fxEveAccesAdminCanDeleteRole($intRoleId) +{ + $row = fxEveAccesAdminGetRoleById($intRoleId); + if ($row === null) { + return array('can' => false, 'message' => 'Kit introuvable.'); + } + + if (intval($row['role_systeme']) === 1) { + return array('can' => false, 'message' => 'Un kit système ne peut pas être supprimé.'); + } + + $intActive = fxEveAccesAdminCountActiveAssignments($intRoleId); + if ($intActive > 0) { + return array( + 'can' => false, + 'message' => 'Ce kit est assigné à ' . $intActive . ' compte(s). Retirez les assignations avant de supprimer.', + ); + } + + if (fxEveAccesAdminCountAllAssignments($intRoleId) > 0) { + return array( + 'can' => false, + 'message' => 'Ce kit a déjà été assigné (historique). Suppression impossible.', + ); + } + + return array('can' => true, 'message' => ''); +} + +function fxEveAccesAdminDeleteRole($intRoleId) +{ + global $objDatabase; + + $arrCheck = fxEveAccesAdminCanDeleteRole($intRoleId); + if (!$arrCheck['can']) { + return array('state' => 'error', 'message' => $arrCheck['message']); + } + + $intRoleId = intval($intRoleId); + $objDatabase->fxQuery('DELETE FROM inscriptions_eve_role_permissions WHERE role_id = ' . $intRoleId); + $objDatabase->fxQuery('DELETE FROM inscriptions_eve_roles WHERE role_id = ' . $intRoleId); + + return array('state' => 'ok', 'message' => 'Kit supprimé.'); +} + function fxEveAccesAdminSaveRole($arrData, $arrPermKeys) { global $objDatabase; @@ -413,6 +468,7 @@ function fxEveAccesAdminRenderKitsList($strFlash = '') } else { foreach ($arrRoles as $row) { $strIcon = trim((string)($row['role_icone'] ?? '')); + $arrDelete = fxEveAccesAdminCanDeleteRole(intval($row['role_id'])); ?> @@ -461,6 +517,13 @@ function fxEveAccesAdminRenderKitsList($strFlash = '') onclick="return confirm('Changer le statut de ce kit ?');"> + + + + + 0) ? fxEveAccesAdminCanDeleteRole($intRoleId) : array('can' => false, 'message' => ''); $arrCatalog = fxEveAccesGetCatalogPermissions(null, true); $arrByGroup = array(); if ($arrCatalog != null) { @@ -662,6 +726,17 @@ function fxEveAccesAdminRenderKitForm($intRoleId, $strError = '') + + + Supprimer + + 0 && $arrDelete['message'] !== '' && intval($row['role_systeme'] ?? 0) !== 1) { ?> + + Suppression impossible tant qu'une assignation existe. + +