From 2a046824027f42ff4a33cca29c89b3fe37ced07a Mon Sep 17 00:00:00 2001
From: Robert Anderson <randerson@lbsd.net>
Date: Fri, 19 Jun 2009 10:11:16 +0000
Subject: [PATCH] Unlink location members before deleting location

---
 .../include/ajax/functions/WiSPLocations.php  | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/webgui/include/ajax/functions/WiSPLocations.php b/webgui/include/ajax/functions/WiSPLocations.php
index 1de5d06c..1d681ab9 100644
--- a/webgui/include/ajax/functions/WiSPLocations.php
+++ b/webgui/include/ajax/functions/WiSPLocations.php
@@ -60,9 +60,24 @@ function getWiSPLocation($params) {
 function removeWiSPLocation($params) {
 	global $db;
 
-	$res = DBDo("DELETE FROM wisp_locations WHERE ID = ?",array($params[0][0]));
-	if (!is_numeric($res)) {
+	# Begin transaction
+	DBBegin();
+
+	# Unlink users from this location
+	$res = DBDo("UPDATE wisp_userdata SET LocationID = NULL WHERE LocationID = ?",array($params[0][0]));
+
+	# Delete location
+	if ($res !== FALSE) {
+		$res = DBDo("DELETE FROM wisp_locations WHERE ID = ?",array($params[0][0]));
+	}
+
+	# Commit changes if successful
+	if ($res !== FALSE) {
+		DBCommit();
 		return $res;
+	# Rollback database if error
+	} else {
+		DBRollback();
 	}
 
 	return NULL;
-- 
GitLab