---[[
-LuCI - Configuration Bind Interface
-
-Description:
-Offers an interface for binding configuration values to certain
-data types. Supports value and range validation and basic dependencies.
-
-FileId:
-$Id$
-
-License:
-Copyright 2008 Steven Barth <steven@midlink.org>
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
+-- Copyright 2008 Steven Barth <steven@midlink.org>
+-- Licensed to the public under the Apache License 2.0.
-]]--
module("luci.cbi", package.seeall)
require("luci.template")
local fs = require("nixio.fs")
local uci = require("luci.model.uci")
local datatypes = require("luci.cbi.datatypes")
+local dispatcher = require("luci.dispatcher")
local class = util.class
local instanceof = util.instanceof
self.changed = false
- if not self.uci:load(self.config) then
- error("Unable to read UCI data: " .. self.config)
+ local path = "%s/%s" %{ self.uci:get_confdir(), self.config }
+ if fs.stat(path, "type") ~= "reg" then
+ fs.writefile(path, "")
+ end
+
+ local ok, err = self.uci:load(self.config)
+ if not ok then
+ local url = dispatcher.build_url(unpack(dispatcher.context.request))
+ local source = self:formvalue("cbi.source")
+ if type(source) == "string" then
+ fs.writefile(path, source:gsub("\r\n", "\n"))
+ ok, err = self.uci:load(self.config)
+ if ok then
+ luci.http.redirect(url)
+ end
+ end
+ self.save = false
+ end
+
+ if not ok then
+ self.template = "cbi/error"
+ self.error = err
+ self.source = fs.readfile(path) or ""
+ self.pageaction = false
end
end