-- the interfaces controller module (..., package.seeall) default_action = "read" read = function (self ) local iface = self.model.get_all_interfaces() local status = self.model.get_status() -- these actions are available for each interface -- **FIXME** This is technically wrong. The controller should pass -- the "script" "prefix" "controller" "action" as separate fields, -- since the view could be a cli, not a web interface. the VIEW -- should make a uri from these these elements. local actions = { link = self.conf.script .. self.conf.prefix .. self.conf.controller .. "/", action = { "create", "read", "update", "delete" } } return ( { actions = actions, iface = iface, status=status } ) end config = function (self ) local config = read(self) for k,v in pairs(config.iface) do v['edit']=cfe( {name="edit", label="Edit this record", value="Edit", type="link", }) end return ( config ) end -- Accepts form info -- Returns a cfe object (the form) update = function(self) local iface = self.clientdata.iface or "" local result local data -- If interface is not found, return to list result, data = self.model.get_iface_by_name ( iface ) if result == false then redirect(self) end -- If the "cmd" button was used, then attempt to do the update if self.clientdata.cmd then -- update the iface info the form gave us for k,v in pairs (data) do if self.clientdata[k] then data[k].value = self.clientdata[k] end end result, data = self.model.update_iface_by_name ( data, data.name.value ) -- If validation worked then return to list if result == true then redirect(self) end end -- If the "cmddelete" button was used, then attempt to delete the interface if self.clientdata.cmddelete then self.conf.action = "delete?iface=" .. tostring(self.clientdata.name) self.conf.type = "redir" error (self.conf) end -- Hide the 'name' field data.name.type="hidden" -- If we reach this point in the function, then we are providing a form -- for the user to edit (either first time in, or validation failed) -- Add a command button data.cmd = cfe({type="action", value="Save", name="cmd", label="Save/Apply above settings"}) -- Add a delete button data.cmddelete = cfe({type="action", value="Delete", name="cmddelete", label="Delete this record"}) return ( cfe ({type="form", option={ script=self.conf.script, prefix=self.conf.prefix, controller = self.conf.controller, action = "update", extra = "?iface=" .. data.name.value }, value = data, clientdata=clientdata, } ) ) end delete = function(self) local iface = self.clientdata.iface or "" local result local data -- If the interface doesn't exist, return to the list now result, data = self.model.get_iface_by_name ( iface ) if result == false then redirect(self) end -- If the cmd button was pressed, then commit the change if self.clientdata.cmd then if self.clientdata.cmd == "delete" then self.model.delete_iface_by_name (iface) end redirect(self) end -- Otherwise, return a form local me = {} me.iface = cfe({name="iface", type="hidden", value = (self.clientdata.iface or "") }) me.action1 = cfe({name="cmd", type="action", value="delete", label="action"}) me.action2 = cfe({name="cmd", type="action", value="cancel", label="action"}) return ( cfe ({type="form", option={ script=self.conf.script, prefix=self.conf.prefix, controller = self.conf.controller, action = "delete", extra = "?iface=" .. (self.clientdata.iface or "") }, value = me, clientdata=clientdata, iface=iface, } ) ) end create = function(self) local iface = self.clientdata.iface or "" local index = 0 local result, data = self.model.get_iface_by_name () -- If the "cmd" button was used, then attempt to do the insert if self.clientdata.cmd then for k,v in pairs (data) do if self.clientdata[k] then data[k].value = self.clientdata[k] end end result, data = self.model.create_iface_by_name ( iface, data ) if result then redirect(self) end end -- If we reach this point in the function, we are providing a form -- Add a command button data.cmd = cfe({type="action", value="save", label="action"}) return ( cfe ({type="form", option={ script=self.conf.script, prefix=self.conf.prefix, controller = self.conf.controller, action = "create", extra = "?iface=" .. iface or "" }, value = data} ) ) end