0000: 2f 2a 0a 2a 2a 20 43 6f 70 79 72 69 67 68 74 20 /*.** Copyright
0010: 28 63 29 20 32 30 30 37 20 44 2e 20 52 69 63 68 (c) 2007 D. Rich
0020: 61 72 64 20 48 69 70 70 0a 2a 2a 0a 2a 2a 20 54 ard Hipp.**.** T
0030: 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 66 his program is f
0040: 72 65 65 20 73 6f 66 74 77 61 72 65 3b 20 79 6f ree software; yo
0050: 75 20 63 61 6e 20 72 65 64 69 73 74 72 69 62 75 u can redistribu
0060: 74 65 20 69 74 20 61 6e 64 2f 6f 72 0a 2a 2a 20 te it and/or.**
0070: 6d 6f 64 69 66 79 20 69 74 20 75 6e 64 65 72 20 modify it under
0080: 74 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65 the terms of the
0090: 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62 GNU General Pub
00a0: 6c 69 63 0a 2a 2a 20 4c 69 63 65 6e 73 65 20 61 lic.** License a
00b0: 73 20 70 75 62 6c 69 73 68 65 64 20 62 79 20 74 s published by t
00c0: 68 65 20 46 72 65 65 20 53 6f 66 74 77 61 72 65 he Free Software
00d0: 20 46 6f 75 6e 64 61 74 69 6f 6e 3b 20 65 69 74 Foundation; eit
00e0: 68 65 72 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 32 her.** version 2
00f0: 20 6f 66 20 74 68 65 20 4c 69 63 65 6e 73 65 2c of the License,
0100: 20 6f 72 20 28 61 74 20 79 6f 75 72 20 6f 70 74 or (at your opt
0110: 69 6f 6e 29 20 61 6e 79 20 6c 61 74 65 72 20 76 ion) any later v
0120: 65 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 ersion..**.** Th
0130: 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69 is program is di
0140: 73 74 72 69 62 75 74 65 64 20 69 6e 20 74 68 65 stributed in the
0150: 20 68 6f 70 65 20 74 68 61 74 20 69 74 20 77 69 hope that it wi
0160: 6c 6c 20 62 65 20 75 73 65 66 75 6c 2c 0a 2a 2a ll be useful,.**
0170: 20 62 75 74 20 57 49 54 48 4f 55 54 20 41 4e 59 but WITHOUT ANY
0180: 20 57 41 52 52 41 4e 54 59 3b 20 77 69 74 68 6f WARRANTY; witho
0190: 75 74 20 65 76 65 6e 20 74 68 65 20 69 6d 70 6c ut even the impl
01a0: 69 65 64 20 77 61 72 72 61 6e 74 79 20 6f 66 0a ied warranty of.
01b0: 2a 2a 20 4d 45 52 43 48 41 4e 54 41 42 49 4c 49 ** MERCHANTABILI
01c0: 54 59 20 6f 72 20 46 49 54 4e 45 53 53 20 46 4f TY or FITNESS FO
01d0: 52 20 41 20 50 41 52 54 49 43 55 4c 41 52 20 50 R A PARTICULAR P
01e0: 55 52 50 4f 53 45 2e 20 20 53 65 65 20 74 68 65 URPOSE. See the
01f0: 20 47 4e 55 0a 2a 2a 20 47 65 6e 65 72 61 6c 20 GNU.** General
0200: 50 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 20 66 Public License f
0210: 6f 72 20 6d 6f 72 65 20 64 65 74 61 69 6c 73 2e or more details.
0220: 0a 2a 2a 0a 2a 2a 20 59 6f 75 20 73 68 6f 75 6c .**.** You shoul
0230: 64 20 68 61 76 65 20 72 65 63 65 69 76 65 64 20 d have received
0240: 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 47 4e a copy of the GN
0250: 55 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 U General Public
0260: 0a 2a 2a 20 4c 69 63 65 6e 73 65 20 61 6c 6f 6e .** License alon
0270: 67 20 77 69 74 68 20 74 68 69 73 20 6c 69 62 72 g with this libr
0280: 61 72 79 3b 20 69 66 20 6e 6f 74 2c 20 77 72 69 ary; if not, wri
0290: 74 65 20 74 6f 20 74 68 65 0a 2a 2a 20 46 72 65 te to the.** Fre
02a0: 65 20 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64 e Software Found
02b0: 61 74 69 6f 6e 2c 20 49 6e 63 2e 2c 20 35 39 20 ation, Inc., 59
02c0: 54 65 6d 70 6c 65 20 50 6c 61 63 65 20 2d 20 53 Temple Place - S
02d0: 75 69 74 65 20 33 33 30 2c 0a 2a 2a 20 42 6f 73 uite 330,.** Bos
02e0: 74 6f 6e 2c 20 4d 41 20 20 30 32 31 31 31 2d 31 ton, MA 02111-1
02f0: 33 30 37 2c 20 55 53 41 2e 0a 2a 2a 0a 2a 2a 20 307, USA..**.**
0300: 41 75 74 68 6f 72 20 63 6f 6e 74 61 63 74 20 69 Author contact i
0310: 6e 66 6f 72 6d 61 74 69 6f 6e 3a 0a 2a 2a 20 20 nformation:.**
0320: 20 64 72 68 40 68 77 61 63 69 2e 63 6f 6d 0a 2a drh@hwaci.com.*
0330: 2a 20 20 20 68 74 74 70 3a 2f 2f 77 77 77 2e 68 * http://www.h
0340: 77 61 63 69 2e 63 6f 6d 2f 64 72 68 2f 0a 2a 2a waci.com/drh/.**
0350: 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a .***************
0360: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0370: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0380: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0390: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
03a0: 0a 2a 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74 .**.** Implement
03b0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 53 65 74 ation of the Set
03c0: 75 70 20 70 61 67 65 0a 2a 2f 0a 23 69 6e 63 6c up page.*/.#incl
03d0: 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23 ude <assert.h>.#
03e0: 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67 2e include "config.
03f0: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 73 65 74 h".#include "set
0400: 75 70 2e 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20 4f 75 up.h".../*.** Ou
0410: 74 70 75 74 20 61 20 73 69 6e 67 6c 65 20 65 6e tput a single en
0420: 74 72 79 20 66 6f 72 20 61 20 6d 65 6e 75 20 67 try for a menu g
0430: 65 6e 65 72 61 74 65 64 20 75 73 69 6e 67 20 61 enerated using a
0440: 6e 20 48 54 4d 4c 20 74 61 62 6c 65 2e 0a 2a 2a n HTML table..**
0450: 20 49 66 20 7a 4c 69 6e 6b 20 69 73 20 6e 6f 74 If zLink is not
0460: 20 4e 55 4c 4c 20 6f 72 20 61 6e 20 65 6d 70 74 NULL or an empt
0470: 79 20 73 74 72 69 6e 67 2c 20 74 68 65 6e 20 69 y string, then i
0480: 74 20 69 73 20 74 68 65 20 70 61 67 65 20 74 68 t is the page th
0490: 61 74 0a 2a 2a 20 74 68 65 20 6d 65 6e 75 20 65 at.** the menu e
04a0: 6e 74 72 79 20 77 69 6c 6c 20 68 79 70 65 72 6c ntry will hyperl
04b0: 69 6e 6b 20 74 6f 2e 20 20 49 66 20 7a 4c 69 6e ink to. If zLin
04c0: 6b 20 69 73 20 4e 55 4c 4c 20 6f 72 20 22 22 2c k is NULL or "",
04d0: 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6d 65 6e then.** the men
04e0: 75 20 65 6e 74 72 79 20 68 61 73 20 6e 6f 20 68 u entry has no h
04f0: 79 70 65 72 6c 69 6e 6b 20 2d 20 69 74 20 69 73 yperlink - it is
0500: 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 76 6f disabled..*/.vo
0510: 69 64 20 73 65 74 75 70 5f 6d 65 6e 75 5f 65 6e id setup_menu_en
0520: 74 72 79 28 0a 20 20 63 6f 6e 73 74 20 63 68 61 try(. const cha
0530: 72 20 2a 7a 54 69 74 6c 65 2c 0a 20 20 63 6f 6e r *zTitle,. con
0540: 73 74 20 63 68 61 72 20 2a 7a 4c 69 6e 6b 2c 0a st char *zLink,.
0550: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 const char *zD
0560: 65 73 63 0a 29 7b 0a 20 20 40 20 3c 64 74 3e 0a esc.){. @ <dt>.
0570: 20 20 69 66 28 20 7a 4c 69 6e 6b 20 26 26 20 7a if( zLink && z
0580: 4c 69 6e 6b 5b 30 5d 20 29 7b 0a 20 20 20 20 40 Link[0] ){. @
0590: 20 3c 61 20 68 72 65 66 3d 22 25 73 28 7a 4c 69 <a href="%s(zLi
05a0: 6e 6b 29 22 3e 25 68 28 7a 54 69 74 6c 65 29 3c nk)">%h(zTitle)<
05b0: 2f 61 3e 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 /a>. }else{.
05c0: 20 40 20 25 68 28 7a 54 69 74 6c 65 29 0a 20 20 @ %h(zTitle).
05d0: 7d 0a 20 20 40 20 3c 2f 64 74 3e 0a 20 20 40 20 }. @ </dt>. @
05e0: 3c 64 64 3e 25 68 28 7a 44 65 73 63 29 3c 2f 64 <dd>%h(zDesc)</d
05f0: 64 3e 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50 d>.}../*.** WEBP
0600: 41 47 45 3a 20 2f 73 65 74 75 70 0a 2a 2f 0a 76 AGE: /setup.*/.v
0610: 6f 69 64 20 73 65 74 75 70 5f 70 61 67 65 28 76 oid setup_page(v
0620: 6f 69 64 29 7b 0a 20 20 6c 6f 67 69 6e 5f 63 68 oid){. login_ch
0630: 65 63 6b 5f 63 72 65 64 65 6e 74 69 61 6c 73 28 eck_credentials(
0640: 29 3b 0a 20 20 69 66 28 20 21 67 2e 6f 6b 53 65 );. if( !g.okSe
0650: 74 75 70 20 29 7b 0a 20 20 20 20 6c 6f 67 69 6e tup ){. login
0660: 5f 6e 65 65 64 65 64 28 29 3b 0a 20 20 7d 0a 0a _needed();. }..
0670: 20 20 73 74 79 6c 65 5f 68 65 61 64 65 72 28 22 style_header("
0680: 53 65 74 75 70 22 29 3b 0a 20 20 40 20 3c 64 6c Setup");. @ <dl
0690: 20 69 64 3d 22 73 65 74 75 70 22 3e 0a 20 20 73 id="setup">. s
06a0: 65 74 75 70 5f 6d 65 6e 75 5f 65 6e 74 72 79 28 etup_menu_entry(
06b0: 22 55 73 65 72 73 22 2c 20 22 73 65 74 75 70 5f "Users", "setup_
06c0: 75 6c 69 73 74 22 2c 0a 20 20 20 20 22 47 72 61 ulist",. "Gra
06d0: 6e 74 20 70 72 69 76 69 6c 65 67 65 73 20 74 6f nt privileges to
06e0: 20 69 6e 64 69 76 69 64 75 61 6c 20 75 73 65 72 individual user
06f0: 73 2e 22 29 3b 0a 20 20 73 65 74 75 70 5f 6d 65 s.");. setup_me
0700: 6e 75 5f 65 6e 74 72 79 28 22 41 63 63 65 73 73 nu_entry("Access
0710: 22 2c 20 22 73 65 74 75 70 5f 61 63 63 65 73 73 ", "setup_access
0720: 22 2c 0a 20 20 20 20 22 43 6f 6e 74 72 6f 6c 20 ",. "Control
0730: 61 63 63 65 73 73 20 73 65 74 74 69 6e 67 73 2e access settings.
0740: 22 29 3b 0a 20 20 73 65 74 75 70 5f 6d 65 6e 75 ");. setup_menu
0750: 5f 65 6e 74 72 79 28 22 43 6f 6e 66 69 67 75 72 _entry("Configur
0760: 61 74 69 6f 6e 22 2c 20 22 73 65 74 75 70 5f 63 ation", "setup_c
0770: 6f 6e 66 69 67 22 2c 0a 20 20 20 20 22 43 6f 6e onfig",. "Con
0780: 66 69 67 75 72 65 20 74 68 65 20 57 57 57 20 63 figure the WWW c
0790: 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 74 68 65 omponents of the
07a0: 20 72 65 70 6f 73 69 74 6f 72 79 22 29 3b 0a 20 repository");.
07b0: 20 73 65 74 75 70 5f 6d 65 6e 75 5f 65 6e 74 72 setup_menu_entr
07c0: 79 28 22 54 69 63 6b 65 74 73 22 2c 20 22 74 6b y("Tickets", "tk
07d0: 74 73 65 74 75 70 22 2c 0a 20 20 20 20 22 43 6f tsetup",. "Co
07e0: 6e 66 69 67 75 72 65 20 74 68 65 20 74 72 6f 75 nfigure the trou
07f0: 62 6c 65 2d 74 69 63 6b 65 74 69 6e 67 20 73 79 ble-ticketing sy
0800: 73 74 65 6d 20 66 6f 72 20 74 68 69 73 20 72 65 stem for this re
0810: 70 6f 73 69 74 6f 72 79 22 29 3b 0a 20 20 73 65 pository");. se
0820: 74 75 70 5f 6d 65 6e 75 5f 65 6e 74 72 79 28 22 tup_menu_entry("
0830: 43 53 53 22 2c 20 22 65 64 69 74 63 73 73 22 2c CSS", "editcss",
0840: 0a 20 20 20 20 22 45 64 69 74 20 74 68 65 20 43 . "Edit the C
0850: 61 73 63 61 64 69 6e 67 20 53 74 79 6c 65 20 53 ascading Style S
0860: 68 65 65 74 20 75 73 65 64 20 62 79 20 61 6c 6c heet used by all
0870: 20 70 61 67 65 73 20 6f 66 20 74 68 69 73 20 72 pages of this r
0880: 65 70 6f 73 69 74 6f 72 79 22 29 3b 0a 20 20 40 epository");. @
0890: 20 3c 2f 64 6c 3e 0a 0a 20 20 73 74 79 6c 65 5f </dl>.. style_
08a0: 66 6f 6f 74 65 72 28 29 3b 0a 7d 0a 0a 2f 2a 0a footer();.}../*.
08b0: 2a 2a 20 57 45 42 50 41 47 45 3a 20 73 65 74 75 ** WEBPAGE: setu
08c0: 70 5f 75 6c 69 73 74 0a 2a 2a 0a 2a 2a 20 53 68 p_ulist.**.** Sh
08d0: 6f 77 20 61 20 6c 69 73 74 20 6f 66 20 75 73 65 ow a list of use
08e0: 72 73 2e 20 20 43 6c 69 63 6b 69 6e 67 20 6f 6e rs. Clicking on
08f0: 20 61 6e 79 20 75 73 65 72 20 6a 75 6d 70 73 20 any user jumps
0900: 74 6f 20 74 68 65 20 65 64 69 74 0a 2a 2a 20 73 to the edit.** s
0910: 63 72 65 65 6e 20 66 6f 72 20 74 68 61 74 20 75 creen for that u
0920: 73 65 72 2e 0a 2a 2f 0a 76 6f 69 64 20 73 65 74 ser..*/.void set
0930: 75 70 5f 75 6c 69 73 74 28 76 6f 69 64 29 7b 0a up_ulist(void){.
0940: 20 20 53 74 6d 74 20 73 3b 0a 0a 20 20 6c 6f 67 Stmt s;.. log
0950: 69 6e 5f 63 68 65 63 6b 5f 63 72 65 64 65 6e 74 in_check_credent
0960: 69 61 6c 73 28 29 3b 0a 20 20 69 66 28 20 21 67 ials();. if( !g
0970: 2e 6f 6b 53 65 74 75 70 20 29 7b 0a 20 20 20 20 .okSetup ){.
0980: 6c 6f 67 69 6e 5f 6e 65 65 64 65 64 28 29 3b 0a login_needed();.
0990: 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a return;. }.
09a0: 0a 20 20 73 74 79 6c 65 5f 73 75 62 6d 65 6e 75 . style_submenu
09b0: 5f 65 6c 65 6d 65 6e 74 28 22 41 64 64 22 2c 20 _element("Add",
09c0: 22 41 64 64 20 55 73 65 72 22 2c 20 22 73 65 74 "Add User", "set
09d0: 75 70 5f 75 65 64 69 74 22 29 3b 0a 20 20 73 74 up_uedit");. st
09e0: 79 6c 65 5f 68 65 61 64 65 72 28 22 55 73 65 72 yle_header("User
09f0: 20 4c 69 73 74 22 29 3b 0a 20 20 40 20 3c 74 61 List");. @ <ta
0a00: 62 6c 65 20 62 6f 72 64 65 72 3d 22 30 22 20 63 ble border="0" c
0a10: 65 6c 6c 70 61 64 64 69 6e 67 3d 22 30 22 20 63 ellpadding="0" c
0a20: 65 6c 6c 73 70 61 63 69 6e 67 3d 22 32 35 22 3e ellspacing="25">
0a30: 0a 20 20 40 20 3c 74 72 3e 3c 74 64 20 76 61 6c . @ <tr><td val
0a40: 69 67 6e 3d 22 74 6f 70 22 3e 0a 20 20 40 20 3c ign="top">. @ <
0a50: 62 3e 55 73 65 72 73 3a 3c 2f 62 3e 0a 20 20 40 b>Users:</b>. @
0a60: 20 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 <table border="
0a70: 31 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 1" cellpadding="
0a80: 31 30 22 3e 3c 74 72 3e 3c 74 64 3e 0a 20 20 40 10"><tr><td>. @
0a90: 20 3c 74 61 62 6c 65 20 63 65 6c 6c 73 70 61 63 <table cellspac
0aa0: 69 6e 67 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e ing=0 cellpaddin
0ab0: 67 3d 30 20 62 6f 72 64 65 72 3d 30 3e 0a 20 20 g=0 border=0>.
0ac0: 40 20 3c 74 72 3e 0a 20 20 40 20 20 20 3c 74 68 @ <tr>. @ <th
0ad0: 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 55 align="right">U
0ae0: 73 65 72 26 6e 62 73 70 3b 49 44 3c 2f 74 68 3e ser ID</th>
0af0: 3c 74 68 20 77 69 64 74 68 3d 22 31 35 22 3e 3c <th width="15"><
0b00: 2f 74 64 3e 0a 20 20 40 20 20 20 3c 74 68 3e 43 /td>. @ <th>C
0b10: 61 70 61 62 69 6c 69 74 69 65 73 3c 2f 74 68 3e apabilities</th>
0b20: 3c 74 68 20 77 69 64 74 68 3d 22 31 35 22 3e 3c <th width="15"><
0b30: 2f 74 64 3e 0a 20 20 40 20 20 20 3c 74 68 3e 43 /td>. @ <th>C
0b40: 6f 6e 74 61 63 74 26 6e 62 73 70 3b 49 6e 66 6f ontact Info
0b50: 3c 2f 74 68 3e 0a 20 20 40 20 3c 2f 74 72 3e 0a </th>. @ </tr>.
0b60: 20 20 64 62 5f 70 72 65 70 61 72 65 28 26 73 2c db_prepare(&s,
0b70: 20 22 53 45 4c 45 43 54 20 75 69 64 2c 20 6c 6f "SELECT uid, lo
0b80: 67 69 6e 2c 20 63 61 70 2c 20 69 6e 66 6f 20 46 gin, cap, info F
0b90: 52 4f 4d 20 75 73 65 72 20 4f 52 44 45 52 20 42 ROM user ORDER B
0ba0: 59 20 6c 6f 67 69 6e 22 29 3b 0a 20 20 77 68 69 Y login");. whi
0bb0: 6c 65 28 20 64 62 5f 73 74 65 70 28 26 73 29 3d le( db_step(&s)=
0bc0: 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 =SQLITE_ROW ){.
0bd0: 20 20 20 40 20 3c 74 72 3e 0a 20 20 20 20 40 20 @ <tr>. @
0be0: 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 <td align="right
0bf0: 22 3e 0a 20 20 20 20 69 66 28 20 67 2e 6f 6b 41 ">. if( g.okA
0c00: 64 6d 69 6e 20 29 7b 0a 20 20 20 20 20 20 40 20 dmin ){. @
0c10: 3c 61 20 68 72 65 66 3d 22 73 65 74 75 70 5f 75 <a href="setup_u
0c20: 65 64 69 74 3f 69 64 3d 25 64 28 64 62 5f 63 6f edit?id=%d(db_co
0c30: 6c 75 6d 6e 5f 69 6e 74 28 26 73 2c 30 29 29 22 lumn_int(&s,0))"
0c40: 3e 0a 20 20 20 20 7d 0a 20 20 20 20 40 20 3c 6e >. }. @ <n
0c50: 6f 62 72 3e 25 68 28 64 62 5f 63 6f 6c 75 6d 6e obr>%h(db_column
0c60: 5f 74 65 78 74 28 26 73 2c 31 29 29 3c 2f 6e 6f _text(&s,1))</no
0c70: 62 72 3e 0a 20 20 20 20 69 66 28 20 67 2e 6f 6b br>. if( g.ok
0c80: 41 64 6d 69 6e 20 29 7b 0a 20 20 20 20 20 20 40 Admin ){. @
0c90: 20 3c 2f 61 3e 0a 20 20 20 20 7d 0a 20 20 20 20 </a>. }.
0ca0: 40 20 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e @ </td><td></td>
0cb0: 0a 20 20 20 20 40 20 3c 74 64 20 61 6c 69 67 6e . @ <td align
0cc0: 3d 22 63 65 6e 74 65 72 22 3e 25 73 28 64 62 5f ="center">%s(db_
0cd0: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 73 2c 32 column_text(&s,2
0ce0: 29 29 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e ))</td><td></td>
0cf0: 0a 20 20 20 20 40 20 3c 74 64 20 61 6c 69 67 6e . @ <td align
0d00: 3d 22 6c 65 66 74 22 3e 25 73 28 64 62 5f 63 6f ="left">%s(db_co
0d10: 6c 75 6d 6e 5f 74 65 78 74 28 26 73 2c 33 29 29 lumn_text(&s,3))
0d20: 3c 2f 74 64 3e 0a 20 20 20 20 40 20 3c 2f 74 72 </td>. @ </tr
0d30: 3e 0a 20 20 7d 0a 20 20 40 20 3c 2f 74 61 62 6c >. }. @ </tabl
0d40: 65 3e 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61 e></td></tr></ta
0d50: 62 6c 65 3e 0a 20 20 40 20 3c 74 64 20 76 61 6c ble>. @ <td val
0d60: 69 67 6e 3d 22 74 6f 70 22 3e 0a 20 20 40 20 3c ign="top">. @ <
0d70: 62 3e 4e 6f 74 65 73 3a 3c 2f 62 3e 0a 20 20 40 b>Notes:</b>. @
0d80: 20 3c 6f 6c 3e 0a 20 20 40 20 3c 6c 69 3e 3c 70 <ol>. @ <li><p
0d90: 3e 54 68 65 20 70 65 72 6d 69 73 73 69 6f 6e 20 >The permission
0da0: 66 6c 61 67 73 20 61 72 65 20 61 73 20 66 6f 6c flags are as fol
0db0: 6c 6f 77 73 3a 3c 2f 70 3e 0a 20 20 40 20 3c 6f lows:</p>. @ <o
0dc0: 6c 20 74 79 70 65 3d 22 61 22 3e 0a 20 20 40 20 l type="a">. @
0dd0: 3c 6c 69 20 76 61 6c 75 65 3d 22 31 22 3e 3c 62 <li value="1"><b
0de0: 3e 41 64 6d 69 6e 3c 2f 62 3e 3a 20 43 72 65 61 >Admin</b>: Crea
0df0: 74 65 20 61 6e 64 20 64 65 6c 65 74 65 20 75 73 te and delete us
0e00: 65 72 73 3c 2f 6c 69 3e 0a 20 20 40 20 3c 6c 69 ers</li>. @ <li
0e10: 20 76 61 6c 75 65 3d 22 33 22 3e 3c 62 3e 41 70 value="3"><b>Ap
0e20: 70 65 6e 64 2d 54 6b 74 3c 2f 62 3e 3a 20 41 70 pend-Tkt</b>: Ap
0e30: 70 65 6e 64 20 74 6f 20 74 69 63 6b 65 74 73 3c pend to tickets<
0e40: 2f 6c 69 3e 0a 20 20 40 20 3c 6c 69 20 76 61 6c /li>. @ <li val
0e50: 75 65 3d 22 34 22 3e 3c 62 3e 44 65 6c 65 74 65 ue="4"><b>Delete
0e60: 3c 2f 62 3e 3a 20 44 65 6c 65 74 65 20 77 69 6b </b>: Delete wik
0e70: 69 20 61 6e 64 20 74 69 63 6b 65 74 73 3c 2f 6c i and tickets</l
0e80: 69 3e 0a 20 20 40 20 3c 6c 69 20 76 61 6c 75 65 i>. @ <li value
0e90: 3d 22 35 22 3e 3c 62 3e 45 6d 61 69 6c 3c 2f 62 ="5"><b>Email</b
0ea0: 3e 3a 20 56 69 65 77 20 45 4d 61 69 6c 20 61 64 >: View EMail ad
0eb0: 64 72 65 73 73 65 73 20 6f 6e 20 74 69 63 6b 65 dresses on ticke
0ec0: 74 73 3c 2f 6c 69 3e 0a 20 20 40 20 3c 6c 69 20 ts</li>. @ <li
0ed0: 76 61 6c 75 65 3d 22 36 22 3e 3c 62 3e 4e 65 77 value="6"><b>New
0ee0: 2d 57 69 6b 69 3c 2f 62 3e 3a 20 43 72 65 61 74 -Wiki</b>: Creat
0ef0: 65 20 6e 65 77 20 77 69 6b 69 20 70 61 67 65 73 e new wiki pages
0f00: 3c 2f 6c 69 3e 0a 20 20 40 20 3c 6c 69 20 76 61 </li>. @ <li va
0f10: 6c 75 65 3d 22 37 22 3e 3c 62 3e 43 6c 6f 6e 65 lue="7"><b>Clone
0f20: 3c 2f 62 3e 3a 20 43 6c 6f 6e 65 20 74 68 65 20 </b>: Clone the
0f30: 72 65 70 6f 73 69 74 6f 72 79 3c 2f 6c 69 3e 0a repository</li>.
0f40: 20 20 40 20 3c 6c 69 20 76 61 6c 75 65 3d 22 38 @ <li value="8
0f50: 22 3e 3c 62 3e 48 69 73 74 6f 72 79 3c 2f 62 3e "><b>History</b>
0f60: 3a 20 56 69 65 77 20 64 65 74 61 69 6c 20 72 65 : View detail re
0f70: 70 6f 73 69 74 6f 72 79 20 68 69 73 74 6f 72 79 pository history
0f80: 3c 2f 6c 69 3e 0a 20 20 40 20 3c 6c 69 20 76 61 </li>. @ <li va
0f90: 6c 75 65 3d 22 39 22 3e 3c 62 3e 43 68 65 63 6b lue="9"><b>Check
0fa0: 2d 49 6e 3c 2f 62 3e 3a 20 43 6f 6d 6d 69 74 20 -In</b>: Commit
0fb0: 6e 65 77 20 76 65 72 73 69 6f 6e 73 20 69 6e 20 new versions in
0fc0: 74 68 65 20 72 65 70 6f 73 69 74 6f 72 79 3c 2f the repository</
0fd0: 6c 69 3e 0a 20 20 40 20 3c 6c 69 20 76 61 6c 75 li>. @ <li valu
0fe0: 65 3d 22 31 30 22 3e 3c 62 3e 52 65 61 64 2d 57 e="10"><b>Read-W
0ff0: 69 6b 69 3c 2f 62 3e 3a 20 56 69 65 77 20 77 69 iki</b>: View wi
1000: 6b 69 20 70 61 67 65 73 3c 2f 6c 69 3e 0a 20 20 ki pages</li>.
1010: 40 20 3c 6c 69 20 76 61 6c 75 65 3d 22 31 31 22 @ <li value="11"
1020: 3e 3c 62 3e 57 72 69 74 65 2d 57 69 6b 69 3c 2f ><b>Write-Wiki</
1030: 62 3e 3a 20 45 64 69 74 20 77 69 6b 69 20 70 61 b>: Edit wiki pa
1040: 67 65 73 3c 2f 6c 69 3e 0a 20 20 40 20 3c 6c 69 ges</li>. @ <li
1050: 20 76 61 6c 75 65 3d 22 31 33 22 3e 3c 62 3e 41 value="13"><b>A
1060: 70 70 65 6e 64 2d 57 69 6b 69 3c 2f 62 3e 3a 20 ppend-Wiki</b>:
1070: 41 70 70 65 6e 64 20 74 6f 20 77 69 6b 69 20 70 Append to wiki p
1080: 61 67 65 73 3c 2f 6c 69 3e 0a 20 20 40 20 3c 6c ages</li>. @ <l
1090: 69 20 76 61 6c 75 65 3d 22 31 34 22 3e 3c 62 3e i value="14"><b>
10a0: 4e 65 77 2d 54 6b 74 3c 2f 62 3e 3a 20 43 72 65 New-Tkt</b>: Cre
10b0: 61 74 65 20 6e 65 77 20 74 69 63 6b 65 74 73 3c ate new tickets<
10c0: 2f 6c 69 3e 0a 20 20 40 20 3c 6c 69 20 76 61 6c /li>. @ <li val
10d0: 75 65 3d 22 31 35 22 3e 3c 62 3e 43 68 65 63 6b ue="15"><b>Check
10e0: 2d 4f 75 74 3c 2f 62 3e 3a 20 43 68 65 63 6b 20 -Out</b>: Check
10f0: 6f 75 74 20 76 65 72 73 69 6f 6e 73 3c 2f 6c 69 out versions</li
1100: 3e 0a 20 20 40 20 3c 6c 69 20 76 61 6c 75 65 3d >. @ <li value=
1110: 22 31 36 22 3e 3c 62 3e 50 61 73 73 77 6f 72 64 "16"><b>Password
1120: 3c 2f 62 3e 3a 20 43 68 61 6e 67 65 20 79 6f 75 </b>: Change you
1130: 72 20 6f 77 6e 20 70 61 73 73 77 6f 72 64 3c 2f r own password</
1140: 6c 69 3e 0a 20 20 40 20 3c 6c 69 20 76 61 6c 75 li>. @ <li valu
1150: 65 3d 22 31 37 22 3e 3c 62 3e 51 75 65 72 79 3c e="17"><b>Query<
1160: 2f 62 3e 3a 20 43 72 65 61 74 65 20 6e 65 77 20 /b>: Create new
1170: 71 75 65 72 69 65 73 20 61 67 61 69 6e 73 74 20 queries against
1180: 74 69 63 6b 65 74 73 3c 2f 6c 69 3e 0a 20 20 40 tickets</li>. @
1190: 20 3c 6c 69 20 76 61 6c 75 65 3d 22 31 38 22 3e <li value="18">
11a0: 3c 62 3e 52 65 61 64 2d 54 6b 74 3c 2f 62 3e 3a <b>Read-Tkt</b>:
11b0: 20 56 69 65 77 20 74 69 63 6b 65 74 73 3c 2f 6c View tickets</l
11c0: 69 3e 0a 20 20 40 20 3c 6c 69 20 76 61 6c 75 65 i>. @ <li value
11d0: 3d 22 31 39 22 3e 3c 62 3e 53 65 74 75 70 3a 3c ="19"><b>Setup:<
11e0: 2f 62 3e 20 53 65 74 75 70 20 61 6e 64 20 63 6f /b> Setup and co
11f0: 6e 66 69 67 75 72 65 20 74 68 69 73 20 77 65 62 nfigure this web
1200: 73 69 74 65 3c 2f 6c 69 3e 0a 20 20 40 20 3c 6c site</li>. @ <l
1210: 69 20 76 61 6c 75 65 3d 22 32 33 22 3e 3c 62 3e i value="23"><b>
1220: 57 72 69 74 65 2d 54 6b 74 3c 2f 62 3e 3a 20 45 Write-Tkt</b>: E
1230: 64 69 74 20 74 69 63 6b 65 74 73 3c 2f 6c 69 3e dit tickets</li>
1240: 0a 20 20 40 20 3c 2f 6f 6c 3e 0a 20 20 40 20 3c . @ </ol>. @ <
1250: 2f 70 3e 3c 2f 6c 69 3e 0a 20 20 40 0a 20 20 40 /p></li>. @. @
1260: 20 3c 6c 69 3e 3c 70 3e 0a 20 20 40 20 45 76 65 <li><p>. @ Eve
1270: 72 79 20 75 73 65 72 2c 20 6c 6f 67 67 65 64 20 ry user, logged
1280: 69 6e 20 6f 72 20 6e 6f 74 2c 20 68 61 73 20 74 in or not, has t
1290: 68 65 20 70 72 69 76 69 6c 65 67 65 73 20 6f 66 he privileges of
12a0: 20 3c 62 3e 6e 6f 62 6f 64 79 3c 2f 62 3e 2e 0a <b>nobody</b>..
12b0: 20 20 40 20 41 6e 79 20 68 75 6d 61 6e 20 63 61 @ Any human ca
12c0: 6e 20 6c 6f 67 69 6e 20 61 73 20 3c 62 3e 61 6e n login as <b>an
12d0: 6f 6e 79 6d 6f 75 73 3c 2f 62 3e 20 73 69 6e 63 onymous</b> sinc
12e0: 65 20 74 68 65 20 70 61 73 73 77 6f 72 64 20 69 e the password i
12f0: 73 0a 20 20 40 20 63 6c 65 61 72 6c 79 20 64 69 s. @ clearly di
1300: 73 70 6c 61 79 65 64 20 6f 6e 20 74 68 65 20 6c splayed on the l
1310: 6f 67 69 6e 20 70 61 67 65 20 66 6f 72 20 74 68 ogin page for th
1320: 65 6d 20 74 6f 20 74 79 70 65 2e 20 20 54 68 65 em to type. The
1330: 20 70 75 72 70 6f 73 65 0a 20 20 40 20 6f 66 20 purpose. @ of
1340: 72 65 71 75 69 72 69 6e 67 20 61 6e 6f 6e 79 6d requiring anonym
1350: 6f 75 73 20 74 6f 20 6c 6f 67 20 69 6e 20 69 73 ous to log in is
1360: 20 74 6f 20 70 72 65 76 65 6e 74 20 61 63 63 65 to prevent acce
1370: 73 73 20 62 79 20 73 70 69 64 65 72 73 2e 0a 20 ss by spiders..
1380: 20 40 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 20 20 40 @ </p></li>. @
1390: 0a 20 20 40 20 3c 2f 6f 6c 3e 0a 20 20 40 20 3c . @ </ol>. @ <
13a0: 2f 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 /td></tr></table
13b0: 3e 0a 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 >. style_footer
13c0: 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 ();.}../*.** WEB
13d0: 50 41 47 45 3a 20 2f 73 65 74 75 70 5f 75 65 64 PAGE: /setup_ued
13e0: 69 74 0a 2a 2f 0a 76 6f 69 64 20 75 73 65 72 5f it.*/.void user_
13f0: 65 64 69 74 28 76 6f 69 64 29 7b 0a 20 20 63 6f edit(void){. co
1400: 6e 73 74 20 63 68 61 72 20 2a 7a 49 64 2c 20 2a nst char *zId, *
1410: 7a 4c 6f 67 69 6e 2c 20 2a 7a 49 6e 66 6f 2c 20 zLogin, *zInfo,
1420: 2a 7a 43 61 70 3b 0a 20 20 63 68 61 72 20 2a 6f *zCap;. char *o
1430: 61 61 2c 20 2a 6f 61 73 2c 20 2a 6f 61 72 2c 20 aa, *oas, *oar,
1440: 2a 6f 61 77 2c 20 2a 6f 61 6e 2c 20 2a 6f 61 69 *oaw, *oan, *oai
1450: 2c 20 2a 6f 61 6a 2c 20 2a 6f 61 6f 2c 20 2a 6f , *oaj, *oao, *o
1460: 61 70 3b 0a 20 20 63 68 61 72 20 2a 6f 61 6b 2c ap;. char *oak,
1470: 20 2a 6f 61 64 2c 20 2a 6f 61 71 2c 20 2a 6f 61 *oad, *oaq, *oa
1480: 63 2c 20 2a 6f 61 66 2c 20 2a 6f 61 6d 2c 20 2a c, *oaf, *oam, *
1490: 6f 61 68 2c 20 2a 6f 61 67 2c 20 2a 6f 61 65 3b oah, *oag, *oae;
14a0: 0a 20 20 69 6e 74 20 64 6f 57 72 69 74 65 3b 0a . int doWrite;.
14b0: 20 20 69 6e 74 20 75 69 64 3b 0a 20 20 69 6e 74 int uid;. int
14c0: 20 68 69 67 68 65 72 55 73 65 72 20 3d 20 30 3b higherUser = 0;
14d0: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75 73 65 /* True if use
14e0: 72 20 62 65 69 6e 67 20 65 64 69 74 65 64 20 69 r being edited i
14f0: 73 20 53 45 54 55 50 20 61 6e 64 20 74 68 65 20 s SETUP and the
1500: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 */.
1510: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 75 73 65 /* use
1520: 72 20 64 6f 69 6e 67 20 74 68 65 20 65 64 69 74 r doing the edit
1530: 69 6e 67 20 69 73 20 41 44 4d 49 4e 2e 20 20 44 ing is ADMIN. D
1540: 69 73 61 6c 6c 6f 77 20 65 64 69 74 69 6e 67 20 isallow editing
1550: 2a 2f 0a 0a 20 20 2f 2a 20 4d 75 73 74 20 68 61 */.. /* Must ha
1560: 76 65 20 41 44 4d 49 4e 20 70 72 69 76 6c 65 67 ve ADMIN privleg
1570: 65 73 20 74 6f 20 61 63 63 65 73 73 20 74 68 69 es to access thi
1580: 73 20 70 61 67 65 0a 20 20 2a 2f 0a 20 20 6c 6f s page. */. lo
1590: 67 69 6e 5f 63 68 65 63 6b 5f 63 72 65 64 65 6e gin_check_creden
15a0: 74 69 61 6c 73 28 29 3b 0a 20 20 69 66 28 20 21 tials();. if( !
15b0: 67 2e 6f 6b 41 64 6d 69 6e 20 29 7b 20 6c 6f 67 g.okAdmin ){ log
15c0: 69 6e 5f 6e 65 65 64 65 64 28 29 3b 20 72 65 74 in_needed(); ret
15d0: 75 72 6e 3b 20 7d 0a 0a 20 20 2f 2a 20 43 68 65 urn; }.. /* Che
15e0: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 61 6e 20 ck to see if an
15f0: 41 44 4d 49 4e 20 75 73 65 72 20 69 73 20 74 72 ADMIN user is tr
1600: 79 69 6e 67 20 74 6f 20 65 64 69 74 20 61 20 53 ying to edit a S
1610: 45 54 55 50 20 61 63 63 6f 75 6e 74 2e 0a 20 20 ETUP account..
1620: 2a 2a 20 44 6f 6e 27 74 20 61 6c 6c 6f 77 20 74 ** Don't allow t
1630: 68 61 74 2e 0a 20 20 2a 2f 0a 20 20 7a 49 64 20 hat.. */. zId
1640: 3d 20 50 44 28 22 69 64 22 2c 20 22 30 22 29 3b = PD("id", "0");
1650: 0a 20 20 75 69 64 20 3d 20 61 74 6f 69 28 7a 49 . uid = atoi(zI
1660: 64 29 3b 0a 20 20 69 66 28 20 7a 49 64 20 26 26 d);. if( zId &&
1670: 20 21 67 2e 6f 6b 53 65 74 75 70 20 26 26 20 75 !g.okSetup && u
1680: 69 64 3e 30 20 29 7b 0a 20 20 20 20 63 68 61 72 id>0 ){. char
1690: 20 2a 7a 4f 6c 64 43 61 70 73 3b 0a 20 20 20 20 *zOldCaps;.
16a0: 7a 4f 6c 64 43 61 70 73 20 3d 20 64 62 5f 74 65 zOldCaps = db_te
16b0: 78 74 28 30 2c 20 22 53 45 4c 45 43 54 20 63 61 xt(0, "SELECT ca
16c0: 70 73 20 46 52 4f 4d 20 75 73 65 72 20 57 48 45 ps FROM user WHE
16d0: 52 45 20 75 69 64 3d 25 64 22 2c 75 69 64 29 3b RE uid=%d",uid);
16e0: 0a 20 20 20 20 68 69 67 68 65 72 55 73 65 72 20 . higherUser
16f0: 3d 20 7a 4f 6c 64 43 61 70 73 20 26 26 20 73 74 = zOldCaps && st
1700: 72 63 68 72 28 7a 4f 6c 64 43 61 70 73 2c 27 73 rchr(zOldCaps,'s
1710: 27 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 50 ');. }.. if( P
1720: 28 22 63 61 6e 22 29 20 29 7b 0a 20 20 20 20 63 ("can") ){. c
1730: 67 69 5f 72 65 64 69 72 65 63 74 28 22 73 65 74 gi_redirect("set
1740: 75 70 5f 75 6c 69 73 74 22 29 3b 0a 20 20 20 20 up_ulist");.
1750: 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 0a 20 20 2f return;. }.. /
1760: 2a 20 49 66 20 77 65 20 68 61 76 65 20 61 6c 6c * If we have all
1770: 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 69 the necessary i
1780: 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 77 72 69 74 nformation, writ
1790: 65 20 74 68 65 20 6e 65 77 20 6f 72 0a 20 20 2a e the new or. *
17a0: 2a 20 6d 6f 64 69 66 69 65 64 20 75 73 65 72 20 * modified user
17b0: 72 65 63 6f 72 64 2e 20 20 41 66 74 65 72 20 77 record. After w
17c0: 72 69 74 69 6e 67 20 74 68 65 20 75 73 65 72 20 riting the user
17d0: 72 65 63 6f 72 64 2c 20 72 65 64 69 72 65 63 74 record, redirect
17e0: 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 70 61 67 . ** to the pag
17f0: 65 20 74 68 61 74 20 64 69 73 70 6c 61 79 73 20 e that displays
1800: 61 20 6c 69 73 74 20 6f 66 20 75 73 65 72 73 2e a list of users.
1810: 0a 20 20 2a 2f 0a 20 20 64 6f 57 72 69 74 65 20 . */. doWrite
1820: 3d 20 63 67 69 5f 61 6c 6c 28 22 6c 6f 67 69 6e = cgi_all("login
1830: 22 2c 22 69 6e 66 6f 22 2c 22 70 77 22 29 20 26 ","info","pw") &
1840: 26 20 21 68 69 67 68 65 72 55 73 65 72 3b 0a 20 & !higherUser;.
1850: 20 69 66 28 20 64 6f 57 72 69 74 65 20 29 7b 0a if( doWrite ){.
1860: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a const char *
1870: 7a 50 77 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 zPw;. const c
1880: 68 61 72 20 2a 7a 4c 6f 67 69 6e 3b 0a 20 20 20 har *zLogin;.
1890: 20 63 68 61 72 20 7a 43 61 70 5b 33 30 5d 3b 0a char zCap[30];.
18a0: 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20 int i = 0;.
18b0: 20 20 20 69 6e 74 20 61 61 20 3d 20 50 28 22 61 int aa = P("a
18c0: 61 22 29 21 3d 30 3b 0a 20 20 20 20 69 6e 74 20 a")!=0;. int
18d0: 61 64 20 3d 20 50 28 22 61 64 22 29 21 3d 30 3b ad = P("ad")!=0;
18e0: 0a 20 20 20 20 69 6e 74 20 61 65 20 3d 20 50 28 . int ae = P(
18f0: 22 61 65 22 29 21 3d 30 3b 0a 20 20 20 20 69 6e "ae")!=0;. in
1900: 74 20 61 69 20 3d 20 50 28 22 61 69 22 29 21 3d t ai = P("ai")!=
1910: 30 3b 0a 20 20 20 20 69 6e 74 20 61 6a 20 3d 20 0;. int aj =
1920: 50 28 22 61 6a 22 29 21 3d 30 3b 0a 20 20 20 20 P("aj")!=0;.
1930: 69 6e 74 20 61 6b 20 3d 20 50 28 22 61 6b 22 29 int ak = P("ak")
1940: 21 3d 30 3b 0a 20 20 20 20 69 6e 74 20 61 6e 20 !=0;. int an
1950: 3d 20 50 28 22 61 6e 22 29 21 3d 30 3b 0a 20 20 = P("an")!=0;.
1960: 20 20 69 6e 74 20 61 6f 20 3d 20 50 28 22 61 6f int ao = P("ao
1970: 22 29 21 3d 30 3b 0a 20 20 20 20 69 6e 74 20 61 ")!=0;. int a
1980: 70 20 3d 20 50 28 22 61 70 22 29 21 3d 30 3b 0a p = P("ap")!=0;.
1990: 20 20 20 20 69 6e 74 20 61 71 20 3d 20 50 28 22 int aq = P("
19a0: 61 71 22 29 21 3d 30 3b 0a 20 20 20 20 69 6e 74 aq")!=0;. int
19b0: 20 61 72 20 3d 20 50 28 22 61 72 22 29 21 3d 30 ar = P("ar")!=0
19c0: 3b 0a 20 20 20 20 69 6e 74 20 61 73 20 3d 20 67 ;. int as = g
19d0: 2e 6f 6b 53 65 74 75 70 20 26 26 20 50 28 22 61 .okSetup && P("a
19e0: 73 22 29 21 3d 30 3b 0a 20 20 20 20 69 6e 74 20 s")!=0;. int
19f0: 61 77 20 3d 20 50 28 22 61 77 22 29 21 3d 30 3b aw = P("aw")!=0;
1a00: 0a 20 20 20 20 69 6e 74 20 61 63 20 3d 20 50 28 . int ac = P(
1a10: 22 61 63 22 29 21 3d 30 3b 0a 20 20 20 20 69 6e "ac")!=0;. in
1a20: 74 20 61 66 20 3d 20 50 28 22 61 66 22 29 21 3d t af = P("af")!=
1a30: 30 3b 0a 20 20 20 20 69 6e 74 20 61 6d 20 3d 20 0;. int am =
1a40: 50 28 22 61 6d 22 29 21 3d 30 3b 0a 20 20 20 20 P("am")!=0;.
1a50: 69 6e 74 20 61 68 20 3d 20 50 28 22 61 68 22 29 int ah = P("ah")
1a60: 21 3d 30 3b 0a 20 20 20 20 69 6e 74 20 61 67 20 !=0;. int ag
1a70: 3d 20 50 28 22 61 67 22 29 21 3d 30 3b 0a 20 20 = P("ag")!=0;.
1a80: 20 20 69 66 28 20 61 61 20 29 7b 20 7a 43 61 70 if( aa ){ zCap
1a90: 5b 69 2b 2b 5d 20 3d 20 27 61 27 3b 20 7d 0a 20 [i++] = 'a'; }.
1aa0: 20 20 20 69 66 28 20 61 63 20 29 7b 20 7a 43 61 if( ac ){ zCa
1ab0: 70 5b 69 2b 2b 5d 20 3d 20 27 63 27 3b 20 7d 0a p[i++] = 'c'; }.
1ac0: 20 20 20 20 69 66 28 20 61 64 20 29 7b 20 7a 43 if( ad ){ zC
1ad0: 61 70 5b 69 2b 2b 5d 20 3d 20 27 64 27 3b 20 7d ap[i++] = 'd'; }
1ae0: 0a 20 20 20 20 69 66 28 20 61 65 20 29 7b 20 7a . if( ae ){ z
1af0: 43 61 70 5b 69 2b 2b 5d 20 3d 20 27 65 27 3b 20 Cap[i++] = 'e';
1b00: 7d 0a 20 20 20 20 69 66 28 20 61 66 20 29 7b 20 }. if( af ){
1b10: 7a 43 61 70 5b 69 2b 2b 5d 20 3d 20 27 66 27 3b zCap[i++] = 'f';
1b20: 20 7d 0a 20 20 20 20 69 66 28 20 61 68 20 29 7b }. if( ah ){
1b30: 20 7a 43 61 70 5b 69 2b 2b 5d 20 3d 20 27 68 27 zCap[i++] = 'h'
1b40: 3b 20 7d 0a 20 20 20 20 69 66 28 20 61 67 20 29 ; }. if( ag )
1b50: 7b 20 7a 43 61 70 5b 69 2b 2b 5d 20 3d 20 27 67 { zCap[i++] = 'g
1b60: 27 3b 20 7d 0a 20 20 20 20 69 66 28 20 61 69 20 '; }. if( ai
1b70: 29 7b 20 7a 43 61 70 5b 69 2b 2b 5d 20 3d 20 27 ){ zCap[i++] = '
1b80: 69 27 3b 20 7d 0a 20 20 20 20 69 66 28 20 61 6a i'; }. if( aj
1b90: 20 29 7b 20 7a 43 61 70 5b 69 2b 2b 5d 20 3d 20 ){ zCap[i++] =
1ba0: 27 6a 27 3b 20 7d 0a 20 20 20 20 69 66 28 20 61 'j'; }. if( a
1bb0: 6b 20 29 7b 20 7a 43 61 70 5b 69 2b 2b 5d 20 3d k ){ zCap[i++] =
1bc0: 20 27 6b 27 3b 20 7d 0a 20 20 20 20 69 66 28 20 'k'; }. if(
1bd0: 61 6d 20 29 7b 20 7a 43 61 70 5b 69 2b 2b 5d 20 am ){ zCap[i++]
1be0: 3d 20 27 6d 27 3b 20 7d 0a 20 20 20 20 69 66 28 = 'm'; }. if(
1bf0: 20 61 6e 20 29 7b 20 7a 43 61 70 5b 69 2b 2b 5d an ){ zCap[i++]
1c00: 20 3d 20 27 6e 27 3b 20 7d 0a 20 20 20 20 69 66 = 'n'; }. if
1c10: 28 20 61 6f 20 29 7b 20 7a 43 61 70 5b 69 2b 2b ( ao ){ zCap[i++
1c20: 5d 20 3d 20 27 6f 27 3b 20 7d 0a 20 20 20 20 69 ] = 'o'; }. i
1c30: 66 28 20 61 70 20 29 7b 20 7a 43 61 70 5b 69 2b f( ap ){ zCap[i+
1c40: 2b 5d 20 3d 20 27 70 27 3b 20 7d 0a 20 20 20 20 +] = 'p'; }.
1c50: 69 66 28 20 61 71 20 29 7b 20 7a 43 61 70 5b 69 if( aq ){ zCap[i
1c60: 2b 2b 5d 20 3d 20 27 71 27 3b 20 7d 0a 20 20 20 ++] = 'q'; }.
1c70: 20 69 66 28 20 61 72 20 29 7b 20 7a 43 61 70 5b if( ar ){ zCap[
1c80: 69 2b 2b 5d 20 3d 20 27 72 27 3b 20 7d 0a 20 20 i++] = 'r'; }.
1c90: 20 20 69 66 28 20 61 73 20 29 7b 20 7a 43 61 70 if( as ){ zCap
1ca0: 5b 69 2b 2b 5d 20 3d 20 27 73 27 3b 20 7d 0a 20 [i++] = 's'; }.
1cb0: 20 20 20 69 66 28 20 61 77 20 29 7b 20 7a 43 61 if( aw ){ zCa
1cc0: 70 5b 69 2b 2b 5d 20 3d 20 27 77 27 3b 20 7d 0a p[i++] = 'w'; }.
1cd0: 0a 20 20 20 20 7a 43 61 70 5b 69 5d 20 3d 20 30 . zCap[i] = 0
1ce0: 3b 0a 20 20 20 20 7a 50 77 20 3d 20 50 28 22 70 ;. zPw = P("p
1cf0: 77 22 29 3b 0a 20 20 20 20 69 66 28 20 7a 50 77 w");. if( zPw
1d00: 3d 3d 30 20 7c 7c 20 7a 50 77 5b 30 5d 3d 3d 30 ==0 || zPw[0]==0
1d10: 20 29 7b 0a 20 20 20 20 20 20 7a 50 77 20 3d 20 ){. zPw =
1d20: 64 62 5f 74 65 78 74 28 30 2c 20 22 53 45 4c 45 db_text(0, "SELE
1d30: 43 54 20 70 77 20 46 52 4f 4d 20 75 73 65 72 20 CT pw FROM user
1d40: 57 48 45 52 45 20 75 69 64 3d 25 64 22 2c 20 75 WHERE uid=%d", u
1d50: 69 64 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a id);. }. z
1d60: 4c 6f 67 69 6e 20 3d 20 50 28 22 6c 6f 67 69 6e Login = P("login
1d70: 22 29 3b 0a 20 20 20 20 69 66 28 20 75 69 64 3e ");. if( uid>
1d80: 30 20 26 26 0a 20 20 20 20 20 20 20 20 64 62 5f 0 &&. db_
1d90: 65 78 69 73 74 73 28 22 53 45 4c 45 43 54 20 31 exists("SELECT 1
1da0: 20 46 52 4f 4d 20 75 73 65 72 20 57 48 45 52 45 FROM user WHERE
1db0: 20 6c 6f 67 69 6e 3d 25 51 20 41 4e 44 20 75 69 login=%Q AND ui
1dc0: 64 21 3d 25 64 22 2c 20 7a 4c 6f 67 69 6e 2c 20 d!=%d", zLogin,
1dd0: 75 69 64 29 0a 20 20 20 20 29 7b 0a 20 20 20 20 uid). ){.
1de0: 20 20 73 74 79 6c 65 5f 68 65 61 64 65 72 28 22 style_header("
1df0: 55 73 65 72 20 43 72 65 61 74 69 6f 6e 20 45 72 User Creation Er
1e00: 72 6f 72 22 29 3b 0a 20 20 20 20 20 20 40 20 3c ror");. @ <
1e10: 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 72 65 64 22 font color="red"
1e20: 3e 4c 6f 67 69 6e 20 22 25 68 28 7a 4c 6f 67 69 >Login "%h(zLogi
1e30: 6e 29 22 20 69 73 20 61 6c 72 65 61 64 79 20 75 n)" is already u
1e40: 73 65 64 20 62 79 20 61 20 64 69 66 66 65 72 65 sed by a differe
1e50: 6e 74 0a 20 20 20 20 20 20 40 20 75 73 65 72 2e nt. @ user.
1e60: 3c 2f 66 6f 6e 74 3e 0a 20 20 20 20 20 20 40 0a </font>. @.
1e70: 20 20 20 20 20 20 40 20 3c 70 3e 3c 61 20 68 72 @ <p><a hr
1e80: 65 66 3d 22 73 65 74 75 70 5f 75 65 64 69 74 3f ef="setup_uedit?
1e90: 69 64 3d 25 64 28 75 69 64 29 29 3e 5b 42 75 6d id=%d(uid))>[Bum
1ea0: 6d 65 72 5d 3c 2f 61 3e 3c 2f 70 3e 0a 20 20 20 mer]</a></p>.
1eb0: 20 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 style_footer(
1ec0: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 3b );. return;
1ed0: 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 5f 6d 75 . }. db_mu
1ee0: 6c 74 69 5f 65 78 65 63 28 0a 20 20 20 20 20 20 lti_exec(.
1ef0: 20 22 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 75 "REPLACE INTO u
1f00: 73 65 72 28 75 69 64 2c 6c 6f 67 69 6e 2c 69 6e ser(uid,login,in
1f10: 66 6f 2c 70 77 2c 63 61 70 29 20 22 0a 20 20 20 fo,pw,cap) ".
1f20: 20 20 20 20 22 56 41 4c 55 45 53 28 6e 75 6c 6c "VALUES(null
1f30: 69 66 28 25 64 2c 30 29 2c 25 51 2c 25 51 2c 25 if(%d,0),%Q,%Q,%
1f40: 51 2c 27 25 73 27 29 22 2c 0a 20 20 20 20 20 20 Q,'%s')",.
1f50: 75 69 64 2c 20 50 28 22 6c 6f 67 69 6e 22 29 2c uid, P("login"),
1f60: 20 50 28 22 69 6e 66 6f 22 29 2c 20 7a 50 77 2c P("info"), zPw,
1f70: 20 7a 43 61 70 0a 20 20 20 20 29 3b 0a 20 20 20 zCap. );.
1f80: 20 63 67 69 5f 72 65 64 69 72 65 63 74 28 22 73 cgi_redirect("s
1f90: 65 74 75 70 5f 75 6c 69 73 74 22 29 3b 0a 20 20 etup_ulist");.
1fa0: 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 0a 20 return;. }..
1fb0: 20 2f 2a 20 4c 6f 61 64 20 74 68 65 20 65 78 69 /* Load the exi
1fc0: 73 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f sting informatio
1fd0: 6e 20 61 62 6f 75 74 20 74 68 65 20 75 73 65 72 n about the user
1fe0: 2c 20 69 66 20 61 6e 79 0a 20 20 2a 2f 0a 20 20 , if any. */.
1ff0: 7a 4c 6f 67 69 6e 20 3d 20 22 22 3b 0a 20 20 7a zLogin = "";. z
2000: 49 6e 66 6f 20 3d 20 22 22 3b 0a 20 20 7a 43 61 Info = "";. zCa
2010: 70 20 3d 20 22 22 3b 0a 20 20 6f 61 61 20 3d 20 p = "";. oaa =
2020: 6f 61 63 20 3d 20 6f 61 64 20 3d 20 6f 61 65 20 oac = oad = oae
2030: 3d 20 6f 61 66 20 3d 20 6f 61 67 20 3d 20 6f 61 = oaf = oag = oa
2040: 68 20 3d 20 6f 61 69 20 3d 20 6f 61 6a 20 3d 20 h = oai = oaj =
2050: 6f 61 6b 20 3d 20 6f 61 6d 20 3d 0a 20 20 20 20 oak = oam =.
2060: 20 20 20 20 6f 61 6e 20 3d 20 6f 61 6f 20 3d 20 oan = oao =
2070: 6f 61 70 20 3d 20 6f 61 71 20 3d 20 6f 61 72 20 oap = oaq = oar
2080: 3d 20 6f 61 73 20 3d 20 6f 61 77 20 3d 20 22 22 = oas = oaw = ""
2090: 3b 0a 20 20 69 66 28 20 75 69 64 20 29 7b 0a 20 ;. if( uid ){.
20a0: 20 20 20 7a 4c 6f 67 69 6e 20 3d 20 64 62 5f 74 zLogin = db_t
20b0: 65 78 74 28 22 22 2c 20 22 53 45 4c 45 43 54 20 ext("", "SELECT
20c0: 6c 6f 67 69 6e 20 46 52 4f 4d 20 75 73 65 72 20 login FROM user
20d0: 57 48 45 52 45 20 75 69 64 3d 25 64 22 2c 20 75 WHERE uid=%d", u
20e0: 69 64 29 3b 0a 20 20 20 20 7a 49 6e 66 6f 20 3d id);. zInfo =
20f0: 20 64 62 5f 74 65 78 74 28 22 22 2c 20 22 53 45 db_text("", "SE
2100: 4c 45 43 54 20 69 6e 66 6f 20 46 52 4f 4d 20 75 LECT info FROM u
2110: 73 65 72 20 57 48 45 52 45 20 75 69 64 3d 25 64 ser WHERE uid=%d
2120: 22 2c 20 75 69 64 29 3b 0a 20 20 20 20 7a 43 61 ", uid);. zCa
2130: 70 20 3d 20 64 62 5f 74 65 78 74 28 22 22 2c 20 p = db_text("",
2140: 22 53 45 4c 45 43 54 20 63 61 70 20 46 52 4f 4d "SELECT cap FROM
2150: 20 75 73 65 72 20 57 48 45 52 45 20 75 69 64 3d user WHERE uid=
2160: 25 64 22 2c 20 75 69 64 29 3b 0a 20 20 20 20 69 %d", uid);. i
2170: 66 28 20 73 74 72 63 68 72 28 7a 43 61 70 2c 20 f( strchr(zCap,
2180: 27 61 27 29 20 29 20 6f 61 61 20 3d 20 22 20 63 'a') ) oaa = " c
2190: 68 65 63 6b 65 64 22 3b 0a 20 20 20 20 69 66 28 hecked";. if(
21a0: 20 73 74 72 63 68 72 28 7a 43 61 70 2c 20 27 63 strchr(zCap, 'c
21b0: 27 29 20 29 20 6f 61 63 20 3d 20 22 20 63 68 65 ') ) oac = " che
21c0: 63 6b 65 64 22 3b 0a 20 20 20 20 69 66 28 20 73 cked";. if( s
21d0: 74 72 63 68 72 28 7a 43 61 70 2c 20 27 64 27 29 trchr(zCap, 'd')
21e0: 20 29 20 6f 61 64 20 3d 20 22 20 63 68 65 63 6b ) oad = " check
21f0: 65 64 22 3b 0a 20 20 20 20 69 66 28 20 73 74 72 ed";. if( str
2200: 63 68 72 28 7a 43 61 70 2c 20 27 65 27 29 20 29 chr(zCap, 'e') )
2210: 20 6f 61 65 20 3d 20 22 20 63 68 65 63 6b 65 64 oae = " checked
2220: 22 3b 0a 20 20 20 20 69 66 28 20 73 74 72 63 68 ";. if( strch
2230: 72 28 7a 43 61 70 2c 20 27 66 27 29 20 29 20 6f r(zCap, 'f') ) o
2240: 61 66 20 3d 20 22 20 63 68 65 63 6b 65 64 22 3b af = " checked";
2250: 0a 20 20 20 20 69 66 28 20 73 74 72 63 68 72 28 . if( strchr(
2260: 7a 43 61 70 2c 20 27 67 27 29 20 29 20 6f 61 67 zCap, 'g') ) oag
2270: 20 3d 20 22 20 63 68 65 63 6b 65 64 22 3b 0a 20 = " checked";.
2280: 20 20 20 69 66 28 20 73 74 72 63 68 72 28 7a 43 if( strchr(zC
2290: 61 70 2c 20 27 68 27 29 20 29 20 6f 61 68 20 3d ap, 'h') ) oah =
22a0: 20 22 20 63 68 65 63 6b 65 64 22 3b 0a 20 20 20 " checked";.
22b0: 20 69 66 28 20 73 74 72 63 68 72 28 7a 43 61 70 if( strchr(zCap
22c0: 2c 20 27 69 27 29 20 29 20 6f 61 69 20 3d 20 22 , 'i') ) oai = "
22d0: 20 63 68 65 63 6b 65 64 22 3b 0a 20 20 20 20 69 checked";. i
22e0: 66 28 20 73 74 72 63 68 72 28 7a 43 61 70 2c 20 f( strchr(zCap,
22f0: 27 6a 27 29 20 29 20 6f 61 6a 20 3d 20 22 20 63 'j') ) oaj = " c
2300: 68 65 63 6b 65 64 22 3b 0a 20 20 20 20 69 66 28 hecked";. if(
2310: 20 73 74 72 63 68 72 28 7a 43 61 70 2c 20 27 6b strchr(zCap, 'k
2320: 27 29 20 29 20 6f 61 6b 20 3d 20 22 20 63 68 65 ') ) oak = " che
2330: 63 6b 65 64 22 3b 0a 20 20 20 20 69 66 28 20 73 cked";. if( s
2340: 74 72 63 68 72 28 7a 43 61 70 2c 20 27 6d 27 29 trchr(zCap, 'm')
2350: 20 29 20 6f 61 6d 20 3d 20 22 20 63 68 65 63 6b ) oam = " check
2360: 65 64 22 3b 0a 20 20 20 20 69 66 28 20 73 74 72 ed";. if( str
2370: 63 68 72 28 7a 43 61 70 2c 20 27 6e 27 29 20 29 chr(zCap, 'n') )
2380: 20 6f 61 6e 20 3d 20 22 20 63 68 65 63 6b 65 64 oan = " checked
2390: 22 3b 0a 20 20 20 20 69 66 28 20 73 74 72 63 68 ";. if( strch
23a0: 72 28 7a 43 61 70 2c 20 27 6f 27 29 20 29 20 6f r(zCap, 'o') ) o
23b0: 61 6f 20 3d 20 22 20 63 68 65 63 6b 65 64 22 3b ao = " checked";
23c0: 0a 20 20 20 20 69 66 28 20 73 74 72 63 68 72 28 . if( strchr(
23d0: 7a 43 61 70 2c 20 27 70 27 29 20 29 20 6f 61 70 zCap, 'p') ) oap
23e0: 20 3d 20 22 20 63 68 65 63 6b 65 64 22 3b 0a 20 = " checked";.
23f0: 20 20 20 69 66 28 20 73 74 72 63 68 72 28 7a 43 if( strchr(zC
2400: 61 70 2c 20 27 71 27 29 20 29 20 6f 61 71 20 3d ap, 'q') ) oaq =
2410: 20 22 20 63 68 65 63 6b 65 64 22 3b 0a 20 20 20 " checked";.
2420: 20 69 66 28 20 73 74 72 63 68 72 28 7a 43 61 70 if( strchr(zCap
2430: 2c 20 27 72 27 29 20 29 20 6f 61 72 20 3d 20 22 , 'r') ) oar = "
2440: 20 63 68 65 63 6b 65 64 22 3b 0a 20 20 20 20 69 checked";. i
2450: 66 28 20 73 74 72 63 68 72 28 7a 43 61 70 2c 20 f( strchr(zCap,
2460: 27 73 27 29 20 29 20 6f 61 73 20 3d 20 22 20 63 's') ) oas = " c
2470: 68 65 63 6b 65 64 22 3b 0a 20 20 20 20 69 66 28 hecked";. if(
2480: 20 73 74 72 63 68 72 28 7a 43 61 70 2c 20 27 77 strchr(zCap, 'w
2490: 27 29 20 29 20 6f 61 77 20 3d 20 22 20 63 68 65 ') ) oaw = " che
24a0: 63 6b 65 64 22 3b 0a 20 20 7d 0a 0a 20 20 2f 2a cked";. }.. /*
24b0: 20 42 65 67 69 6e 20 67 65 6e 65 72 61 74 69 6e Begin generatin
24c0: 67 20 74 68 65 20 70 61 67 65 0a 20 20 2a 2f 0a g the page. */.
24d0: 20 20 73 74 79 6c 65 5f 73 75 62 6d 65 6e 75 5f style_submenu_
24e0: 65 6c 65 6d 65 6e 74 28 22 43 61 6e 63 65 6c 22 element("Cancel"
24f0: 2c 20 22 43 61 6e 63 65 6c 22 2c 20 22 73 65 74 , "Cancel", "set
2500: 75 70 5f 75 6c 69 73 74 22 29 3b 0a 20 20 69 66 up_ulist");. if
2510: 28 20 75 69 64 20 29 7b 0a 20 20 20 20 73 74 79 ( uid ){. sty
2520: 6c 65 5f 68 65 61 64 65 72 28 6d 70 72 69 6e 74 le_header(mprint
2530: 66 28 22 45 64 69 74 20 55 73 65 72 20 25 68 22 f("Edit User %h"
2540: 2c 20 7a 4c 6f 67 69 6e 29 29 3b 0a 20 20 7d 65 , zLogin));. }e
2550: 6c 73 65 7b 0a 20 20 20 20 73 74 79 6c 65 5f 68 lse{. style_h
2560: 65 61 64 65 72 28 22 41 64 64 20 41 20 4e 65 77 eader("Add A New
2570: 20 55 73 65 72 22 29 3b 0a 20 20 7d 0a 20 20 40 User");. }. @
2580: 20 3c 74 61 62 6c 65 20 61 6c 69 67 6e 3d 22 6c <table align="l
2590: 65 66 74 22 20 68 73 70 61 63 65 3d 22 32 30 22 eft" hspace="20"
25a0: 20 76 73 70 61 63 65 3d 22 31 30 22 3e 3c 74 72 vspace="10"><tr
25b0: 3e 3c 74 64 3e 0a 20 20 40 20 3c 66 6f 72 6d 20 ><td>. @ <form
25c0: 61 63 74 69 6f 6e 3d 22 25 73 28 67 2e 7a 50 61 action="%s(g.zPa
25d0: 74 68 29 22 20 6d 65 74 68 6f 64 3d 22 50 4f 53 th)" method="POS
25e0: 54 22 3e 0a 20 20 40 20 3c 74 61 62 6c 65 3e 0a T">. @ <table>.
25f0: 20 20 40 20 3c 74 72 3e 0a 20 20 40 20 20 20 3c @ <tr>. @ <
2600: 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 td align="right"
2610: 3e 3c 6e 6f 62 72 3e 55 73 65 72 20 49 44 3a 3c ><nobr>User ID:<
2620: 2f 6e 6f 62 72 3e 3c 2f 74 64 3e 0a 20 20 69 66 /nobr></td>. if
2630: 28 20 75 69 64 20 29 7b 0a 20 20 20 20 40 20 20 ( uid ){. @
2640: 20 3c 74 64 3e 25 64 28 75 69 64 29 20 3c 69 6e <td>%d(uid) <in
2650: 70 75 74 20 74 79 70 65 3d 22 68 69 64 64 65 6e put type="hidden
2660: 22 20 6e 61 6d 65 3d 22 69 64 22 20 76 61 6c 75 " name="id" valu
2670: 65 3d 22 25 64 28 75 69 64 29 22 3e 3c 2f 74 64 e="%d(uid)"></td
2680: 3e 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 40 >. }else{. @
2690: 20 20 20 3c 74 64 3e 28 6e 65 77 20 75 73 65 72 <td>(new user
26a0: 29 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 68 69 )<input type="hi
26b0: 64 64 65 6e 22 20 6e 61 6d 65 3d 22 69 64 22 20 dden" name="id"
26c0: 76 61 6c 75 65 3d 30 3e 3c 2f 74 64 3e 0a 20 20 value=0></td>.
26d0: 7d 0a 20 20 40 20 3c 2f 74 72 3e 0a 20 20 40 20 }. @ </tr>. @
26e0: 3c 74 72 3e 0a 20 20 40 20 20 20 3c 74 64 20 61 <tr>. @ <td a
26f0: 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 3c 6e 6f lign="right"><no
2700: 62 72 3e 4c 6f 67 69 6e 3a 3c 2f 6e 6f 62 72 3e br>Login:</nobr>
2710: 3c 2f 74 64 3e 0a 20 20 40 20 20 20 3c 74 64 3e </td>. @ <td>
2720: 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 74 65 78 <input type="tex
2730: 74 22 20 6e 61 6d 65 3d 22 6c 6f 67 69 6e 22 20 t" name="login"
2740: 76 61 6c 75 65 3d 22 25 68 28 7a 4c 6f 67 69 6e value="%h(zLogin
2750: 29 22 3e 3c 2f 74 64 3e 0a 20 20 40 20 3c 2f 74 )"></td>. @ </t
2760: 72 3e 0a 20 20 40 20 3c 74 72 3e 0a 20 20 40 20 r>. @ <tr>. @
2770: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 <td align="rig
2780: 68 74 22 3e 3c 6e 6f 62 72 3e 43 6f 6e 74 61 63 ht"><nobr>Contac
2790: 74 26 6e 62 73 70 3b 49 6e 66 6f 3a 3c 2f 6e 6f t Info:</no
27a0: 62 72 3e 3c 2f 74 64 3e 0a 20 20 40 20 20 20 3c br></td>. @ <
27b0: 74 64 3e 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 td><input type="
27c0: 74 65 78 74 22 20 6e 61 6d 65 3d 22 69 6e 66 6f text" name="info
27d0: 22 20 73 69 7a 65 3d 34 30 20 76 61 6c 75 65 3d " size=40 value=
27e0: 22 25 68 28 7a 49 6e 66 6f 29 22 3e 3c 2f 74 64 "%h(zInfo)"></td
27f0: 3e 0a 20 20 40 20 3c 2f 74 72 3e 0a 20 20 40 20 >. @ </tr>. @
2800: 3c 74 72 3e 0a 20 20 40 20 20 20 3c 74 64 20 61 <tr>. @ <td a
2810: 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c lign="right" val
2820: 69 67 6e 3d 22 74 6f 70 22 3e 43 61 70 61 62 69 ign="top">Capabi
2830: 6c 69 74 69 65 73 3a 3c 2f 74 64 3e 0a 20 20 40 lities:</td>. @
2840: 20 20 20 3c 74 64 3e 0a 20 20 69 66 28 20 67 2e <td>. if( g.
2850: 6f 6b 53 65 74 75 70 20 29 7b 0a 20 20 20 20 40 okSetup ){. @
2860: 20 20 20 20 20 3c 69 6e 70 75 74 20 74 79 70 65 <input type
2870: 3d 22 63 68 65 63 6b 62 6f 78 22 20 6e 61 6d 65 ="checkbox" name
2880: 3d 22 61 73 22 25 73 28 6f 61 73 29 3e 53 65 74 ="as"%s(oas)>Set
2890: 75 70 3c 2f 69 6e 70 75 74 3e 3c 62 72 3e 0a 20 up</input><br>.
28a0: 20 7d 0a 20 20 40 20 20 20 20 20 3c 69 6e 70 75 }. @ <inpu
28b0: 74 20 74 79 70 65 3d 22 63 68 65 63 6b 62 6f 78 t type="checkbox
28c0: 22 20 6e 61 6d 65 3d 22 61 61 22 25 73 28 6f 61 " name="aa"%s(oa
28d0: 61 29 3e 41 64 6d 69 6e 3c 2f 69 6e 70 75 74 3e a)>Admin</input>
28e0: 3c 62 72 3e 0a 20 20 40 20 20 20 20 20 3c 69 6e <br>. @ <in
28f0: 70 75 74 20 74 79 70 65 3d 22 63 68 65 63 6b 62 put type="checkb
2900: 6f 78 22 20 6e 61 6d 65 3d 22 61 64 22 25 73 28 ox" name="ad"%s(
2910: 6f 61 64 29 3e 44 65 6c 65 74 65 3c 2f 69 6e 70 oad)>Delete</inp
2920: 75 74 3e 3c 62 72 3e 0a 20 20 40 20 20 20 20 20 ut><br>. @
2930: 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 63 68 65 <input type="che
2940: 63 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 61 65 22 ckbox" name="ae"
2950: 25 73 28 6f 61 64 29 3e 45 6d 61 69 6c 3c 2f 69 %s(oad)>Email</i
2960: 6e 70 75 74 3e 3c 62 72 3e 0a 20 20 40 20 20 20 nput><br>. @
2970: 20 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 63 <input type="c
2980: 68 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 61 heckbox" name="a
2990: 70 22 25 73 28 6f 61 70 29 3e 50 61 73 73 77 6f p"%s(oap)>Passwo
29a0: 72 64 3c 2f 69 6e 70 75 74 3e 3c 62 72 3e 0a 20 rd</input><br>.
29b0: 20 40 20 20 20 20 20 3c 69 6e 70 75 74 20 74 79 @ <input ty
29c0: 70 65 3d 22 63 68 65 63 6b 62 6f 78 22 20 6e 61 pe="checkbox" na
29d0: 6d 65 3d 22 61 71 22 25 73 28 6f 61 71 29 3e 51 me="aq"%s(oaq)>Q
29e0: 75 65 72 79 3c 2f 69 6e 70 75 74 3e 3c 62 72 3e uery</input><br>
29f0: 0a 20 20 40 20 20 20 20 20 3c 69 6e 70 75 74 20 . @ <input
2a00: 74 79 70 65 3d 22 63 68 65 63 6b 62 6f 78 22 20 type="checkbox"
2a10: 6e 61 6d 65 3d 22 61 69 22 25 73 28 6f 61 69 29 name="ai"%s(oai)
2a20: 3e 43 68 65 63 6b 2d 49 6e 3c 2f 69 6e 70 75 74 >Check-In</input
2a30: 3e 3c 62 72 3e 0a 20 20 40 20 20 20 20 20 3c 69 ><br>. @ <i
2a40: 6e 70 75 74 20 74 79 70 65 3d 22 63 68 65 63 6b nput type="check
2a50: 62 6f 78 22 20 6e 61 6d 65 3d 22 61 6f 22 25 73 box" name="ao"%s
2a60: 28 6f 61 6f 29 3e 43 68 65 63 6b 2d 4f 75 74 3c (oao)>Check-Out<
2a70: 2f 69 6e 70 75 74 3e 3c 62 72 3e 0a 20 20 40 20 /input><br>. @
2a80: 20 20 20 20 3c 69 6e 70 75 74 20 74 79 70 65 3d <input type=
2a90: 22 63 68 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d "checkbox" name=
2aa0: 22 61 68 22 25 73 28 6f 61 68 29 3e 48 69 73 74 "ah"%s(oah)>Hist
2ab0: 6f 72 79 3c 2f 69 6e 70 75 74 3e 3c 62 72 3e 0a ory</input><br>.
2ac0: 20 20 40 20 20 20 20 20 3c 69 6e 70 75 74 20 74 @ <input t
2ad0: 79 70 65 3d 22 63 68 65 63 6b 62 6f 78 22 20 6e ype="checkbox" n
2ae0: 61 6d 65 3d 22 61 67 22 25 73 28 6f 61 67 29 3e ame="ag"%s(oag)>
2af0: 43 6c 6f 6e 65 3c 2f 69 6e 70 75 74 3e 3c 62 72 Clone</input><br
2b00: 3e 0a 20 20 40 20 20 20 20 20 3c 69 6e 70 75 74 >. @ <input
2b10: 20 74 79 70 65 3d 22 63 68 65 63 6b 62 6f 78 22 type="checkbox"
2b20: 20 6e 61 6d 65 3d 22 61 6a 22 25 73 28 6f 61 6a name="aj"%s(oaj
2b30: 29 3e 52 65 61 64 20 57 69 6b 69 3c 2f 69 6e 70 )>Read Wiki</inp
2b40: 75 74 3e 3c 62 72 3e 0a 20 20 40 20 20 20 20 20 ut><br>. @
2b50: 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 63 68 65 <input type="che
2b60: 63 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 61 66 22 ckbox" name="af"
2b70: 25 73 28 6f 61 66 29 3e 4e 65 77 20 57 69 6b 69 %s(oaf)>New Wiki
2b80: 3c 2f 69 6e 70 75 74 3e 3c 62 72 3e 0a 20 20 40 </input><br>. @
2b90: 20 20 20 20 20 3c 69 6e 70 75 74 20 74 79 70 65 <input type
2ba0: 3d 22 63 68 65 63 6b 62 6f 78 22 20 6e 61 6d 65 ="checkbox" name
2bb0: 3d 22 61 6d 22 25 73 28 6f 61 6d 29 3e 41 70 70 ="am"%s(oam)>App
2bc0: 65 6e 64 20 57 69 6b 69 3c 2f 69 6e 70 75 74 3e end Wiki</input>
2bd0: 3c 62 72 3e 0a 20 20 40 20 20 20 20 20 3c 69 6e <br>. @ <in
2be0: 70 75 74 20 74 79 70 65 3d 22 63 68 65 63 6b 62 put type="checkb
2bf0: 6f 78 22 20 6e 61 6d 65 3d 22 61 6b 22 25 73 28 ox" name="ak"%s(
2c00: 6f 61 6b 29 3e 57 72 69 74 65 20 57 69 6b 69 3c oak)>Write Wiki<
2c10: 2f 69 6e 70 75 74 3e 3c 62 72 3e 0a 20 20 40 20 /input><br>. @
2c20: 20 20 20 20 3c 69 6e 70 75 74 20 74 79 70 65 3d <input type=
2c30: 22 63 68 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d "checkbox" name=
2c40: 22 61 72 22 25 73 28 6f 61 72 29 3e 52 65 61 64 "ar"%s(oar)>Read
2c50: 20 54 6b 74 3c 2f 69 6e 70 75 74 3e 3c 62 72 3e Tkt</input><br>
2c60: 0a 20 20 40 20 20 20 20 20 3c 69 6e 70 75 74 20 . @ <input
2c70: 74 79 70 65 3d 22 63 68 65 63 6b 62 6f 78 22 20 type="checkbox"
2c80: 6e 61 6d 65 3d 22 61 6e 22 25 73 28 6f 61 6e 29 name="an"%s(oan)
2c90: 3e 4e 65 77 20 54 6b 74 3c 2f 69 6e 70 75 74 3e >New Tkt</input>
2ca0: 3c 62 72 3e 0a 20 20 40 20 20 20 20 20 3c 69 6e <br>. @ <in
2cb0: 70 75 74 20 74 79 70 65 3d 22 63 68 65 63 6b 62 put type="checkb
2cc0: 6f 78 22 20 6e 61 6d 65 3d 22 61 63 22 25 73 28 ox" name="ac"%s(
2cd0: 6f 61 63 29 3e 41 70 70 65 6e 64 20 54 6b 74 3c oac)>Append Tkt<
2ce0: 2f 69 6e 70 75 74 3e 3c 62 72 3e 0a 20 20 40 20 /input><br>. @
2cf0: 20 20 20 20 3c 69 6e 70 75 74 20 74 79 70 65 3d <input type=
2d00: 22 63 68 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d "checkbox" name=
2d10: 22 61 77 22 25 73 28 6f 61 77 29 3e 57 72 69 74 "aw"%s(oaw)>Writ
2d20: 65 20 54 6b 74 3c 2f 69 6e 70 75 74 3e 0a 20 20 e Tkt</input>.
2d30: 40 20 20 20 3c 2f 74 64 3e 0a 20 20 40 20 3c 2f @ </td>. @ </
2d40: 74 72 3e 0a 20 20 40 20 3c 74 72 3e 0a 20 20 40 tr>. @ <tr>. @
2d50: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 <td align="ri
2d60: 67 68 74 22 3e 50 61 73 73 77 6f 72 64 3a 3c 2f ght">Password:</
2d70: 74 64 3e 0a 20 20 40 20 20 20 3c 74 64 3e 3c 69 td>. @ <td><i
2d80: 6e 70 75 74 20 74 79 70 65 3d 22 70 61 73 73 77 nput type="passw
2d90: 6f 72 64 22 20 6e 61 6d 65 3d 22 70 77 22 20 76 ord" name="pw" v
2da0: 61 6c 75 65 3d 22 22 3e 3c 2f 74 64 3e 0a 20 20 alue=""></td>.
2db0: 40 20 3c 2f 74 72 3e 0a 20 20 69 66 28 20 21 68 @ </tr>. if( !h
2dc0: 69 67 68 65 72 55 73 65 72 20 29 7b 0a 20 20 20 igherUser ){.
2dd0: 20 40 20 3c 74 72 3e 0a 20 20 20 20 40 20 20 20 @ <tr>. @
2de0: 3c 74 64 3e 26 6e 62 73 70 3c 2f 74 64 3e 0a 20 <td> </td>.
2df0: 20 20 20 40 20 20 20 3c 74 64 3e 3c 69 6e 70 75 @ <td><inpu
2e00: 74 20 74 79 70 65 3d 22 73 75 62 6d 69 74 22 20 t type="submit"
2e10: 6e 61 6d 65 3d 22 73 75 62 6d 69 74 22 20 76 61 name="submit" va
2e20: 6c 75 65 3d 22 41 70 70 6c 79 20 43 68 61 6e 67 lue="Apply Chang
2e30: 65 73 22 3e 0a 20 20 20 20 40 20 3c 2f 74 72 3e es">. @ </tr>
2e40: 0a 20 20 7d 0a 20 20 40 20 3c 2f 74 61 62 6c 65 . }. @ </table
2e50: 3e 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62 ></td></tr></tab
2e60: 6c 65 3e 0a 20 20 40 20 3c 70 3e 3c 62 3e 4e 6f le>. @ <p><b>No
2e70: 74 65 73 3a 3c 2f 62 3e 3c 2f 70 3e 0a 20 20 40 tes:</b></p>. @
2e80: 20 3c 6f 6c 3e 0a 20 20 69 66 28 20 68 69 67 68 <ol>. if( high
2e90: 65 72 55 73 65 72 20 29 7b 0a 20 20 20 20 40 20 erUser ){. @
2ea0: 3c 6c 69 3e 3c 70 3e 0a 20 20 20 20 40 20 55 73 <li><p>. @ Us
2eb0: 65 72 20 25 68 28 7a 49 64 29 20 68 61 73 20 53 er %h(zId) has S
2ec0: 65 74 75 70 20 70 72 69 76 69 6c 65 67 65 73 20 etup privileges
2ed0: 61 6e 64 20 79 6f 75 20 6f 6e 6c 79 20 68 61 76 and you only hav
2ee0: 65 20 41 64 6d 69 6e 20 70 72 69 76 69 6c 65 67 e Admin privileg
2ef0: 65 73 0a 20 20 20 20 40 20 73 6f 20 79 6f 75 20 es. @ so you
2f00: 61 72 65 20 6e 6f 74 20 70 65 72 6d 69 74 74 65 are not permitte
2f10: 64 20 74 6f 20 6d 61 6b 65 20 63 68 61 6e 67 65 d to make change
2f20: 73 20 74 6f 20 25 68 28 7a 49 64 29 2e 0a 20 20 s to %h(zId)..
2f30: 20 20 40 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 20 20 @ </p></li>.
2f40: 20 20 40 0a 20 20 7d 0a 20 20 40 0a 20 20 40 20 @. }. @. @
2f50: 3c 6c 69 3e 3c 70 3e 0a 20 20 40 20 54 68 65 20 <li><p>. @ The
2f60: 3c 62 3e 44 65 6c 65 74 65 3c 2f 62 3e 20 70 72 <b>Delete</b> pr
2f70: 69 76 69 6c 65 67 65 20 67 69 76 65 20 74 68 65 ivilege give the
2f80: 20 75 73 65 72 20 74 68 65 20 61 62 69 6c 69 74 user the abilit
2f90: 79 20 74 6f 20 65 72 61 73 65 0a 20 20 40 20 77 y to erase. @ w
2fa0: 69 6b 69 2c 20 74 69 63 6b 65 74 73 2c 20 61 6e iki, tickets, an
2fb0: 64 20 61 74 74 74 61 63 68 6d 65 6e 74 73 20 74 d atttachments t
2fc0: 68 61 74 20 68 61 76 65 20 62 65 65 6e 20 61 64 hat have been ad
2fd0: 64 65 64 20 62 79 20 61 6e 6f 6e 79 6d 6f 75 73 ded by anonymous
2fe0: 0a 20 20 40 20 75 73 65 72 73 2e 20 20 54 68 69 . @ users. Thi
2ff0: 73 20 63 61 70 61 62 69 6c 69 74 79 20 69 73 20 s capability is
3000: 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 64 65 6c intended for del
3010: 65 74 69 6f 6e 20 6f 66 20 73 70 61 6d 2e 20 20 etion of spam.
3020: 54 68 65 0a 20 20 40 20 64 65 6c 65 74 65 20 63 The. @ delete c
3030: 61 70 61 62 69 6c 69 74 79 20 69 73 20 6f 6e 6c apability is onl
3040: 79 20 69 6e 20 65 66 66 65 63 74 20 66 6f 72 20 y in effect for
3050: 32 34 20 68 6f 75 72 73 20 61 66 74 65 72 20 74 24 hours after t
3060: 68 65 20 69 74 65 6d 0a 20 20 40 20 69 73 20 66 he item. @ is f
3070: 69 72 73 74 20 70 6f 73 74 65 64 2e 20 20 54 68 irst posted. Th
3080: 65 20 53 65 74 75 70 20 75 73 65 72 20 63 61 6e e Setup user can
3090: 20 64 65 6c 65 74 65 20 61 6e 79 74 68 69 6e 67 delete anything
30a0: 20 61 74 20 61 6e 79 20 74 69 6d 65 2e 0a 20 20 at any time..
30b0: 40 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 20 20 40 0a @ </p></li>. @.
30c0: 20 20 40 20 3c 6c 69 3e 3c 70 3e 0a 20 20 40 20 @ <li><p>. @
30d0: 54 68 65 20 3c 62 3e 51 75 65 72 79 3c 2f 62 3e The <b>Query</b>
30e0: 20 70 72 69 76 69 6c 65 67 65 20 61 6c 6c 6f 77 privilege allow
30f0: 73 20 74 68 65 20 75 73 65 72 20 74 6f 20 63 72 s the user to cr
3100: 65 61 74 65 20 6f 72 20 65 64 69 74 0a 20 20 40 eate or edit. @
3110: 20 72 65 70 6f 72 74 20 66 6f 72 6d 61 74 73 20 report formats
3120: 62 79 20 73 70 65 63 69 66 79 69 6e 67 20 61 70 by specifying ap
3130: 70 72 6f 70 72 69 61 74 65 20 53 51 4c 2e 20 20 propriate SQL.
3140: 55 73 65 72 73 20 63 61 6e 20 72 75 6e 0a 20 20 Users can run.
3150: 40 20 65 78 69 73 74 69 6e 67 20 72 65 70 6f 72 @ existing repor
3160: 74 73 20 77 69 74 68 6f 75 74 20 74 68 65 20 51 ts without the Q
3170: 75 65 72 79 20 70 72 69 76 69 6c 65 67 65 2e 0a uery privilege..
3180: 20 20 40 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 20 20 @ </p></li>.
3190: 40 0a 20 20 40 20 3c 6c 69 3e 3c 70 3e 0a 20 20 @. @ <li><p>.
31a0: 40 20 41 6e 20 3c 62 3e 41 64 6d 69 6e 3c 2f 62 @ An <b>Admin</b
31b0: 3e 20 75 73 65 72 20 63 61 6e 20 61 64 64 20 6f > user can add o
31c0: 74 68 65 72 20 75 73 65 72 73 2c 20 63 72 65 61 ther users, crea
31d0: 74 65 20 6e 65 77 20 74 69 63 6b 65 74 20 72 65 te new ticket re
31e0: 70 6f 72 74 0a 20 20 40 20 66 6f 72 6d 61 74 73 port. @ formats
31f0: 2c 20 61 6e 64 20 63 68 61 6e 67 65 20 73 79 73 , and change sys
3200: 74 65 6d 20 64 65 66 61 75 6c 74 73 2e 20 20 42 tem defaults. B
3210: 75 74 20 6f 6e 6c 79 20 74 68 65 20 3c 62 3e 53 ut only the <b>S
3220: 65 74 75 70 3c 2f 62 3e 20 75 73 65 72 0a 20 20 etup</b> user.
3230: 40 20 69 73 20 61 62 6c 65 20 74 6f 20 63 68 61 @ is able to cha
3240: 6e 67 65 20 74 68 65 20 72 65 70 6f 73 69 74 6f nge the reposito
3250: 72 79 20 74 6f 0a 20 20 40 20 77 68 69 63 68 20 ry to. @ which
3260: 74 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 this program is
3270: 6c 69 6e 6b 65 64 2e 0a 20 20 40 20 3c 2f 70 3e linked.. @ </p>
3280: 3c 2f 6c 69 3e 0a 20 20 40 0a 20 20 40 20 3c 6c </li>. @. @ <l
3290: 69 3e 3c 70 3e 0a 20 20 40 20 54 68 65 20 3c 62 i><p>. @ The <b
32a0: 3e 48 69 73 74 6f 72 79 3c 2f 62 3e 20 70 72 69 >History</b> pri
32b0: 76 69 6c 65 67 65 20 61 6c 6c 6f 77 73 20 61 20 vilege allows a
32c0: 75 73 65 72 20 74 6f 20 73 65 65 20 61 20 74 69 user to see a ti
32d0: 6d 65 6c 69 6e 65 0a 20 20 40 20 77 69 74 68 20 meline. @ with
32e0: 68 79 70 65 72 6c 69 6e 6b 73 20 74 6f 20 76 65 hyperlinks to ve
32f0: 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f rsion informatio
3300: 6e 2c 20 74 6f 20 64 6f 77 6e 6c 6f 61 64 20 5a n, to download Z
3310: 49 50 20 61 72 63 68 69 76 65 73 0a 20 20 40 20 IP archives. @
3320: 6f 66 20 69 6e 64 69 76 69 64 75 61 6c 20 76 65 of individual ve
3330: 72 73 69 6f 6e 73 2e 0a 20 20 40 20 3c 2f 70 3e rsions.. @ </p>
3340: 3c 2f 6c 69 3e 0a 20 20 40 0a 20 20 40 20 3c 6c </li>. @. @ <l
3350: 69 3e 3c 70 3e 0a 20 20 40 20 4e 6f 20 6c 6f 67 i><p>. @ No log
3360: 69 6e 20 69 73 20 72 65 71 75 69 72 65 64 20 66 in is required f
3370: 6f 72 20 75 73 65 72 20 22 3c 62 3e 6e 6f 62 6f or user "<b>nobo
3380: 64 79 3c 2f 62 3e 22 2e 20 20 54 68 65 20 63 61 dy</b>". The ca
3390: 70 61 62 69 6c 69 74 69 65 73 0a 20 20 40 20 6f pabilities. @ o
33a0: 66 20 74 68 69 73 20 75 73 65 72 20 61 72 65 20 f this user are
33b0: 61 76 61 69 6c 61 62 6c 65 20 74 6f 20 61 6e 79 available to any
33c0: 6f 6e 65 20 77 69 74 68 6f 75 74 20 73 75 70 70 one without supp
33d0: 6c 79 69 6e 67 20 61 20 75 73 65 72 6e 61 6d 65 lying a username
33e0: 20 6f 72 0a 20 20 40 20 70 61 73 73 77 6f 72 64 or. @ password
33f0: 2e 20 20 54 6f 20 64 69 73 61 62 6c 65 20 6e 6f . To disable no
3400: 62 6f 64 79 20 61 63 63 65 73 73 2c 20 6d 61 6b body access, mak
3410: 65 20 73 75 72 65 20 74 68 65 72 65 20 69 73 20 e sure there is
3420: 6e 6f 20 75 73 65 72 0a 20 20 40 20 77 69 74 68 no user. @ with
3430: 20 61 6e 20 49 44 20 6f 66 20 3c 62 3e 6e 6f 62 an ID of <b>nob
3440: 6f 64 79 3c 2f 62 3e 20 6f 72 20 74 68 61 74 20 ody</b> or that
3450: 74 68 65 20 6e 6f 62 6f 64 79 20 75 73 65 72 20 the nobody user
3460: 68 61 73 20 6e 6f 0a 20 20 40 20 63 61 70 61 62 has no. @ capab
3470: 69 6c 69 74 69 65 73 20 65 6e 61 62 6c 65 64 2e ilities enabled.
3480: 20 20 54 68 65 20 70 61 73 73 77 6f 72 64 20 66 The password f
3490: 6f 72 20 6e 6f 62 6f 64 79 20 69 73 20 69 67 6e or nobody is ign
34a0: 6f 72 65 2e 20 20 54 6f 0a 20 20 40 20 61 76 6f ore. To. @ avo
34b0: 69 64 20 70 72 6f 62 6c 65 6d 73 20 77 69 74 68 id problems with
34c0: 20 73 70 69 64 65 72 73 20 6f 76 65 72 6c 6f 61 spiders overloa
34d0: 64 69 6e 67 20 74 68 65 20 73 65 72 76 65 72 2c ding the server,
34e0: 20 69 74 20 69 73 20 73 75 67 67 65 73 74 65 64 it is suggested
34f0: 0a 20 20 40 20 74 68 61 74 20 74 68 65 20 27 68 . @ that the 'h
3500: 27 20 28 48 69 73 74 6f 72 79 29 20 63 61 70 61 ' (History) capa
3510: 62 69 6c 69 74 79 20 62 65 20 74 75 72 6e 65 64 bility be turned
3520: 20 6f 66 66 20 66 6f 72 20 75 73 65 72 20 6e 6f off for user no
3530: 62 6f 64 79 2e 0a 20 20 40 20 3c 2f 70 3e 3c 2f body.. @ </p></
3540: 6c 69 3e 0a 20 20 40 0a 20 20 40 20 3c 6c 69 3e li>. @. @ <li>
3550: 3c 70 3e 0a 20 20 40 20 4c 6f 67 69 6e 20 69 73 <p>. @ Login is
3560: 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 75 73 required for us
3570: 65 72 20 22 3c 62 3e 61 6e 6f 6e 79 6d 6f 75 73 er "<b>anonymous
3580: 3c 2f 62 3e 22 20 62 75 74 20 74 68 65 20 70 61 </b>" but the pa
3590: 73 73 77 6f 72 64 0a 20 20 40 20 69 73 20 64 69 ssword. @ is di
35a0: 73 70 6c 61 79 65 64 20 6f 6e 20 74 68 65 20 6c splayed on the l
35b0: 6f 67 69 6e 20 73 63 72 65 65 6e 20 62 65 73 69 ogin screen besi
35c0: 64 65 20 74 68 65 20 70 61 73 73 77 6f 72 64 20 de the password
35d0: 65 6e 74 72 79 20 62 6f 78 0a 20 20 40 20 73 6f entry box. @ so
35e0: 20 61 6e 79 62 6f 64 79 20 77 68 6f 20 63 61 6e anybody who can
35f0: 20 72 65 61 64 20 73 68 6f 75 6c 64 20 62 65 20 read should be
3600: 61 62 6c 65 20 74 6f 20 6c 6f 67 69 6e 20 61 73 able to login as
3610: 20 61 6e 6f 6e 79 6d 6f 75 73 2e 0a 20 20 40 20 anonymous.. @
3620: 4f 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e On the other han
3630: 64 2c 20 73 70 69 64 65 72 73 20 61 6e 64 20 77 d, spiders and w
3640: 65 62 2d 63 72 61 77 6c 65 72 73 20 77 69 6c 6c eb-crawlers will
3650: 20 74 79 70 69 63 61 6c 6c 79 20 6e 6f 74 0a 20 typically not.
3660: 20 40 20 62 65 20 61 62 6c 65 20 74 6f 20 6c 6f @ be able to lo
3670: 67 69 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61 gin. Set the ca
3680: 70 61 62 69 6c 69 74 69 65 73 20 6f 66 20 74 68 pabilities of th
3690: 65 20 61 6e 6f 6e 79 6d 6f 75 73 20 75 73 65 72 e anonymous user
36a0: 0a 20 20 40 20 74 6f 20 74 68 69 6e 67 73 20 74 . @ to things t
36b0: 68 61 74 20 79 6f 75 20 77 61 6e 74 20 61 6e 79 hat you want any
36c0: 20 68 75 6d 61 6e 20 74 6f 20 62 65 20 61 62 6c human to be abl
36d0: 65 20 74 6f 20 64 6f 2c 20 62 75 74 20 6e 6f 20 e to do, but no
36e0: 61 6e 79 0a 20 20 40 20 73 70 69 64 65 72 2e 0a any. @ spider..
36f0: 20 20 40 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 20 20 @ </p></li>.
3700: 40 20 3c 2f 66 6f 72 6d 3e 0a 20 20 73 74 79 6c @ </form>. styl
3710: 65 5f 66 6f 6f 74 65 72 28 29 3b 0a 7d 0a 0a 0a e_footer();.}...
3720: 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20 61 /*.** Generate a
3730: 20 63 68 65 63 6b 62 6f 78 20 66 6f 72 20 61 6e checkbox for an
3740: 20 61 74 74 72 69 62 75 74 65 2e 0a 2a 2f 0a 73 attribute..*/.s
3750: 74 61 74 69 63 20 76 6f 69 64 20 6f 6e 6f 66 66 tatic void onoff
3760: 5f 61 74 74 72 69 62 75 74 65 28 0a 20 20 63 6f _attribute(. co
3770: 6e 73 74 20 63 68 61 72 20 2a 7a 4c 61 62 65 6c nst char *zLabel
3780: 2c 20 20 20 2f 2a 20 54 68 65 20 74 65 78 74 20 , /* The text
3790: 6c 61 62 65 6c 20 6f 6e 20 74 68 65 20 63 68 65 label on the che
37a0: 63 6b 62 6f 78 20 2a 2f 0a 20 20 63 6f 6e 73 74 ckbox */. const
37b0: 20 63 68 61 72 20 2a 7a 56 61 72 2c 20 20 20 20 char *zVar,
37c0: 20 2f 2a 20 54 68 65 20 63 6f 72 72 65 73 70 6f /* The correspo
37d0: 6e 64 69 6e 67 20 72 6f 77 20 69 6e 20 74 68 65 nding row in the
37e0: 20 56 41 52 20 74 61 62 6c 65 20 2a 2f 0a 20 20 VAR table */.
37f0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 51 50 61 const char *zQPa
3800: 72 6d 2c 20 20 20 2f 2a 20 54 68 65 20 71 75 65 rm, /* The que
3810: 72 79 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a ry parameter */.
3820: 20 20 69 6e 74 20 64 66 6c 74 56 61 6c 20 20 20 int dfltVal
3830: 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 /* Defau
3840: 6c 74 20 76 61 6c 75 65 20 69 66 20 56 41 52 20 lt value if VAR
3850: 74 61 62 6c 65 20 65 6e 74 72 79 20 64 6f 65 73 table entry does
3860: 20 6e 6f 74 20 65 78 69 73 74 20 2a 2f 0a 29 7b not exist */.){
3870: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a . const char *z
3880: 56 61 6c 20 3d 20 64 62 5f 67 65 74 28 7a 56 61 Val = db_get(zVa
3890: 72 2c 20 30 29 3b 0a 20 20 63 6f 6e 73 74 20 63 r, 0);. const c
38a0: 68 61 72 20 2a 7a 51 20 3d 20 50 28 7a 51 50 61 har *zQ = P(zQPa
38b0: 72 6d 29 3b 0a 20 20 69 6e 74 20 69 56 61 6c 3b rm);. int iVal;
38c0: 0a 20 20 69 66 28 20 7a 56 61 6c 20 29 7b 0a 20 . if( zVal ){.
38d0: 20 20 20 69 56 61 6c 20 3d 20 61 74 6f 69 28 7a iVal = atoi(z
38e0: 56 61 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 Val);. }else{.
38f0: 20 20 20 69 56 61 6c 20 3d 20 64 66 6c 74 56 61 iVal = dfltVa
3900: 6c 3b 0a 20 20 7d 0a 20 20 69 66 28 20 7a 51 3d l;. }. if( zQ=
3910: 3d 30 20 26 26 20 50 28 22 73 75 62 6d 69 74 22 =0 && P("submit"
3920: 29 20 29 7b 0a 20 20 20 20 7a 51 20 3d 20 22 6f ) ){. zQ = "o
3930: 66 66 22 3b 0a 20 20 7d 0a 20 20 69 66 28 20 7a ff";. }. if( z
3940: 51 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 51 20 Q ){. int iQ
3950: 3d 20 73 74 72 63 6d 70 28 7a 51 2c 22 6f 6e 22 = strcmp(zQ,"on"
3960: 29 3d 3d 30 20 7c 7c 20 61 74 6f 69 28 7a 51 29 )==0 || atoi(zQ)
3970: 3b 0a 20 20 20 20 69 66 28 20 69 51 21 3d 69 56 ;. if( iQ!=iV
3980: 61 6c 20 29 7b 0a 20 20 20 20 20 20 64 62 5f 73 al ){. db_s
3990: 65 74 28 7a 56 61 72 2c 20 69 51 20 3f 20 22 31 et(zVar, iQ ? "1
39a0: 22 20 3a 20 22 30 22 2c 20 30 29 3b 0a 20 20 20 " : "0", 0);.
39b0: 20 20 20 69 56 61 6c 20 3d 20 69 51 3b 0a 20 20 iVal = iQ;.
39c0: 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 69 56 }. }. if( iV
39d0: 61 6c 20 29 7b 0a 20 20 20 20 40 20 3c 69 6e 70 al ){. @ <inp
39e0: 75 74 20 74 79 70 65 3d 22 63 68 65 63 6b 62 6f ut type="checkbo
39f0: 78 22 20 6e 61 6d 65 3d 22 25 73 28 7a 51 50 61 x" name="%s(zQPa
3a00: 72 6d 29 22 20 63 68 65 63 6b 65 64 3e 25 73 28 rm)" checked>%s(
3a10: 7a 4c 61 62 65 6c 29 3c 2f 69 6e 70 75 74 3e 0a zLabel)</input>.
3a20: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 40 20 3c }else{. @ <
3a30: 69 6e 70 75 74 20 74 79 70 65 3d 22 63 68 65 63 input type="chec
3a40: 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 25 73 28 7a kbox" name="%s(z
3a50: 51 50 61 72 6d 29 22 3e 25 73 28 7a 4c 61 62 65 QParm)">%s(zLabe
3a60: 6c 29 3c 2f 69 6e 70 75 74 3e 0a 20 20 7d 0a 7d l)</input>. }.}
3a70: 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65 ../*.** Generate
3a80: 20 61 6e 20 65 6e 74 72 79 20 62 6f 78 20 66 6f an entry box fo
3a90: 72 20 61 6e 20 61 74 74 72 69 62 75 74 65 2e 0a r an attribute..
3aa0: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 65 */.static void e
3ab0: 6e 74 72 79 5f 61 74 74 72 69 62 75 74 65 28 0a ntry_attribute(.
3ac0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c const char *zL
3ad0: 61 62 65 6c 2c 20 20 20 2f 2a 20 54 68 65 20 74 abel, /* The t
3ae0: 65 78 74 20 6c 61 62 65 6c 20 6f 6e 20 74 68 65 ext label on the
3af0: 20 65 6e 74 72 79 20 62 6f 78 20 2a 2f 0a 20 20 entry box */.
3b00: 69 6e 74 20 77 69 64 74 68 2c 20 20 20 20 20 20 int width,
3b10: 20 20 20 20 20 20 2f 2a 20 57 69 64 74 68 20 6f /* Width o
3b20: 66 20 74 68 65 20 65 6e 74 72 79 20 62 6f 78 20 f the entry box
3b30: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 */. const char
3b40: 2a 7a 56 61 72 2c 20 20 20 20 20 2f 2a 20 54 68 *zVar, /* Th
3b50: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 e corresponding
3b60: 72 6f 77 20 69 6e 20 74 68 65 20 56 41 52 20 74 row in the VAR t
3b70: 61 62 6c 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 able */. const
3b80: 63 68 61 72 20 2a 7a 51 50 61 72 6d 2c 20 20 20 char *zQParm,
3b90: 2f 2a 20 54 68 65 20 71 75 65 72 79 20 70 61 72 /* The query par
3ba0: 61 6d 65 74 65 72 20 2a 2f 0a 20 20 63 68 61 72 ameter */. char
3bb0: 20 2a 7a 44 66 6c 74 20 20 20 20 20 2f 2a 20 44 *zDflt /* D
3bc0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69 66 20 efault value if
3bd0: 56 41 52 20 74 61 62 6c 65 20 65 6e 74 72 79 20 VAR table entry
3be0: 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20 2a does not exist *
3bf0: 2f 0a 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 /.){. const cha
3c00: 72 20 2a 7a 56 61 6c 20 3d 20 64 62 5f 67 65 74 r *zVal = db_get
3c10: 28 7a 56 61 72 2c 20 7a 44 66 6c 74 29 3b 0a 20 (zVar, zDflt);.
3c20: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 51 20 const char *zQ
3c30: 3d 20 50 28 7a 51 50 61 72 6d 29 3b 0a 20 20 69 = P(zQParm);. i
3c40: 66 28 20 7a 51 20 26 26 20 73 74 72 63 6d 70 28 f( zQ && strcmp(
3c50: 7a 51 2c 7a 56 61 6c 29 21 3d 30 20 29 7b 0a 20 zQ,zVal)!=0 ){.
3c60: 20 20 20 64 62 5f 73 65 74 28 7a 56 61 72 2c 20 db_set(zVar,
3c70: 7a 51 2c 20 30 29 3b 0a 20 20 20 20 7a 56 61 6c zQ, 0);. zVal
3c80: 20 3d 20 7a 51 3b 0a 20 20 7d 0a 20 20 40 20 3c = zQ;. }. @ <
3c90: 69 6e 70 75 74 20 74 79 70 65 3d 22 74 65 78 74 input type="text
3ca0: 22 20 6e 61 6d 65 3d 22 25 73 28 7a 51 50 61 72 " name="%s(zQPar
3cb0: 6d 29 22 20 76 61 6c 75 65 3d 22 25 68 28 7a 56 m)" value="%h(zV
3cc0: 61 6c 29 22 20 73 69 7a 65 3d 22 25 64 28 77 69 al)" size="%d(wi
3cd0: 64 74 68 29 22 3e 0a 20 20 40 20 25 73 28 7a 4c dth)">. @ %s(zL
3ce0: 61 62 65 6c 29 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 abel).}../*.** G
3cf0: 65 6e 65 72 61 74 65 20 61 20 74 65 78 74 20 62 enerate a text b
3d00: 6f 78 20 66 6f 72 20 61 6e 20 61 74 74 72 69 62 ox for an attrib
3d10: 75 74 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 ute..*/.static v
3d20: 6f 69 64 20 74 65 78 74 61 72 65 61 5f 61 74 74 oid textarea_att
3d30: 72 69 62 75 74 65 28 0a 20 20 63 6f 6e 73 74 20 ribute(. const
3d40: 63 68 61 72 20 2a 7a 4c 61 62 65 6c 2c 20 20 20 char *zLabel,
3d50: 2f 2a 20 54 68 65 20 74 65 78 74 20 6c 61 62 65 /* The text labe
3d60: 6c 20 6f 6e 20 74 68 65 20 74 65 78 74 61 72 65 l on the textare
3d70: 61 20 2a 2f 0a 20 20 69 6e 74 20 72 6f 77 73 2c a */. int rows,
3d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 /*
3d90: 52 6f 77 73 20 69 6e 20 74 68 65 20 74 65 78 74 Rows in the text
3da0: 61 72 65 61 20 2a 2f 0a 20 20 69 6e 74 20 63 6f area */. int co
3db0: 6c 73 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 ls,
3dc0: 2f 2a 20 43 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 /* Columns in th
3dd0: 65 20 74 65 78 74 61 72 65 61 20 2a 2f 0a 20 20 e textarea */.
3de0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 56 61 72 const char *zVar
3df0: 2c 20 20 20 20 20 2f 2a 20 54 68 65 20 63 6f 72 , /* The cor
3e00: 72 65 73 70 6f 6e 64 69 6e 67 20 72 6f 77 20 69 responding row i
3e10: 6e 20 74 68 65 20 56 41 52 20 74 61 62 6c 65 20 n the VAR table
3e20: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 */. const char
3e30: 2a 7a 51 50 61 72 6d 2c 20 20 20 2f 2a 20 54 68 *zQParm, /* Th
3e40: 65 20 71 75 65 72 79 20 70 61 72 61 6d 65 74 65 e query paramete
3e50: 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 66 r */. char *zDf
3e60: 6c 74 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 lt /*
3e70: 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69 66 Default value if
3e80: 20 56 41 52 20 74 61 62 6c 65 20 65 6e 74 72 79 VAR table entry
3e90: 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20 does not exist
3ea0: 2a 2f 0a 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 */.){. const ch
3eb0: 61 72 20 2a 7a 56 61 6c 20 3d 20 64 62 5f 67 65 ar *zVal = db_ge
3ec0: 74 28 7a 56 61 72 2c 20 7a 44 66 6c 74 29 3b 0a t(zVar, zDflt);.
3ed0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 51 const char *zQ
3ee0: 20 3d 20 50 28 7a 51 50 61 72 6d 29 3b 0a 20 20 = P(zQParm);.
3ef0: 69 66 28 20 7a 51 20 26 26 20 73 74 72 63 6d 70 if( zQ && strcmp
3f00: 28 7a 51 2c 7a 56 61 6c 29 21 3d 30 20 29 7b 0a (zQ,zVal)!=0 ){.
3f10: 20 20 20 20 64 62 5f 73 65 74 28 7a 56 61 72 2c db_set(zVar,
3f20: 20 7a 51 2c 20 30 29 3b 0a 20 20 20 20 7a 56 61 zQ, 0);. zVa
3f30: 6c 20 3d 20 7a 51 3b 0a 20 20 7d 0a 20 20 40 20 l = zQ;. }. @
3f40: 3c 74 65 78 74 61 72 65 61 20 6e 61 6d 65 3d 22 <textarea name="
3f50: 25 73 28 7a 51 50 61 72 6d 29 22 20 72 6f 77 73 %s(zQParm)" rows
3f60: 3d 22 25 64 28 72 6f 77 73 29 22 20 63 6f 6c 73 ="%d(rows)" cols
3f70: 3d 22 25 64 28 63 6f 6c 73 29 22 3e 25 68 28 7a ="%d(cols)">%h(z
3f80: 56 61 6c 29 3c 2f 74 65 78 74 61 72 65 61 3e 0a Val)</textarea>.
3f90: 20 20 40 20 25 73 28 7a 4c 61 62 65 6c 29 0a 7d @ %s(zLabel).}
3fa0: 0a 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50 41 47 45 .../*.** WEBPAGE
3fb0: 3a 20 73 65 74 75 70 5f 61 63 63 65 73 73 0a 2a : setup_access.*
3fc0: 2f 0a 76 6f 69 64 20 73 65 74 75 70 5f 61 63 63 /.void setup_acc
3fd0: 65 73 73 28 76 6f 69 64 29 7b 0a 20 20 6c 6f 67 ess(void){. log
3fe0: 69 6e 5f 63 68 65 63 6b 5f 63 72 65 64 65 6e 74 in_check_credent
3ff0: 69 61 6c 73 28 29 3b 0a 20 20 69 66 28 20 21 67 ials();. if( !g
4000: 2e 6f 6b 53 65 74 75 70 20 29 7b 0a 20 20 20 20 .okSetup ){.
4010: 6c 6f 67 69 6e 5f 6e 65 65 64 65 64 28 29 3b 0a login_needed();.
4020: 20 20 7d 0a 0a 20 20 73 74 79 6c 65 5f 68 65 61 }.. style_hea
4030: 64 65 72 28 22 41 63 63 65 73 73 20 43 6f 6e 74 der("Access Cont
4040: 72 6f 6c 20 53 65 74 74 69 6e 67 73 22 29 3b 0a rol Settings");.
4050: 20 20 64 62 5f 62 65 67 69 6e 5f 74 72 61 6e 73 db_begin_trans
4060: 61 63 74 69 6f 6e 28 29 3b 0a 20 20 40 20 3c 66 action();. @ <f
4070: 6f 72 6d 20 61 63 74 69 6f 6e 3d 22 25 73 28 67 orm action="%s(g
4080: 2e 7a 42 61 73 65 55 52 4c 29 2f 73 65 74 75 70 .zBaseURL)/setup
4090: 5f 61 63 63 65 73 73 22 20 6d 65 74 68 6f 64 3d _access" method=
40a0: 22 50 4f 53 54 22 3e 0a 0a 20 20 40 20 3c 68 72 "POST">.. @ <hr
40b0: 3e 0a 20 20 6f 6e 6f 66 66 5f 61 74 74 72 69 62 >. onoff_attrib
40c0: 75 74 65 28 22 52 65 71 75 69 72 65 20 70 61 73 ute("Require pas
40d0: 73 77 6f 72 64 20 66 6f 72 20 6c 6f 63 61 6c 20 sword for local
40e0: 61 63 63 65 73 73 22 2c 0a 20 20 20 20 20 22 6c access",. "l
40f0: 6f 63 61 6c 61 75 74 68 22 2c 20 22 6c 6f 63 61 ocalauth", "loca
4100: 6c 61 75 74 68 22 2c 20 31 29 3b 0a 20 20 40 20 lauth", 1);. @
4110: 3c 70 3e 57 68 65 6e 20 65 6e 61 62 6c 65 64 2c <p>When enabled,
4120: 20 74 68 65 20 70 61 73 73 77 6f 72 64 20 73 69 the password si
4130: 67 6e 2d 69 6e 20 69 73 20 72 65 71 75 69 72 65 gn-in is require
4140: 64 20 66 6f 72 0a 20 20 40 20 77 65 62 20 61 63 d for. @ web ac
4150: 63 65 73 73 20 63 6f 6d 69 6e 67 20 66 72 6f 6d cess coming from
4160: 20 31 32 37 2e 30 2e 30 2e 31 2e 20 20 57 68 65 127.0.0.1. Whe
4170: 6e 20 64 69 73 61 62 6c 65 64 2c 20 77 65 62 20 n disabled, web
4180: 61 63 63 65 73 73 0a 20 20 40 20 66 72 6f 6d 20 access. @ from
4190: 31 32 37 2e 30 2e 30 2e 31 20 69 73 20 61 6c 6c 127.0.0.1 is all
41a0: 6f 77 73 20 77 69 74 68 6f 75 74 20 61 6e 79 20 ows without any
41b0: 6c 6f 67 69 6e 20 2d 20 74 68 65 20 75 73 65 72 login - the user
41c0: 20 69 64 20 69 73 20 73 65 6c 65 63 74 65 64 0a id is selected.
41d0: 20 20 40 20 66 72 6f 6d 20 74 68 65 20 7e 2f 2e @ from the ~/.
41e0: 66 6f 73 73 69 6c 20 64 61 74 61 62 61 73 65 2e fossil database.
41f0: 20 50 61 73 73 77 6f 72 64 20 6c 6f 67 69 6e 20 Password login
4200: 69 73 20 61 6c 77 61 79 73 20 72 65 71 75 69 72 is always requir
4210: 65 64 0a 20 20 40 20 66 6f 72 20 69 6e 63 6f 6d ed. @ for incom
4220: 69 6e 67 20 77 65 62 20 63 6f 6e 6e 65 63 74 69 ing web connecti
4230: 6f 6e 73 20 6f 6e 20 69 6e 74 65 72 6e 65 74 20 ons on internet
4240: 61 64 64 72 65 73 73 65 73 20 6f 74 68 65 72 20 addresses other
4250: 74 68 61 6e 0a 20 20 40 20 31 32 37 2e 30 2e 30 than. @ 127.0.0
4260: 2e 31 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 20 20 .1.</p></li>..
4270: 40 20 3c 68 72 3e 0a 20 20 65 6e 74 72 79 5f 61 @ <hr>. entry_a
4280: 74 74 72 69 62 75 74 65 28 22 4c 6f 67 69 6e 20 ttribute("Login
4290: 65 78 70 69 72 61 74 69 6f 6e 20 74 69 6d 65 22 expiration time"
42a0: 2c 20 36 2c 20 22 63 6f 6f 6b 69 65 2d 65 78 70 , 6, "cookie-exp
42b0: 69 72 65 22 2c 20 22 63 65 78 22 2c 20 22 38 37 ire", "cex", "87
42c0: 36 36 22 29 3b 0a 20 20 40 20 3c 70 3e 54 68 65 66");. @ <p>The
42d0: 20 6e 75 6d 62 65 72 20 6f 66 20 68 6f 75 72 73 number of hours
42e0: 20 66 6f 72 20 77 68 69 63 68 20 61 20 6c 6f 67 for which a log
42f0: 69 6e 20 69 73 20 76 61 6c 69 64 2e 20 20 54 68 in is valid. Th
4300: 69 73 20 6d 75 73 74 20 62 65 20 61 0a 20 20 40 is must be a. @
4310: 20 70 6f 73 69 74 69 76 65 20 6e 75 6d 62 65 72 positive number
4320: 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 69 . The default i
4330: 73 20 38 37 36 30 20 68 6f 75 72 73 20 77 68 69 s 8760 hours whi
4340: 63 68 20 69 73 20 61 70 70 72 6f 78 69 6d 61 74 ch is approximat
4350: 65 6c 79 20 65 71 75 61 6c 0a 20 20 40 20 74 6f ely equal. @ to
4360: 20 61 20 79 65 61 72 2e 3c 2f 70 3e 0a 0a 20 20 a year.</p>..
4370: 40 20 3c 68 72 3e 0a 20 20 6f 6e 6f 66 66 5f 61 @ <hr>. onoff_a
4380: 74 74 72 69 62 75 74 65 28 22 41 6c 6c 6f 77 20 ttribute("Allow
4390: 61 6e 6f 6e 79 6d 6f 75 73 20 73 69 67 6e 75 70 anonymous signup
43a0: 22 2c 20 22 61 6e 6f 6e 2d 73 69 67 6e 75 70 22 ", "anon-signup"
43b0: 2c 20 22 61 73 75 22 2c 20 30 29 3b 0a 20 20 40 , "asu", 0);. @
43c0: 20 3c 70 3e 41 6c 6c 6f 77 20 75 73 65 72 73 20 <p>Allow users
43d0: 74 6f 20 63 72 65 61 74 65 20 74 68 65 69 72 20 to create their
43e0: 6f 77 6e 20 61 63 63 6f 75 6e 74 73 3c 2f 70 3e own accounts</p>
43f0: 0a 0a 20 20 40 20 3c 68 72 3e 0a 20 20 40 20 3c .. @ <hr>. @ <
4400: 70 3e 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 73 p><input type="s
4410: 75 62 6d 69 74 22 20 20 6e 61 6d 65 3d 22 73 75 ubmit" name="su
4420: 62 6d 69 74 22 20 76 61 6c 75 65 3d 22 41 70 70 bmit" value="App
4430: 6c 79 20 43 68 61 6e 67 65 73 22 3e 3c 2f 70 3e ly Changes"></p>
4440: 0a 20 20 40 20 3c 2f 66 6f 72 6d 3e 0a 20 20 64 . @ </form>. d
4450: 62 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 69 6f b_end_transactio
4460: 6e 28 30 29 3b 0a 20 20 73 74 79 6c 65 5f 66 6f n(0);. style_fo
4470: 6f 74 65 72 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a oter();.}../*.**
4480: 20 57 45 42 50 41 47 45 3a 20 73 65 74 75 70 5f WEBPAGE: setup_
4490: 63 6f 6e 66 69 67 0a 2a 2f 0a 76 6f 69 64 20 73 config.*/.void s
44a0: 65 74 75 70 5f 63 6f 6e 66 69 67 28 76 6f 69 64 etup_config(void
44b0: 29 7b 0a 20 20 6c 6f 67 69 6e 5f 63 68 65 63 6b ){. login_check
44c0: 5f 63 72 65 64 65 6e 74 69 61 6c 73 28 29 3b 0a _credentials();.
44d0: 20 20 69 66 28 20 21 67 2e 6f 6b 53 65 74 75 70 if( !g.okSetup
44e0: 20 29 7b 0a 20 20 20 20 6c 6f 67 69 6e 5f 6e 65 ){. login_ne
44f0: 65 64 65 64 28 29 3b 0a 20 20 7d 0a 0a 20 20 73 eded();. }.. s
4500: 74 79 6c 65 5f 68 65 61 64 65 72 28 22 57 57 57 tyle_header("WWW
4510: 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22 29 Configuration")
4520: 3b 0a 20 20 64 62 5f 62 65 67 69 6e 5f 74 72 61 ;. db_begin_tra
4530: 6e 73 61 63 74 69 6f 6e 28 29 3b 0a 20 20 40 20 nsaction();. @
4540: 3c 66 6f 72 6d 20 61 63 74 69 6f 6e 3d 22 25 73 <form action="%s
4550: 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 73 65 74 (g.zBaseURL)/set
4560: 75 70 5f 63 6f 6e 66 69 67 22 20 6d 65 74 68 6f up_config" metho
4570: 64 3d 22 50 4f 53 54 22 3e 0a 20 20 40 20 3c 68 d="POST">. @ <h
4580: 72 20 2f 3e 0a 20 20 65 6e 74 72 79 5f 61 74 74 r />. entry_att
4590: 72 69 62 75 74 65 28 22 50 72 6f 6a 65 63 74 20 ribute("Project
45a0: 4e 61 6d 65 22 2c 20 36 30 2c 20 22 70 72 6f 6a Name", 60, "proj
45b0: 65 63 74 2d 6e 61 6d 65 22 2c 20 22 70 6e 22 2c ect-name", "pn",
45c0: 20 22 22 29 3b 0a 20 20 40 20 3c 70 3e 47 69 76 "");. @ <p>Giv
45d0: 65 20 79 6f 75 72 20 70 72 6f 6a 65 63 74 20 61 e your project a
45e0: 20 6e 61 6d 65 20 73 6f 20 76 69 73 69 74 6f 72 name so visitor
45f0: 73 20 6b 6e 6f 77 20 77 68 61 74 20 74 68 69 73 s know what this
4600: 20 73 69 74 65 20 69 73 20 61 62 6f 75 74 2e 0a site is about..
4610: 20 20 40 20 54 68 65 20 70 72 6f 6a 65 63 74 20 @ The project
4620: 6e 61 6d 65 20 77 69 6c 6c 20 61 6c 73 6f 20 62 name will also b
4630: 65 20 75 73 65 64 20 61 73 20 74 68 65 20 52 53 e used as the RS
4640: 53 20 66 65 65 64 20 74 69 74 6c 65 2e 3c 2f 70 S feed title.</p
4650: 3e 0a 20 20 40 20 3c 68 72 20 2f 3e 0a 20 20 74 >. @ <hr />. t
4660: 65 78 74 61 72 65 61 5f 61 74 74 72 69 62 75 74 extarea_attribut
4670: 65 28 22 50 72 6f 6a 65 63 74 20 44 65 73 63 72 e("Project Descr
4680: 69 70 74 69 6f 6e 22 2c 20 35 2c 20 36 30 2c 20 iption", 5, 60,
4690: 22 70 72 6f 6a 65 63 74 2d 64 65 73 63 72 69 70 "project-descrip
46a0: 74 69 6f 6e 22 2c 20 22 70 64 22 2c 20 22 22 29 tion", "pd", "")
46b0: 3b 0a 20 20 40 20 3c 70 3e 44 65 73 63 72 69 62 ;. @ <p>Describ
46c0: 65 20 79 6f 75 72 20 70 72 6f 6a 65 63 74 2e 20 e your project.
46d0: 54 68 69 73 20 77 69 6c 6c 20 62 65 20 75 73 65 This will be use
46e0: 64 20 69 6e 20 70 61 67 65 20 68 65 61 64 65 72 d in page header
46f0: 73 20 66 6f 72 20 73 65 61 72 63 68 0a 20 20 40 s for search. @
4700: 20 65 6e 67 69 6e 65 73 20 61 73 20 77 65 6c 6c engines as well
4710: 20 61 73 20 61 20 73 68 6f 72 74 20 52 53 53 20 as a short RSS
4720: 64 65 73 63 72 69 70 74 69 6f 6e 2e 3c 2f 70 3e description.</p>
4730: 0a 20 20 40 20 3c 68 72 20 2f 3e 0a 20 20 40 20 . @ <hr />. @
4740: 3c 70 3e 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 <p><input type="
4750: 73 75 62 6d 69 74 22 20 20 6e 61 6d 65 3d 22 73 submit" name="s
4760: 75 62 6d 69 74 22 20 76 61 6c 75 65 3d 22 41 70 ubmit" value="Ap
4770: 70 6c 79 20 43 68 61 6e 67 65 73 22 3e 3c 2f 70 ply Changes"></p
4780: 3e 0a 20 20 40 20 3c 2f 66 6f 72 6d 3e 0a 20 20 >. @ </form>.
4790: 64 62 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 69 db_end_transacti
47a0: 6f 6e 28 30 29 3b 0a 20 20 73 74 79 6c 65 5f 66 on(0);. style_f
47b0: 6f 6f 74 65 72 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a ooter();.}../*.*
47c0: 2a 20 57 45 42 50 41 47 45 3a 20 65 64 69 74 63 * WEBPAGE: editc
47d0: 73 73 0a 2a 2f 0a 76 6f 69 64 20 73 65 74 75 70 ss.*/.void setup
47e0: 5f 65 64 69 74 63 73 73 28 76 6f 69 64 29 7b 0a _editcss(void){.
47f0: 20 20 6c 6f 67 69 6e 5f 63 68 65 63 6b 5f 63 72 login_check_cr
4800: 65 64 65 6e 74 69 61 6c 73 28 29 3b 0a 20 20 69 edentials();. i
4810: 66 28 20 21 67 2e 6f 6b 53 65 74 75 70 20 29 7b f( !g.okSetup ){
4820: 0a 20 20 20 20 6c 6f 67 69 6e 5f 6e 65 65 64 65 . login_neede
4830: 64 28 29 3b 0a 20 20 7d 0a 20 20 73 74 79 6c 65 d();. }. style
4840: 5f 68 65 61 64 65 72 28 22 45 64 69 74 20 43 53 _header("Edit CS
4850: 53 22 29 3b 0a 20 20 40 20 3c 66 6f 72 6d 20 61 S");. @ <form a
4860: 63 74 69 6f 6e 3d 22 25 73 28 67 2e 7a 42 61 73 ction="%s(g.zBas
4870: 65 55 52 4c 29 2f 65 64 69 74 63 73 73 22 20 6d eURL)/editcss" m
4880: 65 74 68 6f 64 3d 22 50 4f 53 54 22 3e 0a 20 20 ethod="POST">.
4890: 40 20 45 64 69 74 20 74 68 65 20 43 53 53 3a 3c @ Edit the CSS:<
48a0: 62 72 20 2f 3e 0a 20 20 74 65 78 74 61 72 65 61 br />. textarea
48b0: 5f 61 74 74 72 69 62 75 74 65 28 22 22 2c 20 34 _attribute("", 4
48c0: 30 2c 20 38 30 2c 20 22 63 73 73 22 2c 20 22 63 0, 80, "css", "c
48d0: 73 73 22 2c 20 7a 44 65 66 61 75 6c 74 43 53 53 ss", zDefaultCSS
48e0: 29 3b 0a 20 20 40 20 3c 62 72 20 2f 3e 0a 20 20 );. @ <br />.
48f0: 40 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 73 @ <input type="s
4900: 75 62 6d 69 74 22 20 6e 61 6d 65 3d 22 73 75 62 ubmit" name="sub
4910: 6d 69 74 22 20 76 61 6c 75 65 3d 22 41 70 70 6c mit" value="Appl
4920: 79 20 43 68 61 6e 67 65 73 22 3e 0a 20 20 40 20 y Changes">. @
4930: 3c 2f 66 6f 72 6d 3e 0a 20 20 73 74 79 6c 65 5f </form>. style_
4940: 66 6f 6f 74 65 72 28 29 3b 0a 7d 0a footer();.}.