From 2c688f165d2f55dfb1f3f4f390d9b56b6d499e99 Mon Sep 17 00:00:00 2001 From: Ted Trask Date: Mon, 7 Oct 2013 20:38:40 +0000 Subject: Notify admin when a device has overridden group defaults --- provisioning-editdeviceparams-html.lsp | 28 ++++++++++++++++++++++++++++ provisioning-model.lua | 16 +++++++++++++++- 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/provisioning-editdeviceparams-html.lsp b/provisioning-editdeviceparams-html.lsp index e2f9d3c..54dad04 100644 --- a/provisioning-editdeviceparams-html.lsp +++ b/provisioning-editdeviceparams-html.lsp @@ -3,6 +3,23 @@ require("htmlviewfunctions") html = require("acf.html") %> +<% +-- Function to mark params that overridden the default set in a param group +function markoverride(c) + if c.type == "group" then + for n,v in pairs(c.value) do + markoverride(v) + end + elseif c.groupdefault and c.value ~= c.groupdefault then + if c.class then + c.class = c.class .." groupdefaultoverride" + else + c.class = "groupdefaultoverride" + end + end +end +%> + @@ -36,5 +54,15 @@ html = require("acf.html")

<%= html.html_escape(form.label) %>

<% form.value.device_id.readonly = "true" + if not form.errtxt and form.value.groupdefaultoverride.value then + form.errtxt = "Warning: Class defaults have been overridden for this device" + end + form.value.groupdefaultoverride = nil + + -- Mark the parameters where the group default is overridden + for n,v in pairs(form.value) do + markoverride(v) + end + htmlviewfunctions.displayform(form, nil, nil, page_info, 2) %> diff --git a/provisioning-model.lua b/provisioning-model.lua index a5e3fc3..8cf21ab 100644 --- a/provisioning-model.lua +++ b/provisioning-model.lua @@ -1371,6 +1371,15 @@ get_all_device_params = function(self, clientdata, action) return get_device_params(self, clientdata.device_id, false) end +local checkgroupdefaultoverride = function(device_id) + sql = "SELECT p.param_id ".. + "FROM (devices_to_classes d2t JOIN provisioning_classes t USING(class_id) JOIN classes_to_param_groups t2g USING (class_id) JOIN provisioning_groups g USING(group_id) ".. + "JOIN param_groups_to_params g2p USING(group_id) JOIN provisioning_params p USING(param_id) JOIN provisioning_values v USING(param_id))".. + "WHERE d2t.device_id='"..provdb.escape(device_id).."' AND v.value IS NOT NULL AND g2p.value IS NOT NULL AND v.value!=g2p.value" + local tmp = getselectresponse(sql) + return (#tmp ~= 0) +end + -- This function is used by scripts, do not change prototype get_device_params = function(self, device_id, editable) local retval = {} @@ -1394,7 +1403,7 @@ get_device_params = function(self, device_id, editable) retval[g.name].type="group" end -- Then, get all of the parameters for this device - sql = "SELECT g.name AS group, g.label AS grouplabel, p.param_id, p.name, p.type, p.label, p.descr, p.seq, p.regexp, p.validate, CASE WHEN v.value IS NOT NULL THEN v.value WHEN g2p.value IS NOT NULL THEN g2p.value ELSE p.value END AS value, CASE WHEN g2p.value IS NOT NULL THEN g2p.value ELSE p.value END AS default ".. + sql = "SELECT g.name AS group, g.label AS grouplabel, p.param_id, p.name, p.type, p.label, p.descr, p.seq, p.regexp, p.validate, CASE WHEN v.value IS NOT NULL THEN v.value WHEN g2p.value IS NOT NULL THEN g2p.value ELSE p.value END AS value, CASE WHEN g2p.value IS NOT NULL THEN g2p.value ELSE p.value END AS default, g2p.value AS groupdefault ".. "FROM (devices_to_classes d2t JOIN provisioning_classes t USING(class_id) JOIN classes_to_param_groups t2g USING (class_id) JOIN provisioning_groups g USING(group_id) ".. "JOIN param_groups_to_params g2p USING(group_id) JOIN provisioning_params p USING(param_id)) LEFT JOIN provisioning_values v ON(d2t.device_id=v.device_id AND p.param_id=v.param_id AND g.name=v.group_name ) ".. "WHERE d2t.device_id='"..provdb.escape(device_id).."'" @@ -1418,6 +1427,9 @@ get_device_params = function(self, device_id, editable) if p.type == "boolean" then p.value = (p.value == "true") p.default = (p.default == "true") + if p.groupdefault then + p.groupdefault = (p.groupdefault == "true") + end end value[p.name] = p end @@ -1427,6 +1439,8 @@ get_device_params = function(self, device_id, editable) retval[name] = nil end end + -- Even more finally, add in a flag to show if group defaults have been overridden + retval.groupdefaultoverride = cfe({ type="boolean", value=checkgroupdefaultoverride(device_id), label="Group defaults have been overridden", readonly=true }) end if connected then provdb.databasedisconnect() end end) -- cgit v1.2.3