tazpanel view settings.cgi @ rev 422

Remove development code (thanks az_ua).
author Aleksej Bobylev <al.bobylev@gmail.com>
date Wed Mar 25 03:29:55 2015 +0200 (2015-03-25)
parents 299f204b8f1f
children b0146d791379
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=$(gettext 'TazPanel - Settings')
20 # Get system database. LDAP compatible.
22 getdb()
23 {
24 getent $1 2>/dev/null || cat /etc/$1
25 }
27 listdb()
28 {
29 for item in $(getdb $1 | cut -d ":" -f 1); do
30 echo "<option>$item</option>\n"
31 done
32 }
35 #############################
36 # Get info from locale file #
37 #############################
39 get_locale_info()
40 {
41 # Commands like `LC_ALL=fr_FR locale -k LC_MEASUREMENT` will do the job
42 # only when your locale is generated and exists in the /usr/lib/locale.
43 # Here we manually parse locale definition files from /usr/share/i18n/locales/.
44 # Strange, bloated and not script-friendly format :(
46 [ ! -e /usr/share/i18n/locales/$1 ] && return
48 # Prepare file
49 if [ ! -e /tmp/tazpanel-$1 ]; then
50 sed 's|^[ \t]*||;/^%/d;/^comment_char/d;/^escape_char/d' /usr/share/i18n/locales/$1 | tr '\n' '&' | sed 's|/&||g' | tr '&' '\n' | sed 's|<U\([0-9a-fA-F]*\)>|\&#x\1;|g' | sed 's|&#x00|\&#x|g' > /tmp/tazpanel-$1
51 fi
53 local ANS=$(grep -e "^$2[ ]" /tmp/tazpanel-$1 | sed 's|^[^ \t][^ \t]* *||')
54 if [ -z "$ANS" ]; then
55 # Not found, then section is copied from other locale definition file...
56 case $2 in
57 measurement)
58 section='LC_MEASUREMENT';;
59 width|height)
60 section='LC_PAPER';;
61 currency_symbol|int_curr_symbol)
62 section='LC_MONETARY';;
63 day|abday|mon|abmon|d_t_fmt|d_fmt|t_fmt|am_pm|t_fmt_ampm|date_fmt)
64 section='LC_TIME';;
65 esac
66 # Recursive call
67 get_locale_info $(sed -n '/^'$section'/,/^END '$section'/p' /tmp/tazpanel-$1 | grep 'copy' | cut -d'"' -f2) $2
68 else
69 case $2 in
70 day|abday|mon|abmon|am_pm) # semicolon-separated list in double quotes
71 echo "$ANS";;
72 *) # single value in double qoutes
73 echo "$ANS" | cut -d'"' -f2;;
74 esac
75 fi
76 }
79 # Get info from locale file about measurement system
81 get_locale_info_measurement()
82 {
83 # faster to use pre-processed values
84 case $1 in
85 en_AG|en_US|es_PR|es_US|nl_AW|yi_US) gettext 'US' ;;
86 POSIX) ;;
87 *) gettext 'metric' ;;
88 esac
89 }
92 # Get info from locale file about paper size
94 get_locale_info_paper()
95 {
96 # faster to use pre-processed values
97 case $1 in
98 en_AG|en_US|es_PR|es_US|nl_AW|yi_US) echo '8½×11 (US Letter)';;
99 en_CA|en_PH|es_CL|es_CO|es_CR|es_GT|es_MX|es_NI|es_PA|es_SV|es_VE|fil_PH|fr_CA|ik_CA|iu_CA|shs_CA|tl_PH) echo '216×279 (US Letter)';;
100 POSIX) ;;
101 *) echo '210×297 (A4)';;
102 esac
103 }
106 # Get info from locale file about date and time format
108 get_locale_info_date_time()
109 {
110 case $2 in
111 c) get_locale_info $1 d_t_fmt ;;
112 x) get_locale_info $1 d_fmt ;;
113 X) get_locale_info $1 t_fmt ;;
114 r) get_locale_info $1 t_fmt_ampm ;;
115 *) get_locale_info $1 date_fmt ;;
116 esac | sed 's|&#x20;| |g; s|&#x25;|%|g; s|&#x2C;|,|g; s|&#x2D;|-|g; s|&#x2E;|.|g; s|&#x2F;|/|g; s|&#x3A;|:|g; s|&#x41;|A|g; s|&#x42;|B|g; s|&#x43;|C|g; s|&#x46;|F|g; s|&#x48;|H|g; s|&#x49;|I|g; s|&#x4D;|M|g; s|&#x4F;|O|g; s|&#x52;|R|g; s|&#x53;|S|g; s|&#x54;|T|g; s|&#x58;|X|g; s|&#x59;|Y|g; s|&#x5A;|Z|g; s|&#x61;|a|g; s|&#x62;|b|g; s|&#x65;|e|g; s|&#x64;|d|g; s|&#x6B;|k|g; s|&#x6D;|m|g; s|&#x6E;|n|g; s|&#x6F;|o|g; s|&#x70;|p|g; s|&#x72;|r|g; s|&#x74;|t|g; s|&#x78;|x|g; s|&#x79;|y|g; s|&#x7A;|z|g;'
118 }
121 parse_date()
122 {
123 local weekday month day abday mon abmon rtime d_fmt t_fmt am_pm
124 weekday=$(( $(date +%w) + 1 )) # 1=Sunday ...
125 month=$(date +%-m) # 1=January ...
126 day=$(get_locale_info $1 day | cut -d'"' -f$(( 2 * $weekday )) | sed 's|&|\\\&|g') # translated day of week
127 abday=$(get_locale_info $1 abday | cut -d'"' -f$(( 2 * $weekday )) | sed 's|&|\\\&|g') # same, abbreviated
128 mon=$(get_locale_info $1 mon | cut -d'"' -f$(( 2 * $month )) | sed 's|&|\\\&|g') # translated month
129 abmon=$(get_locale_info $1 abmon | cut -d'"' -f$(( 2 * $month )) | sed 's|&|\\\&|g') # same, abbreviated
130 # next %-codes expanded into other %-codes
131 rtime=$(get_locale_info_date_time $1 r | sed 's|&|\\\&|g') # %r: 12-hour time
132 d_fmt=$(get_locale_info_date_time $1 x | sed 's|&|\\\&|g') # %x: date
133 t_fmt=$(get_locale_info_date_time $1 X | sed 's|&|\\\&|g') # %X: time
135 case $(LC_ALL=POSIX date +%P) in # translated am/pm
136 am) am_pm=$(get_locale_info $1 am_pm | cut -d'"' -f2 | sed 's|&|\\\&|g');;
137 pm) am_pm=$(get_locale_info $1 am_pm | cut -d'"' -f4 | sed 's|&|\\\&|g');;
138 esac
140 # r x X | OC | Y y Oy Ey | m -m Om | d -d Od | e -e Oe | F | H OH k | I OI l | M OM | S OS | R T | Z z | t | P p Op A a B b
141 # Note: %P=am/pm; %p=AM/PM. But here they the same because it is not a simple job to convert letters.
142 echo "$2" | sed "s|%r|$rtime|; s|%x|$d_fmt|; s|%X|$t_fmt|; \
143 s|%OC|S(date +%OC)|; \
144 s|%Y|$(date +%Y)|; s|%y|$(date +%y )|; s|%Oy|$(date +%Oy)|; s|%Ey|$(date +%Ey)|; \
145 s|%m|$(date +%m)|; s|%-m|$(date +%-m)|; s|%Om|$(date +%Om)|; \
146 s|%d|$(date +%d)|; s|%-d|$(date +%-d)|; s|%Od|$(date +%Od)|; \
147 s|%e|$(date +%e)|; s|%-e|$(date +%-e)|; s|%Oe|$(date +%Oe)|; \
148 s|%F|$(date +%F)|; \
149 s|%H|$(date +%H)|; s|%OH|$(date +%OH)|; s|%k|$(date +%k)|; \
150 s|%I|$(date +%I)|; s|%OI|$(date +%OI)|; s|%l|$(date +%l)|; \
151 s|%M|$(date +%M)|; s|%OM|$(date +%OM)|; \
152 s|%S|$(date +%S)|; s|%OS|$(date +%OS)|; \
153 s|%R|$(date +%R)|; s|%T|$(date +%T )|; \
154 s|%Z|$(date +%Z)|; s|%z|$(date +%z )|; \
155 s|%t|\t|; \
156 s|%P|$am_pm|; s|%p|$am_pm|; s|%Op|$am_pm|; s|%A|$day|; s|%a|$abday|; s|%B|$mon|; s|%b|$abmon|;"
158 }
160 list_of()
161 {
162 cd /usr/share/i18n/locales
163 #mon=$(date +%-m); monn=$(( $mon * 2 ))
164 #echo "mon=\"$mon\" monn=\"$monn\""
166 echo '<pre>'
167 for LOC in be_BY ca_IT el_CY fr_CH ru_RU ru_UA; do
168 case $LOC in
169 iso*|translit*) ;;
170 *)
171 #echo -e "$LOC:\t$(parse_date $LOC $(get_locale_info_date_time $LOC c | sed 's|&|\\\&|g'))";;
172 FMT="$(get_locale_info_date_time $LOC c)"
173 echo -e "$LOC:\t$FMT"
174 parse_date $LOC "$FMT"
175 echo;;
176 esac
177 done
178 echo '</pre>'
179 }
185 #
186 # Commands executed before page loading.
187 #
189 case " $(GET) " in
190 *\ do\ *)
191 users=$(echo $QUERY_STRING | awk 'BEGIN{RS="&";FS="="}{if($1=="user") print $2}')
192 groups=$(echo $QUERY_STRING | awk 'BEGIN{RS="&";FS="="}{if($1=="group")print $2}')
194 case $(GET do) in
196 # Groups page
197 delgroups)
198 for i in $groups; do delgroup $i; done ;;
199 addgroup)
200 addgroup $groups ;;
201 addmember)
202 addgroup $(GET member) $groups ;;
203 delmember)
204 delgroup $(GET member) $groups ;;
206 # Users page
207 delusers)
208 for i in $users; do deluser $i; done ;;
209 lockusers)
210 for i in $users; do passwd -l $i | log; done ;;
211 unlockusers)
212 for i in $users; do passwd -u $i | log; done ;;
213 chpasswd)
214 echo "$users:$(GET password)" | chpasswd -m | log ;;
215 adduser)
216 if [ -n "$users" ]; then
217 name=$(GET name); name=${name:-SliTaz User}
218 adduser -D -s /bin/sh -g "$name" -G users -h /home/$users $users
219 echo "$user:$(GET passwd)" | chpasswd -m | log
220 for i in audio cdrom floppy video tty; do addgroup $users $i; done
221 fi ;;
223 # System time
224 settz)
225 GET tz > /etc/TZ;;
226 date) # normalize to two digits
227 date $(printf '%02d%02d%02d%02d%d.%02d' "$(GET month)" "$(GET day)" "$(GET hour)" "$(GET min)" "$(GET year)" "$(GET sec)") >/dev/null;;
228 rdate)
229 rdate -s tick.greyware.com ;;
230 hwclock)
231 hwclock -w -u ;;
233 esac
234 ;;
237 *\ gen_locale\ *)
238 new_locale=$(GET gen_locale) ;;
239 *\ gen_keymap\ *)
240 new_keymap=$(GET gen_keymap) ;;
241 *\ apply_xorg_kbd\ *)
242 sed -i "s/XkbLayout.*/XkbLayout \" \"$(GET apply_xorg_kbd)\"/" \
243 /etc/X11/xorg.conf.d/40-Keyboard.conf ;;
244 *\ panel_pass*)
245 sed -i s@/:root:.*@/:root:$(GET panel_pass)@ $HTTPD_CONF ;;
246 *\ style*)
247 sed -i s/'^STYLE.*'/"STYLE=\"$(GET style)\""/ $CONFIG
248 . $CONFIG ;;
249 esac
255 #
256 # Default xHTML content
257 #
259 xhtml_header
261 case " $(GET) " in
262 *\ group*)
263 #
264 # Groups management
265 #
266 cat <<EOT
267 <h2 id="groups">$(gettext 'Manage groups')</h2>
270 <section>
271 <form class="wide">
272 <header>
273 <input type="hidden" name="groups"/>
274 <!-- $(gettext 'Selection:') -->
275 <button name="do" value="delgroups" data-icon="delete">$(gettext 'Delete group')</button>
276 </header>
278 <div class="scroll">
279 <table class="wide zebra scroll">
280 <thead>
281 <tr class="thead">
282 <td>$(gettext 'Group')</td>
283 <td>$(gettext 'Group ID')</td>
284 <td>$(gettext 'Members')</td>
285 </tr>
286 </thead>
287 <tbody>
288 EOT
289 for group in $(getdb group | cut -d ":" -f 1); do
290 IFS=':'
291 set -- $(getdb group | grep "^$group:")
292 unset IFS
293 gid=$3
294 members=$4
295 cat <<EOT
296 <tr>
297 <td><input type="checkbox" name="group" value="$group" id="$group"/>
298 <label for="$group" data-icon="group">$group</label></td>
299 <td>$gid</td>
300 <td>${members//,/, }</td>
301 </tr>
302 EOT
303 done
304 cat <<EOT
305 </tbody>
306 </table>
307 </div>
308 </form>
309 </section>
312 <section>
313 <header>$(gettext 'Add a new group')</header>
314 <form>
315 <input type="hidden" name="groups"/>
316 <table>
317 <tr><td>$(gettext 'Group name:')</td>
318 <td><input type="text" name="group"/></td>
319 </tr>
320 <tr><td colspan="2">
321 <button type="submit" name="do" value="addgroup" data-icon="add">$(gettext 'Create group')</button>
322 </td></tr>
323 </table>
324 </form>
325 </section>
328 <section>
329 <header>$(gettext 'Manage group membership')</header>
330 <form>
331 <input type="hidden" name="groups"/>
332 <table>
333 <tr>
334 <td>$(gettext 'Group name:')</td>
335 <td><select name="group">$(listdb group)</select></td>
336 <td>$(gettext 'User name:')</td>
337 <td><select name="member">$(listdb passwd)</select></td>
338 </tr>
339 <tr>
340 <td colspan="2">
341 <button name="do" value="addmember" data-icon="add">$(gettext 'Add user')</button>
342 </td>
343 <td colspan="2">
344 <button name="do" value="delmember" data-icon="delete">$(gettext 'Remove user')</button>
345 </td>
346 </tr>
347 </table>
348 </form>
349 </section>
351 EOT
352 ;;
355 *\ user*)
356 #
357 # Users management
358 #
359 cat <<EOT
360 <h2 id="users">$(gettext 'Manage users')</h2>
362 <section>
363 <form class="wide">
364 <header>
365 <!--$(gettext 'Selection:')-->
366 <button name="do" value="delusers" data-icon="delete">$(gettext 'Delete user')</button>
367 <button name="do" value="lockusers" data-icon="lock" >$(gettext 'Lock user' )</button>
368 <button name="do" value="unlockusers" data-icon="unlock">$(gettext 'Unlock user')</button>
369 </header>
371 <table class="wide zebra center">
372 <thead>
373 <tr>
374 <td>$(gettext 'Login')</td>
375 <td>$(gettext 'User ID')</td>
376 <td>$(gettext 'Name')</td>
377 <td>$(gettext 'Home')</td>
378 <td>$(gettext 'Shell')</td>
379 </tr>
380 </thead>
381 </tbody>
382 EOT
383 for login in $(getdb passwd | cut -d ":" -f 1); do
384 if [ -d /home/$login ]; then
385 colorlogin=$login
386 grep -qs "^$login:!" /etc/shadow &&
387 colorlogin="<span style='color: red;'>$login</span>"
388 IFS=':'
389 set -- $(getdb passwd | grep "^$login:")
390 unset IFS
391 cat <<EOT
392 <tr>
393 <td style="white-space: nowrap">
394 <input type="checkbox" name="user" value="$login" id="$login"/>
395 <label for="$login" data-icon="user">$colorlogin</label></td>
396 <td>$3:$4</td>
397 <td>$(echo $5 | sed s/,.*//)</td>
398 <td>$6</td>
399 <td>$7</td>
400 </tr>
401 EOT
402 fi
403 done
404 cat <<EOT
405 </tbody>
406 </table>
407 EOT
408 cat <<EOT
409 <footer>
410 <div>
411 $(gettext 'Password:')
412 <input type="password" name="password"/>
413 <button type="submit" name="do" value="chpasswd" data-icon="ok">$(gettext 'Change password')</button>
414 </div>
415 </footer>
416 </form>
417 </section>
420 <section>
421 <header>$(gettext 'Add a new user')</header>
423 <form>
424 <input type="hidden" name="users"/>
425 <table class="summary">
426 <tr><td>$(gettext 'User login:')</td>
427 <td><input type="text" name="user" size="30" pattern="[a-z]*"/></td></tr>
428 <tr><td>$(gettext 'User name:')</td>
429 <td><input type="text" name="name" size="30"/></td></tr>
430 <tr><td>$(gettext 'User password:')</td>
431 <td><input type="password" name="passwd" size="30"/></td></tr>
432 </table>
434 <footer>
435 <button type="submit" name="do" value="adduser" data-icon="add">$(gettext 'Create user')</button>
436 </footer>
437 </form>
438 </section>
441 <section>
442 <header>$(gettext 'Current user sessions')</header>
443 <pre>$(who)</pre>
444 </section>
447 <section>
448 <header>$(gettext 'Last user sessions')</header>
449 <div class="scroll"><pre>$(last)</pre></div>
450 </section>
451 EOT
452 ;;
455 *\ locale*)
456 #
457 # Choose locale
458 #
459 LOADING_MSG="$(gettext 'Please wait...')"; loading_msg
461 cur_loc=$(locale | grep LANG | cut -d= -f2)
462 cat <<EOT
463 <h2 id="locale">$(gettext 'Choose locale')</h2>
465 <section>
466 <header>$(gettext 'Current locale settings:')</header>
467 <div>
468 <pre>$(locale)</pre>
469 </div>
470 </section>
472 <section>
473 <header>$(gettext 'Locales that are currently installed on the machine:')</header>
474 <div>
475 <pre>$(locale -a)</pre>
476 </div>
477 </section>
478 EOT
480 is_installed "glibc-locale"
481 [ $? = 1 ] &&
482 msg tip $(gettext \
483 "Can't see your language?<br/>You can \
484 <a href='/pkgs.cgi?do=Install&amp;glibc-locale'>install glibc-locale</a> \
485 to see a larger list of available locales.")
488 cat <<EOT
489 <section>
490 <header>$(gettext 'Available locales:')</header>
491 <form class="wide">
492 <table class="wide zebra">
493 <thead>
494 <tr><td>$(gettext 'Code')</td>
495 <td>$(gettext 'Language')</td>
496 <td>$(gettext 'Territory')</td>
497 <td>$(gettext 'Description')</td>
498 </tr>
499 </thead>
500 <tbody>
501 EOT
502 for locale in $(find /usr/share/i18n/locales -type f | sort); do
503 locale_name=$(basename $locale)
504 locale_title=$(grep -m 1 -e '^ *title' $locale | cut -d'"' -f2)
505 if [ -n "$locale_title" ]; then
506 sel=''; [ "$locale_name" == "$cur_loc" ] && sel='checked="checked"'
507 cat <<EOT
508 <tr>
509 <td>
510 <input type="radio" name="gen_locale" value="$locale_name" $sel id="$locale_name"/>
511 <label for="$locale_name">$locale_name</label>
512 </td>
513 <td>$(gettext -d iso_639 "$(grep -m 1 -e '^ *language' $locale | cut -d '"' -f2)")</td>
514 <td>$(gettext -d iso_3166 "$(grep -m 1 -e '^ *territory' $locale | cut -d '"' -f2)")</td>
515 <td>$locale_title</td>
516 </tr>
517 EOT
518 fi
519 done
520 cat <<EOT
521 </tbody>
522 </table>
524 <footer>
525 <button type="submit" data-icon="ok">$(gettext 'Activate')</button>
526 </footer>
527 </form>
528 </section>
529 EOT
530 ;;
533 *)
534 #
535 # Default system settings page
536 #
538 cat <<EOT
539 <h2>$(gettext 'System settings')</h2>
541 <p>$(gettext 'Manage system time, users or language settings')<p>
543 <form><!--
544 --><button name="users" data-icon="user" >$(gettext 'Manage users' )</button><!--
545 --><button name="groups" data-icon="group">$(gettext 'Manage groups')</button>
546 </form>
548 <section>
549 <header>$(gettext 'System time')</header>
550 <div>
551 <form class="wide">
552 <fieldset><legend>$(gettext 'Time zone:')</legend>
553 <select name="tz">
554 $(cd /usr/share/zoneinfo; find * -type f ! -name '*.tab' | sort | \
555 awk -vtz="$(cat /etc/TZ)" \
556 '{printf("<option%s>%s</option>", ($1 == tz)?" selected":"", $1)}')
557 </select>
558 <button name="do" value="settz" data-icon="ok">$(gettext 'Change')</button>
559 </fieldset>
560 <fieldset><legend>$(gettext 'System time:')</legend>
561 $(date | sed 's|[0-9][0-9]:[0-9:]*|<span id="time">&</span>|')
562 <button name="do" value="rdate" data-icon="sync">$(gettext 'Sync online')</button>
563 </fieldset>
564 <fieldset><legend>$(gettext 'Hardware clock:')</legend>
565 $(hwclock -ur | sed 's|0.000000 seconds||')
566 <button name="do" value="hwclock" data-icon="clock">$(gettext 'Set hardware clock')</button>
567 </fieldset>
568 <fieldset><legend>$(gettext 'Set date')</legend>
569 <input type="number" name="day" value="$(date +%d)" min="1" max="31" size="4" required/>
570 <select name="month" value="$(date +%m)">
571 $(for i in $(seq 12); do
572 printf '<option value="%s">%s</option>' $(date -d $i.01-01:01 '+%m %B')
573 done)
574 </select>
575 <input type="number" name="year" value="$(date +%Y)" min="2015" max="2030" size="6" required/>
576 - <input type="number" name="hour" value="$(date +%H)" min="0" max="23" size="4" required/><!--
577 -->:<input type="number" name="min" value="$(date +%M)" min="0" max="59" size="4" required/><!--
578 -->:<input type="number" name="sec" value="00" min="0" max="59" size="4" required/>
579 <button name="do" value="date" data-icon="ok">$(gettext 'Set date')</button>
580 </fieldset>
581 </form>
582 </div>
584 <script type="text/javascript">
585 // Live time on page
586 Date.prototype.timeNow = function() {
587 return ((this.getHours() < 10)?"0":"") + this.getHours() + ":" + ((this.getMinutes() < 10)?"0":"") + this.getMinutes() + ":" + ((this.getSeconds() < 10)?"0":"") + this.getSeconds();
588 }
589 setInterval(function(){document.getElementById('time').innerText = new Date().timeNow()}, 1000);
590 </script>
591 </section>
592 EOT
595 #
596 # Locale settings
597 #
598 cat <<EOT
599 <section>
600 <header id="locale">$(gettext 'System language')</header>
601 <div>
602 <form>
603 EOT
604 # Check if a new locale was requested
605 if [ -n "$new_locale" ]; then
606 rm -rf /usr/lib/locale/$new_locale
607 localedef -i $new_locale -c -f UTF-8 \
608 /usr/lib/locale/$new_locale
609 # System configuration
610 echo "LANG=$new_locale" > /etc/locale.conf
611 echo "LC_ALL=$new_locale" >> /etc/locale.conf
612 msg warn "$(eval_gettext \
613 'You must logout and login again to your current session to use $new_locale locale.')"
614 else
615 cat <<EOT
616 $(gettext 'Current system locale:')
617 <strong>$(locale | grep LANG | cut -d= -f2)</strong>
618 <button name="locale" data-icon="locale">$(gettext 'Change')</button>
619 EOT
620 fi
621 cat <<EOT
622 </div>
623 </form>
624 </section>
627 <section>
628 <header id="keymap">$(gettext 'Keyboard layout')</header>
629 <div>
630 EOT
631 # Check if a new keymap was requested
632 if [ -n "$new_keymap" ]; then
633 echo "$new_keymap" > /etc/keymap.conf
634 if [ -x /bin/loadkeys ]; then
635 loadkeys $new_keymap
636 else
637 loadkmap < /usr/share/kmap/$new_keymap.kmap
638 fi
639 fi
641 keymap=$(cat /etc/keymap.conf)
642 eval_gettext 'Current console keymap: $keymap'
643 if [ -n "$keymap" ]; then
644 case "$keymap" in
645 fr_CH*)
646 keymap="ch" ;;
647 ru)
648 keymap="us,ru" ;;
649 slovene)
650 keymap=si ;;
651 *)
652 keymap=${keymap%-lat*}
653 keymap=${keymap%-abnt2} ;;
654 esac
655 keyboard_config=/etc/X11/xorg.conf.d/40-Keyboard.conf
656 cat <<EOT
657 <form id="settings"></form>
658 <form id="index" action="index.cgi"></form>
659 <br/>
660 $(gettext 'Suggested keymap for Xorg:') $keymap
661 <button form="settings" name="apply_xorg_kbd" value="$keymap" data-icon="ok">$(gettext 'Activate')</button>
662 <button form="index" name="file" value="$keyboard_config" data-icon="edit">$(gettext 'Edit')</button>
663 <br/>
664 EOT
665 fi
666 cat <<EOT
667 <form>
668 $(gettext 'Available keymaps:')
669 <select name="gen_keymap">
670 $(list_keymaps)
671 </select>
672 <button type="submit" data-icon="ok">$(gettext 'Activate')</button>
673 </form>
674 </div>
675 </section>
678 <section>
679 <header>$(gettext 'Panel configuration')</header>
680 <div>
681 <form class="wide">
682 <fieldset><legend>$(gettext 'Style:')</legend>
683 <select name="style">$(list_styles)</select>
684 <button data-icon="ok">$(gettext 'Activate')</button>
685 </fieldset>
687 <fieldset><legend>$(gettext 'Panel password:')</legend>
688 <input type="password" name="panel_pass"/>
689 <button data-icon="ok">$(gettext 'Change')</button>
690 </fieldset>
691 </form>
693 <fieldset><legend>$(gettext 'Configuration files:')</legend>
694 <button form="index" name="file" value="$CONFIG" data-icon="edit">$(gettext 'Panel')</button>
695 <button form="index" name="file" value="$HTTPD_CONF" data-icon="edit">$(gettext 'Server')</button>
696 </fieldset>
698 <p>$(gettext 'TazPanel provides a debugging mode and page:')
699 <a href="/index.cgi?debug">debug</a>
700 </p>
701 </div>
702 </section>
703 EOT
704 ;;
705 esac
707 xhtml_footer
708 exit 0