diff options
Diffstat (limited to 'modules/admin-mini/luasrc/controller')
-rw-r--r-- | modules/admin-mini/luasrc/controller/mini/uci.lua | 82 |
1 files changed, 33 insertions, 49 deletions
diff --git a/modules/admin-mini/luasrc/controller/mini/uci.lua b/modules/admin-mini/luasrc/controller/mini/uci.lua index a5b3402add..4e920563ac 100644 --- a/modules/admin-mini/luasrc/controller/mini/uci.lua +++ b/modules/admin-mini/luasrc/controller/mini/uci.lua @@ -20,31 +20,27 @@ function index() entry({"mini", "uci"}, nil, i18n("config")) entry({"mini", "uci", "changes"}, call("action_changes"), i18n("changes"), 30) entry({"mini", "uci", "revert"}, call("action_revert"), i18n("revert"), 20) - entry({"mini", "uci", "apply"}, call("action_apply"), i18n("saveapply"), 10) + entry({"mini", "uci", "saveapply"}, call("action_apply"), i18n("saveapply"), 10) end function convert_changes(changes) - local ret = {} + local util = require "luci.util" + + local ret for r, tbl in pairs(changes) do for s, os in pairs(tbl) do for o, v in pairs(os) do - local val, str - if (v == "") then - str = "-" - val = "" - else - str = "" - val = "="..luci.util.pcdata(v) - end - str = r.."."..s - if o ~= ".type" then - str = str.."."..o - end - table.insert(ret, str..val) + ret = (ret and ret.."\n" or "") .. "%s%s.%s%s%s" % { + v == "" and "-" or "", + r, + s, + o ~= ".type" and "."..o or "", + v ~= "" and "="..util.pcdata(v) or "" + } end end end - return table.concat(ret, "\n") + return ret end function action_changes() @@ -53,49 +49,37 @@ function action_changes() end function action_apply() + local path = luci.dispatcher.context.path local uci = luci.model.uci.cursor() local changes = uci:changes() - local output = "" - - if changes then - local com = {} - local run = {} - - -- Collect files to be applied and commit changes - for r, tbl in pairs(changes) do - if r then - uci:load(r) - uci:commit(r) - uci:unload(r) - if luci.config.uci_oncommit and luci.config.uci_oncommit[r] then - run[luci.config.uci_oncommit[r]] = true - end - end - end - - -- Search for post-commit commands - for cmd, i in pairs(run) do - output = output .. cmd .. ":\n" .. luci.util.exec(cmd) .. "\n" - end + local reload = {} + + -- Collect files to be applied and commit changes + for r, tbl in pairs(changes) do + table.insert(reload, r) + uci:load(r) + uci:commit(r) + uci:unload(r) end - - luci.template.render("mini/uci_apply", {changes=convert_changes(changes), output=output}) + local function _reload() + local cmd = uci:apply(reload, true) + return io.popen(cmd) + end + + luci.template.render("mini/uci_apply", {changes=convert_changes(changes), reload=_reload}) end function action_revert() local uci = luci.model.uci.cursor() local changes = uci:changes() - if changes then - local revert = {} - - -- Collect files to be reverted - for r, tbl in pairs(changes) do - uci:load(r) - uci:revert(r) - uci:unload(r) - end + + -- Collect files to be reverted + for r, tbl in pairs(changes) do + uci:load(r) + uci:revert(r) + uci:unload(r) end luci.template.render("mini/uci_revert", {changes=convert_changes(changes)}) |