X-Git-Url: https://git.archive.openwrt.org/?a=blobdiff_plain;f=modules%2Fadmin-full%2Fluasrc%2Fcontroller%2Fadmin%2Fuci.lua;h=d313128addb08bc1a933cb6e649406ad49b681e0;hb=dd267f9457476e0a2b29be0a98fcd05062f50f13;hp=d2acdeca132896ec761ee9b3f0046bce49f6644a;hpb=f8f4fe752307e1d0c042496b642aa691589c2a5f;p=project%2Fluci.git diff --git a/modules/admin-full/luasrc/controller/admin/uci.lua b/modules/admin-full/luasrc/controller/admin/uci.lua index d2acdeca1..d313128ad 100644 --- a/modules/admin-full/luasrc/controller/admin/uci.lua +++ b/modules/admin-full/luasrc/controller/admin/uci.lua @@ -15,88 +15,75 @@ module("luci.controller.admin.uci", package.seeall) function index() local i18n = luci.i18n.translate + local redir = luci.http.formvalue("redir", true) or + luci.dispatcher.build_url(unpack(luci.dispatcher.context.request)) entry({"admin", "uci"}, nil, i18n("config")) - entry({"admin", "uci", "changes"}, call("action_changes"), i18n("changes"), 40) - entry({"admin", "uci", "revert"}, call("action_revert"), i18n("revert"), 30) - entry({"admin", "uci", "apply"}, call("action_apply"), i18n("apply"), 20) - entry({"admin", "uci", "saveapply"}, call("action_apply"), i18n("saveapply"), 10) + entry({"admin", "uci", "changes"}, call("action_changes"), i18n("changes"), 40).query = {redir=redir} + entry({"admin", "uci", "revert"}, call("action_revert"), i18n("revert"), 30).query = {redir=redir} + entry({"admin", "uci", "apply"}, call("action_apply"), i18n("apply"), 20).query = {redir=redir} + entry({"admin", "uci", "saveapply"}, call("action_apply"), i18n("saveapply"), 10).query = {redir=redir} 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 = "="..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() - local changes = convert_changes(luci.model.uci.changes()) + local changes = convert_changes(luci.model.uci.cursor():changes()) luci.template.render("admin_uci/changes", {changes=changes}) end function action_apply() local path = luci.dispatcher.context.path - local changes = luci.model.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 - if path[#path] ~= "apply" then - luci.model.uci.load(r) - luci.model.uci.commit(r) - luci.model.uci.unload(r) - end - 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 .. ":" .. luci.sys.exec(cmd) .. "\n" + local uci = luci.model.uci.cursor() + local changes = uci:changes() + local reload = {} + + -- Collect files to be applied and commit changes + for r, tbl in pairs(changes) do + table.insert(reload, r) + if path[#path] ~= "apply" then + uci:load(r) + uci:commit(r) + uci:unload(r) end end + local function _reload() + local cmd = uci:apply(reload, true) + return io.popen(cmd) + end - luci.template.render("admin_uci/apply", {changes=convert_changes(changes), output=output}) + luci.template.render("admin_uci/apply", {changes=convert_changes(changes), reload=_reload}) end function action_revert() - local changes = luci.model.uci.changes() - if changes then - local revert = {} - - -- Collect files to be reverted - for r, tbl in pairs(changes) do - luci.model.uci.load(r) - luci.model.uci.revert(r) - luci.model.uci.unload(r) - end + local uci = luci.model.uci.cursor() + local changes = uci:changes() + + -- 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("admin_uci/revert", {changes=convert_changes(changes)})