summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTed Trask <ttrask01@yahoo.com>2010-04-06 15:15:15 +0000
committerTed Trask <ttrask01@yahoo.com>2010-04-06 15:15:15 +0000
commit9d6dc0dc33e4c7c5e9aaf096bb6b3bef9a0ae8cc (patch)
tree67358688e89d3e8ee5a989ea99662d15100a2b82
parentdfaaa00e238905388d9cbe6ef630ec15a1e17347 (diff)
downloadacf-did-9d6dc0dc33e4c7c5e9aaf096bb6b3bef9a0ae8cc.tar.bz2
acf-did-9d6dc0dc33e4c7c5e9aaf096bb6b3bef9a0ae8cc.tar.xz
Added test button to editdefinition.
Test and Cancel are now handled in customized handler in controller. Added some rule testing code to sort them into priority order.
-rw-r--r--did-assigndefinition-html.lsp10
-rw-r--r--did-controller.lua44
-rw-r--r--did-editdefinition-html.lsp18
-rw-r--r--did-model.lua82
4 files changed, 124 insertions, 30 deletions
diff --git a/did-assigndefinition-html.lsp b/did-assigndefinition-html.lsp
index 00c896b..14ff279 100644
--- a/did-assigndefinition-html.lsp
+++ b/did-assigndefinition-html.lsp
@@ -69,15 +69,13 @@
});
</script>
-<% if form.descr or form.errtxt then
+<% if form.descr then
session.didresult = form.descr
form.descr = nil
end %>
<% if session.didresult or form.errtxt then %>
<H1>Last Result</H1><DL>
-<% if session.didresult then %>
-<P CLASS="descr"><%= string.gsub(html.html_escape(session.didresult), "\n", "<BR>") %></P>
-<% else
+<% if form.errtxt then
io.write('<P CLASS="error">' .. string.gsub(html.html_escape(form.errtxt), "\n", "<BR>") .. " " .. html.html_escape(form.value.did.value) .. "<BR>\n")
for name,val in pairs(form.value) do
if val.errtxt then
@@ -86,7 +84,9 @@ end %>
end
io.write("</P>\n")
form.errtxt = nil
-end %>
+else %>
+<P CLASS="descr"><%= string.gsub(html.html_escape(session.didresult), "\n", "<BR>") %></P>
+<% end %>
</DL>
<% end %>
diff --git a/did-controller.lua b/did-controller.lua
index e829dfd..1d243e4 100644
--- a/did-controller.lua
+++ b/did-controller.lua
@@ -29,12 +29,52 @@ function searchdefinitionlist(self)
return result
end
+local function handle_form(self, getFunction, setFunction, clientdata, option, label, descr)
+ local form = getFunction()
+
+ if clientdata["Save"] or clientdata["Test"] then
+ controllerfunctions.handle_clientdata(form, clientdata)
+
+ if clientdata["Test"] then
+ form = setFunction(form, true)
+ else
+ form = setFunction(form)
+ end
+ if not form.errtxt and descr then
+ form.descr = descr
+ end
+
+ if clientdata.redir then
+ form.value.redir = cfe({ type="hidden", value=clientdata.redir, label="" })
+ end
+ form = self:redirect_to_referrer(form)
+ if clientdata.redir and not form.errtxt and not clientdata["Test"] then
+ form.value = form.descr -- make it a command result
+ form.descr = nil
+ self:redirect(clientdata.redir, form)
+ end
+ elseif clientdata["Cancel"] and clientdata.redir then
+ self:redirect(clientdata.redir, nil)
+ else
+ if clientdata.redir then
+ form.value.redir = cfe({ type="hidden", value=clientdata.redir, label="" })
+ end
+ form = self:redirect_to_referrer() or form
+ end
+
+ form.type = "form"
+ form.option = option
+ form.label = label
+
+ return form
+end
+
function editdefinition(self)
- return controllerfunctions.handle_form(self, function() return self.model.getdefinition(self.clientdata.did) end, self.model.updatedefinition, self.clientdata, "Save", "Edit DID Number")
+ return handle_form(self, function() return self.model.getdefinition(self.clientdata.did) end, self.model.updatedefinition, self.clientdata, "Save", "Edit DID Number")
end
function createdefinition(self)
- return controllerfunctions.handle_form(self, self.model.getdefinition, self.model.savedefinition, self.clientdata, "Save", "Create DID Number")
+ return handle_form(self, self.model.getdefinition, self.model.savedefinition, self.clientdata, "Save", "Create DID Number")
end
function assigndefinition(self)
diff --git a/did-editdefinition-html.lsp b/did-editdefinition-html.lsp
index 48f6448..f33fafb 100644
--- a/did-editdefinition-html.lsp
+++ b/did-editdefinition-html.lsp
@@ -76,10 +76,6 @@ require("json")
});
$("input[name='rules']").val(file);
}
- function goBack(){
- history.back();
- return false;
- }
function addNewLine(){
$(".watchme").unbind("change").removeClass("watchme");
addLine(emptyrule);
@@ -106,19 +102,16 @@ require("json")
addNewLine();
$("input.submit").click(submitFile);
- $("#cancel").click(goBack);
});
</script>
-<% if form.descr or form.errtxt then
+<% if form.descr then
session.didresult = form.descr
form.descr = nil
end %>
<% if session.didresult or form.errtxt then %>
<H1>Last Result</H1><DL>
-<% if session.didresult then %>
-<P CLASS="descr"><%= string.gsub(html.html_escape(session.didresult), "\n", "<BR>") %></P>
-<% else
+<% if form.errtxt then
io.write('<P CLASS="error">' .. string.gsub(html.html_escape(form.errtxt), "\n", "<BR>") .. " " .. html.html_escape(form.value.did.value) .. "<BR>\n")
for name,val in pairs(form.value) do
if val.errtxt then
@@ -127,7 +120,9 @@ end %>
end
io.write("</P>\n")
form.errtxt = nil
-end %>
+else %>
+<P CLASS="descr"><%= string.gsub(html.html_escape(session.didresult), "\n", "<BR>") %></P>
+<% end %>
</DL>
<% end %>
@@ -152,5 +147,6 @@ end %>
<H2>Save Changes</H2>
<DL>
-<DT></DT><DD><input class="submit" type="submit" name="Cancel" value="Cancel" id="cancel"></DD>
+<DT></DT><DD><input class="submit" type="submit" name="Cancel" value="Cancel"></DD>
+<DT></DT><DD><input class="submit" type="submit" name="Test" value="Test"></DD>
<% displayformend(form) %>
diff --git a/did-model.lua b/did-model.lua
index 03f4e98..0bb88c2 100644
--- a/did-model.lua
+++ b/did-model.lua
@@ -358,6 +358,54 @@ local updaterules = function(did, rules)
return res
end
+local testrules = function(rules)
+ local success = true
+ local errtxt
+ local entries = {}
+ local res, err = pcall(function()
+ local sql = "CREATE TEMP TABLE testing (did character varying(40) NOT NULL, extension character varying(40) NOT NULL, starttime time without time zone, endtime time without time zone, startdate date, enddate date, dayofweek bit(7))"
+ assert (con:execute(sql))
+ for i,rule in ipairs(rules) do
+ sql = {}
+ sql[1] = "INSERT INTO testing ("
+ sql[3] = ") VALUES ("
+ sql[5] = ")"
+ names = {}
+ vals = {}
+ for name,val in pairs(rule) do
+ if val and val ~= "" then
+ names[#names+1] = escape(name)
+ vals[#vals+1] = "'"..escape(val).."'"
+ end
+ end
+ sql[2] = table.concat(names, ", ")
+ sql[4] = table.concat(vals, ", ")
+ sql = table.concat(sql, "")
+ res = assert (con:execute(sql))
+ end
+
+ sql = "SELECT * FROM testing ORDER BY did, startdate ASC NULLS FIRST, enddate DESC NULLS FIRST, dayofweek ASC, starttime ASC NULLS FIRST, endtime DESC NULLS FIRST"
+ local cur = assert (con:execute(sql))
+ local row = cur:fetch ({}, "a")
+ while row do
+ entries[#entries+1] = {did=row.did, extension=row.extension, starttime=row.starttime, endtime=row.endtime, startdate=row.startdate, enddate=row.enddate, dayofweek=row.dayofweek}
+ row = cur:fetch (row, "a")
+ end
+ -- close everything
+ cur:close()
+ end)
+ if not res then
+ success = false
+ entries = rules
+ errtxt = string.gsub(err or "", "\n.*", "")
+ end
+ local res, err = pcall(function()
+ local sql = "DROP TABLE testing"
+ assert (con:execute(sql))
+ end)
+ return success, errtxt, entries
+end
+
-- Put the given rules into pubdid
local publishrules = function(did, rules)
-- mark all rules for this did as stale, add in new ones, and delete the stale ones
@@ -513,30 +561,30 @@ local function validaterules(rules)
local connected = databaseconnect(DatabaseUser)
for i,rule in ipairs(rules) do
if not validator.is_integer(rule.did) then
- errtxt[#errtxt+1] = "Rule #"..i..": DID is not a valid number"
+ errtxt[#errtxt+1] = "Rule "..i..": DID is not a valid number"
end
if rule.extension == "" or string.find(rule.extension, "[^%d#%*]") then
- errtxt[#errtxt+1] = "Rule #"..i..": Extension is not a valid number"
+ errtxt[#errtxt+1] = "Rule "..i..": Extension is not a valid number"
end
local res,err
if rule.starttime ~= "" then
res,err,rule.starttime = convertdatabaseentry("TIME", rule.starttime)
- if not res then errtxt[#errtxt+1] = "Rule #"..i..": StartTime "..err end
+ if not res then errtxt[#errtxt+1] = "Rule "..i..": StartTime "..err end
end
if rule.endtime ~= "" then
res,err,rule.endtime = convertdatabaseentry("TIME", rule.endtime)
- if not res then errtxt[#errtxt+1] = "Rule #"..i..": EndTime "..err end
+ if not res then errtxt[#errtxt+1] = "Rule "..i..": EndTime "..err end
end
if rule.startdate ~= "" then
res,err,rule.startdate = convertdatabaseentry("DATE", rule.startdate)
- if not res then errtxt[#errtxt+1] = "Rule #"..i..": StartDate "..err end
+ if not res then errtxt[#errtxt+1] = "Rule "..i..": StartDate "..err end
end
if rule.enddate ~= "" then
res,err,rule.enddate = convertdatabaseentry("DATE", rule.enddate)
- if not res then errtxt[#errtxt+1] = "Rule #"..i..": EndDate "..err end
+ if not res then errtxt[#errtxt+1] = "Rule "..i..": EndDate "..err end
end
if #rule.dayofweek ~= 7 or string.find(rule.dayofweek, "[^01]") then
- errtxt[#errtxt+1] = "Rule #"..i..": DayOfWeek invalid entry"
+ errtxt[#errtxt+1] = "Rule "..i..": DayOfWeek invalid entry"
end
end
if connected then databasedisconnect() end
@@ -751,7 +799,7 @@ function getdefinition(did)
end
-- If exists true, then make sure exists first, if false or undefined, make sure doesn't exist
-function savedefinition(defin, exists)
+function savedefinition(defin, test, exists)
-- remove blank entries, if present
defin.value.rules.value = string.gsub("\n"..format.dostounix(defin.value.rules.value), "\n%s*,%s*,%s*,%s*,%s*,%s*0000000", "")
defin.value.rules.value = string.gsub(defin.value.rules.value, "$\n", "")
@@ -763,7 +811,11 @@ function savedefinition(defin, exists)
defin.value.rules.value = formatrules(rules)
defin.value.rules.errtxt = errtxt
success = validatedefinition(defin) and success
- defin.errtxt = "Failed to save definition"
+ if test then
+ defin.errtxt = "Failed test for DID"
+ else
+ defin.errtxt = "Failed to save DID"
+ end
if success then
local definition = {}
for name,val in pairs(defin.value) do
@@ -772,7 +824,7 @@ function savedefinition(defin, exists)
local res, err = pcall(function()
local connected
- if not exists then
+ if not test and not exists then
databasedisconnect()
local pw = format.parse_ini_file(fs.read_file(configfile) or "", "", "password") or ""
connected = databaseconnect(DatabaseOwner, pw)
@@ -784,6 +836,12 @@ function savedefinition(defin, exists)
defin.value.did.errtxt = "DID Number already exists"
elseif #def == 0 and exists then
defin.value.did.errtxt = "DID Number does not exist"
+ elseif test then
+ success, defin.value.rules.errtxt, rules = testrules(rules)
+ defin.value.rules.value = formatrules(rules)
+ if success then
+ defin.errtxt = "Passed test for DID"
+ end
else
local descr = {}
descr[#descr+1] = describechange(def[1], definition)
@@ -817,8 +875,8 @@ function savedefinition(defin, exists)
return defin
end
-function updatedefinition(defin)
- return savedefinition(defin, true)
+function updatedefinition(defin, test)
+ return savedefinition(defin, test, true)
end
function deletedefinition(did)