tazpanel diff settings.cgi @ rev 419
Bunch of changes. Development in progress, please note it have few known bugs.
author | Aleksej Bobylev <al.bobylev@gmail.com> |
---|---|
date | Tue Mar 24 03:39:08 2015 +0200 (2015-03-24) |
parents | 106b85c1951c |
children | aeaf1b718445 |
line diff
1.1 --- a/settings.cgi Sat Jan 03 17:11:14 2015 +0200 1.2 +++ b/settings.cgi Tue Mar 24 03:39:08 2015 +0200 1.3 @@ -4,17 +4,21 @@ 1.4 # don't have multiple pages here there is only one case used to get command 1.5 # values and the full content is followed directly. 1.6 # 1.7 -# Copyright (C) 2011-2014 SliTaz GNU/Linux - BSD License 1.8 +# Copyright (C) 2011-2015 SliTaz GNU/Linux - BSD License 1.9 # 1.10 1.11 + 1.12 # Common functions from libtazpanel 1.13 + 1.14 . lib/libtazpanel 1.15 get_config 1.16 header 1.17 1.18 TITLE=$(gettext 'TazPanel - Settings') 1.19 1.20 + 1.21 # Get system database. LDAP compatible. 1.22 + 1.23 getdb() 1.24 { 1.25 getent $1 2>/dev/null || cat /etc/$1 1.26 @@ -27,63 +31,209 @@ 1.27 done 1.28 } 1.29 1.30 + 1.31 +############################# 1.32 +# Get info from locale file # 1.33 +############################# 1.34 + 1.35 +get_locale_info() 1.36 +{ 1.37 + # Commands like `LC_ALL=fr_FR locale -k LC_MEASUREMENT` will do the job 1.38 + # only when your locale is generated and exists in the /usr/lib/locale. 1.39 + # Here we manually parse locale definition files from /usr/share/i18n/locales/. 1.40 + # Strange, bloated and not script-friendly format :( 1.41 + 1.42 + [ ! -e /usr/share/i18n/locales/$1 ] && return 1.43 + 1.44 + # Prepare file 1.45 + if [ ! -e /tmp/tazpanel-$1 ]; then 1.46 + 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|�|\&#x|g' > /tmp/tazpanel-$1 1.47 + fi 1.48 + 1.49 + local ANS=$(grep -e "^$2[ ]" /tmp/tazpanel-$1 | sed 's|^[^ \t][^ \t]* *||') 1.50 + if [ -z "$ANS" ]; then 1.51 + # Not found, then section is copied from other locale definition file... 1.52 + case $2 in 1.53 + measurement) 1.54 + section='LC_MEASUREMENT';; 1.55 + width|height) 1.56 + section='LC_PAPER';; 1.57 + currency_symbol|int_curr_symbol) 1.58 + section='LC_MONETARY';; 1.59 + day|abday|mon|abmon|d_t_fmt|d_fmt|t_fmt|am_pm|t_fmt_ampm|date_fmt) 1.60 + section='LC_TIME';; 1.61 + esac 1.62 + # Recursive call 1.63 + get_locale_info $(sed -n '/^'$section'/,/^END '$section'/p' /tmp/tazpanel-$1 | grep 'copy' | cut -d'"' -f2) $2 1.64 + else 1.65 + case $2 in 1.66 + day|abday|mon|abmon|am_pm) # semicolon-separated list in double quotes 1.67 + echo "$ANS";; 1.68 + *) # single value in double qoutes 1.69 + echo "$ANS" | cut -d'"' -f2;; 1.70 + esac 1.71 + fi 1.72 +} 1.73 + 1.74 + 1.75 +# Get info from locale file about measurement system 1.76 + 1.77 +get_locale_info_measurement() 1.78 +{ 1.79 + # faster to use pre-processed values 1.80 + case $1 in 1.81 + en_AG|en_US|es_PR|es_US|nl_AW|yi_US) gettext 'US' ;; 1.82 + POSIX) ;; 1.83 + *) gettext 'metric' ;; 1.84 + esac 1.85 +} 1.86 + 1.87 + 1.88 +# Get info from locale file about paper size 1.89 + 1.90 +get_locale_info_paper() 1.91 +{ 1.92 + # faster to use pre-processed values 1.93 + case $1 in 1.94 + en_AG|en_US|es_PR|es_US|nl_AW|yi_US) echo '8½×11 (US Letter)';; 1.95 + 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)';; 1.96 + POSIX) ;; 1.97 + *) echo '210×297 (A4)';; 1.98 + esac 1.99 +} 1.100 + 1.101 + 1.102 +# Get info from locale file about date and time format 1.103 + 1.104 +get_locale_info_date_time() 1.105 +{ 1.106 + case $2 in 1.107 + c) get_locale_info $1 d_t_fmt ;; 1.108 + x) get_locale_info $1 d_fmt ;; 1.109 + X) get_locale_info $1 t_fmt ;; 1.110 + r) get_locale_info $1 t_fmt_ampm ;; 1.111 + *) get_locale_info $1 date_fmt ;; 1.112 + esac | sed 's| | |g; s|%|%|g; s|,|,|g; s|-|-|g; s|.|.|g; s|/|/|g; s|:|:|g; s|A|A|g; s|B|B|g; s|C|C|g; s|F|F|g; s|H|H|g; s|I|I|g; s|M|M|g; s|O|O|g; s|R|R|g; s|S|S|g; s|T|T|g; s|X|X|g; s|Y|Y|g; s|Z|Z|g; s|a|a|g; s|b|b|g; s|e|e|g; s|d|d|g; s|k|k|g; s|m|m|g; s|n|n|g; s|o|o|g; s|p|p|g; s|r|r|g; s|t|t|g; s|x|x|g; s|y|y|g; s|z|z|g;' 1.113 + 1.114 +} 1.115 + 1.116 + 1.117 +parse_date() 1.118 +{ 1.119 + local weekday month day abday mon abmon rtime d_fmt t_fmt am_pm 1.120 + weekday=$(( $(date +%w) + 1 )) # 1=Sunday ... 1.121 + month=$(date +%-m) # 1=January ... 1.122 + day=$(get_locale_info $1 day | cut -d'"' -f$(( 2 * $weekday )) | sed 's|&|\\\&|g') # translated day of week 1.123 + abday=$(get_locale_info $1 abday | cut -d'"' -f$(( 2 * $weekday )) | sed 's|&|\\\&|g') # same, abbreviated 1.124 + mon=$(get_locale_info $1 mon | cut -d'"' -f$(( 2 * $month )) | sed 's|&|\\\&|g') # translated month 1.125 + abmon=$(get_locale_info $1 abmon | cut -d'"' -f$(( 2 * $month )) | sed 's|&|\\\&|g') # same, abbreviated 1.126 + # next %-codes expanded into other %-codes 1.127 + rtime=$(get_locale_info_date_time $1 r | sed 's|&|\\\&|g') # %r: 12-hour time 1.128 + d_fmt=$(get_locale_info_date_time $1 x | sed 's|&|\\\&|g') # %x: date 1.129 + t_fmt=$(get_locale_info_date_time $1 X | sed 's|&|\\\&|g') # %X: time 1.130 + 1.131 + case $(LC_ALL=POSIX date +%P) in # translated am/pm 1.132 + am) am_pm=$(get_locale_info $1 am_pm | cut -d'"' -f2 | sed 's|&|\\\&|g');; 1.133 + pm) am_pm=$(get_locale_info $1 am_pm | cut -d'"' -f4 | sed 's|&|\\\&|g');; 1.134 + esac 1.135 + 1.136 + # 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 1.137 + # Note: %P=am/pm; %p=AM/PM. But here they the same because it is not a simple job to convert letters. 1.138 + echo "$2" | sed "s|%r|$rtime|; s|%x|$d_fmt|; s|%X|$t_fmt|; \ 1.139 + s|%OC|S(date +%OC)|; \ 1.140 + s|%Y|$(date +%Y)|; s|%y|$(date +%y )|; s|%Oy|$(date +%Oy)|; s|%Ey|$(date +%Ey)|; \ 1.141 + s|%m|$(date +%m)|; s|%-m|$(date +%-m)|; s|%Om|$(date +%Om)|; \ 1.142 + s|%d|$(date +%d)|; s|%-d|$(date +%-d)|; s|%Od|$(date +%Od)|; \ 1.143 + s|%e|$(date +%e)|; s|%-e|$(date +%-e)|; s|%Oe|$(date +%Oe)|; \ 1.144 + s|%F|$(date +%F)|; \ 1.145 + s|%H|$(date +%H)|; s|%OH|$(date +%OH)|; s|%k|$(date +%k)|; \ 1.146 + s|%I|$(date +%I)|; s|%OI|$(date +%OI)|; s|%l|$(date +%l)|; \ 1.147 + s|%M|$(date +%M)|; s|%OM|$(date +%OM)|; \ 1.148 + s|%S|$(date +%S)|; s|%OS|$(date +%OS)|; \ 1.149 + s|%R|$(date +%R)|; s|%T|$(date +%T )|; \ 1.150 + s|%Z|$(date +%Z)|; s|%z|$(date +%z )|; \ 1.151 + s|%t|\t|; \ 1.152 + s|%P|$am_pm|; s|%p|$am_pm|; s|%Op|$am_pm|; s|%A|$day|; s|%a|$abday|; s|%B|$mon|; s|%b|$abmon|;" 1.153 + 1.154 +} 1.155 + 1.156 +list_of() 1.157 +{ 1.158 + cd /usr/share/i18n/locales 1.159 + #mon=$(date +%-m); monn=$(( $mon * 2 )) 1.160 + #echo "mon=\"$mon\" monn=\"$monn\"" 1.161 + 1.162 + echo '<pre>' 1.163 +for LOC in be_BY ca_IT el_CY fr_CH ru_RU ru_UA; do 1.164 + case $LOC in 1.165 + iso*|translit*) ;; 1.166 + *) 1.167 + #echo -e "$LOC:\t$(parse_date $LOC $(get_locale_info_date_time $LOC c | sed 's|&|\\\&|g'))";; 1.168 + FMT="$(get_locale_info_date_time $LOC c)" 1.169 + echo -e "$LOC:\t$FMT" 1.170 + parse_date $LOC "$FMT" 1.171 + echo;; 1.172 + esac 1.173 +done 1.174 + echo '</pre>' 1.175 +} 1.176 + 1.177 + 1.178 + 1.179 + 1.180 + 1.181 # 1.182 # Commands executed before page loading. 1.183 # 1.184 1.185 case " $(GET) " in 1.186 *\ do\ *) 1.187 - # Assume no array support in httpd_helper.sh ;^) 1.188 - users="" 1.189 - groups="" 1.190 - IFS="&" 1.191 - for i in $QUERY_STRING ; do 1.192 - case "$i" in 1.193 - user=*) users="$users ${i#user=}" ;; 1.194 - group=*) groups="$groups ${i#group=}" ;; 1.195 - esac 1.196 - done 1.197 - unset IFS 1.198 - for cmd in "Delete group" ; do 1.199 - [ "$(GET do)" == "$(gettext "$cmd")" ] || continue 1.200 - for group in $groups ; do 1.201 - case "$cmd" in 1.202 - Delete*) delgroup $group ;; 1.203 - esac 1.204 - done 1.205 - done 1.206 - for cmd in "Delete user" "Lock user" "Unlock user" \ 1.207 - "Change password" ; do 1.208 - [ "$(GET do)" == "$(gettext "$cmd")" ] || continue # BUGGY 1.209 - for user in $users ; do 1.210 - case "$cmd" in 1.211 - Delete*) deluser $user ;; 1.212 - Lock*) passwd -l $user | log ;; 1.213 - Unlock*) passwd -u $user | log ;; 1.214 - Change*) echo "$user:$(GET password)" | chpasswd -m | log ;; 1.215 - esac 1.216 - done 1.217 - done ;; 1.218 - *\ addmember\ *) 1.219 - addgroup $(GET member) $(GET group) ;; 1.220 - *\ delmember\ *) 1.221 - delgroup $(GET member) $(GET group) ;; 1.222 - *\ addgroup\ *) 1.223 - addgroup $(GET addgroup) ;; 1.224 - *\ adduser\ *) 1.225 - # 1.226 - # Manage system user accounts 1.227 - # 1.228 - user=$(GET adduser) 1.229 - passwd=$(GET passwd) 1.230 - if [ -n "$user" ]; then 1.231 - adduser -D -s /bin/sh -g "SliTaz User" -G users -h /home/$user $user 1.232 - echo "$user:$passwd" | chpasswd -m | log 1.233 - for g in audio cdrom floppy video tty 1.234 - do 1.235 - addgroup $user $g 1.236 - done 1.237 - fi ;; 1.238 + users=$(echo $QUERY_STRING | awk 'BEGIN{RS="&";FS="="}{if($1=="user") print $2}') 1.239 + groups=$(echo $QUERY_STRING | awk 'BEGIN{RS="&";FS="="}{if($1=="group")print $2}') 1.240 + 1.241 + case $(GET do) in 1.242 + 1.243 + # Groups page 1.244 + delgroups) 1.245 + for i in $groups; do delgroup $i; done ;; 1.246 + addgroup) 1.247 + addgroup $groups ;; 1.248 + addmember) 1.249 + addgroup $(GET member) $groups ;; 1.250 + delmember) 1.251 + delgroup $(GET member) $groups ;; 1.252 + 1.253 + # Users page 1.254 + delusers) 1.255 + for i in $users; do deluser $i; done ;; 1.256 + lockusers) 1.257 + for i in $users; do passwd -l $i | log; done ;; 1.258 + unlockusers) 1.259 + for i in $users; do passwd -u $i | log; done ;; 1.260 + chpasswd) 1.261 + echo "$users:$(GET password)" | chpasswd -m | log ;; 1.262 + adduser) 1.263 + if [ -n "$users" ]; then 1.264 + name=$(GET name); name=${name:-SliTaz User} 1.265 + adduser -D -s /bin/sh -g "$name" -G users -h /home/$users $users 1.266 + echo "$user:$(GET passwd)" | chpasswd -m | log 1.267 + for i in audio cdrom floppy video tty; do addgroup $users $i; done 1.268 + fi ;; 1.269 + 1.270 + # System time 1.271 + settz) 1.272 + GET tz > /etc/TZ;; 1.273 + date) # normalize to two digits 1.274 + date $(printf '%02d%02d%02d%02d%d.%02d' "$(GET month)" "$(GET day)" "$(GET hour)" "$(GET min)" "$(GET year)" "$(GET sec)") >/dev/null;; 1.275 + rdate) 1.276 + rdate -s tick.greyware.com ;; 1.277 + hwclock) 1.278 + hwclock -w -u ;; 1.279 + 1.280 + esac 1.281 + ;; 1.282 + 1.283 + 1.284 *\ gen_locale\ *) 1.285 new_locale=$(GET gen_locale) ;; 1.286 *\ gen_keymap\ *) 1.287 @@ -91,24 +241,21 @@ 1.288 *\ apply_xorg_kbd\ *) 1.289 sed -i "s/XkbLayout.*/XkbLayout \" \"$(GET apply_xorg_kbd)\"/" \ 1.290 /etc/X11/xorg.conf.d/40-Keyboard.conf ;; 1.291 - *\ date\ *) 1.292 - date $(GET month)$(GET day)$(GET hour)$(GET min)$(GET year).$(GET sec) ;; 1.293 - *\ rdate\ *) 1.294 - rdate -s tick.greyware.com ;; 1.295 - *\ hwclock\ *) 1.296 - hwclock -w -u ;; 1.297 *\ panel_pass*) 1.298 sed -i s@/:root:.*@/:root:$(GET panel_pass)@ $HTTPD_CONF ;; 1.299 *\ style*) 1.300 sed -i s/'^STYLE.*'/"STYLE=\"$(GET style)\""/ $CONFIG 1.301 . $CONFIG ;; 1.302 - *\ settz\ *) 1.303 - GET tz > /etc/TZ ;; 1.304 esac 1.305 1.306 + 1.307 + 1.308 + 1.309 + 1.310 # 1.311 # Default xHTML content 1.312 # 1.313 + 1.314 xhtml_header 1.315 1.316 case " $(GET) " in 1.317 @@ -117,116 +264,123 @@ 1.318 # Groups management 1.319 # 1.320 cat <<EOT 1.321 -<h3 id="groups">$(gettext 'Manage groups')</h3> 1.322 +<h2 id="groups">$(gettext 'Manage groups')</h2> 1.323 1.324 -<form method="get" action=""> 1.325 - <input type="hidden" name="groups" /> 1.326 -<div id="actions"> 1.327 - <div class="float-left"> 1.328 - $(gettext 'Selection:') 1.329 - <input type="submit" name="do" value="$(gettext 'Delete group')" /> 1.330 - </div> 1.331 -</div> 1.332 1.333 -<table class="zebra outbox"> 1.334 -<thead> 1.335 -<tr class="thead"> 1.336 - <td>$(gettext 'Group')</td> 1.337 - <td>$(gettext 'Group ID')</td> 1.338 - <td>$(gettext 'Members')</td> 1.339 -</tr> 1.340 -</thead> 1.341 -</tbody> 1.342 +<section> 1.343 + <form class="wide"> 1.344 + <header> 1.345 + <input type="hidden" name="groups"/> 1.346 + <!-- $(gettext 'Selection:') --> 1.347 + <button name="do" value="delgroups" data-icon="delete">$(gettext 'Delete group')</button> 1.348 + </header> 1.349 + 1.350 + <div class="scroll"> 1.351 + <table class="wide zebra scroll"> 1.352 + <thead> 1.353 + <tr class="thead"> 1.354 + <td>$(gettext 'Group')</td> 1.355 + <td>$(gettext 'Group ID')</td> 1.356 + <td>$(gettext 'Members')</td> 1.357 + </tr> 1.358 + </thead> 1.359 + <tbody> 1.360 EOT 1.361 - for group in `getdb group | cut -d ":" -f 1` 1.362 - do 1.363 + for group in $(getdb group | cut -d ":" -f 1); do 1.364 IFS=':' 1.365 set -- $(getdb group | grep "^$group:") 1.366 unset IFS 1.367 gid=$3 1.368 members=$4 1.369 cat <<EOT 1.370 -<tr> 1.371 - <td><input type='checkbox' name='group' value='$group' /> 1.372 - <img src='$IMAGES/users.png' />$group</td> 1.373 - <td>$gid</td> 1.374 - <td>${members//,/, }</td> 1.375 -</tr> 1.376 + <tr> 1.377 + <td><input type="checkbox" name="group" value="$group" id="$group"/> 1.378 + <label for="$group" data-icon="group">$group</label></td> 1.379 + <td>$gid</td> 1.380 + <td>${members//,/, }</td> 1.381 + </tr> 1.382 EOT 1.383 done 1.384 - cat << EOT 1.385 -</tbody> 1.386 -</table> 1.387 -</form> 1.388 + cat <<EOT 1.389 + </tbody> 1.390 + </table> 1.391 + </div> 1.392 + </form> 1.393 +</section> 1.394 + 1.395 1.396 <section> 1.397 -<h4>$(gettext 'Add a new group')</h4> 1.398 - 1.399 -<form method="get" action=""> 1.400 - <input type="hidden" name="groups" /> 1.401 - <table> 1.402 - <tr><td>$(gettext 'Group name:')</td> 1.403 - <td><input type="text" name="addgroup" size="30" /></td> 1.404 - <td> 1.405 - <input type="submit" value="$(gettext 'Create group')" /></td></tr> 1.406 - </table> 1.407 -</form> 1.408 + <header>$(gettext 'Add a new group')</header> 1.409 + <form> 1.410 + <input type="hidden" name="groups"/> 1.411 + <table> 1.412 + <tr><td>$(gettext 'Group name:')</td> 1.413 + <td><input type="text" name="group"/></td> 1.414 + </tr> 1.415 + <tr><td colspan="2"> 1.416 + <button type="submit" name="do" value="addgroup" data-icon="add">$(gettext 'Create group')</button> 1.417 + </td></tr> 1.418 + </table> 1.419 + </form> 1.420 </section> 1.421 1.422 + 1.423 <section> 1.424 -<h4>$(gettext 'Manage group membership')</h4> 1.425 - 1.426 -<form method="get" action=""> 1.427 - <input type="hidden" name="groups" /> 1.428 - <table> 1.429 - <tr><td>$(gettext 'Group name:')</td> 1.430 - <td><select class="button" name="group"> 1.431 - $(listdb group) 1.432 - </select></td> 1.433 - <td>$(gettext 'User name:')</td> 1.434 - <td><select class="button" name="member"> 1.435 - $(listdb passwd) 1.436 - </select></td></tr> 1.437 - <tr><td colspan="4"><input type="submit" name="addmember" value="$(gettext 'Add user')" /> 1.438 - <input type="submit" name="delmember" value="$(gettext 'Remove user')" /></td></tr> 1.439 - </table> 1.440 -</form> 1.441 + <header>$(gettext 'Manage group membership')</header> 1.442 + <form> 1.443 + <input type="hidden" name="groups"/> 1.444 + <table> 1.445 + <tr> 1.446 + <td>$(gettext 'Group name:')</td> 1.447 + <td><select name="group">$(listdb group)</select></td> 1.448 + <td>$(gettext 'User name:')</td> 1.449 + <td><select name="member">$(listdb passwd)</select></td> 1.450 + </tr> 1.451 + <tr> 1.452 + <td colspan="2"> 1.453 + <button name="do" value="addmember" data-icon="add">$(gettext 'Add user')</button> 1.454 + </td> 1.455 + <td colspan="2"> 1.456 + <button name="do" value="delmember" data-icon="delete">$(gettext 'Remove user')</button> 1.457 + </td> 1.458 + </tr> 1.459 + </table> 1.460 + </form> 1.461 </section> 1.462 1.463 EOT 1.464 ;; 1.465 1.466 + 1.467 *\ user*) 1.468 # 1.469 # Users management 1.470 # 1.471 cat <<EOT 1.472 -<h3 id="users">$(gettext 'Manage users')</h3> 1.473 +<h2 id="users">$(gettext 'Manage users')</h2> 1.474 1.475 -<form method="get" action=""> 1.476 -<div id="actions"> 1.477 - <div class="float-left"> 1.478 - $(gettext 'Selection:') 1.479 - <input type="submit" name="do" value="$(gettext 'Delete user')" /> 1.480 - <input type="submit" name="do" value="$(gettext 'Lock user')" /> 1.481 - <input type="submit" name="do" value="$(gettext 'Unlock user')" /> 1.482 - </div> 1.483 -</div> 1.484 +<section> 1.485 + <form class="wide"> 1.486 + <header> 1.487 + <!--$(gettext 'Selection:')--> 1.488 + <button name="do" value="delusers" data-icon="delete">$(gettext 'Delete user')</button> 1.489 + <button name="do" value="lockusers" data-icon="lock" >$(gettext 'Lock user' )</button> 1.490 + <button name="do" value="unlockusers" data-icon="unlock">$(gettext 'Unlock user')</button> 1.491 + </header> 1.492 1.493 -<table class="zebra outbox"> 1.494 -<thead> 1.495 -<tr class="thead"> 1.496 - <td>$(gettext 'Login')</td> 1.497 - <td>$(gettext 'User ID')</td> 1.498 - <td>$(gettext 'Name')</td> 1.499 - <td>$(gettext 'Home')</td> 1.500 - <td>$(gettext 'Shell')</td> 1.501 -</tr> 1.502 -</thead> 1.503 -</tbody> 1.504 + <table class="wide zebra center"> 1.505 + <thead> 1.506 + <tr> 1.507 + <td>$(gettext 'Login')</td> 1.508 + <td>$(gettext 'User ID')</td> 1.509 + <td>$(gettext 'Name')</td> 1.510 + <td>$(gettext 'Home')</td> 1.511 + <td>$(gettext 'Shell')</td> 1.512 + </tr> 1.513 + </thead> 1.514 + </tbody> 1.515 EOT 1.516 - for login in `getdb passwd | cut -d ":" -f 1` 1.517 - do 1.518 + for login in $(getdb passwd | cut -d ":" -f 1); do 1.519 if [ -d /home/$login ]; then 1.520 colorlogin=$login 1.521 grep -qs "^$login:!" /etc/shadow && 1.522 @@ -234,61 +388,65 @@ 1.523 IFS=':' 1.524 set -- $(getdb passwd | grep "^$login:") 1.525 unset IFS 1.526 - uid=$3 1.527 - gid=$4 1.528 - name="$(echo $5 | sed s/,.*//)" 1.529 - home="$6" 1.530 - shell=$7 1.531 cat <<EOT 1.532 <tr> 1.533 - <td><input type='checkbox' name='user' value='$login' /> 1.534 - <img src='$IMAGES/user.png' />$colorlogin</td> 1.535 - <td>$uid:$gid</td> 1.536 - <td>$name</td> 1.537 - <td>$home</td> 1.538 - <td>$shell</td> 1.539 + <td style="white-space: nowrap"> 1.540 + <input type="checkbox" name="user" value="$login" id="$login"/> 1.541 + <label for="$login" data-icon="user">$colorlogin</label></td> 1.542 + <td>$3:$4</td> 1.543 + <td>$(echo $5 | sed s/,.*//)</td> 1.544 + <td>$6</td> 1.545 + <td>$7</td> 1.546 </tr> 1.547 EOT 1.548 fi 1.549 done 1.550 - cat << EOT 1.551 -</tbody> 1.552 -</table> 1.553 + cat <<EOT 1.554 + </tbody> 1.555 + </table> 1.556 EOT 1.557 - cat << EOT 1.558 -<p> 1.559 - $(gettext 'Password:') 1.560 - <input type="password" name="password" /> 1.561 - <input type="submit" name="do" value="$(gettext 'Change password')" /> 1.562 -</p> 1.563 -</form> 1.564 + cat <<EOT 1.565 + <footer> 1.566 + <div> 1.567 + $(gettext 'Password:') 1.568 + <input type="password" name="password"/> 1.569 + <button type="submit" name="do" value="chpasswd" data-icon="ok">$(gettext 'Change password')</button> 1.570 + </div> 1.571 + </footer> 1.572 + </form> 1.573 +</section> 1.574 + 1.575 1.576 <section> 1.577 -<h4>$(gettext 'Add a new user')</h4> 1.578 + <header>$(gettext 'Add a new user')</header> 1.579 1.580 -<form method="get" action=""> 1.581 - <input type="hidden" name="user" /> 1.582 - <table> 1.583 - <tr><td>$(gettext 'User login:')</td> 1.584 - <td><input type="text" name="adduser" size="30" /></td></tr> 1.585 - <tr><td>$(gettext 'User password:')</td> 1.586 - <td><input type="password" name="passwd" size="30" /></td></tr> 1.587 - <tr><td colspan="2"> 1.588 - <input type="submit" value="$(gettext 'Create user')" /></td></tr> 1.589 - </table> 1.590 -</form> 1.591 + <form> 1.592 + <input type="hidden" name="users"/> 1.593 + <table class="summary"> 1.594 + <tr><td>$(gettext 'User login:')</td> 1.595 + <td><input type="text" name="user" size="30" pattern="[a-z]*"/></td></tr> 1.596 + <tr><td>$(gettext 'User name:')</td> 1.597 + <td><input type="text" name="name" size="30"/></td></tr> 1.598 + <tr><td>$(gettext 'User password:')</td> 1.599 + <td><input type="password" name="passwd" size="30"/></td></tr> 1.600 + </table> 1.601 + 1.602 + <footer> 1.603 + <button type="submit" name="do" value="adduser" data-icon="add">$(gettext 'Create user')</button> 1.604 + </footer> 1.605 + </form> 1.606 </section> 1.607 1.608 + 1.609 <section> 1.610 -<h4>$(gettext 'Current user sessions')</h4> 1.611 - 1.612 -<pre>$(who)</pre> 1.613 + <header>$(gettext 'Current user sessions')</header> 1.614 + <pre>$(who)</pre> 1.615 </section> 1.616 1.617 + 1.618 <section> 1.619 -<h4>$(gettext 'Last user sessions')</h4> 1.620 - 1.621 -<pre>$(last)</pre> 1.622 + <header>$(gettext 'Last user sessions')</header> 1.623 + <div class="scroll"><pre>$(last)</pre></div> 1.624 </section> 1.625 EOT 1.626 ;; 1.627 @@ -298,19 +456,25 @@ 1.628 # 1.629 # Choose locale 1.630 # 1.631 - LOADING_MSG="$(gettext 'Please wait...')" 1.632 - loading_msg 1.633 + LOADING_MSG="$(gettext 'Please wait...')"; loading_msg 1.634 + 1.635 cur_loc=$(locale | grep LANG | cut -d= -f2) 1.636 - cat << EOT 1.637 -<h3 id="locale">$(gettext 'Choose locale')</h3> 1.638 + cat <<EOT 1.639 +<h2 id="locale">$(gettext 'Choose locale')</h2> 1.640 1.641 -<p>$(gettext 'Current locale settings:')</p> 1.642 -<pre>$(locale)</pre> 1.643 +<section> 1.644 + <header>$(gettext 'Current locale settings:')</header> 1.645 + <div> 1.646 + <pre>$(locale)</pre> 1.647 + </div> 1.648 +</section> 1.649 1.650 -<p>$(gettext 'Locales that are currently installed on the machine:')</p> 1.651 -<pre>$(locale -a)</pre> 1.652 - 1.653 -<p>$(gettext 'Available locales:')</p> 1.654 +<section> 1.655 + <header>$(gettext 'Locales that are currently installed on the machine:')</header> 1.656 + <div> 1.657 + <pre>$(locale -a)</pre> 1.658 + </div> 1.659 +</section> 1.660 EOT 1.661 1.662 is_installed "glibc-locale" 1.663 @@ -320,49 +484,48 @@ 1.664 <a href='/pkgs.cgi?do=Install&glibc-locale'>install glibc-locale</a> \ 1.665 to see a larger list of available locales.") 1.666 1.667 - cat << EOT 1.668 -<form method="get" action=""> 1.669 - <div class="outbox"> 1.670 - <table class="zebra fixed"> 1.671 - <thead> 1.672 - <tr><td style="width:9em">$(gettext 'Code')</td> 1.673 - <td style="width:10em">$(gettext 'Language')</td> 1.674 - <td style="width:10em">$(gettext 'Territory')</td> 1.675 - <td>$(gettext 'Description')</td> 1.676 - </tr> 1.677 - </thead> 1.678 - </table> 1.679 1.680 - <div style="max-height: 16em; overflow:auto"> 1.681 - <table class="zebra fixed"> 1.682 - <col style="width:9em"> 1.683 - <col style="width:10em"> 1.684 - <col style="width:10em"> 1.685 - <col> 1.686 - <tbody style="max-height:10em; overflow:auto"> 1.687 + cat <<EOT 1.688 +<section> 1.689 + <header>$(gettext 'Available locales:')</header> 1.690 + <form class="wide"> 1.691 + <table class="wide zebra"> 1.692 + <thead> 1.693 + <tr><td>$(gettext 'Code')</td> 1.694 + <td>$(gettext 'Language')</td> 1.695 + <td>$(gettext 'Territory')</td> 1.696 + <td>$(gettext 'Description')</td> 1.697 + </tr> 1.698 + </thead> 1.699 + <tbody> 1.700 EOT 1.701 - for locale in $(find /usr/share/i18n/locales -type f | sort) 1.702 - do 1.703 + for locale in $(find /usr/share/i18n/locales -type f | sort); do 1.704 locale_name=$(basename $locale) 1.705 locale_title=$(grep -m 1 -e '^ *title' $locale | cut -d'"' -f2) 1.706 if [ -n "$locale_title" ]; then 1.707 - sel=""; [ "$locale_name" == "$cur_loc" ] && sel="checked" 1.708 - cat << EOT 1.709 - <tr><td><input type="radio" name="gen_locale" value="$locale_name" $sel />$locale_name</td> 1.710 - <td>$(gettext -d iso_639 "$(grep -m 1 -e '^ *language' $locale | cut -d '"' -f2)")</td> 1.711 - <td>$(gettext -d iso_3166 "$(grep -m 1 -e '^ *territory' $locale | cut -d '"' -f2)")</td> 1.712 - <td>$locale_title</td> 1.713 - </tr> 1.714 + sel=''; [ "$locale_name" == "$cur_loc" ] && sel='checked="checked"' 1.715 + cat <<EOT 1.716 + <tr> 1.717 + <td> 1.718 + <input type="radio" name="gen_locale" value="$locale_name" $sel id="$locale_name"/> 1.719 + <label for="$locale_name">$locale_name</label> 1.720 + </td> 1.721 + <td>$(gettext -d iso_639 "$(grep -m 1 -e '^ *language' $locale | cut -d '"' -f2)")</td> 1.722 + <td>$(gettext -d iso_3166 "$(grep -m 1 -e '^ *territory' $locale | cut -d '"' -f2)")</td> 1.723 + <td>$locale_title</td> 1.724 + </tr> 1.725 EOT 1.726 fi 1.727 done 1.728 - cat << EOT 1.729 - </tbody> 1.730 - </table> 1.731 - </div> 1.732 - </div> 1.733 - <p><input type="submit" value="$(gettext 'Activate')" /></p> 1.734 -</form> 1.735 + cat <<EOT 1.736 + </tbody> 1.737 + </table> 1.738 + 1.739 + <footer> 1.740 + <button type="submit" data-icon="ok">$(gettext 'Activate')</button> 1.741 + </footer> 1.742 + </form> 1.743 +</section> 1.744 EOT 1.745 ;; 1.746 1.747 @@ -371,64 +534,72 @@ 1.748 # 1.749 # Default system settings page 1.750 # 1.751 - cat << EOT 1.752 -<div id="wrapper"> 1.753 - <h2>$(gettext 'System settings')</h2> 1.754 - <p>$(gettext 'Manage system time, users or language settings')<p> 1.755 -</div> 1.756 -<div id="actions"> 1.757 - <a class="button" href="?users"> 1.758 - <img src="$IMAGES/user.png" />$(gettext 'Manage users')</a> 1.759 - <a class="button" href="?groups"> 1.760 - <img src="$IMAGES/users.png" />$(gettext 'Manage groups')</a> 1.761 -</div> 1.762 + list_of 1.763 + cat <<EOT 1.764 +<h2>$(gettext 'System settings')</h2> 1.765 + 1.766 +<p>$(gettext 'Manage system time, users or language settings')<p> 1.767 + 1.768 +<form><!-- 1.769 + --><button name="users" data-icon="user" >$(gettext 'Manage users' )</button><!-- 1.770 + --><button name="groups" data-icon="group">$(gettext 'Manage groups')</button> 1.771 +</form> 1.772 1.773 <section> 1.774 -<h3>$(gettext 'System time')</h3> 1.775 + <header>$(gettext 'System time')</header> 1.776 + <div> 1.777 + <form class="wide"> 1.778 + <fieldset><legend>$(gettext 'Time zone:')</legend> 1.779 + <select name="tz"> 1.780 + $(cd /usr/share/zoneinfo; find * -type f ! -name '*.tab' | sort | \ 1.781 + awk -vtz="$(cat /etc/TZ)" \ 1.782 + '{printf("<option%s>%s</option>", ($1 == tz)?" selected":"", $1)}') 1.783 + </select> 1.784 + <button name="do" value="settz" data-icon="ok">$(gettext 'Change')</button> 1.785 + </fieldset> 1.786 + <fieldset><legend>$(gettext 'System time:')</legend> 1.787 + $(date | sed 's|[0-9][0-9]:[0-9:]*|<span id="time">&</span>|') 1.788 + <button name="do" value="rdate" data-icon="sync">$(gettext 'Sync online')</button> 1.789 + </fieldset> 1.790 + <fieldset><legend>$(gettext 'Hardware clock:')</legend> 1.791 + $(hwclock -ur | sed 's|0.000000 seconds||') 1.792 + <button name="do" value="hwclock" data-icon="clock">$(gettext 'Set hardware clock')</button> 1.793 + </fieldset> 1.794 + <fieldset><legend>$(gettext 'Set date')</legend> 1.795 + <input type="number" name="day" value="$(date +%d)" min="1" max="31" size="4" required/> 1.796 + <select name="month" value="$(date +%m)"> 1.797 + $(for i in $(seq 12); do 1.798 + printf '<option value="%s">%s</option>' $(date -d $i.01-01:01 '+%m %B') 1.799 + done) 1.800 + </select> 1.801 + <input type="number" name="year" value="$(date +%Y)" min="2015" max="2030" size="6" required/> 1.802 + - <input type="number" name="hour" value="$(date +%H)" min="0" max="23" size="4" required/><!-- 1.803 + -->:<input type="number" name="min" value="$(date +%M)" min="0" max="59" size="4" required/><!-- 1.804 + -->:<input type="number" name="sec" value="00" min="0" max="59" size="4" required/> 1.805 + <button name="do" value="date" data-icon="ok">$(gettext 'Set date')</button> 1.806 + </fieldset> 1.807 + </form> 1.808 + </div> 1.809 1.810 -<form method="get" action=""> 1.811 -<table> 1.812 - <tr><td>$(gettext 'Time zone:')</td><td> 1.813 - <select class="button" name="tz"> 1.814 - $(cd /usr/share/zoneinfo ; find * -type f | while read tz; do 1.815 - if [ "$(cat /etc/TZ)" == "$tz" ]; then 1.816 - echo "<option selected>$tz</option>" 1.817 - else 1.818 - echo "<option>$tz</option>" 1.819 - fi 1.820 - done) 1.821 - </select> 1.822 - <input type="submit" name="settz" value="$(gettext 'Change')" /></td></tr> 1.823 - <tr><td>$(gettext 'System time:')</td><td>$(date)</td></tr> 1.824 - <tr><td>$(gettext 'Hardware clock:')</td><td>$(hwclock -r)</tr> 1.825 -</table> 1.826 -</form> 1.827 - 1.828 -<form method="get" action=""> 1.829 - <input type="submit" name="date" value="$(gettext 'Set date')" /> 1.830 - <select class="button" name="day">$(printf '<option>%d</option>' $(seq 31))</select> 1.831 - <select class="button" name="month"> 1.832 - $(for i in $(seq 12); do 1.833 - printf '<option value="%s">%s</option>' $(date -d $i.01-01:01 '+%m %B') 1.834 - done) 1.835 - </select> 1.836 - <select class="button" name="year">$(printf '<option>%d</option>' $(seq 2010 2030))</select> 1.837 -- <select class="button" name="hour">$(printf '<option>%02d</option>' $(seq 0 23))</select> 1.838 -: <select class="button" name="min">$(printf '<option>%02d</option>' $(seq 0 59))</select> 1.839 -: <select class="button" name="sec">$(printf '<option>%02d</option>' $(seq 0 59))</select> 1.840 -</form> 1.841 - 1.842 -<a class="button" href="?rdate">$(gettext 'Sync online')</a> 1.843 -<a class="button" href="?hwclock">$(gettext 'Set hardware clock')</a> 1.844 +<script type="text/javascript"> 1.845 +// Live time on page 1.846 +Date.prototype.timeNow = function() { 1.847 + return ((this.getHours() < 10)?"0":"") + this.getHours() + ":" + ((this.getMinutes() < 10)?"0":"") + this.getMinutes() + ":" + ((this.getSeconds() < 10)?"0":"") + this.getSeconds(); 1.848 +} 1.849 +setInterval(function(){document.getElementById('time').innerText = new Date().timeNow()}, 1000); 1.850 +</script> 1.851 </section> 1.852 EOT 1.853 + 1.854 + 1.855 # 1.856 # Locale settings 1.857 # 1.858 - cat << EOT 1.859 + cat <<EOT 1.860 <section> 1.861 -<h3 id="locale">$(gettext 'System language')</h3> 1.862 -<p> 1.863 + <header id="locale">$(gettext 'System language')</header> 1.864 + <div> 1.865 + <form> 1.866 EOT 1.867 # Check if a new locale was requested 1.868 if [ -n "$new_locale" ]; then 1.869 @@ -441,16 +612,21 @@ 1.870 msg warn "$(eval_gettext \ 1.871 'You must logout and login again to your current session to use $new_locale locale.')" 1.872 else 1.873 - gettext 'Current system locale:'; echo -n " <strong>" 1.874 - locale | grep LANG | cut -d= -f2 1.875 + cat <<EOT 1.876 + $(gettext 'Current system locale:') 1.877 + <strong>$(locale | grep LANG | cut -d= -f2)</strong> 1.878 + <button name="locale" data-icon="locale">$(gettext 'Change')</button> 1.879 +EOT 1.880 fi 1.881 - cat << EOT 1.882 -</strong> <a class="button" href="?locale">$(gettext 'Change')</a></p> 1.883 + cat <<EOT 1.884 + </div> 1.885 + </form> 1.886 </section> 1.887 1.888 + 1.889 <section> 1.890 -<h3 id="keymap">$(gettext 'Console keymap')</h3> 1.891 -<p> 1.892 + <header id="keymap">$(gettext 'Keyboard layout')</header> 1.893 + <div> 1.894 EOT 1.895 # Check if a new keymap was requested 1.896 if [ -n "$new_keymap" ]; then 1.897 @@ -461,15 +637,15 @@ 1.898 loadkmap < /usr/share/kmap/$new_keymap.kmap 1.899 fi 1.900 fi 1.901 + 1.902 keymap=$(cat /etc/keymap.conf) 1.903 eval_gettext 'Current console keymap: $keymap' 1.904 - echo "</p>" 1.905 if [ -n "$keymap" ]; then 1.906 case "$keymap" in 1.907 fr_CH*) 1.908 keymap="ch" ;; 1.909 ru) 1.910 - keymap="us,ru(winkeys)" ;; 1.911 + keymap="us,ru" ;; 1.912 slovene) 1.913 keymap=si ;; 1.914 *) 1.915 @@ -477,55 +653,52 @@ 1.916 keymap=${keymap%-abnt2} ;; 1.917 esac 1.918 keyboard_config=/etc/X11/xorg.conf.d/40-Keyboard.conf 1.919 - cat << EOT 1.920 -<form method="get" action=""> 1.921 - $(gettext 'Suggested keymap for Xorg:') 1.922 - <input type="submit" name "apply_xorg_kbd" value="$keymap" /> 1.923 - <a class="button" href="index.cgi?file=$keyboard_config"> 1.924 - <img src="$IMAGES/edit.png" />$(gettext 'Edit')</a> 1.925 -</form> 1.926 + cat <<EOT 1.927 + <form id="settings"></form> 1.928 + <form id="index" action="index.cgi"></form> 1.929 + <br/> 1.930 + $(gettext 'Suggested keymap for Xorg:') $keymap 1.931 + <button form="settings" name="apply_xorg_kbd" value="$keymap" data-icon="ok">$(gettext 'Activate')</button> 1.932 + <button form="index" name="file" value="$keyboard_config" data-icon="edit">$(gettext 'Edit')</button> 1.933 + <br/> 1.934 EOT 1.935 fi 1.936 - cat << EOT 1.937 -<form method="get" action=""> 1.938 - $(gettext 'Available keymaps:') 1.939 - <select class="button" name="gen_keymap"> 1.940 - $(list_keymaps) 1.941 - </select> 1.942 - <input type="submit" value="$(gettext 'Activate')" /> 1.943 -</form> 1.944 + cat <<EOT 1.945 + <form> 1.946 + $(gettext 'Available keymaps:') 1.947 + <select name="gen_keymap"> 1.948 + $(list_keymaps) 1.949 + </select> 1.950 + <button type="submit" data-icon="ok">$(gettext 'Activate')</button> 1.951 + </form> 1.952 + </div> 1.953 </section> 1.954 1.955 + 1.956 <section> 1.957 -<h2>$(gettext 'Panel configuration')</h2> 1.958 + <header>$(gettext 'Panel configuration')</header> 1.959 + <div> 1.960 + <form class="wide"> 1.961 + <fieldset><legend>$(gettext 'Style:')</legend> 1.962 + <select name="style">$(list_styles)</select> 1.963 + <button data-icon="ok">$(gettext 'Activate')</button> 1.964 + </fieldset> 1.965 1.966 -<form method="get" action=""> 1.967 - <p> 1.968 - $(gettext 'Style:') 1.969 - <select class="button" name="style"> 1.970 - $(list_styles) 1.971 - </select> 1.972 - <input type="submit" value="$(gettext 'Activate')" /> 1.973 + <fieldset><legend>$(gettext 'Panel password:')</legend> 1.974 + <input type="password" name="panel_pass"/> 1.975 + <button data-icon="ok">$(gettext 'Change')</button> 1.976 + </fieldset> 1.977 + </form> 1.978 + 1.979 + <fieldset><legend>$(gettext 'Configuration files:')</legend> 1.980 + <button form="index" name="file" value="$CONFIG" data-icon="edit">$(gettext 'Panel')</button> 1.981 + <button form="index" name="file" value="$HTTPD_CONF" data-icon="edit">$(gettext 'Server')</button> 1.982 + </fieldset> 1.983 + 1.984 + <p>$(gettext 'TazPanel provides a debugging mode and page:') 1.985 + <a href="/index.cgi?debug">debug</a> 1.986 </p> 1.987 -</form> 1.988 -<form method="get" action=""> 1.989 - <p> 1.990 - $(gettext 'Panel password:') 1.991 - <input type="password" name="panel_pass"/> 1.992 - <input type="submit" value="$(gettext 'Change')" /> 1.993 - </p> 1.994 -</form> 1.995 -<p> 1.996 - $(gettext 'Configuration files:') 1.997 - <a class="button" href="index.cgi?file=$CONFIG"> 1.998 - <img src="$IMAGES/edit.png" />$(gettext 'Panel')</a> 1.999 - <a class="button" href="index.cgi?file=$HTTPD_CONF"> 1.1000 - <img src="$IMAGES/edit.png" />$(gettext 'Server')</a> 1.1001 -</p> 1.1002 -<p> 1.1003 - $(gettext 'TazPanel provides a debugging mode and page:') 1.1004 - <a href="/index.cgi?debug">debug</a> 1.1005 -</p> 1.1006 + </div> 1.1007 </section> 1.1008 EOT 1.1009 ;;