From 27aa69c9de321e55917b01731a9f778398dafadb Mon Sep 17 00:00:00 2001
From: Robert Anderson <randerson@lbsd.net>
Date: Mon, 22 Jun 2009 07:38:28 +0000
Subject: [PATCH] Remove records referencing main tables

---
 webgui/include/ajax/functions/AdminGroups.php | 24 +++++++++++++--
 webgui/include/ajax/functions/AdminRealms.php | 18 ++++++++++--
 webgui/include/ajax/functions/AdminUsers.php  | 29 +++++++++++++++++--
 3 files changed, 65 insertions(+), 6 deletions(-)

diff --git a/webgui/include/ajax/functions/AdminGroups.php b/webgui/include/ajax/functions/AdminGroups.php
index 73e43a16..2885737b 100644
--- a/webgui/include/ajax/functions/AdminGroups.php
+++ b/webgui/include/ajax/functions/AdminGroups.php
@@ -69,9 +69,29 @@ function getAdminGroup($params) {
 function removeAdminGroup($params) {
 	global $db;
 
-	$res = DBDo("DELETE FROM groups WHERE ID = ?",array($params[0]));
-	if (!is_numeric($res)) {
+	# Begin transaction
+	DBBegin();
+
+	# Unlink users from group
+	$res = DBDo("DELETE FROM users_to_groups WHERE GroupID = ?",array($params[0]));
+
+	# Delete group attribtues
+	if ($res !== FALSE) {
+		$res = DBDo("DELETE FROM group_attributes WHERE GroupID = ?",array($params[0]));
+	}
+
+	# Delete group
+	if ($res !== FALSE) {
+		$res = DBDo("DELETE FROM groups WHERE ID = ?",array($params[0]));
+	}
+
+	# Commit and return if successful
+	if ($res !== FALSE) {
+		DBCommit();
 		return $res;
+	# Else rollback database
+	} else {
+		DBRollback();
 	}
 
 	return NULL;
diff --git a/webgui/include/ajax/functions/AdminRealms.php b/webgui/include/ajax/functions/AdminRealms.php
index ab57ce71..a457ca88 100644
--- a/webgui/include/ajax/functions/AdminRealms.php
+++ b/webgui/include/ajax/functions/AdminRealms.php
@@ -63,9 +63,23 @@ function getAdminRealm($params) {
 function removeAdminRealm($params) {
 	global $db;
 
-	$res = DBDo("DELETE FROM realms WHERE ID = ?",array($params[0]));
-	if (!is_numeric($res)) {
+	# Begin transaction
+	DBBegin();
+
+	# Delete user attribtues
+	$res = DBDo("DELETE FROM realm_attributes WHERE RealmID = ?",array($params[0]));
+
+	if ($res !== FALSE) {
+		$res = DBDo("DELETE FROM realms WHERE ID = ?",array($params[0]));
+	}
+
+	# Commit and return if successful
+	if ($res !== FALSE) {
+		DBCommit();
 		return $res;
+	# Else rollback database
+	} else {
+		DBRollback();
 	}
 
 	return NULL;
diff --git a/webgui/include/ajax/functions/AdminUsers.php b/webgui/include/ajax/functions/AdminUsers.php
index ce6bf56c..43b3dc51 100644
--- a/webgui/include/ajax/functions/AdminUsers.php
+++ b/webgui/include/ajax/functions/AdminUsers.php
@@ -63,9 +63,34 @@ function getAdminUser($params) {
 function removeAdminUser($params) {
 	global $db;
 
-	$res = DBDo("DELETE FROM users WHERE ID = ?",array($params[0]));
-	if (!is_numeric($res)) {
+	# Begin transaction
+	DBBegin();
+
+	# Delete user information, if any
+	$res = DBDo("DELETE FROM wisp_userdata WHERE UserID = ?",array($params[0]));
+
+	# Delete user attribtues
+	if ($res !== FALSE) {
+		$res = DBDo("DELETE FROM user_attributes WHERE UserID = ?",array($params[0]));
+	}
+
+	# Remove user from groups
+	if ($res !== FALSE) {
+		$res = DBDo("DELETE FROM users_to_groups WHERE UserID = ?",array($params[0]));
+	}
+	
+	# Delete user
+	if ($res !== FALSE) {
+		$res = DBDo("DELETE FROM users WHERE ID = ?",array($params[0]));
+	}
+
+	# Commit and return if successful
+	if ($res !== FALSE) {
+		DBCommit();
 		return $res;
+	# Else rollback database
+	} else {
+		DBRollback();
 	}
 
 	return NULL;
-- 
GitLab