tazpanel annotate settings.cgi @ rev 441

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