summaryrefslogtreecommitdiffstats
path: root/interfaces-controller.lua
diff options
context:
space:
mode:
authorNatanael Copa <natanael.copa@gmail.com>2007-07-27 07:36:59 +0000
committerNatanael Copa <natanael.copa@gmail.com>2007-07-27 07:36:59 +0000
commit9f1fde7139cb5054a3468984624bbe3d04a5b0eb (patch)
tree82aebc31beb696adeb7d51d7fce2939133e547ed /interfaces-controller.lua
parentcee2c34a5d78a183b777d1d8a716de23ae37331b (diff)
downloadacf-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.lua171
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
+
+