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 20 0a 2a 2a 20 59 6f 75 20 73 68 6f 75 .** .** You shou
0230: 6c 64 20 68 61 76 65 20 72 65 63 65 69 76 65 64 ld have received
0240: 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 47 a copy of the G
0250: 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 NU General Publi
0260: 63 0a 2a 2a 20 4c 69 63 65 6e 73 65 20 61 6c 6f c.** License alo
0270: 6e 67 20 77 69 74 68 20 74 68 69 73 20 6c 69 62 ng with this lib
0280: 72 61 72 79 3b 20 69 66 20 6e 6f 74 2c 20 77 72 rary; if not, wr
0290: 69 74 65 20 74 6f 20 74 68 65 0a 2a 2a 20 46 72 ite to the.** Fr
02a0: 65 65 20 53 6f 66 74 77 61 72 65 20 46 6f 75 6e ee Software Foun
02b0: 64 61 74 69 6f 6e 2c 20 49 6e 63 2e 2c 20 35 39 dation, Inc., 59
02c0: 20 54 65 6d 70 6c 65 20 50 6c 61 63 65 20 2d 20 Temple Place -
02d0: 53 75 69 74 65 20 33 33 30 2c 0a 2a 2a 20 42 6f Suite 330,.** Bo
02e0: 73 74 6f 6e 2c 20 4d 41 20 20 30 32 31 31 31 2d ston, MA 02111-
02f0: 31 33 30 37 2c 20 55 53 41 2e 0a 2a 2a 0a 2a 2a 1307, USA..**.**
0300: 20 41 75 74 68 6f 72 20 63 6f 6e 74 61 63 74 20 Author contact
0310: 69 6e 66 6f 72 6d 61 74 69 6f 6e 3a 0a 2a 2a 20 information:.**
0320: 20 20 64 72 68 40 68 77 61 63 69 2e 63 6f 6d 0a drh@hwaci.com.
0330: 2a 2a 20 20 20 68 74 74 70 3a 2f 2f 77 77 77 2e ** http://www.
0340: 68 77 61 63 69 2e 63 6f 6d 2f 64 72 68 2f 0a 2a hwaci.com/drh/.*
0350: 2a 0a 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: 2a 0a 2a 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e *.**.** Implemen
03b0: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 53 65 tation of the Se
03c0: 74 75 70 20 70 61 67 65 0a 2a 2f 0a 23 69 6e 63 tup page.*/.#inc
03d0: 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a lude <assert.h>.
03e0: 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67 #include "config
03f0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 73 65 .h".#include "se
0400: 74 75 70 2e 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20 4f tup.h".../*.** O
0410: 75 74 70 75 74 20 61 20 73 69 6e 67 6c 65 20 65 utput a single e
0420: 6e 74 72 79 20 66 6f 72 20 61 20 6d 65 6e 75 20 ntry for a menu
0430: 67 65 6e 65 72 61 74 65 64 20 75 73 69 6e 67 20 generated using
0440: 61 6e 20 48 54 4d 4c 20 74 61 62 6c 65 2e 0a 2a an HTML table..*
0450: 2a 20 49 66 20 7a 4c 69 6e 6b 20 69 73 20 6e 6f * If zLink is no
0460: 74 20 4e 55 4c 4c 20 6f 72 20 61 6e 20 65 6d 70 t NULL or an emp
0470: 74 79 20 73 74 72 69 6e 67 2c 20 74 68 65 6e 20 ty string, then
0480: 69 74 20 69 73 20 74 68 65 20 70 61 67 65 20 74 it is the page t
0490: 68 61 74 0a 2a 2a 20 74 68 65 20 6d 65 6e 75 20 hat.** the menu
04a0: 65 6e 74 72 79 20 77 69 6c 6c 20 68 79 70 65 72 entry will hyper
04b0: 6c 69 6e 6b 20 74 6f 2e 20 20 49 66 20 7a 4c 69 link to. If zLi
04c0: 6e 6b 20 69 73 20 4e 55 4c 4c 20 6f 72 20 22 22 nk is NULL or ""
04d0: 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6d 65 , then.** the me
04e0: 6e 75 20 65 6e 74 72 79 20 68 61 73 20 6e 6f 20 nu entry has no
04f0: 68 79 70 65 72 6c 69 6e 6b 20 2d 20 69 74 20 69 hyperlink - it i
0500: 73 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 73 s disabled..*/.s
0510: 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6e 75 5f tatic void menu_
0520: 65 6e 74 72 79 28 0a 20 20 63 6f 6e 73 74 20 63 entry(. const c
0530: 68 61 72 20 2a 7a 54 69 74 6c 65 2c 0a 20 20 63 har *zTitle,. c
0540: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 69 6e 6b onst char *zLink
0550: 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a ,. const char *
0560: 7a 44 65 73 63 0a 29 7b 0a 20 20 40 20 3c 64 74 zDesc.){. @ <dt
0570: 3e 0a 20 20 69 66 28 20 7a 4c 69 6e 6b 20 26 26 >. if( zLink &&
0580: 20 7a 4c 69 6e 6b 5b 30 5d 20 29 7b 0a 20 20 20 zLink[0] ){.
0590: 20 40 20 3c 61 20 68 72 65 66 3d 22 25 73 28 7a @ <a href="%s(z
05a0: 4c 69 6e 6b 29 22 3e 25 68 28 7a 54 69 74 6c 65 Link)">%h(zTitle
05b0: 29 3c 2f 61 3e 0a 20 20 7d 65 6c 73 65 7b 0a 20 )</a>. }else{.
05c0: 20 20 20 40 20 25 68 28 7a 54 69 74 6c 65 29 0a @ %h(zTitle).
05d0: 20 20 7d 0a 20 20 40 20 3c 2f 64 74 3e 0a 20 20 }. @ </dt>.
05e0: 40 20 3c 64 64 3e 25 68 28 7a 44 65 73 63 29 3c @ <dd>%h(zDesc)<
05f0: 2f 64 64 3e 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 45 /dd>.}../*.** WE
0600: 42 50 41 47 45 3a 20 2f 73 65 74 75 70 0a 2a 2f BPAGE: /setup.*/
0610: 0a 76 6f 69 64 20 73 65 74 75 70 5f 70 61 67 65 .void setup_page
0620: 28 76 6f 69 64 29 7b 0a 20 20 6c 6f 67 69 6e 5f (void){. login_
0630: 63 68 65 63 6b 5f 63 72 65 64 65 6e 74 69 61 6c check_credential
0640: 73 28 29 3b 0a 20 20 69 66 28 20 21 67 2e 6f 6b s();. if( !g.ok
0650: 53 65 74 75 70 20 29 7b 0a 20 20 20 20 6c 6f 67 Setup ){. log
0660: 69 6e 5f 6e 65 65 64 65 64 28 29 3b 0a 20 20 7d in_needed();. }
0670: 0a 0a 20 20 73 74 79 6c 65 5f 68 65 61 64 65 72 .. style_header
0680: 28 22 53 65 74 75 70 22 29 3b 0a 20 20 40 20 3c ("Setup");. @ <
0690: 64 6c 20 69 64 3d 22 73 65 74 75 70 22 3e 0a 20 dl id="setup">.
06a0: 20 6d 65 6e 75 5f 65 6e 74 72 79 28 22 55 73 65 menu_entry("Use
06b0: 72 73 22 2c 20 22 73 65 74 75 70 5f 75 6c 69 73 rs", "setup_ulis
06c0: 74 22 2c 0a 20 20 20 20 22 47 72 61 6e 74 20 70 t",. "Grant p
06d0: 72 69 76 69 6c 65 67 65 73 20 74 6f 20 69 6e 64 rivileges to ind
06e0: 69 76 69 64 75 61 6c 20 75 73 65 72 73 2e 22 29 ividual users.")
06f0: 3b 0a 20 20 6d 65 6e 75 5f 65 6e 74 72 79 28 22 ;. menu_entry("
0700: 41 63 63 65 73 73 22 2c 20 22 73 65 74 75 70 5f Access", "setup_
0710: 61 63 63 65 73 73 22 2c 0a 20 20 20 20 22 43 6f access",. "Co
0720: 6e 74 72 6f 6c 20 61 63 63 65 73 73 20 73 65 74 ntrol access set
0730: 74 69 6e 67 73 2e 22 29 3b 0a 20 20 6d 65 6e 75 tings.");. menu
0740: 5f 65 6e 74 72 79 28 22 43 6f 6e 66 69 67 75 72 _entry("Configur
0750: 61 74 69 6f 6e 22 2c 20 22 73 65 74 75 70 5f 63 ation", "setup_c
0760: 6f 6e 66 69 67 22 2c 0a 20 20 20 20 22 43 6f 6e onfig",. "Con
0770: 66 69 67 75 72 65 20 74 68 65 20 57 57 57 20 63 figure the WWW c
0780: 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 74 68 65 omponents of the
0790: 20 72 65 70 6f 73 69 74 6f 72 79 22 29 3b 0a 20 repository");.
07a0: 20 40 20 3c 2f 64 6c 3e 0a 0a 20 20 73 74 79 6c @ </dl>.. styl
07b0: 65 5f 66 6f 6f 74 65 72 28 29 3b 0a 7d 0a 0a 2f e_footer();.}../
07c0: 2a 0a 2a 2a 20 57 45 42 50 41 47 45 3a 20 73 65 *.** WEBPAGE: se
07d0: 74 75 70 5f 75 6c 69 73 74 0a 2a 2a 0a 2a 2a 20 tup_ulist.**.**
07e0: 53 68 6f 77 20 61 20 6c 69 73 74 20 6f 66 20 75 Show a list of u
07f0: 73 65 72 73 2e 20 20 43 6c 69 63 6b 69 6e 67 20 sers. Clicking
0800: 6f 6e 20 61 6e 79 20 75 73 65 72 20 6a 75 6d 70 on any user jump
0810: 73 20 74 6f 20 74 68 65 20 65 64 69 74 0a 2a 2a s to the edit.**
0820: 20 73 63 72 65 65 6e 20 66 6f 72 20 74 68 61 74 screen for that
0830: 20 75 73 65 72 2e 0a 2a 2f 0a 76 6f 69 64 20 73 user..*/.void s
0840: 65 74 75 70 5f 75 6c 69 73 74 28 76 6f 69 64 29 etup_ulist(void)
0850: 7b 0a 20 20 53 74 6d 74 20 73 3b 0a 20 20 0a 20 {. Stmt s;. .
0860: 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 29 3b style_footer();
0870: 0a 20 20 6c 6f 67 69 6e 5f 63 68 65 63 6b 5f 63 . login_check_c
0880: 72 65 64 65 6e 74 69 61 6c 73 28 29 3b 0a 20 20 redentials();.
0890: 69 66 28 20 21 67 2e 6f 6b 53 65 74 75 70 20 29 if( !g.okSetup )
08a0: 7b 0a 20 20 20 20 6c 6f 67 69 6e 5f 6e 65 65 64 {. login_need
08b0: 65 64 28 29 3b 0a 20 20 20 20 72 65 74 75 72 6e ed();. return
08c0: 3b 0a 20 20 7d 0a 0a 20 20 73 74 79 6c 65 5f 73 ;. }.. style_s
08d0: 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 ubmenu_element("
08e0: 41 64 64 22 2c 20 22 41 64 64 20 55 73 65 72 22 Add", "Add User"
08f0: 2c 20 22 73 65 74 75 70 5f 75 65 64 69 74 22 29 , "setup_uedit")
0900: 3b 0a 20 20 73 74 79 6c 65 5f 68 65 61 64 65 72 ;. style_header
0910: 28 22 55 73 65 72 20 4c 69 73 74 22 29 3b 0a 20 ("User List");.
0920: 20 40 20 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 @ <table border
0930: 3d 22 30 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 ="0" cellpadding
0940: 3d 22 30 22 20 63 65 6c 6c 73 70 61 63 69 6e 67 ="0" cellspacing
0950: 3d 22 32 35 22 3e 0a 20 20 40 20 3c 74 72 3e 3c ="25">. @ <tr><
0960: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e td valign="top">
0970: 0a 20 20 40 20 3c 62 3e 55 73 65 72 73 3a 3c 2f . @ <b>Users:</
0980: 62 3e 0a 20 20 40 20 3c 74 61 62 6c 65 20 62 6f b>. @ <table bo
0990: 72 64 65 72 3d 22 31 22 20 63 65 6c 6c 70 61 64 rder="1" cellpad
09a0: 64 69 6e 67 3d 22 31 30 22 3e 3c 74 72 3e 3c 74 ding="10"><tr><t
09b0: 64 3e 0a 20 20 40 20 3c 74 61 62 6c 65 20 63 65 d>. @ <table ce
09c0: 6c 6c 73 70 61 63 69 6e 67 3d 30 20 63 65 6c 6c llspacing=0 cell
09d0: 70 61 64 64 69 6e 67 3d 30 20 62 6f 72 64 65 72 padding=0 border
09e0: 3d 30 3e 0a 20 20 40 20 3c 74 72 3e 0a 20 20 40 =0>. @ <tr>. @
09f0: 20 20 20 3c 74 68 20 61 6c 69 67 6e 3d 22 72 69 <th align="ri
0a00: 67 68 74 22 3e 55 73 65 72 26 6e 62 73 70 3b 49 ght">User I
0a10: 44 3c 2f 74 68 3e 3c 74 68 20 77 69 64 74 68 3d D</th><th width=
0a20: 22 31 35 22 3e 3c 2f 74 64 3e 0a 20 20 40 20 20 "15"></td>. @
0a30: 20 3c 74 68 3e 43 61 70 61 62 69 6c 69 74 69 65 <th>Capabilitie
0a40: 73 3c 2f 74 68 3e 3c 74 68 20 77 69 64 74 68 3d s</th><th width=
0a50: 22 31 35 22 3e 3c 2f 74 64 3e 0a 20 20 40 20 20 "15"></td>. @
0a60: 20 3c 74 68 3e 43 6f 6e 74 61 63 74 26 6e 62 73 <th>Contact&nbs
0a70: 70 3b 49 6e 66 6f 3c 2f 74 68 3e 0a 20 20 40 20 p;Info</th>. @
0a80: 3c 2f 74 72 3e 0a 20 20 64 62 5f 70 72 65 70 61 </tr>. db_prepa
0a90: 72 65 28 26 73 2c 20 22 53 45 4c 45 43 54 20 75 re(&s, "SELECT u
0aa0: 69 64 2c 20 6c 6f 67 69 6e 2c 20 63 61 70 2c 20 id, login, cap,
0ab0: 69 6e 66 6f 20 46 52 4f 4d 20 75 73 65 72 20 4f info FROM user O
0ac0: 52 44 45 52 20 42 59 20 6c 6f 67 69 6e 22 29 3b RDER BY login");
0ad0: 0a 20 20 77 68 69 6c 65 28 20 64 62 5f 73 74 65 . while( db_ste
0ae0: 70 28 26 73 29 3d 3d 53 51 4c 49 54 45 5f 52 4f p(&s)==SQLITE_RO
0af0: 57 20 29 7b 0a 20 20 20 20 40 20 3c 74 72 3e 0a W ){. @ <tr>.
0b00: 20 20 20 20 40 20 3c 74 64 20 61 6c 69 67 6e 3d @ <td align=
0b10: 22 72 69 67 68 74 22 3e 0a 20 20 20 20 69 66 28 "right">. if(
0b20: 20 67 2e 6f 6b 41 64 6d 69 6e 20 29 7b 0a 20 20 g.okAdmin ){.
0b30: 20 20 20 20 40 20 3c 61 20 68 72 65 66 3d 22 73 @ <a href="s
0b40: 65 74 75 70 5f 75 65 64 69 74 3f 69 64 3d 25 64 etup_uedit?id=%d
0b50: 28 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 (db_column_int(&
0b60: 73 2c 30 29 29 22 3e 0a 20 20 20 20 7d 0a 20 20 s,0))">. }.
0b70: 20 20 40 20 3c 6e 6f 62 72 3e 25 68 28 64 62 5f @ <nobr>%h(db_
0b80: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 73 2c 31 column_text(&s,1
0b90: 29 29 3c 2f 6e 6f 62 72 3e 0a 20 20 20 20 69 66 ))</nobr>. if
0ba0: 28 20 67 2e 6f 6b 41 64 6d 69 6e 20 29 7b 0a 20 ( g.okAdmin ){.
0bb0: 20 20 20 20 20 40 20 3c 2f 61 3e 0a 20 20 20 20 @ </a>.
0bc0: 7d 0a 20 20 20 20 40 20 3c 2f 74 64 3e 3c 74 64 }. @ </td><td
0bd0: 3e 3c 2f 74 64 3e 0a 20 20 20 20 40 20 3c 74 64 ></td>. @ <td
0be0: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e align="center">
0bf0: 25 73 28 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 %s(db_column_tex
0c00: 74 28 26 73 2c 32 29 29 3c 2f 74 64 3e 3c 74 64 t(&s,2))</td><td
0c10: 3e 3c 2f 74 64 3e 0a 20 20 20 20 40 20 3c 74 64 ></td>. @ <td
0c20: 20 61 6c 69 67 6e 3d 22 6c 65 66 74 22 3e 25 73 align="left">%s
0c30: 28 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 (db_column_text(
0c40: 26 73 2c 33 29 29 3c 2f 74 64 3e 0a 20 20 20 20 &s,3))</td>.
0c50: 40 20 3c 2f 74 72 3e 0a 20 20 7d 0a 20 20 40 20 @ </tr>. }. @
0c60: 3c 2f 74 61 62 6c 65 3e 3c 2f 74 64 3e 3c 2f 74 </table></td></t
0c70: 72 3e 3c 2f 74 61 62 6c 65 3e 0a 20 20 40 20 3c r></table>. @ <
0c80: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e td valign="top">
0c90: 0a 20 20 40 20 3c 62 3e 4e 6f 74 65 73 3a 3c 2f . @ <b>Notes:</
0ca0: 62 3e 0a 20 20 40 20 3c 6f 6c 3e 0a 20 20 40 20 b>. @ <ol>. @
0cb0: 3c 6c 69 3e 3c 70 3e 54 68 65 20 70 65 72 6d 69 <li><p>The permi
0cc0: 73 73 69 6f 6e 20 66 6c 61 67 73 20 61 72 65 20 ssion flags are
0cd0: 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a as follows:</p>.
0ce0: 20 20 40 20 3c 6f 6c 20 74 79 70 65 3d 22 61 22 @ <ol type="a"
0cf0: 3e 0a 20 20 40 20 3c 6c 69 20 76 61 6c 75 65 3d >. @ <li value=
0d00: 22 31 22 3e 3c 62 3e 41 64 6d 69 6e 3c 2f 62 3e "1"><b>Admin</b>
0d10: 3a 20 43 72 65 61 74 65 20 61 6e 64 20 64 65 6c : Create and del
0d20: 65 74 65 20 75 73 65 72 73 3c 2f 6c 69 3e 0a 20 ete users</li>.
0d30: 20 40 20 3c 6c 69 20 76 61 6c 75 65 3d 22 33 22 @ <li value="3"
0d40: 3e 3c 62 3e 41 70 70 65 6e 64 2d 54 6b 74 3c 2f ><b>Append-Tkt</
0d50: 62 3e 3a 20 41 70 70 65 6e 64 20 74 6f 20 74 69 b>: Append to ti
0d60: 63 6b 65 74 73 3c 2f 6c 69 3e 0a 20 20 40 20 3c ckets</li>. @ <
0d70: 6c 69 20 76 61 6c 75 65 3d 22 34 22 3e 3c 62 3e li value="4"><b>
0d80: 44 65 6c 65 74 65 3c 2f 62 3e 3a 20 44 65 6c 65 Delete</b>: Dele
0d90: 74 65 20 77 69 6b 69 20 61 6e 64 20 74 69 63 6b te wiki and tick
0da0: 65 74 73 3c 2f 6c 69 3e 0a 20 20 40 20 3c 6c 69 ets</li>. @ <li
0db0: 20 76 61 6c 75 65 3d 22 36 22 3e 3c 62 3e 4e 65 value="6"><b>Ne
0dc0: 77 2d 57 69 6b 69 3c 2f 62 3e 3a 20 43 72 65 61 w-Wiki</b>: Crea
0dd0: 74 65 20 6e 65 77 20 77 69 6b 69 20 70 61 67 65 te new wiki page
0de0: 73 3c 2f 6c 69 3e 0a 20 20 40 20 3c 6c 69 20 76 s</li>. @ <li v
0df0: 61 6c 75 65 3d 22 37 22 3e 3c 62 3e 43 6c 6f 6e alue="7"><b>Clon
0e00: 65 3c 2f 62 3e 3a 20 43 6c 6f 6e 65 20 74 68 65 e</b>: Clone the
0e10: 20 72 65 70 6f 73 69 74 6f 72 79 3c 2f 6c 69 3e repository</li>
0e20: 0a 20 20 40 20 3c 6c 69 20 76 61 6c 75 65 3d 22 . @ <li value="
0e30: 38 22 3e 3c 62 3e 48 69 73 74 6f 72 79 3c 2f 62 8"><b>History</b
0e40: 3e 3a 20 56 69 65 77 20 64 65 74 61 69 6c 20 72 >: View detail r
0e50: 65 70 6f 73 69 74 6f 72 79 20 68 69 73 74 6f 72 epository histor
0e60: 79 3c 2f 6c 69 3e 0a 20 20 40 20 3c 6c 69 20 76 y</li>. @ <li v
0e70: 61 6c 75 65 3d 22 39 22 3e 3c 62 3e 43 68 65 63 alue="9"><b>Chec
0e80: 6b 2d 49 6e 3c 2f 62 3e 3a 20 43 6f 6d 6d 69 74 k-In</b>: Commit
0e90: 20 6e 65 77 20 76 65 72 73 69 6f 6e 73 20 69 6e new versions in
0ea0: 20 74 68 65 20 72 65 70 6f 73 69 74 6f 72 79 3c the repository<
0eb0: 2f 6c 69 3e 0a 20 20 40 20 3c 6c 69 20 76 61 6c /li>. @ <li val
0ec0: 75 65 3d 22 31 30 22 3e 3c 62 3e 52 65 61 64 2d ue="10"><b>Read-
0ed0: 57 69 6b 69 3c 2f 62 3e 3a 20 56 69 65 77 20 77 Wiki</b>: View w
0ee0: 69 6b 69 20 70 61 67 65 73 3c 2f 6c 69 3e 0a 20 iki pages</li>.
0ef0: 20 40 20 3c 6c 69 20 76 61 6c 75 65 3d 22 31 31 @ <li value="11
0f00: 22 3e 3c 62 3e 57 72 69 74 65 2d 57 69 6b 69 3c "><b>Write-Wiki<
0f10: 2f 62 3e 3a 20 45 64 69 74 20 77 69 6b 69 20 70 /b>: Edit wiki p
0f20: 61 67 65 73 3c 2f 6c 69 3e 0a 20 20 40 20 3c 6c ages</li>. @ <l
0f30: 69 20 76 61 6c 75 65 3d 22 31 33 22 3e 3c 62 3e i value="13"><b>
0f40: 41 70 70 65 6e 64 2d 57 69 6b 69 3c 2f 62 3e 3a Append-Wiki</b>:
0f50: 20 41 70 70 65 6e 64 20 74 6f 20 77 69 6b 69 20 Append to wiki
0f60: 70 61 67 65 73 3c 2f 6c 69 3e 0a 20 20 40 20 3c pages</li>. @ <
0f70: 6c 69 20 76 61 6c 75 65 3d 22 31 34 22 3e 3c 62 li value="14"><b
0f80: 3e 4e 65 77 2d 54 6b 74 3c 2f 62 3e 3a 20 43 72 >New-Tkt</b>: Cr
0f90: 65 61 74 65 20 6e 65 77 20 74 69 63 6b 65 74 73 eate new tickets
0fa0: 3c 2f 6c 69 3e 0a 20 20 40 20 3c 6c 69 20 76 61 </li>. @ <li va
0fb0: 6c 75 65 3d 22 31 35 22 3e 3c 62 3e 43 68 65 63 lue="15"><b>Chec
0fc0: 6b 2d 4f 75 74 3c 2f 62 3e 3a 20 43 68 65 63 6b k-Out</b>: Check
0fd0: 20 6f 75 74 20 76 65 72 73 69 6f 6e 73 3c 2f 6c out versions</l
0fe0: 69 3e 0a 20 20 40 20 3c 6c 69 20 76 61 6c 75 65 i>. @ <li value
0ff0: 3d 22 31 36 22 3e 3c 62 3e 50 61 73 73 77 6f 72 ="16"><b>Passwor
1000: 64 3c 2f 62 3e 3a 20 43 68 61 6e 67 65 20 79 6f d</b>: Change yo
1010: 75 72 20 6f 77 6e 20 70 61 73 73 77 6f 72 64 3c ur own password<
1020: 2f 6c 69 3e 0a 20 20 40 20 3c 6c 69 20 76 61 6c /li>. @ <li val
1030: 75 65 3d 22 31 37 22 3e 3c 62 3e 51 75 65 72 79 ue="17"><b>Query
1040: 3c 2f 62 3e 3a 20 43 72 65 61 74 65 20 6e 65 77 </b>: Create new
1050: 20 71 75 65 72 69 65 73 20 61 67 61 69 6e 73 74 queries against
1060: 20 74 69 63 6b 65 74 73 3c 2f 6c 69 3e 0a 20 20 tickets</li>.
1070: 40 20 3c 6c 69 20 76 61 6c 75 65 3d 22 31 38 22 @ <li value="18"
1080: 3e 3c 62 3e 52 65 61 64 2d 54 6b 74 3c 2f 62 3e ><b>Read-Tkt</b>
1090: 3a 20 56 69 65 77 20 74 69 63 6b 65 74 73 3c 2f : View tickets</
10a0: 6c 69 3e 0a 20 20 40 20 3c 6c 69 20 76 61 6c 75 li>. @ <li valu
10b0: 65 3d 22 31 39 22 3e 3c 62 3e 53 65 74 75 70 3a e="19"><b>Setup:
10c0: 3c 2f 62 3e 20 53 65 74 75 70 20 61 6e 64 20 63 </b> Setup and c
10d0: 6f 6e 66 69 67 75 72 65 20 74 68 69 73 20 77 65 onfigure this we
10e0: 62 73 69 74 65 3c 2f 6c 69 3e 0a 20 20 40 20 3c bsite</li>. @ <
10f0: 6c 69 20 76 61 6c 75 65 3d 22 32 33 22 3e 3c 62 li value="23"><b
1100: 3e 57 72 69 74 65 2d 54 6b 74 3c 2f 62 3e 3a 20 >Write-Tkt</b>:
1110: 45 64 69 74 20 74 69 63 6b 65 74 73 3c 2f 6c 69 Edit tickets</li
1120: 3e 0a 20 20 40 20 3c 2f 6f 6c 3e 0a 20 20 40 20 >. @ </ol>. @
1130: 3c 2f 70 3e 3c 2f 6c 69 3e 0a 20 20 40 0a 20 20 </p></li>. @.
1140: 40 20 3c 6c 69 3e 3c 70 3e 0a 20 20 40 20 45 76 @ <li><p>. @ Ev
1150: 65 72 79 20 75 73 65 72 2c 20 6c 6f 67 67 65 64 ery user, logged
1160: 20 69 6e 20 6f 72 20 6e 6f 74 2c 20 68 61 73 20 in or not, has
1170: 74 68 65 20 70 72 69 76 69 6c 65 67 65 73 20 6f the privileges o
1180: 66 20 3c 62 3e 6e 6f 62 6f 64 79 3c 2f 62 3e 2e f <b>nobody</b>.
1190: 0a 20 20 40 20 41 6e 79 20 68 75 6d 61 6e 20 63 . @ Any human c
11a0: 61 6e 20 6c 6f 67 69 6e 20 61 73 20 3c 62 3e 61 an login as <b>a
11b0: 6e 6f 6e 79 6d 6f 75 73 3c 2f 62 3e 20 73 69 6e nonymous</b> sin
11c0: 63 65 20 74 68 65 20 70 61 73 73 77 6f 72 64 20 ce the password
11d0: 69 73 0a 20 20 40 20 63 6c 65 61 72 6c 79 20 64 is. @ clearly d
11e0: 69 73 70 6c 61 79 65 64 20 6f 6e 20 74 68 65 20 isplayed on the
11f0: 6c 6f 67 69 6e 20 70 61 67 65 20 66 6f 72 20 74 login page for t
1200: 68 65 6d 20 74 6f 20 74 79 70 65 2e 20 20 54 68 hem to type. Th
1210: 65 20 70 75 72 70 6f 73 65 0a 20 20 40 20 6f 66 e purpose. @ of
1220: 20 72 65 71 75 69 72 69 6e 67 20 61 6e 6f 6e 79 requiring anony
1230: 6d 6f 75 73 20 74 6f 20 6c 6f 67 20 69 6e 20 69 mous to log in i
1240: 73 20 74 6f 20 70 72 65 76 65 6e 74 20 61 63 63 s to prevent acc
1250: 65 73 73 20 62 79 20 73 70 69 64 65 72 73 2e 0a ess by spiders..
1260: 20 20 40 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 20 20 @ </p></li>.
1270: 40 0a 20 20 40 20 3c 2f 6f 6c 3e 0a 20 20 40 20 @. @ </ol>. @
1280: 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c </td></tr></tabl
1290: 65 3e 0a 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65 e>. style_foote
12a0: 72 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 45 r();.}../*.** WE
12b0: 42 50 41 47 45 3a 20 2f 73 65 74 75 70 5f 75 65 BPAGE: /setup_ue
12c0: 64 69 74 0a 2a 2f 0a 76 6f 69 64 20 75 73 65 72 dit.*/.void user
12d0: 5f 65 64 69 74 28 76 6f 69 64 29 7b 0a 20 20 63 _edit(void){. c
12e0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 49 64 2c 20 onst char *zId,
12f0: 2a 7a 4c 6f 67 69 6e 2c 20 2a 7a 49 6e 66 6f 2c *zLogin, *zInfo,
1300: 20 2a 7a 43 61 70 3b 0a 20 20 63 68 61 72 20 2a *zCap;. char *
1310: 6f 61 61 2c 20 2a 6f 61 73 2c 20 2a 6f 61 72 2c oaa, *oas, *oar,
1320: 20 2a 6f 61 77 2c 20 2a 6f 61 6e 2c 20 2a 6f 61 *oaw, *oan, *oa
1330: 69 2c 20 2a 6f 61 6a 2c 20 2a 6f 61 6f 2c 20 2a i, *oaj, *oao, *
1340: 6f 61 70 20 3b 0a 20 20 63 68 61 72 20 2a 6f 61 oap ;. char *oa
1350: 6b 2c 20 2a 6f 61 64 2c 20 2a 6f 61 71 2c 20 2a k, *oad, *oaq, *
1360: 6f 61 63 2c 20 2a 6f 61 66 2c 20 2a 6f 61 6d 2c oac, *oaf, *oam,
1370: 20 2a 6f 61 68 2c 20 2a 6f 61 67 3b 0a 20 20 69 *oah, *oag;. i
1380: 6e 74 20 64 6f 57 72 69 74 65 3b 0a 20 20 69 6e nt doWrite;. in
1390: 74 20 75 69 64 3b 0a 20 20 69 6e 74 20 68 69 67 t uid;. int hig
13a0: 68 65 72 55 73 65 72 20 3d 20 30 3b 20 20 2f 2a herUser = 0; /*
13b0: 20 54 72 75 65 20 69 66 20 75 73 65 72 20 62 65 True if user be
13c0: 69 6e 67 20 65 64 69 74 65 64 20 69 73 20 53 45 ing edited is SE
13d0: 54 55 50 20 61 6e 64 20 74 68 65 20 2a 2f 0a 20 TUP and the */.
13e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13f0: 20 20 20 20 20 20 2f 2a 20 75 73 65 72 20 64 6f /* user do
1400: 69 6e 67 20 74 68 65 20 65 64 69 74 69 6e 67 20 ing the editing
1410: 69 73 20 41 44 4d 49 4e 2e 20 20 44 69 73 61 6c is ADMIN. Disal
1420: 6c 6f 77 20 65 64 69 74 69 6e 67 20 2a 2f 0a 0a low editing */..
1430: 20 20 2f 2a 20 4d 75 73 74 20 68 61 76 65 20 41 /* Must have A
1440: 44 4d 49 4e 20 70 72 69 76 6c 65 67 65 73 20 74 DMIN privleges t
1450: 6f 20 61 63 63 65 73 73 20 74 68 69 73 20 70 61 o access this pa
1460: 67 65 0a 20 20 2a 2f 0a 20 20 6c 6f 67 69 6e 5f ge. */. login_
1470: 63 68 65 63 6b 5f 63 72 65 64 65 6e 74 69 61 6c check_credential
1480: 73 28 29 3b 0a 20 20 69 66 28 20 21 67 2e 6f 6b s();. if( !g.ok
1490: 41 64 6d 69 6e 20 29 7b 20 6c 6f 67 69 6e 5f 6e Admin ){ login_n
14a0: 65 65 64 65 64 28 29 3b 20 72 65 74 75 72 6e 3b eeded(); return;
14b0: 20 7d 0a 0a 20 20 2f 2a 20 43 68 65 63 6b 20 74 }.. /* Check t
14c0: 6f 20 73 65 65 20 69 66 20 61 6e 20 41 44 4d 49 o see if an ADMI
14d0: 4e 20 75 73 65 72 20 69 73 20 74 72 79 69 6e 67 N user is trying
14e0: 20 74 6f 20 65 64 69 74 20 61 20 53 45 54 55 50 to edit a SETUP
14f0: 20 61 63 63 6f 75 6e 74 2e 0a 20 20 2a 2a 20 44 account.. ** D
1500: 6f 6e 27 74 20 61 6c 6c 6f 77 20 74 68 61 74 2e on't allow that.
1510: 0a 20 20 2a 2f 0a 20 20 7a 49 64 20 3d 20 50 44 . */. zId = PD
1520: 28 22 69 64 22 2c 20 22 30 22 29 3b 0a 20 20 75 ("id", "0");. u
1530: 69 64 20 3d 20 61 74 6f 69 28 7a 49 64 29 3b 0a id = atoi(zId);.
1540: 20 20 69 66 28 20 7a 49 64 20 26 26 20 21 67 2e if( zId && !g.
1550: 6f 6b 53 65 74 75 70 20 26 26 20 75 69 64 3e 30 okSetup && uid>0
1560: 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4f ){. char *zO
1570: 6c 64 43 61 70 73 3b 0a 20 20 20 20 7a 4f 6c 64 ldCaps;. zOld
1580: 43 61 70 73 20 3d 20 64 62 5f 74 65 78 74 28 30 Caps = db_text(0
1590: 2c 20 22 53 45 4c 45 43 54 20 63 61 70 73 20 46 , "SELECT caps F
15a0: 52 4f 4d 20 75 73 65 72 20 57 48 45 52 45 20 75 ROM user WHERE u
15b0: 69 64 3d 25 64 22 2c 75 69 64 29 3b 0a 20 20 20 id=%d",uid);.
15c0: 20 68 69 67 68 65 72 55 73 65 72 20 3d 20 7a 4f higherUser = zO
15d0: 6c 64 43 61 70 73 20 26 26 20 73 74 72 63 68 72 ldCaps && strchr
15e0: 28 7a 4f 6c 64 43 61 70 73 2c 27 73 27 29 3b 0a (zOldCaps,'s');.
15f0: 20 20 7d 0a 0a 20 20 69 66 28 20 50 28 22 63 61 }.. if( P("ca
1600: 6e 22 29 20 29 7b 0a 20 20 20 20 63 67 69 5f 72 n") ){. cgi_r
1610: 65 64 69 72 65 63 74 28 22 73 65 74 75 70 5f 75 edirect("setup_u
1620: 6c 69 73 74 22 29 3b 0a 20 20 20 20 72 65 74 75 list");. retu
1630: 72 6e 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 rn;. }.. /* If
1640: 20 77 65 20 68 61 76 65 20 61 6c 6c 20 74 68 65 we have all the
1650: 20 6e 65 63 65 73 73 61 72 79 20 69 6e 66 6f 72 necessary infor
1660: 6d 61 74 69 6f 6e 2c 20 77 72 69 74 65 20 74 68 mation, write th
1670: 65 20 6e 65 77 20 6f 72 0a 20 20 2a 2a 20 6d 6f e new or. ** mo
1680: 64 69 66 69 65 64 20 75 73 65 72 20 72 65 63 6f dified user reco
1690: 72 64 2e 20 20 41 66 74 65 72 20 77 72 69 74 69 rd. After writi
16a0: 6e 67 20 74 68 65 20 75 73 65 72 20 72 65 63 6f ng the user reco
16b0: 72 64 2c 20 72 65 64 69 72 65 63 74 0a 20 20 2a rd, redirect. *
16c0: 2a 20 74 6f 20 74 68 65 20 70 61 67 65 20 74 68 * to the page th
16d0: 61 74 20 64 69 73 70 6c 61 79 73 20 61 20 6c 69 at displays a li
16e0: 73 74 20 6f 66 20 75 73 65 72 73 2e 0a 20 20 2a st of users.. *
16f0: 2f 0a 20 20 64 6f 57 72 69 74 65 20 3d 20 63 67 /. doWrite = cg
1700: 69 5f 61 6c 6c 28 22 6c 6f 67 69 6e 22 2c 22 69 i_all("login","i
1710: 6e 66 6f 22 2c 22 70 77 22 29 20 26 26 20 21 68 nfo","pw") && !h
1720: 69 67 68 65 72 55 73 65 72 3b 0a 20 20 69 66 28 igherUser;. if(
1730: 20 64 6f 57 72 69 74 65 20 29 7b 0a 20 20 20 20 doWrite ){.
1740: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50 77 3b const char *zPw;
1750: 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 . const char
1760: 2a 7a 4c 6f 67 69 6e 3b 0a 20 20 20 20 63 68 61 *zLogin;. cha
1770: 72 20 7a 43 61 70 5b 33 30 5d 3b 0a 20 20 20 20 r zCap[30];.
1780: 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20 20 20 69 int i = 0;. i
1790: 6e 74 20 61 61 20 3d 20 50 28 22 61 61 22 29 21 nt aa = P("aa")!
17a0: 3d 30 3b 0a 20 20 20 20 69 6e 74 20 61 64 20 3d =0;. int ad =
17b0: 20 50 28 22 61 64 22 29 21 3d 30 3b 0a 20 20 20 P("ad")!=0;.
17c0: 20 69 6e 74 20 61 69 20 3d 20 50 28 22 61 69 22 int ai = P("ai"
17d0: 29 21 3d 30 3b 0a 20 20 20 20 69 6e 74 20 61 6a )!=0;. int aj
17e0: 20 3d 20 50 28 22 61 6a 22 29 21 3d 30 3b 0a 20 = P("aj")!=0;.
17f0: 20 20 20 69 6e 74 20 61 6b 20 3d 20 50 28 22 61 int ak = P("a
1800: 6b 22 29 21 3d 30 3b 0a 20 20 20 20 69 6e 74 20 k")!=0;. int
1810: 61 6e 20 3d 20 50 28 22 61 6e 22 29 21 3d 30 3b an = P("an")!=0;
1820: 0a 20 20 20 20 69 6e 74 20 61 6f 20 3d 20 50 28 . int ao = P(
1830: 22 61 6f 22 29 21 3d 30 3b 0a 20 20 20 20 69 6e "ao")!=0;. in
1840: 74 20 61 70 20 3d 20 50 28 22 61 70 22 29 21 3d t ap = P("ap")!=
1850: 30 3b 0a 20 20 20 20 69 6e 74 20 61 71 20 3d 20 0;. int aq =
1860: 50 28 22 61 71 22 29 21 3d 30 3b 0a 20 20 20 20 P("aq")!=0;.
1870: 69 6e 74 20 61 72 20 3d 20 50 28 22 61 72 22 29 int ar = P("ar")
1880: 21 3d 30 3b 0a 20 20 20 20 69 6e 74 20 61 73 20 !=0;. int as
1890: 3d 20 67 2e 6f 6b 53 65 74 75 70 20 26 26 20 50 = g.okSetup && P
18a0: 28 22 61 73 22 29 21 3d 30 3b 0a 20 20 20 20 69 ("as")!=0;. i
18b0: 6e 74 20 61 77 20 3d 20 50 28 22 61 77 22 29 21 nt aw = P("aw")!
18c0: 3d 30 3b 0a 20 20 20 20 69 6e 74 20 61 63 20 3d =0;. int ac =
18d0: 20 50 28 22 61 63 22 29 21 3d 30 3b 0a 20 20 20 P("ac")!=0;.
18e0: 20 69 6e 74 20 61 66 20 3d 20 50 28 22 61 66 22 int af = P("af"
18f0: 29 21 3d 30 3b 0a 20 20 20 20 69 6e 74 20 61 6d )!=0;. int am
1900: 20 3d 20 50 28 22 61 6d 22 29 21 3d 30 3b 0a 20 = P("am")!=0;.
1910: 20 20 20 69 6e 74 20 61 68 20 3d 20 50 28 22 61 int ah = P("a
1920: 68 22 29 21 3d 30 3b 0a 20 20 20 20 69 6e 74 20 h")!=0;. int
1930: 61 67 20 3d 20 50 28 22 61 67 22 29 21 3d 30 3b ag = P("ag")!=0;
1940: 0a 20 20 20 20 69 66 28 20 61 61 20 29 7b 20 7a . if( aa ){ z
1950: 43 61 70 5b 69 2b 2b 5d 20 3d 20 27 61 27 3b 20 Cap[i++] = 'a';
1960: 7d 0a 20 20 20 20 69 66 28 20 61 63 20 29 7b 20 }. if( ac ){
1970: 7a 43 61 70 5b 69 2b 2b 5d 20 3d 20 27 63 27 3b zCap[i++] = 'c';
1980: 20 7d 0a 20 20 20 20 69 66 28 20 61 64 20 29 7b }. if( ad ){
1990: 20 7a 43 61 70 5b 69 2b 2b 5d 20 3d 20 27 64 27 zCap[i++] = 'd'
19a0: 3b 20 7d 0a 20 20 20 20 69 66 28 20 61 66 20 29 ; }. if( af )
19b0: 7b 20 7a 43 61 70 5b 69 2b 2b 5d 20 3d 20 27 66 { zCap[i++] = 'f
19c0: 27 3b 20 7d 0a 20 20 20 20 69 66 28 20 61 68 20 '; }. if( ah
19d0: 29 7b 20 7a 43 61 70 5b 69 2b 2b 5d 20 3d 20 27 ){ zCap[i++] = '
19e0: 68 27 3b 20 7d 0a 20 20 20 20 69 66 28 20 61 67 h'; }. if( ag
19f0: 20 29 7b 20 7a 43 61 70 5b 69 2b 2b 5d 20 3d 20 ){ zCap[i++] =
1a00: 27 67 27 3b 20 7d 0a 20 20 20 20 69 66 28 20 61 'g'; }. if( a
1a10: 69 20 29 7b 20 7a 43 61 70 5b 69 2b 2b 5d 20 3d i ){ zCap[i++] =
1a20: 20 27 69 27 3b 20 7d 0a 20 20 20 20 69 66 28 20 'i'; }. if(
1a30: 61 6a 20 29 7b 20 7a 43 61 70 5b 69 2b 2b 5d 20 aj ){ zCap[i++]
1a40: 3d 20 27 6a 27 3b 20 7d 0a 20 20 20 20 69 66 28 = 'j'; }. if(
1a50: 20 61 6b 20 29 7b 20 7a 43 61 70 5b 69 2b 2b 5d ak ){ zCap[i++]
1a60: 20 3d 20 27 6b 27 3b 20 7d 0a 20 20 20 20 69 66 = 'k'; }. if
1a70: 28 20 61 6d 20 29 7b 20 7a 43 61 70 5b 69 2b 2b ( am ){ zCap[i++
1a80: 5d 20 3d 20 27 6d 27 3b 20 7d 0a 20 20 20 20 69 ] = 'm'; }. i
1a90: 66 28 20 61 6e 20 29 7b 20 7a 43 61 70 5b 69 2b f( an ){ zCap[i+
1aa0: 2b 5d 20 3d 20 27 6e 27 3b 20 7d 0a 20 20 20 20 +] = 'n'; }.
1ab0: 69 66 28 20 61 6f 20 29 7b 20 7a 43 61 70 5b 69 if( ao ){ zCap[i
1ac0: 2b 2b 5d 20 3d 20 27 6f 27 3b 20 7d 0a 20 20 20 ++] = 'o'; }.
1ad0: 20 69 66 28 20 61 70 20 29 7b 20 7a 43 61 70 5b if( ap ){ zCap[
1ae0: 69 2b 2b 5d 20 3d 20 27 70 27 3b 20 7d 0a 20 20 i++] = 'p'; }.
1af0: 20 20 69 66 28 20 61 71 20 29 7b 20 7a 43 61 70 if( aq ){ zCap
1b00: 5b 69 2b 2b 5d 20 3d 20 27 71 27 3b 20 7d 0a 20 [i++] = 'q'; }.
1b10: 20 20 20 69 66 28 20 61 72 20 29 7b 20 7a 43 61 if( ar ){ zCa
1b20: 70 5b 69 2b 2b 5d 20 3d 20 27 72 27 3b 20 7d 0a p[i++] = 'r'; }.
1b30: 20 20 20 20 69 66 28 20 61 73 20 29 7b 20 7a 43 if( as ){ zC
1b40: 61 70 5b 69 2b 2b 5d 20 3d 20 27 73 27 3b 20 7d ap[i++] = 's'; }
1b50: 0a 20 20 20 20 69 66 28 20 61 77 20 29 7b 20 7a . if( aw ){ z
1b60: 43 61 70 5b 69 2b 2b 5d 20 3d 20 27 77 27 3b 20 Cap[i++] = 'w';
1b70: 7d 0a 0a 20 20 20 20 7a 43 61 70 5b 69 5d 20 3d }.. zCap[i] =
1b80: 20 30 3b 0a 20 20 20 20 7a 50 77 20 3d 20 50 28 0;. zPw = P(
1b90: 22 70 77 22 29 3b 0a 20 20 20 20 69 66 28 20 7a "pw");. if( z
1ba0: 50 77 3d 3d 30 20 7c 7c 20 7a 50 77 5b 30 5d 3d Pw==0 || zPw[0]=
1bb0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 7a 50 77 20 =0 ){. zPw
1bc0: 3d 20 64 62 5f 74 65 78 74 28 30 2c 20 22 53 45 = db_text(0, "SE
1bd0: 4c 45 43 54 20 70 77 20 46 52 4f 4d 20 75 73 65 LECT pw FROM use
1be0: 72 20 57 48 45 52 45 20 75 69 64 3d 25 64 22 2c r WHERE uid=%d",
1bf0: 20 75 69 64 29 3b 0a 20 20 20 20 7d 0a 20 20 20 uid);. }.
1c00: 20 7a 4c 6f 67 69 6e 20 3d 20 50 28 22 6c 6f 67 zLogin = P("log
1c10: 69 6e 22 29 3b 0a 20 20 20 20 69 66 28 20 75 69 in");. if( ui
1c20: 64 3e 30 20 26 26 20 0a 20 20 20 20 20 20 20 20 d>0 && .
1c30: 64 62 5f 65 78 69 73 74 73 28 22 53 45 4c 45 43 db_exists("SELEC
1c40: 54 20 31 20 46 52 4f 4d 20 75 73 65 72 20 57 48 T 1 FROM user WH
1c50: 45 52 45 20 6c 6f 67 69 6e 3d 25 51 20 41 4e 44 ERE login=%Q AND
1c60: 20 75 69 64 21 3d 25 64 22 2c 20 7a 4c 6f 67 69 uid!=%d", zLogi
1c70: 6e 2c 20 75 69 64 29 0a 20 20 20 20 29 7b 0a 20 n, uid). ){.
1c80: 20 20 20 20 20 73 74 79 6c 65 5f 68 65 61 64 65 style_heade
1c90: 72 28 22 55 73 65 72 20 43 72 65 61 74 69 6f 6e r("User Creation
1ca0: 20 45 72 72 6f 72 22 29 3b 0a 20 20 20 20 20 20 Error");.
1cb0: 40 20 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 72 @ <font color="r
1cc0: 65 64 22 3e 4c 6f 67 69 6e 20 22 25 68 28 7a 4c ed">Login "%h(zL
1cd0: 6f 67 69 6e 29 22 20 69 73 20 61 6c 72 65 61 64 ogin)" is alread
1ce0: 79 20 75 73 65 64 20 62 79 20 61 20 64 69 66 66 y used by a diff
1cf0: 65 72 65 6e 74 0a 20 20 20 20 20 20 40 20 75 73 erent. @ us
1d00: 65 72 2e 3c 2f 66 6f 6e 74 3e 0a 20 20 20 20 20 er.</font>.
1d10: 20 40 0a 20 20 20 20 20 20 40 20 3c 70 3e 3c 61 @. @ <p><a
1d20: 20 68 72 65 66 3d 22 73 65 74 75 70 5f 75 65 64 href="setup_ued
1d30: 69 74 3f 69 64 3d 25 64 28 75 69 64 29 29 3e 5b it?id=%d(uid))>[
1d40: 42 75 6d 6d 65 72 5d 3c 2f 61 3e 3c 2f 70 3e 0a Bummer]</a></p>.
1d50: 20 20 20 20 20 20 73 74 79 6c 65 5f 66 6f 6f 74 style_foot
1d60: 65 72 28 29 3b 0a 20 20 20 20 20 20 72 65 74 75 er();. retu
1d70: 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 rn;. }. db
1d80: 5f 6d 75 6c 74 69 5f 65 78 65 63 28 0a 20 20 20 _multi_exec(.
1d90: 20 20 20 20 22 52 45 50 4c 41 43 45 20 49 4e 54 "REPLACE INT
1da0: 4f 20 75 73 65 72 28 75 69 64 2c 6c 6f 67 69 6e O user(uid,login
1db0: 2c 69 6e 66 6f 2c 70 77 2c 63 61 70 29 20 22 0a ,info,pw,cap) ".
1dc0: 20 20 20 20 20 20 20 22 56 41 4c 55 45 53 28 6e "VALUES(n
1dd0: 75 6c 6c 69 66 28 25 64 2c 30 29 2c 25 51 2c 25 ullif(%d,0),%Q,%
1de0: 51 2c 25 51 2c 27 25 73 27 29 22 2c 0a 20 20 20 Q,%Q,'%s')",.
1df0: 20 20 20 75 69 64 2c 20 50 28 22 6c 6f 67 69 6e uid, P("login
1e00: 22 29 2c 20 50 28 22 69 6e 66 6f 22 29 2c 20 7a "), P("info"), z
1e10: 50 77 2c 20 7a 43 61 70 0a 20 20 20 20 29 3b 0a Pw, zCap. );.
1e20: 20 20 20 20 63 67 69 5f 72 65 64 69 72 65 63 74 cgi_redirect
1e30: 28 22 73 65 74 75 70 5f 75 6c 69 73 74 22 29 3b ("setup_ulist");
1e40: 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d . return;. }
1e50: 0a 0a 20 20 2f 2a 20 4c 6f 61 64 20 74 68 65 20 .. /* Load the
1e60: 65 78 69 73 74 69 6e 67 20 69 6e 66 6f 72 6d 61 existing informa
1e70: 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 75 tion about the u
1e80: 73 65 72 2c 20 69 66 20 61 6e 79 0a 20 20 2a 2f ser, if any. */
1e90: 0a 20 20 7a 4c 6f 67 69 6e 20 3d 20 22 22 3b 0a . zLogin = "";.
1ea0: 20 20 7a 49 6e 66 6f 20 3d 20 22 22 3b 0a 20 20 zInfo = "";.
1eb0: 7a 43 61 70 20 3d 20 22 22 3b 0a 20 20 6f 61 61 zCap = "";. oaa
1ec0: 20 3d 20 6f 61 63 20 3d 20 6f 61 64 20 3d 20 6f = oac = oad = o
1ed0: 61 66 20 3d 20 6f 61 67 20 3d 20 6f 61 68 20 3d af = oag = oah =
1ee0: 20 6f 61 69 20 3d 20 6f 61 6a 20 3d 20 6f 61 6b oai = oaj = oak
1ef0: 20 3d 20 6f 61 6d 20 3d 0a 20 20 20 20 20 20 20 = oam =.
1f00: 20 6f 61 6e 20 3d 20 6f 61 6f 20 3d 20 6f 61 70 oan = oao = oap
1f10: 20 3d 20 6f 61 71 20 3d 20 6f 61 72 20 3d 20 6f = oaq = oar = o
1f20: 61 73 20 3d 20 6f 61 77 20 3d 20 22 22 3b 0a 20 as = oaw = "";.
1f30: 20 69 66 28 20 75 69 64 20 29 7b 0a 20 20 20 20 if( uid ){.
1f40: 7a 4c 6f 67 69 6e 20 3d 20 64 62 5f 74 65 78 74 zLogin = db_text
1f50: 28 22 22 2c 20 22 53 45 4c 45 43 54 20 6c 6f 67 ("", "SELECT log
1f60: 69 6e 20 46 52 4f 4d 20 75 73 65 72 20 57 48 45 in FROM user WHE
1f70: 52 45 20 75 69 64 3d 25 64 22 2c 20 75 69 64 29 RE uid=%d", uid)
1f80: 3b 0a 20 20 20 20 7a 49 6e 66 6f 20 3d 20 64 62 ;. zInfo = db
1f90: 5f 74 65 78 74 28 22 22 2c 20 22 53 45 4c 45 43 _text("", "SELEC
1fa0: 54 20 69 6e 66 6f 20 46 52 4f 4d 20 75 73 65 72 T info FROM user
1fb0: 20 57 48 45 52 45 20 75 69 64 3d 25 64 22 2c 20 WHERE uid=%d",
1fc0: 75 69 64 29 3b 0a 20 20 20 20 7a 43 61 70 20 3d uid);. zCap =
1fd0: 20 64 62 5f 74 65 78 74 28 22 22 2c 20 22 53 45 db_text("", "SE
1fe0: 4c 45 43 54 20 63 61 70 20 46 52 4f 4d 20 75 73 LECT cap FROM us
1ff0: 65 72 20 57 48 45 52 45 20 75 69 64 3d 25 64 22 er WHERE uid=%d"
2000: 2c 20 75 69 64 29 3b 0a 20 20 20 20 69 66 28 20 , uid);. if(
2010: 73 74 72 63 68 72 28 7a 43 61 70 2c 20 27 61 27 strchr(zCap, 'a'
2020: 29 20 29 20 6f 61 61 20 3d 20 22 20 63 68 65 63 ) ) oaa = " chec
2030: 6b 65 64 22 3b 0a 20 20 20 20 69 66 28 20 73 74 ked";. if( st
2040: 72 63 68 72 28 7a 43 61 70 2c 20 27 63 27 29 20 rchr(zCap, 'c')
2050: 29 20 6f 61 63 20 3d 20 22 20 63 68 65 63 6b 65 ) oac = " checke
2060: 64 22 3b 0a 20 20 20 20 69 66 28 20 73 74 72 63 d";. if( strc
2070: 68 72 28 7a 43 61 70 2c 20 27 64 27 29 20 29 20 hr(zCap, 'd') )
2080: 6f 61 64 20 3d 20 22 20 63 68 65 63 6b 65 64 22 oad = " checked"
2090: 3b 0a 20 20 20 20 69 66 28 20 73 74 72 63 68 72 ;. if( strchr
20a0: 28 7a 43 61 70 2c 20 27 66 27 29 20 29 20 6f 61 (zCap, 'f') ) oa
20b0: 66 20 3d 20 22 20 63 68 65 63 6b 65 64 22 3b 0a f = " checked";.
20c0: 20 20 20 20 69 66 28 20 73 74 72 63 68 72 28 7a if( strchr(z
20d0: 43 61 70 2c 20 27 67 27 29 20 29 20 6f 61 67 20 Cap, 'g') ) oag
20e0: 3d 20 22 20 63 68 65 63 6b 65 64 22 3b 0a 20 20 = " checked";.
20f0: 20 20 69 66 28 20 73 74 72 63 68 72 28 7a 43 61 if( strchr(zCa
2100: 70 2c 20 27 68 27 29 20 29 20 6f 61 68 20 3d 20 p, 'h') ) oah =
2110: 22 20 63 68 65 63 6b 65 64 22 3b 0a 20 20 20 20 " checked";.
2120: 69 66 28 20 73 74 72 63 68 72 28 7a 43 61 70 2c if( strchr(zCap,
2130: 20 27 69 27 29 20 29 20 6f 61 69 20 3d 20 22 20 'i') ) oai = "
2140: 63 68 65 63 6b 65 64 22 3b 0a 20 20 20 20 69 66 checked";. if
2150: 28 20 73 74 72 63 68 72 28 7a 43 61 70 2c 20 27 ( strchr(zCap, '
2160: 6a 27 29 20 29 20 6f 61 6a 20 3d 20 22 20 63 68 j') ) oaj = " ch
2170: 65 63 6b 65 64 22 3b 0a 20 20 20 20 69 66 28 20 ecked";. if(
2180: 73 74 72 63 68 72 28 7a 43 61 70 2c 20 27 6b 27 strchr(zCap, 'k'
2190: 29 20 29 20 6f 61 6b 20 3d 20 22 20 63 68 65 63 ) ) oak = " chec
21a0: 6b 65 64 22 3b 0a 20 20 20 20 69 66 28 20 73 74 ked";. if( st
21b0: 72 63 68 72 28 7a 43 61 70 2c 20 27 6d 27 29 20 rchr(zCap, 'm')
21c0: 29 20 6f 61 6d 20 3d 20 22 20 63 68 65 63 6b 65 ) oam = " checke
21d0: 64 22 3b 0a 20 20 20 20 69 66 28 20 73 74 72 63 d";. if( strc
21e0: 68 72 28 7a 43 61 70 2c 20 27 6e 27 29 20 29 20 hr(zCap, 'n') )
21f0: 6f 61 6e 20 3d 20 22 20 63 68 65 63 6b 65 64 22 oan = " checked"
2200: 3b 0a 20 20 20 20 69 66 28 20 73 74 72 63 68 72 ;. if( strchr
2210: 28 7a 43 61 70 2c 20 27 6f 27 29 20 29 20 6f 61 (zCap, 'o') ) oa
2220: 6f 20 3d 20 22 20 63 68 65 63 6b 65 64 22 3b 0a o = " checked";.
2230: 20 20 20 20 69 66 28 20 73 74 72 63 68 72 28 7a if( strchr(z
2240: 43 61 70 2c 20 27 70 27 29 20 29 20 6f 61 70 20 Cap, 'p') ) oap
2250: 3d 20 22 20 63 68 65 63 6b 65 64 22 3b 0a 20 20 = " checked";.
2260: 20 20 69 66 28 20 73 74 72 63 68 72 28 7a 43 61 if( strchr(zCa
2270: 70 2c 20 27 71 27 29 20 29 20 6f 61 71 20 3d 20 p, 'q') ) oaq =
2280: 22 20 63 68 65 63 6b 65 64 22 3b 0a 20 20 20 20 " checked";.
2290: 69 66 28 20 73 74 72 63 68 72 28 7a 43 61 70 2c if( strchr(zCap,
22a0: 20 27 72 27 29 20 29 20 6f 61 72 20 3d 20 22 20 'r') ) oar = "
22b0: 63 68 65 63 6b 65 64 22 3b 0a 20 20 20 20 69 66 checked";. if
22c0: 28 20 73 74 72 63 68 72 28 7a 43 61 70 2c 20 27 ( strchr(zCap, '
22d0: 73 27 29 20 29 20 6f 61 73 20 3d 20 22 20 63 68 s') ) oas = " ch
22e0: 65 63 6b 65 64 22 3b 0a 20 20 20 20 69 66 28 20 ecked";. if(
22f0: 73 74 72 63 68 72 28 7a 43 61 70 2c 20 27 77 27 strchr(zCap, 'w'
2300: 29 20 29 20 6f 61 77 20 3d 20 22 20 63 68 65 63 ) ) oaw = " chec
2310: 6b 65 64 22 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 ked";. }.. /*
2320: 42 65 67 69 6e 20 67 65 6e 65 72 61 74 69 6e 67 Begin generating
2330: 20 74 68 65 20 70 61 67 65 0a 20 20 2a 2f 0a 20 the page. */.
2340: 20 73 74 79 6c 65 5f 73 75 62 6d 65 6e 75 5f 65 style_submenu_e
2350: 6c 65 6d 65 6e 74 28 22 43 61 6e 63 65 6c 22 2c lement("Cancel",
2360: 20 22 43 61 6e 63 65 6c 22 2c 20 22 73 65 74 75 "Cancel", "setu
2370: 70 5f 75 6c 69 73 74 22 29 3b 0a 20 20 69 66 28 p_ulist");. if(
2380: 20 75 69 64 20 29 7b 0a 20 20 20 20 73 74 79 6c uid ){. styl
2390: 65 5f 68 65 61 64 65 72 28 6d 70 72 69 6e 74 66 e_header(mprintf
23a0: 28 22 45 64 69 74 20 55 73 65 72 20 25 68 22 2c ("Edit User %h",
23b0: 20 7a 4c 6f 67 69 6e 29 29 3b 0a 20 20 7d 65 6c zLogin));. }el
23c0: 73 65 7b 0a 20 20 20 20 73 74 79 6c 65 5f 68 65 se{. style_he
23d0: 61 64 65 72 28 22 41 64 64 20 41 20 4e 65 77 20 ader("Add A New
23e0: 55 73 65 72 22 29 3b 0a 20 20 7d 0a 20 20 40 20 User");. }. @
23f0: 3c 74 61 62 6c 65 20 61 6c 69 67 6e 3d 22 6c 65 <table align="le
2400: 66 74 22 20 68 73 70 61 63 65 3d 22 32 30 22 20 ft" hspace="20"
2410: 76 73 70 61 63 65 3d 22 31 30 22 3e 3c 74 72 3e vspace="10"><tr>
2420: 3c 74 64 3e 0a 20 20 40 20 3c 66 6f 72 6d 20 61 <td>. @ <form a
2430: 63 74 69 6f 6e 3d 22 25 73 28 67 2e 7a 50 61 74 ction="%s(g.zPat
2440: 68 29 22 20 6d 65 74 68 6f 64 3d 22 50 4f 53 54 h)" method="POST
2450: 22 3e 0a 20 20 40 20 3c 74 61 62 6c 65 3e 0a 20 ">. @ <table>.
2460: 20 40 20 3c 74 72 3e 0a 20 20 40 20 20 20 3c 74 @ <tr>. @ <t
2470: 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e d align="right">
2480: 3c 6e 6f 62 72 3e 55 73 65 72 20 49 44 3a 3c 2f <nobr>User ID:</
2490: 6e 6f 62 72 3e 3c 2f 74 64 3e 0a 20 20 69 66 28 nobr></td>. if(
24a0: 20 75 69 64 20 29 7b 0a 20 20 20 20 40 20 20 20 uid ){. @
24b0: 3c 74 64 3e 25 64 28 75 69 64 29 20 3c 69 6e 70 <td>%d(uid) <inp
24c0: 75 74 20 74 79 70 65 3d 22 68 69 64 64 65 6e 22 ut type="hidden"
24d0: 20 6e 61 6d 65 3d 22 69 64 22 20 76 61 6c 75 65 name="id" value
24e0: 3d 22 25 64 28 75 69 64 29 22 3e 3c 2f 74 64 3e ="%d(uid)"></td>
24f0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 40 20 . }else{. @
2500: 20 20 3c 74 64 3e 28 6e 65 77 20 75 73 65 72 29 <td>(new user)
2510: 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 68 69 64 <input type="hid
2520: 64 65 6e 22 20 6e 61 6d 65 3d 22 69 64 22 20 76 den" name="id" v
2530: 61 6c 75 65 3d 30 3e 3c 2f 74 64 3e 0a 20 20 7d alue=0></td>. }
2540: 0a 20 20 40 20 3c 2f 74 72 3e 0a 20 20 40 20 3c . @ </tr>. @ <
2550: 74 72 3e 0a 20 20 40 20 20 20 3c 74 64 20 61 6c tr>. @ <td al
2560: 69 67 6e 3d 22 72 69 67 68 74 22 3e 3c 6e 6f 62 ign="right"><nob
2570: 72 3e 4c 6f 67 69 6e 3a 3c 2f 6e 6f 62 72 3e 3c r>Login:</nobr><
2580: 2f 74 64 3e 0a 20 20 40 20 20 20 3c 74 64 3e 3c /td>. @ <td><
2590: 69 6e 70 75 74 20 74 79 70 65 3d 22 74 65 78 74 input type="text
25a0: 22 20 6e 61 6d 65 3d 22 6c 6f 67 69 6e 22 20 76 " name="login" v
25b0: 61 6c 75 65 3d 22 25 68 28 7a 4c 6f 67 69 6e 29 alue="%h(zLogin)
25c0: 22 3e 3c 2f 74 64 3e 0a 20 20 40 20 3c 2f 74 72 "></td>. @ </tr
25d0: 3e 0a 20 20 40 20 3c 74 72 3e 0a 20 20 40 20 20 >. @ <tr>. @
25e0: 20 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 <td align="righ
25f0: 74 22 3e 3c 6e 6f 62 72 3e 43 6f 6e 74 61 63 74 t"><nobr>Contact
2600: 26 6e 62 73 70 3b 49 6e 66 6f 3a 3c 2f 6e 6f 62 Info:</nob
2610: 72 3e 3c 2f 74 64 3e 0a 20 20 40 20 20 20 3c 74 r></td>. @ <t
2620: 64 3e 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 74 d><input type="t
2630: 65 78 74 22 20 6e 61 6d 65 3d 22 69 6e 66 6f 22 ext" name="info"
2640: 20 73 69 7a 65 3d 34 30 20 76 61 6c 75 65 3d 22 size=40 value="
2650: 25 68 28 7a 49 6e 66 6f 29 22 3e 3c 2f 74 64 3e %h(zInfo)"></td>
2660: 0a 20 20 40 20 3c 2f 74 72 3e 0a 20 20 40 20 3c . @ </tr>. @ <
2670: 74 72 3e 0a 20 20 40 20 20 20 3c 74 64 20 61 6c tr>. @ <td al
2680: 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 ign="right" vali
2690: 67 6e 3d 22 74 6f 70 22 3e 43 61 70 61 62 69 6c gn="top">Capabil
26a0: 69 74 69 65 73 3a 3c 2f 74 64 3e 0a 20 20 40 20 ities:</td>. @
26b0: 20 20 3c 74 64 3e 0a 20 20 69 66 28 20 67 2e 6f <td>. if( g.o
26c0: 6b 53 65 74 75 70 20 29 7b 0a 20 20 20 20 40 20 kSetup ){. @
26d0: 20 20 20 20 3c 69 6e 70 75 74 20 74 79 70 65 3d <input type=
26e0: 22 63 68 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d "checkbox" name=
26f0: 22 61 73 22 25 73 28 6f 61 73 29 3e 53 65 74 75 "as"%s(oas)>Setu
2700: 70 3c 2f 69 6e 70 75 74 3e 3c 62 72 3e 0a 20 20 p</input><br>.
2710: 7d 0a 20 20 40 20 20 20 20 20 3c 69 6e 70 75 74 }. @ <input
2720: 20 74 79 70 65 3d 22 63 68 65 63 6b 62 6f 78 22 type="checkbox"
2730: 20 6e 61 6d 65 3d 22 61 61 22 25 73 28 6f 61 61 name="aa"%s(oaa
2740: 29 3e 41 64 6d 69 6e 3c 2f 69 6e 70 75 74 3e 3c )>Admin</input><
2750: 62 72 3e 0a 20 20 40 20 20 20 20 20 3c 69 6e 70 br>. @ <inp
2760: 75 74 20 74 79 70 65 3d 22 63 68 65 63 6b 62 6f ut type="checkbo
2770: 78 22 20 6e 61 6d 65 3d 22 61 64 22 25 73 28 6f x" name="ad"%s(o
2780: 61 64 29 3e 44 65 6c 65 74 65 3c 2f 69 6e 70 75 ad)>Delete</inpu
2790: 74 3e 3c 62 72 3e 0a 20 20 40 20 20 20 20 20 3c t><br>. @ <
27a0: 69 6e 70 75 74 20 74 79 70 65 3d 22 63 68 65 63 input type="chec
27b0: 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 61 70 22 25 kbox" name="ap"%
27c0: 73 28 6f 61 70 29 3e 50 61 73 73 77 6f 72 64 3c s(oap)>Password<
27d0: 2f 69 6e 70 75 74 3e 3c 62 72 3e 0a 20 20 40 20 /input><br>. @
27e0: 20 20 20 20 3c 69 6e 70 75 74 20 74 79 70 65 3d <input type=
27f0: 22 63 68 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d "checkbox" name=
2800: 22 61 71 22 25 73 28 6f 61 71 29 3e 51 75 65 72 "aq"%s(oaq)>Quer
2810: 79 3c 2f 69 6e 70 75 74 3e 3c 62 72 3e 0a 20 20 y</input><br>.
2820: 40 20 20 20 20 20 3c 69 6e 70 75 74 20 74 79 70 @ <input typ
2830: 65 3d 22 63 68 65 63 6b 62 6f 78 22 20 6e 61 6d e="checkbox" nam
2840: 65 3d 22 61 69 22 25 73 28 6f 61 69 29 3e 43 68 e="ai"%s(oai)>Ch
2850: 65 63 6b 2d 49 6e 3c 2f 69 6e 70 75 74 3e 3c 62 eck-In</input><b
2860: 72 3e 0a 20 20 40 20 20 20 20 20 3c 69 6e 70 75 r>. @ <inpu
2870: 74 20 74 79 70 65 3d 22 63 68 65 63 6b 62 6f 78 t type="checkbox
2880: 22 20 6e 61 6d 65 3d 22 61 6f 22 25 73 28 6f 61 " name="ao"%s(oa
2890: 6f 29 3e 43 68 65 63 6b 2d 4f 75 74 3c 2f 69 6e o)>Check-Out</in
28a0: 70 75 74 3e 3c 62 72 3e 0a 20 20 40 20 20 20 20 put><br>. @
28b0: 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 63 68 <input type="ch
28c0: 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 61 68 eckbox" name="ah
28d0: 22 25 73 28 6f 61 68 29 3e 48 69 73 74 6f 72 79 "%s(oah)>History
28e0: 3c 2f 69 6e 70 75 74 3e 3c 62 72 3e 0a 20 20 40 </input><br>. @
28f0: 20 20 20 20 20 3c 69 6e 70 75 74 20 74 79 70 65 <input type
2900: 3d 22 63 68 65 63 6b 62 6f 78 22 20 6e 61 6d 65 ="checkbox" name
2910: 3d 22 61 67 22 25 73 28 6f 61 67 29 3e 43 6c 6f ="ag"%s(oag)>Clo
2920: 6e 65 3c 2f 69 6e 70 75 74 3e 3c 62 72 3e 0a 20 ne</input><br>.
2930: 20 40 20 20 20 20 20 3c 69 6e 70 75 74 20 74 79 @ <input ty
2940: 70 65 3d 22 63 68 65 63 6b 62 6f 78 22 20 6e 61 pe="checkbox" na
2950: 6d 65 3d 22 61 6a 22 25 73 28 6f 61 6a 29 3e 52 me="aj"%s(oaj)>R
2960: 65 61 64 20 57 69 6b 69 3c 2f 69 6e 70 75 74 3e ead Wiki</input>
2970: 3c 62 72 3e 0a 20 20 40 20 20 20 20 20 3c 69 6e <br>. @ <in
2980: 70 75 74 20 74 79 70 65 3d 22 63 68 65 63 6b 62 put type="checkb
2990: 6f 78 22 20 6e 61 6d 65 3d 22 61 66 22 25 73 28 ox" name="af"%s(
29a0: 6f 61 66 29 3e 4e 65 77 20 57 69 6b 69 3c 2f 69 oaf)>New Wiki</i
29b0: 6e 70 75 74 3e 3c 62 72 3e 0a 20 20 40 20 20 20 nput><br>. @
29c0: 20 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 63 <input type="c
29d0: 68 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 61 heckbox" name="a
29e0: 6d 22 25 73 28 6f 61 6d 29 3e 41 70 70 65 6e 64 m"%s(oam)>Append
29f0: 20 57 69 6b 69 3c 2f 69 6e 70 75 74 3e 3c 62 72 Wiki</input><br
2a00: 3e 0a 20 20 40 20 20 20 20 20 3c 69 6e 70 75 74 >. @ <input
2a10: 20 74 79 70 65 3d 22 63 68 65 63 6b 62 6f 78 22 type="checkbox"
2a20: 20 6e 61 6d 65 3d 22 61 6b 22 25 73 28 6f 61 6b name="ak"%s(oak
2a30: 29 3e 57 72 69 74 65 20 57 69 6b 69 3c 2f 69 6e )>Write Wiki</in
2a40: 70 75 74 3e 3c 62 72 3e 0a 20 20 40 20 20 20 20 put><br>. @
2a50: 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 63 68 <input type="ch
2a60: 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 61 72 eckbox" name="ar
2a70: 22 25 73 28 6f 61 72 29 3e 52 65 61 64 20 54 6b "%s(oar)>Read Tk
2a80: 74 3c 2f 69 6e 70 75 74 3e 3c 62 72 3e 0a 20 20 t</input><br>.
2a90: 40 20 20 20 20 20 3c 69 6e 70 75 74 20 74 79 70 @ <input typ
2aa0: 65 3d 22 63 68 65 63 6b 62 6f 78 22 20 6e 61 6d e="checkbox" nam
2ab0: 65 3d 22 61 6e 22 25 73 28 6f 61 6e 29 3e 4e 65 e="an"%s(oan)>Ne
2ac0: 77 20 54 6b 74 3c 2f 69 6e 70 75 74 3e 3c 62 72 w Tkt</input><br
2ad0: 3e 0a 20 20 40 20 20 20 20 20 3c 69 6e 70 75 74 >. @ <input
2ae0: 20 74 79 70 65 3d 22 63 68 65 63 6b 62 6f 78 22 type="checkbox"
2af0: 20 6e 61 6d 65 3d 22 61 63 22 25 73 28 6f 61 63 name="ac"%s(oac
2b00: 29 3e 41 70 70 65 6e 64 20 54 6b 74 3c 2f 69 6e )>Append Tkt</in
2b10: 70 75 74 3e 3c 62 72 3e 0a 20 20 40 20 20 20 20 put><br>. @
2b20: 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 63 68 <input type="ch
2b30: 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 61 77 eckbox" name="aw
2b40: 22 25 73 28 6f 61 77 29 3e 57 72 69 74 65 20 54 "%s(oaw)>Write T
2b50: 6b 74 3c 2f 69 6e 70 75 74 3e 0a 20 20 40 20 20 kt</input>. @
2b60: 20 3c 2f 74 64 3e 0a 20 20 40 20 3c 2f 74 72 3e </td>. @ </tr>
2b70: 0a 20 20 40 20 3c 74 72 3e 0a 20 20 40 20 20 20 . @ <tr>. @
2b80: 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 <td align="right
2b90: 22 3e 50 61 73 73 77 6f 72 64 3a 3c 2f 74 64 3e ">Password:</td>
2ba0: 0a 20 20 40 20 20 20 3c 74 64 3e 3c 69 6e 70 75 . @ <td><inpu
2bb0: 74 20 74 79 70 65 3d 22 70 61 73 73 77 6f 72 64 t type="password
2bc0: 22 20 6e 61 6d 65 3d 22 70 77 22 20 76 61 6c 75 " name="pw" valu
2bd0: 65 3d 22 22 3e 3c 2f 74 64 3e 0a 20 20 40 20 3c e=""></td>. @ <
2be0: 2f 74 72 3e 0a 20 20 69 66 28 20 21 68 69 67 68 /tr>. if( !high
2bf0: 65 72 55 73 65 72 20 29 7b 0a 20 20 20 20 40 20 erUser ){. @
2c00: 3c 74 72 3e 0a 20 20 20 20 40 20 20 20 3c 74 64 <tr>. @ <td
2c10: 3e 26 6e 62 73 70 3c 2f 74 64 3e 0a 20 20 20 20 > </td>.
2c20: 40 20 20 20 3c 74 64 3e 3c 69 6e 70 75 74 20 74 @ <td><input t
2c30: 79 70 65 3d 22 73 75 62 6d 69 74 22 20 6e 61 6d ype="submit" nam
2c40: 65 3d 22 73 75 62 6d 69 74 22 20 76 61 6c 75 65 e="submit" value
2c50: 3d 22 41 70 70 6c 79 20 43 68 61 6e 67 65 73 22 ="Apply Changes"
2c60: 3e 0a 20 20 20 20 40 20 3c 2f 74 72 3e 0a 20 20 >. @ </tr>.
2c70: 7d 0a 20 20 40 20 3c 2f 74 61 62 6c 65 3e 3c 2f }. @ </table></
2c80: 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e td></tr></table>
2c90: 0a 20 20 40 20 3c 70 3e 3c 62 3e 4e 6f 74 65 73 . @ <p><b>Notes
2ca0: 3a 3c 2f 62 3e 3c 2f 70 3e 0a 20 20 40 20 3c 6f :</b></p>. @ <o
2cb0: 6c 3e 0a 20 20 69 66 28 20 68 69 67 68 65 72 55 l>. if( higherU
2cc0: 73 65 72 20 29 7b 0a 20 20 20 20 40 20 3c 6c 69 ser ){. @ <li
2cd0: 3e 3c 70 3e 0a 20 20 20 20 40 20 55 73 65 72 20 ><p>. @ User
2ce0: 25 68 28 7a 49 64 29 20 68 61 73 20 53 65 74 75 %h(zId) has Setu
2cf0: 70 20 70 72 69 76 69 6c 65 67 65 73 20 61 6e 64 p privileges and
2d00: 20 79 6f 75 20 6f 6e 6c 79 20 68 61 76 65 20 41 you only have A
2d10: 64 6d 69 6e 20 70 72 69 76 69 6c 65 67 65 73 0a dmin privileges.
2d20: 20 20 20 20 40 20 73 6f 20 79 6f 75 20 61 72 65 @ so you are
2d30: 20 6e 6f 74 20 70 65 72 6d 69 74 74 65 64 20 74 not permitted t
2d40: 6f 20 6d 61 6b 65 20 63 68 61 6e 67 65 73 20 74 o make changes t
2d50: 6f 20 25 68 28 7a 49 64 29 2e 0a 20 20 20 20 40 o %h(zId).. @
2d60: 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 20 20 20 20 40 </p></li>. @
2d70: 0a 20 20 7d 0a 20 20 40 0a 20 20 40 20 3c 6c 69 . }. @. @ <li
2d80: 3e 3c 70 3e 0a 20 20 40 20 54 68 65 20 3c 62 3e ><p>. @ The <b>
2d90: 44 65 6c 65 74 65 3c 2f 62 3e 20 70 72 69 76 69 Delete</b> privi
2da0: 6c 65 67 65 20 67 69 76 65 20 74 68 65 20 75 73 lege give the us
2db0: 65 72 20 74 68 65 20 61 62 69 6c 69 74 79 20 74 er the ability t
2dc0: 6f 20 65 72 61 73 65 0a 20 20 40 20 77 69 6b 69 o erase. @ wiki
2dd0: 2c 20 74 69 63 6b 65 74 73 2c 20 61 6e 64 20 61 , tickets, and a
2de0: 74 74 74 61 63 68 6d 65 6e 74 73 20 74 68 61 74 tttachments that
2df0: 20 68 61 76 65 20 62 65 65 6e 20 61 64 64 65 64 have been added
2e00: 20 62 79 20 61 6e 6f 6e 79 6d 6f 75 73 0a 20 20 by anonymous.
2e10: 40 20 75 73 65 72 73 2e 20 20 54 68 69 73 20 63 @ users. This c
2e20: 61 70 61 62 69 6c 69 74 79 20 69 73 20 69 6e 74 apability is int
2e30: 65 6e 64 65 64 20 66 6f 72 20 64 65 6c 65 74 69 ended for deleti
2e40: 6f 6e 20 6f 66 20 73 70 61 6d 2e 0a 20 20 40 20 on of spam.. @
2e50: 3c 2f 70 3e 3c 2f 6c 69 3e 0a 20 20 40 0a 20 20 </p></li>. @.
2e60: 40 20 3c 6c 69 3e 3c 70 3e 0a 20 20 40 20 54 68 @ <li><p>. @ Th
2e70: 65 20 3c 62 3e 51 75 65 72 79 3c 2f 62 3e 20 70 e <b>Query</b> p
2e80: 72 69 76 69 6c 65 67 65 20 61 6c 6c 6f 77 73 20 rivilege allows
2e90: 74 68 65 20 75 73 65 72 20 74 6f 20 63 72 65 61 the user to crea
2ea0: 74 65 20 6f 72 20 65 64 69 74 0a 20 20 40 20 72 te or edit. @ r
2eb0: 65 70 6f 72 74 20 66 6f 72 6d 61 74 73 20 62 79 eport formats by
2ec0: 20 73 70 65 63 69 66 79 69 6e 67 20 61 70 70 72 specifying appr
2ed0: 6f 70 72 69 61 74 65 20 53 51 4c 2e 20 20 55 73 opriate SQL. Us
2ee0: 65 72 73 20 63 61 6e 20 72 75 6e 20 0a 20 20 40 ers can run . @
2ef0: 20 65 78 69 73 74 69 6e 67 20 72 65 70 6f 72 74 existing report
2f00: 73 20 77 69 74 68 6f 75 74 20 74 68 65 20 51 75 s without the Qu
2f10: 65 72 79 20 70 72 69 76 69 6c 65 67 65 2e 0a 20 ery privilege..
2f20: 20 40 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 20 20 40 @ </p></li>. @
2f30: 0a 20 20 40 20 3c 6c 69 3e 3c 70 3e 0a 20 20 40 . @ <li><p>. @
2f40: 20 41 6e 20 3c 62 3e 41 64 6d 69 6e 3c 2f 62 3e An <b>Admin</b>
2f50: 20 75 73 65 72 20 63 61 6e 20 61 64 64 20 6f 74 user can add ot
2f60: 68 65 72 20 75 73 65 72 73 2c 20 63 72 65 61 74 her users, creat
2f70: 65 20 6e 65 77 20 74 69 63 6b 65 74 20 72 65 70 e new ticket rep
2f80: 6f 72 74 0a 20 20 40 20 66 6f 72 6d 61 74 73 2c ort. @ formats,
2f90: 20 61 6e 64 20 63 68 61 6e 67 65 20 73 79 73 74 and change syst
2fa0: 65 6d 20 64 65 66 61 75 6c 74 73 2e 20 20 42 75 em defaults. Bu
2fb0: 74 20 6f 6e 6c 79 20 74 68 65 20 3c 62 3e 53 65 t only the <b>Se
2fc0: 74 75 70 3c 2f 62 3e 20 75 73 65 72 0a 20 20 40 tup</b> user. @
2fd0: 20 69 73 20 61 62 6c 65 20 74 6f 20 63 68 61 6e is able to chan
2fe0: 67 65 20 74 68 65 20 72 65 70 6f 73 69 74 6f 72 ge the repositor
2ff0: 79 20 74 6f 0a 20 20 40 20 77 68 69 63 68 20 74 y to. @ which t
3000: 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 6c his program is l
3010: 69 6e 6b 65 64 2e 0a 20 20 40 20 3c 2f 70 3e 3c inked.. @ </p><
3020: 2f 6c 69 3e 0a 20 20 40 0a 20 20 40 20 3c 6c 69 /li>. @. @ <li
3030: 3e 3c 70 3e 0a 20 20 40 20 54 68 65 20 3c 62 3e ><p>. @ The <b>
3040: 48 69 73 74 6f 72 79 3c 2f 62 3e 20 70 72 69 76 History</b> priv
3050: 69 6c 65 67 65 20 61 6c 6c 6f 77 73 20 61 20 75 ilege allows a u
3060: 73 65 72 20 74 6f 20 73 65 65 20 61 20 74 69 6d ser to see a tim
3070: 65 6c 69 6e 65 0a 20 20 40 20 77 69 74 68 20 68 eline. @ with h
3080: 79 70 65 72 6c 69 6e 6b 73 20 74 6f 20 76 65 72 yperlinks to ver
3090: 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e sion information
30a0: 2c 20 74 6f 20 64 6f 77 6e 6c 6f 61 64 20 5a 49 , to download ZI
30b0: 50 20 61 72 63 68 69 76 65 73 0a 20 20 40 20 6f P archives. @ o
30c0: 66 20 69 6e 64 69 76 69 64 75 61 6c 20 76 65 72 f individual ver
30d0: 73 69 6f 6e 73 2e 0a 20 20 40 20 3c 2f 70 3e 3c sions.. @ </p><
30e0: 2f 6c 69 3e 0a 20 20 40 0a 20 20 40 20 3c 6c 69 /li>. @. @ <li
30f0: 3e 3c 70 3e 0a 20 20 40 20 4e 6f 20 6c 6f 67 69 ><p>. @ No logi
3100: 6e 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f n is required fo
3110: 72 20 75 73 65 72 20 22 3c 62 3e 6e 6f 62 6f 64 r user "<b>nobod
3120: 79 3c 2f 62 3e 22 2e 20 20 54 68 65 20 63 61 70 y</b>". The cap
3130: 61 62 69 6c 69 74 69 65 73 0a 20 20 40 20 6f 66 abilities. @ of
3140: 20 74 68 69 73 20 75 73 65 72 20 61 72 65 20 61 this user are a
3150: 76 61 69 6c 61 62 6c 65 20 74 6f 20 61 6e 79 6f vailable to anyo
3160: 6e 65 20 77 69 74 68 6f 75 74 20 73 75 70 70 6c ne without suppl
3170: 79 69 6e 67 20 61 20 75 73 65 72 6e 61 6d 65 20 ying a username
3180: 6f 72 0a 20 20 40 20 70 61 73 73 77 6f 72 64 2e or. @ password.
3190: 20 20 54 6f 20 64 69 73 61 62 6c 65 20 6e 6f 62 To disable nob
31a0: 6f 64 79 20 61 63 63 65 73 73 2c 20 6d 61 6b 65 ody access, make
31b0: 20 73 75 72 65 20 74 68 65 72 65 20 69 73 20 6e sure there is n
31c0: 6f 20 75 73 65 72 0a 20 20 40 20 77 69 74 68 20 o user. @ with
31d0: 61 6e 20 49 44 20 6f 66 20 3c 62 3e 6e 6f 62 6f an ID of <b>nobo
31e0: 64 79 3c 2f 62 3e 20 6f 72 20 74 68 61 74 20 74 dy</b> or that t
31f0: 68 65 20 6e 6f 62 6f 64 79 20 75 73 65 72 20 68 he nobody user h
3200: 61 73 20 6e 6f 0a 20 20 40 20 63 61 70 61 62 69 as no. @ capabi
3210: 6c 69 74 69 65 73 20 65 6e 61 62 6c 65 64 2e 20 lities enabled.
3220: 20 54 68 65 20 70 61 73 73 77 6f 72 64 20 66 6f The password fo
3230: 72 20 6e 6f 62 6f 64 79 20 69 73 20 69 67 6e 6f r nobody is igno
3240: 72 65 2e 20 20 54 6f 0a 20 20 40 20 61 76 6f 69 re. To. @ avoi
3250: 64 20 70 72 6f 62 6c 65 6d 73 20 77 69 74 68 20 d problems with
3260: 73 70 69 64 65 72 73 20 6f 76 65 72 6c 6f 61 64 spiders overload
3270: 69 6e 67 20 74 68 65 20 73 65 72 76 65 72 2c 20 ing the server,
3280: 69 74 20 69 73 20 73 75 67 67 65 73 74 65 64 0a it is suggested.
3290: 20 20 40 20 74 68 61 74 20 74 68 65 20 27 68 27 @ that the 'h'
32a0: 20 28 48 69 73 74 6f 72 79 29 20 63 61 70 61 62 (History) capab
32b0: 69 6c 69 74 79 20 62 65 20 74 75 72 6e 65 64 20 ility be turned
32c0: 6f 66 66 20 66 6f 72 20 75 73 65 72 20 6e 6f 62 off for user nob
32d0: 6f 64 79 2e 0a 20 20 40 20 3c 2f 70 3e 3c 2f 6c ody.. @ </p></l
32e0: 69 3e 0a 20 20 40 0a 20 20 40 20 3c 6c 69 3e 3c i>. @. @ <li><
32f0: 70 3e 0a 20 20 40 20 4c 6f 67 69 6e 20 69 73 20 p>. @ Login is
3300: 72 65 71 75 69 72 65 64 20 66 6f 72 20 75 73 65 required for use
3310: 72 20 22 3c 62 3e 61 6e 6f 6e 79 6d 6f 75 73 3c r "<b>anonymous<
3320: 2f 62 3e 22 20 62 75 74 20 74 68 65 20 70 61 73 /b>" but the pas
3330: 73 77 6f 72 64 0a 20 20 40 20 69 73 20 64 69 73 sword. @ is dis
3340: 70 6c 61 79 65 64 20 6f 6e 20 74 68 65 20 6c 6f played on the lo
3350: 67 69 6e 20 73 63 72 65 65 6e 20 62 65 73 69 64 gin screen besid
3360: 65 20 74 68 65 20 70 61 73 73 77 6f 72 64 20 65 e the password e
3370: 6e 74 72 79 20 62 6f 78 0a 20 20 40 20 73 6f 20 ntry box. @ so
3380: 61 6e 79 62 6f 64 79 20 77 68 6f 20 63 61 6e 20 anybody who can
3390: 72 65 61 64 20 73 68 6f 75 6c 64 20 62 65 20 61 read should be a
33a0: 62 6c 65 20 74 6f 20 6c 6f 67 69 6e 20 61 73 20 ble to login as
33b0: 61 6e 6f 6e 79 6d 6f 75 73 2e 0a 20 20 40 20 4f anonymous.. @ O
33c0: 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64 n the other hand
33d0: 2c 20 73 70 69 64 65 72 73 20 61 6e 64 20 77 65 , spiders and we
33e0: 62 2d 63 72 61 77 6c 65 72 73 20 77 69 6c 6c 20 b-crawlers will
33f0: 74 79 70 69 63 61 6c 6c 79 20 6e 6f 74 0a 20 20 typically not.
3400: 40 20 62 65 20 61 62 6c 65 20 74 6f 20 6c 6f 67 @ be able to log
3410: 69 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61 70 in. Set the cap
3420: 61 62 69 6c 69 74 69 65 73 20 6f 66 20 74 68 65 abilities of the
3430: 20 61 6e 6f 6e 79 6d 6f 75 73 20 75 73 65 72 0a anonymous user.
3440: 20 20 40 20 74 6f 20 74 68 69 6e 67 73 20 74 68 @ to things th
3450: 61 74 20 79 6f 75 20 77 61 6e 74 20 61 6e 79 20 at you want any
3460: 68 75 6d 61 6e 20 74 6f 20 62 65 20 61 62 6c 65 human to be able
3470: 20 74 6f 20 64 6f 2c 20 62 75 74 20 6e 6f 20 61 to do, but no a
3480: 6e 79 0a 20 20 40 20 73 70 69 64 65 72 2e 0a 20 ny. @ spider..
3490: 20 40 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 20 20 40 @ </p></li>. @
34a0: 20 3c 2f 66 6f 72 6d 3e 0a 20 20 73 74 79 6c 65 </form>. style
34b0: 5f 66 6f 6f 74 65 72 28 29 3b 0a 7d 0a 0a 0a 2f _footer();.}.../
34c0: 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20 61 20 *.** Generate a
34d0: 63 68 65 63 6b 62 6f 78 20 66 6f 72 20 61 6e 20 checkbox for an
34e0: 61 74 74 72 69 62 75 74 65 2e 0a 2a 2f 0a 73 74 attribute..*/.st
34f0: 61 74 69 63 20 76 6f 69 64 20 6f 6e 6f 66 66 5f atic void onoff_
3500: 61 74 74 72 69 62 75 74 65 28 0a 20 20 63 6f 6e attribute(. con
3510: 73 74 20 63 68 61 72 20 2a 7a 4c 61 62 65 6c 2c st char *zLabel,
3520: 20 20 20 2f 2a 20 54 68 65 20 74 65 78 74 20 6c /* The text l
3530: 61 62 65 6c 20 6f 6e 20 74 68 65 20 63 68 65 63 abel on the chec
3540: 6b 62 6f 78 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 kbox */. const
3550: 63 68 61 72 20 2a 7a 56 61 72 2c 20 20 20 20 20 char *zVar,
3560: 2f 2a 20 54 68 65 20 63 6f 72 72 65 73 70 6f 6e /* The correspon
3570: 64 69 6e 67 20 72 6f 77 20 69 6e 20 74 68 65 20 ding row in the
3580: 56 41 52 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 VAR table */. c
3590: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 51 50 61 72 onst char *zQPar
35a0: 6d 2c 20 20 20 2f 2a 20 54 68 65 20 71 75 65 72 m, /* The quer
35b0: 79 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 y parameter */.
35c0: 20 69 6e 74 20 64 66 6c 74 56 61 6c 20 20 20 20 int dfltVal
35d0: 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c /* Defaul
35e0: 74 20 76 61 6c 75 65 20 69 66 20 56 41 52 20 74 t value if VAR t
35f0: 61 62 6c 65 20 65 6e 74 72 79 20 64 6f 65 73 20 able entry does
3600: 6e 6f 74 20 65 78 69 73 74 20 2a 2f 0a 29 7b 0a not exist */.){.
3610: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 56 const char *zV
3620: 61 6c 20 3d 20 64 62 5f 67 65 74 28 7a 56 61 72 al = db_get(zVar
3630: 2c 20 30 29 3b 0a 20 20 63 6f 6e 73 74 20 63 68 , 0);. const ch
3640: 61 72 20 2a 7a 51 20 3d 20 50 28 7a 51 50 61 72 ar *zQ = P(zQPar
3650: 6d 29 3b 0a 20 20 69 6e 74 20 69 56 61 6c 3b 0a m);. int iVal;.
3660: 20 20 69 66 28 20 7a 56 61 6c 20 29 7b 0a 20 20 if( zVal ){.
3670: 20 20 69 56 61 6c 20 3d 20 61 74 6f 69 28 7a 56 iVal = atoi(zV
3680: 61 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 al);. }else{.
3690: 20 20 69 56 61 6c 20 3d 20 64 66 6c 74 56 61 6c iVal = dfltVal
36a0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 7a 51 3d 3d ;. }. if( zQ==
36b0: 30 20 26 26 20 50 28 22 73 75 62 6d 69 74 22 29 0 && P("submit")
36c0: 20 29 7b 0a 20 20 20 20 7a 51 20 3d 20 22 6f 66 ){. zQ = "of
36d0: 66 22 3b 0a 20 20 7d 0a 20 20 69 66 28 20 7a 51 f";. }. if( zQ
36e0: 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 51 20 3d ){. int iQ =
36f0: 20 73 74 72 63 6d 70 28 7a 51 2c 22 6f 6e 22 29 strcmp(zQ,"on")
3700: 3d 3d 30 20 7c 7c 20 61 74 6f 69 28 7a 51 29 3b ==0 || atoi(zQ);
3710: 0a 20 20 20 20 69 66 28 20 69 51 21 3d 69 56 61 . if( iQ!=iVa
3720: 6c 20 29 7b 0a 20 20 20 20 20 20 64 62 5f 73 65 l ){. db_se
3730: 74 28 7a 56 61 72 2c 20 69 51 20 3f 20 22 31 22 t(zVar, iQ ? "1"
3740: 20 3a 20 22 30 22 29 3b 0a 20 20 20 20 20 20 69 : "0");. i
3750: 56 61 6c 20 3d 20 69 51 3b 0a 20 20 20 20 7d 0a Val = iQ;. }.
3760: 20 20 7d 0a 20 20 69 66 28 20 69 56 61 6c 20 29 }. if( iVal )
3770: 7b 0a 20 20 20 20 40 20 3c 69 6e 70 75 74 20 74 {. @ <input t
3780: 79 70 65 3d 22 63 68 65 63 6b 62 6f 78 22 20 6e ype="checkbox" n
3790: 61 6d 65 3d 22 25 73 28 7a 51 50 61 72 6d 29 22 ame="%s(zQParm)"
37a0: 20 63 68 65 63 6b 65 64 3e 25 73 28 7a 4c 61 62 checked>%s(zLab
37b0: 65 6c 29 3c 2f 69 6e 70 75 74 3e 0a 20 20 7d 65 el)</input>. }e
37c0: 6c 73 65 7b 0a 20 20 20 20 40 20 3c 69 6e 70 75 lse{. @ <inpu
37d0: 74 20 74 79 70 65 3d 22 63 68 65 63 6b 62 6f 78 t type="checkbox
37e0: 22 20 6e 61 6d 65 3d 22 25 73 28 7a 51 50 61 72 " name="%s(zQPar
37f0: 6d 29 22 3e 25 73 28 7a 4c 61 62 65 6c 29 3c 2f m)">%s(zLabel)</
3800: 69 6e 70 75 74 3e 0a 20 20 7d 0a 7d 0a 0a 2f 2a input>. }.}../*
3810: 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20 61 6e 20 .** Generate an
3820: 65 6e 74 72 79 20 62 6f 78 20 66 6f 72 20 61 6e entry box for an
3830: 20 61 74 74 72 69 62 75 74 65 2e 0a 2a 2f 0a 73 attribute..*/.s
3840: 74 61 74 69 63 20 76 6f 69 64 20 65 6e 74 72 79 tatic void entry
3850: 5f 61 74 74 72 69 62 75 74 65 28 0a 20 20 63 6f _attribute(. co
3860: 6e 73 74 20 63 68 61 72 20 2a 7a 4c 61 62 65 6c nst char *zLabel
3870: 2c 20 20 20 2f 2a 20 54 68 65 20 74 65 78 74 20 , /* The text
3880: 6c 61 62 65 6c 20 6f 6e 20 74 68 65 20 65 6e 74 label on the ent
3890: 72 79 20 62 6f 78 20 2a 2f 0a 20 20 69 6e 74 20 ry box */. int
38a0: 77 69 64 74 68 2c 20 20 20 20 20 20 20 20 20 20 width,
38b0: 20 20 2f 2a 20 57 69 64 74 68 20 6f 66 20 74 68 /* Width of th
38c0: 65 20 65 6e 74 72 79 20 62 6f 78 20 2a 2f 0a 20 e entry box */.
38d0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 56 61 const char *zVa
38e0: 72 2c 20 20 20 20 20 2f 2a 20 54 68 65 20 63 6f r, /* The co
38f0: 72 72 65 73 70 6f 6e 64 69 6e 67 20 72 6f 77 20 rresponding row
3900: 69 6e 20 74 68 65 20 56 41 52 20 74 61 62 6c 65 in the VAR table
3910: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 */. const char
3920: 20 2a 7a 51 50 61 72 6d 2c 20 20 20 2f 2a 20 54 *zQParm, /* T
3930: 68 65 20 71 75 65 72 79 20 70 61 72 61 6d 65 74 he query paramet
3940: 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 er */. const ch
3950: 61 72 20 2a 7a 44 66 6c 74 20 20 20 20 20 2f 2a ar *zDflt /*
3960: 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69 Default value i
3970: 66 20 56 41 52 20 74 61 62 6c 65 20 65 6e 74 72 f VAR table entr
3980: 79 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 y does not exist
3990: 20 2a 2f 0a 29 7b 0a 20 20 63 6f 6e 73 74 20 63 */.){. const c
39a0: 68 61 72 20 2a 7a 56 61 6c 20 3d 20 64 62 5f 67 har *zVal = db_g
39b0: 65 74 28 7a 56 61 72 2c 20 7a 44 66 6c 74 29 3b et(zVar, zDflt);
39c0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a . const char *z
39d0: 51 20 3d 20 50 28 7a 51 50 61 72 6d 29 3b 0a 20 Q = P(zQParm);.
39e0: 20 69 66 28 20 7a 51 20 26 26 20 73 74 72 63 6d if( zQ && strcm
39f0: 70 28 7a 51 2c 7a 56 61 6c 29 21 3d 30 20 29 7b p(zQ,zVal)!=0 ){
3a00: 0a 20 20 20 20 64 62 5f 73 65 74 28 7a 56 61 72 . db_set(zVar
3a10: 2c 20 7a 51 29 3b 0a 20 20 20 20 7a 56 61 6c 20 , zQ);. zVal
3a20: 3d 20 7a 51 3b 0a 20 20 7d 0a 20 20 40 20 3c 69 = zQ;. }. @ <i
3a30: 6e 70 75 74 20 74 79 70 65 3d 22 74 65 78 74 22 nput type="text"
3a40: 20 6e 61 6d 65 3d 22 25 73 28 7a 51 50 61 72 6d name="%s(zQParm
3a50: 29 22 20 76 61 6c 75 65 3d 22 25 68 28 7a 56 61 )" value="%h(zVa
3a60: 6c 29 22 20 73 69 7a 65 3d 22 25 64 28 77 69 64 l)" size="%d(wid
3a70: 74 68 29 22 3e 0a 20 20 40 20 25 73 28 7a 4c 61 th)">. @ %s(zLa
3a80: 62 65 6c 29 0a 7d 0a 0a 0a 0a 2f 2a 0a 2a 2a 20 bel).}..../*.**
3a90: 57 45 42 50 41 47 45 3a 20 73 65 74 75 70 5f 61 WEBPAGE: setup_a
3aa0: 63 63 65 73 73 0a 2a 2f 0a 76 6f 69 64 20 73 65 ccess.*/.void se
3ab0: 74 75 70 5f 61 63 63 65 73 73 28 76 6f 69 64 29 tup_access(void)
3ac0: 7b 0a 20 20 6c 6f 67 69 6e 5f 63 68 65 63 6b 5f {. login_check_
3ad0: 63 72 65 64 65 6e 74 69 61 6c 73 28 29 3b 0a 20 credentials();.
3ae0: 20 69 66 28 20 21 67 2e 6f 6b 53 65 74 75 70 20 if( !g.okSetup
3af0: 29 7b 0a 20 20 20 20 6c 6f 67 69 6e 5f 6e 65 65 ){. login_nee
3b00: 64 65 64 28 29 3b 0a 20 20 7d 0a 0a 20 20 73 74 ded();. }.. st
3b10: 79 6c 65 5f 68 65 61 64 65 72 28 22 41 63 63 65 yle_header("Acce
3b20: 73 73 20 43 6f 6e 74 72 6f 6c 20 53 65 74 74 69 ss Control Setti
3b30: 6e 67 73 22 29 3b 0a 20 20 64 62 5f 62 65 67 69 ngs");. db_begi
3b40: 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 29 3b n_transaction();
3b50: 0a 20 20 40 20 3c 66 6f 72 6d 20 61 63 74 69 6f . @ <form actio
3b60: 6e 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 4c n="%s(g.zBaseURL
3b70: 29 2f 73 65 74 75 70 5f 61 63 63 65 73 73 22 20 )/setup_access"
3b80: 6d 65 74 68 6f 64 3d 22 50 4f 53 54 22 3e 0a 0a method="POST">..
3b90: 20 20 40 20 3c 68 72 3e 0a 20 20 6f 6e 6f 66 66 @ <hr>. onoff
3ba0: 5f 61 74 74 72 69 62 75 74 65 28 22 52 65 71 75 _attribute("Requ
3bb0: 69 72 65 20 70 61 73 73 77 6f 72 64 20 66 6f 72 ire password for
3bc0: 20 6c 6f 63 61 6c 20 61 63 63 65 73 73 22 2c 0a local access",.
3bd0: 20 20 20 20 20 22 61 75 74 68 65 6e 74 69 63 61 "authentica
3be0: 74 65 2d 6c 6f 63 61 6c 68 6f 73 74 22 2c 20 22 te-localhost", "
3bf0: 6c 6f 63 61 6c 61 75 74 68 22 2c 20 31 29 3b 0a localauth", 1);.
3c00: 20 20 40 20 3c 70 3e 57 68 65 6e 20 65 6e 61 62 @ <p>When enab
3c10: 6c 65 64 2c 20 74 68 65 20 70 61 73 73 77 6f 72 led, the passwor
3c20: 64 20 73 69 67 6e 2d 69 6e 20 69 73 20 72 65 71 d sign-in is req
3c30: 75 69 72 65 64 20 66 6f 72 0a 20 20 40 20 77 65 uired for. @ we
3c40: 62 20 61 63 63 65 73 73 20 63 6f 6d 69 6e 67 20 b access coming
3c50: 66 72 6f 6d 20 31 32 37 2e 30 2e 30 2e 31 2e 20 from 127.0.0.1.
3c60: 20 57 68 65 6e 20 64 69 73 61 62 6c 65 64 2c 20 When disabled,
3c70: 77 65 62 20 61 63 63 65 73 73 0a 20 20 40 20 66 web access. @ f
3c80: 72 6f 6d 20 31 32 37 2e 30 2e 30 2e 31 20 69 73 rom 127.0.0.1 is
3c90: 20 61 6c 6c 6f 77 73 20 77 69 74 68 6f 75 74 20 allows without
3ca0: 61 6e 79 20 6c 6f 67 69 6e 20 2d 20 74 68 65 20 any login - the
3cb0: 75 73 65 72 20 69 64 20 69 73 20 73 65 6c 65 63 user id is selec
3cc0: 74 65 64 0a 20 20 40 20 66 72 6f 6d 20 74 68 65 ted. @ from the
3cd0: 20 7e 2f 2e 66 6f 73 73 69 6c 20 64 61 74 61 62 ~/.fossil datab
3ce0: 61 73 65 2e 20 50 61 73 73 77 6f 72 64 20 6c 6f ase. Password lo
3cf0: 67 69 6e 20 69 73 20 61 6c 77 61 79 73 20 72 65 gin is always re
3d00: 71 75 69 72 65 64 0a 20 20 40 20 66 6f 72 20 69 quired. @ for i
3d10: 6e 63 6f 6d 69 6e 67 20 77 65 62 20 63 6f 6e 6e ncoming web conn
3d20: 65 63 74 69 6f 6e 73 20 6f 6e 20 69 6e 74 65 72 ections on inter
3d30: 6e 65 74 20 61 64 64 72 65 73 73 65 73 20 6f 74 net addresses ot
3d40: 68 65 72 20 74 68 61 6e 0a 20 20 40 20 31 32 37 her than. @ 127
3d50: 2e 30 2e 30 2e 31 2e 3c 2f 70 3e 3c 2f 6c 69 3e .0.0.1.</p></li>
3d60: 0a 0a 20 20 40 20 3c 68 72 3e 0a 20 20 65 6e 74 .. @ <hr>. ent
3d70: 72 79 5f 61 74 74 72 69 62 75 74 65 28 22 4c 6f ry_attribute("Lo
3d80: 67 69 6e 20 65 78 70 69 72 61 74 69 6f 6e 20 74 gin expiration t
3d90: 69 6d 65 22 2c 20 36 2c 20 22 63 6f 6f 6b 69 65 ime", 6, "cookie
3da0: 2d 65 78 70 69 72 65 22 2c 20 22 63 65 78 22 2c -expire", "cex",
3db0: 20 22 38 37 36 36 22 29 3b 0a 20 20 40 20 3c 70 "8766");. @ <p
3dc0: 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 68 >The number of h
3dd0: 6f 75 72 73 20 66 6f 72 20 77 68 69 63 68 20 61 ours for which a
3de0: 20 6c 6f 67 69 6e 20 69 73 20 76 61 6c 69 64 2e login is valid.
3df0: 20 20 54 68 69 73 20 6d 75 73 74 20 62 65 20 61 This must be a
3e00: 0a 20 20 40 20 70 6f 73 69 74 69 76 65 20 6e 75 . @ positive nu
3e10: 6d 62 65 72 2e 20 20 54 68 65 20 64 65 66 61 75 mber. The defau
3e20: 6c 74 20 69 73 20 38 37 36 30 20 68 6f 75 72 73 lt is 8760 hours
3e30: 20 77 68 69 63 68 20 69 73 20 61 70 70 72 6f 78 which is approx
3e40: 69 6d 61 74 65 6c 79 20 65 71 75 61 6c 0a 20 20 imately equal.
3e50: 40 20 74 6f 20 61 20 79 65 61 72 2e 3c 2f 70 3e @ to a year.</p>
3e60: 0a 20 20 20 0a 20 20 40 20 3c 68 72 3e 0a 20 20 . . @ <hr>.
3e70: 6f 6e 6f 66 66 5f 61 74 74 72 69 62 75 74 65 28 onoff_attribute(
3e80: 22 41 6c 6c 6f 77 20 61 6e 6f 6e 79 6d 6f 75 73 "Allow anonymous
3e90: 20 73 69 67 6e 75 70 22 2c 20 22 61 6e 6f 6e 2d signup", "anon-
3ea0: 73 69 67 6e 75 70 22 2c 20 22 61 73 75 22 2c 20 signup", "asu",
3eb0: 30 29 3b 0a 20 20 40 20 3c 70 3e 41 6c 6c 6f 77 0);. @ <p>Allow
3ec0: 20 75 73 65 72 73 20 74 6f 20 63 72 65 61 74 65 users to create
3ed0: 20 74 68 65 69 72 20 6f 77 6e 20 61 63 63 6f 75 their own accou
3ee0: 6e 74 73 3c 2f 70 3e 0a 20 20 20 0a 20 20 40 20 nts</p>. . @
3ef0: 3c 68 72 3e 0a 20 20 40 20 3c 70 3e 3c 69 6e 70 <hr>. @ <p><inp
3f00: 75 74 20 74 79 70 65 3d 22 73 75 62 6d 69 74 22 ut type="submit"
3f10: 20 20 6e 61 6d 65 3d 22 73 75 62 6d 69 74 22 20 name="submit"
3f20: 76 61 6c 75 65 3d 22 41 70 70 6c 79 20 43 68 61 value="Apply Cha
3f30: 6e 67 65 73 22 3e 3c 2f 70 3e 0a 20 20 40 20 3c nges"></p>. @ <
3f40: 2f 66 6f 72 6d 3e 0a 20 20 64 62 5f 65 6e 64 5f /form>. db_end_
3f50: 74 72 61 6e 73 61 63 74 69 6f 6e 28 30 29 3b 0a transaction(0);.
3f60: 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 29 style_footer()
3f70: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50 41 ;.}../*.** WEBPA
3f80: 47 45 3a 20 73 65 74 75 70 5f 63 6f 6e 66 69 67 GE: setup_config
3f90: 0a 2a 2f 0a 76 6f 69 64 20 73 65 74 75 70 5f 63 .*/.void setup_c
3fa0: 6f 6e 66 69 67 28 76 6f 69 64 29 7b 0a 20 20 6c onfig(void){. l
3fb0: 6f 67 69 6e 5f 63 68 65 63 6b 5f 63 72 65 64 65 ogin_check_crede
3fc0: 6e 74 69 61 6c 73 28 29 3b 0a 20 20 69 66 28 20 ntials();. if(
3fd0: 21 67 2e 6f 6b 53 65 74 75 70 20 29 7b 0a 20 20 !g.okSetup ){.
3fe0: 20 20 6c 6f 67 69 6e 5f 6e 65 65 64 65 64 28 29 login_needed()
3ff0: 3b 0a 20 20 7d 0a 0a 20 20 73 74 79 6c 65 5f 68 ;. }.. style_h
4000: 65 61 64 65 72 28 22 57 57 57 20 43 6f 6e 66 69 eader("WWW Confi
4010: 67 75 72 61 74 69 6f 6e 22 29 3b 0a 20 20 64 62 guration");. db
4020: 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61 63 74 69 _begin_transacti
4030: 6f 6e 28 29 3b 0a 20 20 40 20 3c 66 6f 72 6d 20 on();. @ <form
4040: 61 63 74 69 6f 6e 3d 22 25 73 28 67 2e 7a 42 61 action="%s(g.zBa
4050: 73 65 55 52 4c 29 2f 73 65 74 75 70 5f 63 6f 6e seURL)/setup_con
4060: 66 69 67 22 20 6d 65 74 68 6f 64 3d 22 50 4f 53 fig" method="POS
4070: 54 22 3e 0a 0a 20 20 40 20 3c 68 72 3e 0a 20 20 T">.. @ <hr>.
4080: 65 6e 74 72 79 5f 61 74 74 72 69 62 75 74 65 28 entry_attribute(
4090: 22 48 6f 6d 65 20 70 61 67 65 22 2c 20 36 30 2c "Home page", 60,
40a0: 20 22 68 6f 6d 65 70 61 67 65 22 2c 20 22 68 70 "homepage", "hp
40b0: 22 2c 20 22 22 29 3b 0a 20 20 40 20 3c 70 3e 54 ", "");. @ <p>T
40c0: 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 77 69 6b he name of a wik
40d0: 69 20 66 69 6c 65 20 74 68 61 74 20 69 73 20 74 i file that is t
40e0: 68 65 20 68 6f 6d 65 70 61 67 65 20 66 6f 72 20 he homepage for
40f0: 74 68 65 20 77 65 62 73 69 74 65 2e 0a 20 20 40 the website.. @
4100: 20 54 68 65 20 68 6f 6d 65 20 70 61 67 65 20 69 The home page i
4110: 73 20 74 68 65 20 70 61 67 65 20 74 68 61 74 20 s the page that
4120: 69 73 20 64 69 73 70 6c 61 79 65 64 20 62 79 20 is displayed by
4130: 74 68 65 20 22 48 6f 6d 65 22 20 6c 69 6e 6b 0a the "Home" link.
4140: 20 20 40 20 61 74 20 74 68 65 20 74 6f 70 20 6f @ at the top o
4150: 66 20 74 68 69 73 20 73 63 72 65 65 6e 2e 20 20 f this screen.
4160: 4f 6d 69 74 20 74 68 65 20 70 61 74 68 20 61 6e Omit the path an
4170: 64 20 74 68 65 20 22 2e 77 69 6b 69 22 0a 20 20 d the ".wiki".
4180: 40 20 73 75 66 66 69 78 2e 20 20 3c 2f 70 3e 0a @ suffix. </p>.
4190: 0a 20 20 65 6e 74 72 79 5f 61 74 74 72 69 62 75 . entry_attribu
41a0: 74 65 28 22 54 69 63 6b 65 74 20 73 75 62 64 69 te("Ticket subdi
41b0: 72 65 63 74 6f 72 79 22 2c 20 36 30 2c 20 22 74 rectory", 60, "t
41c0: 69 63 6b 65 74 2d 73 75 62 64 69 72 22 2c 20 22 icket-subdir", "
41d0: 74 73 64 22 2c 20 22 22 29 3b 0a 20 20 40 20 3c tsd", "");. @ <
41e0: 70 3e 41 20 73 75 62 64 69 72 65 63 74 6f 72 79 p>A subdirectory
41f0: 20 69 6e 20 74 68 65 20 66 69 6c 65 20 68 69 65 in the file hie
4200: 72 61 72 63 68 79 20 74 68 61 74 20 63 6f 6e 74 rarchy that cont
4210: 61 69 6e 73 20 61 6c 6c 20 74 72 6f 75 62 6c 65 ains all trouble
4220: 0a 20 20 40 20 74 69 63 6b 65 74 73 2e 20 20 4c . @ tickets. L
4230: 65 61 76 65 20 74 68 69 73 20 62 6c 61 6e 6b 20 eave this blank
4240: 74 6f 20 64 69 73 61 62 6c 65 20 74 69 63 6b 65 to disable ticke
4250: 74 69 6e 67 2e 20 20 54 69 63 6b 65 74 73 20 74 ting. Tickets t
4260: 65 78 74 0a 20 20 40 20 66 69 6c 65 73 20 77 69 ext. @ files wi
4270: 74 68 69 6e 20 74 68 69 73 20 73 75 62 64 69 72 thin this subdir
4280: 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e ectory containin
4290: 67 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 66 g a particular f
42a0: 6f 72 6d 61 74 0a 20 20 40 20 28 64 6f 63 75 6d ormat. @ (docum
42b0: 65 6e 74 65 64 20 73 65 70 61 72 61 74 65 6c 79 ented separately
42c0: 29 20 61 6e 64 20 77 69 74 68 20 74 68 65 20 22 ) and with the "
42d0: 2e 74 6b 74 22 20 73 75 66 66 69 78 2e 3c 2f 70 .tkt" suffix.</p
42e0: 3e 0a 0a 20 20 65 6e 74 72 79 5f 61 74 74 72 69 >.. entry_attri
42f0: 62 75 74 65 28 22 57 69 6b 69 20 73 75 62 64 69 bute("Wiki subdi
4300: 72 65 63 74 6f 72 79 22 2c 20 36 30 2c 20 22 77 rectory", 60, "w
4310: 69 6b 69 2d 73 75 62 64 69 72 22 2c 20 22 77 73 iki-subdir", "ws
4320: 64 22 2c 20 22 22 29 3b 0a 20 20 40 20 3c 70 3e d", "");. @ <p>
4330: 41 20 73 75 62 64 69 72 65 63 74 6f 72 79 20 69 A subdirectory i
4340: 6e 20 74 68 65 20 66 69 6c 65 20 68 69 65 72 61 n the file hiera
4350: 72 63 68 79 20 74 68 61 74 20 63 6f 6e 74 61 69 rchy that contai
4360: 6e 73 20 77 69 6b 69 20 70 61 67 65 73 2e 0a 20 ns wiki pages..
4370: 20 40 20 4c 65 61 76 65 20 74 68 69 73 20 62 6c @ Leave this bl
4380: 61 6e 6b 20 74 6f 20 64 69 73 61 62 6c 65 20 77 ank to disable w
4390: 69 6b 69 2e 20 20 57 69 6b 69 20 70 61 67 65 73 iki. Wiki pages
43a0: 20 61 72 65 0a 20 20 40 20 66 69 6c 65 73 20 77 are. @ files w
43b0: 69 74 68 69 6e 20 74 68 69 73 20 73 75 62 64 69 ithin this subdi
43c0: 72 65 63 74 6f 72 79 20 77 68 6f 73 65 20 6e 61 rectory whose na
43d0: 6d 65 20 69 73 20 68 65 20 77 69 6b 69 20 70 61 me is he wiki pa
43e0: 67 65 20 74 69 74 6c 65 0a 20 20 40 20 61 6e 64 ge title. @ and
43f0: 20 77 69 74 68 20 74 68 65 20 73 75 66 66 69 78 with the suffix
4400: 20 22 2e 77 69 6b 69 22 2e 3c 2f 70 3e 0a 0a 20 ".wiki".</p>..
4410: 20 20 0a 20 20 40 20 3c 68 72 3e 0a 20 20 40 20 . @ <hr>. @
4420: 3c 70 3e 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 <p><input type="
4430: 73 75 62 6d 69 74 22 20 20 6e 61 6d 65 3d 22 73 submit" name="s
4440: 75 62 6d 69 74 22 20 76 61 6c 75 65 3d 22 41 70 ubmit" value="Ap
4450: 70 6c 79 20 43 68 61 6e 67 65 73 22 3e 3c 2f 70 ply Changes"></p
4460: 3e 0a 20 20 40 20 3c 2f 66 6f 72 6d 3e 0a 20 20 >. @ </form>.
4470: 64 62 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 69 db_end_transacti
4480: 6f 6e 28 30 29 3b 0a 20 20 73 74 79 6c 65 5f 66 on(0);. style_f
4490: 6f 6f 74 65 72 28 29 3b 0a 7d 0a ooter();.}.