diff options
author | Natanael Copa <natanael.copa@gmail.com> | 2007-07-27 07:36:59 +0000 |
---|---|---|
committer | Natanael Copa <natanael.copa@gmail.com> | 2007-07-27 07:36:59 +0000 |
commit | 9f1fde7139cb5054a3468984624bbe3d04a5b0eb (patch) | |
tree | 82aebc31beb696adeb7d51d7fce2939133e547ed /interfaces-controller.lua | |
parent | cee2c34a5d78a183b777d1d8a716de23ae37331b (diff) | |
download | acf-alpine-baselayout-9f1fde7139cb5054a3468984624bbe3d04a5b0eb.tar.bz2 acf-alpine-baselayout-9f1fde7139cb5054a3468984624bbe3d04a5b0eb.tar.xz |
new style of acf modulesv2.0
git-svn-id: svn://svn.alpinelinux.org/acf/alpine-baselayout/trunk@216 ab2d0c66-481e-0410-8bed-d214d4d58bed
Diffstat (limited to 'interfaces-controller.lua')
-rw-r--r-- | interfaces-controller.lua | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/interfaces-controller.lua b/interfaces-controller.lua new file mode 100644 index 0000000..be07e02 --- /dev/null +++ b/interfaces-controller.lua @@ -0,0 +1,171 @@ +-- the interfaces controller + +module (..., package.seeall) + +-- Cause an http redirect to our "read" action +-- We use the self.conf table because it already has prefix,controller,etc +-- The redir code is defined in the application error handler (acf-controller) +local list_redir = function (self) + self.conf.action = "read" + self.conf.type = "redir" + error (self.conf) +end + +local pvt = {} +mvc= {} +mvc.on_load = function(self, parent) + -- If they try to run a bogus action, send them to read + if ( rawget(self.worker, self.conf.action) == nil ) then + list_redir(self) + end + + pvt.parent_on_exec = parent.worker.mvc.post_exec + + logit ("interfaces controller on_load has finished") + +end + + +mvc.pre_exec = function (self) + logit ("interfaces-controller pre_exec activated") + -- pvt.parent_on_exec () + +end + +mvc.post_exec = function ( self ) + logit ("interfaces-controller post_exec activated") + return pvt.parent_on_exec() +end + +read = function (self ) + local iface = self.model.get_all_interfaces() + -- 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 = ENV["SCRIPT_NAME"] .. self.conf.prefix .. + self.conf.controller .. "/", + action = { "create", "read", "update", "delete" } } + return ( { actions = actions, iface = iface } ) +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 + list_redir(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 + list_redir(self) + end + end + + -- 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", label="action"}) + + return ( cfe ({type="form", + option={ script=ENV["SCRIPT_NAME"], + prefix=self.conf.prefix, + controller = self.conf.controller, + action = "update", + extra = "?iface=" .. data.name.value }, + value = data} ) ) +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 + list_redir(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 + list_redir(self) + end + + -- Otherwise, return a form + local me = {} + me.iface = cfe({value = self.clientdata.iface }) + 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=ENV["SCRIPT_NAME"], + prefix=self.conf.prefix, + controller = self.conf.controller, + action = "delete", + extra = "?iface=" .. (self.clientdata.iface or "") }, + value = me} ) ) +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 + list_redir(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=ENV["SCRIPT_NAME"], + prefix=self.conf.prefix, + controller = self.conf.controller, + action = "create", + extra = "?iface=" .. iface or "" }, + value = data} ) ) +end + + |