From bfd1ce5e53c57322e12025d796bea11994c0c1cc Mon Sep 17 00:00:00 2001 From: "madmaxoft@gmail.com" Date: Sat, 8 Jun 2013 19:16:57 +0000 Subject: ProtectionAreas: Implemented adding users to an area in the DB git-svn-id: http://mc-server.googlecode.com/svn/trunk@1566 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- MCServer/Plugins/ProtectionAreas/Storage.lua | 46 ++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to 'MCServer/Plugins/ProtectionAreas/Storage.lua') diff --git a/MCServer/Plugins/ProtectionAreas/Storage.lua b/MCServer/Plugins/ProtectionAreas/Storage.lua index 118ab0434..defa9b394 100644 --- a/MCServer/Plugins/ProtectionAreas/Storage.lua +++ b/MCServer/Plugins/ProtectionAreas/Storage.lua @@ -379,6 +379,7 @@ function cStorage:ForEachUserInArea(a_AreaID, a_WorldName, a_Callback) assert(a_AreaID); assert(a_WorldName); assert(a_Callback); + assert(self); -- Since in this version all the worlds share a single DB, the a_WorldName parameter is not actually used -- But this may change in the future, when we have a per-world DB @@ -402,3 +403,48 @@ end +--- Adds the specified usernames to the specified area, if not already present +-- a_Users is an array table of usernames to add +function cStorage:AddAreaUsers(a_AreaID, a_WorldName, a_AddedBy, a_Users) + assert(a_AreaID); + assert(a_WorldName); + assert(a_Users); + assert(self); + + -- Remove from a_Users the usernames already present in the area + local sql = "SELECT UserName FROM AllowedUsers WHERE AreaID = " .. a_AreaID; + local function Remove(UserData, NumValues, Values, Names) + if (NumValues ~= 1) then + -- Invalid response format + return 0; + end + local DBName = Values[1]; + -- Remove the name from a_Users, if exists + for idx, Name in ipairs(a_Users) do + if (Name == DBName) then + table.remove(a_Users, idx); + return 0; + end + end + return 0; + end + if (not(self:DBExec(sql, Remove))) then + LOGWARNING("SQL error while iterating through users"); + return false; + end + + -- Add the users + for idx, Name in ipairs(a_Users) do + local sql = "INSERT INTO AllowedUsers (AreaID, UserName) VALUES (" .. a_AreaID .. ", '" .. Name .. "')"; + if (not(self:DBExec(sql))) then + LOGWARNING("SQL error while adding user " .. Name .. " to area " .. a_AreaID); + end + end + + return true; +end + + + + + -- cgit v1.2.3