Completed rewrite of network interface configuration page
[project/luci.git] / libs / uci / luasrc / model / uci.lua
1 --[[
2 LuCI - UCI mpdel
3
4 Description:
5 Generalized UCI model
6
7 FileId:
8 $Id$
9
10 License:
11 Copyright 2008 Steven Barth <steven@midlink.org>
12
13 Licensed under the Apache License, Version 2.0 (the "License");
14 you may not use this file except in compliance with the License.
15 You may obtain a copy of the License at 
16
17         http://www.apache.org/licenses/LICENSE-2.0 
18
19 Unless required by applicable law or agreed to in writing, software
20 distributed under the License is distributed on an "AS IS" BASIS,
21 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
22 See the License for the specific language governing permissions and
23 limitations under the License.
24
25 ]]--
26 local uci  = require("uci")
27 local util = require("luci.util")
28 local setmetatable, rawget, rawset = setmetatable, rawget, rawset
29 local error, pairs, ipairs, tostring = error, pairs, ipairs, tostring
30 local table = table
31
32 --- LuCI UCI model library.
33 module("luci.model.uci", function(m) setmetatable(m, {__index = uci}) end)
34
35 savedir_default = "/tmp/.uci"
36 confdir_default = "/etc/config"
37
38 savedir_state = "/var/state"
39
40 --- Delete all sections of a given type that match certain criteria.
41 -- @param config                UCI config
42 -- @param type                  UCI section type
43 -- @param comparator    Function that will be called for each section and
44 -- returns a boolean whether to delete the current section (optional)
45 function delete_all(config, type, comparator)
46         local del = {}
47         local function helper (section)
48                         if not comparator or comparator(section) then
49                                 table.insert(del, section[".name"])
50                         end
51         end
52         
53         foreach(config, type, helper)
54         
55         for i, j in ipairs(del) do
56                 delete(config, j)
57         end
58 end
59
60 --- Create a new section and initialize it with data.
61 -- @param config        UCI config
62 -- @param type          UCI section type
63 -- @param name          UCI section name (optional)
64 -- @param values        Table of key - value pairs to initialize the section with
65 -- @return                      Name of created section
66 function section(config, type, name, values)
67         local stat = true
68         if name then
69                 stat = set(config, name, type)
70         else
71                 name = add(config, type)
72                 stat = name and true
73         end
74         
75         if stat and values then
76                 stat = tset(config, name, values)
77         end
78         
79         return stat and name
80 end
81
82 --- Get a certain state value.
83 -- @param ...   Parameters passed to function get
84 -- @return              UCI value
85 -- @see                 get
86 function get_statevalue(...)
87         set_savedir(savedir_state)
88         local result = get(...)
89         set_savedir(savedir_default)
90         return result
91 end
92
93 --- Updated the data of a section using data from a table.
94 -- @param config        UCI config
95 -- @param section       UCI section name (optional)
96 -- @param values        Table of key - value pairs to update the section with
97 function tset(config, section, values)
98         local stat = true
99         for k, v in pairs(values) do
100                 if k:sub(1, 1) ~= "." then
101                         stat = stat and set(config, section, k, v)
102                 end
103         end
104         return stat
105 end
106
107
108 --- Add an anonymous section.
109 -- @class function
110 -- @name add
111 -- @param config        UCI config
112 -- @param type          UCI section type
113 -- @return                      Name of created section
114
115 --- Get a table of unsaved changes.
116 -- @class function
117 -- @name changes
118 -- @param config        UCI config
119 -- @return                      Table of changes
120
121 --- Commit unsaved changes.
122 -- @class function
123 -- @name commit
124 -- @param config        UCI config
125 -- @return                      Boolean whether operation succeeded
126 -- @see revert
127
128 --- Deletes a section or an option.
129 -- @class function
130 -- @name delete
131 -- @param config        UCI config
132 -- @param section       UCI section name
133 -- @param option        UCI option (optional)
134 -- @return                      Boolean whether operation succeeded
135
136 --- Call a function for every section of a certain type.
137 -- @class function
138 -- @name foreach
139 -- @param config        UCI config
140 -- @param type          UCI section type
141 -- @param callback      Function to be called
142 -- @return                      Boolean whether operation succeeded
143
144 --- Get a section type or an option
145 -- @class function
146 -- @name get
147 -- @param config        UCI config
148 -- @param section       UCI section name
149 -- @param option        UCI option (optional)
150 -- @return                      UCI value
151
152 --- Get all sections of a config or all values of a section.
153 -- @class function
154 -- @name get_all
155 -- @param config        UCI config
156 -- @param section       UCI section name (optional)
157 -- @return                      Table of UCI sections or table of UCI values
158
159 --- Manually load a config.
160 -- @class function
161 -- @name load
162 -- @param config        UCI config
163 -- @return                      Boolean whether operation succeeded
164 -- @see save
165 -- @see unload
166
167 --- Revert unsaved changes.
168 -- @class function
169 -- @name revert
170 -- @param config        UCI config
171 -- @return                      Boolean whether operation succeeded
172 -- @see commit
173
174 --- Saves changes made to a config to make them committable.
175 -- @class function
176 -- @name save
177 -- @param config        UCI config
178 -- @return                      Boolean whether operation succeeded
179 -- @see load
180 -- @see unload
181
182 --- Set a value or create a named section.
183 -- @class function
184 -- @name set
185 -- @param config        UCI config
186 -- @param section       UCI section name
187 -- @param option        UCI option or UCI section type
188 -- @param value         UCI value or nil if you want to create a section
189 -- @return                      Boolean whether operation succeeded
190
191 --- Set the configuration directory.
192 -- @class function
193 -- @name set_confdir
194 -- @param directory     UCI configuration directory
195 -- @return                      Boolean whether operation succeeded
196
197 --- Set the directory for uncommited changes.
198 -- @class function
199 -- @name set_savedir
200 -- @param directory     UCI changes directory
201 -- @return                      Boolean whether operation succeeded
202
203 --- Discard changes made to a config.
204 -- @class function
205 -- @name unload
206 -- @param config        UCI config
207 -- @return                      Boolean whether operation succeeded
208 -- @see load
209 -- @see save