summaryrefslogtreecommitdiffstats
path: root/acf2
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-12-17 16:56:42 +0200
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-12-17 19:28:56 +0200
commita8aa513b9d07e8cabdb541c5b01d51caf21673bb (patch)
treefb267c5c0e3476ccb2384fa7020a8156df334666 /acf2
parent6073e42010ae41bde396d5b140def71c32376f9d (diff)
downloadacf2-a8aa513b9d07e8cabdb541c5b01d51caf21673bb.tar.bz2
acf2-a8aa513b9d07e8cabdb541c5b01d51caf21673bb.tar.xz
web client: disable deletion for non-removable collection members
Diffstat (limited to 'acf2')
-rw-r--r--acf2/model/node.lua24
1 files changed, 20 insertions, 4 deletions
diff --git a/acf2/model/node.lua b/acf2/model/node.lua
index 59c495d..d0d44cd 100644
--- a/acf2/model/node.lua
+++ b/acf2/model/node.lua
@@ -15,6 +15,7 @@ local super = object.super
local pth = require('acf2.path')
local util = require('acf2.util')
+local copy = util.copy
local update = util.update
@@ -81,10 +82,13 @@ function M.TreeNode:init(context, dtype)
function mt.get(k, options) return mt.load(k, options) end
function mt.removable() return true end
+ function mt.member_removable(k)
+ local v = mt.load(k, {dereference=false})
+ return not isinstance(v, M.TreeNode) or getmetatable(v).removable()
+ end
+
function mt.check_removable(k, v)
- if v ~= nil then return end
- local old = mt.load(k, {dereference=false})
- if isinstance(old, M.TreeNode) and not getmetatable(old).removable() then
+ if v == nil and not mt.member_removable(k) then
raise(pth.join(mt.path, k), 'Cannot be deleted')
end
end
@@ -204,9 +208,21 @@ function M.Collection:init(context, params, dtype)
)
end
+ local meta = mt.meta
+ function mt.meta()
+ local res = copy(meta())
+ res.removable = {}
+ for _, member in ipairs(mt.members()) do
+ if mt.member_removable(member) then
+ table.insert(res.removable, member)
+ end
+ end
+ return res
+ end
+
function mt.mmeta(name)
local meta = mt.meta()
- local res = util.copy(meta.members)
+ local res = copy(meta.members)
if name ~= pth.wildcard then
res['ui-name'] = meta['ui-member']..' '..name
end