summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTed Trask <ttrask01@yahoo.com>2013-12-08 23:07:24 +0000
committerTed Trask <ttrask01@yahoo.com>2013-12-08 23:07:24 +0000
commit5d25b383c7e3318f6d3ba9fa00bb23616159ac54 (patch)
tree1d2fab08cdc1c77897ea77a16bd124ba73abed7f
parenta7ac20b54272bda016a4f320b9291e76c2652286 (diff)
downloadacf-freeswitch-vmail-5d25b383c7e3318f6d3ba9fa00bb23616159ac54.tar.bz2
acf-freeswitch-vmail-5d25b383c7e3318f6d3ba9fa00bb23616159ac54.tar.xz
Some cleanup of bulk creation
-rw-r--r--vmail-controller.lua2
-rw-r--r--vmail-model.lua69
2 files changed, 38 insertions, 33 deletions
diff --git a/vmail-controller.lua b/vmail-controller.lua
index 9999f75..517664c 100644
--- a/vmail-controller.lua
+++ b/vmail-controller.lua
@@ -111,7 +111,7 @@ mymodule.createuser = function( self )
end
mymodule.createmanyusers = function( self )
- return self.handle_form(self, self.model.get_bunchsettings, self.model.set_bunchsettings, self.clientdata, "Create Many", "Create Users", "User Created")
+ return self.handle_form(self, self.model.get_bunchsettings, self.model.set_bunchsettings, self.clientdata, "Create Many", "Create Users", "Users Created")
end
mymodule.processdialplanxml = function( self )
diff --git a/vmail-model.lua b/vmail-model.lua
index e818a7f..98fd7a4 100644
--- a/vmail-model.lua
+++ b/vmail-model.lua
@@ -701,41 +701,46 @@ mymodule.get_bunchsettings = function (self)
return cfe({ type="group", value={bunch=bunch}, label="Voicemail Users List" })
end
-mymodule.set_bunchsettings = function (self, clientdata)
- local connected = databaseconnect()
- local nExts = {}
- tFile = assert(io.tmpfile())
- tFile:write(clientdata.value.bunch.value)
- tFile:seek("set",0)
-
- for line in tFile:lines() do
- for ext, fname, lname, pass in string.gmatch(line, "(%w+):(%w+):(%w+):(%w+)") do
- nExts.username = ext or nil
- nExts.firstname = fname or nil
- nExts.lastname = lname or nil
- nExts.password = pass or nil
-
- sql = "INSERT INTO voicemail_users VALUES(null, '"..escape(nExts.username).."')"
- runsqlcommand(sql)
-
- sql = "SELECT uid FROM voicemail_users where username ='"..escape(nExts.username).."'";
- uid = getselectresponse(sql)
- nExts.uid = uid[1].uid or nil
-
- sql = "INSERT INTO voicemail_values VALUES('"..uid[1].uid.."', '2', '"..escape(tostring(nExts.firstname)).."')"
- runsqlcommand(sql)
-
- sql = "INSERT INTO voicemail_values VALUES('"..uid[1].uid.."', '3', '"..escape(tostring(nExts.lastname)).."')"
- runsqlcommand(sql)
-
- sql = "INSERT INTO voicemail_prefs (username, domain, password) VALUES ('"..escape(nExts.username).."', '"..config.domain.."', '"..escape(nExts.password).."')"
- runsqlcommand(sql)
+mymodule.set_bunchsettings = function (self, bunchdata)
+ local res, err = pcall(function()
+ local connected = vmaildb.databaseconnect()
+
+ local sql = "BEGIN TRANSACTION"
+ vmaildb.runsqlcommand(sql)
+
+ for line in string.gmatch(bunchdata.value.bunch.value, "[^\n]+") do
+ local username, firstname, lastname, password = string.match(line, "(%w+):(%w+):(%w+):(%w+)")
+ if username then
+ sql = "INSERT INTO voicemail_users VALUES(null, '"..vmaildb.escape(username).."')"
+ vmaildb.runsqlcommand(sql)
+
+ sql = "SELECT uid FROM voicemail_users where username ='"..vmaildb.escape(username).."'";
+ uid = vmaildb.getselectresponse(sql)
+
+ sql = "INSERT INTO voicemail_values VALUES('"..uid[1].uid.."', '2', '"..vmaildb.escape(tostring(firstname)).."')"
+ vmaildb.runsqlcommand(sql)
+
+ sql = "INSERT INTO voicemail_values VALUES('"..uid[1].uid.."', '3', '"..vmaildb.escape(tostring(lastname)).."')"
+ vmaildb.runsqlcommand(sql)
+
+ sql = "INSERT INTO voicemail_prefs (username, domain, password) VALUES ('"..vmaildb.escape(username).."', '"..config.domain.."', '"..vmaildb.escape(password).."')"
+ vmaildb.runsqlcommand(sql)
+ else
+ bunchdata.value.bunch.errtxt = "Invalid syntax"
+ bunchdata.errtxt = "Failed to create users"
+ vmaildb.runsqlcommand("ROLLBACK")
+ break
+ end
end
- end
+ vmaildb.runsqlcommand("COMMIT")
- if connected then databasedisconnect() end
+ if connected then vmaildb.databasedisconnect() end
+ end)
+ if not res and err then
+ bunchdata.errtxt = err
+ end
- return clientdata
+ return bunchdata
end
mymodule.get_usersettings = function(self, clientdata)