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 76 lic.** License v
00b0: 65 72 73 69 6f 6e 20 32 20 61 73 20 70 75 62 6c ersion 2 as publ
00c0: 69 73 68 65 64 20 62 79 20 74 68 65 20 46 72 65 ished by the Fre
00d0: 65 20 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64 e Software Found
00e0: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 ation..**.** Thi
00f0: 73 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69 73 s program is dis
0100: 74 72 69 62 75 74 65 64 20 69 6e 20 74 68 65 20 tributed in the
0110: 68 6f 70 65 20 74 68 61 74 20 69 74 20 77 69 6c hope that it wil
0120: 6c 20 62 65 20 75 73 65 66 75 6c 2c 0a 2a 2a 20 l be useful,.**
0130: 62 75 74 20 57 49 54 48 4f 55 54 20 41 4e 59 20 but WITHOUT ANY
0140: 57 41 52 52 41 4e 54 59 3b 20 77 69 74 68 6f 75 WARRANTY; withou
0150: 74 20 65 76 65 6e 20 74 68 65 20 69 6d 70 6c 69 t even the impli
0160: 65 64 20 77 61 72 72 61 6e 74 79 20 6f 66 0a 2a ed warranty of.*
0170: 2a 20 4d 45 52 43 48 41 4e 54 41 42 49 4c 49 54 * MERCHANTABILIT
0180: 59 20 6f 72 20 46 49 54 4e 45 53 53 20 46 4f 52 Y or FITNESS FOR
0190: 20 41 20 50 41 52 54 49 43 55 4c 41 52 20 50 55 A PARTICULAR PU
01a0: 52 50 4f 53 45 2e 20 20 53 65 65 20 74 68 65 20 RPOSE. See the
01b0: 47 4e 55 0a 2a 2a 20 47 65 6e 65 72 61 6c 20 50 GNU.** General P
01c0: 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 20 66 6f ublic License fo
01d0: 72 20 6d 6f 72 65 20 64 65 74 61 69 6c 73 2e 0a r more details..
01e0: 2a 2a 20 0a 2a 2a 20 59 6f 75 20 73 68 6f 75 6c ** .** You shoul
01f0: 64 20 68 61 76 65 20 72 65 63 65 69 76 65 64 20 d have received
0200: 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 47 4e a copy of the GN
0210: 55 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 U General Public
0220: 0a 2a 2a 20 4c 69 63 65 6e 73 65 20 61 6c 6f 6e .** License alon
0230: 67 20 77 69 74 68 20 74 68 69 73 20 6c 69 62 72 g with this libr
0240: 61 72 79 3b 20 69 66 20 6e 6f 74 2c 20 77 72 69 ary; if not, wri
0250: 74 65 20 74 6f 20 74 68 65 0a 2a 2a 20 46 72 65 te to the.** Fre
0260: 65 20 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64 e Software Found
0270: 61 74 69 6f 6e 2c 20 49 6e 63 2e 2c 20 35 39 20 ation, Inc., 59
0280: 54 65 6d 70 6c 65 20 50 6c 61 63 65 20 2d 20 53 Temple Place - S
0290: 75 69 74 65 20 33 33 30 2c 0a 2a 2a 20 42 6f 73 uite 330,.** Bos
02a0: 74 6f 6e 2c 20 4d 41 20 20 30 32 31 31 31 2d 31 ton, MA 02111-1
02b0: 33 30 37 2c 20 55 53 41 2e 0a 2a 2a 0a 2a 2a 20 307, USA..**.**
02c0: 41 75 74 68 6f 72 20 63 6f 6e 74 61 63 74 20 69 Author contact i
02d0: 6e 66 6f 72 6d 61 74 69 6f 6e 3a 0a 2a 2a 20 20 nformation:.**
02e0: 20 64 72 68 40 68 77 61 63 69 2e 63 6f 6d 0a 2a drh@hwaci.com.*
02f0: 2a 20 20 20 68 74 74 70 3a 2f 2f 77 77 77 2e 68 * http://www.h
0300: 77 61 63 69 2e 63 6f 6d 2f 64 72 68 2f 0a 2a 2a waci.com/drh/.**
0310: 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a .***************
0320: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0330: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0340: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0350: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0360: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65 .**.** This file
0370: 20 63 6f 6e 74 61 69 6e 73 20 63 6f 64 65 20 75 contains code u
0380: 73 65 64 20 72 65 6e 64 65 72 20 61 6e 64 20 63 sed render and c
0390: 6f 6e 74 72 6f 6c 20 74 69 63 6b 65 74 20 65 6e ontrol ticket en
03a0: 74 72 79 0a 2a 2a 20 61 6e 64 20 64 69 73 70 6c try.** and displ
03b0: 61 79 20 70 61 67 65 73 2e 0a 2a 2f 0a 23 69 6e ay pages..*/.#in
03c0: 63 6c 75 64 65 20 22 63 6f 6e 66 69 67 2e 68 22 clude "config.h"
03d0: 0a 23 69 6e 63 6c 75 64 65 20 22 74 6b 74 2e 68 .#include "tkt.h
03e0: 22 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73 65 ".#include <asse
03f0: 72 74 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 rt.h>../*.** The
0400: 20 6c 69 73 74 20 6f 66 20 64 61 74 61 62 61 73 list of databas
0410: 65 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66 e user-defined f
0420: 69 65 6c 64 73 20 69 6e 20 74 68 65 20 54 49 43 ields in the TIC
0430: 4b 45 54 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 KET table..** Th
0440: 65 20 72 65 61 6c 20 74 61 62 6c 65 20 61 6c 73 e real table als
0450: 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 o contains some
0460: 61 64 64 69 74 69 6f 6e 20 66 69 65 6c 64 73 20 addition fields
0470: 66 6f 72 20 69 6e 74 65 72 6e 61 6c 0a 2a 2a 20 for internal.**
0480: 75 73 65 64 2e 20 20 54 68 65 20 69 6e 74 65 72 used. The inter
0490: 6e 61 6c 2d 75 73 65 20 66 69 65 6c 64 73 20 62 nal-use fields b
04a0: 65 67 69 6e 20 77 69 74 68 20 22 74 6b 74 5f 22 egin with "tkt_"
04b0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 ..*/.static int
04c0: 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 73 74 61 74 nField = 0;.stat
04d0: 69 63 20 63 68 61 72 20 2a 2a 61 7a 46 69 65 6c ic char **azFiel
04e0: 64 20 3d 20 30 3b 20 20 20 20 2f 2a 20 4e 61 6d d = 0; /* Nam
04f0: 65 73 20 6f 66 20 64 61 74 61 62 61 73 65 20 66 es of database f
0500: 69 65 6c 64 73 20 2a 2f 0a 73 74 61 74 69 63 20 ields */.static
0510: 63 68 61 72 20 2a 2a 61 7a 56 61 6c 75 65 20 3d char **azValue =
0520: 20 30 3b 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 0; /* Origin
0530: 61 6c 20 76 61 6c 75 65 73 20 2a 2f 0a 73 74 61 al values */.sta
0540: 74 69 63 20 63 68 61 72 20 2a 2a 61 7a 41 70 70 tic char **azApp
0550: 65 6e 64 20 3d 20 30 3b 20 20 20 2f 2a 20 56 61 end = 0; /* Va
0560: 6c 75 65 20 74 6f 20 62 65 20 61 70 70 65 6e 64 lue to be append
0570: 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 ed */../*.** A s
0580: 75 62 73 63 72 69 70 74 20 69 6e 74 65 72 70 72 ubscript interpr
0590: 65 74 65 72 20 75 73 65 64 20 66 6f 72 20 70 72 eter used for pr
05a0: 6f 63 65 73 73 69 6e 67 20 54 69 63 6b 65 74 73 ocessing Tickets
05b0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 73 74 72 75 ..*/.static stru
05c0: 63 74 20 53 75 62 73 63 72 69 70 74 20 2a 70 49 ct Subscript *pI
05d0: 6e 74 65 72 70 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a nterp = 0;../*.*
05e0: 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f 20 65 6e * Compare two en
05f0: 74 72 69 65 73 20 69 6e 20 61 7a 46 69 65 6c 64 tries in azField
0600: 20 66 6f 72 20 73 6f 72 74 69 6e 67 20 70 75 72 for sorting pur
0610: 70 6f 73 65 73 0a 2a 2f 0a 73 74 61 74 69 63 20 poses.*/.static
0620: 69 6e 74 20 6e 61 6d 65 43 6d 70 72 28 63 6f 6e int nameCmpr(con
0630: 73 74 20 76 6f 69 64 20 2a 61 2c 20 63 6f 6e 73 st void *a, cons
0640: 74 20 76 6f 69 64 20 2a 62 29 7b 0a 20 20 72 65 t void *b){. re
0650: 74 75 72 6e 20 73 74 72 63 6d 70 28 2a 28 63 68 turn strcmp(*(ch
0660: 61 72 2a 2a 29 61 2c 20 2a 28 63 68 61 72 2a 2a ar**)a, *(char**
0670: 29 62 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 62 )b);.}../*.** Ob
0680: 74 61 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 61 tain a list of a
0690: 6c 6c 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 ll fields of the
06a0: 20 54 49 43 4b 45 54 20 74 61 62 6c 65 2e 20 20 TICKET table.
06b0: 50 75 74 20 74 68 65 6d 20 0a 2a 2a 20 69 6e 20 Put them .** in
06c0: 73 6f 72 74 65 64 20 6f 72 64 65 72 2e 0a 2a 2f sorted order..*/
06d0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 67 65 74 .static void get
06e0: 41 6c 6c 54 69 63 6b 65 74 46 69 65 6c 64 73 28 AllTicketFields(
06f0: 76 6f 69 64 29 7b 0a 20 20 53 74 6d 74 20 71 3b void){. Stmt q;
0700: 0a 20 20 69 66 28 20 6e 46 69 65 6c 64 3e 30 20 . if( nField>0
0710: 29 20 72 65 74 75 72 6e 3b 0a 20 20 64 62 5f 70 ) return;. db_p
0720: 72 65 70 61 72 65 28 26 71 2c 20 22 50 52 41 47 repare(&q, "PRAG
0730: 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28 74 69 MA table_info(ti
0740: 63 6b 65 74 29 22 29 3b 0a 20 20 77 68 69 6c 65 cket)");. while
0750: 28 20 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 ( db_step(&q)==S
0760: 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 QLITE_ROW ){.
0770: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 const char *zFi
0780: 65 6c 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f eld = db_column_
0790: 74 65 78 74 28 26 71 2c 20 31 29 3b 0a 20 20 20 text(&q, 1);.
07a0: 20 69 66 28 20 73 74 72 6e 63 6d 70 28 7a 46 69 if( strncmp(zFi
07b0: 65 6c 64 2c 22 74 6b 74 5f 22 2c 34 29 3d 3d 30 eld,"tkt_",4)==0
07c0: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 ) continue;.
07d0: 20 69 66 28 20 6e 46 69 65 6c 64 25 31 30 3d 3d if( nField%10==
07e0: 30 20 29 7b 0a 20 20 20 20 20 20 61 7a 46 69 65 0 ){. azFie
07f0: 6c 64 20 3d 20 72 65 61 6c 6c 6f 63 28 61 7a 46 ld = realloc(azF
0800: 69 65 6c 64 2c 20 73 69 7a 65 6f 66 28 61 7a 46 ield, sizeof(azF
0810: 69 65 6c 64 29 2a 33 2a 28 6e 46 69 65 6c 64 2b ield)*3*(nField+
0820: 31 30 29 20 29 3b 0a 20 20 20 20 20 20 69 66 28 10) );. if(
0830: 20 61 7a 46 69 65 6c 64 3d 3d 30 20 29 7b 0a 20 azField==0 ){.
0840: 20 20 20 20 20 20 20 66 6f 73 73 69 6c 5f 66 61 fossil_fa
0850: 74 61 6c 28 22 6f 75 74 20 6f 66 20 6d 65 6d 6f tal("out of memo
0860: 72 79 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 ry");. }.
0870: 20 20 7d 0a 20 20 20 20 61 7a 46 69 65 6c 64 5b }. azField[
0880: 6e 46 69 65 6c 64 5d 20 3d 20 6d 70 72 69 6e 74 nField] = mprint
0890: 66 28 22 25 73 22 2c 20 7a 46 69 65 6c 64 29 3b f("%s", zField);
08a0: 0a 20 20 20 20 6e 46 69 65 6c 64 2b 2b 3b 0a 20 . nField++;.
08b0: 20 7d 0a 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 }. db_finalize
08c0: 28 26 71 29 3b 0a 20 20 71 73 6f 72 74 28 61 7a (&q);. qsort(az
08d0: 46 69 65 6c 64 2c 20 6e 46 69 65 6c 64 2c 20 73 Field, nField, s
08e0: 69 7a 65 6f 66 28 61 7a 46 69 65 6c 64 5b 30 5d izeof(azField[0]
08f0: 29 2c 20 6e 61 6d 65 43 6d 70 72 29 3b 0a 20 20 ), nameCmpr);.
0900: 61 7a 41 70 70 65 6e 64 20 3d 20 26 61 7a 46 69 azAppend = &azFi
0910: 65 6c 64 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6d eld[nField];. m
0920: 65 6d 73 65 74 28 61 7a 41 70 70 65 6e 64 2c 20 emset(azAppend,
0930: 30 2c 20 73 69 7a 65 6f 66 28 61 7a 41 70 70 65 0, sizeof(azAppe
0940: 6e 64 5b 30 5d 29 2a 6e 46 69 65 6c 64 2a 32 29 nd[0])*nField*2)
0950: 3b 0a 20 20 61 7a 56 61 6c 75 65 20 3d 20 26 61 ;. azValue = &a
0960: 7a 41 70 70 65 6e 64 5b 6e 46 69 65 6c 64 5d 3b zAppend[nField];
0970: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e .}../*.** Return
0980: 20 74 72 75 65 20 69 66 20 7a 46 69 65 6c 64 20 true if zField
0990: 69 73 20 61 20 66 69 65 6c 64 20 77 69 74 68 69 is a field withi
09a0: 6e 20 74 68 65 20 54 49 43 4b 45 54 20 74 61 62 n the TICKET tab
09b0: 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e le..*/.static in
09c0: 74 20 69 73 54 69 63 6b 65 74 46 69 65 6c 64 28 t isTicketField(
09d0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 65 const char *zFie
09e0: 6c 64 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 ld){. int i;.
09f0: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 46 69 65 6c for(i=0; i<nFiel
0a00: 64 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 d; i++){. if(
0a10: 20 73 74 72 63 6d 70 28 61 7a 46 69 65 6c 64 5b strcmp(azField[
0a20: 69 5d 2c 20 7a 46 69 65 6c 64 29 3d 3d 30 20 29 i], zField)==0 )
0a30: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 return 1;. }.
0a40: 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a return 0;.}../*
0a50: 0a 2a 2a 20 51 75 65 72 79 20 74 68 65 20 64 61 .** Query the da
0a60: 74 61 62 61 73 65 20 66 6f 72 20 61 6c 6c 20 54 tabase for all T
0a70: 49 43 4b 45 54 20 66 69 65 6c 64 73 20 66 6f 72 ICKET fields for
0a80: 20 74 68 65 20 73 70 65 63 69 66 69 63 0a 2a 2a the specific.**
0a90: 20 74 69 63 6b 65 74 20 77 68 6f 73 65 20 6e 61 ticket whose na
0aa0: 6d 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 74 me is given by t
0ab0: 68 65 20 22 6e 61 6d 65 22 20 43 47 49 20 70 61 he "name" CGI pa
0ac0: 72 61 6d 65 74 65 72 2e 0a 2a 2a 20 4c 6f 61 64 rameter..** Load
0ad0: 20 74 68 65 20 76 61 6c 75 65 73 20 66 6f 72 20 the values for
0ae0: 61 6c 6c 20 66 69 65 6c 64 73 20 69 6e 74 6f 20 all fields into
0af0: 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e the interpreter.
0b00: 0a 2a 2a 0a 2a 2a 20 4f 6e 6c 79 20 6c 6f 61 64 .**.** Only load
0b10: 20 74 68 6f 73 65 20 66 69 65 6c 64 73 20 77 68 those fields wh
0b20: 69 63 68 20 64 6f 20 6e 6f 74 20 61 6c 72 65 61 ich do not alrea
0b30: 64 79 20 65 78 69 73 74 20 61 73 0a 2a 2a 20 76 dy exist as.** v
0b40: 61 72 69 61 62 6c 65 73 2e 0a 2a 2f 0a 73 74 61 ariables..*/.sta
0b50: 74 69 63 20 76 6f 69 64 20 69 6e 69 74 69 61 6c tic void initial
0b60: 69 7a 65 56 61 72 69 61 62 6c 65 73 46 72 6f 6d izeVariablesFrom
0b70: 44 62 28 76 6f 69 64 29 7b 0a 20 20 63 6f 6e 73 Db(void){. cons
0b80: 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 t char *zName;.
0b90: 20 53 74 6d 74 20 71 3b 0a 20 20 69 6e 74 20 69 Stmt q;. int i
0ba0: 2c 20 6e 2c 20 73 69 7a 65 2c 20 6a 3b 0a 0a 20 , n, size, j;..
0bb0: 20 7a 4e 61 6d 65 20 3d 20 50 44 28 22 6e 61 6d zName = PD("nam
0bc0: 65 22 2c 22 22 29 3b 0a 20 20 64 62 5f 70 72 65 e","");. db_pre
0bd0: 70 61 72 65 28 26 71 2c 20 22 53 45 4c 45 43 54 pare(&q, "SELECT
0be0: 20 2a 20 46 52 4f 4d 20 74 69 63 6b 65 74 20 57 * FROM ticket W
0bf0: 48 45 52 45 20 74 6b 74 5f 75 75 69 64 20 47 4c HERE tkt_uuid GL
0c00: 4f 42 20 27 25 71 2a 27 22 2c 20 7a 4e 61 6d 65 OB '%q*'", zName
0c10: 29 3b 0a 20 20 69 66 28 20 64 62 5f 73 74 65 70 );. if( db_step
0c20: 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 (&q)==SQLITE_ROW
0c30: 20 29 7b 0a 20 20 20 20 6e 20 3d 20 64 62 5f 63 ){. n = db_c
0c40: 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 26 71 29 3b olumn_count(&q);
0c50: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c . for(i=0; i<
0c60: 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 n; i++){. c
0c70: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 56 61 6c 20 onst char *zVal
0c80: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 = db_column_text
0c90: 28 26 71 2c 20 69 29 3b 0a 20 20 20 20 20 20 63 (&q, i);. c
0ca0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 onst char *zName
0cb0: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d = db_column_nam
0cc0: 65 28 26 71 2c 20 69 29 3b 0a 20 20 20 20 20 20 e(&q, i);.
0cd0: 69 66 28 20 7a 56 61 6c 3d 3d 30 20 29 20 7a 56 if( zVal==0 ) zV
0ce0: 61 6c 20 3d 20 22 22 3b 0a 20 20 20 20 20 20 66 al = "";. f
0cf0: 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 46 69 65 6c 64 or(j=0; j<nField
0d00: 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 ; j++){.
0d10: 69 66 28 20 73 74 72 63 6d 70 28 61 7a 46 69 65 if( strcmp(azFie
0d20: 6c 64 5b 6a 5d 2c 7a 4e 61 6d 65 29 3d 3d 30 20 ld[j],zName)==0
0d30: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 7a 56 ){. azV
0d40: 61 6c 75 65 5b 6a 5d 20 3d 20 6d 70 72 69 6e 74 alue[j] = mprint
0d50: 66 28 22 25 73 22 2c 20 7a 56 61 6c 29 3b 0a 20 f("%s", zVal);.
0d60: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a break;.
0d70: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 }.
0d80: 7d 0a 20 20 20 20 20 20 69 66 28 20 53 62 53 5f }. if( SbS_
0d90: 46 65 74 63 68 28 70 49 6e 74 65 72 70 2c 20 7a Fetch(pInterp, z
0da0: 4e 61 6d 65 2c 20 2d 31 2c 20 26 73 69 7a 65 29 Name, -1, &size)
0db0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 53 ==0 ){. S
0dc0: 62 53 5f 53 74 6f 72 65 28 70 49 6e 74 65 72 70 bS_Store(pInterp
0dd0: 2c 20 64 62 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 , db_column_name
0de0: 28 26 71 2c 69 29 2c 20 7a 56 61 6c 2c 20 31 29 (&q,i), zVal, 1)
0df0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a ;. }. }.
0e00: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 64 62 5f }else{. db_
0e10: 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 finalize(&q);.
0e20: 20 20 64 62 5f 70 72 65 70 61 72 65 28 26 71 2c db_prepare(&q,
0e30: 20 22 50 52 41 47 4d 41 20 74 61 62 6c 65 5f 69 "PRAGMA table_i
0e40: 6e 66 6f 28 74 69 63 6b 65 74 29 22 29 3b 0a 20 nfo(ticket)");.
0e50: 20 20 20 77 68 69 6c 65 28 20 64 62 5f 73 74 65 while( db_ste
0e60: 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f p(&q)==SQLITE_RO
0e70: 57 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 W ){. const
0e80: 20 63 68 61 72 20 2a 7a 46 69 65 6c 64 20 3d 20 char *zField =
0e90: 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 db_column_text(&
0ea0: 71 2c 20 31 29 3b 0a 20 20 20 20 20 20 69 66 28 q, 1);. if(
0eb0: 20 53 62 53 5f 46 65 74 63 68 28 70 49 6e 74 65 SbS_Fetch(pInte
0ec0: 72 70 2c 20 7a 46 69 65 6c 64 2c 20 2d 31 2c 20 rp, zField, -1,
0ed0: 26 73 69 7a 65 29 3d 3d 30 20 29 7b 0a 20 20 20 &size)==0 ){.
0ee0: 20 20 20 20 20 53 62 53 5f 53 74 6f 72 65 28 70 SbS_Store(p
0ef0: 49 6e 74 65 72 70 2c 20 7a 46 69 65 6c 64 2c 20 Interp, zField,
0f00: 22 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a "", 0);. }.
0f10: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 64 62 5f 66 }. }. db_f
0f20: 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 7d 0a 0a inalize(&q);.}..
0f30: 2f 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 61 /*.** Transfer a
0f40: 6c 6c 20 43 47 49 20 70 61 72 61 6d 65 74 65 72 ll CGI parameter
0f50: 73 20 74 6f 20 76 61 72 69 61 62 6c 65 73 20 69 s to variables i
0f60: 6e 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 n the interprete
0f70: 72 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 r..*/.static voi
0f80: 64 20 69 6e 69 74 69 61 6c 69 7a 65 56 61 72 69 d initializeVari
0f90: 61 62 6c 65 73 46 72 6f 6d 43 47 49 28 76 6f 69 ablesFromCGI(voi
0fa0: 64 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63 d){. int i;. c
0fb0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 0a 0a 20 onst char *z;..
0fc0: 20 66 6f 72 28 69 3d 30 3b 20 28 7a 20 3d 20 63 for(i=0; (z = c
0fd0: 67 69 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d gi_parameter_nam
0fe0: 65 28 69 29 29 21 3d 30 3b 20 69 2b 2b 29 7b 0a e(i))!=0; i++){.
0ff0: 20 20 20 20 53 62 53 5f 53 74 6f 72 65 28 70 49 SbS_Store(pI
1000: 6e 74 65 72 70 2c 20 7a 2c 20 50 28 7a 29 2c 20 nterp, z, P(z),
1010: 30 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 0);. }.}../*.**
1020: 20 52 65 62 75 69 6c 64 20 61 6c 6c 20 74 69 63 Rebuild all tic
1030: 6b 65 74 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 kets named in th
1040: 65 20 5f 70 65 6e 64 69 6e 67 5f 74 69 63 6b 65 e _pending_ticke
1050: 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 t table..**.** T
1060: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 63 his routine is c
1070: 61 6c 6c 65 64 20 6a 75 73 74 20 70 72 69 6f 72 alled just prior
1080: 20 74 6f 20 63 6f 6d 6d 69 74 20 61 66 74 65 72 to commit after
1090: 20 6e 65 77 0a 2a 2a 20 6f 75 74 2d 6f 66 2d 73 new.** out-of-s
10a0: 65 71 75 65 6e 63 65 20 74 69 63 6b 65 74 20 63 equence ticket c
10b0: 68 61 6e 67 65 73 20 68 61 76 65 20 62 65 65 6e hanges have been
10c0: 20 61 64 64 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 added..*/.stati
10d0: 63 20 69 6e 74 20 74 69 63 6b 65 74 5f 72 65 62 c int ticket_reb
10e0: 75 69 6c 64 5f 61 74 5f 63 6f 6d 6d 69 74 28 76 uild_at_commit(v
10f0: 6f 69 64 29 7b 0a 20 20 53 74 6d 74 20 71 3b 0a oid){. Stmt q;.
1100: 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 db_multi_exec(
1110: 0a 20 20 20 20 22 44 45 4c 45 54 45 20 46 52 4f . "DELETE FRO
1120: 4d 20 74 69 63 6b 65 74 20 57 48 45 52 45 20 74 M ticket WHERE t
1130: 6b 74 5f 75 75 69 64 20 49 4e 20 5f 70 65 6e 64 kt_uuid IN _pend
1140: 69 6e 67 5f 74 69 63 6b 65 74 22 0a 20 20 29 3b ing_ticket". );
1150: 0a 20 20 64 62 5f 70 72 65 70 61 72 65 28 26 71 . db_prepare(&q
1160: 2c 20 22 53 45 4c 45 43 54 20 75 75 69 64 20 46 , "SELECT uuid F
1170: 52 4f 4d 20 5f 70 65 6e 64 69 6e 67 5f 74 69 63 ROM _pending_tic
1180: 6b 65 74 22 29 3b 0a 20 20 77 68 69 6c 65 28 20 ket");. while(
1190: 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 4c db_step(&q)==SQL
11a0: 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 63 ITE_ROW ){. c
11b0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 55 75 69 64 onst char *zUuid
11c0: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 = db_column_tex
11d0: 74 28 26 71 2c 20 30 29 3b 0a 20 20 20 20 74 69 t(&q, 0);. ti
11e0: 63 6b 65 74 5f 72 65 62 75 69 6c 64 5f 65 6e 74 cket_rebuild_ent
11f0: 72 79 28 7a 55 75 69 64 29 3b 0a 20 20 7d 0a 20 ry(zUuid);. }.
1200: 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 0a db_multi_exec(.
1210: 20 20 20 20 22 44 45 4c 45 54 45 20 46 52 4f 4d "DELETE FROM
1220: 20 5f 70 65 6e 64 69 6e 67 5f 74 69 63 6b 65 74 _pending_ticket
1230: 22 0a 20 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 ". );. return
1240: 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 70 64 61 0;.}../*.** Upda
1250: 74 65 20 61 6e 20 65 6e 74 72 79 20 6f 66 20 74 te an entry of t
1260: 68 65 20 54 49 43 4b 45 54 20 74 61 62 6c 65 20 he TICKET table
1270: 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 according to the
1280: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 information.**
1290: 69 6e 20 74 68 65 20 63 6f 6e 74 72 6f 6c 20 66 in the control f
12a0: 69 6c 65 20 67 69 76 65 6e 20 69 6e 20 70 2e 20 ile given in p.
12b0: 20 41 74 74 65 6d 70 74 20 74 6f 20 63 72 65 61 Attempt to crea
12c0: 74 65 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 te the appropria
12d0: 74 65 0a 2a 2a 20 54 49 43 4b 45 54 20 74 61 62 te.** TICKET tab
12e0: 6c 65 20 65 6e 74 72 79 20 69 66 20 63 72 65 61 le entry if crea
12f0: 74 65 46 6c 61 67 20 69 73 20 74 72 75 65 2e 20 teFlag is true.
1300: 20 49 66 20 63 72 65 61 74 65 46 6c 61 67 20 69 If createFlag i
1310: 73 20 66 61 6c 73 65 2c 0a 2a 2a 20 74 68 61 74 s false,.** that
1320: 20 6d 65 61 6e 73 20 77 65 20 61 6c 72 65 61 64 means we alread
1330: 79 20 6b 6e 6f 77 20 74 68 65 20 65 6e 74 72 79 y know the entry
1340: 20 65 78 69 73 74 73 20 61 6e 64 20 73 6f 20 77 exists and so w
1350: 65 20 63 61 6e 20 73 61 76 65 20 74 68 65 0a 2a e can save the.*
1360: 2a 20 77 6f 72 6b 20 6f 66 20 74 72 79 69 6e 67 * work of trying
1370: 20 74 6f 20 63 72 65 61 74 65 20 69 74 2e 0a 2a to create it..*
1380: 2f 0a 76 6f 69 64 20 74 69 63 6b 65 74 5f 69 6e /.void ticket_in
1390: 73 65 72 74 28 4d 61 6e 69 66 65 73 74 20 2a 70 sert(Manifest *p
13a0: 2c 20 69 6e 74 20 63 72 65 61 74 65 46 6c 61 67 , int createFlag
13b0: 2c 20 69 6e 74 20 63 68 65 63 6b 54 69 6d 65 29 , int checkTime)
13c0: 7b 0a 20 20 42 6c 6f 62 20 73 71 6c 3b 0a 20 20 {. Blob sql;.
13d0: 53 74 6d 74 20 71 3b 0a 20 20 69 6e 74 20 69 3b Stmt q;. int i;
13e0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a . const char *z
13f0: 53 65 70 3b 0a 0a 20 20 67 65 74 41 6c 6c 54 69 Sep;.. getAllTi
1400: 63 6b 65 74 46 69 65 6c 64 73 28 29 3b 0a 20 20 cketFields();.
1410: 69 66 28 20 63 72 65 61 74 65 46 6c 61 67 20 29 if( createFlag )
1420: 7b 20 20 0a 20 20 20 20 64 62 5f 6d 75 6c 74 69 { . db_multi
1430: 5f 65 78 65 63 28 22 49 4e 53 45 52 54 20 4f 52 _exec("INSERT OR
1440: 20 49 47 4e 4f 52 45 20 49 4e 54 4f 20 74 69 63 IGNORE INTO tic
1450: 6b 65 74 28 74 6b 74 5f 75 75 69 64 2c 20 74 6b ket(tkt_uuid, tk
1460: 74 5f 6d 74 69 6d 65 29 20 22 0a 20 20 20 20 20 t_mtime) ".
1470: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 56 41 "VA
1480: 4c 55 45 53 28 25 51 2c 20 30 29 22 2c 20 70 2d LUES(%Q, 0)", p-
1490: 3e 7a 54 69 63 6b 65 74 55 75 69 64 29 3b 0a 20 >zTicketUuid);.
14a0: 20 7d 0a 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 }. blob_zero(&
14b0: 73 71 6c 29 3b 0a 20 20 62 6c 6f 62 5f 61 70 70 sql);. blob_app
14c0: 65 6e 64 66 28 26 73 71 6c 2c 20 22 55 50 44 41 endf(&sql, "UPDA
14d0: 54 45 20 74 69 63 6b 65 74 20 53 45 54 20 74 6b TE ticket SET tk
14e0: 74 5f 6d 74 69 6d 65 3d 3a 6d 74 69 6d 65 22 29 t_mtime=:mtime")
14f0: 3b 0a 20 20 7a 53 65 70 20 3d 20 22 53 45 54 22 ;. zSep = "SET"
1500: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 ;. for(i=0; i<p
1510: 2d 3e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 7b 0a ->nField; i++){.
1520: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a const char *
1530: 7a 4e 61 6d 65 20 3d 20 70 2d 3e 61 46 69 65 6c zName = p->aFiel
1540: 64 5b 69 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 d[i].zName;.
1550: 69 66 28 20 7a 4e 61 6d 65 5b 30 5d 3d 3d 27 2b if( zName[0]=='+
1560: 27 20 29 7b 0a 20 20 20 20 20 20 7a 4e 61 6d 65 ' ){. zName
1570: 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28 20 21 69 ++;. if( !i
1580: 73 54 69 63 6b 65 74 46 69 65 6c 64 28 7a 4e 61 sTicketField(zNa
1590: 6d 65 29 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a me) ) continue;.
15a0: 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e blob_appen
15b0: 64 66 28 26 73 71 6c 2c 22 2c 20 25 73 3d 25 73 df(&sql,", %s=%s
15c0: 20 7c 7c 20 25 51 22 2c 20 7a 4e 61 6d 65 2c 20 || %Q", zName,
15d0: 7a 4e 61 6d 65 2c 20 70 2d 3e 61 46 69 65 6c 64 zName, p->aField
15e0: 5b 69 5d 2e 7a 56 61 6c 75 65 29 3b 0a 20 20 20 [i].zValue);.
15f0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 }else{. if
1600: 28 20 21 69 73 54 69 63 6b 65 74 46 69 65 6c 64 ( !isTicketField
1610: 28 7a 4e 61 6d 65 29 20 29 20 63 6f 6e 74 69 6e (zName) ) contin
1620: 75 65 3b 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61 ue;. blob_a
1630: 70 70 65 6e 64 66 28 26 73 71 6c 2c 22 2c 20 25 ppendf(&sql,", %
1640: 73 3d 25 51 22 2c 20 7a 4e 61 6d 65 2c 20 70 2d s=%Q", zName, p-
1650: 3e 61 46 69 65 6c 64 5b 69 5d 2e 7a 56 61 6c 75 >aField[i].zValu
1660: 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 e);. }. }.
1670: 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 73 71 blob_appendf(&sq
1680: 6c 2c 20 22 20 57 48 45 52 45 20 74 6b 74 5f 75 l, " WHERE tkt_u
1690: 75 69 64 3d 27 25 73 27 20 41 4e 44 20 74 6b 74 uid='%s' AND tkt
16a0: 5f 6d 74 69 6d 65 3c 3a 6d 74 69 6d 65 22 2c 0a _mtime<:mtime",.
16b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16c0: 20 20 20 20 20 70 2d 3e 7a 54 69 63 6b 65 74 55 p->zTicketU
16d0: 75 69 64 29 3b 0a 20 20 64 62 5f 70 72 65 70 61 uid);. db_prepa
16e0: 72 65 28 26 71 2c 20 22 25 73 22 2c 20 62 6c 6f re(&q, "%s", blo
16f0: 62 5f 73 74 72 28 26 73 71 6c 29 29 3b 0a 20 20 b_str(&sql));.
1700: 64 62 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 26 db_bind_double(&
1710: 71 2c 20 22 3a 6d 74 69 6d 65 22 2c 20 70 2d 3e q, ":mtime", p->
1720: 72 44 61 74 65 29 3b 0a 20 20 64 62 5f 73 74 65 rDate);. db_ste
1730: 70 28 26 71 29 3b 0a 20 20 64 62 5f 66 69 6e 61 p(&q);. db_fina
1740: 6c 69 7a 65 28 26 71 29 3b 0a 20 20 69 66 28 20 lize(&q);. if(
1750: 63 68 65 63 6b 54 69 6d 65 20 26 26 20 64 62 5f checkTime && db_
1760: 63 68 61 6e 67 65 73 28 29 3d 3d 30 20 29 7b 0a changes()==0 ){.
1770: 20 20 20 20 73 74 61 74 69 63 20 69 6e 74 20 69 static int i
1780: 73 49 6e 69 74 20 3d 20 30 3b 0a 20 20 20 20 69 sInit = 0;. i
1790: 66 28 20 21 69 73 49 6e 69 74 20 29 7b 0a 20 20 f( !isInit ){.
17a0: 20 20 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 db_multi_exe
17b0: 63 28 22 43 52 45 41 54 45 20 54 45 4d 50 20 54 c("CREATE TEMP T
17c0: 41 42 4c 45 20 5f 70 65 6e 64 69 6e 67 5f 74 69 ABLE _pending_ti
17d0: 63 6b 65 74 28 75 75 69 64 20 54 45 58 54 20 55 cket(uuid TEXT U
17e0: 4e 49 51 55 45 29 22 29 3b 0a 20 20 20 20 20 20 NIQUE)");.
17f0: 64 62 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 74 db_commit_hook(t
1800: 69 63 6b 65 74 5f 72 65 62 75 69 6c 64 5f 61 74 icket_rebuild_at
1810: 5f 63 6f 6d 6d 69 74 2c 20 31 29 3b 0a 20 20 20 _commit, 1);.
1820: 20 20 20 69 73 49 6e 69 74 20 3d 20 31 3b 0a 20 isInit = 1;.
1830: 20 20 20 7d 0a 20 20 20 20 64 62 5f 6d 75 6c 74 }. db_mult
1840: 69 5f 65 78 65 63 28 22 49 4e 53 45 52 54 20 4f i_exec("INSERT O
1850: 52 20 49 47 4e 4f 52 45 20 49 4e 54 4f 20 5f 70 R IGNORE INTO _p
1860: 65 6e 64 69 6e 67 5f 74 69 63 6b 65 74 22 0a 20 ending_ticket".
1870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1880: 20 22 56 41 4c 55 45 53 28 25 51 29 22 2c 20 70 "VALUES(%Q)", p
1890: 2d 3e 7a 54 69 63 6b 65 74 55 75 69 64 29 3b 0a ->zTicketUuid);.
18a0: 20 20 7d 0a 20 20 62 6c 6f 62 5f 72 65 73 65 74 }. blob_reset
18b0: 28 26 73 71 6c 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a (&sql);.}../*.**
18c0: 20 52 65 62 75 69 6c 64 20 61 6e 20 65 6e 74 69 Rebuild an enti
18d0: 72 65 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 re entry in the
18e0: 54 49 43 4b 45 54 20 74 61 62 6c 65 0a 2a 2f 0a TICKET table.*/.
18f0: 76 6f 69 64 20 74 69 63 6b 65 74 5f 72 65 62 75 void ticket_rebu
1900: 69 6c 64 5f 65 6e 74 72 79 28 63 6f 6e 73 74 20 ild_entry(const
1910: 63 68 61 72 20 2a 7a 54 6b 74 55 75 69 64 29 7b char *zTktUuid){
1920: 0a 20 20 63 68 61 72 20 2a 7a 54 61 67 20 3d 20 . char *zTag =
1930: 6d 70 72 69 6e 74 66 28 22 74 6b 74 2d 25 73 22 mprintf("tkt-%s"
1940: 2c 20 7a 54 6b 74 55 75 69 64 29 3b 0a 20 20 69 , zTktUuid);. i
1950: 6e 74 20 74 61 67 69 64 20 3d 20 74 61 67 5f 66 nt tagid = tag_f
1960: 69 6e 64 69 64 28 7a 54 61 67 2c 20 31 29 3b 0a indid(zTag, 1);.
1970: 20 20 53 74 6d 74 20 71 3b 0a 20 20 4d 61 6e 69 Stmt q;. Mani
1980: 66 65 73 74 20 6d 61 6e 69 66 65 73 74 3b 0a 20 fest manifest;.
1990: 20 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 3b 0a 20 Blob content;.
19a0: 20 69 6e 74 20 63 72 65 61 74 65 46 6c 61 67 20 int createFlag
19b0: 3d 20 31 3b 0a 20 20 0a 20 20 64 62 5f 6d 75 6c = 1;. . db_mul
19c0: 74 69 5f 65 78 65 63 28 0a 20 20 20 20 20 22 44 ti_exec(. "D
19d0: 45 4c 45 54 45 20 46 52 4f 4d 20 74 69 63 6b 65 ELETE FROM ticke
19e0: 74 20 57 48 45 52 45 20 74 6b 74 5f 75 75 69 64 t WHERE tkt_uuid
19f0: 3d 25 51 22 2c 20 7a 54 6b 74 55 75 69 64 0a 20 =%Q", zTktUuid.
1a00: 20 29 3b 0a 20 20 64 62 5f 70 72 65 70 61 72 65 );. db_prepare
1a10: 28 26 71 2c 20 22 53 45 4c 45 43 54 20 72 69 64 (&q, "SELECT rid
1a20: 20 46 52 4f 4d 20 74 61 67 78 72 65 66 20 57 48 FROM tagxref WH
1a30: 45 52 45 20 74 61 67 69 64 3d 25 64 20 4f 52 44 ERE tagid=%d ORD
1a40: 45 52 20 42 59 20 6d 74 69 6d 65 22 2c 74 61 67 ER BY mtime",tag
1a50: 69 64 29 3b 0a 20 20 77 68 69 6c 65 28 20 64 62 id);. while( db
1a60: 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 _step(&q)==SQLIT
1a70: 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 69 6e 74 E_ROW ){. int
1a80: 20 72 69 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e rid = db_column
1a90: 5f 69 6e 74 28 26 71 2c 20 30 29 3b 0a 20 20 20 _int(&q, 0);.
1aa0: 20 63 6f 6e 74 65 6e 74 5f 67 65 74 28 72 69 64 content_get(rid
1ab0: 2c 20 26 63 6f 6e 74 65 6e 74 29 3b 0a 20 20 20 , &content);.
1ac0: 20 6d 61 6e 69 66 65 73 74 5f 70 61 72 73 65 28 manifest_parse(
1ad0: 26 6d 61 6e 69 66 65 73 74 2c 20 26 63 6f 6e 74 &manifest, &cont
1ae0: 65 6e 74 29 3b 0a 20 20 20 20 74 69 63 6b 65 74 ent);. ticket
1af0: 5f 69 6e 73 65 72 74 28 26 6d 61 6e 69 66 65 73 _insert(&manifes
1b00: 74 2c 20 63 72 65 61 74 65 46 6c 61 67 2c 20 30 t, createFlag, 0
1b10: 29 3b 0a 20 20 20 20 6d 61 6e 69 66 65 73 74 5f );. manifest_
1b20: 63 6c 65 61 72 28 26 6d 61 6e 69 66 65 73 74 29 clear(&manifest)
1b30: 3b 0a 20 20 20 20 63 72 65 61 74 65 46 6c 61 67 ;. createFlag
1b40: 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 64 62 5f 66 = 0;. }. db_f
1b50: 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 7d 0a 0a inalize(&q);.}..
1b60: 2f 2a 0a 2a 2a 20 43 72 65 61 74 65 20 74 68 65 /*.** Create the
1b70: 20 73 75 62 73 63 72 69 70 74 20 69 6e 74 65 72 subscript inter
1b80: 70 72 65 74 65 72 20 61 6e 64 20 6c 6f 61 64 20 preter and load
1b90: 74 68 65 20 74 69 63 6b 65 74 20 63 6f 6e 66 69 the ticket confi
1ba0: 67 75 72 61 74 69 6f 6e 2e 0a 2a 2f 0a 76 6f 69 guration..*/.voi
1bb0: 64 20 74 69 63 6b 65 74 5f 69 6e 69 74 28 76 6f d ticket_init(vo
1bc0: 69 64 29 7b 0a 20 20 63 68 61 72 20 2a 7a 43 6f id){. char *zCo
1bd0: 6e 66 69 67 3b 0a 20 20 69 66 28 20 70 49 6e 74 nfig;. if( pInt
1be0: 65 72 70 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 erp ) return;.
1bf0: 70 49 6e 74 65 72 70 20 3d 20 53 62 53 5f 43 72 pInterp = SbS_Cr
1c00: 65 61 74 65 28 29 3b 0a 20 20 7a 43 6f 6e 66 69 eate();. zConfi
1c10: 67 20 3d 20 64 62 5f 74 65 78 74 28 28 63 68 61 g = db_text((cha
1c20: 72 2a 29 7a 44 65 66 61 75 6c 74 54 69 63 6b 65 r*)zDefaultTicke
1c30: 74 43 6f 6e 66 69 67 2c 0a 20 20 20 20 20 20 20 tConfig,.
1c40: 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 76 61 "SELECT va
1c50: 6c 75 65 20 46 52 4f 4d 20 63 6f 6e 66 69 67 20 lue FROM config
1c60: 57 48 45 52 45 20 6e 61 6d 65 3d 27 74 69 63 6b WHERE name='tick
1c70: 65 74 2d 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e et-configuration
1c80: 27 22 29 3b 0a 20 20 53 62 53 5f 45 76 61 6c 28 '");. SbS_Eval(
1c90: 70 49 6e 74 65 72 70 2c 20 7a 43 6f 6e 66 69 67 pInterp, zConfig
1ca0: 2c 20 2d 31 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 , -1);.}../*.**
1cb0: 52 65 63 72 65 61 74 65 20 74 68 65 20 74 69 63 Recreate the tic
1cc0: 6b 65 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 76 6f ket table..*/.vo
1cd0: 69 64 20 74 69 63 6b 65 74 5f 63 72 65 61 74 65 id ticket_create
1ce0: 5f 74 61 62 6c 65 28 69 6e 74 20 73 65 70 61 72 _table(int separ
1cf0: 61 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 29 7b 0a ateConnection){.
1d00: 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 char *zSql;.
1d10: 69 6e 74 20 6e 53 71 6c 3b 0a 0a 20 20 64 62 5f int nSql;.. db_
1d20: 6d 75 6c 74 69 5f 65 78 65 63 28 22 44 52 4f 50 multi_exec("DROP
1d30: 20 54 41 42 4c 45 20 49 46 20 45 58 49 53 54 53 TABLE IF EXISTS
1d40: 20 74 69 63 6b 65 74 3b 22 29 3b 0a 20 20 74 69 ticket;");. ti
1d50: 63 6b 65 74 5f 69 6e 69 74 28 29 3b 0a 20 20 7a cket_init();. z
1d60: 53 71 6c 20 3d 20 28 63 68 61 72 2a 29 53 62 53 Sql = (char*)SbS
1d70: 5f 46 65 74 63 68 28 70 49 6e 74 65 72 70 2c 20 _Fetch(pInterp,
1d80: 22 74 69 63 6b 65 74 5f 73 71 6c 22 2c 20 2d 31 "ticket_sql", -1
1d90: 2c 20 26 6e 53 71 6c 29 3b 0a 20 20 69 66 28 20 , &nSql);. if(
1da0: 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 66 zSql==0 ){. f
1db0: 6f 73 73 69 6c 5f 70 61 6e 69 63 28 22 6e 6f 20 ossil_panic("no
1dc0: 74 69 63 6b 65 74 5f 73 71 6c 20 64 65 66 69 6e ticket_sql defin
1dd0: 65 64 20 62 79 20 74 69 63 6b 65 74 20 63 6f 6e ed by ticket con
1de0: 66 69 67 75 72 61 74 69 6f 6e 22 29 3b 0a 20 20 figuration");.
1df0: 7d 0a 20 20 69 66 28 20 73 65 70 61 72 61 74 65 }. if( separate
1e00: 43 6f 6e 6e 65 63 74 69 6f 6e 20 29 7b 0a 20 20 Connection ){.
1e10: 20 20 7a 53 71 6c 20 3d 20 6d 70 72 69 6e 74 66 zSql = mprintf
1e20: 28 22 25 2e 2a 73 22 2c 20 6e 53 71 6c 2c 20 7a ("%.*s", nSql, z
1e30: 53 71 6c 29 3b 0a 20 20 20 20 64 62 5f 69 6e 69 Sql);. db_ini
1e40: 74 5f 64 61 74 61 62 61 73 65 28 67 2e 7a 52 65 t_database(g.zRe
1e50: 70 6f 73 69 74 6f 72 79 4e 61 6d 65 2c 20 7a 53 positoryName, zS
1e60: 71 6c 2c 20 30 29 3b 0a 20 20 20 20 66 72 65 65 ql, 0);. free
1e70: 28 7a 53 71 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b (zSql);. }else{
1e80: 0a 20 20 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 . db_multi_ex
1e90: 65 63 28 22 25 2e 2a 73 22 2c 20 6e 53 71 6c 2c ec("%.*s", nSql,
1ea0: 20 7a 53 71 6c 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f zSql);. }.}../
1eb0: 2a 0a 2a 2a 20 52 65 70 6f 70 75 6c 61 74 65 20 *.** Repopulate
1ec0: 74 68 65 20 74 69 63 6b 65 74 20 74 61 62 6c 65 the ticket table
1ed0: 0a 2a 2f 0a 76 6f 69 64 20 74 69 63 6b 65 74 5f .*/.void ticket_
1ee0: 72 65 62 75 69 6c 64 28 76 6f 69 64 29 7b 0a 20 rebuild(void){.
1ef0: 20 53 74 6d 74 20 71 3b 0a 20 20 64 62 5f 62 65 Stmt q;. db_be
1f00: 67 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 gin_transaction(
1f10: 29 3b 0a 20 20 64 62 5f 70 72 65 70 61 72 65 28 );. db_prepare(
1f20: 26 71 2c 22 53 45 4c 45 43 54 20 74 61 67 6e 61 &q,"SELECT tagna
1f30: 6d 65 20 46 52 4f 4d 20 74 61 67 20 57 48 45 52 me FROM tag WHER
1f40: 45 20 74 61 67 6e 61 6d 65 20 47 4c 4f 42 20 27 E tagname GLOB '
1f50: 74 6b 74 2d 2a 27 22 29 3b 0a 20 20 77 68 69 6c tkt-*'");. whil
1f60: 65 28 20 64 62 5f 73 74 65 70 28 26 71 29 3d 3d e( db_step(&q)==
1f70: 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 SQLITE_ROW ){.
1f80: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e const char *zN
1f90: 61 6d 65 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f ame = db_column_
1fa0: 74 65 78 74 28 26 71 2c 20 30 29 3b 0a 20 20 20 text(&q, 0);.
1fb0: 20 69 6e 74 20 6c 65 6e 3b 0a 20 20 20 20 7a 4e int len;. zN
1fc0: 61 6d 65 20 2b 3d 20 34 3b 0a 20 20 20 20 6c 65 ame += 4;. le
1fd0: 6e 20 3d 20 73 74 72 6c 65 6e 28 7a 4e 61 6d 65 n = strlen(zName
1fe0: 29 3b 0a 20 20 20 20 69 66 28 20 6c 65 6e 3c 32 );. if( len<2
1ff0: 30 20 7c 7c 20 21 76 61 6c 69 64 61 74 65 31 36 0 || !validate16
2000: 28 7a 4e 61 6d 65 2c 20 6c 65 6e 29 20 29 20 63 (zName, len) ) c
2010: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 74 69 63 ontinue;. tic
2020: 6b 65 74 5f 72 65 62 75 69 6c 64 5f 65 6e 74 72 ket_rebuild_entr
2030: 79 28 7a 4e 61 6d 65 29 3b 0a 20 20 7d 0a 20 20 y(zName);. }.
2040: 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b db_finalize(&q);
2050: 0a 20 20 64 62 5f 65 6e 64 5f 74 72 61 6e 73 61 . db_end_transa
2060: 63 74 69 6f 6e 28 30 29 3b 0a 7d 0a 0a 2f 2a 0a ction(0);.}../*.
2070: 2a 2a 20 57 45 42 50 41 47 45 3a 20 74 6b 74 76 ** WEBPAGE: tktv
2080: 69 65 77 0a 2a 2f 0a 76 6f 69 64 20 74 6b 74 76 iew.*/.void tktv
2090: 69 65 77 5f 70 61 67 65 28 76 6f 69 64 29 7b 0a iew_page(void){.
20a0: 20 20 63 68 61 72 20 2a 7a 53 63 72 69 70 74 3b char *zScript;
20b0: 0a 20 20 69 6e 74 20 6e 53 63 72 69 70 74 3b 0a . int nScript;.
20c0: 20 20 6c 6f 67 69 6e 5f 63 68 65 63 6b 5f 63 72 login_check_cr
20d0: 65 64 65 6e 74 69 61 6c 73 28 29 3b 0a 20 20 69 edentials();. i
20e0: 66 28 20 21 67 2e 6f 6b 52 64 54 6b 74 20 29 7b f( !g.okRdTkt ){
20f0: 20 6c 6f 67 69 6e 5f 6e 65 65 64 65 64 28 29 3b login_needed();
2100: 20 72 65 74 75 72 6e 3b 20 7d 0a 20 20 73 74 79 return; }. sty
2110: 6c 65 5f 68 65 61 64 65 72 28 22 56 69 65 77 20 le_header("View
2120: 54 69 63 6b 65 74 22 29 3b 0a 20 20 74 69 63 6b Ticket");. tick
2130: 65 74 5f 69 6e 69 74 28 29 3b 0a 20 20 69 6e 69 et_init();. ini
2140: 74 69 61 6c 69 7a 65 56 61 72 69 61 62 6c 65 73 tializeVariables
2150: 46 72 6f 6d 44 62 28 29 3b 0a 20 20 7a 53 63 72 FromDb();. zScr
2160: 69 70 74 20 3d 20 28 63 68 61 72 2a 29 53 62 53 ipt = (char*)SbS
2170: 5f 46 65 74 63 68 28 70 49 6e 74 65 72 70 2c 20 _Fetch(pInterp,
2180: 22 74 6b 74 76 69 65 77 5f 74 65 6d 70 6c 61 74 "tktview_templat
2190: 65 22 2c 20 2d 31 2c 20 26 6e 53 63 72 69 70 74 e", -1, &nScript
21a0: 29 3b 0a 20 20 7a 53 63 72 69 70 74 20 3d 20 6d );. zScript = m
21b0: 70 72 69 6e 74 66 28 22 25 2e 2a 73 22 2c 20 6e printf("%.*s", n
21c0: 53 63 72 69 70 74 2c 20 7a 53 63 72 69 70 74 29 Script, zScript)
21d0: 3b 0a 20 20 53 62 53 5f 52 65 6e 64 65 72 28 70 ;. SbS_Render(p
21e0: 49 6e 74 65 72 70 2c 20 7a 53 63 72 69 70 74 29 Interp, zScript)
21f0: 3b 0a 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 ;. style_footer
2200: 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 75 62 ();.}../*.** Sub
2210: 73 63 72 69 70 74 20 63 6f 6d 6d 61 6e 64 3a 20 script command:
2220: 20 20 4c 41 42 45 4c 20 73 75 62 6d 69 74 5f 6e LABEL submit_n
2230: 65 77 5f 74 69 63 6b 65 74 0a 2a 2a 0a 2a 2a 20 ew_ticket.**.**
2240: 49 66 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 If the variable
2250: 6e 61 6d 65 64 20 4c 41 42 45 4c 20 65 78 69 73 named LABEL exis
2260: 74 73 2c 20 74 68 65 6e 20 73 75 62 6d 69 74 20 ts, then submit
2270: 61 20 6e 65 77 20 74 69 63 6b 65 74 0a 2a 2a 20 a new ticket.**
2280: 62 61 73 65 64 20 6f 6e 20 74 68 65 20 76 61 6c based on the val
2290: 75 65 73 20 6f 66 20 6f 74 68 65 72 20 64 65 66 ues of other def
22a0: 69 6e 65 64 20 76 61 72 69 61 62 6c 65 73 2e 0a ined variables..
22b0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 75 */.static int su
22c0: 62 6d 69 74 4e 65 77 43 6d 64 28 73 74 72 75 63 bmitNewCmd(struc
22d0: 74 20 53 75 62 73 63 72 69 70 74 20 2a 70 2c 20 t Subscript *p,
22e0: 76 6f 69 64 20 2a 70 4e 6f 74 69 66 79 29 7b 0a void *pNotify){.
22f0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c const char *zL
2300: 61 62 65 6c 3b 0a 20 20 69 6e 74 20 6e 4c 61 62 abel;. int nLab
2310: 65 6c 2c 20 73 69 7a 65 3b 0a 20 20 69 66 28 20 el, size;. if(
2320: 53 62 53 5f 52 65 71 75 69 72 65 53 74 61 63 6b SbS_RequireStack
2330: 28 70 2c 20 31 2c 20 22 73 75 62 6d 69 74 5f 6e (p, 1, "submit_n
2340: 65 77 5f 74 69 63 6b 65 74 22 29 20 29 20 72 65 ew_ticket") ) re
2350: 74 75 72 6e 20 31 3b 0a 20 20 7a 4c 61 62 65 6c turn 1;. zLabel
2360: 20 3d 20 53 62 53 5f 53 74 61 63 6b 56 61 6c 75 = SbS_StackValu
2370: 65 28 70 2c 20 30 2c 20 26 6e 4c 61 62 65 6c 29 e(p, 0, &nLabel)
2380: 3b 0a 20 20 69 66 28 20 53 62 53 5f 46 65 74 63 ;. if( SbS_Fetc
2390: 68 28 70 2c 20 7a 4c 61 62 65 6c 2c 20 6e 4c 61 h(p, zLabel, nLa
23a0: 62 65 6c 2c 20 26 73 69 7a 65 29 21 3d 30 20 29 bel, &size)!=0 )
23b0: 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74 {. char *zDat
23c0: 65 2c 20 2a 7a 55 75 69 64 3b 0a 20 20 20 20 69 e, *zUuid;. i
23d0: 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74 20 72 69 nt i;. int ri
23e0: 64 3b 0a 20 20 20 20 42 6c 6f 62 20 74 6b 74 63 d;. Blob tktc
23f0: 68 6e 67 2c 20 63 6b 73 75 6d 3b 0a 0a 20 20 20 hng, cksum;..
2400: 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 74 6b 74 63 blob_zero(&tktc
2410: 68 6e 67 29 3b 0a 20 20 20 20 7a 44 61 74 65 20 hng);. zDate
2420: 3d 20 64 62 5f 74 65 78 74 28 30 2c 20 22 53 45 = db_text(0, "SE
2430: 4c 45 43 54 20 64 61 74 65 74 69 6d 65 28 27 6e LECT datetime('n
2440: 6f 77 27 29 22 29 3b 0a 20 20 20 20 7a 44 61 74 ow')");. zDat
2450: 65 5b 31 30 5d 20 3d 20 27 54 27 3b 0a 20 20 20 e[10] = 'T';.
2460: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 74 blob_appendf(&t
2470: 6b 74 63 68 6e 67 2c 20 22 44 20 25 73 5c 6e 22 ktchng, "D %s\n"
2480: 2c 20 7a 44 61 74 65 29 3b 0a 20 20 20 20 66 72 , zDate);. fr
2490: 65 65 28 7a 44 61 74 65 29 3b 0a 20 20 20 20 66 ee(zDate);. f
24a0: 6f 72 28 69 3d 30 3b 20 69 3c 6e 46 69 65 6c 64 or(i=0; i<nField
24b0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 6f ; i++){. co
24c0: 6e 73 74 20 63 68 61 72 20 2a 7a 56 61 6c 75 65 nst char *zValue
24d0: 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 56 61 6c ;. int nVal
24e0: 75 65 3b 0a 20 20 20 20 20 20 7a 56 61 6c 75 65 ue;. zValue
24f0: 20 3d 20 53 62 53 5f 46 65 74 63 68 28 70 2c 20 = SbS_Fetch(p,
2500: 61 7a 46 69 65 6c 64 5b 69 5d 2c 20 2d 31 2c 20 azField[i], -1,
2510: 26 6e 56 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 &nValue);.
2520: 69 66 28 20 7a 56 61 6c 75 65 20 29 7b 0a 20 20 if( zValue ){.
2530: 20 20 20 20 20 20 77 68 69 6c 65 28 20 6e 56 61 while( nVa
2540: 6c 75 65 3e 30 20 26 26 20 69 73 73 70 61 63 65 lue>0 && isspace
2550: 28 7a 56 61 6c 75 65 5b 6e 56 61 6c 75 65 2d 31 (zValue[nValue-1
2560: 5d 29 20 29 7b 20 6e 56 61 6c 75 65 2d 2d 3b 20 ]) ){ nValue--;
2570: 7d 0a 20 20 20 20 20 20 20 20 62 6c 6f 62 5f 61 }. blob_a
2580: 70 70 65 6e 64 66 28 26 74 6b 74 63 68 6e 67 2c ppendf(&tktchng,
2590: 20 22 4a 20 25 73 20 25 7a 5c 6e 22 2c 0a 20 20 "J %s %z\n",.
25a0: 20 20 20 20 20 20 20 20 20 61 7a 46 69 65 6c 64 azField
25b0: 5b 69 5d 2c 20 66 6f 73 73 69 6c 69 7a 65 28 7a [i], fossilize(z
25c0: 56 61 6c 75 65 2c 6e 56 61 6c 75 65 29 29 3b 0a Value,nValue));.
25d0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 }. }.
25e0: 20 20 7a 55 75 69 64 20 3d 20 64 62 5f 74 65 78 zUuid = db_tex
25f0: 74 28 30 2c 20 22 53 45 4c 45 43 54 20 6c 6f 77 t(0, "SELECT low
2600: 65 72 28 68 65 78 28 72 61 6e 64 6f 6d 62 6c 6f er(hex(randomblo
2610: 62 28 32 30 29 29 29 22 29 3b 0a 20 20 20 20 62 b(20)))");. b
2620: 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 74 6b 74 lob_appendf(&tkt
2630: 63 68 6e 67 2c 20 22 4b 20 25 73 5c 6e 22 2c 20 chng, "K %s\n",
2640: 7a 55 75 69 64 29 3b 0a 20 20 20 20 28 2a 28 63 zUuid);. (*(c
2650: 68 61 72 2a 2a 29 70 4e 6f 74 69 66 79 29 20 3d har**)pNotify) =
2660: 20 7a 55 75 69 64 3b 0a 20 20 20 20 62 6c 6f 62 zUuid;. blob
2670: 5f 61 70 70 65 6e 64 66 28 26 74 6b 74 63 68 6e _appendf(&tktchn
2680: 67 2c 20 22 55 20 25 46 5c 6e 22 2c 20 67 2e 7a g, "U %F\n", g.z
2690: 4c 6f 67 69 6e 20 3f 20 67 2e 7a 4c 6f 67 69 6e Login ? g.zLogin
26a0: 20 3a 20 22 22 29 3b 0a 20 20 20 20 6d 64 35 73 : "");. md5s
26b0: 75 6d 5f 62 6c 6f 62 28 26 74 6b 74 63 68 6e 67 um_blob(&tktchng
26c0: 2c 20 26 63 6b 73 75 6d 29 3b 0a 20 20 20 20 62 , &cksum);. b
26d0: 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 74 6b 74 lob_appendf(&tkt
26e0: 63 68 6e 67 2c 20 22 5a 20 25 62 5c 6e 22 2c 20 chng, "Z %b\n",
26f0: 26 63 6b 73 75 6d 29 3b 0a 0a 23 69 66 20 30 0a &cksum);..#if 0.
2700: 20 20 20 20 40 20 3c 68 72 3e 3c 70 72 65 3e 0a @ <hr><pre>.
2710: 20 20 20 20 40 20 25 68 28 62 6c 6f 62 5f 73 74 @ %h(blob_st
2720: 72 28 26 74 6b 74 63 68 6e 67 29 29 0a 20 20 20 r(&tktchng)).
2730: 20 40 20 3c 2f 70 72 65 3e 3c 68 72 3e 0a 20 20 @ </pre><hr>.
2740: 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 74 6b 74 blob_zero(&tkt
2750: 63 68 6e 67 29 0a 20 20 20 20 53 62 53 5f 50 6f chng). SbS_Po
2760: 70 28 70 2c 20 31 29 3b 0a 20 20 20 20 72 65 74 p(p, 1);. ret
2770: 75 72 6e 20 53 42 53 5f 4f 4b 3b 0a 23 65 6e 64 urn SBS_OK;.#end
2780: 69 66 0a 0a 20 20 20 20 72 69 64 20 3d 20 63 6f if.. rid = co
2790: 6e 74 65 6e 74 5f 70 75 74 28 26 74 6b 74 63 68 ntent_put(&tktch
27a0: 6e 67 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 69 ng, 0, 0);. i
27b0: 66 28 20 72 69 64 3d 3d 30 20 29 7b 0a 20 20 20 f( rid==0 ){.
27c0: 20 20 20 66 6f 73 73 69 6c 5f 70 61 6e 69 63 28 fossil_panic(
27d0: 22 74 72 6f 75 62 6c 65 20 63 6f 6d 6d 69 74 74 "trouble committ
27e0: 69 6e 67 20 74 69 63 6b 65 74 3a 20 25 73 22 2c ing ticket: %s",
27f0: 20 67 2e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 g.zErrMsg);.
2800: 20 7d 0a 20 20 20 20 6d 61 6e 69 66 65 73 74 5f }. manifest_
2810: 63 72 6f 73 73 6c 69 6e 6b 28 72 69 64 2c 20 26 crosslink(rid, &
2820: 74 6b 74 63 68 6e 67 29 3b 0a 20 20 20 20 72 65 tktchng);. re
2830: 74 75 72 6e 20 53 42 53 5f 52 45 54 55 52 4e 3b turn SBS_RETURN;
2840: 0a 20 20 7d 0a 20 20 53 62 53 5f 50 6f 70 28 70 . }. SbS_Pop(p
2850: 2c 20 31 29 3b 0a 20 20 72 65 74 75 72 6e 20 53 , 1);. return S
2860: 42 53 5f 4f 4b 3b 20 20 0a 7d 0a 0a 2f 2a 0a 2a BS_OK; .}../*.*
2870: 2a 20 57 45 42 50 41 47 45 3a 20 74 6b 74 6e 65 * WEBPAGE: tktne
2880: 77 0a 2a 2f 0a 76 6f 69 64 20 74 6b 74 6e 65 77 w.*/.void tktnew
2890: 5f 70 61 67 65 28 76 6f 69 64 29 7b 0a 20 20 63 _page(void){. c
28a0: 68 61 72 20 2a 7a 53 63 72 69 70 74 3b 0a 20 20 har *zScript;.
28b0: 69 6e 74 20 6e 53 63 72 69 70 74 3b 0a 20 20 63 int nScript;. c
28c0: 68 61 72 20 2a 7a 4e 65 77 55 75 69 64 20 3d 20 har *zNewUuid =
28d0: 30 3b 0a 0a 20 20 6c 6f 67 69 6e 5f 63 68 65 63 0;.. login_chec
28e0: 6b 5f 63 72 65 64 65 6e 74 69 61 6c 73 28 29 3b k_credentials();
28f0: 0a 20 20 69 66 28 20 21 67 2e 6f 6b 4e 65 77 54 . if( !g.okNewT
2900: 6b 74 20 29 7b 20 6c 6f 67 69 6e 5f 6e 65 65 64 kt ){ login_need
2910: 65 64 28 29 3b 20 72 65 74 75 72 6e 3b 20 7d 0a ed(); return; }.
2920: 20 20 73 74 79 6c 65 5f 68 65 61 64 65 72 28 22 style_header("
2930: 4e 65 77 20 54 69 63 6b 65 74 22 29 3b 0a 20 20 New Ticket");.
2940: 74 69 63 6b 65 74 5f 69 6e 69 74 28 29 3b 0a 20 ticket_init();.
2950: 20 67 65 74 41 6c 6c 54 69 63 6b 65 74 46 69 65 getAllTicketFie
2960: 6c 64 73 28 29 3b 0a 20 20 69 6e 69 74 69 61 6c lds();. initial
2970: 69 7a 65 56 61 72 69 61 62 6c 65 73 46 72 6f 6d izeVariablesFrom
2980: 43 47 49 28 29 3b 0a 20 20 40 20 3c 66 6f 72 6d CGI();. @ <form
2990: 20 6d 65 74 68 6f 64 3d 22 50 4f 53 54 22 20 61 method="POST" a
29a0: 63 74 69 6f 6e 3d 22 25 73 28 67 2e 7a 42 61 73 ction="%s(g.zBas
29b0: 65 55 52 4c 29 2f 74 6b 74 6e 65 77 22 3e 0a 20 eURL)/tktnew">.
29c0: 20 7a 53 63 72 69 70 74 20 3d 20 28 63 68 61 72 zScript = (char
29d0: 2a 29 53 62 53 5f 46 65 74 63 68 28 70 49 6e 74 *)SbS_Fetch(pInt
29e0: 65 72 70 2c 20 22 74 6b 74 6e 65 77 5f 74 65 6d erp, "tktnew_tem
29f0: 70 6c 61 74 65 22 2c 20 2d 31 2c 20 26 6e 53 63 plate", -1, &nSc
2a00: 72 69 70 74 29 3b 0a 20 20 7a 53 63 72 69 70 74 ript);. zScript
2a10: 20 3d 20 6d 70 72 69 6e 74 66 28 22 25 2e 2a 73 = mprintf("%.*s
2a20: 22 2c 20 6e 53 63 72 69 70 74 2c 20 7a 53 63 72 ", nScript, zScr
2a30: 69 70 74 29 3b 0a 20 20 53 62 53 5f 41 64 64 56 ipt);. SbS_AddV
2a40: 65 72 62 28 70 49 6e 74 65 72 70 2c 20 22 73 75 erb(pInterp, "su
2a50: 62 6d 69 74 5f 6e 65 77 5f 74 69 63 6b 65 74 22 bmit_new_ticket"
2a60: 2c 20 73 75 62 6d 69 74 4e 65 77 43 6d 64 2c 20 , submitNewCmd,
2a70: 28 76 6f 69 64 2a 29 26 7a 4e 65 77 55 75 69 64 (void*)&zNewUuid
2a80: 29 3b 0a 20 20 69 66 28 20 53 62 53 5f 52 65 6e );. if( SbS_Ren
2a90: 64 65 72 28 70 49 6e 74 65 72 70 2c 20 7a 53 63 der(pInterp, zSc
2aa0: 72 69 70 74 29 3d 3d 53 42 53 5f 52 45 54 55 52 ript)==SBS_RETUR
2ab0: 4e 20 26 26 20 7a 4e 65 77 55 75 69 64 20 29 7b N && zNewUuid ){
2ac0: 0a 20 20 20 20 63 67 69 5f 72 65 64 69 72 65 63 . cgi_redirec
2ad0: 74 28 6d 70 72 69 6e 74 66 28 22 25 73 2f 74 6b t(mprintf("%s/tk
2ae0: 74 76 69 65 77 2f 25 73 22 2c 20 67 2e 7a 42 61 tview/%s", g.zBa
2af0: 73 65 55 52 4c 2c 20 7a 4e 65 77 55 75 69 64 29 seURL, zNewUuid)
2b00: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 );. return;.
2b10: 20 7d 0a 20 20 40 20 3c 2f 66 6f 72 6d 3e 0a 20 }. @ </form>.
2b20: 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 29 3b style_footer();
2b30: 0a 7d 0a 0a 0a 0a 2f 2a 0a 2a 2a 20 53 75 62 73 .}..../*.** Subs
2b40: 63 72 69 70 74 20 63 6f 6d 6d 61 6e 64 3a 20 20 cript command:
2b50: 20 53 54 52 31 20 53 54 52 32 20 55 53 45 52 56 STR1 STR2 USERV
2b60: 41 52 20 41 50 50 45 4e 44 56 41 52 20 46 49 45 AR APPENDVAR FIE
2b70: 4c 44 20 61 70 70 65 6e 64 5f 72 65 6d 61 72 6b LD append_remark
2b80: 0a 2a 2a 0a 2a 2a 20 46 49 45 4c 44 20 69 73 20 .**.** FIELD is
2b90: 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 64 61 the name of a da
2ba0: 74 61 62 61 73 65 20 63 6f 6c 75 6d 6e 20 74 6f tabase column to
2bb0: 20 77 68 69 63 68 20 77 65 20 6d 69 67 68 74 20 which we might
2bc0: 77 61 6e 74 0a 2a 2a 20 74 6f 20 61 70 70 65 6e want.** to appen
2bd0: 64 20 74 65 78 74 2e 20 20 41 50 50 45 4e 44 56 d text. APPENDV
2be0: 41 52 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f AR is the name o
2bf0: 66 20 61 20 43 47 49 20 70 61 72 61 6d 65 74 65 f a CGI paramete
2c00: 72 20 77 68 69 63 68 0a 2a 2a 20 28 69 66 20 69 r which.** (if i
2c10: 74 20 65 78 69 73 74 73 29 20 63 6f 6e 74 61 69 t exists) contai
2c20: 6e 73 20 74 68 65 20 74 65 78 74 20 74 6f 20 62 ns the text to b
2c30: 65 20 61 70 70 65 6e 64 65 64 2e 20 20 54 68 65 e appended. The
2c40: 20 61 70 70 65 6e 64 0a 2a 2a 20 6f 70 65 72 61 append.** opera
2c50: 74 69 6f 6e 20 77 69 6c 6c 20 6f 6e 6c 79 20 68 tion will only h
2c60: 61 70 70 65 6e 20 69 66 20 41 50 50 45 4e 44 56 appen if APPENDV
2c70: 41 52 20 65 78 69 73 74 73 2e 20 20 55 53 45 52 AR exists. USER
2c80: 56 41 52 20 69 73 0a 2a 2a 20 61 20 43 47 49 20 VAR is.** a CGI
2c90: 70 61 72 61 6d 65 74 65 72 20 77 68 69 63 68 20 parameter which
2ca0: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d contains the nam
2cb0: 65 20 74 68 61 74 20 74 68 65 20 75 73 65 72 20 e that the user
2cc0: 77 61 6e 74 73 20 74 6f 0a 2a 2a 20 74 6f 20 62 wants to.** to b
2cd0: 65 20 6b 6e 6f 77 6e 20 62 79 2e 20 20 53 54 52 e known by. STR
2ce0: 31 20 61 6e 64 20 53 54 52 32 20 61 72 65 20 70 1 and STR2 are p
2cf0: 72 65 66 69 78 65 73 20 74 68 61 74 20 61 72 65 refixes that are
2d00: 20 70 72 65 70 65 6e 64 65 64 0a 2a 2a 20 74 6f prepended.** to
2d10: 20 74 68 65 20 74 65 78 74 20 69 6e 20 74 68 65 the text in the
2d20: 20 41 50 50 45 4e 44 56 41 52 20 43 47 49 20 70 APPENDVAR CGI p
2d30: 61 72 61 6d 65 74 65 72 2e 20 20 53 54 52 31 20 arameter. STR1
2d40: 69 73 20 75 73 65 64 20 69 66 0a 2a 2a 20 55 53 is used if.** US
2d50: 45 52 56 41 52 20 69 73 20 74 68 65 20 73 61 6d ERVAR is the sam
2d60: 65 20 61 73 20 67 2e 7a 4c 6f 67 69 6e 20 6f 72 e as g.zLogin or
2d70: 20 69 66 20 55 53 45 52 56 41 52 20 64 6f 65 73 if USERVAR does
2d80: 20 6e 6f 74 20 65 78 69 73 74 2e 0a 2a 2a 20 53 not exist..** S
2d90: 54 52 32 20 69 73 20 75 73 65 64 20 69 66 20 55 TR2 is used if U
2da0: 53 45 52 56 41 52 20 65 78 69 73 74 73 20 61 6e SERVAR exists an
2db0: 64 20 69 73 20 64 69 66 66 65 72 65 6e 74 20 74 d is different t
2dc0: 68 61 6e 20 67 2e 7a 4c 6f 67 69 6e 2e 0a 2a 2a han g.zLogin..**
2dd0: 20 57 69 74 68 69 6e 20 53 54 52 31 20 61 6e 64 Within STR1 and
2de0: 20 53 54 52 32 2c 20 74 68 65 20 66 6f 6c 6c 6f STR2, the follo
2df0: 77 69 6e 67 20 73 75 62 73 74 69 74 75 74 69 6f wing substitutio
2e00: 6e 73 20 6f 63 63 75 72 3a 0a 2a 2a 0a 2a 2a 20 ns occur:.**.**
2e10: 20 20 20 20 25 4c 4f 47 49 4e 25 20 20 20 20 54 %LOGIN% T
2e20: 68 65 20 76 61 6c 75 65 20 6f 66 20 67 2e 7a 4c he value of g.zL
2e30: 6f 67 69 6e 0a 2a 2a 20 20 20 20 20 25 55 53 45 ogin.** %USE
2e40: 52 25 20 20 20 20 20 54 68 65 20 76 61 6c 75 65 R% The value
2e50: 20 6f 66 20 74 68 65 20 55 53 45 52 56 41 52 20 of the USERVAR
2e60: 43 47 49 20 70 61 72 61 6d 65 74 65 72 0a 2a 2a CGI parameter.**
2e70: 20 20 20 20 20 25 44 41 54 45 25 20 20 20 20 20 %DATE%
2e80: 54 68 65 20 63 75 72 72 65 6e 74 20 64 61 74 65 The current date
2e90: 20 61 6e 64 20 74 69 6d 65 0a 2a 2a 0a 2a 2a 20 and time.**.**
2ea0: 54 68 65 20 63 6f 6e 63 61 74 65 6e 61 74 69 6f The concatenatio
2eb0: 6e 20 53 54 52 31 20 6f 72 20 53 54 52 32 20 77 n STR1 or STR2 w
2ec0: 69 74 68 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 ith the content
2ed0: 6f 66 20 41 50 50 45 4e 44 56 41 52 0a 2a 2a 20 of APPENDVAR.**
2ee0: 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 is written into
2ef0: 61 7a 41 70 6e 64 5b 5d 20 69 6e 20 74 68 65 20 azApnd[] in the
2f00: 46 49 45 4c 44 20 73 6c 6f 74 20 73 6f 20 74 68 FIELD slot so th
2f10: 61 74 20 69 74 20 77 69 6c 6c 20 62 65 0a 2a 2a at it will be.**
2f20: 20 70 69 63 6b 65 64 20 75 70 20 61 6e 64 20 75 picked up and u
2f30: 73 65 64 20 62 79 20 74 68 65 20 73 75 62 6d 69 sed by the submi
2f40: 74 5f 74 69 63 6b 65 74 5f 63 68 61 6e 67 65 20 t_ticket_change
2f50: 63 6f 6d 6d 61 6e 64 2e 0a 2a 2f 0a 73 74 61 74 command..*/.stat
2f60: 69 63 20 69 6e 74 20 61 70 70 65 6e 64 52 65 6d ic int appendRem
2f70: 61 72 6b 43 6d 64 28 73 74 72 75 63 74 20 53 75 arkCmd(struct Su
2f80: 62 73 63 72 69 70 74 20 2a 70 2c 20 76 6f 69 64 bscript *p, void
2f90: 20 2a 6e 6f 74 55 73 65 64 29 7b 0a 20 20 69 6e *notUsed){. in
2fa0: 74 20 69 2c 20 6a 2c 20 69 64 78 3b 0a 20 20 63 t i, j, idx;. c
2fb0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 65 6c onst char *zFiel
2fc0: 64 2c 20 2a 7a 41 70 70 65 6e 64 56 61 72 2c 20 d, *zAppendVar,
2fd0: 2a 7a 55 73 65 72 56 61 72 2c 20 2a 7a 53 74 72 *zUserVar, *zStr
2fe0: 2c 20 2a 7a 56 61 6c 75 65 2c 20 2a 7a 55 73 65 , *zValue, *zUse
2ff0: 72 3b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c r;. int nField,
3000: 20 6e 41 70 70 65 6e 64 56 61 72 2c 20 6e 55 73 nAppendVar, nUs
3010: 65 72 56 61 72 2c 20 6e 53 74 72 2c 20 6e 56 61 erVar, nStr, nVa
3020: 6c 75 65 2c 20 6e 55 73 65 72 3b 0a 0a 20 20 69 lue, nUser;.. i
3030: 66 28 20 53 62 53 5f 52 65 71 75 69 72 65 53 74 f( SbS_RequireSt
3040: 61 63 6b 28 70 2c 20 35 2c 20 22 61 70 70 65 6e ack(p, 5, "appen
3050: 64 5f 72 65 6d 61 72 6b 22 29 20 29 20 72 65 74 d_remark") ) ret
3060: 75 72 6e 20 31 3b 0a 20 20 7a 46 69 65 6c 64 20 urn 1;. zField
3070: 3d 20 53 62 53 5f 53 74 61 63 6b 56 61 6c 75 65 = SbS_StackValue
3080: 28 70 2c 20 30 2c 20 26 6e 46 69 65 6c 64 29 3b (p, 0, &nField);
3090: 0a 20 20 66 6f 72 28 69 64 78 3d 30 3b 20 69 64 . for(idx=0; id
30a0: 78 3c 6e 46 69 65 6c 64 3b 20 69 64 78 2b 2b 29 x<nField; idx++)
30b0: 7b 0a 20 20 20 20 69 66 28 20 73 74 72 6e 63 6d {. if( strncm
30c0: 70 28 61 7a 46 69 65 6c 64 5b 69 64 78 5d 2c 20 p(azField[idx],
30d0: 7a 46 69 65 6c 64 2c 20 6e 46 69 65 6c 64 29 3d zField, nField)=
30e0: 3d 30 20 26 26 20 61 7a 46 69 65 6c 64 5b 69 64 =0 && azField[id
30f0: 78 5d 5b 6e 46 69 65 6c 64 5d 3d 3d 30 20 29 7b x][nField]==0 ){
3100: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 . break;.
3110: 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 69 64 }. }. if( id
3120: 78 3e 3d 6e 46 69 65 6c 64 20 29 7b 0a 20 20 20 x>=nField ){.
3130: 20 53 62 53 5f 53 65 74 45 72 72 6f 72 4d 65 73 SbS_SetErrorMes
3140: 73 61 67 65 28 70 2c 20 22 6e 6f 20 73 75 63 68 sage(p, "no such
3150: 20 54 49 43 4b 45 54 20 63 6f 6c 75 6d 6e 3a 20 TICKET column:
3160: 25 2e 2a 73 22 2c 20 6e 46 69 65 6c 64 2c 20 7a %.*s", nField, z
3170: 46 69 65 6c 64 29 3b 0a 20 20 20 20 72 65 74 75 Field);. retu
3180: 72 6e 20 53 42 53 5f 45 52 52 4f 52 3b 0a 20 20 rn SBS_ERROR;.
3190: 7d 0a 20 20 7a 41 70 70 65 6e 64 56 61 72 20 3d }. zAppendVar =
31a0: 20 53 62 53 5f 53 74 61 63 6b 56 61 6c 75 65 28 SbS_StackValue(
31b0: 70 2c 20 31 2c 20 26 6e 41 70 70 65 6e 64 56 61 p, 1, &nAppendVa
31c0: 72 29 3b 0a 20 20 7a 56 61 6c 75 65 20 3d 20 53 r);. zValue = S
31d0: 62 53 5f 46 65 74 63 68 28 70 2c 20 7a 41 70 70 bS_Fetch(p, zApp
31e0: 65 6e 64 56 61 72 2c 20 6e 41 70 70 65 6e 64 56 endVar, nAppendV
31f0: 61 72 2c 20 26 6e 56 61 6c 75 65 29 3b 0a 20 20 ar, &nValue);.
3200: 69 66 28 20 7a 56 61 6c 75 65 20 29 7b 0a 20 20 if( zValue ){.
3210: 20 20 42 6c 6f 62 20 6f 75 74 3b 0a 20 20 20 20 Blob out;.
3220: 62 6c 6f 62 5f 7a 65 72 6f 28 26 6f 75 74 29 3b blob_zero(&out);
3230: 0a 20 20 20 20 7a 55 73 65 72 56 61 72 20 3d 20 . zUserVar =
3240: 53 62 53 5f 53 74 61 63 6b 56 61 6c 75 65 28 70 SbS_StackValue(p
3250: 2c 20 32 2c 20 26 6e 55 73 65 72 56 61 72 29 3b , 2, &nUserVar);
3260: 0a 20 20 20 20 7a 55 73 65 72 20 3d 20 53 62 53 . zUser = SbS
3270: 5f 46 65 74 63 68 28 70 2c 20 7a 55 73 65 72 56 _Fetch(p, zUserV
3280: 61 72 2c 20 6e 55 73 65 72 56 61 72 2c 20 26 6e ar, nUserVar, &n
3290: 55 73 65 72 29 3b 0a 20 20 20 20 69 66 28 20 7a User);. if( z
32a0: 55 73 65 72 20 26 26 20 28 73 74 72 6e 63 6d 70 User && (strncmp
32b0: 28 7a 55 73 65 72 2c 20 67 2e 7a 4c 6f 67 69 6e (zUser, g.zLogin
32c0: 2c 20 6e 55 73 65 72 29 20 7c 7c 20 67 2e 7a 4c , nUser) || g.zL
32d0: 6f 67 69 6e 5b 6e 55 73 65 72 5d 21 3d 30 29 20 ogin[nUser]!=0)
32e0: 29 7b 0a 20 20 20 20 20 20 7a 53 74 72 20 3d 20 ){. zStr =
32f0: 53 62 53 5f 53 74 61 63 6b 56 61 6c 75 65 28 70 SbS_StackValue(p
3300: 2c 20 33 2c 20 26 6e 53 74 72 29 3b 0a 20 20 20 , 3, &nStr);.
3310: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 53 }else{. zS
3320: 74 72 20 3d 20 53 62 53 5f 53 74 61 63 6b 56 61 tr = SbS_StackVa
3330: 6c 75 65 28 70 2c 20 34 2c 20 26 6e 53 74 72 29 lue(p, 4, &nStr)
3340: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 28 ;. }. for(
3350: 69 3d 6a 3d 30 3b 20 69 3c 6e 53 74 72 3b 20 69 i=j=0; i<nStr; i
3360: 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a ++){. if( z
3370: 53 74 72 5b 69 5d 21 3d 27 25 27 20 29 20 63 6f Str[i]!='%' ) co
3380: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 69 66 ntinue;. if
3390: 28 20 69 3e 6a 20 29 7b 0a 20 20 20 20 20 20 20 ( i>j ){.
33a0: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 26 6f 75 blob_append(&ou
33b0: 74 2c 20 26 7a 53 74 72 5b 6a 5d 2c 20 69 2d 6a t, &zStr[j], i-j
33c0: 29 3b 0a 20 20 20 20 20 20 20 20 6a 20 3d 20 69 );. j = i
33d0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 ;. }.
33e0: 69 66 28 20 73 74 72 6e 63 6d 70 28 26 7a 53 74 if( strncmp(&zSt
33f0: 72 5b 6a 5d 2c 20 22 25 55 53 45 52 25 22 2c 20 r[j], "%USER%",
3400: 36 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 6)==0 ){.
3410: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 6f blob_appendf(&o
3420: 75 74 2c 20 22 25 7a 22 2c 20 68 74 6d 6c 69 7a ut, "%z", htmliz
3430: 65 28 7a 55 73 65 72 2c 20 6e 55 73 65 72 29 29 e(zUser, nUser))
3440: 3b 0a 20 20 20 20 20 20 20 20 69 20 2b 3d 20 35 ;. i += 5
3450: 3b 0a 20 20 20 20 20 20 20 20 6a 20 3d 20 69 2b ;. j = i+
3460: 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 1;. }else i
3470: 66 28 20 73 74 72 6e 63 6d 70 28 26 7a 53 74 72 f( strncmp(&zStr
3480: 5b 6a 5d 2c 20 22 25 4c 4f 47 49 4e 25 22 2c 20 [j], "%LOGIN%",
3490: 37 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 7)==0 ){.
34a0: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 6f blob_appendf(&o
34b0: 75 74 2c 20 22 25 7a 22 2c 20 68 74 6d 6c 69 7a ut, "%z", htmliz
34c0: 65 28 67 2e 7a 4c 6f 67 69 6e 2c 20 2d 31 29 29 e(g.zLogin, -1))
34d0: 3b 0a 20 20 20 20 20 20 20 20 69 20 2b 3d 20 36 ;. i += 6
34e0: 3b 0a 20 20 20 20 20 20 20 20 6a 20 3d 20 69 2b ;. j = i+
34f0: 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 1;. }else i
3500: 66 28 20 73 74 72 6e 63 6d 70 28 26 7a 53 74 72 f( strncmp(&zStr
3510: 5b 6a 5d 2c 20 22 25 44 41 54 45 25 22 2c 20 36 [j], "%DATE%", 6
3520: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 )==0 ){.
3530: 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 6f 75 blob_appendf(&ou
3540: 74 2c 20 22 25 7a 22 2c 20 64 62 5f 74 65 78 74 t, "%z", db_text
3550: 28 30 2c 20 22 53 45 4c 45 43 54 20 64 61 74 65 (0, "SELECT date
3560: 74 69 6d 65 28 27 6e 6f 77 27 29 22 29 29 3b 0a time('now')"));.
3570: 20 20 20 20 20 20 20 20 69 20 2b 3d 20 35 3b 0a i += 5;.
3580: 20 20 20 20 20 20 20 20 6a 20 3d 20 69 2b 31 3b j = i+1;
3590: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 . }. }.
35a0: 20 20 20 69 66 28 20 69 3e 6a 20 29 7b 0a 20 20 if( i>j ){.
35b0: 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 blob_append(
35c0: 26 6f 75 74 2c 20 26 7a 53 74 72 5b 6a 5d 2c 20 &out, &zStr[j],
35d0: 69 2d 6a 29 3b 20 20 20 20 20 0a 20 20 20 20 7d i-j); . }
35e0: 0a 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 . blob_append
35f0: 28 26 6f 75 74 2c 20 7a 56 61 6c 75 65 2c 20 6e (&out, zValue, n
3600: 56 61 6c 75 65 29 3b 0a 20 20 20 20 61 7a 41 70 Value);. azAp
3610: 70 65 6e 64 5b 69 64 78 5d 20 3d 20 62 6c 6f 62 pend[idx] = blob
3620: 5f 73 74 72 28 26 6f 75 74 29 3b 0a 20 20 7d 0a _str(&out);. }.
3630: 20 20 53 62 53 5f 50 6f 70 28 70 2c 20 35 29 3b SbS_Pop(p, 5);
3640: 0a 20 20 72 65 74 75 72 6e 20 53 42 53 5f 4f 4b . return SBS_OK
3650: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 75 62 73 63 ;.}../*.** Subsc
3660: 72 69 70 74 20 63 6f 6d 6d 61 6e 64 3a 20 20 20 ript command:
3670: 4c 41 42 45 4c 20 73 75 62 6d 69 74 5f 74 69 63 LABEL submit_tic
3680: 6b 65 74 5f 63 68 61 6e 67 65 0a 2a 2a 0a 2a 2a ket_change.**.**
3690: 20 49 66 20 74 68 65 20 76 61 72 69 61 62 6c 65 If the variable
36a0: 20 6e 61 6d 65 64 20 4c 41 42 45 4c 20 65 78 69 named LABEL exi
36b0: 73 74 73 2c 20 74 68 65 6e 20 73 75 62 6d 69 74 sts, then submit
36c0: 20 61 20 63 68 61 6e 67 65 20 74 6f 0a 2a 2a 20 a change to.**
36d0: 74 68 65 20 74 69 63 6b 65 74 20 69 64 65 6e 74 the ticket ident
36e0: 69 66 69 65 64 20 62 79 20 74 68 65 20 22 6e 61 ified by the "na
36f0: 6d 65 22 20 43 47 49 20 70 61 72 61 6d 65 74 65 me" CGI paramete
3700: 72 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 r..*/.static int
3710: 20 73 75 62 6d 69 74 45 64 69 74 43 6d 64 28 73 submitEditCmd(s
3720: 74 72 75 63 74 20 53 75 62 73 63 72 69 70 74 20 truct Subscript
3730: 2a 70 2c 20 76 6f 69 64 20 2a 70 4e 6f 74 69 66 *p, void *pNotif
3740: 79 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 y){. const char
3750: 20 2a 7a 4c 61 62 65 6c 3b 0a 20 20 69 6e 74 20 *zLabel;. int
3760: 6e 4c 61 62 65 6c 2c 20 73 69 7a 65 3b 0a 0a 20 nLabel, size;..
3770: 20 69 66 28 20 53 62 53 5f 52 65 71 75 69 72 65 if( SbS_Require
3780: 53 74 61 63 6b 28 70 2c 20 31 2c 20 22 73 75 62 Stack(p, 1, "sub
3790: 6d 69 74 5f 74 69 63 6b 65 74 5f 63 68 61 6e 67 mit_ticket_chang
37a0: 65 22 29 20 29 20 72 65 74 75 72 6e 20 31 3b 0a e") ) return 1;.
37b0: 20 20 7a 4c 61 62 65 6c 20 3d 20 53 62 53 5f 53 zLabel = SbS_S
37c0: 74 61 63 6b 56 61 6c 75 65 28 70 2c 20 30 2c 20 tackValue(p, 0,
37d0: 26 6e 4c 61 62 65 6c 29 3b 0a 20 20 69 66 28 20 &nLabel);. if(
37e0: 53 62 53 5f 46 65 74 63 68 28 70 2c 20 7a 4c 61 SbS_Fetch(p, zLa
37f0: 62 65 6c 2c 20 6e 4c 61 62 65 6c 2c 20 26 73 69 bel, nLabel, &si
3800: 7a 65 29 21 3d 30 20 29 7b 0a 20 20 20 20 63 68 ze)!=0 ){. ch
3810: 61 72 20 2a 7a 44 61 74 65 2c 20 2a 7a 55 75 69 ar *zDate, *zUui
3820: 64 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 d;. int i;.
3830: 20 20 69 6e 74 20 72 69 64 3b 0a 20 20 20 20 42 int rid;. B
3840: 6c 6f 62 20 74 6b 74 63 68 6e 67 2c 20 63 6b 73 lob tktchng, cks
3850: 75 6d 3b 0a 0a 20 20 20 20 28 2a 28 69 6e 74 2a um;.. (*(int*
3860: 29 70 4e 6f 74 69 66 79 29 20 3d 20 31 3b 0a 20 )pNotify) = 1;.
3870: 20 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 74 6b blob_zero(&tk
3880: 74 63 68 6e 67 29 3b 0a 20 20 20 20 7a 44 61 74 tchng);. zDat
3890: 65 20 3d 20 64 62 5f 74 65 78 74 28 30 2c 20 22 e = db_text(0, "
38a0: 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65 28 SELECT datetime(
38b0: 27 6e 6f 77 27 29 22 29 3b 0a 20 20 20 20 7a 44 'now')");. zD
38c0: 61 74 65 5b 31 30 5d 20 3d 20 27 54 27 3b 0a 20 ate[10] = 'T';.
38d0: 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 blob_appendf(
38e0: 26 74 6b 74 63 68 6e 67 2c 20 22 44 20 25 73 5c &tktchng, "D %s\
38f0: 6e 22 2c 20 7a 44 61 74 65 29 3b 0a 20 20 20 20 n", zDate);.
3900: 66 72 65 65 28 7a 44 61 74 65 29 3b 0a 20 20 20 free(zDate);.
3910: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 46 69 65 for(i=0; i<nFie
3920: 6c 64 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 ld; i++){.
3930: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 56 61 6c const char *zVal
3940: 75 65 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 56 ue;. int nV
3950: 61 6c 75 65 3b 0a 20 20 20 20 20 20 69 66 28 20 alue;. if(
3960: 61 7a 41 70 70 65 6e 64 5b 69 5d 20 29 7b 0a 20 azAppend[i] ){.
3970: 20 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 blob_appe
3980: 6e 64 66 28 26 74 6b 74 63 68 6e 67 2c 20 22 4a ndf(&tktchng, "J
3990: 20 2b 25 73 20 25 7a 5c 6e 22 2c 20 61 7a 46 69 +%s %z\n", azFi
39a0: 65 6c 64 5b 69 5d 2c 0a 20 20 20 20 20 20 20 20 eld[i],.
39b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 73 fos
39c0: 73 69 6c 69 7a 65 28 61 7a 41 70 70 65 6e 64 5b silize(azAppend[
39d0: 69 5d 2c 20 2d 31 29 29 3b 0a 20 20 20 20 20 20 i], -1));.
39e0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a }else{. z
39f0: 56 61 6c 75 65 20 3d 20 53 62 53 5f 46 65 74 63 Value = SbS_Fetc
3a00: 68 28 70 2c 20 61 7a 46 69 65 6c 64 5b 69 5d 2c h(p, azField[i],
3a10: 20 2d 31 2c 20 26 6e 56 61 6c 75 65 29 3b 0a 20 -1, &nValue);.
3a20: 20 20 20 20 20 20 20 69 66 28 20 7a 56 61 6c 75 if( zValu
3a30: 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 77 e ){. w
3a40: 68 69 6c 65 28 20 6e 56 61 6c 75 65 3e 30 20 26 hile( nValue>0 &
3a50: 26 20 69 73 73 70 61 63 65 28 7a 56 61 6c 75 65 & isspace(zValue
3a60: 5b 6e 56 61 6c 75 65 2d 31 5d 29 20 29 7b 20 6e [nValue-1]) ){ n
3a70: 56 61 6c 75 65 2d 2d 3b 20 7d 0a 20 20 20 20 20 Value--; }.
3a80: 20 20 20 20 20 69 66 28 20 73 74 72 6e 63 6d 70 if( strncmp
3a90: 28 7a 56 61 6c 75 65 2c 20 61 7a 56 61 6c 75 65 (zValue, azValue
3aa0: 5b 69 5d 2c 20 6e 56 61 6c 75 65 29 0a 20 20 20 [i], nValue).
3ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7c |
3ac0: 7c 20 73 74 72 6c 65 6e 28 61 7a 56 61 6c 75 65 | strlen(azValue
3ad0: 5b 69 5d 29 21 3d 6e 56 61 6c 75 65 20 29 7b 0a [i])!=nValue ){.
3ae0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6c 6f 62 blob
3af0: 5f 61 70 70 65 6e 64 66 28 26 74 6b 74 63 68 6e _appendf(&tktchn
3b00: 67 2c 20 22 4a 20 25 73 20 25 7a 5c 6e 22 2c 0a g, "J %s %z\n",.
3b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 a
3b20: 7a 46 69 65 6c 64 5b 69 5d 2c 20 66 6f 73 73 69 zField[i], fossi
3b30: 6c 69 7a 65 28 7a 56 61 6c 75 65 2c 6e 56 61 6c lize(zValue,nVal
3b40: 75 65 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 ue));.
3b50: 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 }. }.
3b60: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 55 }. }. zU
3b70: 75 69 64 20 3d 20 64 62 5f 74 65 78 74 28 30 2c uid = db_text(0,
3b80: 20 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 . "SELECT
3b90: 20 74 6b 74 5f 75 75 69 64 20 46 52 4f 4d 20 74 tkt_uuid FROM t
3ba0: 69 63 6b 65 74 20 57 48 45 52 45 20 74 6b 74 5f icket WHERE tkt_
3bb0: 75 75 69 64 20 47 4c 4f 42 20 27 25 73 2a 27 22 uuid GLOB '%s*'"
3bc0: 2c 0a 20 20 20 20 20 20 20 50 28 22 6e 61 6d 65 ,. P("name
3bd0: 22 29 0a 20 20 20 20 29 3b 0a 20 20 20 20 62 6c "). );. bl
3be0: 6f 62 5f 61 70 70 65 6e 64 66 28 26 74 6b 74 63 ob_appendf(&tktc
3bf0: 68 6e 67 2c 20 22 4b 20 25 73 5c 6e 22 2c 20 7a hng, "K %s\n", z
3c00: 55 75 69 64 29 3b 0a 20 20 20 20 28 2a 28 63 68 Uuid);. (*(ch
3c10: 61 72 2a 2a 29 70 4e 6f 74 69 66 79 29 20 3d 20 ar**)pNotify) =
3c20: 7a 55 75 69 64 3b 0a 20 20 20 20 62 6c 6f 62 5f zUuid;. blob_
3c30: 61 70 70 65 6e 64 66 28 26 74 6b 74 63 68 6e 67 appendf(&tktchng
3c40: 2c 20 22 55 20 25 46 5c 6e 22 2c 20 67 2e 7a 4c , "U %F\n", g.zL
3c50: 6f 67 69 6e 20 3f 20 67 2e 7a 4c 6f 67 69 6e 20 ogin ? g.zLogin
3c60: 3a 20 22 22 29 3b 0a 20 20 20 20 6d 64 35 73 75 : "");. md5su
3c70: 6d 5f 62 6c 6f 62 28 26 74 6b 74 63 68 6e 67 2c m_blob(&tktchng,
3c80: 20 26 63 6b 73 75 6d 29 3b 0a 20 20 20 20 62 6c &cksum);. bl
3c90: 6f 62 5f 61 70 70 65 6e 64 66 28 26 74 6b 74 63 ob_appendf(&tktc
3ca0: 68 6e 67 2c 20 22 5a 20 25 62 5c 6e 22 2c 20 26 hng, "Z %b\n", &
3cb0: 63 6b 73 75 6d 29 3b 0a 0a 23 69 66 20 31 0a 20 cksum);..#if 1.
3cc0: 20 20 20 40 20 3c 68 72 3e 3c 70 72 65 3e 0a 20 @ <hr><pre>.
3cd0: 20 20 20 40 20 25 68 28 62 6c 6f 62 5f 73 74 72 @ %h(blob_str
3ce0: 28 26 74 6b 74 63 68 6e 67 29 29 0a 20 20 20 20 (&tktchng)).
3cf0: 40 20 3c 2f 70 72 65 3e 3c 68 72 3e 0a 20 20 20 @ </pre><hr>.
3d00: 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 74 6b 74 63 blob_zero(&tktc
3d10: 68 6e 67 29 3b 0a 20 20 20 20 53 62 53 5f 50 6f hng);. SbS_Po
3d20: 70 28 70 2c 20 31 29 3b 0a 20 20 20 20 72 65 74 p(p, 1);. ret
3d30: 75 72 6e 20 53 42 53 5f 4f 4b 3b 0a 23 65 6e 64 urn SBS_OK;.#end
3d40: 69 66 0a 0a 20 20 20 20 72 69 64 20 3d 20 63 6f if.. rid = co
3d50: 6e 74 65 6e 74 5f 70 75 74 28 26 74 6b 74 63 68 ntent_put(&tktch
3d60: 6e 67 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 69 ng, 0, 0);. i
3d70: 66 28 20 72 69 64 3d 3d 30 20 29 7b 0a 20 20 20 f( rid==0 ){.
3d80: 20 20 20 66 6f 73 73 69 6c 5f 70 61 6e 69 63 28 fossil_panic(
3d90: 22 74 72 6f 75 62 6c 65 20 63 6f 6d 6d 69 74 74 "trouble committ
3da0: 69 6e 67 20 74 69 63 6b 65 74 3a 20 25 73 22 2c ing ticket: %s",
3db0: 20 67 2e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 g.zErrMsg);.
3dc0: 20 7d 0a 20 20 20 20 6d 61 6e 69 66 65 73 74 5f }. manifest_
3dd0: 63 72 6f 73 73 6c 69 6e 6b 28 72 69 64 2c 20 26 crosslink(rid, &
3de0: 74 6b 74 63 68 6e 67 29 3b 0a 20 20 20 20 72 65 tktchng);. re
3df0: 74 75 72 6e 20 53 42 53 5f 52 45 54 55 52 4e 3b turn SBS_RETURN;
3e00: 0a 20 20 7d 0a 20 20 53 62 53 5f 50 6f 70 28 70 . }. SbS_Pop(p
3e10: 2c 20 31 29 3b 0a 20 20 72 65 74 75 72 6e 20 53 , 1);. return S
3e20: 42 53 5f 4f 4b 3b 20 20 0a 7d 0a 0a 2f 2a 0a 2a BS_OK; .}../*.*
3e30: 2a 20 57 45 42 50 41 47 45 3a 20 74 6b 74 65 64 * WEBPAGE: tkted
3e40: 69 74 0a 2a 2f 0a 76 6f 69 64 20 74 6b 74 65 64 it.*/.void tkted
3e50: 69 74 5f 70 61 67 65 28 76 6f 69 64 29 7b 0a 20 it_page(void){.
3e60: 20 63 68 61 72 20 2a 7a 53 63 72 69 70 74 3b 0a char *zScript;.
3e70: 20 20 69 6e 74 20 6e 53 63 72 69 70 74 3b 0a 20 int nScript;.
3e80: 20 69 6e 74 20 63 68 6e 67 65 64 20 3d 20 30 3b int chnged = 0;
3e90: 0a 20 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20 . int nName;.
3ea0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d const char *zNam
3eb0: 65 3b 0a 20 20 69 6e 74 20 6e 52 65 63 3b 0a 0a e;. int nRec;..
3ec0: 20 20 6c 6f 67 69 6e 5f 63 68 65 63 6b 5f 63 72 login_check_cr
3ed0: 65 64 65 6e 74 69 61 6c 73 28 29 3b 0a 20 20 69 edentials();. i
3ee0: 66 28 20 21 67 2e 6f 6b 41 70 6e 64 54 6b 74 20 f( !g.okApndTkt
3ef0: 26 26 20 21 67 2e 6f 6b 57 72 54 6b 74 20 29 7b && !g.okWrTkt ){
3f00: 20 6c 6f 67 69 6e 5f 6e 65 65 64 65 64 28 29 3b login_needed();
3f10: 20 72 65 74 75 72 6e 3b 20 7d 0a 20 20 73 74 79 return; }. sty
3f20: 6c 65 5f 68 65 61 64 65 72 28 22 45 64 69 74 20 le_header("Edit
3f30: 54 69 63 6b 65 74 22 29 3b 0a 20 20 7a 4e 61 6d Ticket");. zNam
3f40: 65 20 3d 20 50 28 22 6e 61 6d 65 22 29 3b 0a 20 e = P("name");.
3f50: 20 69 66 28 20 7a 4e 61 6d 65 3d 3d 30 20 7c 7c if( zName==0 ||
3f60: 20 28 6e 4e 61 6d 65 20 3d 20 73 74 72 6c 65 6e (nName = strlen
3f70: 28 7a 4e 61 6d 65 29 29 3c 34 20 7c 7c 20 6e 4e (zName))<4 || nN
3f80: 61 6d 65 3e 55 55 49 44 5f 53 49 5a 45 0a 20 20 ame>UUID_SIZE.
3f90: 20 20 20 20 20 20 20 20 7c 7c 20 21 76 61 6c 69 || !vali
3fa0: 64 61 74 65 31 36 28 7a 4e 61 6d 65 2c 6e 4e 61 date16(zName,nNa
3fb0: 6d 65 29 20 29 7b 0a 20 20 20 20 40 20 3c 66 6f me) ){. @ <fo
3fc0: 6e 74 20 63 6f 6c 6f 72 3d 22 72 65 64 22 3e 3c nt color="red"><
3fd0: 62 3e 4e 6f 74 20 61 20 76 61 6c 69 64 20 74 69 b>Not a valid ti
3fe0: 63 6b 65 74 20 69 64 3a 20 5c 22 25 68 28 7a 4e cket id: \"%h(zN
3ff0: 61 6d 65 29 5c 22 3c 2f 62 3e 3c 2f 66 6f 6e 74 ame)\"</b></font
4000: 3e 0a 20 20 20 20 73 74 79 6c 65 5f 66 6f 6f 74 >. style_foot
4010: 65 72 28 29 3b 0a 20 20 20 20 72 65 74 75 72 6e er();. return
4020: 3b 0a 20 20 7d 0a 20 20 6e 52 65 63 20 3d 20 64 ;. }. nRec = d
4030: 62 5f 69 6e 74 28 30 2c 20 22 53 45 4c 45 43 54 b_int(0, "SELECT
4040: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 count(*) FROM t
4050: 69 63 6b 65 74 20 57 48 45 52 45 20 74 6b 74 5f icket WHERE tkt_
4060: 75 75 69 64 20 47 4c 4f 42 20 27 25 71 2a 27 22 uuid GLOB '%q*'"
4070: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
4080: 20 20 7a 4e 61 6d 65 29 3b 0a 20 20 69 66 28 20 zName);. if(
4090: 6e 52 65 63 3d 3d 30 20 29 7b 0a 20 20 20 20 40 nRec==0 ){. @
40a0: 20 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 72 65 <font color="re
40b0: 64 22 3e 3c 62 3e 4e 6f 20 73 75 63 68 20 74 69 d"><b>No such ti
40c0: 63 6b 65 74 3a 20 5c 22 25 68 28 7a 4e 61 6d 65 cket: \"%h(zName
40d0: 29 5c 22 3c 2f 62 3e 3c 2f 66 6f 6e 74 3e 0a 20 )\"</b></font>.
40e0: 20 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 style_footer(
40f0: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 );. return;.
4100: 20 7d 0a 20 20 69 66 28 20 6e 52 65 63 3e 31 20 }. if( nRec>1
4110: 29 7b 0a 20 20 20 20 40 20 3c 66 6f 6e 74 20 63 ){. @ <font c
4120: 6f 6c 6f 72 3d 22 72 65 64 22 3e 3c 62 3e 25 64 olor="red"><b>%d
4130: 28 6e 52 65 63 29 20 74 69 63 6b 65 74 73 20 62 (nRec) tickets b
4140: 65 67 69 6e 20 77 69 74 68 3a 20 5c 22 25 68 28 egin with: \"%h(
4150: 7a 4e 61 6d 65 29 5c 22 3c 2f 62 3e 3c 2f 66 6f zName)\"</b></fo
4160: 6e 74 3e 0a 20 20 20 20 73 74 79 6c 65 5f 66 6f nt>. style_fo
4170: 6f 74 65 72 28 29 3b 0a 20 20 20 20 72 65 74 75 oter();. retu
4180: 72 6e 3b 0a 20 20 7d 0a 20 20 74 69 63 6b 65 74 rn;. }. ticket
4190: 5f 69 6e 69 74 28 29 3b 0a 20 20 67 65 74 41 6c _init();. getAl
41a0: 6c 54 69 63 6b 65 74 46 69 65 6c 64 73 28 29 3b lTicketFields();
41b0: 0a 20 20 69 6e 69 74 69 61 6c 69 7a 65 56 61 72 . initializeVar
41c0: 69 61 62 6c 65 73 46 72 6f 6d 43 47 49 28 29 3b iablesFromCGI();
41d0: 0a 20 20 69 6e 69 74 69 61 6c 69 7a 65 56 61 72 . initializeVar
41e0: 69 61 62 6c 65 73 46 72 6f 6d 44 62 28 29 3b 0a iablesFromDb();.
41f0: 20 20 40 20 3c 66 6f 72 6d 20 6d 65 74 68 6f 64 @ <form method
4200: 3d 22 50 4f 53 54 22 20 61 63 74 69 6f 6e 3d 22 ="POST" action="
4210: 25 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 74 %s(g.zBaseURL)/t
4220: 6b 74 65 64 69 74 22 3e 0a 20 20 40 20 3c 69 6e ktedit">. @ <in
4230: 70 75 74 20 74 79 70 65 3d 22 68 69 64 64 65 6e put type="hidden
4240: 22 20 6e 61 6d 65 3d 22 6e 61 6d 65 22 20 76 61 " name="name" va
4250: 6c 75 65 3d 22 25 73 28 7a 4e 61 6d 65 29 22 3e lue="%s(zName)">
4260: 0a 20 20 7a 53 63 72 69 70 74 20 3d 20 28 63 68 . zScript = (ch
4270: 61 72 2a 29 53 62 53 5f 46 65 74 63 68 28 70 49 ar*)SbS_Fetch(pI
4280: 6e 74 65 72 70 2c 20 22 74 6b 74 65 64 69 74 5f nterp, "tktedit_
4290: 74 65 6d 70 6c 61 74 65 22 2c 20 2d 31 2c 20 26 template", -1, &
42a0: 6e 53 63 72 69 70 74 29 3b 0a 20 20 7a 53 63 72 nScript);. zScr
42b0: 69 70 74 20 3d 20 6d 70 72 69 6e 74 66 28 22 25 ipt = mprintf("%
42c0: 2e 2a 73 22 2c 20 6e 53 63 72 69 70 74 2c 20 7a .*s", nScript, z
42d0: 53 63 72 69 70 74 29 3b 0a 20 20 53 62 53 5f 41 Script);. SbS_A
42e0: 64 64 56 65 72 62 28 70 49 6e 74 65 72 70 2c 20 ddVerb(pInterp,
42f0: 22 61 70 70 65 6e 64 5f 72 65 6d 61 72 6b 22 2c "append_remark",
4300: 20 61 70 70 65 6e 64 52 65 6d 61 72 6b 43 6d 64 appendRemarkCmd
4310: 2c 20 30 29 3b 0a 20 20 53 62 53 5f 41 64 64 56 , 0);. SbS_AddV
4320: 65 72 62 28 70 49 6e 74 65 72 70 2c 20 22 73 75 erb(pInterp, "su
4330: 62 6d 69 74 5f 74 69 63 6b 65 74 5f 63 68 61 6e bmit_ticket_chan
4340: 67 65 22 2c 20 73 75 62 6d 69 74 45 64 69 74 43 ge", submitEditC
4350: 6d 64 2c 20 28 76 6f 69 64 2a 29 26 63 68 6e 67 md, (void*)&chng
4360: 65 64 29 3b 0a 20 20 69 66 28 20 53 62 53 5f 52 ed);. if( SbS_R
4370: 65 6e 64 65 72 28 70 49 6e 74 65 72 70 2c 20 7a ender(pInterp, z
4380: 53 63 72 69 70 74 29 3d 3d 53 42 53 5f 52 45 54 Script)==SBS_RET
4390: 55 52 4e 20 26 26 20 63 68 6e 67 65 64 20 29 7b URN && chnged ){
43a0: 0a 20 20 20 20 63 67 69 5f 72 65 64 69 72 65 63 . cgi_redirec
43b0: 74 28 6d 70 72 69 6e 74 66 28 22 25 73 2f 74 6b t(mprintf("%s/tk
43c0: 74 76 69 65 77 2f 25 73 22 2c 20 67 2e 7a 42 61 tview/%s", g.zBa
43d0: 73 65 55 52 4c 2c 20 7a 4e 61 6d 65 29 29 3b 0a seURL, zName));.
43e0: 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a return;. }.
43f0: 20 20 40 20 3c 2f 66 6f 72 6d 3e 0a 20 20 73 74 @ </form>. st
4400: 79 6c 65 5f 66 6f 6f 74 65 72 28 29 3b 0a 7d 0a yle_footer();.}.