tazpanel view settings.cgi @ rev 471

base.css: fix menu hover switching, add menu shadows.
author Aleksej Bobylev <al.bobylev@gmail.com>
date Wed Apr 29 00:29:46 2015 +0300 (2015-04-29)
parents dd26a42bd40b
children 84d34ba7dc06
line source
1 #!/bin/sh
2 #
3 # System settings CGI interface: user, locale, keyboard, date. Since we
4 # don't have multiple pages here there is only one case used to get command
5 # values and the full content is followed directly.
6 #
7 # Copyright (C) 2011-2015 SliTaz GNU/Linux - BSD License
8 #
11 # Common functions from libtazpanel
13 . lib/libtazpanel
14 get_config
15 header
17 TITLE=$(_ 'TazPanel - Settings')
20 # Get system database. LDAP compatible.
22 getdb() {
23 getent $1 2>/dev/null || cat /etc/$1
24 }
26 listdb() {
27 for item in $(getdb $1 | cut -d ":" -f 1); do
28 echo "<option>$item</option>\n"
29 done
30 }
36 #
37 # Commands executed before page loading.
38 #
40 case " $(GET) " in
41 *\ do\ *)
42 users=$(echo $QUERY_STRING | awk 'BEGIN{RS="&";FS="="}{if($1=="user") print $2}')
43 groups=$(echo $QUERY_STRING | awk 'BEGIN{RS="&";FS="="}{if($1=="group")print $2}')
45 case $(GET do) in
47 # Groups page
48 delgroups)
49 for i in $groups; do delgroup $i; done ;;
50 addgroup)
51 addgroup $groups ;;
52 addmember)
53 addgroup $(GET member) $groups ;;
54 delmember)
55 delgroup $(GET member) $groups ;;
57 # Users page
58 delusers)
59 for i in $users; do deluser $i; done ;;
60 lockusers)
61 for i in $users; do passwd -l $i | log; done ;;
62 unlockusers)
63 for i in $users; do passwd -u $i | log; done ;;
64 chpasswd)
65 echo "$users:$(GET password)" | chpasswd -m | log ;;
66 adduser)
67 if [ -n "$users" ]; then
68 name=$(GET name); name=${name:-SliTaz User}
69 adduser -D -s /bin/sh -g "$name" -G users -h /home/$users $users
70 echo "$user:$(GET passwd)" | chpasswd -m | log
71 for i in audio cdrom floppy video tty; do addgroup $users $i; done
72 fi ;;
74 # System time
75 settz)
76 GET tz > /etc/TZ;;
77 date) # normalize to two digits
78 date $(printf '%02d%02d%02d%02d%d.%02d' "$(GET month)" "$(GET day)" "$(GET hour)" "$(GET min)" "$(GET year)" "$(GET sec)") >/dev/null;;
79 rdate)
80 rdate -s tick.greyware.com ;;
81 hwclock)
82 hwclock -w -u ;;
84 esac
85 ;;
88 *\ gen_locale\ *)
89 new_locale=$(GET gen_locale) ;;
90 *\ gen_keymap\ *)
91 new_keymap=$(GET gen_keymap) ;;
92 *\ apply_xorg_kbd\ *)
93 sed -i "s/XkbLayout.*/XkbLayout \" \"$(GET apply_xorg_kbd)\"/" \
94 /etc/X11/xorg.conf.d/40-Keyboard.conf ;;
95 *\ style*)
96 sed -i s/'^STYLE.*'/"STYLE=\"$(GET style)\""/ $CONFIG
97 . $CONFIG ;;
98 esac
104 #
105 # Default xHTML content
106 #
108 xhtml_header
109 check_root_tazpanel
111 case " $(GET) " in
112 *\ group*)
113 #
114 # Groups management
115 #
116 cat <<EOT
117 <h2 id="groups">$(_ 'Manage groups')</h2>
120 <section>
121 <form class="wide">
122 <header>
123 <input type="hidden" name="groups"/>
124 <!-- $(_ 'Selection:') -->
125 <button name="do" value="delgroups" data-icon="delete">$(_ 'Delete group')</button>
126 </header>
128 <div class="scroll">
129 <table class="wide zebra scroll">
130 <thead>
131 <tr class="thead">
132 <td>$(_ 'Group')</td>
133 <td>$(_ 'Group ID')</td>
134 <td>$(_ 'Members')</td>
135 </tr>
136 </thead>
137 <tbody>
138 EOT
139 for group in $(getdb group | cut -d ":" -f 1); do
140 IFS=':'
141 set -- $(getdb group | grep "^$group:")
142 unset IFS
143 gid=$3
144 members=$4
145 cat <<EOT
146 <tr>
147 <td><input type="checkbox" name="group" value="$group" id="$group"/>
148 <label for="$group" data-icon="group">$group</label></td>
149 <td>$gid</td>
150 <td>${members//,/, }</td>
151 </tr>
152 EOT
153 done
154 cat <<EOT
155 </tbody>
156 </table>
157 </div>
158 </form>
159 </section>
162 <section>
163 <header>$(_ 'Add a new group')</header>
164 <form>
165 <input type="hidden" name="groups"/>
166 <table>
167 <tr><td>$(_ 'Group name:')</td>
168 <td><input type="text" name="group"/></td>
169 </tr>
170 <tr><td colspan="2">
171 <button type="submit" name="do" value="addgroup" data-icon="add">$(_ 'Create group')</button>
172 </td></tr>
173 </table>
174 </form>
175 </section>
178 <section>
179 <header>$(_ 'Manage group membership')</header>
180 <form>
181 <input type="hidden" name="groups"/>
182 <table>
183 <tr>
184 <td>$(_ 'Group name:')</td>
185 <td><select name="group">$(listdb group)</select></td>
186 <td>$(_ 'User name:')</td>
187 <td><select name="member">$(listdb passwd)</select></td>
188 </tr>
189 <tr>
190 <td colspan="2">
191 <button name="do" value="addmember" data-icon="add">$(_ 'Add user')</button>
192 </td>
193 <td colspan="2">
194 <button name="do" value="delmember" data-icon="delete">$(_ 'Remove user')</button>
195 </td>
196 </tr>
197 </table>
198 </form>
199 </section>
201 EOT
202 ;;
205 *\ user*)
206 #
207 # Users management
208 #
209 cat <<EOT
210 <h2 id="users">$(_ 'Manage users')</h2>
212 <section>
213 <form class="wide">
214 <header>
215 <!--$(_ 'Selection:')-->
216 <button name="do" value="delusers" data-icon="delete">$(_ 'Delete user')</button>
217 <button name="do" value="lockusers" data-icon="lock" >$(_ 'Lock user' )</button>
218 <button name="do" value="unlockusers" data-icon="unlock">$(_ 'Unlock user')</button>
219 </header>
221 <table class="wide zebra center">
222 <thead>
223 <tr>
224 <td>$(_ 'Login')</td>
225 <td>$(_ 'User ID')</td>
226 <td>$(_ 'Name')</td>
227 <td>$(_ 'Home')</td>
228 <td>$(_ 'Shell')</td>
229 </tr>
230 </thead>
231 </tbody>
232 EOT
233 for login in $(getdb passwd | cut -d ":" -f 1); do
234 if [ -d /home/$login ]; then
235 colorlogin=$login
236 grep -qs "^$login:!" /etc/shadow &&
237 colorlogin="<span style='color: red;'>$login</span>"
238 IFS=':'
239 set -- $(getdb passwd | grep "^$login:")
240 unset IFS
241 cat <<EOT
242 <tr>
243 <td style="white-space: nowrap">
244 <input type="checkbox" name="user" value="$login" id="$login"/>
245 <label for="$login" data-icon="user">$colorlogin</label></td>
246 <td>$3:$4</td>
247 <td>$(echo $5 | sed s/,.*//)</td>
248 <td>$6</td>
249 <td>$7</td>
250 </tr>
251 EOT
252 fi
253 done
254 cat <<EOT
255 </tbody>
256 </table>
257 EOT
258 cat <<EOT
259 <footer>
260 <div>
261 $(_ 'Password:')
262 <input type="password" name="password"/>
263 <button type="submit" name="do" value="chpasswd" data-icon="ok">$(_ 'Change password')</button>
264 </div>
265 </footer>
266 </form>
267 </section>
270 <section>
271 <header>$(_ 'Add a new user')</header>
273 <form>
274 <input type="hidden" name="users"/>
275 <table class="summary">
276 <tr><td>$(_ 'User login:')</td>
277 <td><input type="text" name="user" size="30" pattern="[a-z]*"/></td></tr>
278 <tr><td>$(_ 'User name:')</td>
279 <td><input type="text" name="name" size="30"/></td></tr>
280 <tr><td>$(_ 'User password:')</td>
281 <td><input type="password" name="passwd" size="30"/></td></tr>
282 </table>
284 <footer>
285 <button type="submit" name="do" value="adduser" data-icon="add">$(_ 'Create user')</button>
286 </footer>
287 </form>
288 </section>
289 EOT
291 # `who` output is empty in the Live mode
292 if [ -n "$(who)" ]; then
293 cat <<EOT
294 <section>
295 <header>$(_ 'Current user sessions')</header>
296 <pre>$(who)</pre>
297 </section>
298 EOT
299 fi
301 # `last` output is empty (just header) in the Live mode
302 if [ "$(last | wc -l)" != "1" ]; then
303 cat <<EOT
304 <section>
305 <header>$(_ 'Last user sessions')</header>
306 <div class="scroll"><pre>$(last)</pre></div>
307 </section>
308 EOT
309 fi
310 ;;
313 *\ locale*)
314 #
315 # Choose locale
316 #
317 LOADING_MSG="$(_ 'Please wait...')"; loading_msg
319 cur_loc=$(locale | grep LANG | cut -d= -f2)
320 cat <<EOT
321 <h2 id="locale">$(_ 'Choose locale')</h2>
323 <section>
324 <header>$(_ 'Current locale settings:')</header>
325 <div>
326 <pre>$(locale)</pre>
327 </div>
328 </section>
330 <section>
331 <header>$(_ 'Locales that are currently installed on the machine:')</header>
332 <div>
333 <pre>$(locale -a)</pre>
334 </div>
335 </section>
336 EOT
338 is_installed "glibc-locale"
339 [ $? = 1 ] &&
340 msg tip $(_ \
341 "Can't see your language?<br/>You can \
342 <a href='pkgs.cgi?do=Install&amp;glibc-locale'>install glibc-locale</a> \
343 to see a larger list of available locales.")
346 cat <<EOT
347 <section>
348 <header>$(_ 'Available locales:')</header>
349 <form class="wide">
350 <table class="wide zebra">
351 <thead>
352 <tr><td>$(_ 'Code')</td>
353 <td>$(_ 'Language')</td>
354 <td>$(_ 'Territory')</td>
355 <td>$(_ 'Description')</td>
356 </tr>
357 </thead>
358 <tbody>
359 EOT
360 for locale in $(find /usr/share/i18n/locales -type f | sort); do
361 locale_name=$(basename $locale)
362 locale_title=$(grep -m 1 -e '^ *title' $locale | cut -d'"' -f2)
363 if [ -n "$locale_title" ]; then
364 sel=''; [ "$locale_name" == "$cur_loc" ] && sel='checked="checked"'
365 cat <<EOT
366 <tr>
367 <td>
368 <input type="radio" name="gen_locale" value="$locale_name" $sel id="$locale_name"/>
369 <label for="$locale_name">$locale_name</label>
370 </td>
371 <td>$(gettext -d iso_639 "$(grep -m 1 -e '^ *language' $locale | cut -d '"' -f2)")</td>
372 <td>$(gettext -d iso_3166 "$(grep -m 1 -e '^ *territory' $locale | cut -d '"' -f2)")</td>
373 <td>$locale_title</td>
374 </tr>
375 EOT
376 fi
377 done
378 cat <<EOT
379 </tbody>
380 </table>
382 <footer>
383 <button type="submit" data-icon="ok">$(_ 'Activate')</button>
384 </footer>
385 </form>
386 </section>
387 EOT
388 ;;
391 *)
392 #
393 # Default system settings page
394 #
396 cat <<EOT
397 <h2>$(_ 'System settings')</h2>
399 <p>$(_ 'Manage system time, users or language settings')<p>
401 <form><!--
402 --><button name="users" data-icon="user" >$(_ 'Manage users' )</button><!--
403 --><button name="groups" data-icon="group">$(_ 'Manage groups')</button>
404 </form>
406 <section>
407 <header>$(_ 'System time')</header>
408 <div>
409 <form class="wide">
410 <fieldset><legend>$(_ 'Time zone:')</legend>
411 <select name="tz">
412 $(cd /usr/share/zoneinfo; find * -type f ! -name '*.tab' | sort | \
413 awk -vtz="$(cat /etc/TZ)" \
414 '{printf("<option%s>%s</option>", ($1 == tz)?" selected":"", $1)}')
415 </select>
416 <button name="do" value="settz" data-icon="ok">$(_ 'Change')</button>
417 </fieldset>
419 <fieldset><legend>$(_ 'System time:')</legend>
420 $(date | sed 's|[0-9][0-9]:[0-9:]*|<span id="time">&</span>|')
421 <button name="do" value="rdate" data-icon="sync">$(_ 'Sync online')</button>
422 </fieldset>
424 <fieldset id="hwclock1"><legend>$(_ 'Hardware clock:')</legend>
425 $(hwclock -ur | sed 's|0.000000 seconds||')
426 <button name="do" value="hwclock" id="hwclock" data-icon="clock">$(_ 'Set hardware clock')</button>
427 </fieldset>
429 <fieldset><legend>$(_ 'Set date')</legend>
430 <input type="number" name="day" value="$(date +%d)" min="1" max="31" size="4" required/>
431 <select name="month" value="$(date +%m)">
432 $(for i in $(seq 12); do
433 sel=''; [ "$i" == "$(date +%-m)" ] && sel=' selected'
434 printf "<option value=\"%s\"$sel>%s</option>" $(date -d $i.01-01:01 '+%m %B')
435 done)
436 </select>
437 <input type="number" name="year" value="$(date +%Y)" min="2015" max="2030" size="6" required/>
438 - <input type="number" name="hour" value="$(date +%H)" min="0" max="23" size="4" required/><!--
439 -->:<input type="number" name="min" value="$(date +%M)" min="0" max="59" size="4" required/><!--
440 -->:<input type="number" name="sec" value="00" min="0" max="59" size="4" required/>
441 <button name="do" value="date" data-icon="ok">$(_ 'Set date')</button>
442 </fieldset>
443 </form>
444 </div>
446 <script type="text/javascript">
447 // Live time on page
448 Date.prototype.timeNow = function() {
449 return ((this.getHours() < 10)?"0":"") + this.getHours() + ":" + ((this.getMinutes() < 10)?"0":"") + this.getMinutes() + ":" + ((this.getSeconds() < 10)?"0":"") + this.getSeconds();
450 }
451 setInterval(function(){document.getElementById('time').innerText = new Date().timeNow()}, 1000);
453 //document.getElementById('hwclock').disabled = 'disabled';
454 </script>
455 </section>
456 EOT
459 #
460 # Locale settings
461 #
462 cat <<EOT
463 <section>
464 <header id="locale">$(_ 'System language')</header>
465 <div>
466 <form>
467 EOT
468 # Check if a new locale was requested
469 if [ -n "$new_locale" ]; then
470 rm -rf /usr/lib/locale/$new_locale
471 localedef -i $new_locale -c -f UTF-8 \
472 /usr/lib/locale/$new_locale
473 # System configuration
474 echo "LANG=$new_locale" > /etc/locale.conf
475 echo "LC_ALL=$new_locale" >> /etc/locale.conf
476 msg warn "$(_ \
477 'You must logout and login again to your current session to use %s locale.' $new_locale)"
478 else
479 cat <<EOT
480 $(_ 'Current system locale:')
481 <strong>$(locale | grep LANG | cut -d= -f2)</strong>
482 <button name="locale" data-icon="locale">$(_ 'Change')</button>
483 EOT
484 fi
485 cat <<EOT
486 </div>
487 </form>
488 </section>
491 <section>
492 <header id="keymap">$(_ 'Keyboard layout')</header>
493 <div>
494 EOT
495 # Check if a new keymap was requested
496 if [ -n "$new_keymap" ]; then
497 echo "$new_keymap" > /etc/keymap.conf
498 if [ -x /bin/loadkeys ]; then
499 loadkeys $new_keymap
500 else
501 loadkmap < /usr/share/kmap/$new_keymap.kmap
502 fi
503 fi
505 keymap=$(cat /etc/keymap.conf)
506 _ 'Current console keymap: %s' $keymap
507 if [ -n "$keymap" ]; then
508 case "$keymap" in
509 fr_CH*)
510 keymap="ch" ;;
511 ru)
512 keymap="us,ru" ;;
513 slovene)
514 keymap=si ;;
515 *)
516 keymap=${keymap%-lat*}
517 keymap=${keymap%-abnt2} ;;
518 esac
519 keyboard_config=/etc/X11/xorg.conf.d/40-Keyboard.conf
520 cat <<EOT
521 <form id="settings"></form>
522 <form id="index" action="index.cgi"></form>
523 <br/>
524 $(_ 'Suggested keymap for Xorg:') $keymap
525 <button form="settings" name="apply_xorg_kbd" value="$keymap" data-icon="ok">$(_ 'Activate')</button>
526 <button form="index" name="file" value="$keyboard_config" data-icon="edit">$(_ 'Edit')</button>
527 <br/>
528 EOT
529 fi
530 cat <<EOT
531 <form>
532 $(_ 'Available keymaps:')
533 <select name="gen_keymap">
534 $(list_keymaps)
535 </select>
536 <button type="submit" data-icon="ok">$(_ 'Activate')</button>
537 </form>
538 </div>
539 </section>
542 <section>
543 <header>$(_ 'Panel configuration')</header>
544 <div>
545 <form class="wide">
546 <fieldset><legend>$(_ 'Style:')</legend>
547 <select name="style">$(list_styles)</select>
548 <button data-icon="ok">$(_ 'Activate')</button>
549 </fieldset>
550 </form>
552 <fieldset><legend>$(_ 'Configuration files:')</legend>
553 <button form="index" name="file" value="$CONFIG" data-icon="edit">$(_ 'Panel')</button>
554 <button form="index" name="file" value="$HTTPD_CONF" data-icon="edit">$(_ 'Server')</button>
555 </fieldset>
557 <p>$(_ 'TazPanel provides a debugging mode and page:')
558 <a href="index.cgi?debug">debug</a>
559 </p>
560 </div>
561 </section>
562 EOT
563 ;;
564 esac
566 xhtml_footer
567 exit 0