diff options
author | Ted Trask <ttrask01@yahoo.com> | 2010-04-06 15:15:15 +0000 |
---|---|---|
committer | Ted Trask <ttrask01@yahoo.com> | 2010-04-06 15:15:15 +0000 |
commit | 9d6dc0dc33e4c7c5e9aaf096bb6b3bef9a0ae8cc (patch) | |
tree | 67358688e89d3e8ee5a989ea99662d15100a2b82 | |
parent | dfaaa00e238905388d9cbe6ef630ec15a1e17347 (diff) | |
download | acf-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.lsp | 10 | ||||
-rw-r--r-- | did-controller.lua | 44 | ||||
-rw-r--r-- | did-editdefinition-html.lsp | 18 | ||||
-rw-r--r-- | did-model.lua | 82 |
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) |