Hex Artifact Content
Not logged in

Artifact 1f3b727596055591d7906b8ae07c42e8608a9e33:

File src/setup.c part of check-in [ac3f1f2ba7] - Improvements to how ticket changes are displayed in the UI. The hyperlink is show with strick-through if the ticket is closed. The title is shown after the ticket hyperlink. SQL to determine the closed condition and the title can be set in the ticket setup screens. by drh on 2008-10-18 02:27:13.

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 74 72 3e 3c  esc.){.  @ <tr><
0570: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20  td valign="top" 
0580: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 0a 20  align="right">. 
0590: 20 69 66 28 20 7a 4c 69 6e 6b 20 26 26 20 7a 4c   if( zLink && zL
05a0: 69 6e 6b 5b 30 5d 20 29 7b 0a 20 20 20 20 40 20  ink[0] ){.    @ 
05b0: 3c 61 20 68 72 65 66 3d 22 25 73 28 7a 4c 69 6e  <a href="%s(zLin
05c0: 6b 29 22 3e 25 68 28 7a 54 69 74 6c 65 29 3c 2f  k)">%h(zTitle)</
05d0: 61 3e 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  a>.  }else{.    
05e0: 40 20 25 68 28 7a 54 69 74 6c 65 29 0a 20 20 7d  @ %h(zTitle).  }
05f0: 0a 20 20 40 20 3c 2f 74 64 3e 3c 74 64 20 76 61  .  @ </td><td va
0600: 6c 69 67 6e 3d 22 74 6f 70 22 3e 25 68 28 7a 44  lign="top">%h(zD
0610: 65 73 63 29 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 7d  esc)</td></tr>.}
0620: 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50 41 47 45 3a  ../*.** WEBPAGE:
0630: 20 2f 73 65 74 75 70 0a 2a 2f 0a 76 6f 69 64 20   /setup.*/.void 
0640: 73 65 74 75 70 5f 70 61 67 65 28 76 6f 69 64 29  setup_page(void)
0650: 7b 0a 20 20 6c 6f 67 69 6e 5f 63 68 65 63 6b 5f  {.  login_check_
0660: 63 72 65 64 65 6e 74 69 61 6c 73 28 29 3b 0a 20  credentials();. 
0670: 20 69 66 28 20 21 67 2e 6f 6b 53 65 74 75 70 20   if( !g.okSetup 
0680: 29 7b 0a 20 20 20 20 6c 6f 67 69 6e 5f 6e 65 65  ){.    login_nee
0690: 64 65 64 28 29 3b 0a 20 20 7d 0a 0a 20 20 73 74  ded();.  }..  st
06a0: 79 6c 65 5f 68 65 61 64 65 72 28 22 53 65 74 75  yle_header("Setu
06b0: 70 22 29 3b 0a 20 20 40 20 3c 74 61 62 6c 65 20  p");.  @ <table 
06c0: 62 6f 72 64 65 72 3d 22 30 22 20 63 65 6c 6c 73  border="0" cells
06d0: 70 61 63 69 6e 67 3d 22 32 30 22 3e 0a 20 20 73  pacing="20">.  s
06e0: 65 74 75 70 5f 6d 65 6e 75 5f 65 6e 74 72 79 28  etup_menu_entry(
06f0: 22 55 73 65 72 73 22 2c 20 22 73 65 74 75 70 5f  "Users", "setup_
0700: 75 6c 69 73 74 22 2c 0a 20 20 20 20 22 47 72 61  ulist",.    "Gra
0710: 6e 74 20 70 72 69 76 69 6c 65 67 65 73 20 74 6f  nt privileges to
0720: 20 69 6e 64 69 76 69 64 75 61 6c 20 75 73 65 72   individual user
0730: 73 2e 22 29 3b 0a 20 20 73 65 74 75 70 5f 6d 65  s.");.  setup_me
0740: 6e 75 5f 65 6e 74 72 79 28 22 41 63 63 65 73 73  nu_entry("Access
0750: 22 2c 20 22 73 65 74 75 70 5f 61 63 63 65 73 73  ", "setup_access
0760: 22 2c 0a 20 20 20 20 22 43 6f 6e 74 72 6f 6c 20  ",.    "Control 
0770: 61 63 63 65 73 73 20 73 65 74 74 69 6e 67 73 2e  access settings.
0780: 22 29 3b 0a 20 20 73 65 74 75 70 5f 6d 65 6e 75  ");.  setup_menu
0790: 5f 65 6e 74 72 79 28 22 43 6f 6e 66 69 67 75 72  _entry("Configur
07a0: 61 74 69 6f 6e 22 2c 20 22 73 65 74 75 70 5f 63  ation", "setup_c
07b0: 6f 6e 66 69 67 22 2c 0a 20 20 20 20 22 43 6f 6e  onfig",.    "Con
07c0: 66 69 67 75 72 65 20 74 68 65 20 57 57 57 20 63  figure the WWW c
07d0: 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 74 68 65  omponents of the
07e0: 20 72 65 70 6f 73 69 74 6f 72 79 22 29 3b 0a 20   repository");. 
07f0: 20 73 65 74 75 70 5f 6d 65 6e 75 5f 65 6e 74 72   setup_menu_entr
0800: 79 28 22 54 69 6d 65 6c 69 6e 65 22 2c 20 22 73  y("Timeline", "s
0810: 65 74 75 70 5f 74 69 6d 65 6c 69 6e 65 22 2c 0a  etup_timeline",.
0820: 20 20 20 20 22 54 69 6d 65 6c 69 6e 65 20 64 69      "Timeline di
0830: 73 70 6c 61 79 20 70 72 65 66 65 72 65 6e 63 65  splay preference
0840: 73 22 29 3b 0a 20 20 73 65 74 75 70 5f 6d 65 6e  s");.  setup_men
0850: 75 5f 65 6e 74 72 79 28 22 54 69 63 6b 65 74 73  u_entry("Tickets
0860: 22 2c 20 22 74 6b 74 73 65 74 75 70 22 2c 0a 20  ", "tktsetup",. 
0870: 20 20 20 22 43 6f 6e 66 69 67 75 72 65 20 74 68     "Configure th
0880: 65 20 74 72 6f 75 62 6c 65 2d 74 69 63 6b 65 74  e trouble-ticket
0890: 69 6e 67 20 73 79 73 74 65 6d 20 66 6f 72 20 74  ing system for t
08a0: 68 69 73 20 72 65 70 6f 73 69 74 6f 72 79 22 29  his repository")
08b0: 3b 0a 20 20 73 65 74 75 70 5f 6d 65 6e 75 5f 65  ;.  setup_menu_e
08c0: 6e 74 72 79 28 22 43 53 53 22 2c 20 22 73 65 74  ntry("CSS", "set
08d0: 75 70 5f 65 64 69 74 63 73 73 22 2c 0a 20 20 20  up_editcss",.   
08e0: 20 22 45 64 69 74 20 74 68 65 20 43 61 73 63 61   "Edit the Casca
08f0: 64 69 6e 67 20 53 74 79 6c 65 20 53 68 65 65 74  ding Style Sheet
0900: 20 75 73 65 64 20 62 79 20 61 6c 6c 20 70 61 67   used by all pag
0910: 65 73 20 6f 66 20 74 68 69 73 20 72 65 70 6f 73  es of this repos
0920: 69 74 6f 72 79 22 29 3b 0a 20 20 73 65 74 75 70  itory");.  setup
0930: 5f 6d 65 6e 75 5f 65 6e 74 72 79 28 22 48 65 61  _menu_entry("Hea
0940: 64 65 72 22 2c 20 22 73 65 74 75 70 5f 68 65 61  der", "setup_hea
0950: 64 65 72 22 2c 0a 20 20 20 20 22 45 64 69 74 20  der",.    "Edit 
0960: 48 54 4d 4c 20 74 65 78 74 20 69 6e 73 65 72 74  HTML text insert
0970: 65 64 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66  ed at the top of
0980: 20 65 76 65 72 79 20 70 61 67 65 22 29 3b 0a 20   every page");. 
0990: 20 73 65 74 75 70 5f 6d 65 6e 75 5f 65 6e 74 72   setup_menu_entr
09a0: 79 28 22 46 6f 6f 74 65 72 22 2c 20 22 73 65 74  y("Footer", "set
09b0: 75 70 5f 66 6f 6f 74 65 72 22 2c 0a 20 20 20 20  up_footer",.    
09c0: 22 45 64 69 74 20 48 54 4d 4c 20 74 65 78 74 20  "Edit HTML text 
09d0: 69 6e 73 65 72 74 65 64 20 61 74 20 74 68 65 20  inserted at the 
09e0: 62 6f 74 74 6f 6d 20 6f 66 20 65 76 65 72 79 20  bottom of every 
09f0: 70 61 67 65 22 29 3b 0a 20 20 73 65 74 75 70 5f  page");.  setup_
0a00: 6d 65 6e 75 5f 65 6e 74 72 79 28 22 53 68 75 6e  menu_entry("Shun
0a10: 6e 65 64 22 2c 20 22 73 68 75 6e 22 2c 0a 20 20  ned", "shun",.  
0a20: 20 20 22 53 68 6f 77 20 61 72 74 69 66 61 63 74    "Show artifact
0a30: 73 20 74 68 61 74 20 61 72 65 20 73 68 75 6e 6e  s that are shunn
0a40: 65 64 20 62 79 20 74 68 69 73 20 72 65 70 6f 73  ed by this repos
0a50: 69 74 6f 72 79 22 29 3b 0a 20 20 73 65 74 75 70  itory");.  setup
0a60: 5f 6d 65 6e 75 5f 65 6e 74 72 79 28 22 53 74 61  _menu_entry("Sta
0a70: 74 73 22 2c 20 22 73 74 61 74 22 2c 0a 20 20 20  ts", "stat",.   
0a80: 20 22 44 69 73 70 6c 61 79 20 72 65 70 6f 73 69   "Display reposi
0a90: 74 6f 72 79 20 73 74 61 74 69 73 74 69 63 73 22  tory statistics"
0aa0: 29 3b 0a 20 20 40 20 3c 2f 74 61 62 6c 65 3e 0a  );.  @ </table>.
0ab0: 0a 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28  .  style_footer(
0ac0: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50  );.}../*.** WEBP
0ad0: 41 47 45 3a 20 73 65 74 75 70 5f 75 6c 69 73 74  AGE: setup_ulist
0ae0: 0a 2a 2a 0a 2a 2a 20 53 68 6f 77 20 61 20 6c 69  .**.** Show a li
0af0: 73 74 20 6f 66 20 75 73 65 72 73 2e 20 20 43 6c  st of users.  Cl
0b00: 69 63 6b 69 6e 67 20 6f 6e 20 61 6e 79 20 75 73  icking on any us
0b10: 65 72 20 6a 75 6d 70 73 20 74 6f 20 74 68 65 20  er jumps to the 
0b20: 65 64 69 74 0a 2a 2a 20 73 63 72 65 65 6e 20 66  edit.** screen f
0b30: 6f 72 20 74 68 61 74 20 75 73 65 72 2e 0a 2a 2f  or that user..*/
0b40: 0a 76 6f 69 64 20 73 65 74 75 70 5f 75 6c 69 73  .void setup_ulis
0b50: 74 28 76 6f 69 64 29 7b 0a 20 20 53 74 6d 74 20  t(void){.  Stmt 
0b60: 73 3b 0a 0a 20 20 6c 6f 67 69 6e 5f 63 68 65 63  s;..  login_chec
0b70: 6b 5f 63 72 65 64 65 6e 74 69 61 6c 73 28 29 3b  k_credentials();
0b80: 0a 20 20 69 66 28 20 21 67 2e 6f 6b 41 64 6d 69  .  if( !g.okAdmi
0b90: 6e 20 29 7b 0a 20 20 20 20 6c 6f 67 69 6e 5f 6e  n ){.    login_n
0ba0: 65 65 64 65 64 28 29 3b 0a 20 20 20 20 72 65 74  eeded();.    ret
0bb0: 75 72 6e 3b 0a 20 20 7d 0a 0a 20 20 73 74 79 6c  urn;.  }..  styl
0bc0: 65 5f 73 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e  e_submenu_elemen
0bd0: 74 28 22 41 64 64 22 2c 20 22 41 64 64 20 55 73  t("Add", "Add Us
0be0: 65 72 22 2c 20 22 73 65 74 75 70 5f 75 65 64 69  er", "setup_uedi
0bf0: 74 22 29 3b 0a 20 20 73 74 79 6c 65 5f 68 65 61  t");.  style_hea
0c00: 64 65 72 28 22 55 73 65 72 20 4c 69 73 74 22 29  der("User List")
0c10: 3b 0a 20 20 40 20 3c 74 61 62 6c 65 20 62 6f 72  ;.  @ <table bor
0c20: 64 65 72 3d 22 30 22 20 63 65 6c 6c 70 61 64 64  der="0" cellpadd
0c30: 69 6e 67 3d 22 30 22 20 63 65 6c 6c 73 70 61 63  ing="0" cellspac
0c40: 69 6e 67 3d 22 32 35 22 3e 0a 20 20 40 20 3c 74  ing="25">.  @ <t
0c50: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  r><td valign="to
0c60: 70 22 3e 0a 20 20 40 20 3c 62 3e 55 73 65 72 73  p">.  @ <b>Users
0c70: 3a 3c 2f 62 3e 0a 20 20 40 20 3c 74 61 62 6c 65  :</b>.  @ <table
0c80: 20 62 6f 72 64 65 72 3d 22 31 22 20 63 65 6c 6c   border="1" cell
0c90: 70 61 64 64 69 6e 67 3d 22 31 30 22 3e 3c 74 72  padding="10"><tr
0ca0: 3e 3c 74 64 3e 0a 20 20 40 20 3c 74 61 62 6c 65  ><td>.  @ <table
0cb0: 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 30 20 63   cellspacing=0 c
0cc0: 65 6c 6c 70 61 64 64 69 6e 67 3d 30 20 62 6f 72  ellpadding=0 bor
0cd0: 64 65 72 3d 30 3e 0a 20 20 40 20 3c 74 72 3e 0a  der=0>.  @ <tr>.
0ce0: 20 20 40 20 20 20 3c 74 68 20 61 6c 69 67 6e 3d    @   <th align=
0cf0: 22 72 69 67 68 74 22 3e 55 73 65 72 26 6e 62 73  "right">User&nbs
0d00: 70 3b 49 44 3c 2f 74 68 3e 3c 74 64 20 77 69 64  p;ID</th><td wid
0d10: 74 68 3d 22 32 30 22 3e 26 6e 62 73 70 3b 3c 2f  th="20">&nbsp;</
0d20: 74 64 3e 0a 20 20 40 20 20 20 3c 74 68 3e 43 61  td>.  @   <th>Ca
0d30: 70 61 62 69 6c 69 74 69 65 73 3c 2f 74 68 3e 3c  pabilities</th><
0d40: 74 64 20 77 69 64 74 68 3d 22 31 35 22 3e 26 6e  td width="15">&n
0d50: 62 73 70 3b 3c 2f 74 64 3e 0a 20 20 40 20 20 20  bsp;</td>.  @   
0d60: 3c 74 68 3e 43 6f 6e 74 61 63 74 26 6e 62 73 70  <th>Contact&nbsp
0d70: 3b 49 6e 66 6f 3c 2f 74 68 3e 0a 20 20 40 20 3c  ;Info</th>.  @ <
0d80: 2f 74 72 3e 0a 20 20 64 62 5f 70 72 65 70 61 72  /tr>.  db_prepar
0d90: 65 28 26 73 2c 20 22 53 45 4c 45 43 54 20 75 69  e(&s, "SELECT ui
0da0: 64 2c 20 6c 6f 67 69 6e 2c 20 63 61 70 2c 20 69  d, login, cap, i
0db0: 6e 66 6f 20 46 52 4f 4d 20 75 73 65 72 20 4f 52  nfo FROM user OR
0dc0: 44 45 52 20 42 59 20 6c 6f 67 69 6e 22 29 3b 0a  DER BY login");.
0dd0: 20 20 77 68 69 6c 65 28 20 64 62 5f 73 74 65 70    while( db_step
0de0: 28 26 73 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57  (&s)==SQLITE_ROW
0df0: 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68   ){.    const ch
0e00: 61 72 20 2a 7a 43 61 70 20 3d 20 64 62 5f 63 6f  ar *zCap = db_co
0e10: 6c 75 6d 6e 5f 74 65 78 74 28 26 73 2c 20 32 29  lumn_text(&s, 2)
0e20: 3b 0a 20 20 20 20 69 66 28 20 73 74 72 73 74 72  ;.    if( strstr
0e30: 28 7a 43 61 70 2c 20 22 73 22 29 20 29 20 7a 43  (zCap, "s") ) zC
0e40: 61 70 20 3d 20 22 73 22 3b 0a 20 20 20 20 40 20  ap = "s";.    @ 
0e50: 3c 74 72 3e 0a 20 20 20 20 40 20 3c 74 64 20 61  <tr>.    @ <td a
0e60: 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 0a 20 20  lign="right">.  
0e70: 20 20 69 66 28 20 67 2e 6f 6b 41 64 6d 69 6e 20    if( g.okAdmin 
0e80: 26 26 20 28 7a 43 61 70 5b 30 5d 21 3d 27 73 27  && (zCap[0]!='s'
0e90: 20 7c 7c 20 67 2e 6f 6b 53 65 74 75 70 29 20 29   || g.okSetup) )
0ea0: 7b 0a 20 20 20 20 20 20 40 20 3c 61 20 68 72 65  {.      @ <a hre
0eb0: 66 3d 22 73 65 74 75 70 5f 75 65 64 69 74 3f 69  f="setup_uedit?i
0ec0: 64 3d 25 64 28 64 62 5f 63 6f 6c 75 6d 6e 5f 69  d=%d(db_column_i
0ed0: 6e 74 28 26 73 2c 30 29 29 22 3e 0a 20 20 20 20  nt(&s,0))">.    
0ee0: 7d 0a 20 20 20 20 40 20 3c 6e 6f 62 72 3e 25 68  }.    @ <nobr>%h
0ef0: 28 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  (db_column_text(
0f00: 26 73 2c 31 29 29 3c 2f 6e 6f 62 72 3e 0a 20 20  &s,1))</nobr>.  
0f10: 20 20 69 66 28 20 67 2e 6f 6b 41 64 6d 69 6e 20    if( g.okAdmin 
0f20: 29 7b 0a 20 20 20 20 20 20 40 20 3c 2f 61 3e 0a  ){.      @ </a>.
0f30: 20 20 20 20 7d 0a 20 20 20 20 40 20 3c 2f 74 64      }.    @ </td
0f40: 3e 3c 74 64 3e 26 6e 62 73 70 3b 26 6e 62 73 70  ><td>&nbsp;&nbsp
0f50: 3b 26 6e 62 73 70 3b 3c 2f 74 64 3e 0a 20 20 20  ;&nbsp;</td>.   
0f60: 20 40 20 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65   @ <td align="ce
0f70: 6e 74 65 72 22 3e 25 73 28 7a 43 61 70 29 3c 2f  nter">%s(zCap)</
0f80: 74 64 3e 0a 20 20 20 20 40 20 3c 74 64 3e 26 6e  td>.    @ <td>&n
0f90: 62 73 70 3b 26 6e 62 73 70 3b 26 6e 62 73 70 3b  bsp;&nbsp;&nbsp;
0fa0: 3c 2f 74 64 3e 0a 20 20 20 20 40 20 3c 74 64 20  </td>.    @ <td 
0fb0: 61 6c 69 67 6e 3d 22 6c 65 66 74 22 3e 25 73 28  align="left">%s(
0fc0: 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26  db_column_text(&
0fd0: 73 2c 33 29 29 3c 2f 74 64 3e 0a 20 20 20 20 40  s,3))</td>.    @
0fe0: 20 3c 2f 74 72 3e 0a 20 20 7d 0a 20 20 40 20 3c   </tr>.  }.  @ <
0ff0: 2f 74 61 62 6c 65 3e 3c 2f 74 64 3e 3c 2f 74 72  /table></td></tr
1000: 3e 3c 2f 74 61 62 6c 65 3e 0a 20 20 40 20 3c 74  ></table>.  @ <t
1010: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 0a  d valign="top">.
1020: 20 20 40 20 3c 62 3e 4e 6f 74 65 73 3a 3c 2f 62    @ <b>Notes:</b
1030: 3e 0a 20 20 40 20 3c 6f 6c 3e 0a 20 20 40 20 3c  >.  @ <ol>.  @ <
1040: 6c 69 3e 3c 70 3e 54 68 65 20 70 65 72 6d 69 73  li><p>The permis
1050: 73 69 6f 6e 20 66 6c 61 67 73 20 61 72 65 20 61  sion flags are a
1060: 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 20  s follows:</p>. 
1070: 20 40 20 3c 74 61 62 6c 65 3e 0a 20 20 20 20 20   @ <table>.     
1080: 40 20 3c 74 72 3e 3c 74 64 3e 3c 62 3e 61 3c 2f  @ <tr><td><b>a</
1090: 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 69 3e 41 64  b></td><td><i>Ad
10a0: 6d 69 6e 3a 3c 2f 69 3e 20 43 72 65 61 74 65 20  min:</i> Create 
10b0: 61 6e 64 20 64 65 6c 65 74 65 20 75 73 65 72 73  and delete users
10c0: 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 20 20 20  </td></tr>.     
10d0: 40 20 3c 74 72 3e 3c 74 64 3e 3c 62 3e 63 3c 2f  @ <tr><td><b>c</
10e0: 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 69 3e 41 70  b></td><td><i>Ap
10f0: 70 65 6e 64 2d 54 6b 74 3a 3c 2f 69 3e 20 41 70  pend-Tkt:</i> Ap
1100: 70 65 6e 64 20 74 6f 20 74 69 63 6b 65 74 73 3c  pend to tickets<
1110: 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 20 20 20 40  /td></tr>.     @
1120: 20 3c 74 72 3e 3c 74 64 3e 3c 62 3e 64 3c 2f 62   <tr><td><b>d</b
1130: 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 69 3e 44 65 6c  ></td><td><i>Del
1140: 65 74 65 3a 3c 2f 69 3e 20 44 65 6c 65 74 65 20  ete:</i> Delete 
1150: 77 69 6b 69 20 61 6e 64 20 74 69 63 6b 65 74 73  wiki and tickets
1160: 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 20 20 20  </td></tr>.     
1170: 40 20 3c 74 72 3e 3c 74 64 3e 3c 62 3e 65 3c 2f  @ <tr><td><b>e</
1180: 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 69 3e 45 6d  b></td><td><i>Em
1190: 61 69 6c 3a 3c 2f 69 3e 20 56 69 65 77 20 73 65  ail:</i> View se
11a0: 6e 73 69 74 69 76 65 20 64 61 74 61 20 73 75 63  nsitive data suc
11b0: 68 20 61 73 20 45 4d 61 69 6c 20 61 64 64 72 65  h as EMail addre
11c0: 73 73 65 73 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20  sses</td></tr>. 
11d0: 20 20 20 20 40 20 3c 74 72 3e 3c 74 64 3e 3c 62      @ <tr><td><b
11e0: 3e 66 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c  >f</b></td><td><
11f0: 69 3e 4e 65 77 2d 57 69 6b 69 3a 3c 2f 69 3e 20  i>New-Wiki:</i> 
1200: 43 72 65 61 74 65 20 6e 65 77 20 77 69 6b 69 20  Create new wiki 
1210: 70 61 67 65 73 3c 2f 74 64 3e 3c 2f 74 72 3e 0a  pages</td></tr>.
1220: 20 20 20 20 20 40 20 3c 74 72 3e 3c 74 64 3e 3c       @ <tr><td><
1230: 62 3e 67 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e  b>g</b></td><td>
1240: 3c 69 3e 43 6c 6f 6e 65 3a 3c 2f 69 3e 20 43 6c  <i>Clone:</i> Cl
1250: 6f 6e 65 20 74 68 65 20 72 65 70 6f 73 69 74 6f  one the reposito
1260: 72 79 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 20  ry</td></tr>.   
1270: 20 20 40 20 3c 74 72 3e 3c 74 64 3e 3c 62 3e 68    @ <tr><td><b>h
1280: 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 69 3e  </b></td><td><i>
1290: 48 69 73 74 6f 72 79 3a 3c 2f 69 3e 20 56 69 65  History:</i> Vie
12a0: 77 20 64 65 74 61 69 6c 20 72 65 70 6f 73 69 74  w detail reposit
12b0: 6f 72 79 20 68 69 73 74 6f 72 79 3c 2f 74 64 3e  ory history</td>
12c0: 3c 2f 74 72 3e 0a 20 20 20 20 20 40 20 3c 74 72  </tr>.     @ <tr
12d0: 3e 3c 74 64 3e 3c 62 3e 69 3c 2f 62 3e 3c 2f 74  ><td><b>i</b></t
12e0: 64 3e 3c 74 64 3e 3c 69 3e 43 68 65 63 6b 2d 49  d><td><i>Check-I
12f0: 6e 3a 3c 2f 69 3e 20 43 6f 6d 6d 69 74 20 6e 65  n:</i> Commit ne
1300: 77 20 76 65 72 73 69 6f 6e 73 20 69 6e 20 74 68  w versions in th
1310: 65 20 72 65 70 6f 73 69 74 6f 72 79 3c 2f 74 64  e repository</td
1320: 3e 3c 2f 74 72 3e 0a 20 20 20 20 20 40 20 3c 74  ></tr>.     @ <t
1330: 72 3e 3c 74 64 3e 3c 62 3e 6a 3c 2f 62 3e 3c 2f  r><td><b>j</b></
1340: 74 64 3e 3c 74 64 3e 3c 69 3e 52 65 61 64 2d 57  td><td><i>Read-W
1350: 69 6b 69 3a 3c 2f 69 3e 20 56 69 65 77 20 77 69  iki:</i> View wi
1360: 6b 69 20 70 61 67 65 73 3c 2f 74 64 3e 3c 2f 74  ki pages</td></t
1370: 72 3e 0a 20 20 20 20 20 40 20 3c 74 72 3e 3c 74  r>.     @ <tr><t
1380: 64 3e 3c 62 3e 6b 3c 2f 62 3e 3c 2f 74 64 3e 3c  d><b>k</b></td><
1390: 74 64 3e 3c 69 3e 57 72 69 74 65 2d 57 69 6b 69  td><i>Write-Wiki
13a0: 3a 3c 2f 69 3e 20 45 64 69 74 20 77 69 6b 69 20  :</i> Edit wiki 
13b0: 70 61 67 65 73 3c 2f 74 64 3e 3c 2f 74 72 3e 0a  pages</td></tr>.
13c0: 20 20 20 20 20 40 20 3c 74 72 3e 3c 74 64 3e 3c       @ <tr><td><
13d0: 62 3e 6d 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e  b>m</b></td><td>
13e0: 3c 69 3e 41 70 70 65 6e 64 2d 57 69 6b 69 3a 3c  <i>Append-Wiki:<
13f0: 2f 69 3e 20 41 70 70 65 6e 64 20 74 6f 20 77 69  /i> Append to wi
1400: 6b 69 20 70 61 67 65 73 3c 2f 74 64 3e 3c 2f 74  ki pages</td></t
1410: 72 3e 0a 20 20 20 20 20 40 20 3c 74 72 3e 3c 74  r>.     @ <tr><t
1420: 64 3e 3c 62 3e 6e 3c 2f 62 3e 3c 2f 74 64 3e 3c  d><b>n</b></td><
1430: 74 64 3e 3c 69 3e 4e 65 77 2d 54 6b 74 3a 3c 2f  td><i>New-Tkt:</
1440: 69 3e 20 43 72 65 61 74 65 20 6e 65 77 20 74 69  i> Create new ti
1450: 63 6b 65 74 73 3c 2f 74 64 3e 3c 2f 74 72 3e 0a  ckets</td></tr>.
1460: 20 20 20 20 20 40 20 3c 74 72 3e 3c 74 64 3e 3c       @ <tr><td><
1470: 62 3e 6f 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e  b>o</b></td><td>
1480: 3c 69 3e 43 68 65 63 6b 2d 4f 75 74 3a 3c 2f 69  <i>Check-Out:</i
1490: 3e 20 43 68 65 63 6b 20 6f 75 74 20 76 65 72 73  > Check out vers
14a0: 69 6f 6e 73 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20  ions</td></tr>. 
14b0: 20 20 20 20 40 20 3c 74 72 3e 3c 74 64 3e 3c 62      @ <tr><td><b
14c0: 3e 70 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c  >p</b></td><td><
14d0: 69 3e 50 61 73 73 77 6f 72 64 3a 3c 2f 69 3e 20  i>Password:</i> 
14e0: 43 68 61 6e 67 65 20 79 6f 75 72 20 6f 77 6e 20  Change your own 
14f0: 70 61 73 73 77 6f 72 64 3c 2f 74 64 3e 3c 2f 74  password</td></t
1500: 72 3e 0a 20 20 20 20 20 40 20 3c 74 72 3e 3c 74  r>.     @ <tr><t
1510: 64 3e 3c 62 3e 72 3c 2f 62 3e 3c 2f 74 64 3e 3c  d><b>r</b></td><
1520: 74 64 3e 3c 69 3e 52 65 61 64 2d 54 6b 74 3a 3c  td><i>Read-Tkt:<
1530: 2f 69 3e 20 56 69 65 77 20 74 69 63 6b 65 74 73  /i> View tickets
1540: 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 20 20 20  </td></tr>.     
1550: 40 20 3c 74 72 3e 3c 74 64 3e 3c 62 3e 73 3c 2f  @ <tr><td><b>s</
1560: 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 69 3e 53 65  b></td><td><i>Se
1570: 74 75 70 3a 3c 2f 69 3e 20 53 65 74 75 70 20 61  tup:</i> Setup a
1580: 6e 64 20 63 6f 6e 66 69 67 75 72 65 20 74 68 69  nd configure thi
1590: 73 20 77 65 62 73 69 74 65 3c 2f 74 64 3e 3c 2f  s website</td></
15a0: 74 72 3e 0a 20 20 20 20 20 40 20 3c 74 72 3e 3c  tr>.     @ <tr><
15b0: 74 64 3e 3c 62 3e 74 3c 2f 62 3e 3c 2f 74 64 3e  td><b>t</b></td>
15c0: 3c 74 64 3e 3c 69 3e 54 6b 74 2d 52 65 70 6f 72  <td><i>Tkt-Repor
15d0: 74 3a 3c 2f 69 3e 20 43 72 65 61 74 65 20 6e 65  t:</i> Create ne
15e0: 77 20 62 75 67 20 73 75 6d 6d 61 72 79 20 72 65  w bug summary re
15f0: 70 6f 72 74 73 3c 2f 74 64 3e 3c 2f 74 72 3e 0a  ports</td></tr>.
1600: 20 20 20 20 20 40 20 3c 74 72 3e 3c 74 64 3e 3c       @ <tr><td><
1610: 62 3e 76 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e  b>v</b></td><td>
1620: 3c 69 3e 44 65 76 65 6c 6f 70 65 72 3a 3c 2f 69  <i>Developer:</i
1630: 3e 20 49 6e 68 65 72 69 74 20 70 72 69 76 69 6c  > Inherit privil
1640: 65 67 65 73 20 6f 66 20 75 73 65 72 20 3c 74 74  eges of user <tt
1650: 3e 64 65 76 65 6c 6f 70 65 72 3c 2f 74 74 3e 3c  >developer</tt><
1660: 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 20 20 20 40  /td></tr>.     @
1670: 20 3c 74 72 3e 3c 74 64 3e 3c 62 3e 77 3c 2f 62   <tr><td><b>w</b
1680: 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 69 3e 57 72 69  ></td><td><i>Wri
1690: 74 65 2d 54 6b 74 3a 3c 2f 69 3e 20 45 64 69 74  te-Tkt:</i> Edit
16a0: 20 74 69 63 6b 65 74 73 3c 2f 74 64 3e 3c 2f 74   tickets</td></t
16b0: 72 3e 0a 20 20 20 20 20 40 20 3c 74 72 3e 3c 74  r>.     @ <tr><t
16c0: 64 3e 3c 62 3e 7a 3c 2f 62 3e 3c 2f 74 64 3e 3c  d><b>z</b></td><
16d0: 74 64 3e 3c 69 3e 5a 69 70 20 64 6f 77 6e 6c 6f  td><i>Zip downlo
16e0: 61 64 3a 3c 2f 69 3e 20 44 6f 77 6e 6c 6f 61 64  ad:</i> Download
16f0: 20 61 20 62 61 73 65 6c 69 6e 65 20 76 69 61 20   a baseline via 
1700: 74 68 65 0a 20 20 20 20 20 40 20 3c 74 74 3e 2f  the.     @ <tt>/
1710: 7a 69 70 3c 2f 74 74 3e 20 55 52 4c 20 65 76 65  zip</tt> URL eve
1720: 6e 20 77 69 74 68 6f 75 74 20 63 68 65 63 6b 3c  n without check<
1730: 62 3e 6f 3c 2f 62 3e 75 74 20 61 6e 64 20 3c 62  b>o</b>ut and <b
1740: 3e 68 3c 2f 62 3e 69 73 74 6f 72 79 20 70 65 72  >h</b>istory per
1750: 6d 69 73 73 69 6f 6e 73 3c 2f 74 64 3e 3c 2f 74  missions</td></t
1760: 72 3e 0a 20 20 40 20 3c 2f 74 61 62 6c 65 3e 0a  r>.  @ </table>.
1770: 20 20 40 20 3c 2f 6c 69 3e 0a 20 20 40 0a 20 20    @ </li>.  @.  
1780: 40 20 3c 6c 69 3e 3c 70 3e 0a 20 20 40 20 45 76  @ <li><p>.  @ Ev
1790: 65 72 79 20 75 73 65 72 2c 20 6c 6f 67 67 65 64  ery user, logged
17a0: 20 69 6e 20 6f 72 20 6e 6f 74 2c 20 69 6e 68 65   in or not, inhe
17b0: 72 69 74 73 20 74 68 65 20 70 72 69 76 69 6c 65  rits the privile
17c0: 67 65 73 20 6f 66 20 3c 62 3e 6e 6f 62 6f 64 79  ges of <b>nobody
17d0: 3c 2f 62 3e 2e 0a 20 20 40 20 41 6e 79 20 68 75  </b>..  @ Any hu
17e0: 6d 61 6e 20 63 61 6e 20 6c 6f 67 69 6e 20 61 73  man can login as
17f0: 20 3c 62 3e 61 6e 6f 6e 79 6d 6f 75 73 3c 2f 62   <b>anonymous</b
1800: 3e 20 73 69 6e 63 65 20 74 68 65 20 70 61 73 73  > since the pass
1810: 77 6f 72 64 20 69 73 0a 20 20 40 20 63 6c 65 61  word is.  @ clea
1820: 72 6c 79 20 64 69 73 70 6c 61 79 65 64 20 6f 6e  rly displayed on
1830: 20 74 68 65 20 6c 6f 67 69 6e 20 70 61 67 65 20   the login page 
1840: 66 6f 72 20 74 68 65 6d 20 74 6f 20 74 79 70 65  for them to type
1850: 2e 20 20 54 68 65 20 70 75 72 70 6f 73 65 0a 20  .  The purpose. 
1860: 20 40 20 6f 66 20 72 65 71 75 69 72 69 6e 67 20   @ of requiring 
1870: 61 6e 6f 6e 79 6d 6f 75 73 20 74 6f 20 6c 6f 67  anonymous to log
1880: 20 69 6e 20 69 73 20 74 6f 20 70 72 65 76 65 6e   in is to preven
1890: 74 20 61 63 63 65 73 73 20 62 79 20 73 70 69 64  t access by spid
18a0: 65 72 73 2e 0a 20 20 40 20 45 76 65 72 79 20 6c  ers..  @ Every l
18b0: 6f 67 67 65 64 2d 69 6e 20 75 73 65 72 20 69 6e  ogged-in user in
18c0: 68 65 72 69 74 73 20 74 68 65 20 70 72 69 76 69  herits the privi
18d0: 6c 65 67 65 73 20 6f 66 20 3c 62 3e 61 6e 6f 6e  leges of <b>anon
18e0: 79 6d 6f 75 73 3c 2f 62 3e 2e 0a 20 20 40 20 3c  ymous</b>..  @ <
18f0: 2f 70 3e 3c 2f 6c 69 3e 0a 20 20 40 0a 20 20 40  /p></li>.  @.  @
1900: 20 3c 2f 6f 6c 3e 0a 20 20 40 20 3c 2f 74 64 3e   </ol>.  @ </td>
1910: 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0a 20 20  </tr></table>.  
1920: 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 29 3b 0a  style_footer();.
1930: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
1940: 74 72 75 65 20 69 66 20 7a 50 77 20 69 73 20 61  true if zPw is a
1950: 20 76 61 6c 69 64 20 70 61 73 73 77 6f 72 64 20   valid password 
1960: 73 74 72 69 6e 67 2e 20 20 41 20 76 61 6c 69 64  string.  A valid
1970: 0a 2a 2a 20 70 61 73 73 77 6f 72 64 20 73 74 72  .** password str
1980: 69 6e 67 20 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 28  ing is:.**.**  (
1990: 31 29 20 20 41 20 7a 65 72 6f 2d 6c 65 6e 67 74  1)  A zero-lengt
19a0: 68 20 73 74 72 69 6e 67 2c 20 6f 72 0a 2a 2a 20  h string, or.** 
19b0: 20 28 32 29 20 20 61 20 73 74 72 69 6e 67 20 74   (2)  a string t
19c0: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 63  hat contains a c
19d0: 68 61 72 61 63 74 65 72 20 6f 74 68 65 72 20 74  haracter other t
19e0: 68 61 6e 20 27 2a 27 2e 0a 2a 2f 0a 73 74 61 74  han '*'..*/.stat
19f0: 69 63 20 69 6e 74 20 69 73 56 61 6c 69 64 50 77  ic int isValidPw
1a00: 53 74 72 69 6e 67 28 63 6f 6e 73 74 20 63 68 61  String(const cha
1a10: 72 20 2a 7a 50 77 29 7b 0a 20 20 69 66 28 20 7a  r *zPw){.  if( z
1a20: 50 77 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30  Pw==0 ) return 0
1a30: 3b 0a 20 20 69 66 28 20 7a 50 77 5b 30 5d 3d 3d  ;.  if( zPw[0]==
1a40: 30 20 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20  0 ) return 1;.  
1a50: 77 68 69 6c 65 28 20 7a 50 77 5b 30 5d 3d 3d 27  while( zPw[0]=='
1a60: 2a 27 20 29 7b 20 7a 50 77 2b 2b 3b 20 7d 0a 20  *' ){ zPw++; }. 
1a70: 20 72 65 74 75 72 6e 20 7a 50 77 5b 30 5d 21 3d   return zPw[0]!=
1a80: 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50  0;.}../*.** WEBP
1a90: 41 47 45 3a 20 2f 73 65 74 75 70 5f 75 65 64 69  AGE: /setup_uedi
1aa0: 74 0a 2a 2f 0a 76 6f 69 64 20 75 73 65 72 5f 65  t.*/.void user_e
1ab0: 64 69 74 28 76 6f 69 64 29 7b 0a 20 20 63 6f 6e  dit(void){.  con
1ac0: 73 74 20 63 68 61 72 20 2a 7a 49 64 2c 20 2a 7a  st char *zId, *z
1ad0: 4c 6f 67 69 6e 2c 20 2a 7a 49 6e 66 6f 2c 20 2a  Login, *zInfo, *
1ae0: 7a 43 61 70 2c 20 2a 7a 50 77 3b 0a 20 20 63 68  zCap, *zPw;.  ch
1af0: 61 72 20 2a 6f 61 61 2c 20 2a 6f 61 73 2c 20 2a  ar *oaa, *oas, *
1b00: 6f 61 72 2c 20 2a 6f 61 77 2c 20 2a 6f 61 6e 2c  oar, *oaw, *oan,
1b10: 20 2a 6f 61 69 2c 20 2a 6f 61 6a 2c 20 2a 6f 61   *oai, *oaj, *oa
1b20: 6f 2c 20 2a 6f 61 70 3b 0a 20 20 63 68 61 72 20  o, *oap;.  char 
1b30: 2a 6f 61 6b 2c 20 2a 6f 61 64 2c 20 2a 6f 61 63  *oak, *oad, *oac
1b40: 2c 20 2a 6f 61 66 2c 20 2a 6f 61 6d 2c 20 2a 6f  , *oaf, *oam, *o
1b50: 61 68 2c 20 2a 6f 61 67 2c 20 2a 6f 61 65 3b 0a  ah, *oag, *oae;.
1b60: 20 20 63 68 61 72 20 2a 6f 61 74 2c 20 2a 6f 61    char *oat, *oa
1b70: 76 2c 20 2a 6f 61 7a 3b 0a 20 20 69 6e 74 20 64  v, *oaz;.  int d
1b80: 6f 57 72 69 74 65 3b 0a 20 20 69 6e 74 20 75 69  oWrite;.  int ui
1b90: 64 3b 0a 20 20 69 6e 74 20 68 69 67 68 65 72 55  d;.  int higherU
1ba0: 73 65 72 20 3d 20 30 3b 20 20 2f 2a 20 54 72 75  ser = 0;  /* Tru
1bb0: 65 20 69 66 20 75 73 65 72 20 62 65 69 6e 67 20  e if user being 
1bc0: 65 64 69 74 65 64 20 69 73 20 53 45 54 55 50 20  edited is SETUP 
1bd0: 61 6e 64 20 74 68 65 20 2a 2f 0a 20 20 20 20 20  and the */.     
1be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf0: 20 20 2f 2a 20 75 73 65 72 20 64 6f 69 6e 67 20    /* user doing 
1c00: 74 68 65 20 65 64 69 74 69 6e 67 20 69 73 20 41  the editing is A
1c10: 44 4d 49 4e 2e 20 20 44 69 73 61 6c 6c 6f 77 20  DMIN.  Disallow 
1c20: 65 64 69 74 69 6e 67 20 2a 2f 0a 0a 20 20 2f 2a  editing */..  /*
1c30: 20 4d 75 73 74 20 68 61 76 65 20 41 44 4d 49 4e   Must have ADMIN
1c40: 20 70 72 69 76 6c 65 67 65 73 20 74 6f 20 61 63   privleges to ac
1c50: 63 65 73 73 20 74 68 69 73 20 70 61 67 65 0a 20  cess this page. 
1c60: 20 2a 2f 0a 20 20 6c 6f 67 69 6e 5f 63 68 65 63   */.  login_chec
1c70: 6b 5f 63 72 65 64 65 6e 74 69 61 6c 73 28 29 3b  k_credentials();
1c80: 0a 20 20 69 66 28 20 21 67 2e 6f 6b 41 64 6d 69  .  if( !g.okAdmi
1c90: 6e 20 29 7b 20 6c 6f 67 69 6e 5f 6e 65 65 64 65  n ){ login_neede
1ca0: 64 28 29 3b 20 72 65 74 75 72 6e 3b 20 7d 0a 0a  d(); return; }..
1cb0: 20 20 2f 2a 20 43 68 65 63 6b 20 74 6f 20 73 65    /* Check to se
1cc0: 65 20 69 66 20 61 6e 20 41 44 4d 49 4e 20 75 73  e if an ADMIN us
1cd0: 65 72 20 69 73 20 74 72 79 69 6e 67 20 74 6f 20  er is trying to 
1ce0: 65 64 69 74 20 61 20 53 45 54 55 50 20 61 63 63  edit a SETUP acc
1cf0: 6f 75 6e 74 2e 0a 20 20 2a 2a 20 44 6f 6e 27 74  ount..  ** Don't
1d00: 20 61 6c 6c 6f 77 20 74 68 61 74 2e 0a 20 20 2a   allow that..  *
1d10: 2f 0a 20 20 7a 49 64 20 3d 20 50 44 28 22 69 64  /.  zId = PD("id
1d20: 22 2c 20 22 30 22 29 3b 0a 20 20 75 69 64 20 3d  ", "0");.  uid =
1d30: 20 61 74 6f 69 28 7a 49 64 29 3b 0a 20 20 69 66   atoi(zId);.  if
1d40: 28 20 7a 49 64 20 26 26 20 21 67 2e 6f 6b 53 65  ( zId && !g.okSe
1d50: 74 75 70 20 26 26 20 75 69 64 3e 30 20 29 7b 0a  tup && uid>0 ){.
1d60: 20 20 20 20 63 68 61 72 20 2a 7a 4f 6c 64 43 61      char *zOldCa
1d70: 70 73 3b 0a 20 20 20 20 7a 4f 6c 64 43 61 70 73  ps;.    zOldCaps
1d80: 20 3d 20 64 62 5f 74 65 78 74 28 30 2c 20 22 53   = db_text(0, "S
1d90: 45 4c 45 43 54 20 63 61 70 20 46 52 4f 4d 20 75  ELECT cap FROM u
1da0: 73 65 72 20 57 48 45 52 45 20 75 69 64 3d 25 64  ser WHERE uid=%d
1db0: 22 2c 75 69 64 29 3b 0a 20 20 20 20 68 69 67 68  ",uid);.    high
1dc0: 65 72 55 73 65 72 20 3d 20 7a 4f 6c 64 43 61 70  erUser = zOldCap
1dd0: 73 20 26 26 20 73 74 72 63 68 72 28 7a 4f 6c 64  s && strchr(zOld
1de0: 43 61 70 73 2c 27 73 27 29 3b 0a 20 20 7d 0a 0a  Caps,'s');.  }..
1df0: 20 20 69 66 28 20 50 28 22 63 61 6e 22 29 20 29    if( P("can") )
1e00: 7b 0a 20 20 20 20 63 67 69 5f 72 65 64 69 72 65  {.    cgi_redire
1e10: 63 74 28 22 73 65 74 75 70 5f 75 6c 69 73 74 22  ct("setup_ulist"
1e20: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20  );.    return;. 
1e30: 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20 68   }..  /* If we h
1e40: 61 76 65 20 61 6c 6c 20 74 68 65 20 6e 65 63 65  ave all the nece
1e50: 73 73 61 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f  ssary informatio
1e60: 6e 2c 20 77 72 69 74 65 20 74 68 65 20 6e 65 77  n, write the new
1e70: 20 6f 72 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65   or.  ** modifie
1e80: 64 20 75 73 65 72 20 72 65 63 6f 72 64 2e 20 20  d user record.  
1e90: 41 66 74 65 72 20 77 72 69 74 69 6e 67 20 74 68  After writing th
1ea0: 65 20 75 73 65 72 20 72 65 63 6f 72 64 2c 20 72  e user record, r
1eb0: 65 64 69 72 65 63 74 0a 20 20 2a 2a 20 74 6f 20  edirect.  ** to 
1ec0: 74 68 65 20 70 61 67 65 20 74 68 61 74 20 64 69  the page that di
1ed0: 73 70 6c 61 79 73 20 61 20 6c 69 73 74 20 6f 66  splays a list of
1ee0: 20 75 73 65 72 73 2e 0a 20 20 2a 2f 0a 20 20 64   users..  */.  d
1ef0: 6f 57 72 69 74 65 20 3d 20 63 67 69 5f 61 6c 6c  oWrite = cgi_all
1f00: 28 22 6c 6f 67 69 6e 22 2c 22 69 6e 66 6f 22 2c  ("login","info",
1f10: 22 70 77 22 29 20 26 26 20 21 68 69 67 68 65 72  "pw") && !higher
1f20: 55 73 65 72 3b 0a 20 20 69 66 28 20 64 6f 57 72  User;.  if( doWr
1f30: 69 74 65 20 29 7b 0a 20 20 20 20 63 68 61 72 20  ite ){.    char 
1f40: 7a 43 61 70 5b 35 30 5d 3b 0a 20 20 20 20 69 6e  zCap[50];.    in
1f50: 74 20 69 20 3d 20 30 3b 0a 20 20 20 20 69 6e 74  t i = 0;.    int
1f60: 20 61 61 20 3d 20 50 28 22 61 61 22 29 21 3d 30   aa = P("aa")!=0
1f70: 3b 0a 20 20 20 20 69 6e 74 20 61 64 20 3d 20 50  ;.    int ad = P
1f80: 28 22 61 64 22 29 21 3d 30 3b 0a 20 20 20 20 69  ("ad")!=0;.    i
1f90: 6e 74 20 61 65 20 3d 20 50 28 22 61 65 22 29 21  nt ae = P("ae")!
1fa0: 3d 30 3b 0a 20 20 20 20 69 6e 74 20 61 69 20 3d  =0;.    int ai =
1fb0: 20 50 28 22 61 69 22 29 21 3d 30 3b 0a 20 20 20   P("ai")!=0;.   
1fc0: 20 69 6e 74 20 61 6a 20 3d 20 50 28 22 61 6a 22   int aj = P("aj"
1fd0: 29 21 3d 30 3b 0a 20 20 20 20 69 6e 74 20 61 6b  )!=0;.    int ak
1fe0: 20 3d 20 50 28 22 61 6b 22 29 21 3d 30 3b 0a 20   = P("ak")!=0;. 
1ff0: 20 20 20 69 6e 74 20 61 6e 20 3d 20 50 28 22 61     int an = P("a
2000: 6e 22 29 21 3d 30 3b 0a 20 20 20 20 69 6e 74 20  n")!=0;.    int 
2010: 61 6f 20 3d 20 50 28 22 61 6f 22 29 21 3d 30 3b  ao = P("ao")!=0;
2020: 0a 20 20 20 20 69 6e 74 20 61 70 20 3d 20 50 28  .    int ap = P(
2030: 22 61 70 22 29 21 3d 30 3b 0a 20 20 20 20 69 6e  "ap")!=0;.    in
2040: 74 20 61 72 20 3d 20 50 28 22 61 72 22 29 21 3d  t ar = P("ar")!=
2050: 30 3b 0a 20 20 20 20 69 6e 74 20 61 73 20 3d 20  0;.    int as = 
2060: 67 2e 6f 6b 53 65 74 75 70 20 26 26 20 50 28 22  g.okSetup && P("
2070: 61 73 22 29 21 3d 30 3b 0a 20 20 20 20 69 6e 74  as")!=0;.    int
2080: 20 61 77 20 3d 20 50 28 22 61 77 22 29 21 3d 30   aw = P("aw")!=0
2090: 3b 0a 20 20 20 20 69 6e 74 20 61 63 20 3d 20 50  ;.    int ac = P
20a0: 28 22 61 63 22 29 21 3d 30 3b 0a 20 20 20 20 69  ("ac")!=0;.    i
20b0: 6e 74 20 61 66 20 3d 20 50 28 22 61 66 22 29 21  nt af = P("af")!
20c0: 3d 30 3b 0a 20 20 20 20 69 6e 74 20 61 6d 20 3d  =0;.    int am =
20d0: 20 50 28 22 61 6d 22 29 21 3d 30 3b 0a 20 20 20   P("am")!=0;.   
20e0: 20 69 6e 74 20 61 68 20 3d 20 50 28 22 61 68 22   int ah = P("ah"
20f0: 29 21 3d 30 3b 0a 20 20 20 20 69 6e 74 20 61 67  )!=0;.    int ag
2100: 20 3d 20 50 28 22 61 67 22 29 21 3d 30 3b 0a 20   = P("ag")!=0;. 
2110: 20 20 20 69 6e 74 20 61 74 20 3d 20 50 28 22 61     int at = P("a
2120: 74 22 29 21 3d 30 3b 0a 20 20 20 20 69 6e 74 20  t")!=0;.    int 
2130: 61 76 20 3d 20 50 28 22 61 76 22 29 21 3d 30 3b  av = P("av")!=0;
2140: 0a 20 20 20 20 69 6e 74 20 61 7a 20 3d 20 50 28  .    int az = P(
2150: 22 61 7a 22 29 21 3d 30 3b 0a 20 20 20 20 69 66  "az")!=0;.    if
2160: 28 20 61 61 20 29 7b 20 7a 43 61 70 5b 69 2b 2b  ( aa ){ zCap[i++
2170: 5d 20 3d 20 27 61 27 3b 20 7d 0a 20 20 20 20 69  ] = 'a'; }.    i
2180: 66 28 20 61 63 20 29 7b 20 7a 43 61 70 5b 69 2b  f( ac ){ zCap[i+
2190: 2b 5d 20 3d 20 27 63 27 3b 20 7d 0a 20 20 20 20  +] = 'c'; }.    
21a0: 69 66 28 20 61 64 20 29 7b 20 7a 43 61 70 5b 69  if( ad ){ zCap[i
21b0: 2b 2b 5d 20 3d 20 27 64 27 3b 20 7d 0a 20 20 20  ++] = 'd'; }.   
21c0: 20 69 66 28 20 61 65 20 29 7b 20 7a 43 61 70 5b   if( ae ){ zCap[
21d0: 69 2b 2b 5d 20 3d 20 27 65 27 3b 20 7d 0a 20 20  i++] = 'e'; }.  
21e0: 20 20 69 66 28 20 61 66 20 29 7b 20 7a 43 61 70    if( af ){ zCap
21f0: 5b 69 2b 2b 5d 20 3d 20 27 66 27 3b 20 7d 0a 20  [i++] = 'f'; }. 
2200: 20 20 20 69 66 28 20 61 68 20 29 7b 20 7a 43 61     if( ah ){ zCa
2210: 70 5b 69 2b 2b 5d 20 3d 20 27 68 27 3b 20 7d 0a  p[i++] = 'h'; }.
2220: 20 20 20 20 69 66 28 20 61 67 20 29 7b 20 7a 43      if( ag ){ zC
2230: 61 70 5b 69 2b 2b 5d 20 3d 20 27 67 27 3b 20 7d  ap[i++] = 'g'; }
2240: 0a 20 20 20 20 69 66 28 20 61 69 20 29 7b 20 7a  .    if( ai ){ z
2250: 43 61 70 5b 69 2b 2b 5d 20 3d 20 27 69 27 3b 20  Cap[i++] = 'i'; 
2260: 7d 0a 20 20 20 20 69 66 28 20 61 6a 20 29 7b 20  }.    if( aj ){ 
2270: 7a 43 61 70 5b 69 2b 2b 5d 20 3d 20 27 6a 27 3b  zCap[i++] = 'j';
2280: 20 7d 0a 20 20 20 20 69 66 28 20 61 6b 20 29 7b   }.    if( ak ){
2290: 20 7a 43 61 70 5b 69 2b 2b 5d 20 3d 20 27 6b 27   zCap[i++] = 'k'
22a0: 3b 20 7d 0a 20 20 20 20 69 66 28 20 61 6d 20 29  ; }.    if( am )
22b0: 7b 20 7a 43 61 70 5b 69 2b 2b 5d 20 3d 20 27 6d  { zCap[i++] = 'm
22c0: 27 3b 20 7d 0a 20 20 20 20 69 66 28 20 61 6e 20  '; }.    if( an 
22d0: 29 7b 20 7a 43 61 70 5b 69 2b 2b 5d 20 3d 20 27  ){ zCap[i++] = '
22e0: 6e 27 3b 20 7d 0a 20 20 20 20 69 66 28 20 61 6f  n'; }.    if( ao
22f0: 20 29 7b 20 7a 43 61 70 5b 69 2b 2b 5d 20 3d 20   ){ zCap[i++] = 
2300: 27 6f 27 3b 20 7d 0a 20 20 20 20 69 66 28 20 61  'o'; }.    if( a
2310: 70 20 29 7b 20 7a 43 61 70 5b 69 2b 2b 5d 20 3d  p ){ zCap[i++] =
2320: 20 27 70 27 3b 20 7d 0a 20 20 20 20 69 66 28 20   'p'; }.    if( 
2330: 61 72 20 29 7b 20 7a 43 61 70 5b 69 2b 2b 5d 20  ar ){ zCap[i++] 
2340: 3d 20 27 72 27 3b 20 7d 0a 20 20 20 20 69 66 28  = 'r'; }.    if(
2350: 20 61 73 20 29 7b 20 7a 43 61 70 5b 69 2b 2b 5d   as ){ zCap[i++]
2360: 20 3d 20 27 73 27 3b 20 7d 0a 20 20 20 20 69 66   = 's'; }.    if
2370: 28 20 61 74 20 29 7b 20 7a 43 61 70 5b 69 2b 2b  ( at ){ zCap[i++
2380: 5d 20 3d 20 27 74 27 3b 20 7d 0a 20 20 20 20 69  ] = 't'; }.    i
2390: 66 28 20 61 76 20 29 7b 20 7a 43 61 70 5b 69 2b  f( av ){ zCap[i+
23a0: 2b 5d 20 3d 20 27 76 27 3b 20 7d 0a 20 20 20 20  +] = 'v'; }.    
23b0: 69 66 28 20 61 77 20 29 7b 20 7a 43 61 70 5b 69  if( aw ){ zCap[i
23c0: 2b 2b 5d 20 3d 20 27 77 27 3b 20 7d 0a 20 20 20  ++] = 'w'; }.   
23d0: 20 69 66 28 20 61 7a 20 29 7b 20 7a 43 61 70 5b   if( az ){ zCap[
23e0: 69 2b 2b 5d 20 3d 20 27 7a 27 3b 20 7d 0a 0a 20  i++] = 'z'; }.. 
23f0: 20 20 20 7a 43 61 70 5b 69 5d 20 3d 20 30 3b 0a     zCap[i] = 0;.
2400: 20 20 20 20 7a 50 77 20 3d 20 50 28 22 70 77 22      zPw = P("pw"
2410: 29 3b 0a 20 20 20 20 69 66 28 20 21 69 73 56 61  );.    if( !isVa
2420: 6c 69 64 50 77 53 74 72 69 6e 67 28 7a 50 77 29  lidPwString(zPw)
2430: 20 29 7b 0a 20 20 20 20 20 20 7a 50 77 20 3d 20   ){.      zPw = 
2440: 64 62 5f 74 65 78 74 28 30 2c 20 22 53 45 4c 45  db_text(0, "SELE
2450: 43 54 20 70 77 20 46 52 4f 4d 20 75 73 65 72 20  CT pw FROM user 
2460: 57 48 45 52 45 20 75 69 64 3d 25 64 22 2c 20 75  WHERE uid=%d", u
2470: 69 64 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a  id);.    }.    z
2480: 4c 6f 67 69 6e 20 3d 20 50 28 22 6c 6f 67 69 6e  Login = P("login
2490: 22 29 3b 0a 20 20 20 20 69 66 28 20 75 69 64 3e  ");.    if( uid>
24a0: 30 20 26 26 0a 20 20 20 20 20 20 20 20 64 62 5f  0 &&.        db_
24b0: 65 78 69 73 74 73 28 22 53 45 4c 45 43 54 20 31  exists("SELECT 1
24c0: 20 46 52 4f 4d 20 75 73 65 72 20 57 48 45 52 45   FROM user WHERE
24d0: 20 6c 6f 67 69 6e 3d 25 51 20 41 4e 44 20 75 69   login=%Q AND ui
24e0: 64 21 3d 25 64 22 2c 20 7a 4c 6f 67 69 6e 2c 20  d!=%d", zLogin, 
24f0: 75 69 64 29 0a 20 20 20 20 29 7b 0a 20 20 20 20  uid).    ){.    
2500: 20 20 73 74 79 6c 65 5f 68 65 61 64 65 72 28 22    style_header("
2510: 55 73 65 72 20 43 72 65 61 74 69 6f 6e 20 45 72  User Creation Er
2520: 72 6f 72 22 29 3b 0a 20 20 20 20 20 20 40 20 3c  ror");.      @ <
2530: 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 72 65 64 22  font color="red"
2540: 3e 4c 6f 67 69 6e 20 22 25 68 28 7a 4c 6f 67 69  >Login "%h(zLogi
2550: 6e 29 22 20 69 73 20 61 6c 72 65 61 64 79 20 75  n)" is already u
2560: 73 65 64 20 62 79 20 61 20 64 69 66 66 65 72 65  sed by a differe
2570: 6e 74 0a 20 20 20 20 20 20 40 20 75 73 65 72 2e  nt.      @ user.
2580: 3c 2f 66 6f 6e 74 3e 0a 20 20 20 20 20 20 40 0a  </font>.      @.
2590: 20 20 20 20 20 20 40 20 3c 70 3e 3c 61 20 68 72        @ <p><a hr
25a0: 65 66 3d 22 73 65 74 75 70 5f 75 65 64 69 74 3f  ef="setup_uedit?
25b0: 69 64 3d 25 64 28 75 69 64 29 29 3e 5b 42 75 6d  id=%d(uid))>[Bum
25c0: 6d 65 72 5d 3c 2f 61 3e 3c 2f 70 3e 0a 20 20 20  mer]</a></p>.   
25d0: 20 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28     style_footer(
25e0: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 3b  );.      return;
25f0: 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 5f 6d 75  .    }.    db_mu
2600: 6c 74 69 5f 65 78 65 63 28 0a 20 20 20 20 20 20  lti_exec(.      
2610: 20 22 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 75   "REPLACE INTO u
2620: 73 65 72 28 75 69 64 2c 6c 6f 67 69 6e 2c 69 6e  ser(uid,login,in
2630: 66 6f 2c 70 77 2c 63 61 70 29 20 22 0a 20 20 20  fo,pw,cap) ".   
2640: 20 20 20 20 22 56 41 4c 55 45 53 28 6e 75 6c 6c      "VALUES(null
2650: 69 66 28 25 64 2c 30 29 2c 25 51 2c 25 51 2c 25  if(%d,0),%Q,%Q,%
2660: 51 2c 27 25 73 27 29 22 2c 0a 20 20 20 20 20 20  Q,'%s')",.      
2670: 75 69 64 2c 20 50 28 22 6c 6f 67 69 6e 22 29 2c  uid, P("login"),
2680: 20 50 28 22 69 6e 66 6f 22 29 2c 20 7a 50 77 2c   P("info"), zPw,
2690: 20 7a 43 61 70 0a 20 20 20 20 29 3b 0a 20 20 20   zCap.    );.   
26a0: 20 63 67 69 5f 72 65 64 69 72 65 63 74 28 22 73   cgi_redirect("s
26b0: 65 74 75 70 5f 75 6c 69 73 74 22 29 3b 0a 20 20  etup_ulist");.  
26c0: 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 0a 20    return;.  }.. 
26d0: 20 2f 2a 20 4c 6f 61 64 20 74 68 65 20 65 78 69   /* Load the exi
26e0: 73 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f  sting informatio
26f0: 6e 20 61 62 6f 75 74 20 74 68 65 20 75 73 65 72  n about the user
2700: 2c 20 69 66 20 61 6e 79 0a 20 20 2a 2f 0a 20 20  , if any.  */.  
2710: 7a 4c 6f 67 69 6e 20 3d 20 22 22 3b 0a 20 20 7a  zLogin = "";.  z
2720: 49 6e 66 6f 20 3d 20 22 22 3b 0a 20 20 7a 43 61  Info = "";.  zCa
2730: 70 20 3d 20 22 22 3b 0a 20 20 7a 50 77 20 3d 20  p = "";.  zPw = 
2740: 22 22 3b 0a 20 20 6f 61 61 20 3d 20 6f 61 63 20  "";.  oaa = oac 
2750: 3d 20 6f 61 64 20 3d 20 6f 61 65 20 3d 20 6f 61  = oad = oae = oa
2760: 66 20 3d 20 6f 61 67 20 3d 20 6f 61 68 20 3d 20  f = oag = oah = 
2770: 6f 61 69 20 3d 20 6f 61 6a 20 3d 20 6f 61 6b 20  oai = oaj = oak 
2780: 3d 20 6f 61 6d 20 3d 0a 20 20 20 20 20 20 20 20  = oam =.        
2790: 6f 61 6e 20 3d 20 6f 61 6f 20 3d 20 6f 61 70 20  oan = oao = oap 
27a0: 3d 20 6f 61 72 20 3d 20 6f 61 73 20 3d 20 6f 61  = oar = oas = oa
27b0: 74 20 3d 20 6f 61 76 20 3d 20 6f 61 77 20 3d 20  t = oav = oaw = 
27c0: 6f 61 7a 20 3d 20 22 22 3b 0a 20 20 69 66 28 20  oaz = "";.  if( 
27d0: 75 69 64 20 29 7b 0a 20 20 20 20 7a 4c 6f 67 69  uid ){.    zLogi
27e0: 6e 20 3d 20 64 62 5f 74 65 78 74 28 22 22 2c 20  n = db_text("", 
27f0: 22 53 45 4c 45 43 54 20 6c 6f 67 69 6e 20 46 52  "SELECT login FR
2800: 4f 4d 20 75 73 65 72 20 57 48 45 52 45 20 75 69  OM user WHERE ui
2810: 64 3d 25 64 22 2c 20 75 69 64 29 3b 0a 20 20 20  d=%d", uid);.   
2820: 20 7a 49 6e 66 6f 20 3d 20 64 62 5f 74 65 78 74   zInfo = db_text
2830: 28 22 22 2c 20 22 53 45 4c 45 43 54 20 69 6e 66  ("", "SELECT inf
2840: 6f 20 46 52 4f 4d 20 75 73 65 72 20 57 48 45 52  o FROM user WHER
2850: 45 20 75 69 64 3d 25 64 22 2c 20 75 69 64 29 3b  E uid=%d", uid);
2860: 0a 20 20 20 20 7a 43 61 70 20 3d 20 64 62 5f 74  .    zCap = db_t
2870: 65 78 74 28 22 22 2c 20 22 53 45 4c 45 43 54 20  ext("", "SELECT 
2880: 63 61 70 20 46 52 4f 4d 20 75 73 65 72 20 57 48  cap FROM user WH
2890: 45 52 45 20 75 69 64 3d 25 64 22 2c 20 75 69 64  ERE uid=%d", uid
28a0: 29 3b 0a 20 20 20 20 7a 50 77 20 3d 20 64 62 5f  );.    zPw = db_
28b0: 74 65 78 74 28 22 22 2c 20 22 53 45 4c 45 43 54  text("", "SELECT
28c0: 20 70 77 20 46 52 4f 4d 20 75 73 65 72 20 57 48   pw FROM user WH
28d0: 45 52 45 20 75 69 64 3d 25 64 22 2c 20 75 69 64  ERE uid=%d", uid
28e0: 29 3b 0a 20 20 20 20 69 66 28 20 73 74 72 63 68  );.    if( strch
28f0: 72 28 7a 43 61 70 2c 20 27 61 27 29 20 29 20 6f  r(zCap, 'a') ) o
2900: 61 61 20 3d 20 22 20 63 68 65 63 6b 65 64 22 3b  aa = " checked";
2910: 0a 20 20 20 20 69 66 28 20 73 74 72 63 68 72 28  .    if( strchr(
2920: 7a 43 61 70 2c 20 27 63 27 29 20 29 20 6f 61 63  zCap, 'c') ) oac
2930: 20 3d 20 22 20 63 68 65 63 6b 65 64 22 3b 0a 20   = " checked";. 
2940: 20 20 20 69 66 28 20 73 74 72 63 68 72 28 7a 43     if( strchr(zC
2950: 61 70 2c 20 27 64 27 29 20 29 20 6f 61 64 20 3d  ap, 'd') ) oad =
2960: 20 22 20 63 68 65 63 6b 65 64 22 3b 0a 20 20 20   " checked";.   
2970: 20 69 66 28 20 73 74 72 63 68 72 28 7a 43 61 70   if( strchr(zCap
2980: 2c 20 27 65 27 29 20 29 20 6f 61 65 20 3d 20 22  , 'e') ) oae = "
2990: 20 63 68 65 63 6b 65 64 22 3b 0a 20 20 20 20 69   checked";.    i
29a0: 66 28 20 73 74 72 63 68 72 28 7a 43 61 70 2c 20  f( strchr(zCap, 
29b0: 27 66 27 29 20 29 20 6f 61 66 20 3d 20 22 20 63  'f') ) oaf = " c
29c0: 68 65 63 6b 65 64 22 3b 0a 20 20 20 20 69 66 28  hecked";.    if(
29d0: 20 73 74 72 63 68 72 28 7a 43 61 70 2c 20 27 67   strchr(zCap, 'g
29e0: 27 29 20 29 20 6f 61 67 20 3d 20 22 20 63 68 65  ') ) oag = " che
29f0: 63 6b 65 64 22 3b 0a 20 20 20 20 69 66 28 20 73  cked";.    if( s
2a00: 74 72 63 68 72 28 7a 43 61 70 2c 20 27 68 27 29  trchr(zCap, 'h')
2a10: 20 29 20 6f 61 68 20 3d 20 22 20 63 68 65 63 6b   ) oah = " check
2a20: 65 64 22 3b 0a 20 20 20 20 69 66 28 20 73 74 72  ed";.    if( str
2a30: 63 68 72 28 7a 43 61 70 2c 20 27 69 27 29 20 29  chr(zCap, 'i') )
2a40: 20 6f 61 69 20 3d 20 22 20 63 68 65 63 6b 65 64   oai = " checked
2a50: 22 3b 0a 20 20 20 20 69 66 28 20 73 74 72 63 68  ";.    if( strch
2a60: 72 28 7a 43 61 70 2c 20 27 6a 27 29 20 29 20 6f  r(zCap, 'j') ) o
2a70: 61 6a 20 3d 20 22 20 63 68 65 63 6b 65 64 22 3b  aj = " checked";
2a80: 0a 20 20 20 20 69 66 28 20 73 74 72 63 68 72 28  .    if( strchr(
2a90: 7a 43 61 70 2c 20 27 6b 27 29 20 29 20 6f 61 6b  zCap, 'k') ) oak
2aa0: 20 3d 20 22 20 63 68 65 63 6b 65 64 22 3b 0a 20   = " checked";. 
2ab0: 20 20 20 69 66 28 20 73 74 72 63 68 72 28 7a 43     if( strchr(zC
2ac0: 61 70 2c 20 27 6d 27 29 20 29 20 6f 61 6d 20 3d  ap, 'm') ) oam =
2ad0: 20 22 20 63 68 65 63 6b 65 64 22 3b 0a 20 20 20   " checked";.   
2ae0: 20 69 66 28 20 73 74 72 63 68 72 28 7a 43 61 70   if( strchr(zCap
2af0: 2c 20 27 6e 27 29 20 29 20 6f 61 6e 20 3d 20 22  , 'n') ) oan = "
2b00: 20 63 68 65 63 6b 65 64 22 3b 0a 20 20 20 20 69   checked";.    i
2b10: 66 28 20 73 74 72 63 68 72 28 7a 43 61 70 2c 20  f( strchr(zCap, 
2b20: 27 6f 27 29 20 29 20 6f 61 6f 20 3d 20 22 20 63  'o') ) oao = " c
2b30: 68 65 63 6b 65 64 22 3b 0a 20 20 20 20 69 66 28  hecked";.    if(
2b40: 20 73 74 72 63 68 72 28 7a 43 61 70 2c 20 27 70   strchr(zCap, 'p
2b50: 27 29 20 29 20 6f 61 70 20 3d 20 22 20 63 68 65  ') ) oap = " che
2b60: 63 6b 65 64 22 3b 0a 20 20 20 20 69 66 28 20 73  cked";.    if( s
2b70: 74 72 63 68 72 28 7a 43 61 70 2c 20 27 72 27 29  trchr(zCap, 'r')
2b80: 20 29 20 6f 61 72 20 3d 20 22 20 63 68 65 63 6b   ) oar = " check
2b90: 65 64 22 3b 0a 20 20 20 20 69 66 28 20 73 74 72  ed";.    if( str
2ba0: 63 68 72 28 7a 43 61 70 2c 20 27 73 27 29 20 29  chr(zCap, 's') )
2bb0: 20 6f 61 73 20 3d 20 22 20 63 68 65 63 6b 65 64   oas = " checked
2bc0: 22 3b 0a 20 20 20 20 69 66 28 20 73 74 72 63 68  ";.    if( strch
2bd0: 72 28 7a 43 61 70 2c 20 27 74 27 29 20 29 20 6f  r(zCap, 't') ) o
2be0: 61 74 20 3d 20 22 20 63 68 65 63 6b 65 64 22 3b  at = " checked";
2bf0: 0a 20 20 20 20 69 66 28 20 73 74 72 63 68 72 28  .    if( strchr(
2c00: 7a 43 61 70 2c 20 27 76 27 29 20 29 20 6f 61 76  zCap, 'v') ) oav
2c10: 20 3d 20 22 20 63 68 65 63 6b 65 64 22 3b 0a 20   = " checked";. 
2c20: 20 20 20 69 66 28 20 73 74 72 63 68 72 28 7a 43     if( strchr(zC
2c30: 61 70 2c 20 27 77 27 29 20 29 20 6f 61 77 20 3d  ap, 'w') ) oaw =
2c40: 20 22 20 63 68 65 63 6b 65 64 22 3b 0a 20 20 20   " checked";.   
2c50: 20 69 66 28 20 73 74 72 63 68 72 28 7a 43 61 70   if( strchr(zCap
2c60: 2c 20 27 7a 27 29 20 29 20 6f 61 7a 20 3d 20 22  , 'z') ) oaz = "
2c70: 20 63 68 65 63 6b 65 64 22 3b 0a 20 20 7d 0a 0a   checked";.  }..
2c80: 20 20 2f 2a 20 42 65 67 69 6e 20 67 65 6e 65 72    /* Begin gener
2c90: 61 74 69 6e 67 20 74 68 65 20 70 61 67 65 0a 20  ating the page. 
2ca0: 20 2a 2f 0a 20 20 73 74 79 6c 65 5f 73 75 62 6d   */.  style_subm
2cb0: 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 43 61 6e  enu_element("Can
2cc0: 63 65 6c 22 2c 20 22 43 61 6e 63 65 6c 22 2c 20  cel", "Cancel", 
2cd0: 22 73 65 74 75 70 5f 75 6c 69 73 74 22 29 3b 0a  "setup_ulist");.
2ce0: 20 20 69 66 28 20 75 69 64 20 29 7b 0a 20 20 20    if( uid ){.   
2cf0: 20 73 74 79 6c 65 5f 68 65 61 64 65 72 28 6d 70   style_header(mp
2d00: 72 69 6e 74 66 28 22 45 64 69 74 20 55 73 65 72  rintf("Edit User
2d10: 20 25 68 22 2c 20 7a 4c 6f 67 69 6e 29 29 3b 0a   %h", zLogin));.
2d20: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74 79    }else{.    sty
2d30: 6c 65 5f 68 65 61 64 65 72 28 22 41 64 64 20 41  le_header("Add A
2d40: 20 4e 65 77 20 55 73 65 72 22 29 3b 0a 20 20 7d   New User");.  }
2d50: 0a 20 20 40 20 3c 74 61 62 6c 65 20 61 6c 69 67  .  @ <table alig
2d60: 6e 3d 22 6c 65 66 74 22 20 68 73 70 61 63 65 3d  n="left" hspace=
2d70: 22 32 30 22 20 76 73 70 61 63 65 3d 22 31 30 22  "20" vspace="10"
2d80: 3e 3c 74 72 3e 3c 74 64 3e 0a 20 20 40 20 3c 66  ><tr><td>.  @ <f
2d90: 6f 72 6d 20 61 63 74 69 6f 6e 3d 22 25 73 28 67  orm action="%s(g
2da0: 2e 7a 50 61 74 68 29 22 20 6d 65 74 68 6f 64 3d  .zPath)" method=
2db0: 22 50 4f 53 54 22 3e 0a 20 20 40 20 3c 74 61 62  "POST">.  @ <tab
2dc0: 6c 65 3e 0a 20 20 40 20 3c 74 72 3e 0a 20 20 40  le>.  @ <tr>.  @
2dd0: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69     <td align="ri
2de0: 67 68 74 22 3e 3c 6e 6f 62 72 3e 55 73 65 72 20  ght"><nobr>User 
2df0: 49 44 3a 3c 2f 6e 6f 62 72 3e 3c 2f 74 64 3e 0a  ID:</nobr></td>.
2e00: 20 20 69 66 28 20 75 69 64 20 29 7b 0a 20 20 20    if( uid ){.   
2e10: 20 40 20 20 20 3c 74 64 3e 25 64 28 75 69 64 29   @   <td>%d(uid)
2e20: 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 68 69   <input type="hi
2e30: 64 64 65 6e 22 20 6e 61 6d 65 3d 22 69 64 22 20  dden" name="id" 
2e40: 76 61 6c 75 65 3d 22 25 64 28 75 69 64 29 22 3e  value="%d(uid)">
2e50: 3c 2f 74 64 3e 0a 20 20 7d 65 6c 73 65 7b 0a 20  </td>.  }else{. 
2e60: 20 20 20 40 20 20 20 3c 74 64 3e 28 6e 65 77 20     @   <td>(new 
2e70: 75 73 65 72 29 3c 69 6e 70 75 74 20 74 79 70 65  user)<input type
2e80: 3d 22 68 69 64 64 65 6e 22 20 6e 61 6d 65 3d 22  ="hidden" name="
2e90: 69 64 22 20 76 61 6c 75 65 3d 30 3e 3c 2f 74 64  id" value=0></td
2ea0: 3e 0a 20 20 7d 0a 20 20 40 20 3c 2f 74 72 3e 0a  >.  }.  @ </tr>.
2eb0: 20 20 40 20 3c 74 72 3e 0a 20 20 40 20 20 20 3c    @ <tr>.  @   <
2ec0: 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  td align="right"
2ed0: 3e 3c 6e 6f 62 72 3e 4c 6f 67 69 6e 3a 3c 2f 6e  ><nobr>Login:</n
2ee0: 6f 62 72 3e 3c 2f 74 64 3e 0a 20 20 40 20 20 20  obr></td>.  @   
2ef0: 3c 74 64 3e 3c 69 6e 70 75 74 20 74 79 70 65 3d  <td><input type=
2f00: 22 74 65 78 74 22 20 6e 61 6d 65 3d 22 6c 6f 67  "text" name="log
2f10: 69 6e 22 20 76 61 6c 75 65 3d 22 25 68 28 7a 4c  in" value="%h(zL
2f20: 6f 67 69 6e 29 22 3e 3c 2f 74 64 3e 0a 20 20 40  ogin)"></td>.  @
2f30: 20 3c 2f 74 72 3e 0a 20 20 40 20 3c 74 72 3e 0a   </tr>.  @ <tr>.
2f40: 20 20 40 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d    @   <td align=
2f50: 22 72 69 67 68 74 22 3e 3c 6e 6f 62 72 3e 43 6f  "right"><nobr>Co
2f60: 6e 74 61 63 74 26 6e 62 73 70 3b 49 6e 66 6f 3a  ntact&nbsp;Info:
2f70: 3c 2f 6e 6f 62 72 3e 3c 2f 74 64 3e 0a 20 20 40  </nobr></td>.  @
2f80: 20 20 20 3c 74 64 3e 3c 69 6e 70 75 74 20 74 79     <td><input ty
2f90: 70 65 3d 22 74 65 78 74 22 20 6e 61 6d 65 3d 22  pe="text" name="
2fa0: 69 6e 66 6f 22 20 73 69 7a 65 3d 34 30 20 76 61  info" size=40 va
2fb0: 6c 75 65 3d 22 25 68 28 7a 49 6e 66 6f 29 22 3e  lue="%h(zInfo)">
2fc0: 3c 2f 74 64 3e 0a 20 20 40 20 3c 2f 74 72 3e 0a  </td>.  @ </tr>.
2fd0: 20 20 40 20 3c 74 72 3e 0a 20 20 40 20 20 20 3c    @ <tr>.  @   <
2fe0: 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  td align="right"
2ff0: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 43 61   valign="top">Ca
3000: 70 61 62 69 6c 69 74 69 65 73 3a 3c 2f 74 64 3e  pabilities:</td>
3010: 0a 20 20 40 20 20 20 3c 74 64 3e 0a 20 20 69 66  .  @   <td>.  if
3020: 28 20 67 2e 6f 6b 53 65 74 75 70 20 29 7b 0a 20  ( g.okSetup ){. 
3030: 20 20 20 40 20 20 20 20 20 3c 69 6e 70 75 74 20     @     <input 
3040: 74 79 70 65 3d 22 63 68 65 63 6b 62 6f 78 22 20  type="checkbox" 
3050: 6e 61 6d 65 3d 22 61 73 22 25 73 28 6f 61 73 29  name="as"%s(oas)
3060: 3e 53 65 74 75 70 3c 2f 69 6e 70 75 74 3e 3c 62  >Setup</input><b
3070: 72 3e 0a 20 20 7d 0a 20 20 40 20 20 20 20 20 3c  r>.  }.  @     <
3080: 69 6e 70 75 74 20 74 79 70 65 3d 22 63 68 65 63  input type="chec
3090: 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 61 61 22 25  kbox" name="aa"%
30a0: 73 28 6f 61 61 29 3e 41 64 6d 69 6e 3c 2f 69 6e  s(oaa)>Admin</in
30b0: 70 75 74 3e 3c 62 72 3e 0a 20 20 40 20 20 20 20  put><br>.  @    
30c0: 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 63 68   <input type="ch
30d0: 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 61 64  eckbox" name="ad
30e0: 22 25 73 28 6f 61 64 29 3e 44 65 6c 65 74 65 3c  "%s(oad)>Delete<
30f0: 2f 69 6e 70 75 74 3e 3c 62 72 3e 0a 20 20 40 20  /input><br>.  @ 
3100: 20 20 20 20 3c 69 6e 70 75 74 20 74 79 70 65 3d      <input type=
3110: 22 63 68 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d  "checkbox" name=
3120: 22 61 65 22 25 73 28 6f 61 64 29 3e 45 6d 61 69  "ae"%s(oad)>Emai
3130: 6c 3c 2f 69 6e 70 75 74 3e 3c 62 72 3e 0a 20 20  l</input><br>.  
3140: 40 20 20 20 20 20 3c 69 6e 70 75 74 20 74 79 70  @     <input typ
3150: 65 3d 22 63 68 65 63 6b 62 6f 78 22 20 6e 61 6d  e="checkbox" nam
3160: 65 3d 22 61 70 22 25 73 28 6f 61 70 29 3e 50 61  e="ap"%s(oap)>Pa
3170: 73 73 77 6f 72 64 3c 2f 69 6e 70 75 74 3e 3c 62  ssword</input><b
3180: 72 3e 0a 20 20 40 20 20 20 20 20 3c 69 6e 70 75  r>.  @     <inpu
3190: 74 20 74 79 70 65 3d 22 63 68 65 63 6b 62 6f 78  t type="checkbox
31a0: 22 20 6e 61 6d 65 3d 22 61 69 22 25 73 28 6f 61  " name="ai"%s(oa
31b0: 69 29 3e 43 68 65 63 6b 2d 49 6e 3c 2f 69 6e 70  i)>Check-In</inp
31c0: 75 74 3e 3c 62 72 3e 0a 20 20 40 20 20 20 20 20  ut><br>.  @     
31d0: 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 63 68 65  <input type="che
31e0: 63 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 61 6f 22  ckbox" name="ao"
31f0: 25 73 28 6f 61 6f 29 3e 43 68 65 63 6b 2d 4f 75  %s(oao)>Check-Ou
3200: 74 3c 2f 69 6e 70 75 74 3e 3c 62 72 3e 0a 20 20  t</input><br>.  
3210: 40 20 20 20 20 20 3c 69 6e 70 75 74 20 74 79 70  @     <input typ
3220: 65 3d 22 63 68 65 63 6b 62 6f 78 22 20 6e 61 6d  e="checkbox" nam
3230: 65 3d 22 61 68 22 25 73 28 6f 61 68 29 3e 48 69  e="ah"%s(oah)>Hi
3240: 73 74 6f 72 79 3c 2f 69 6e 70 75 74 3e 3c 62 72  story</input><br
3250: 3e 0a 20 20 40 20 20 20 20 20 3c 69 6e 70 75 74  >.  @     <input
3260: 20 74 79 70 65 3d 22 63 68 65 63 6b 62 6f 78 22   type="checkbox"
3270: 20 6e 61 6d 65 3d 22 61 76 22 25 73 28 6f 61 76   name="av"%s(oav
3280: 29 3e 44 65 76 65 6c 6f 70 65 72 3c 2f 69 6e 70  )>Developer</inp
3290: 75 74 3e 3c 62 72 3e 0a 20 20 40 20 20 20 20 20  ut><br>.  @     
32a0: 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 63 68 65  <input type="che
32b0: 63 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 61 67 22  ckbox" name="ag"
32c0: 25 73 28 6f 61 67 29 3e 43 6c 6f 6e 65 3c 2f 69  %s(oag)>Clone</i
32d0: 6e 70 75 74 3e 3c 62 72 3e 0a 20 20 40 20 20 20  nput><br>.  @   
32e0: 20 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 63    <input type="c
32f0: 68 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 61  heckbox" name="a
3300: 6a 22 25 73 28 6f 61 6a 29 3e 52 65 61 64 20 57  j"%s(oaj)>Read W
3310: 69 6b 69 3c 2f 69 6e 70 75 74 3e 3c 62 72 3e 0a  iki</input><br>.
3320: 20 20 40 20 20 20 20 20 3c 69 6e 70 75 74 20 74    @     <input t
3330: 79 70 65 3d 22 63 68 65 63 6b 62 6f 78 22 20 6e  ype="checkbox" n
3340: 61 6d 65 3d 22 61 66 22 25 73 28 6f 61 66 29 3e  ame="af"%s(oaf)>
3350: 4e 65 77 20 57 69 6b 69 3c 2f 69 6e 70 75 74 3e  New Wiki</input>
3360: 3c 62 72 3e 0a 20 20 40 20 20 20 20 20 3c 69 6e  <br>.  @     <in
3370: 70 75 74 20 74 79 70 65 3d 22 63 68 65 63 6b 62  put type="checkb
3380: 6f 78 22 20 6e 61 6d 65 3d 22 61 6d 22 25 73 28  ox" name="am"%s(
3390: 6f 61 6d 29 3e 41 70 70 65 6e 64 20 57 69 6b 69  oam)>Append Wiki
33a0: 3c 2f 69 6e 70 75 74 3e 3c 62 72 3e 0a 20 20 40  </input><br>.  @
33b0: 20 20 20 20 20 3c 69 6e 70 75 74 20 74 79 70 65       <input type
33c0: 3d 22 63 68 65 63 6b 62 6f 78 22 20 6e 61 6d 65  ="checkbox" name
33d0: 3d 22 61 6b 22 25 73 28 6f 61 6b 29 3e 57 72 69  ="ak"%s(oak)>Wri
33e0: 74 65 20 57 69 6b 69 3c 2f 69 6e 70 75 74 3e 3c  te Wiki</input><
33f0: 62 72 3e 0a 20 20 40 20 20 20 20 20 3c 69 6e 70  br>.  @     <inp
3400: 75 74 20 74 79 70 65 3d 22 63 68 65 63 6b 62 6f  ut type="checkbo
3410: 78 22 20 6e 61 6d 65 3d 22 61 72 22 25 73 28 6f  x" name="ar"%s(o
3420: 61 72 29 3e 52 65 61 64 20 54 6b 74 3c 2f 69 6e  ar)>Read Tkt</in
3430: 70 75 74 3e 3c 62 72 3e 0a 20 20 40 20 20 20 20  put><br>.  @    
3440: 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 63 68   <input type="ch
3450: 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 61 6e  eckbox" name="an
3460: 22 25 73 28 6f 61 6e 29 3e 4e 65 77 20 54 6b 74  "%s(oan)>New Tkt
3470: 3c 2f 69 6e 70 75 74 3e 3c 62 72 3e 0a 20 20 40  </input><br>.  @
3480: 20 20 20 20 20 3c 69 6e 70 75 74 20 74 79 70 65       <input type
3490: 3d 22 63 68 65 63 6b 62 6f 78 22 20 6e 61 6d 65  ="checkbox" name
34a0: 3d 22 61 63 22 25 73 28 6f 61 63 29 3e 41 70 70  ="ac"%s(oac)>App
34b0: 65 6e 64 20 54 6b 74 3c 2f 69 6e 70 75 74 3e 3c  end Tkt</input><
34c0: 62 72 3e 0a 20 20 40 20 20 20 20 20 3c 69 6e 70  br>.  @     <inp
34d0: 75 74 20 74 79 70 65 3d 22 63 68 65 63 6b 62 6f  ut type="checkbo
34e0: 78 22 20 6e 61 6d 65 3d 22 61 77 22 25 73 28 6f  x" name="aw"%s(o
34f0: 61 77 29 3e 57 72 69 74 65 20 54 6b 74 3c 2f 69  aw)>Write Tkt</i
3500: 6e 70 75 74 3e 3c 62 72 3e 0a 20 20 40 20 20 20  nput><br>.  @   
3510: 20 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 63    <input type="c
3520: 68 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 61  heckbox" name="a
3530: 74 22 25 73 28 6f 61 74 29 3e 54 6b 74 20 52 65  t"%s(oat)>Tkt Re
3540: 70 6f 72 74 3c 2f 69 6e 70 75 74 3e 3c 62 72 3e  port</input><br>
3550: 0a 20 20 40 20 20 20 20 20 3c 69 6e 70 75 74 20  .  @     <input 
3560: 74 79 70 65 3d 22 63 68 65 63 6b 62 6f 78 22 20  type="checkbox" 
3570: 6e 61 6d 65 3d 22 61 7a 22 25 73 28 6f 61 7a 29  name="az"%s(oaz)
3580: 3e 44 6f 77 6e 6c 6f 61 64 20 5a 69 70 3c 2f 69  >Download Zip</i
3590: 6e 70 75 74 3e 0a 20 20 40 20 20 20 3c 2f 74 64  nput>.  @   </td
35a0: 3e 0a 20 20 40 20 3c 2f 74 72 3e 0a 20 20 40 20  >.  @ </tr>.  @ 
35b0: 3c 74 72 3e 0a 20 20 40 20 20 20 3c 74 64 20 61  <tr>.  @   <td a
35c0: 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 50 61 73  lign="right">Pas
35d0: 73 77 6f 72 64 3a 3c 2f 74 64 3e 0a 20 20 69 66  sword:</td>.  if
35e0: 28 20 73 74 72 63 6d 70 28 7a 4c 6f 67 69 6e 2c  ( strcmp(zLogin,
35f0: 20 22 61 6e 6f 6e 79 6d 6f 75 73 22 29 3d 3d 30   "anonymous")==0
3600: 20 29 7b 0a 20 20 20 20 2f 2a 20 55 73 65 72 20   ){.    /* User 
3610: 74 68 65 20 70 61 73 73 77 6f 72 64 20 66 6f 72  the password for
3620: 20 22 61 6e 6f 6e 79 6d 6f 75 73 22 20 61 73 20   "anonymous" as 
3630: 63 6c 65 61 72 74 65 78 74 20 2a 2f 0a 20 20 20  cleartext */.   
3640: 20 40 20 20 20 3c 74 64 3e 3c 69 6e 70 75 74 20   @   <td><input 
3650: 74 79 70 65 3d 22 74 65 78 74 22 20 6e 61 6d 65  type="text" name
3660: 3d 22 70 77 22 20 76 61 6c 75 65 3d 22 25 68 28  ="pw" value="%h(
3670: 7a 50 77 29 22 3e 3c 2f 74 64 3e 0a 20 20 7d 65  zPw)"></td>.  }e
3680: 6c 73 65 20 69 66 28 20 7a 50 77 5b 30 5d 20 29  lse if( zPw[0] )
3690: 7b 0a 20 20 20 20 2f 2a 20 4f 62 73 63 75 72 65  {.    /* Obscure
36a0: 20 74 68 65 20 70 61 73 73 77 6f 72 64 20 66 6f   the password fo
36b0: 72 20 61 6c 6c 20 6f 74 68 65 72 20 75 73 65 72  r all other user
36c0: 73 20 2a 2f 0a 20 20 20 20 40 20 20 20 3c 74 64  s */.    @   <td
36d0: 3e 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 70 61  ><input type="pa
36e0: 73 73 77 6f 72 64 22 20 6e 61 6d 65 3d 22 70 77  ssword" name="pw
36f0: 22 20 76 61 6c 75 65 3d 22 2a 2a 2a 2a 2a 2a 2a  " value="*******
3700: 2a 2a 2a 22 3e 3c 2f 74 64 3e 0a 20 20 7d 65 6c  ***"></td>.  }el
3710: 73 65 7b 0a 20 20 20 20 2f 2a 20 53 68 6f 77 20  se{.    /* Show 
3720: 61 6e 20 65 6d 70 74 79 20 70 61 73 73 77 6f 72  an empty passwor
3730: 64 20 61 73 20 61 6e 20 65 6d 70 74 79 20 69 6e  d as an empty in
3740: 70 75 74 20 66 69 65 6c 64 20 2a 2f 0a 20 20 20  put field */.   
3750: 20 40 20 20 20 3c 74 64 3e 3c 69 6e 70 75 74 20   @   <td><input 
3760: 74 79 70 65 3d 22 70 61 73 73 77 6f 72 64 22 20  type="password" 
3770: 6e 61 6d 65 3d 22 70 77 22 20 76 61 6c 75 65 3d  name="pw" value=
3780: 22 22 3e 3c 2f 74 64 3e 0a 20 20 7d 0a 20 20 40  ""></td>.  }.  @
3790: 20 3c 2f 74 72 3e 0a 20 20 69 66 28 20 21 68 69   </tr>.  if( !hi
37a0: 67 68 65 72 55 73 65 72 20 29 7b 0a 20 20 20 20  gherUser ){.    
37b0: 40 20 3c 74 72 3e 0a 20 20 20 20 40 20 20 20 3c  @ <tr>.    @   <
37c0: 74 64 3e 26 6e 62 73 70 3c 2f 74 64 3e 0a 20 20  td>&nbsp</td>.  
37d0: 20 20 40 20 20 20 3c 74 64 3e 3c 69 6e 70 75 74    @   <td><input
37e0: 20 74 79 70 65 3d 22 73 75 62 6d 69 74 22 20 6e   type="submit" n
37f0: 61 6d 65 3d 22 73 75 62 6d 69 74 22 20 76 61 6c  ame="submit" val
3800: 75 65 3d 22 41 70 70 6c 79 20 43 68 61 6e 67 65  ue="Apply Change
3810: 73 22 3e 0a 20 20 20 20 40 20 3c 2f 74 72 3e 0a  s">.    @ </tr>.
3820: 20 20 7d 0a 20 20 40 20 3c 2f 74 61 62 6c 65 3e    }.  @ </table>
3830: 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c  </td></tr></tabl
3840: 65 3e 0a 20 20 40 20 3c 68 32 3e 50 72 69 76 69  e>.  @ <h2>Privi
3850: 6c 65 67 65 73 20 41 6e 64 20 43 61 70 61 62 69  leges And Capabi
3860: 6c 69 74 69 65 73 3a 3c 2f 68 32 3e 0a 20 20 40  lities:</h2>.  @
3870: 20 3c 75 6c 3e 0a 20 20 69 66 28 20 68 69 67 68   <ul>.  if( high
3880: 65 72 55 73 65 72 20 29 7b 0a 20 20 20 20 40 20  erUser ){.    @ 
3890: 3c 6c 69 3e 3c 70 3e 3c 66 6f 6e 74 20 63 6f 6c  <li><p><font col
38a0: 6f 72 3d 22 62 6c 75 65 22 3e 3c 62 3e 0a 20 20  or="blue"><b>.  
38b0: 20 20 40 20 55 73 65 72 20 25 68 28 7a 4c 6f 67    @ User %h(zLog
38c0: 69 6e 29 20 68 61 73 20 53 65 74 75 70 20 70 72  in) has Setup pr
38d0: 69 76 69 6c 65 67 65 73 20 61 6e 64 20 79 6f 75  ivileges and you
38e0: 20 6f 6e 6c 79 20 68 61 76 65 20 41 64 6d 69 6e   only have Admin
38f0: 20 70 72 69 76 69 6c 65 67 65 73 0a 20 20 20 20   privileges.    
3900: 40 20 73 6f 20 79 6f 75 20 61 72 65 20 6e 6f 74  @ so you are not
3910: 20 70 65 72 6d 69 74 74 65 64 20 74 6f 20 6d 61   permitted to ma
3920: 6b 65 20 63 68 61 6e 67 65 73 20 74 6f 20 25 68  ke changes to %h
3930: 28 7a 4c 6f 67 69 6e 29 2e 0a 20 20 20 20 40 20  (zLogin)..    @ 
3940: 3c 2f 62 3e 3c 2f 66 6f 6e 74 3e 3c 2f 70 3e 3c  </b></font></p><
3950: 2f 6c 69 3e 0a 20 20 20 20 40 0a 20 20 7d 0a 20  /li>.    @.  }. 
3960: 20 40 0a 20 20 40 20 3c 6c 69 3e 3c 70 3e 0a 20   @.  @ <li><p>. 
3970: 20 40 20 54 68 65 20 3c 62 3e 53 65 74 75 70 3c   @ The <b>Setup<
3980: 2f 62 3e 20 75 73 65 72 20 63 61 6e 20 6d 61 6b  /b> user can mak
3990: 65 20 61 72 62 69 74 72 61 72 79 20 63 6f 6e 66  e arbitrary conf
39a0: 69 67 75 72 61 74 69 6f 6e 20 63 68 61 6e 67 65  iguration change
39b0: 73 2e 0a 20 20 40 20 41 6e 20 3c 62 3e 41 64 6d  s..  @ An <b>Adm
39c0: 69 6e 3c 2f 62 3e 20 75 73 65 72 20 63 61 6e 20  in</b> user can 
39d0: 61 64 64 20 6f 74 68 65 72 20 75 73 65 72 73 20  add other users 
39e0: 61 6e 64 20 63 68 61 6e 67 65 20 75 73 65 72 20  and change user 
39f0: 70 72 69 76 69 6c 65 67 65 73 0a 20 20 40 20 61  privileges.  @ a
3a00: 6e 64 20 72 65 73 65 74 20 75 73 65 72 20 70 61  nd reset user pa
3a10: 73 73 77 6f 72 64 73 2e 20 20 42 6f 74 68 20 61  sswords.  Both a
3a20: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65 74  utomatically get
3a30: 20 61 6c 6c 20 6f 74 68 65 72 20 70 72 69 76 69   all other privi
3a40: 6c 65 67 65 73 0a 20 20 40 20 6c 69 73 74 65 64  leges.  @ listed
3a50: 20 62 65 6c 6f 77 2e 20 20 55 73 65 20 74 68 65   below.  Use the
3a60: 73 65 20 74 77 6f 20 73 65 74 74 69 6e 67 73 20  se two settings 
3a70: 77 69 74 68 20 64 69 73 63 72 65 74 69 6f 6e 2e  with discretion.
3a80: 0a 20 20 40 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 20  .  @ </p></li>. 
3a90: 20 40 0a 20 20 40 20 3c 6c 69 3e 3c 70 3e 0a 20   @.  @ <li><p>. 
3aa0: 20 40 20 54 68 65 20 3c 62 3e 44 65 6c 65 74 65   @ The <b>Delete
3ab0: 3c 2f 62 3e 20 70 72 69 76 69 6c 65 67 65 20 67  </b> privilege g
3ac0: 69 76 65 20 74 68 65 20 75 73 65 72 20 74 68 65  ive the user the
3ad0: 20 61 62 69 6c 69 74 79 20 74 6f 20 65 72 61 73   ability to eras
3ae0: 65 0a 20 20 40 20 77 69 6b 69 2c 20 74 69 63 6b  e.  @ wiki, tick
3af0: 65 74 73 2c 20 61 6e 64 20 61 74 74 61 63 68 6d  ets, and attachm
3b00: 65 6e 74 73 20 74 68 61 74 20 68 61 76 65 20 62  ents that have b
3b10: 65 65 6e 20 61 64 64 65 64 20 62 79 20 61 6e 6f  een added by ano
3b20: 6e 79 6d 6f 75 73 0a 20 20 40 20 75 73 65 72 73  nymous.  @ users
3b30: 2e 20 20 54 68 69 73 20 63 61 70 61 62 69 6c 69  .  This capabili
3b40: 74 79 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66  ty is intended f
3b50: 6f 72 20 64 65 6c 65 74 69 6f 6e 20 6f 66 20 73  or deletion of s
3b60: 70 61 6d 2e 20 20 54 68 65 0a 20 20 40 20 64 65  pam.  The.  @ de
3b70: 6c 65 74 65 20 63 61 70 61 62 69 6c 69 74 79 20  lete capability 
3b80: 69 73 20 6f 6e 6c 79 20 69 6e 20 65 66 66 65 63  is only in effec
3b90: 74 20 66 6f 72 20 32 34 20 68 6f 75 72 73 20 61  t for 24 hours a
3ba0: 66 74 65 72 20 74 68 65 20 69 74 65 6d 0a 20 20  fter the item.  
3bb0: 40 20 69 73 20 66 69 72 73 74 20 70 6f 73 74 65  @ is first poste
3bc0: 64 2e 20 20 54 68 65 20 53 65 74 75 70 20 75 73  d.  The Setup us
3bd0: 65 72 20 63 61 6e 20 64 65 6c 65 74 65 20 61 6e  er can delete an
3be0: 79 74 68 69 6e 67 20 61 74 20 61 6e 79 20 74 69  ything at any ti
3bf0: 6d 65 2e 0a 20 20 40 20 3c 2f 70 3e 3c 2f 6c 69  me..  @ </p></li
3c00: 3e 0a 20 20 40 0a 20 20 40 20 3c 6c 69 3e 3c 70  >.  @.  @ <li><p
3c10: 3e 0a 20 20 40 20 54 68 65 20 3c 62 3e 48 69 73  >.  @ The <b>His
3c20: 74 6f 72 79 3c 2f 62 3e 20 70 72 69 76 69 6c 65  tory</b> privile
3c30: 67 65 20 61 6c 6c 6f 77 73 20 61 20 75 73 65 72  ge allows a user
3c40: 20 74 6f 20 73 65 65 20 6d 6f 73 74 20 68 79 70   to see most hyp
3c50: 65 72 6c 69 6e 6b 73 2e 0a 20 20 40 20 54 68 69  erlinks..  @ Thi
3c60: 73 20 69 73 20 72 65 63 6f 6d 6d 65 6e 64 65 64  s is recommended
3c70: 20 4f 4e 20 66 6f 72 20 6d 6f 73 74 20 6c 6f 67   ON for most log
3c80: 67 65 64 2d 69 6e 20 75 73 65 72 73 20 62 75 74  ged-in users but
3c90: 20 4f 46 46 20 66 6f 72 0a 20 20 40 20 75 73 65   OFF for.  @ use
3ca0: 72 20 22 6e 6f 62 6f 64 79 22 20 74 6f 20 61 76  r "nobody" to av
3cb0: 6f 69 64 20 70 72 6f 62 6c 65 6d 73 20 77 69 74  oid problems wit
3cc0: 68 20 73 70 69 64 65 72 73 20 74 72 79 69 6e 67  h spiders trying
3cd0: 20 74 6f 20 77 61 6c 6b 20 65 76 65 72 79 0a 20   to walk every. 
3ce0: 20 40 20 68 69 73 74 6f 72 69 63 61 6c 20 76 65   @ historical ve
3cf0: 72 73 69 6f 6e 20 6f 66 20 65 76 65 72 79 20 62  rsion of every b
3d00: 61 73 65 6c 69 6e 65 20 61 6e 64 20 66 69 6c 65  aseline and file
3d10: 2e 0a 20 20 40 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a  ..  @ </p></li>.
3d20: 20 20 40 0a 20 20 40 20 3c 6c 69 3e 3c 70 3e 0a    @.  @ <li><p>.
3d30: 20 20 40 20 54 68 65 20 3c 62 3e 5a 69 70 3c 2f    @ The <b>Zip</
3d40: 62 3e 20 70 72 69 76 69 6c 65 67 65 20 61 6c 6c  b> privilege all
3d50: 6f 77 73 20 61 20 75 73 65 72 20 74 6f 20 73 65  ows a user to se
3d60: 65 20 74 68 65 20 64 6f 77 6e 6c 6f 61 64 20 61  e the download a
3d70: 73 20 7a 69 70 20 68 79 70 65 72 6c 69 6e 6b 0a  s zip hyperlink.
3d80: 20 20 40 20 61 73 20 77 65 6c 6c 20 61 73 20 70    @ as well as p
3d90: 65 72 6d 69 74 20 61 63 63 65 73 73 20 74 6f 20  ermit access to 
3da0: 74 68 65 20 3c 74 74 3e 2f 7a 69 70 3c 2f 74 74  the <tt>/zip</tt
3db0: 3e 20 70 61 67 65 2e 20 49 74 20 63 61 6e 20 62  > page. It can b
3dc0: 65 20 61 6c 6c 6f 77 65 64 20 66 6f 72 0a 20 20  e allowed for.  
3dd0: 40 20 75 73 65 72 20 22 6e 6f 62 6f 64 79 22 20  @ user "nobody" 
3de0: 74 6f 20 67 72 61 6e 74 20 68 69 6d 20 61 63 63  to grant him acc
3df0: 65 73 73 20 74 6f 20 64 6f 77 6e 6c 6f 61 64 20  ess to download 
3e00: 61 72 74 69 66 61 63 74 73 20 68 65 20 6b 6e 6f  artifacts he kno
3e10: 77 20 66 72 6f 6d 20 74 68 65 0a 20 20 40 20 73  w from the.  @ s
3e20: 65 72 76 65 72 20 77 69 74 68 6f 75 74 20 67 69  erver without gi
3e30: 76 69 6e 67 20 68 69 6d 20 6f 74 68 65 72 20 72  ving him other r
3e40: 69 67 68 74 73 20 6c 69 6b 65 20 3c 62 3e 52 65  ights like <b>Re
3e50: 61 64 3c 2f 62 3e 20 6f 72 20 3c 62 3e 48 69 73  ad</b> or <b>His
3e60: 74 6f 72 79 3c 2f 62 3e 2e 0a 20 20 40 20 53 6f  tory</b>..  @ So
3e70: 20 61 75 74 6f 6d 61 74 69 63 20 70 61 63 6b 61   automatic packa
3e80: 67 65 20 64 6f 77 6c 6f 61 64 65 72 73 20 63 6f  ge dowloaders co
3e90: 75 6c 64 20 62 65 20 61 62 6c 65 20 74 6f 20 6f  uld be able to o
3ea0: 62 74 61 69 6e 20 74 68 65 20 73 6f 75 72 63 65  btain the source
3eb0: 73 20 77 69 74 68 6f 75 74 0a 20 20 40 20 67 6f  s without.  @ go
3ec0: 69 6e 67 20 74 68 72 75 20 74 68 65 20 6c 6f 67  ing thru the log
3ed0: 69 6e 20 70 72 6f 63 65 64 75 72 65 2e 0a 20 20  in procedure..  
3ee0: 40 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 20 20 40 0a  @ </p></li>.  @.
3ef0: 20 20 40 20 3c 6c 69 3e 3c 70 3e 0a 20 20 40 20    @ <li><p>.  @ 
3f00: 54 68 65 20 3c 62 3e 44 65 76 65 6c 6f 70 65 72  The <b>Developer
3f10: 3c 2f 62 3e 20 70 72 69 76 69 6c 65 67 65 20 63  </b> privilege c
3f20: 61 75 73 65 73 20 61 6c 6c 20 70 72 69 76 69 6c  auses all privil
3f30: 65 67 65 73 20 6f 66 20 74 68 65 20 75 73 65 72  eges of the user
3f40: 0a 20 20 40 20 6e 61 6d 65 64 20 22 64 65 76 65  .  @ named "deve
3f50: 6c 6f 70 65 72 22 20 74 6f 20 62 65 20 69 6e 68  loper" to be inh
3f60: 65 72 69 74 65 64 20 62 79 20 74 68 69 73 20 75  erited by this u
3f70: 73 65 72 2e 0a 20 20 40 20 3c 2f 70 3e 3c 2f 6c  ser..  @ </p></l
3f80: 69 3e 0a 20 20 40 0a 20 20 40 20 3c 6c 69 3e 3c  i>.  @.  @ <li><
3f90: 70 3e 0a 20 20 40 20 54 68 65 20 3c 62 3e 43 68  p>.  @ The <b>Ch
3fa0: 65 63 6b 2d 69 6e 3c 2f 62 3e 20 70 72 69 76 69  eck-in</b> privi
3fb0: 6c 65 67 65 20 61 6c 6c 6f 77 73 20 72 65 6d 6f  lege allows remo
3fc0: 74 65 20 75 73 65 72 73 20 74 6f 20 22 70 75 73  te users to "pus
3fd0: 68 22 2e 0a 20 20 40 20 54 68 65 20 3c 62 3e 43  h"..  @ The <b>C
3fe0: 68 65 63 6b 2d 6f 75 74 3c 2f 62 3e 20 70 72 69  heck-out</b> pri
3ff0: 76 69 6c 65 67 65 20 61 6c 6c 6f 77 73 20 72 65  vilege allows re
4000: 6d 6f 74 65 20 75 73 65 72 73 20 74 6f 20 22 70  mote users to "p
4010: 75 6c 6c 22 2e 0a 20 20 40 20 54 68 65 20 3c 62  ull"..  @ The <b
4020: 3e 43 6c 6f 6e 65 3c 2f 62 3e 20 70 72 69 76 69  >Clone</b> privi
4030: 6c 65 67 65 20 61 6c 6c 6f 77 73 20 72 65 6d 6f  lege allows remo
4040: 74 65 20 75 73 65 72 73 20 74 6f 20 22 63 6c 6f  te users to "clo
4050: 6e 65 22 2e 0a 20 20 40 20 3c 2f 6c 69 3e 3c 70  ne"..  @ </li><p
4060: 3e 0a 20 20 40 0a 20 20 40 20 3c 6c 69 3e 3c 70  >.  @.  @ <li><p
4070: 3e 0a 20 20 40 20 54 68 65 20 3c 62 3e 52 65 61  >.  @ The <b>Rea
4080: 64 20 57 69 6b 69 3c 2f 62 3e 2c 20 3c 62 3e 4e  d Wiki</b>, <b>N
4090: 65 77 20 57 69 6b 69 3c 2f 62 3e 2c 20 3c 62 3e  ew Wiki</b>, <b>
40a0: 41 70 70 65 6e 64 20 57 69 6b 69 3c 2f 62 3e 2c  Append Wiki</b>,
40b0: 20 61 6e 64 0a 20 20 40 20 3c 62 3e 57 72 69 74   and.  @ <b>Writ
40c0: 65 20 57 69 6b 69 3c 2f 62 3e 20 70 72 69 76 69  e Wiki</b> privi
40d0: 6c 65 67 65 73 20 63 6f 6e 74 72 6f 6c 20 61 63  leges control ac
40e0: 63 65 73 73 20 74 6f 20 77 69 6b 69 20 70 61 67  cess to wiki pag
40f0: 65 73 2e 20 20 54 68 65 0a 20 20 40 20 3c 62 3e  es.  The.  @ <b>
4100: 52 65 61 64 20 54 6b 74 3c 2f 62 3e 2c 20 3c 62  Read Tkt</b>, <b
4110: 3e 4e 65 77 20 54 6b 74 3c 2f 62 3e 2c 20 3c 62  >New Tkt</b>, <b
4120: 3e 41 70 70 65 6e 64 20 54 6b 74 3c 2f 62 3e 2c  >Append Tkt</b>,
4130: 20 61 6e 64 0a 20 20 40 20 3c 62 3e 57 72 69 74   and.  @ <b>Writ
4140: 65 20 54 6b 74 3c 2f 62 3e 20 70 72 69 76 69 6c  e Tkt</b> privil
4150: 65 67 65 73 20 63 6f 6e 74 72 6f 6c 20 61 63 63  eges control acc
4160: 65 73 73 20 74 6f 20 74 72 6f 75 62 6c 65 20 74  ess to trouble t
4170: 69 63 6b 65 74 73 2e 0a 20 20 40 20 54 68 65 20  ickets..  @ The 
4180: 3c 62 3e 54 6b 74 20 52 65 70 6f 72 74 3c 2f 62  <b>Tkt Report</b
4190: 3e 20 70 72 69 76 69 6c 65 67 65 20 61 6c 6c 6f  > privilege allo
41a0: 77 73 20 74 68 65 20 75 73 65 72 20 74 6f 20 63  ws the user to c
41b0: 72 65 61 74 65 20 6f 72 20 65 64 69 74 0a 20 20  reate or edit.  
41c0: 40 20 74 69 63 6b 65 74 20 72 65 70 6f 72 74 20  @ ticket report 
41d0: 66 6f 72 6d 61 74 73 2e 0a 20 20 40 20 3c 2f 70  formats..  @ </p
41e0: 3e 3c 2f 6c 69 3e 0a 20 20 40 0a 20 20 40 20 3c  ></li>.  @.  @ <
41f0: 6c 69 3e 3c 70 3e 0a 20 20 40 20 55 73 65 72 73  li><p>.  @ Users
4200: 20 77 69 74 68 20 74 68 65 20 3c 62 3e 50 61 73   with the <b>Pas
4210: 73 77 6f 72 64 3c 2f 62 3e 20 70 72 69 76 69 6c  sword</b> privil
4220: 65 67 65 20 61 72 65 20 61 6c 6c 6f 77 65 64 20  ege are allowed 
4230: 74 6f 20 63 68 61 6e 67 65 20 74 68 65 69 72 0a  to change their.
4240: 20 20 40 20 6f 77 6e 20 70 61 73 73 77 6f 72 64    @ own password
4250: 2e 20 20 52 65 63 6f 6d 6d 65 6e 64 65 64 20 4f  .  Recommended O
4260: 4e 20 66 6f 72 20 6d 6f 73 74 20 75 73 65 72 73  N for most users
4270: 20 62 75 74 20 4f 46 46 20 66 6f 72 20 73 70 65   but OFF for spe
4280: 63 69 61 6c 0a 20 20 40 20 75 73 65 72 73 20 22  cial.  @ users "
4290: 64 65 76 65 6c 6f 70 65 72 2c 20 22 61 6e 6f 6e  developer, "anon
42a0: 79 6e 6d 6f 75 73 22 2c 20 61 6e 64 20 22 6e 6f  ynmous", and "no
42b0: 62 6f 64 79 22 2e 0a 20 20 40 20 3c 2f 70 3e 3c  body"..  @ </p><
42c0: 2f 6c 69 3e 0a 20 20 40 0a 20 20 40 20 3c 6c 69  /li>.  @.  @ <li
42d0: 3e 3c 70 3e 0a 20 20 40 20 54 68 65 20 3c 62 3e  ><p>.  @ The <b>
42e0: 45 4d 61 69 6c 3c 2f 62 3e 20 70 72 69 76 69 6c  EMail</b> privil
42f0: 65 67 65 20 61 6c 6c 6f 77 73 20 74 68 65 20 64  ege allows the d
4300: 69 73 70 6c 61 79 20 6f 66 20 73 65 6e 73 69 74  isplay of sensit
4310: 69 76 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ive information.
4320: 20 20 40 20 73 75 63 68 20 61 73 20 74 68 65 20    @ such as the 
4330: 65 6d 61 69 6c 20 61 64 64 72 65 73 73 20 6f 66  email address of
4340: 20 75 73 65 72 73 20 61 6e 64 20 63 6f 6e 74 61   users and conta
4350: 63 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f  ct information o
4360: 6e 20 74 69 63 6b 65 74 73 2e 0a 20 20 40 20 52  n tickets..  @ R
4370: 65 63 6f 6d 6d 65 6e 64 65 64 20 4f 46 46 20 66  ecommended OFF f
4380: 6f 72 20 22 61 6e 6f 6e 79 6d 6f 75 73 22 20 61  or "anonymous" a
4390: 6e 64 20 66 6f 72 20 22 6e 6f 62 6f 64 79 22 2e  nd for "nobody".
43a0: 0a 20 20 40 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 20  .  @ </p></li>. 
43b0: 20 40 0a 20 20 40 20 3c 6c 69 3e 3c 70 3e 0a 20   @.  @ <li><p>. 
43c0: 20 40 20 4c 6f 67 69 6e 20 69 73 20 70 72 6f 68   @ Login is proh
43d0: 69 62 69 74 65 64 20 69 66 20 74 68 65 20 70 61  ibited if the pa
43e0: 73 73 77 6f 72 64 20 69 73 20 61 6e 20 65 6d 70  ssword is an emp
43f0: 74 79 20 73 74 72 69 6e 67 2e 0a 20 20 40 20 3c  ty string..  @ <
4400: 2f 70 3e 3c 2f 6c 69 3e 0a 20 20 40 20 3c 2f 75  /p></li>.  @ </u
4410: 6c 3e 0a 20 20 40 0a 20 20 40 20 3c 68 32 3e 53  l>.  @.  @ <h2>S
4420: 70 65 63 69 61 6c 20 4c 6f 67 69 6e 73 3c 2f 68  pecial Logins</h
4430: 32 3e 0a 20 20 40 20 0a 20 20 40 20 3c 75 6c 3e  2>.  @ .  @ <ul>
4440: 0a 20 20 40 20 3c 6c 69 3e 3c 70 3e 0a 20 20 40  .  @ <li><p>.  @
4450: 20 4e 6f 20 6c 6f 67 69 6e 20 69 73 20 72 65 71   No login is req
4460: 75 69 72 65 64 20 66 6f 72 20 75 73 65 72 20 22  uired for user "
4470: 3c 62 3e 6e 6f 62 6f 64 79 3c 2f 62 3e 22 2e 20  <b>nobody</b>". 
4480: 20 54 68 65 20 63 61 70 61 62 69 6c 69 74 69 65   The capabilitie
4490: 73 0a 20 20 40 20 6f 66 20 74 68 65 20 3c 62 3e  s.  @ of the <b>
44a0: 6e 6f 62 6f 64 79 3c 2f 62 3e 20 75 73 65 72 20  nobody</b> user 
44b0: 61 72 65 20 69 6e 68 65 72 69 74 65 64 20 62 79  are inherited by
44c0: 20 61 6c 6c 20 75 73 65 72 73 2c 20 72 65 67 61   all users, rega
44d0: 72 64 6c 65 73 73 20 6f 66 0a 20 20 40 20 77 68  rdless of.  @ wh
44e0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
44f0: 79 20 61 72 65 20 6c 6f 67 67 65 64 20 69 6e 2e  y are logged in.
4500: 20 20 54 6f 20 64 69 73 61 62 6c 65 20 75 6e 69    To disable uni
4510: 76 65 72 73 61 6c 20 61 63 63 65 73 73 0a 20 20  versal access.  
4520: 40 20 74 6f 20 74 68 65 20 72 65 70 6f 73 69 74  @ to the reposit
4530: 6f 72 79 2c 20 6d 61 6b 65 20 73 75 72 65 20 6e  ory, make sure n
4540: 6f 20 75 73 65 72 20 6e 61 6d 65 64 20 22 3c 62  o user named "<b
4550: 3e 6e 6f 62 6f 64 79 3c 2f 62 3e 22 20 65 78 69  >nobody</b>" exi
4560: 73 74 73 20 6f 72 0a 20 20 40 20 74 68 61 74 20  sts or.  @ that 
4570: 74 68 65 20 3c 62 3e 6e 6f 62 6f 64 79 3c 2f 62  the <b>nobody</b
4580: 3e 20 75 73 65 72 20 68 61 73 20 6e 6f 20 63 61  > user has no ca
4590: 70 61 62 69 6c 69 74 69 65 73 20 65 6e 61 62 6c  pabilities enabl
45a0: 65 64 2e 0a 20 20 40 20 54 68 65 20 70 61 73 73  ed..  @ The pass
45b0: 77 6f 72 64 20 66 6f 72 20 3c 62 3e 6e 6f 62 6f  word for <b>nobo
45c0: 64 79 3c 2f 62 3e 20 69 73 20 69 67 6e 6f 72 65  dy</b> is ignore
45d0: 2e 20 20 54 6f 20 61 76 6f 69 64 20 70 72 6f 62  .  To avoid prob
45e0: 6c 65 6d 73 20 77 69 74 68 0a 20 20 40 20 73 70  lems with.  @ sp
45f0: 69 64 65 72 73 20 6f 76 65 72 6c 6f 61 64 69 6e  iders overloadin
4600: 67 20 74 68 65 20 73 65 72 76 65 72 2c 20 69 74  g the server, it
4610: 20 69 73 20 72 65 63 6f 6d 6d 65 6e 64 65 64 0a   is recommended.
4620: 20 20 40 20 74 68 61 74 20 74 68 65 20 27 68 27    @ that the 'h'
4630: 20 28 48 69 73 74 6f 72 79 29 20 63 61 70 61 62   (History) capab
4640: 69 6c 69 74 79 20 62 65 20 74 75 72 6e 65 64 20  ility be turned 
4650: 6f 66 66 20 66 6f 72 20 74 68 65 20 3c 62 3e 6e  off for the <b>n
4660: 6f 62 6f 64 79 3c 2f 62 3e 0a 20 20 40 20 75 73  obody</b>.  @ us
4670: 65 72 2e 0a 20 20 40 20 3c 2f 70 3e 3c 2f 6c 69  er..  @ </p></li
4680: 3e 0a 20 20 40 0a 20 20 40 20 3c 6c 69 3e 3c 70  >.  @.  @ <li><p
4690: 3e 0a 20 20 40 20 4c 6f 67 69 6e 20 69 73 20 72  >.  @ Login is r
46a0: 65 71 75 69 72 65 64 20 66 6f 72 20 75 73 65 72  equired for user
46b0: 20 22 3c 62 3e 61 6e 6f 6e 79 6d 6f 75 73 3c 2f   "<b>anonymous</
46c0: 62 3e 22 20 62 75 74 20 74 68 65 20 70 61 73 73  b>" but the pass
46d0: 77 6f 72 64 0a 20 20 40 20 69 73 20 64 69 73 70  word.  @ is disp
46e0: 6c 61 79 65 64 20 6f 6e 20 74 68 65 20 6c 6f 67  layed on the log
46f0: 69 6e 20 73 63 72 65 65 6e 20 62 65 73 69 64 65  in screen beside
4700: 20 74 68 65 20 70 61 73 73 77 6f 72 64 20 65 6e   the password en
4710: 74 72 79 20 62 6f 78 0a 20 20 40 20 73 6f 20 61  try box.  @ so a
4720: 6e 79 62 6f 64 79 20 77 68 6f 20 63 61 6e 20 72  nybody who can r
4730: 65 61 64 20 73 68 6f 75 6c 64 20 62 65 20 61 62  ead should be ab
4740: 6c 65 20 74 6f 20 6c 6f 67 69 6e 20 61 73 20 61  le to login as a
4750: 6e 6f 6e 79 6d 6f 75 73 2e 0a 20 20 40 20 4f 6e  nonymous..  @ On
4760: 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64 2c   the other hand,
4770: 20 73 70 69 64 65 72 73 20 61 6e 64 20 77 65 62   spiders and web
4780: 2d 63 72 61 77 6c 65 72 73 20 77 69 6c 6c 20 74  -crawlers will t
4790: 79 70 69 63 61 6c 6c 79 20 6e 6f 74 0a 20 20 40  ypically not.  @
47a0: 20 62 65 20 61 62 6c 65 20 74 6f 20 6c 6f 67 69   be able to logi
47b0: 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61 70 61  n.  Set the capa
47c0: 62 69 6c 69 74 69 65 73 20 6f 66 20 74 68 65 20  bilities of the 
47d0: 61 6e 6f 6e 79 6d 6f 75 73 20 75 73 65 72 0a 20  anonymous user. 
47e0: 20 40 20 74 6f 20 74 68 69 6e 67 73 20 74 68 61   @ to things tha
47f0: 74 20 79 6f 75 20 77 61 6e 74 20 61 6e 79 20 68  t you want any h
4800: 75 6d 61 6e 20 74 6f 20 62 65 20 61 62 6c 65 20  uman to be able 
4810: 74 6f 20 64 6f 2c 20 62 75 74 20 6e 6f 74 20 61  to do, but not a
4820: 6e 79 0a 20 20 40 20 73 70 69 64 65 72 2e 20 20  ny.  @ spider.  
4830: 45 76 65 72 79 20 6f 74 68 65 72 20 6c 6f 67 67  Every other logg
4840: 65 64 2d 69 6e 20 75 73 65 72 20 69 6e 68 65 72  ed-in user inher
4850: 69 74 73 20 74 68 65 20 70 72 69 76 69 6c 65 67  its the privileg
4860: 65 73 20 6f 66 0a 20 20 40 20 3c 62 3e 61 6e 6f  es of.  @ <b>ano
4870: 6e 79 6d 6f 75 73 3c 2f 62 3e 2e 0a 20 20 40 20  nymous</b>..  @ 
4880: 3c 2f 70 3e 3c 2f 6c 69 3e 0a 20 20 40 0a 20 20  </p></li>.  @.  
4890: 40 20 3c 6c 69 3e 3c 70 3e 0a 20 20 40 20 54 68  @ <li><p>.  @ Th
48a0: 65 20 22 3c 62 3e 64 65 76 65 6c 6f 70 65 72 3c  e "<b>developer<
48b0: 2f 62 3e 22 20 75 73 65 72 20 69 73 20 69 6e 74  /b>" user is int
48c0: 65 6e 64 65 64 20 61 73 20 61 20 74 65 6d 70 6c  ended as a templ
48d0: 61 74 65 20 66 6f 72 20 74 72 75 73 74 65 64 20  ate for trusted 
48e0: 75 73 65 72 73 0a 20 20 40 20 77 69 74 68 20 63  users.  @ with c
48f0: 68 65 63 6b 2d 69 6e 20 70 72 69 76 69 6c 65 67  heck-in privileg
4900: 65 73 2e 20 20 57 68 65 6e 20 61 64 64 69 6e 67  es.  When adding
4910: 20 6e 65 77 20 74 72 75 73 74 65 64 20 75 73 65   new trusted use
4920: 72 73 2c 20 73 69 6d 70 6c 79 0a 20 20 40 20 73  rs, simply.  @ s
4930: 65 6c 65 63 74 20 74 68 65 20 3c 62 3e 44 65 76  elect the <b>Dev
4940: 65 6c 6f 70 65 72 3c 2f 62 3e 20 70 72 69 76 69  eloper</b> privi
4950: 6c 65 67 65 20 74 6f 20 63 61 75 73 65 20 74 68  lege to cause th
4960: 65 20 6e 65 77 20 75 73 65 72 20 74 6f 20 69 6e  e new user to in
4970: 68 65 72 69 74 0a 20 20 40 20 61 6c 6c 20 70 72  herit.  @ all pr
4980: 69 76 69 6c 65 67 65 73 20 6f 66 20 74 68 65 20  ivileges of the 
4990: 22 64 65 76 65 6c 6f 70 65 72 22 20 75 73 65 72  "developer" user
49a0: 2e 0a 20 20 40 20 3c 2f 6c 69 3e 3c 2f 70 3e 0a  ..  @ </li></p>.
49b0: 20 20 40 20 3c 2f 75 6c 3e 0a 20 20 40 20 3c 2f    @ </ul>.  @ </
49c0: 66 6f 72 6d 3e 0a 20 20 73 74 79 6c 65 5f 66 6f  form>.  style_fo
49d0: 6f 74 65 72 28 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a  oter();.}.../*.*
49e0: 2a 20 47 65 6e 65 72 61 74 65 20 61 20 63 68 65  * Generate a che
49f0: 63 6b 62 6f 78 20 66 6f 72 20 61 6e 20 61 74 74  ckbox for an att
4a00: 72 69 62 75 74 65 2e 0a 2a 2f 0a 73 74 61 74 69  ribute..*/.stati
4a10: 63 20 76 6f 69 64 20 6f 6e 6f 66 66 5f 61 74 74  c void onoff_att
4a20: 72 69 62 75 74 65 28 0a 20 20 63 6f 6e 73 74 20  ribute(.  const 
4a30: 63 68 61 72 20 2a 7a 4c 61 62 65 6c 2c 20 20 20  char *zLabel,   
4a40: 2f 2a 20 54 68 65 20 74 65 78 74 20 6c 61 62 65  /* The text labe
4a50: 6c 20 6f 6e 20 74 68 65 20 63 68 65 63 6b 62 6f  l on the checkbo
4a60: 78 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  x */.  const cha
4a70: 72 20 2a 7a 56 61 72 2c 20 20 20 20 20 2f 2a 20  r *zVar,     /* 
4a80: 54 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  The correspondin
4a90: 67 20 72 6f 77 20 69 6e 20 74 68 65 20 56 41 52  g row in the VAR
4aa0: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 6f 6e 73   table */.  cons
4ab0: 74 20 63 68 61 72 20 2a 7a 51 50 61 72 6d 2c 20  t char *zQParm, 
4ac0: 20 20 2f 2a 20 54 68 65 20 71 75 65 72 79 20 70    /* The query p
4ad0: 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 69 6e  arameter */.  in
4ae0: 74 20 64 66 6c 74 56 61 6c 20 20 20 20 20 20 20  t dfltVal       
4af0: 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76      /* Default v
4b00: 61 6c 75 65 20 69 66 20 56 41 52 20 74 61 62 6c  alue if VAR tabl
4b10: 65 20 65 6e 74 72 79 20 64 6f 65 73 20 6e 6f 74  e entry does not
4b20: 20 65 78 69 73 74 20 2a 2f 0a 29 7b 0a 20 20 63   exist */.){.  c
4b30: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 56 61 6c 20  onst char *zVal 
4b40: 3d 20 64 62 5f 67 65 74 28 7a 56 61 72 2c 20 30  = db_get(zVar, 0
4b50: 29 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  );.  const char 
4b60: 2a 7a 51 20 3d 20 50 28 7a 51 50 61 72 6d 29 3b  *zQ = P(zQParm);
4b70: 0a 20 20 69 6e 74 20 69 56 61 6c 3b 0a 20 20 69  .  int iVal;.  i
4b80: 66 28 20 7a 56 61 6c 20 29 7b 0a 20 20 20 20 69  f( zVal ){.    i
4b90: 56 61 6c 20 3d 20 61 74 6f 69 28 7a 56 61 6c 29  Val = atoi(zVal)
4ba0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
4bb0: 56 61 6c 20 3d 20 64 66 6c 74 56 61 6c 3b 0a 20  Val = dfltVal;. 
4bc0: 20 7d 0a 20 20 69 66 28 20 7a 51 3d 3d 30 20 26   }.  if( zQ==0 &
4bd0: 26 20 50 28 22 73 75 62 6d 69 74 22 29 20 29 7b  & P("submit") ){
4be0: 0a 20 20 20 20 7a 51 20 3d 20 22 6f 66 66 22 3b  .    zQ = "off";
4bf0: 0a 20 20 7d 0a 20 20 69 66 28 20 7a 51 20 29 7b  .  }.  if( zQ ){
4c00: 0a 20 20 20 20 69 6e 74 20 69 51 20 3d 20 73 74  .    int iQ = st
4c10: 72 63 6d 70 28 7a 51 2c 22 6f 6e 22 29 3d 3d 30  rcmp(zQ,"on")==0
4c20: 20 7c 7c 20 61 74 6f 69 28 7a 51 29 3b 0a 20 20   || atoi(zQ);.  
4c30: 20 20 69 66 28 20 69 51 21 3d 69 56 61 6c 20 29    if( iQ!=iVal )
4c40: 7b 0a 20 20 20 20 20 20 64 62 5f 73 65 74 28 7a  {.      db_set(z
4c50: 56 61 72 2c 20 69 51 20 3f 20 22 31 22 20 3a 20  Var, iQ ? "1" : 
4c60: 22 30 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 69  "0", 0);.      i
4c70: 56 61 6c 20 3d 20 69 51 3b 0a 20 20 20 20 7d 0a  Val = iQ;.    }.
4c80: 20 20 7d 0a 20 20 69 66 28 20 69 56 61 6c 20 29    }.  if( iVal )
4c90: 7b 0a 20 20 20 20 40 20 3c 69 6e 70 75 74 20 74  {.    @ <input t
4ca0: 79 70 65 3d 22 63 68 65 63 6b 62 6f 78 22 20 6e  ype="checkbox" n
4cb0: 61 6d 65 3d 22 25 73 28 7a 51 50 61 72 6d 29 22  ame="%s(zQParm)"
4cc0: 20 63 68 65 63 6b 65 64 3e 3c 62 3e 25 73 28 7a   checked><b>%s(z
4cd0: 4c 61 62 65 6c 29 3c 2f 62 3e 3c 2f 69 6e 70 75  Label)</b></inpu
4ce0: 74 3e 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  t>.  }else{.    
4cf0: 40 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 63  @ <input type="c
4d00: 68 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 25  heckbox" name="%
4d10: 73 28 7a 51 50 61 72 6d 29 22 3e 3c 62 3e 25 73  s(zQParm)"><b>%s
4d20: 28 7a 4c 61 62 65 6c 29 3c 2f 62 3e 3c 2f 69 6e  (zLabel)</b></in
4d30: 70 75 74 3e 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  put>.  }.}../*.*
4d40: 2a 20 47 65 6e 65 72 61 74 65 20 61 6e 20 65 6e  * Generate an en
4d50: 74 72 79 20 62 6f 78 20 66 6f 72 20 61 6e 20 61  try box for an a
4d60: 74 74 72 69 62 75 74 65 2e 0a 2a 2f 0a 76 6f 69  ttribute..*/.voi
4d70: 64 20 65 6e 74 72 79 5f 61 74 74 72 69 62 75 74  d entry_attribut
4d80: 65 28 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  e(.  const char 
4d90: 2a 7a 4c 61 62 65 6c 2c 20 20 20 2f 2a 20 54 68  *zLabel,   /* Th
4da0: 65 20 74 65 78 74 20 6c 61 62 65 6c 20 6f 6e 20  e text label on 
4db0: 74 68 65 20 65 6e 74 72 79 20 62 6f 78 20 2a 2f  the entry box */
4dc0: 0a 20 20 69 6e 74 20 77 69 64 74 68 2c 20 20 20  .  int width,   
4dd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 57 69 64 74           /* Widt
4de0: 68 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20 62  h of the entry b
4df0: 6f 78 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ox */.  const ch
4e00: 61 72 20 2a 7a 56 61 72 2c 20 20 20 20 20 2f 2a  ar *zVar,     /*
4e10: 20 54 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   The correspondi
4e20: 6e 67 20 72 6f 77 20 69 6e 20 74 68 65 20 56 41  ng row in the VA
4e30: 52 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 6f 6e  R table */.  con
4e40: 73 74 20 63 68 61 72 20 2a 7a 51 50 61 72 6d 2c  st char *zQParm,
4e50: 20 20 20 2f 2a 20 54 68 65 20 71 75 65 72 79 20     /* The query 
4e60: 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 63  parameter */.  c
4e70: 68 61 72 20 2a 7a 44 66 6c 74 20 20 20 20 20 2f  har *zDflt     /
4e80: 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20  * Default value 
4e90: 69 66 20 56 41 52 20 74 61 62 6c 65 20 65 6e 74  if VAR table ent
4ea0: 72 79 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  ry does not exis
4eb0: 74 20 2a 2f 0a 29 7b 0a 20 20 63 6f 6e 73 74 20  t */.){.  const 
4ec0: 63 68 61 72 20 2a 7a 56 61 6c 20 3d 20 64 62 5f  char *zVal = db_
4ed0: 67 65 74 28 7a 56 61 72 2c 20 7a 44 66 6c 74 29  get(zVar, zDflt)
4ee0: 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
4ef0: 7a 51 20 3d 20 50 28 7a 51 50 61 72 6d 29 3b 0a  zQ = P(zQParm);.
4f00: 20 20 69 66 28 20 7a 51 20 26 26 20 73 74 72 63    if( zQ && strc
4f10: 6d 70 28 7a 51 2c 7a 56 61 6c 29 21 3d 30 20 29  mp(zQ,zVal)!=0 )
4f20: 7b 0a 20 20 20 20 64 62 5f 73 65 74 28 7a 56 61  {.    db_set(zVa
4f30: 72 2c 20 7a 51 2c 20 30 29 3b 0a 20 20 20 20 7a  r, zQ, 0);.    z
4f40: 56 61 6c 20 3d 20 7a 51 3b 0a 20 20 7d 0a 20 20  Val = zQ;.  }.  
4f50: 40 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 74  @ <input type="t
4f60: 65 78 74 22 20 6e 61 6d 65 3d 22 25 73 28 7a 51  ext" name="%s(zQ
4f70: 50 61 72 6d 29 22 20 76 61 6c 75 65 3d 22 25 68  Parm)" value="%h
4f80: 28 7a 56 61 6c 29 22 20 73 69 7a 65 3d 22 25 64  (zVal)" size="%d
4f90: 28 77 69 64 74 68 29 22 3e 0a 20 20 40 20 3c 62  (width)">.  @ <b
4fa0: 3e 25 73 28 7a 4c 61 62 65 6c 29 3c 2f 62 3e 0a  >%s(zLabel)</b>.
4fb0: 7d 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61 74  }../*.** Generat
4fc0: 65 20 61 20 74 65 78 74 20 62 6f 78 20 66 6f 72  e a text box for
4fd0: 20 61 6e 20 61 74 74 72 69 62 75 74 65 2e 0a 2a   an attribute..*
4fe0: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74 65  /.static void te
4ff0: 78 74 61 72 65 61 5f 61 74 74 72 69 62 75 74 65  xtarea_attribute
5000: 28 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  (.  const char *
5010: 7a 4c 61 62 65 6c 2c 20 20 20 2f 2a 20 54 68 65  zLabel,   /* The
5020: 20 74 65 78 74 20 6c 61 62 65 6c 20 6f 6e 20 74   text label on t
5030: 68 65 20 74 65 78 74 61 72 65 61 20 2a 2f 0a 20  he textarea */. 
5040: 20 69 6e 74 20 72 6f 77 73 2c 20 20 20 20 20 20   int rows,      
5050: 20 20 20 20 20 20 20 2f 2a 20 52 6f 77 73 20 69         /* Rows i
5060: 6e 20 74 68 65 20 74 65 78 74 61 72 65 61 20 2a  n the textarea *
5070: 2f 0a 20 20 69 6e 74 20 63 6f 6c 73 2c 20 20 20  /.  int cols,   
5080: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c            /* Col
5090: 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 65 78 74  umns in the text
50a0: 61 72 65 61 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  area */.  const 
50b0: 63 68 61 72 20 2a 7a 56 61 72 2c 20 20 20 20 20  char *zVar,     
50c0: 2f 2a 20 54 68 65 20 63 6f 72 72 65 73 70 6f 6e  /* The correspon
50d0: 64 69 6e 67 20 72 6f 77 20 69 6e 20 74 68 65 20  ding row in the 
50e0: 56 41 52 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63  VAR table */.  c
50f0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 51 50 2c 20  onst char *zQP, 
5100: 20 20 20 20 20 2f 2a 20 54 68 65 20 71 75 65 72       /* The quer
5110: 79 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20  y parameter */. 
5120: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 66   const char *zDf
5130: 6c 74 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c  lt     /* Defaul
5140: 74 20 76 61 6c 75 65 20 69 66 20 56 41 52 20 74  t value if VAR t
5150: 61 62 6c 65 20 65 6e 74 72 79 20 64 6f 65 73 20  able entry does 
5160: 6e 6f 74 20 65 78 69 73 74 20 2a 2f 0a 29 7b 0a  not exist */.){.
5170: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20    const char *z 
5180: 3d 20 64 62 5f 67 65 74 28 7a 56 61 72 2c 20 28  = db_get(zVar, (
5190: 63 68 61 72 2a 29 7a 44 66 6c 74 29 3b 0a 20 20  char*)zDflt);.  
51a0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 51 20 3d  const char *zQ =
51b0: 20 50 28 7a 51 50 29 3b 0a 20 20 69 66 28 20 7a   P(zQP);.  if( z
51c0: 51 20 26 26 20 73 74 72 63 6d 70 28 7a 51 2c 7a  Q && strcmp(zQ,z
51d0: 29 21 3d 30 20 29 7b 0a 20 20 20 20 64 62 5f 73  )!=0 ){.    db_s
51e0: 65 74 28 7a 56 61 72 2c 20 7a 51 2c 20 30 29 3b  et(zVar, zQ, 0);
51f0: 0a 20 20 20 20 7a 20 3d 20 7a 51 3b 0a 20 20 7d  .    z = zQ;.  }
5200: 0a 20 20 69 66 28 20 72 6f 77 73 3e 30 20 26 26  .  if( rows>0 &&
5210: 20 63 6f 6c 73 3e 30 20 29 7b 0a 20 20 20 20 40   cols>0 ){.    @
5220: 20 3c 74 65 78 74 61 72 65 61 20 6e 61 6d 65 3d   <textarea name=
5230: 22 25 73 28 7a 51 50 29 22 20 72 6f 77 73 3d 22  "%s(zQP)" rows="
5240: 25 64 28 72 6f 77 73 29 22 20 63 6f 6c 73 3d 22  %d(rows)" cols="
5250: 25 64 28 63 6f 6c 73 29 22 3e 25 68 28 7a 29 3c  %d(cols)">%h(z)<
5260: 2f 74 65 78 74 61 72 65 61 3e 0a 20 20 20 20 40  /textarea>.    @
5270: 20 3c 62 3e 25 73 28 7a 4c 61 62 65 6c 29 3c 2f   <b>%s(zLabel)</
5280: 62 3e 0a 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a  b>.  }.}.../*.**
5290: 20 57 45 42 50 41 47 45 3a 20 73 65 74 75 70 5f   WEBPAGE: setup_
52a0: 61 63 63 65 73 73 0a 2a 2f 0a 76 6f 69 64 20 73  access.*/.void s
52b0: 65 74 75 70 5f 61 63 63 65 73 73 28 76 6f 69 64  etup_access(void
52c0: 29 7b 0a 20 20 6c 6f 67 69 6e 5f 63 68 65 63 6b  ){.  login_check
52d0: 5f 63 72 65 64 65 6e 74 69 61 6c 73 28 29 3b 0a  _credentials();.
52e0: 20 20 69 66 28 20 21 67 2e 6f 6b 53 65 74 75 70    if( !g.okSetup
52f0: 20 29 7b 0a 20 20 20 20 6c 6f 67 69 6e 5f 6e 65   ){.    login_ne
5300: 65 64 65 64 28 29 3b 0a 20 20 7d 0a 0a 20 20 73  eded();.  }..  s
5310: 74 79 6c 65 5f 68 65 61 64 65 72 28 22 41 63 63  tyle_header("Acc
5320: 65 73 73 20 43 6f 6e 74 72 6f 6c 20 53 65 74 74  ess Control Sett
5330: 69 6e 67 73 22 29 3b 0a 20 20 64 62 5f 62 65 67  ings");.  db_beg
5340: 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 29  in_transaction()
5350: 3b 0a 20 20 40 20 3c 66 6f 72 6d 20 61 63 74 69  ;.  @ <form acti
5360: 6f 6e 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52  on="%s(g.zBaseUR
5370: 4c 29 2f 73 65 74 75 70 5f 61 63 63 65 73 73 22  L)/setup_access"
5380: 20 6d 65 74 68 6f 64 3d 22 50 4f 53 54 22 3e 0a   method="POST">.
5390: 0a 20 20 40 20 3c 68 72 3e 0a 20 20 6f 6e 6f 66  .  @ <hr>.  onof
53a0: 66 5f 61 74 74 72 69 62 75 74 65 28 22 52 65 71  f_attribute("Req
53b0: 75 69 72 65 20 70 61 73 73 77 6f 72 64 20 66 6f  uire password fo
53c0: 72 20 6c 6f 63 61 6c 20 61 63 63 65 73 73 22 2c  r local access",
53d0: 0a 20 20 20 20 20 22 6c 6f 63 61 6c 61 75 74 68  .     "localauth
53e0: 22 2c 20 22 6c 6f 63 61 6c 61 75 74 68 22 2c 20  ", "localauth", 
53f0: 31 29 3b 0a 20 20 40 20 3c 70 3e 57 68 65 6e 20  1);.  @ <p>When 
5400: 65 6e 61 62 6c 65 64 2c 20 74 68 65 20 70 61 73  enabled, the pas
5410: 73 77 6f 72 64 20 73 69 67 6e 2d 69 6e 20 69 73  sword sign-in is
5420: 20 72 65 71 75 69 72 65 64 20 66 6f 72 0a 20 20   required for.  
5430: 40 20 77 65 62 20 61 63 63 65 73 73 20 63 6f 6d  @ web access com
5440: 69 6e 67 20 66 72 6f 6d 20 31 32 37 2e 30 2e 30  ing from 127.0.0
5450: 2e 31 2e 20 20 57 68 65 6e 20 64 69 73 61 62 6c  .1.  When disabl
5460: 65 64 2c 20 77 65 62 20 61 63 63 65 73 73 0a 20  ed, web access. 
5470: 20 40 20 66 72 6f 6d 20 31 32 37 2e 30 2e 30 2e   @ from 127.0.0.
5480: 31 20 69 73 20 61 6c 6c 6f 77 73 20 77 69 74 68  1 is allows with
5490: 6f 75 74 20 61 6e 79 20 6c 6f 67 69 6e 20 2d 20  out any login - 
54a0: 74 68 65 20 75 73 65 72 20 69 64 20 69 73 20 73  the user id is s
54b0: 65 6c 65 63 74 65 64 0a 20 20 40 20 66 72 6f 6d  elected.  @ from
54c0: 20 74 68 65 20 7e 2f 2e 66 6f 73 73 69 6c 20 64   the ~/.fossil d
54d0: 61 74 61 62 61 73 65 2e 20 50 61 73 73 77 6f 72  atabase. Passwor
54e0: 64 20 6c 6f 67 69 6e 20 69 73 20 61 6c 77 61 79  d login is alway
54f0: 73 20 72 65 71 75 69 72 65 64 0a 20 20 40 20 66  s required.  @ f
5500: 6f 72 20 69 6e 63 6f 6d 69 6e 67 20 77 65 62 20  or incoming web 
5510: 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 6f 6e 20 69  connections on i
5520: 6e 74 65 72 6e 65 74 20 61 64 64 72 65 73 73 65  nternet addresse
5530: 73 20 6f 74 68 65 72 20 74 68 61 6e 0a 20 20 40  s other than.  @
5540: 20 31 32 37 2e 30 2e 30 2e 31 2e 3c 2f 70 3e 3c   127.0.0.1.</p><
5550: 2f 6c 69 3e 0a 0a 20 20 40 20 3c 68 72 3e 0a 20  /li>..  @ <hr>. 
5560: 20 6f 6e 6f 66 66 5f 61 74 74 72 69 62 75 74 65   onoff_attribute
5570: 28 22 49 6e 68 65 72 69 74 20 63 61 70 61 62 69  ("Inherit capabi
5580: 6c 69 74 69 65 73 20 66 72 6f 6d 20 61 6e 6f 6e  lities from anon
5590: 79 6d 6f 75 73 20 75 73 65 72 22 2c 0a 20 20 20  ymous user",.   
55a0: 20 20 22 69 6e 68 65 72 69 74 2d 61 6e 6f 6e 22    "inherit-anon"
55b0: 2c 20 22 69 6e 68 65 72 69 74 2d 61 6e 6f 6e 22  , "inherit-anon"
55c0: 2c 20 30 29 3b 0a 20 20 40 20 3c 70 3e 57 68 65  , 0);.  @ <p>Whe
55d0: 6e 20 65 6e 61 62 6c 65 64 2c 20 61 6c 6c 20 77  n enabled, all w
55e0: 65 62 20 75 73 65 72 73 20 69 6e 68 65 72 69 74  eb users inherit
55f0: 20 63 61 70 61 62 69 6c 69 74 69 65 73 20 66 72   capabilities fr
5600: 6f 6d 0a 20 20 40 20 22 61 6e 6f 6e 79 6d 6f 75  om.  @ "anonymou
5610: 73 22 2c 20 61 73 20 77 65 6c 6c 20 61 73 20 66  s", as well as f
5620: 72 6f 6d 20 22 6e 6f 62 6f 64 79 22 2e 3c 2f 70  rom "nobody".</p
5630: 3e 3c 2f 6c 69 3e 0a 0a 20 20 40 20 3c 68 72 3e  ></li>..  @ <hr>
5640: 0a 20 20 65 6e 74 72 79 5f 61 74 74 72 69 62 75  .  entry_attribu
5650: 74 65 28 22 4c 6f 67 69 6e 20 65 78 70 69 72 61  te("Login expira
5660: 74 69 6f 6e 20 74 69 6d 65 22 2c 20 36 2c 20 22  tion time", 6, "
5670: 63 6f 6f 6b 69 65 2d 65 78 70 69 72 65 22 2c 20  cookie-expire", 
5680: 22 63 65 78 22 2c 20 22 38 37 36 36 22 29 3b 0a  "cex", "8766");.
5690: 20 20 40 20 3c 70 3e 54 68 65 20 6e 75 6d 62 65    @ <p>The numbe
56a0: 72 20 6f 66 20 68 6f 75 72 73 20 66 6f 72 20 77  r of hours for w
56b0: 68 69 63 68 20 61 20 6c 6f 67 69 6e 20 69 73 20  hich a login is 
56c0: 76 61 6c 69 64 2e 20 20 54 68 69 73 20 6d 75 73  valid.  This mus
56d0: 74 20 62 65 20 61 0a 20 20 40 20 70 6f 73 69 74  t be a.  @ posit
56e0: 69 76 65 20 6e 75 6d 62 65 72 2e 20 20 54 68 65  ive number.  The
56f0: 20 64 65 66 61 75 6c 74 20 69 73 20 38 37 36 30   default is 8760
5700: 20 68 6f 75 72 73 20 77 68 69 63 68 20 69 73 20   hours which is 
5710: 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 65 71  approximately eq
5720: 75 61 6c 0a 20 20 40 20 74 6f 20 61 20 79 65 61  ual.  @ to a yea
5730: 72 2e 3c 2f 70 3e 0a 0a 20 20 40 20 3c 68 72 3e  r.</p>..  @ <hr>
5740: 0a 20 20 65 6e 74 72 79 5f 61 74 74 72 69 62 75  .  entry_attribu
5750: 74 65 28 22 44 6f 77 6e 6c 6f 61 64 20 70 61 63  te("Download pac
5760: 6b 65 74 20 6c 69 6d 69 74 22 2c 20 31 30 2c 20  ket limit", 10, 
5770: 22 6d 61 78 2d 64 6f 77 6e 6c 6f 61 64 22 2c 20  "max-download", 
5780: 22 6d 78 64 77 6e 22 2c 0a 20 20 20 20 20 20 20  "mxdwn",.       
5790: 20 20 20 20 20 20 20 20 20 20 20 22 35 30 30 30             "5000
57a0: 30 30 30 22 29 3b 0a 20 20 40 20 3c 70 3e 46 6f  000");.  @ <p>Fo
57b0: 73 73 69 6c 20 74 72 69 65 73 20 74 6f 20 6c 69  ssil tries to li
57c0: 6d 69 74 20 6f 75 74 2d 62 6f 75 6e 64 20 73 79  mit out-bound sy
57d0: 6e 63 2c 20 63 6c 6f 6e 65 2c 20 61 6e 64 20 70  nc, clone, and p
57e0: 75 6c 6c 20 70 61 63 6b 65 74 73 0a 20 20 40 20  ull packets.  @ 
57f0: 74 6f 20 74 68 69 73 20 6d 61 6e 79 20 62 79 74  to this many byt
5800: 65 73 2c 20 75 6e 63 6f 6d 70 72 65 73 73 65 64  es, uncompressed
5810: 2e 20 20 49 66 20 74 68 65 20 63 6c 69 65 6e 74  .  If the client
5820: 20 72 65 71 75 69 72 65 73 20 6d 6f 72 65 20 64   requires more d
5830: 61 74 61 0a 20 20 40 20 74 68 61 6e 20 74 68 69  ata.  @ than thi
5840: 73 2c 20 74 68 65 6e 20 74 68 65 20 63 6c 69 65  s, then the clie
5850: 6e 74 20 77 69 6c 6c 20 69 73 73 75 65 20 6d 75  nt will issue mu
5860: 6c 74 69 70 6c 65 20 48 54 54 50 20 72 65 71 75  ltiple HTTP requ
5870: 65 73 74 73 2e 0a 20 20 40 20 56 61 6c 75 65 73  ests..  @ Values
5880: 20 62 65 6c 6f 77 20 31 20 6d 69 6c 6c 69 6f 6e   below 1 million
5890: 20 61 72 65 20 6e 6f 74 20 72 65 63 6f 6d 6d 65   are not recomme
58a0: 6e 64 65 64 2e 20 20 35 20 6d 69 6c 6c 69 6f 6e  nded.  5 million
58b0: 20 69 73 20 61 20 0a 20 20 40 20 72 65 61 73 6f   is a .  @ reaso
58c0: 6e 61 62 6c 65 20 6e 75 6d 62 65 72 2e 3c 2f 70  nable number.</p
58d0: 3e 0a 0a 20 20 40 20 3c 68 72 3e 0a 20 20 40 20  >..  @ <hr>.  @ 
58e0: 3c 70 3e 3c 69 6e 70 75 74 20 74 79 70 65 3d 22  <p><input type="
58f0: 73 75 62 6d 69 74 22 20 20 6e 61 6d 65 3d 22 73  submit"  name="s
5900: 75 62 6d 69 74 22 20 76 61 6c 75 65 3d 22 41 70  ubmit" value="Ap
5910: 70 6c 79 20 43 68 61 6e 67 65 73 22 3e 3c 2f 70  ply Changes"></p
5920: 3e 0a 20 20 40 20 3c 2f 66 6f 72 6d 3e 0a 20 20  >.  @ </form>.  
5930: 64 62 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 69  db_end_transacti
5940: 6f 6e 28 30 29 3b 0a 20 20 73 74 79 6c 65 5f 66  on(0);.  style_f
5950: 6f 6f 74 65 72 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  ooter();.}../*.*
5960: 2a 20 57 45 42 50 41 47 45 3a 20 73 65 74 75 70  * WEBPAGE: setup
5970: 5f 74 69 6d 65 6c 69 6e 65 0a 2a 2f 0a 76 6f 69  _timeline.*/.voi
5980: 64 20 73 65 74 75 70 5f 74 69 6d 65 6c 69 6e 65  d setup_timeline
5990: 28 76 6f 69 64 29 7b 0a 20 20 6c 6f 67 69 6e 5f  (void){.  login_
59a0: 63 68 65 63 6b 5f 63 72 65 64 65 6e 74 69 61 6c  check_credential
59b0: 73 28 29 3b 0a 20 20 69 66 28 20 21 67 2e 6f 6b  s();.  if( !g.ok
59c0: 53 65 74 75 70 20 29 7b 0a 20 20 20 20 6c 6f 67  Setup ){.    log
59d0: 69 6e 5f 6e 65 65 64 65 64 28 29 3b 0a 20 20 7d  in_needed();.  }
59e0: 0a 0a 20 20 73 74 79 6c 65 5f 68 65 61 64 65 72  ..  style_header
59f0: 28 22 54 69 6d 65 6c 69 6e 65 20 44 69 73 70 6c  ("Timeline Displ
5a00: 61 79 20 50 72 65 66 65 72 65 6e 63 65 73 22 29  ay Preferences")
5a10: 3b 0a 20 20 64 62 5f 62 65 67 69 6e 5f 74 72 61  ;.  db_begin_tra
5a20: 6e 73 61 63 74 69 6f 6e 28 29 3b 0a 20 20 40 20  nsaction();.  @ 
5a30: 3c 66 6f 72 6d 20 61 63 74 69 6f 6e 3d 22 25 73  <form action="%s
5a40: 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 73 65 74  (g.zBaseURL)/set
5a50: 75 70 5f 74 69 6d 65 6c 69 6e 65 22 20 6d 65 74  up_timeline" met
5a60: 68 6f 64 3d 22 50 4f 53 54 22 3e 0a 0a 20 20 40  hod="POST">..  @
5a70: 20 3c 68 72 3e 0a 20 20 6f 6e 6f 66 66 5f 61 74   <hr>.  onoff_at
5a80: 74 72 69 62 75 74 65 28 22 42 6c 6f 63 6b 20 6d  tribute("Block m
5a90: 61 72 6b 75 70 20 69 6e 20 74 69 6d 65 6c 69 6e  arkup in timelin
5aa0: 65 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  e",.            
5ab0: 20 20 20 20 20 20 22 74 69 6d 65 6c 69 6e 65 2d        "timeline-
5ac0: 62 6c 6f 63 6b 2d 6d 61 72 6b 75 70 22 2c 20 22  block-markup", "
5ad0: 74 62 6d 22 2c 20 30 29 3b 0a 20 20 40 20 3c 70  tbm", 0);.  @ <p
5ae0: 3e 49 6e 20 74 69 6d 65 6c 69 6e 65 20 64 69 73  >In timeline dis
5af0: 70 6c 61 79 73 2c 20 63 68 65 63 6b 2d 69 6e 20  plays, check-in 
5b00: 63 6f 6d 6d 65 6e 74 73 20 63 61 6e 20 62 65 20  comments can be 
5b10: 64 69 73 70 6c 61 79 65 64 20 77 69 74 68 20 6f  displayed with o
5b20: 72 0a 20 20 40 20 77 69 74 68 6f 75 74 20 62 6c  r.  @ without bl
5b30: 6f 63 6b 20 6d 61 72 6b 75 70 20 28 70 61 72 61  ock markup (para
5b40: 67 72 61 70 68 73 2c 20 74 61 62 6c 65 73 2c 20  graphs, tables, 
5b50: 65 74 63 2e 29 3c 2f 70 3e 0a 0a 20 20 40 20 3c  etc.)</p>..  @ <
5b60: 68 72 3e 0a 20 20 65 6e 74 72 79 5f 61 74 74 72  hr>.  entry_attr
5b70: 69 62 75 74 65 28 22 4d 61 78 20 74 69 6d 65 6c  ibute("Max timel
5b80: 69 6e 65 20 63 6f 6d 6d 65 6e 74 20 6c 65 6e 67  ine comment leng
5b90: 74 68 22 2c 20 36 2c 20 0a 20 20 20 20 20 20 20  th", 6, .       
5ba0: 20 20 20 20 20 20 20 20 20 20 20 22 74 69 6d 65             "time
5bb0: 6c 69 6e 65 2d 6d 61 78 2d 63 6f 6d 6d 65 6e 74  line-max-comment
5bc0: 22 2c 20 22 74 6d 63 22 2c 20 22 30 22 29 3b 0a  ", "tmc", "0");.
5bd0: 20 20 40 20 3c 70 3e 54 68 65 20 6d 61 78 69 6d    @ <p>The maxim
5be0: 75 6d 20 6c 65 6e 67 74 68 20 6f 66 20 61 20 63  um length of a c
5bf0: 6f 6d 6d 65 6e 74 20 74 6f 20 62 65 20 64 69 73  omment to be dis
5c00: 70 6c 61 79 65 64 20 69 6e 20 61 20 74 69 6d 65  played in a time
5c10: 6c 69 6e 65 2e 0a 20 20 40 20 22 30 22 20 74 68  line..  @ "0" th
5c20: 65 72 65 20 69 73 20 6e 6f 20 6c 65 6e 67 74 68  ere is no length
5c30: 20 6c 69 6d 69 74 2e 3c 2f 70 3e 0a 0a 20 20 40   limit.</p>..  @
5c40: 20 3c 68 72 3e 0a 20 20 40 20 3c 70 3e 3c 69 6e   <hr>.  @ <p><in
5c50: 70 75 74 20 74 79 70 65 3d 22 73 75 62 6d 69 74  put type="submit
5c60: 22 20 20 6e 61 6d 65 3d 22 73 75 62 6d 69 74 22  "  name="submit"
5c70: 20 76 61 6c 75 65 3d 22 41 70 70 6c 79 20 43 68   value="Apply Ch
5c80: 61 6e 67 65 73 22 3e 3c 2f 70 3e 0a 20 20 40 20  anges"></p>.  @ 
5c90: 3c 2f 66 6f 72 6d 3e 0a 20 20 64 62 5f 65 6e 64  </form>.  db_end
5ca0: 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 30 29 3b  _transaction(0);
5cb0: 0a 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28  .  style_footer(
5cc0: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50  );.}../*.** WEBP
5cd0: 41 47 45 3a 20 73 65 74 75 70 5f 63 6f 6e 66 69  AGE: setup_confi
5ce0: 67 0a 2a 2f 0a 76 6f 69 64 20 73 65 74 75 70 5f  g.*/.void setup_
5cf0: 63 6f 6e 66 69 67 28 76 6f 69 64 29 7b 0a 20 20  config(void){.  
5d00: 6c 6f 67 69 6e 5f 63 68 65 63 6b 5f 63 72 65 64  login_check_cred
5d10: 65 6e 74 69 61 6c 73 28 29 3b 0a 20 20 69 66 28  entials();.  if(
5d20: 20 21 67 2e 6f 6b 53 65 74 75 70 20 29 7b 0a 20   !g.okSetup ){. 
5d30: 20 20 20 6c 6f 67 69 6e 5f 6e 65 65 64 65 64 28     login_needed(
5d40: 29 3b 0a 20 20 7d 0a 0a 20 20 73 74 79 6c 65 5f  );.  }..  style_
5d50: 68 65 61 64 65 72 28 22 57 57 57 20 43 6f 6e 66  header("WWW Conf
5d60: 69 67 75 72 61 74 69 6f 6e 22 29 3b 0a 20 20 64  iguration");.  d
5d70: 62 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61 63 74  b_begin_transact
5d80: 69 6f 6e 28 29 3b 0a 20 20 40 20 3c 66 6f 72 6d  ion();.  @ <form
5d90: 20 61 63 74 69 6f 6e 3d 22 25 73 28 67 2e 7a 42   action="%s(g.zB
5da0: 61 73 65 55 52 4c 29 2f 73 65 74 75 70 5f 63 6f  aseURL)/setup_co
5db0: 6e 66 69 67 22 20 6d 65 74 68 6f 64 3d 22 50 4f  nfig" method="PO
5dc0: 53 54 22 3e 0a 20 20 40 20 3c 68 72 20 2f 3e 0a  ST">.  @ <hr />.
5dd0: 20 20 65 6e 74 72 79 5f 61 74 74 72 69 62 75 74    entry_attribut
5de0: 65 28 22 50 72 6f 6a 65 63 74 20 4e 61 6d 65 22  e("Project Name"
5df0: 2c 20 36 30 2c 20 22 70 72 6f 6a 65 63 74 2d 6e  , 60, "project-n
5e00: 61 6d 65 22 2c 20 22 70 6e 22 2c 20 22 22 29 3b  ame", "pn", "");
5e10: 0a 20 20 40 20 3c 70 3e 47 69 76 65 20 79 6f 75  .  @ <p>Give you
5e20: 72 20 70 72 6f 6a 65 63 74 20 61 20 6e 61 6d 65  r project a name
5e30: 20 73 6f 20 76 69 73 69 74 6f 72 73 20 6b 6e 6f   so visitors kno
5e40: 77 20 77 68 61 74 20 74 68 69 73 20 73 69 74 65  w what this site
5e50: 20 69 73 20 61 62 6f 75 74 2e 0a 20 20 40 20 54   is about..  @ T
5e60: 68 65 20 70 72 6f 6a 65 63 74 20 6e 61 6d 65 20  he project name 
5e70: 77 69 6c 6c 20 61 6c 73 6f 20 62 65 20 75 73 65  will also be use
5e80: 64 20 61 73 20 74 68 65 20 52 53 53 20 66 65 65  d as the RSS fee
5e90: 64 20 74 69 74 6c 65 2e 3c 2f 70 3e 0a 20 20 40  d title.</p>.  @
5ea0: 20 3c 68 72 20 2f 3e 0a 20 20 74 65 78 74 61 72   <hr />.  textar
5eb0: 65 61 5f 61 74 74 72 69 62 75 74 65 28 22 50 72  ea_attribute("Pr
5ec0: 6f 6a 65 63 74 20 44 65 73 63 72 69 70 74 69 6f  oject Descriptio
5ed0: 6e 22 2c 20 35 2c 20 36 30 2c 0a 20 20 20 20 20  n", 5, 60,.     
5ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ef0: 22 70 72 6f 6a 65 63 74 2d 64 65 73 63 72 69 70  "project-descrip
5f00: 74 69 6f 6e 22 2c 20 22 70 64 22 2c 20 22 22 29  tion", "pd", "")
5f10: 3b 0a 20 20 40 20 3c 70 3e 44 65 73 63 72 69 62  ;.  @ <p>Describ
5f20: 65 20 79 6f 75 72 20 70 72 6f 6a 65 63 74 2e 20  e your project. 
5f30: 54 68 69 73 20 77 69 6c 6c 20 62 65 20 75 73 65  This will be use
5f40: 64 20 69 6e 20 70 61 67 65 20 68 65 61 64 65 72  d in page header
5f50: 73 20 66 6f 72 20 73 65 61 72 63 68 0a 20 20 40  s for search.  @
5f60: 20 65 6e 67 69 6e 65 73 20 61 73 20 77 65 6c 6c   engines as well
5f70: 20 61 73 20 61 20 73 68 6f 72 74 20 52 53 53 20   as a short RSS 
5f80: 64 65 73 63 72 69 70 74 69 6f 6e 2e 3c 2f 70 3e  description.</p>
5f90: 0a 20 20 40 20 3c 68 72 20 2f 3e 0a 20 20 65 6e  .  @ <hr />.  en
5fa0: 74 72 79 5f 61 74 74 72 69 62 75 74 65 28 22 49  try_attribute("I
5fb0: 6e 64 65 78 20 50 61 67 65 22 2c 20 36 30 2c 20  ndex Page", 60, 
5fc0: 22 69 6e 64 65 78 2d 70 61 67 65 22 2c 20 22 69  "index-page", "i
5fd0: 64 78 70 67 22 2c 20 22 2f 68 6f 6d 65 22 29 3b  dxpg", "/home");
5fe0: 0a 20 20 40 20 3c 70 3e 45 6e 74 65 72 20 74 68  .  @ <p>Enter th
5ff0: 65 20 70 61 74 68 6e 61 6d 65 20 6f 66 20 74 68  e pathname of th
6000: 65 20 70 61 67 65 20 74 6f 20 64 69 73 70 6c 61  e page to displa
6010: 79 20 77 68 65 6e 20 74 68 65 20 22 48 6f 6d 65  y when the "Home
6020: 22 20 6d 65 6e 75 0a 20 20 40 20 6f 70 74 69 6f  " menu.  @ optio
6030: 6e 20 69 73 20 73 65 6c 65 63 74 65 64 20 61 6e  n is selected an
6040: 64 20 77 68 65 6e 20 6e 6f 20 70 61 74 68 6e 61  d when no pathna
6050: 6d 65 20 69 73 0a 20 20 40 20 73 70 65 63 69 66  me is.  @ specif
6060: 69 65 64 20 69 6e 20 74 68 65 20 55 52 4c 2e 20  ied in the URL. 
6070: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 66   For example, if
6080: 20 79 6f 75 20 76 69 73 69 74 20 74 68 65 20 75   you visit the u
6090: 72 6c 3a 3c 2f 70 3e 0a 20 20 40 0a 20 20 40 20  rl:</p>.  @.  @ 
60a0: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 25 68 28 67  <blockquote>%h(g
60b0: 2e 7a 42 61 73 65 55 52 4c 29 3c 2f 62 6c 6f 63  .zBaseURL)</bloc
60c0: 6b 71 75 6f 74 65 3e 0a 20 20 40 0a 20 20 40 20  kquote>.  @.  @ 
60d0: 3c 70 3e 41 6e 64 20 79 6f 75 20 68 61 76 65 20  <p>And you have 
60e0: 73 70 65 63 69 66 69 65 64 20 61 6e 20 69 6e 64  specified an ind
60f0: 65 78 20 70 61 67 65 20 6f 66 20 22 2f 68 6f 6d  ex page of "/hom
6100: 65 22 20 74 68 65 20 61 62 6f 76 65 20 77 69 6c  e" the above wil
6110: 6c 0a 20 20 40 20 61 75 74 6f 6d 61 74 69 63 61  l.  @ automatica
6120: 6c 6c 79 20 72 65 64 69 72 65 63 74 20 74 6f 3a  lly redirect to:
6130: 3c 2f 70 3e 0a 20 20 40 0a 20 20 40 20 3c 62 6c  </p>.  @.  @ <bl
6140: 6f 63 6b 71 75 6f 74 65 3e 25 68 28 67 2e 7a 42  ockquote>%h(g.zB
6150: 61 73 65 55 52 4c 29 2f 68 6f 6d 65 3c 2f 62 6c  aseURL)/home</bl
6160: 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 40 0a 20 20  ockquote>.  @.  
6170: 40 20 3c 70 3e 54 68 65 20 64 65 66 61 75 6c 74  @ <p>The default
6180: 20 22 2f 68 6f 6d 65 22 20 70 61 67 65 20 64 69   "/home" page di
6190: 73 70 6c 61 79 73 20 61 20 57 69 6b 69 20 70 61  splays a Wiki pa
61a0: 67 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  ge with the same
61b0: 20 6e 61 6d 65 0a 20 20 40 20 61 73 20 74 68 65   name.  @ as the
61c0: 20 50 72 6f 6a 65 63 74 20 4e 61 6d 65 20 73 70   Project Name sp
61d0: 65 63 69 66 69 65 64 20 61 62 6f 76 65 2e 20 20  ecified above.  
61e0: 53 6f 6d 65 20 73 69 74 65 73 20 70 72 65 66 65  Some sites prefe
61f0: 72 20 74 6f 20 72 65 64 69 72 65 63 74 0a 20 20  r to redirect.  
6200: 40 20 74 6f 20 61 20 64 6f 63 75 6d 65 6e 74 61  @ to a documenta
6210: 74 69 6f 6e 20 70 61 67 65 20 28 65 78 3a 20 22  tion page (ex: "
6220: 2f 64 6f 63 2f 74 69 70 2f 69 6e 64 65 78 2e 77  /doc/tip/index.w
6230: 69 6b 69 22 29 20 6f 72 20 74 6f 20 22 2f 74 69  iki") or to "/ti
6240: 6d 65 6c 69 6e 65 22 2e 3c 2f 70 3e 0a 20 20 40  meline".</p>.  @
6250: 20 3c 68 72 20 2f 3e 0a 20 20 40 20 3c 70 3e 3c   <hr />.  @ <p><
6260: 69 6e 70 75 74 20 74 79 70 65 3d 22 73 75 62 6d  input type="subm
6270: 69 74 22 20 20 6e 61 6d 65 3d 22 73 75 62 6d 69  it"  name="submi
6280: 74 22 20 76 61 6c 75 65 3d 22 41 70 70 6c 79 20  t" value="Apply 
6290: 43 68 61 6e 67 65 73 22 3e 3c 2f 70 3e 0a 20 20  Changes"></p>.  
62a0: 40 20 3c 2f 66 6f 72 6d 3e 0a 20 20 64 62 5f 65  @ </form>.  db_e
62b0: 6e 64 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 30  nd_transaction(0
62c0: 29 3b 0a 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65  );.  style_foote
62d0: 72 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 45  r();.}../*.** WE
62e0: 42 50 41 47 45 3a 20 73 65 74 75 70 5f 65 64 69  BPAGE: setup_edi
62f0: 74 63 73 73 0a 2a 2f 0a 76 6f 69 64 20 73 65 74  tcss.*/.void set
6300: 75 70 5f 65 64 69 74 63 73 73 28 76 6f 69 64 29  up_editcss(void)
6310: 7b 0a 20 20 6c 6f 67 69 6e 5f 63 68 65 63 6b 5f  {.  login_check_
6320: 63 72 65 64 65 6e 74 69 61 6c 73 28 29 3b 0a 20  credentials();. 
6330: 20 69 66 28 20 21 67 2e 6f 6b 53 65 74 75 70 20   if( !g.okSetup 
6340: 29 7b 0a 20 20 20 20 6c 6f 67 69 6e 5f 6e 65 65  ){.    login_nee
6350: 64 65 64 28 29 3b 0a 20 20 7d 0a 20 20 73 74 79  ded();.  }.  sty
6360: 6c 65 5f 68 65 61 64 65 72 28 22 45 64 69 74 20  le_header("Edit 
6370: 43 53 53 22 29 3b 0a 20 20 40 20 3c 66 6f 72 6d  CSS");.  @ <form
6380: 20 61 63 74 69 6f 6e 3d 22 25 73 28 67 2e 7a 42   action="%s(g.zB
6390: 61 73 65 55 52 4c 29 2f 73 65 74 75 70 5f 65 64  aseURL)/setup_ed
63a0: 69 74 63 73 73 22 20 6d 65 74 68 6f 64 3d 22 50  itcss" method="P
63b0: 4f 53 54 22 3e 0a 20 20 40 20 45 64 69 74 20 74  OST">.  @ Edit t
63c0: 68 65 20 43 53 53 3a 3c 62 72 20 2f 3e 0a 20 20  he CSS:<br />.  
63d0: 74 65 78 74 61 72 65 61 5f 61 74 74 72 69 62 75  textarea_attribu
63e0: 74 65 28 22 22 2c 20 34 30 2c 20 38 30 2c 20 22  te("", 40, 80, "
63f0: 63 73 73 22 2c 20 22 63 73 73 22 2c 20 7a 44 65  css", "css", zDe
6400: 66 61 75 6c 74 43 53 53 29 3b 0a 20 20 40 20 3c  faultCSS);.  @ <
6410: 62 72 20 2f 3e 0a 20 20 40 20 3c 69 6e 70 75 74  br />.  @ <input
6420: 20 74 79 70 65 3d 22 73 75 62 6d 69 74 22 20 6e   type="submit" n
6430: 61 6d 65 3d 22 73 75 62 6d 69 74 22 20 76 61 6c  ame="submit" val
6440: 75 65 3d 22 41 70 70 6c 79 20 43 68 61 6e 67 65  ue="Apply Change
6450: 73 22 3e 0a 20 20 40 20 3c 2f 66 6f 72 6d 3e 0a  s">.  @ </form>.
6460: 20 20 40 20 3c 68 72 3e 0a 20 20 40 20 48 65 72    @ <hr>.  @ Her
6470: 65 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74  e is the default
6480: 20 43 53 53 3a 0a 20 20 40 20 3c 62 6c 6f 63 6b   CSS:.  @ <block
6490: 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 20 20 40 20  quote><pre>.  @ 
64a0: 25 68 28 7a 44 65 66 61 75 6c 74 43 53 53 29 0a  %h(zDefaultCSS).
64b0: 20 20 40 20 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63    @ </pre></bloc
64c0: 6b 71 75 6f 74 65 3e 0a 20 20 73 74 79 6c 65 5f  kquote>.  style_
64d0: 66 6f 6f 74 65 72 28 29 3b 0a 7d 0a 0a 2f 2a 0a  footer();.}../*.
64e0: 2a 2a 20 57 45 42 50 41 47 45 3a 20 73 65 74 75  ** WEBPAGE: setu
64f0: 70 5f 68 65 61 64 65 72 0a 2a 2f 0a 76 6f 69 64  p_header.*/.void
6500: 20 73 65 74 75 70 5f 68 65 61 64 65 72 28 76 6f   setup_header(vo
6510: 69 64 29 7b 0a 20 20 6c 6f 67 69 6e 5f 63 68 65  id){.  login_che
6520: 63 6b 5f 63 72 65 64 65 6e 74 69 61 6c 73 28 29  ck_credentials()
6530: 3b 0a 20 20 69 66 28 20 21 67 2e 6f 6b 53 65 74  ;.  if( !g.okSet
6540: 75 70 20 29 7b 0a 20 20 20 20 6c 6f 67 69 6e 5f  up ){.    login_
6550: 6e 65 65 64 65 64 28 29 3b 0a 20 20 7d 0a 20 20  needed();.  }.  
6560: 64 62 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61 63  db_begin_transac
6570: 74 69 6f 6e 28 29 3b 0a 20 20 69 66 28 20 50 28  tion();.  if( P(
6580: 22 63 6c 65 61 72 22 29 21 3d 30 20 29 7b 0a 20  "clear")!=0 ){. 
6590: 20 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63     db_multi_exec
65a0: 28 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 63 6f  ("DELETE FROM co
65b0: 6e 66 69 67 20 57 48 45 52 45 20 6e 61 6d 65 3d  nfig WHERE name=
65c0: 27 68 65 61 64 65 72 27 22 29 3b 0a 20 20 20 20  'header'");.    
65d0: 63 67 69 5f 72 65 70 6c 61 63 65 5f 70 61 72 61  cgi_replace_para
65e0: 6d 65 74 65 72 28 22 68 65 61 64 65 72 22 2c 20  meter("header", 
65f0: 7a 44 65 66 61 75 6c 74 48 65 61 64 65 72 29 3b  zDefaultHeader);
6600: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 74 65  .  }else{.    te
6610: 78 74 61 72 65 61 5f 61 74 74 72 69 62 75 74 65  xtarea_attribute
6620: 28 30 2c 20 30 2c 20 30 2c 20 22 68 65 61 64 65  (0, 0, 0, "heade
6630: 72 22 2c 20 22 68 65 61 64 65 72 22 2c 20 7a 44  r", "header", zD
6640: 65 66 61 75 6c 74 48 65 61 64 65 72 29 3b 0a 20  efaultHeader);. 
6650: 20 7d 0a 20 20 73 74 79 6c 65 5f 68 65 61 64 65   }.  style_heade
6660: 72 28 22 45 64 69 74 20 50 61 67 65 20 48 65 61  r("Edit Page Hea
6670: 64 65 72 22 29 3b 0a 20 20 40 20 3c 66 6f 72 6d  der");.  @ <form
6680: 20 61 63 74 69 6f 6e 3d 22 25 73 28 67 2e 7a 42   action="%s(g.zB
6690: 61 73 65 55 52 4c 29 2f 73 65 74 75 70 5f 68 65  aseURL)/setup_he
66a0: 61 64 65 72 22 20 6d 65 74 68 6f 64 3d 22 50 4f  ader" method="PO
66b0: 53 54 22 3e 0a 20 20 40 20 3c 70 3e 45 64 69 74  ST">.  @ <p>Edit
66c0: 20 48 54 4d 4c 20 74 65 78 74 20 77 69 74 68 20   HTML text with 
66d0: 65 6d 62 65 64 64 65 64 20 54 48 31 20 28 61 20  embedded TH1 (a 
66e0: 54 43 4c 20 64 69 61 6c 65 63 74 29 20 74 68 61  TCL dialect) tha
66f0: 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74  t will be used t
6700: 6f 0a 20 20 40 20 67 65 6e 65 72 61 74 65 20 74  o.  @ generate t
6710: 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20  he beginning of 
6720: 65 76 65 72 79 20 70 61 67 65 20 74 68 72 6f 75  every page throu
6730: 67 68 20 73 74 61 72 74 20 6f 66 20 74 68 65 20  gh start of the 
6740: 6d 61 69 6e 0a 20 20 40 20 6d 65 6e 75 2e 3c 2f  main.  @ menu.</
6750: 70 3e 0a 20 20 74 65 78 74 61 72 65 61 5f 61 74  p>.  textarea_at
6760: 74 72 69 62 75 74 65 28 22 22 2c 20 34 30 2c 20  tribute("", 40, 
6770: 38 30 2c 20 22 68 65 61 64 65 72 22 2c 20 22 68  80, "header", "h
6780: 65 61 64 65 72 22 2c 20 7a 44 65 66 61 75 6c 74  eader", zDefault
6790: 48 65 61 64 65 72 29 3b 0a 20 20 40 20 3c 62 72  Header);.  @ <br
67a0: 20 2f 3e 0a 20 20 40 20 3c 69 6e 70 75 74 20 74   />.  @ <input t
67b0: 79 70 65 3d 22 73 75 62 6d 69 74 22 20 6e 61 6d  ype="submit" nam
67c0: 65 3d 22 73 75 62 6d 69 74 22 20 76 61 6c 75 65  e="submit" value
67d0: 3d 22 41 70 70 6c 79 20 43 68 61 6e 67 65 73 22  ="Apply Changes"
67e0: 3e 0a 20 20 40 20 3c 69 6e 70 75 74 20 74 79 70  >.  @ <input typ
67f0: 65 3d 22 73 75 62 6d 69 74 22 20 6e 61 6d 65 3d  e="submit" name=
6800: 22 63 6c 65 61 72 22 20 76 61 6c 75 65 3d 22 52  "clear" value="R
6810: 65 76 65 72 74 20 54 6f 20 44 65 66 61 75 6c 74  evert To Default
6820: 22 3e 0a 20 20 40 20 3c 2f 66 6f 72 6d 3e 0a 20  ">.  @ </form>. 
6830: 20 40 20 3c 68 72 3e 0a 20 20 40 20 48 65 72 65   @ <hr>.  @ Here
6840: 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20   is the default 
6850: 70 61 67 65 20 68 65 61 64 65 72 3a 0a 20 20 40  page header:.  @
6860: 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72   <blockquote><pr
6870: 65 3e 0a 20 20 40 20 25 68 28 7a 44 65 66 61 75  e>.  @ %h(zDefau
6880: 6c 74 48 65 61 64 65 72 29 0a 20 20 40 20 3c 2f  ltHeader).  @ </
6890: 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
68a0: 3e 0a 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72  >.  style_footer
68b0: 28 29 3b 0a 20 20 64 62 5f 65 6e 64 5f 74 72 61  ();.  db_end_tra
68c0: 6e 73 61 63 74 69 6f 6e 28 30 29 3b 0a 7d 0a 0a  nsaction(0);.}..
68d0: 2f 2a 0a 2a 2a 20 57 45 42 50 41 47 45 3a 20 73  /*.** WEBPAGE: s
68e0: 65 74 75 70 5f 66 6f 6f 74 65 72 0a 2a 2f 0a 76  etup_footer.*/.v
68f0: 6f 69 64 20 73 65 74 75 70 5f 66 6f 6f 74 65 72  oid setup_footer
6900: 28 76 6f 69 64 29 7b 0a 20 20 6c 6f 67 69 6e 5f  (void){.  login_
6910: 63 68 65 63 6b 5f 63 72 65 64 65 6e 74 69 61 6c  check_credential
6920: 73 28 29 3b 0a 20 20 69 66 28 20 21 67 2e 6f 6b  s();.  if( !g.ok
6930: 53 65 74 75 70 20 29 7b 0a 20 20 20 20 6c 6f 67  Setup ){.    log
6940: 69 6e 5f 6e 65 65 64 65 64 28 29 3b 0a 20 20 7d  in_needed();.  }
6950: 0a 20 20 64 62 5f 62 65 67 69 6e 5f 74 72 61 6e  .  db_begin_tran
6960: 73 61 63 74 69 6f 6e 28 29 3b 0a 20 20 69 66 28  saction();.  if(
6970: 20 50 28 22 63 6c 65 61 72 22 29 21 3d 30 20 29   P("clear")!=0 )
6980: 7b 0a 20 20 20 20 64 62 5f 6d 75 6c 74 69 5f 65  {.    db_multi_e
6990: 78 65 63 28 22 44 45 4c 45 54 45 20 46 52 4f 4d  xec("DELETE FROM
69a0: 20 63 6f 6e 66 69 67 20 57 48 45 52 45 20 6e 61   config WHERE na
69b0: 6d 65 3d 27 66 6f 6f 74 65 72 27 22 29 3b 0a 20  me='footer'");. 
69c0: 20 20 20 63 67 69 5f 72 65 70 6c 61 63 65 5f 70     cgi_replace_p
69d0: 61 72 61 6d 65 74 65 72 28 22 66 6f 6f 74 65 72  arameter("footer
69e0: 22 2c 20 7a 44 65 66 61 75 6c 74 46 6f 6f 74 65  ", zDefaultFoote
69f0: 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  r);.  }else{.   
6a00: 20 74 65 78 74 61 72 65 61 5f 61 74 74 72 69 62   textarea_attrib
6a10: 75 74 65 28 30 2c 20 30 2c 20 30 2c 20 22 66 6f  ute(0, 0, 0, "fo
6a20: 6f 74 65 72 22 2c 20 22 66 6f 6f 74 65 72 22 2c  oter", "footer",
6a30: 20 7a 44 65 66 61 75 6c 74 46 6f 6f 74 65 72 29   zDefaultFooter)
6a40: 3b 0a 20 20 7d 0a 20 20 73 74 79 6c 65 5f 68 65  ;.  }.  style_he
6a50: 61 64 65 72 28 22 45 64 69 74 20 50 61 67 65 20  ader("Edit Page 
6a60: 46 6f 6f 74 65 72 22 29 3b 0a 20 20 40 20 3c 66  Footer");.  @ <f
6a70: 6f 72 6d 20 61 63 74 69 6f 6e 3d 22 25 73 28 67  orm action="%s(g
6a80: 2e 7a 42 61 73 65 55 52 4c 29 2f 73 65 74 75 70  .zBaseURL)/setup
6a90: 5f 66 6f 6f 74 65 72 22 20 6d 65 74 68 6f 64 3d  _footer" method=
6aa0: 22 50 4f 53 54 22 3e 0a 20 20 40 20 3c 70 3e 45  "POST">.  @ <p>E
6ab0: 64 69 74 20 48 54 4d 4c 20 74 65 78 74 20 77 69  dit HTML text wi
6ac0: 74 68 20 65 6d 62 65 64 64 65 64 20 54 48 31 20  th embedded TH1 
6ad0: 28 61 20 54 43 4c 20 64 69 61 6c 65 63 74 29 20  (a TCL dialect) 
6ae0: 74 68 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65  that will be use
6af0: 64 20 74 6f 0a 20 20 40 20 67 65 6e 65 72 61 74  d to.  @ generat
6b00: 65 20 74 68 65 20 65 6e 64 20 6f 66 20 65 76 65  e the end of eve
6b10: 72 79 20 70 61 67 65 2e 3c 2f 70 3e 0a 20 20 74  ry page.</p>.  t
6b20: 65 78 74 61 72 65 61 5f 61 74 74 72 69 62 75 74  extarea_attribut
6b30: 65 28 22 22 2c 20 32 30 2c 20 38 30 2c 20 22 66  e("", 20, 80, "f
6b40: 6f 6f 74 65 72 22 2c 20 22 66 6f 6f 74 65 72 22  ooter", "footer"
6b50: 2c 20 7a 44 65 66 61 75 6c 74 46 6f 6f 74 65 72  , zDefaultFooter
6b60: 29 3b 0a 20 20 40 20 3c 62 72 20 2f 3e 0a 20 20  );.  @ <br />.  
6b70: 40 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 73  @ <input type="s
6b80: 75 62 6d 69 74 22 20 6e 61 6d 65 3d 22 73 75 62  ubmit" name="sub
6b90: 6d 69 74 22 20 76 61 6c 75 65 3d 22 41 70 70 6c  mit" value="Appl
6ba0: 79 20 43 68 61 6e 67 65 73 22 3e 0a 20 20 40 20  y Changes">.  @ 
6bb0: 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 73 75 62  <input type="sub
6bc0: 6d 69 74 22 20 6e 61 6d 65 3d 22 63 6c 65 61 72  mit" name="clear
6bd0: 22 20 76 61 6c 75 65 3d 22 52 65 76 65 72 74 20  " value="Revert 
6be0: 54 6f 20 44 65 66 61 75 6c 74 22 3e 0a 20 20 40  To Default">.  @
6bf0: 20 3c 2f 66 6f 72 6d 3e 0a 20 20 40 20 3c 68 72   </form>.  @ <hr
6c00: 3e 0a 20 20 40 20 48 65 72 65 20 69 73 20 74 68  >.  @ Here is th
6c10: 65 20 64 65 66 61 75 6c 74 20 70 61 67 65 20 66  e default page f
6c20: 6f 6f 74 65 72 3a 0a 20 20 40 20 3c 62 6c 6f 63  ooter:.  @ <bloc
6c30: 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 20 20 40  kquote><pre>.  @
6c40: 20 25 68 28 7a 44 65 66 61 75 6c 74 46 6f 6f 74   %h(zDefaultFoot
6c50: 65 72 29 0a 20 20 40 20 3c 2f 70 72 65 3e 3c 2f  er).  @ </pre></
6c60: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 73 74  blockquote>.  st
6c70: 79 6c 65 5f 66 6f 6f 74 65 72 28 29 3b 0a 20 20  yle_footer();.  
6c80: 64 62 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 69  db_end_transacti
6c90: 6f 6e 28 30 29 3b 0a 7d 0a                       on(0);.}.