luci2: implement LuCI2.session.updateACLs() and LuCI2.session.hasACL()
[project/luci2/ui.git] / luci2 / htdocs / luci2 / view / system.system.js
1 L.ui.view.extend({
2     execute: function() {
3         var m = new L.cbi.Map('system', {
4             caption:     L.tr('System'),
5             description: L.tr('Here you can configure the basic aspects of your device like its hostname or the timezone.'),
6             collabsible: true
7         });
8
9         var s = m.section(L.cbi.TypedSection, 'system', {
10             caption:     L.tr('System Properties'),
11             teasers:     [ 'hostname', 'zonename', 'languages', 'themes' ],
12             readonly:    !this.options.acls.system
13         });
14
15         s.tab({
16             id:          'general',
17             caption:     L.tr('General Settings')
18         });
19
20         var t = s.taboption('general', L.cbi.DummyValue, '__time', {
21             caption:     L.tr('Local Time')
22         });
23
24         t.load = function(sid)
25         {
26             var id = this.id(sid);
27
28             return L.system.getSystemInfo().then(function(info) {
29                 var date = new Date();
30                 var time = info.localtime;
31
32                 window.setInterval(function() {
33                     date.setTime(++time * 1000);
34
35                     $('#' + id).text('%04d/%02d/%02d %02d:%02d:%02d'.format(
36                         date.getUTCFullYear(),
37                         date.getUTCMonth() + 1,
38                         date.getUTCDate(),
39                         date.getUTCHours(),
40                         date.getUTCMinutes(),
41                         date.getUTCSeconds()
42                     ));
43                 }, 1000);
44             });
45         };
46
47
48         s.taboption('general', L.cbi.InputValue, 'hostname', {
49             caption:     L.tr('Hostname'),
50             datatype:    'hostname'
51         });
52
53
54         var z = s.taboption('general', L.cbi.ListValue, 'zonename', {
55             caption:     L.tr('Timezone')
56         });
57
58         z.load = function(sid) {
59             return L.system.getZoneInfo(function(zones) {
60                 var znames = [ ];
61
62                 for (var i = 0; i < zones.length; i++)
63                     for (var j = 5; j < zones[i].length; j++)
64                         znames.push(zones[i][j]);
65
66                 znames.sort();
67
68                 for (var i = 0; i < znames.length; i++)
69                     z.value(znames[i]);
70
71                 z.zones = zones;
72             });
73         };
74
75         z.save = function(sid)
76         {
77             var uci = this.ucipath(sid);
78             var val = this.formvalue(sid);
79
80             if (!this.callSuper('save', sid))
81                 return false;
82
83             for (var i = 0; i < z.zones.length; i++)
84                 for (var j = 5; j < z.zones[i].length; j++)
85                     if (z.zones[i][j] == val)
86                     {
87                         m.set(uci.config, uci.section, 'timezone', z.zones[i][0]);
88                         return true;
89                     }
90
91             m.set(uci.config, uci.section, 'timezone', 'GMT0');
92             return true;
93         };
94
95
96         s.tab({
97             id:          'logging',
98             caption:     L.tr('Logging')
99         });
100
101         s.taboption('logging', L.cbi.InputValue, 'log_size', {
102             caption:     L.tr('System log buffer size'),
103             description: L.tr('kiB'),
104             placeholder: 16,
105             optional:    true,
106             datatype:    'range(0, 32)'
107         });
108
109         s.taboption('logging', L.cbi.InputValue, 'log_ip', {
110             caption:     L.tr('External system log server'),
111             placeholder: '0.0.0.0',
112             optional:    true,
113             datatype:    'ip4addr'
114         });
115
116         s.taboption('logging', L.cbi.InputValue, 'log_port', {
117             caption:     L.tr('External system log server port'),
118             placeholder: 514,
119             optional:    true,
120             datatype:    'port'
121         });
122
123         s.taboption('logging', L.cbi.ListValue, 'conloglevel', {
124             caption:     L.tr('Log output level')
125         }).value(8, L.tr('Debug'))
126           .value(7, L.tr('Info'))
127           .value(6, L.tr('Notice'))
128           .value(5, L.tr('Warning'))
129           .value(4, L.tr('Error'))
130           .value(3, L.tr('Critical'))
131           .value(2, L.tr('Alert'))
132           .value(1, L.tr('Emergency'));
133
134         s.taboption('logging', L.cbi.ListValue, 'cronloglevel', {
135             caption:     L.tr('Cron Log level')
136         }).value(5, L.tr('Debug'))
137           .value(8, L.tr('Normal'))
138           .value(9, L.tr('Warning'));
139
140         s.tab({
141             id:          'language',
142             caption:     L.tr('Language and Style')
143         });
144
145
146         var l = s.taboption('language', L.cbi.ListValue, 'languages', {
147             caption:     L.tr('Language'),
148             uci_package: 'luci',
149             uci_section: 'main',
150             uci_option:  'lang'
151         }).value('auto', L.tr('Automatic'));
152
153         l.load = function(sid)
154         {
155             var langs = m.get('luci', 'languages');
156             for (var key in langs)
157                 if (key.charAt(0) != '.')
158                     l.value(key, langs[key]);
159         };
160
161
162         var t = s.taboption('language', L.cbi.ListValue, 'themes', {
163             caption:     L.tr('Design'),
164             uci_package: 'luci',
165             uci_section: 'main',
166             uci_option:  'mediaurlbase'
167         });
168
169         t.load = function(sid)
170         {
171             var themes = m.get('luci', 'themes');
172             for (var key in themes)
173                 if (key.charAt(0) != '.')
174                     t.value(themes[key], key);
175         };
176
177
178         var s2 = m.section(L.cbi.NamedSection, 'ntp', {
179             caption:      L.tr('Time Synchronization'),
180             readonly:    !this.options.acls.system
181         });
182
183         var e = s2.option(L.cbi.CheckboxValue, '.enable', {
184             caption:      L.tr('Enable NTP client'),
185             optional:     true
186         });
187
188         e.load = function(sid) {
189             return L.system.initEnabled('sysntpd').then(function(enabled) {
190                 e.options.initial = enabled;
191             });
192         };
193
194         e.save = function(sid) {
195             if (this.formvalue(sid))
196                 return L.system.initEnable('sysntpd');
197             else
198                 return L.system.initDisable('sysntpd');
199         };
200
201         s2.option(L.cbi.CheckboxValue, 'enable_server', {
202             caption:      L.tr('Enable NTP server')
203         }).depends('.enable');
204
205         s2.option(L.cbi.DynamicList, 'server', {
206             caption:      L.tr('NTP server candidates'),
207             datatype:     'host'
208         }).depends('.enable');
209
210         return m.insertInto('#map');
211     }
212 });