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 31 30 20 44 2e 20 52 69 63 68 (c) 2010 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 53 69 6d 70 6c 69 66 69 65 64 20 42 53 44 20 Simplified BSD
00a0: 4c 69 63 65 6e 73 65 20 28 61 6c 73 6f 0a 2a 2a License (also.**
00b0: 20 6b 6e 6f 77 6e 20 61 73 20 74 68 65 20 22 32 known as the "2
00c0: 2d 43 6c 61 75 73 65 20 4c 69 63 65 6e 73 65 22 -Clause License"
00d0: 20 6f 72 20 22 46 72 65 65 42 53 44 20 4c 69 63 or "FreeBSD Lic
00e0: 65 6e 73 65 22 2e 29 0a 0a 2a 2a 20 54 68 69 73 ense".)..** This
00f0: 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69 73 74 program is dist
0100: 72 69 62 75 74 65 64 20 69 6e 20 74 68 65 20 68 ributed in the h
0110: 6f 70 65 20 74 68 61 74 20 69 74 20 77 69 6c 6c ope that it will
0120: 20 62 65 20 75 73 65 66 75 6c 2c 0a 2a 2a 20 62 be useful,.** b
0130: 75 74 20 77 69 74 68 6f 75 74 20 61 6e 79 20 77 ut without any w
0140: 61 72 72 61 6e 74 79 3b 20 77 69 74 68 6f 75 74 arranty; without
0150: 20 65 76 65 6e 20 74 68 65 20 69 6d 70 6c 69 65 even the implie
0160: 64 20 77 61 72 72 61 6e 74 79 20 6f 66 0a 2a 2a d warranty of.**
0170: 20 6d 65 72 63 68 61 6e 74 61 62 69 6c 69 74 79 merchantability
0180: 20 6f 72 20 66 69 74 6e 65 73 73 20 66 6f 72 20 or fitness for
0190: 61 20 70 61 72 74 69 63 75 6c 61 72 20 70 75 72 a particular pur
01a0: 70 6f 73 65 2e 0a 2a 2a 0a 2a 2a 20 41 75 74 68 pose..**.** Auth
01b0: 6f 72 20 63 6f 6e 74 61 63 74 20 69 6e 66 6f 72 or contact infor
01c0: 6d 61 74 69 6f 6e 3a 0a 2a 2a 20 20 20 64 72 68 mation:.** drh
01d0: 40 68 77 61 63 69 2e 63 6f 6d 0a 2a 2a 20 20 20 @hwaci.com.**
01e0: 68 74 74 70 3a 2f 2f 77 77 77 2e 68 77 61 63 69 http://www.hwaci
01f0: 2e 63 6f 6d 2f 64 72 68 2f 0a 2a 2a 0a 2a 2a 2a .com/drh/.**.***
0200: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0210: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0220: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0230: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0240: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 0a ************.**.
0250: 2a 2a 20 54 68 69 73 20 66 69 6c 65 20 63 6f 6e ** This file con
0260: 74 61 69 6e 73 20 63 6f 64 65 20 74 6f 20 64 6f tains code to do
0270: 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20 65 formatting of e
0280: 76 65 6e 74 20 6d 65 73 73 61 67 65 73 3a 0a 2a vent messages:.*
0290: 2a 0a 2a 2a 20 20 20 20 20 4d 69 6c 65 73 74 6f *.** Milesto
02a0: 6e 65 73 0a 2a 2a 20 20 20 20 20 42 6c 6f 67 20 nes.** Blog
02b0: 70 6f 73 74 73 0a 2a 2a 20 20 20 20 20 4e 65 77 posts.** New
02c0: 20 61 72 74 69 63 6c 65 73 0a 2a 2a 20 20 20 20 articles.**
02d0: 20 50 72 6f 63 65 73 73 20 63 68 65 63 6b 70 6f Process checkpo
02e0: 69 6e 74 73 0a 2a 2a 20 20 20 20 20 41 6e 6e 6f ints.** Anno
02f0: 75 6e 63 65 6d 65 6e 74 73 0a 2a 2f 0a 23 69 6e uncements.*/.#in
0300: 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e clude <assert.h>
0310: 0a 23 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 .#include <ctype
0320: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f .h>.#include "co
0330: 6e 66 69 67 2e 68 22 0a 23 69 6e 63 6c 75 64 65 nfig.h".#include
0340: 20 22 65 76 65 6e 74 2e 68 22 0a 0a 2f 2a 0a 2a "event.h"../*.*
0350: 2a 20 4f 75 74 70 75 74 20 61 20 68 79 70 65 72 * Output a hyper
0360: 6c 69 6e 6b 20 74 6f 20 61 6e 20 65 76 65 6e 74 link to an event
0370: 20 67 69 76 65 6e 20 69 74 73 20 74 61 67 69 64 given its tagid
0380: 2e 0a 2a 2f 0a 76 6f 69 64 20 68 79 70 65 72 6c ..*/.void hyperl
0390: 69 6e 6b 5f 74 6f 5f 65 76 65 6e 74 5f 74 61 67 ink_to_event_tag
03a0: 69 64 28 69 6e 74 20 74 61 67 69 64 29 7b 0a 20 id(int tagid){.
03b0: 20 63 68 61 72 20 2a 7a 45 76 65 6e 74 49 64 3b char *zEventId;
03c0: 0a 20 20 7a 45 76 65 6e 74 49 64 20 3d 20 64 62 . zEventId = db
03d0: 5f 74 65 78 74 28 30 2c 20 22 53 45 4c 45 43 54 _text(0, "SELECT
03e0: 20 73 75 62 73 74 72 28 74 61 67 6e 61 6d 65 2c substr(tagname,
03f0: 20 37 29 20 46 52 4f 4d 20 74 61 67 20 57 48 45 7) FROM tag WHE
0400: 52 45 20 74 61 67 69 64 3d 25 64 22 2c 0a 20 20 RE tagid=%d",.
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0420: 20 20 20 74 61 67 69 64 29 3b 0a 20 20 40 20 5b tagid);. @ [
0430: 25 7a 28 68 72 65 66 28 22 25 52 2f 65 76 65 6e %z(href("%R/even
0440: 74 2f 25 73 22 2c 7a 45 76 65 6e 74 49 64 29 29 t/%s",zEventId))
0450: 25 53 28 7a 45 76 65 6e 74 49 64 29 3c 2f 61 3e %S(zEventId)</a>
0460: 5d 0a 20 20 66 72 65 65 28 7a 45 76 65 6e 74 49 ]. free(zEventI
0470: 64 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 d);.}../*.** WEB
0480: 50 41 47 45 3a 20 65 76 65 6e 74 0a 2a 2a 20 55 PAGE: event.** U
0490: 52 4c 3a 20 2f 65 76 65 6e 74 0a 2a 2a 20 50 41 RL: /event.** PA
04a0: 52 41 4d 45 54 45 52 53 3a 0a 2a 2a 0a 2a 2a 20 RAMETERS:.**.**
04b0: 20 6e 61 6d 65 3d 45 56 45 4e 54 49 44 20 20 20 name=EVENTID
04c0: 20 20 20 2f 2f 20 49 64 65 6e 74 69 66 79 20 74 // Identify t
04d0: 68 65 20 65 76 65 6e 74 20 74 6f 20 64 69 73 70 he event to disp
04e0: 6c 61 79 20 45 56 45 4e 54 49 44 20 6d 75 73 74 lay EVENTID must
04f0: 20 62 65 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 be complete.**
0500: 20 61 69 64 3d 41 52 54 49 46 41 43 54 49 44 20 aid=ARTIFACTID
0510: 20 20 20 2f 2f 20 57 68 69 63 68 20 73 70 65 63 // Which spec
0520: 69 66 69 63 20 76 65 72 73 69 6f 6e 20 6f 66 20 ific version of
0530: 74 68 65 20 65 76 65 6e 74 2e 20 20 4f 70 74 69 the event. Opti
0540: 6f 6e 61 6c 2e 0a 2a 2a 20 20 76 3d 42 4f 4f 4c onal..** v=BOOL
0550: 45 41 4e 20 20 20 20 20 20 20 20 20 2f 2f 20 53 EAN // S
0560: 68 6f 77 20 64 65 74 61 69 6c 73 20 69 66 20 54 how details if T
0570: 52 55 45 2e 20 20 44 65 66 61 75 6c 74 20 69 73 RUE. Default is
0580: 20 46 41 4c 53 45 2e 20 20 4f 70 74 69 6f 6e 61 FALSE. Optiona
0590: 6c 2e 0a 2a 2a 0a 2a 2a 20 44 69 73 70 6c 61 79 l..**.** Display
05a0: 20 61 6e 20 65 78 69 73 74 69 6e 67 20 65 76 65 an existing eve
05b0: 6e 74 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 nt identified by
05c0: 20 45 56 45 4e 54 49 44 0a 2a 2f 0a 76 6f 69 64 EVENTID.*/.void
05d0: 20 65 76 65 6e 74 5f 70 61 67 65 28 76 6f 69 64 event_page(void
05e0: 29 7b 0a 20 20 69 6e 74 20 72 69 64 20 3d 20 30 ){. int rid = 0
05f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a ; /*
0600: 20 72 69 64 20 6f 66 20 74 68 65 20 65 76 65 6e rid of the even
0610: 74 20 61 72 74 69 66 61 63 74 20 2a 2f 0a 20 20 t artifact */.
0620: 63 68 61 72 20 2a 7a 55 75 69 64 3b 20 20 20 20 char *zUuid;
0630: 20 20 20 20 20 20 20 20 20 2f 2a 20 55 55 49 44 /* UUID
0640: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 corresponding t
0650: 6f 20 72 69 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 o rid */. const
0660: 20 63 68 61 72 20 2a 7a 45 76 65 6e 74 49 64 3b char *zEventId;
0670: 20 20 20 20 2f 2a 20 45 76 65 6e 74 20 69 64 65 /* Event ide
0680: 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20 63 6f 6e ntifier */. con
0690: 73 74 20 63 68 61 72 20 2a 7a 56 65 72 62 6f 73 st char *zVerbos
06a0: 65 3b 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f e; /* Value o
06b0: 66 20 76 65 72 62 6f 73 65 20 6f 70 74 69 6f 6e f verbose option
06c0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 54 69 */. char *zETi
06d0: 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f me; /
06e0: 2a 20 54 69 6d 65 20 6f 66 20 74 68 65 20 65 76 * Time of the ev
06f0: 65 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a ent */. char *z
0700: 41 54 69 6d 65 3b 20 20 20 20 20 20 20 20 20 20 ATime;
0710: 20 20 2f 2a 20 54 69 6d 65 20 74 68 65 20 61 72 /* Time the ar
0720: 74 69 66 61 63 74 20 77 61 73 20 63 72 65 61 74 tifact was creat
0730: 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73 70 65 63 ed */. int spec
0740: 52 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 Rid;
0750: 20 2f 2a 20 72 69 64 20 73 70 65 63 69 66 69 65 /* rid specifie
0760: 64 20 62 79 20 61 69 64 3d 20 70 61 72 61 6d 65 d by aid= parame
0770: 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 70 72 65 ter */. int pre
0780: 76 52 69 64 2c 20 6e 65 78 74 52 69 64 3b 20 20 vRid, nextRid;
0790: 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 6f 72 /* Previous or
07a0: 20 6e 65 78 74 20 65 64 69 74 73 20 6f 66 20 74 next edits of t
07b0: 68 69 73 20 65 76 65 6e 74 20 2a 2f 0a 20 20 4d his event */. M
07c0: 61 6e 69 66 65 73 74 20 2a 70 45 76 65 6e 74 3b anifest *pEvent;
07d0: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73 65 /* Parse
07e0: 64 20 65 76 65 6e 74 20 61 72 74 69 66 61 63 74 d event artifact
07f0: 20 2a 2f 0a 20 20 42 6c 6f 62 20 66 75 6c 6c 62 */. Blob fullb
0800: 6f 64 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f ody; /
0810: 2a 20 43 6f 6d 70 6c 65 74 65 20 63 6f 6e 74 65 * Complete conte
0820: 6e 74 20 6f 66 20 74 68 65 20 65 76 65 6e 74 20 nt of the event
0830: 62 6f 64 79 20 2a 2f 0a 20 20 42 6c 6f 62 20 74 body */. Blob t
0840: 69 74 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 itle;
0850: 20 20 20 2f 2a 20 54 69 74 6c 65 20 65 78 74 72 /* Title extr
0860: 61 63 74 65 64 20 66 72 6f 6d 20 74 68 65 20 65 acted from the e
0870: 76 65 6e 74 20 62 6f 64 79 20 2a 2f 0a 20 20 42 vent body */. B
0880: 6c 6f 62 20 74 61 69 6c 3b 20 20 20 20 20 20 20 lob tail;
0890: 20 20 20 20 20 20 20 20 2f 2a 20 45 76 65 6e 74 /* Event
08a0: 20 62 6f 64 79 20 74 68 61 74 20 63 6f 6d 65 73 body that comes
08b0: 20 61 66 74 65 72 20 74 68 65 20 74 69 74 6c 65 after the title
08c0: 20 2a 2f 0a 20 20 53 74 6d 74 20 71 31 3b 20 20 */. Stmt q1;
08d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
08e0: 2a 20 51 75 65 72 79 20 74 6f 20 73 65 61 72 63 * Query to searc
08f0: 68 20 66 6f 72 20 74 68 65 20 65 76 65 6e 74 20 h for the event
0900: 2a 2f 0a 20 20 69 6e 74 20 76 65 72 62 6f 73 65 */. int verbose
0910: 46 6c 61 67 3b 20 20 20 20 20 20 20 20 20 2f 2a Flag; /*
0920: 20 54 72 75 65 20 74 6f 20 73 68 6f 77 20 64 65 True to show de
0930: 74 61 69 6c 73 20 2a 2f 0a 0a 0a 20 20 2f 2a 20 tails */... /*
0940: 77 69 6b 69 2d 72 65 61 64 20 70 72 69 76 69 6c wiki-read privil
0950: 65 67 65 20 69 73 20 6e 65 65 64 65 64 20 69 6e ege is needed in
0960: 20 6f 72 64 65 72 20 74 6f 20 72 65 61 64 20 65 order to read e
0970: 76 65 6e 74 73 2e 0a 20 20 2a 2f 0a 20 20 6c 6f vents.. */. lo
0980: 67 69 6e 5f 63 68 65 63 6b 5f 63 72 65 64 65 6e gin_check_creden
0990: 74 69 61 6c 73 28 29 3b 0a 20 20 69 66 28 20 21 tials();. if( !
09a0: 67 2e 70 65 72 6d 2e 52 64 57 69 6b 69 20 29 7b g.perm.RdWiki ){
09b0: 0a 20 20 20 20 6c 6f 67 69 6e 5f 6e 65 65 64 65 . login_neede
09c0: 64 28 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b d();. return;
09d0: 0a 20 20 7d 0a 0a 20 20 7a 45 76 65 6e 74 49 64 . }.. zEventId
09e0: 20 3d 20 50 28 22 6e 61 6d 65 22 29 3b 0a 20 20 = P("name");.
09f0: 69 66 28 20 7a 45 76 65 6e 74 49 64 3d 3d 30 20 if( zEventId==0
0a00: 29 7b 20 66 6f 73 73 69 6c 5f 72 65 64 69 72 65 ){ fossil_redire
0a10: 63 74 5f 68 6f 6d 65 28 29 3b 20 72 65 74 75 72 ct_home(); retur
0a20: 6e 3b 20 7d 0a 20 20 7a 55 75 69 64 20 3d 20 28 n; }. zUuid = (
0a30: 63 68 61 72 2a 29 50 28 22 61 69 64 22 29 3b 0a char*)P("aid");.
0a40: 20 20 73 70 65 63 52 69 64 20 3d 20 7a 55 75 69 specRid = zUui
0a50: 64 20 3f 20 75 75 69 64 5f 74 6f 5f 72 69 64 28 d ? uuid_to_rid(
0a60: 7a 55 75 69 64 2c 20 30 29 20 3a 20 30 3b 0a 20 zUuid, 0) : 0;.
0a70: 20 72 69 64 20 3d 20 6e 65 78 74 52 69 64 20 3d rid = nextRid =
0a80: 20 70 72 65 76 52 69 64 20 3d 20 30 3b 0a 20 20 prevRid = 0;.
0a90: 64 62 5f 70 72 65 70 61 72 65 28 26 71 31 2c 0a db_prepare(&q1,.
0aa0: 20 20 20 20 20 22 53 45 4c 45 43 54 20 72 69 64 "SELECT rid
0ab0: 20 46 52 4f 4d 20 74 61 67 78 72 65 66 22 0a 20 FROM tagxref".
0ac0: 20 20 20 20 22 20 57 48 45 52 45 20 74 61 67 69 " WHERE tagi
0ad0: 64 3d 28 53 45 4c 45 43 54 20 74 61 67 69 64 20 d=(SELECT tagid
0ae0: 46 52 4f 4d 20 74 61 67 20 57 48 45 52 45 20 74 FROM tag WHERE t
0af0: 61 67 6e 61 6d 65 20 47 4c 4f 42 20 27 65 76 65 agname GLOB 'eve
0b00: 6e 74 2d 25 71 2a 27 29 22 0a 20 20 20 20 20 22 nt-%q*')". "
0b10: 20 4f 52 44 45 52 20 42 59 20 6d 74 69 6d 65 20 ORDER BY mtime
0b20: 44 45 53 43 22 2c 0a 20 20 20 20 20 7a 45 76 65 DESC",. zEve
0b30: 6e 74 49 64 0a 20 20 29 3b 0a 20 20 77 68 69 6c ntId. );. whil
0b40: 65 28 20 64 62 5f 73 74 65 70 28 26 71 31 29 3d e( db_step(&q1)=
0b50: 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 =SQLITE_ROW ){.
0b60: 20 20 20 6e 65 78 74 52 69 64 20 3d 20 72 69 64 nextRid = rid
0b70: 3b 0a 20 20 20 20 72 69 64 20 3d 20 64 62 5f 63 ;. rid = db_c
0b80: 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 31 2c 20 30 olumn_int(&q1, 0
0b90: 29 3b 0a 20 20 20 20 69 66 28 20 73 70 65 63 52 );. if( specR
0ba0: 69 64 3d 3d 30 20 7c 7c 20 73 70 65 63 52 69 64 id==0 || specRid
0bb0: 3d 3d 72 69 64 20 29 7b 0a 20 20 20 20 20 20 69 ==rid ){. i
0bc0: 66 28 20 64 62 5f 73 74 65 70 28 26 71 31 29 3d f( db_step(&q1)=
0bd0: 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 =SQLITE_ROW ){.
0be0: 20 20 20 20 20 20 20 70 72 65 76 52 69 64 20 3d prevRid =
0bf0: 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 db_column_int(&
0c00: 71 31 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a q1, 0);. }.
0c10: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 break;.
0c20: 20 7d 0a 20 20 7d 0a 20 20 64 62 5f 66 69 6e 61 }. }. db_fina
0c30: 6c 69 7a 65 28 26 71 31 29 3b 0a 20 20 69 66 28 lize(&q1);. if(
0c40: 20 72 69 64 3d 3d 30 20 7c 7c 20 28 73 70 65 63 rid==0 || (spec
0c50: 52 69 64 21 3d 30 20 26 26 20 73 70 65 63 52 69 Rid!=0 && specRi
0c60: 64 21 3d 72 69 64 29 20 29 7b 0a 20 20 20 20 73 d!=rid) ){. s
0c70: 74 79 6c 65 5f 68 65 61 64 65 72 28 22 4e 6f 20 tyle_header("No
0c80: 53 75 63 68 20 45 76 65 6e 74 22 29 3b 0a 20 20 Such Event");.
0c90: 20 20 40 20 43 61 6e 6e 6f 74 20 6c 6f 63 61 74 @ Cannot locat
0ca0: 65 20 73 70 65 63 69 66 69 65 64 20 65 76 65 6e e specified even
0cb0: 74 0a 20 20 20 20 73 74 79 6c 65 5f 66 6f 6f 74 t. style_foot
0cc0: 65 72 28 29 3b 0a 20 20 20 20 72 65 74 75 72 6e er();. return
0cd0: 3b 0a 20 20 7d 0a 20 20 7a 55 75 69 64 20 3d 20 ;. }. zUuid =
0ce0: 64 62 5f 74 65 78 74 28 30 2c 20 22 53 45 4c 45 db_text(0, "SELE
0cf0: 43 54 20 75 75 69 64 20 46 52 4f 4d 20 62 6c 6f CT uuid FROM blo
0d00: 62 20 57 48 45 52 45 20 72 69 64 3d 25 64 22 2c b WHERE rid=%d",
0d10: 20 72 69 64 29 3b 0a 20 20 7a 56 65 72 62 6f 73 rid);. zVerbos
0d20: 65 20 3d 20 50 28 22 76 22 29 3b 0a 20 20 69 66 e = P("v");. if
0d30: 28 20 21 7a 56 65 72 62 6f 73 65 20 29 7b 0a 20 ( !zVerbose ){.
0d40: 20 20 20 7a 56 65 72 62 6f 73 65 20 3d 20 50 28 zVerbose = P(
0d50: 22 76 65 72 62 6f 73 65 22 29 3b 0a 20 20 7d 0a "verbose");. }.
0d60: 20 20 69 66 28 20 21 7a 56 65 72 62 6f 73 65 20 if( !zVerbose
0d70: 29 7b 0a 20 20 20 20 7a 56 65 72 62 6f 73 65 20 ){. zVerbose
0d80: 3d 20 50 28 22 64 65 74 61 69 6c 22 29 3b 20 2f = P("detail"); /
0d90: 2a 20 64 65 70 72 65 63 61 74 65 64 20 2a 2f 0a * deprecated */.
0da0: 20 20 7d 0a 20 20 76 65 72 62 6f 73 65 46 6c 61 }. verboseFla
0db0: 67 20 3d 20 28 7a 56 65 72 62 6f 73 65 21 3d 30 g = (zVerbose!=0
0dc0: 29 20 26 26 20 21 69 73 5f 66 61 6c 73 65 28 7a ) && !is_false(z
0dd0: 56 65 72 62 6f 73 65 29 3b 0a 0a 20 20 2f 2a 20 Verbose);.. /*
0de0: 45 78 74 72 61 63 74 20 74 68 65 20 65 76 65 6e Extract the even
0df0: 74 20 63 6f 6e 74 65 6e 74 2e 0a 20 20 2a 2f 0a t content.. */.
0e00: 20 20 70 45 76 65 6e 74 20 3d 20 6d 61 6e 69 66 pEvent = manif
0e10: 65 73 74 5f 67 65 74 28 72 69 64 2c 20 43 46 54 est_get(rid, CFT
0e20: 59 50 45 5f 45 56 45 4e 54 29 3b 0a 20 20 69 66 YPE_EVENT);. if
0e30: 28 20 70 45 76 65 6e 74 3d 3d 30 20 29 7b 0a 20 ( pEvent==0 ){.
0e40: 20 20 20 66 6f 73 73 69 6c 5f 70 61 6e 69 63 28 fossil_panic(
0e50: 22 4f 62 6a 65 63 74 20 23 25 64 20 69 73 20 6e "Object #%d is n
0e60: 6f 74 20 61 6e 20 65 76 65 6e 74 22 2c 20 72 69 ot an event", ri
0e70: 64 29 3b 0a 20 20 7d 0a 20 20 62 6c 6f 62 5f 69 d);. }. blob_i
0e80: 6e 69 74 28 26 66 75 6c 6c 62 6f 64 79 2c 20 70 nit(&fullbody, p
0e90: 45 76 65 6e 74 2d 3e 7a 57 69 6b 69 2c 20 2d 31 Event->zWiki, -1
0ea0: 29 3b 0a 20 20 69 66 28 20 77 69 6b 69 5f 66 69 );. if( wiki_fi
0eb0: 6e 64 5f 74 69 74 6c 65 28 26 66 75 6c 6c 62 6f nd_title(&fullbo
0ec0: 64 79 2c 20 26 74 69 74 6c 65 2c 20 26 74 61 69 dy, &title, &tai
0ed0: 6c 29 20 29 7b 0a 20 20 20 20 73 74 79 6c 65 5f l) ){. style_
0ee0: 68 65 61 64 65 72 28 62 6c 6f 62 5f 73 74 72 28 header(blob_str(
0ef0: 26 74 69 74 6c 65 29 29 3b 0a 20 20 7d 65 6c 73 &title));. }els
0f00: 65 7b 0a 20 20 20 20 73 74 79 6c 65 5f 68 65 61 e{. style_hea
0f10: 64 65 72 28 22 45 76 65 6e 74 20 25 53 22 2c 20 der("Event %S",
0f20: 7a 45 76 65 6e 74 49 64 29 3b 0a 20 20 20 20 74 zEventId);. t
0f30: 61 69 6c 20 3d 20 66 75 6c 6c 62 6f 64 79 3b 0a ail = fullbody;.
0f40: 20 20 7d 0a 20 20 69 66 28 20 67 2e 70 65 72 6d }. if( g.perm
0f50: 2e 57 72 57 69 6b 69 20 26 26 20 67 2e 70 65 72 .WrWiki && g.per
0f60: 6d 2e 57 72 69 74 65 20 26 26 20 6e 65 78 74 52 m.Write && nextR
0f70: 69 64 3d 3d 30 20 29 7b 0a 20 20 20 20 73 74 79 id==0 ){. sty
0f80: 6c 65 5f 73 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 le_submenu_eleme
0f90: 6e 74 28 22 45 64 69 74 22 2c 20 22 45 64 69 74 nt("Edit", "Edit
0fa0: 22 2c 20 22 25 73 2f 65 76 65 6e 74 65 64 69 74 ", "%s/eventedit
0fb0: 3f 6e 61 6d 65 3d 25 73 22 2c 0a 20 20 20 20 20 ?name=%s",.
0fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0fd0: 20 20 20 20 20 67 2e 7a 54 6f 70 2c 20 7a 45 76 g.zTop, zEv
0fe0: 65 6e 74 49 64 29 3b 0a 20 20 7d 0a 20 20 7a 45 entId);. }. zE
0ff0: 54 69 6d 65 20 3d 20 64 62 5f 74 65 78 74 28 30 Time = db_text(0
1000: 2c 20 22 53 45 4c 45 43 54 20 64 61 74 65 74 69 , "SELECT dateti
1010: 6d 65 28 25 2e 31 37 67 29 22 2c 20 70 45 76 65 me(%.17g)", pEve
1020: 6e 74 2d 3e 72 45 76 65 6e 74 44 61 74 65 29 3b nt->rEventDate);
1030: 0a 20 20 73 74 79 6c 65 5f 73 75 62 6d 65 6e 75 . style_submenu
1040: 5f 65 6c 65 6d 65 6e 74 28 22 43 6f 6e 74 65 78 _element("Contex
1050: 74 22 2c 20 22 43 6f 6e 74 65 78 74 22 2c 20 22 t", "Context", "
1060: 25 73 2f 74 69 6d 65 6c 69 6e 65 3f 63 3d 25 54 %s/timeline?c=%T
1070: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ",.
1080: 20 20 20 20 20 20 20 20 20 20 20 67 2e 7a 54 6f g.zTo
1090: 70 2c 20 7a 45 54 69 6d 65 29 3b 0a 20 20 69 66 p, zETime);. if
10a0: 28 20 67 2e 70 65 72 6d 2e 48 79 70 65 72 6c 69 ( g.perm.Hyperli
10b0: 6e 6b 20 29 7b 0a 20 20 20 20 69 66 28 20 76 65 nk ){. if( ve
10c0: 72 62 6f 73 65 46 6c 61 67 20 29 7b 0a 20 20 20 rboseFlag ){.
10d0: 20 20 20 73 74 79 6c 65 5f 73 75 62 6d 65 6e 75 style_submenu
10e0: 5f 65 6c 65 6d 65 6e 74 28 22 50 6c 61 69 6e 22 _element("Plain"
10f0: 2c 20 22 50 6c 61 69 6e 22 2c 20 22 25 73 2f 65 , "Plain", "%s/e
1100: 76 65 6e 74 3f 6e 61 6d 65 3d 25 73 26 61 69 64 vent?name=%s&aid
1110: 3d 25 73 22 2c 0a 20 20 20 20 20 20 20 20 20 20 =%s",.
1120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1130: 20 20 67 2e 7a 54 6f 70 2c 20 7a 45 76 65 6e 74 g.zTop, zEvent
1140: 49 64 2c 20 7a 55 75 69 64 29 3b 0a 20 20 20 20 Id, zUuid);.
1150: 20 20 69 66 28 20 6e 65 78 74 52 69 64 20 29 7b if( nextRid ){
1160: 0a 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a . char *z
1170: 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 7a 4e Next;. zN
1180: 65 78 74 20 3d 20 64 62 5f 74 65 78 74 28 30 2c ext = db_text(0,
1190: 20 22 53 45 4c 45 43 54 20 75 75 69 64 20 46 52 "SELECT uuid FR
11a0: 4f 4d 20 62 6c 6f 62 20 57 48 45 52 45 20 72 69 OM blob WHERE ri
11b0: 64 3d 25 64 22 2c 20 6e 65 78 74 52 69 64 29 3b d=%d", nextRid);
11c0: 0a 20 20 20 20 20 20 20 20 73 74 79 6c 65 5f 73 . style_s
11d0: 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 ubmenu_element("
11e0: 4e 65 78 74 22 2c 20 22 4e 65 78 74 22 2c 0a 20 Next", "Next",.
11f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1200: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 25 73 "%s
1210: 2f 65 76 65 6e 74 3f 6e 61 6d 65 3d 25 73 26 61 /event?name=%s&a
1220: 69 64 3d 25 73 26 76 22 2c 0a 20 20 20 20 20 20 id=%s&v",.
1230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1240: 20 20 20 20 20 20 20 20 67 2e 7a 54 6f 70 2c 20 g.zTop,
1250: 7a 45 76 65 6e 74 49 64 2c 20 7a 4e 65 78 74 29 zEventId, zNext)
1260: 3b 0a 20 20 20 20 20 20 20 20 66 72 65 65 28 7a ;. free(z
1270: 4e 65 78 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20 Next);. }.
1280: 20 20 20 20 20 69 66 28 20 70 72 65 76 52 69 64 if( prevRid
1290: 20 29 7b 0a 20 20 20 20 20 20 20 20 63 68 61 72 ){. char
12a0: 20 2a 7a 50 72 65 76 3b 0a 20 20 20 20 20 20 20 *zPrev;.
12b0: 20 7a 50 72 65 76 20 3d 20 64 62 5f 74 65 78 74 zPrev = db_text
12c0: 28 30 2c 20 22 53 45 4c 45 43 54 20 75 75 69 64 (0, "SELECT uuid
12d0: 20 46 52 4f 4d 20 62 6c 6f 62 20 57 48 45 52 45 FROM blob WHERE
12e0: 20 72 69 64 3d 25 64 22 2c 20 70 72 65 76 52 69 rid=%d", prevRi
12f0: 64 29 3b 0a 20 20 20 20 20 20 20 20 73 74 79 6c d);. styl
1300: 65 5f 73 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e e_submenu_elemen
1310: 74 28 22 50 72 65 76 22 2c 20 22 50 72 65 76 22 t("Prev", "Prev"
1320: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
1330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1340: 22 25 73 2f 65 76 65 6e 74 3f 6e 61 6d 65 3d 25 "%s/event?name=%
1350: 73 26 61 69 64 3d 25 73 26 76 22 2c 0a 20 20 20 s&aid=%s&v",.
1360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1370: 20 20 20 20 20 20 20 20 20 20 20 67 2e 7a 54 6f g.zTo
1380: 70 2c 20 7a 45 76 65 6e 74 49 64 2c 20 7a 50 72 p, zEventId, zPr
1390: 65 76 29 3b 0a 20 20 20 20 20 20 20 20 66 72 65 ev);. fre
13a0: 65 28 7a 50 72 65 76 29 3b 0a 20 20 20 20 20 20 e(zPrev);.
13b0: 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 }. }else{.
13c0: 20 20 20 73 74 79 6c 65 5f 73 75 62 6d 65 6e 75 style_submenu
13d0: 5f 65 6c 65 6d 65 6e 74 28 22 44 65 74 61 69 6c _element("Detail
13e0: 22 2c 20 22 44 65 74 61 69 6c 22 2c 0a 20 20 20 ", "Detail",.
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1400: 20 20 20 20 20 20 20 20 20 22 25 73 2f 65 76 65 "%s/eve
1410: 6e 74 3f 6e 61 6d 65 3d 25 73 26 61 69 64 3d 25 nt?name=%s&aid=%
1420: 73 26 76 22 2c 0a 20 20 20 20 20 20 20 20 20 20 s&v",.
1430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1440: 20 20 67 2e 7a 54 6f 70 2c 20 7a 45 76 65 6e 74 g.zTop, zEvent
1450: 49 64 2c 20 7a 55 75 69 64 29 3b 0a 20 20 20 20 Id, zUuid);.
1460: 7d 0a 20 20 7d 0a 0a 20 20 69 66 28 20 76 65 72 }. }.. if( ver
1470: 62 6f 73 65 46 6c 61 67 20 26 26 20 67 2e 70 65 boseFlag && g.pe
1480: 72 6d 2e 48 79 70 65 72 6c 69 6e 6b 20 29 7b 0a rm.Hyperlink ){.
1490: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 63 int i;. c
14a0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 6c 72 20 onst char *zClr
14b0: 3d 20 30 3b 0a 20 20 20 20 42 6c 6f 62 20 63 6f = 0;. Blob co
14c0: 6d 6d 65 6e 74 3b 0a 0a 20 20 20 20 7a 41 54 69 mment;.. zATi
14d0: 6d 65 20 3d 20 64 62 5f 74 65 78 74 28 30 2c 20 me = db_text(0,
14e0: 22 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65 "SELECT datetime
14f0: 28 25 2e 31 37 67 29 22 2c 20 70 45 76 65 6e 74 (%.17g)", pEvent
1500: 2d 3e 72 44 61 74 65 29 3b 0a 20 20 20 20 40 20 ->rDate);. @
1510: 3c 70 3e 45 76 65 6e 74 20 5b 25 7a 28 68 72 65 <p>Event [%z(hre
1520: 66 28 22 25 52 2f 61 72 74 69 66 61 63 74 2f 25 f("%R/artifact/%
1530: 73 22 2c 7a 55 75 69 64 29 29 25 53 28 7a 55 75 s",zUuid))%S(zUu
1540: 69 64 29 3c 2f 61 3e 5d 20 61 74 0a 20 20 20 20 id)</a>] at.
1550: 40 20 5b 25 7a 28 68 72 65 66 28 22 25 52 2f 74 @ [%z(href("%R/t
1560: 69 6d 65 6c 69 6e 65 3f 63 3d 25 54 22 2c 7a 45 imeline?c=%T",zE
1570: 54 69 6d 65 29 29 25 73 28 7a 45 54 69 6d 65 29 Time))%s(zETime)
1580: 3c 2f 61 3e 5d 0a 20 20 20 20 40 20 65 6e 74 65 </a>]. @ ente
1590: 72 65 64 20 62 79 20 75 73 65 72 20 3c 62 3e 25 red by user <b>%
15a0: 68 28 70 45 76 65 6e 74 2d 3e 7a 55 73 65 72 29 h(pEvent->zUser)
15b0: 3c 2f 62 3e 20 6f 6e 0a 20 20 20 20 40 20 5b 25 </b> on. @ [%
15c0: 7a 28 68 72 65 66 28 22 25 52 2f 74 69 6d 65 6c z(href("%R/timel
15d0: 69 6e 65 3f 63 3d 25 54 22 2c 7a 41 54 69 6d 65 ine?c=%T",zATime
15e0: 29 29 25 73 28 7a 41 54 69 6d 65 29 3c 2f 61 3e ))%s(zATime)</a>
15f0: 5d 3a 3c 2f 70 3e 0a 20 20 20 20 40 20 3c 62 6c ]:</p>. @ <bl
1600: 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 20 20 66 6f ockquote>. fo
1610: 72 28 69 3d 30 3b 20 69 3c 70 45 76 65 6e 74 2d r(i=0; i<pEvent-
1620: 3e 6e 54 61 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 >nTag; i++){.
1630: 20 20 20 69 66 28 20 66 6f 73 73 69 6c 5f 73 74 if( fossil_st
1640: 72 63 6d 70 28 70 45 76 65 6e 74 2d 3e 61 54 61 rcmp(pEvent->aTa
1650: 67 5b 69 5d 2e 7a 4e 61 6d 65 2c 22 2b 62 67 63 g[i].zName,"+bgc
1660: 6f 6c 6f 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20 olor")==0 ){.
1670: 20 20 20 20 20 7a 43 6c 72 20 3d 20 70 45 76 65 zClr = pEve
1680: 6e 74 2d 3e 61 54 61 67 5b 69 5d 2e 7a 56 61 6c nt->aTag[i].zVal
1690: 75 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 ue;. }.
16a0: 7d 0a 20 20 20 20 69 66 28 20 7a 43 6c 72 20 26 }. if( zClr &
16b0: 26 20 7a 43 6c 72 5b 30 5d 3d 3d 30 20 29 20 7a & zClr[0]==0 ) z
16c0: 43 6c 72 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 Clr = 0;. if(
16d0: 20 7a 43 6c 72 20 29 7b 0a 20 20 20 20 20 20 40 zClr ){. @
16e0: 20 3c 64 69 76 20 73 74 79 6c 65 3d 22 62 61 63 <div style="bac
16f0: 6b 67 72 6f 75 6e 64 2d 63 6f 6c 6f 72 3a 20 25 kground-color: %
1700: 68 28 7a 43 6c 72 29 3b 22 3e 0a 20 20 20 20 7d h(zClr);">. }
1710: 65 6c 73 65 7b 0a 20 20 20 20 20 20 40 20 3c 64 else{. @ <d
1720: 69 76 3e 0a 20 20 20 20 7d 0a 20 20 20 20 62 6c iv>. }. bl
1730: 6f 62 5f 69 6e 69 74 28 26 63 6f 6d 6d 65 6e 74 ob_init(&comment
1740: 2c 20 70 45 76 65 6e 74 2d 3e 7a 43 6f 6d 6d 65 , pEvent->zComme
1750: 6e 74 2c 20 2d 31 29 3b 0a 20 20 20 20 77 69 6b nt, -1);. wik
1760: 69 5f 63 6f 6e 76 65 72 74 28 26 63 6f 6d 6d 65 i_convert(&comme
1770: 6e 74 2c 20 30 2c 20 57 49 4b 49 5f 49 4e 4c 49 nt, 0, WIKI_INLI
1780: 4e 45 29 3b 0a 20 20 20 20 62 6c 6f 62 5f 72 65 NE);. blob_re
1790: 73 65 74 28 26 63 6f 6d 6d 65 6e 74 29 3b 0a 20 set(&comment);.
17a0: 20 20 20 40 20 3c 2f 64 69 76 3e 0a 20 20 20 20 @ </div>.
17b0: 40 20 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c @ </blockquote><
17c0: 68 72 20 2f 3e 0a 20 20 7d 0a 0a 20 20 77 69 6b hr />. }.. wik
17d0: 69 5f 63 6f 6e 76 65 72 74 28 26 74 61 69 6c 2c i_convert(&tail,
17e0: 20 30 2c 20 30 29 3b 0a 20 20 73 74 79 6c 65 5f 0, 0);. style_
17f0: 66 6f 6f 74 65 72 28 29 3b 0a 20 20 6d 61 6e 69 footer();. mani
1800: 66 65 73 74 5f 64 65 73 74 72 6f 79 28 70 45 76 fest_destroy(pEv
1810: 65 6e 74 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 ent);.}../*.** W
1820: 45 42 50 41 47 45 3a 20 65 76 65 6e 74 65 64 69 EBPAGE: eventedi
1830: 74 0a 2a 2a 20 55 52 4c 3a 20 2f 65 76 65 6e 74 t.** URL: /event
1840: 65 64 69 74 3f 6e 61 6d 65 3d 45 56 45 4e 54 49 edit?name=EVENTI
1850: 44 0a 2a 2a 0a 2a 2a 20 45 64 69 74 20 61 6e 20 D.**.** Edit an
1860: 65 76 65 6e 74 2e 20 20 49 66 20 6e 61 6d 65 20 event. If name
1870: 69 73 20 6f 6d 69 74 74 65 64 2c 20 63 72 65 61 is omitted, crea
1880: 74 65 20 61 20 6e 65 77 20 65 76 65 6e 74 2e 0a te a new event..
1890: 2a 2f 0a 76 6f 69 64 20 65 76 65 6e 74 65 64 69 */.void eventedi
18a0: 74 5f 70 61 67 65 28 76 6f 69 64 29 7b 0a 20 20 t_page(void){.
18b0: 63 68 61 72 20 2a 7a 54 61 67 3b 0a 20 20 69 6e char *zTag;. in
18c0: 74 20 72 69 64 20 3d 20 30 3b 0a 20 20 42 6c 6f t rid = 0;. Blo
18d0: 62 20 65 76 65 6e 74 3b 0a 20 20 63 6f 6e 73 74 b event;. const
18e0: 20 63 68 61 72 20 2a 7a 45 76 65 6e 74 49 64 3b char *zEventId;
18f0: 0a 20 20 63 68 61 72 20 2a 7a 48 74 6d 6c 50 61 . char *zHtmlPa
1900: 67 65 4e 61 6d 65 3b 0a 20 20 69 6e 74 20 6e 3b geName;. int n;
1910: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a . const char *z
1920: 3b 0a 20 20 63 68 61 72 20 2a 7a 42 6f 64 79 20 ;. char *zBody
1930: 3d 20 28 63 68 61 72 2a 29 50 28 22 77 22 29 3b = (char*)P("w");
1940: 0a 20 20 63 68 61 72 20 2a 7a 45 54 69 6d 65 20 . char *zETime
1950: 3d 20 28 63 68 61 72 2a 29 50 28 22 74 22 29 3b = (char*)P("t");
1960: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a . const char *z
1970: 43 6f 6d 6d 65 6e 74 20 3d 20 50 28 22 63 22 29 Comment = P("c")
1980: 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a ;. const char *
1990: 7a 54 61 67 73 20 3d 20 50 28 22 67 22 29 3b 0a zTags = P("g");.
19a0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 const char *zC
19b0: 6c 72 3b 0a 0a 20 20 69 66 28 20 7a 42 6f 64 79 lr;.. if( zBody
19c0: 20 29 7b 0a 20 20 20 20 7a 42 6f 64 79 20 3d 20 ){. zBody =
19d0: 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20 7a 42 mprintf("%s", zB
19e0: 6f 64 79 29 3b 0a 20 20 7d 0a 20 20 6c 6f 67 69 ody);. }. logi
19f0: 6e 5f 63 68 65 63 6b 5f 63 72 65 64 65 6e 74 69 n_check_credenti
1a00: 61 6c 73 28 29 3b 0a 20 20 7a 45 76 65 6e 74 49 als();. zEventI
1a10: 64 20 3d 20 50 28 22 6e 61 6d 65 22 29 3b 0a 20 d = P("name");.
1a20: 20 69 66 28 20 7a 45 76 65 6e 74 49 64 3d 3d 30 if( zEventId==0
1a30: 20 29 7b 0a 20 20 20 20 7a 45 76 65 6e 74 49 64 ){. zEventId
1a40: 20 3d 20 64 62 5f 74 65 78 74 28 30 2c 20 22 53 = db_text(0, "S
1a50: 45 4c 45 43 54 20 6c 6f 77 65 72 28 68 65 78 28 ELECT lower(hex(
1a60: 72 61 6e 64 6f 6d 62 6c 6f 62 28 32 30 29 29 29 randomblob(20)))
1a70: 22 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 ");. }else{.
1a80: 20 69 6e 74 20 6e 45 76 65 6e 74 49 64 20 3d 20 int nEventId =
1a90: 73 74 72 6c 65 6e 28 7a 45 76 65 6e 74 49 64 29 strlen(zEventId)
1aa0: 3b 0a 20 20 20 20 69 66 28 20 6e 45 76 65 6e 74 ;. if( nEvent
1ab0: 49 64 21 3d 34 30 20 7c 7c 20 21 76 61 6c 69 64 Id!=40 || !valid
1ac0: 61 74 65 31 36 28 7a 45 76 65 6e 74 49 64 2c 20 ate16(zEventId,
1ad0: 34 30 29 20 29 7b 0a 20 20 20 20 20 20 66 6f 73 40) ){. fos
1ae0: 73 69 6c 5f 72 65 64 69 72 65 63 74 5f 68 6f 6d sil_redirect_hom
1af0: 65 28 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 e();. retur
1b00: 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 7a n;. }. }. z
1b10: 54 61 67 20 3d 20 6d 70 72 69 6e 74 66 28 22 65 Tag = mprintf("e
1b20: 76 65 6e 74 2d 25 73 22 2c 20 7a 45 76 65 6e 74 vent-%s", zEvent
1b30: 49 64 29 3b 0a 20 20 72 69 64 20 3d 20 64 62 5f Id);. rid = db_
1b40: 69 6e 74 28 30 2c 0a 20 20 20 20 22 53 45 4c 45 int(0,. "SELE
1b50: 43 54 20 72 69 64 20 46 52 4f 4d 20 74 61 67 78 CT rid FROM tagx
1b60: 72 65 66 22 0a 20 20 20 20 22 20 57 48 45 52 45 ref". " WHERE
1b70: 20 74 61 67 69 64 3d 28 53 45 4c 45 43 54 20 74 tagid=(SELECT t
1b80: 61 67 69 64 20 46 52 4f 4d 20 74 61 67 20 57 48 agid FROM tag WH
1b90: 45 52 45 20 74 61 67 6e 61 6d 65 3d 25 51 29 22 ERE tagname=%Q)"
1ba0: 0a 20 20 20 20 22 20 4f 52 44 45 52 20 42 59 20 . " ORDER BY
1bb0: 6d 74 69 6d 65 20 44 45 53 43 22 2c 20 7a 54 61 mtime DESC", zTa
1bc0: 67 0a 20 20 29 3b 0a 20 20 66 72 65 65 28 7a 54 g. );. free(zT
1bd0: 61 67 29 3b 0a 0a 20 20 2f 2a 20 4e 65 65 64 20 ag);.. /* Need
1be0: 62 6f 74 68 20 63 68 65 63 6b 2d 69 6e 20 61 6e both check-in an
1bf0: 64 20 77 69 6b 69 2d 77 72 69 74 65 20 6f 72 20 d wiki-write or
1c00: 77 69 6b 69 2d 63 72 65 61 74 65 20 70 72 69 76 wiki-create priv
1c10: 69 6c 65 67 65 73 20 69 6e 20 6f 72 64 65 72 0a ileges in order.
1c20: 20 20 2a 2a 20 74 6f 20 65 64 69 74 2f 63 72 65 ** to edit/cre
1c30: 61 74 65 20 61 6e 20 65 76 65 6e 74 2e 0a 20 20 ate an event..
1c40: 2a 2f 0a 20 20 69 66 28 20 21 67 2e 70 65 72 6d */. if( !g.perm
1c50: 2e 57 72 69 74 65 20 7c 7c 20 28 72 69 64 20 26 .Write || (rid &
1c60: 26 20 21 67 2e 70 65 72 6d 2e 57 72 57 69 6b 69 & !g.perm.WrWiki
1c70: 29 20 7c 7c 20 28 21 72 69 64 20 26 26 20 21 67 ) || (!rid && !g
1c80: 2e 70 65 72 6d 2e 4e 65 77 57 69 6b 69 29 20 29 .perm.NewWiki) )
1c90: 7b 0a 20 20 20 20 6c 6f 67 69 6e 5f 6e 65 65 64 {. login_need
1ca0: 65 64 28 29 3b 0a 20 20 20 20 72 65 74 75 72 6e ed();. return
1cb0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 46 69 67 75 ;. }.. /* Figu
1cc0: 72 65 20 6f 75 74 20 74 68 65 20 63 6f 6c 6f 72 re out the color
1cd0: 20 2a 2f 0a 20 20 69 66 28 20 72 69 64 20 29 7b */. if( rid ){
1ce0: 0a 20 20 20 20 7a 43 6c 72 20 3d 20 64 62 5f 74 . zClr = db_t
1cf0: 65 78 74 28 22 22 2c 20 22 53 45 4c 45 43 54 20 ext("", "SELECT
1d00: 62 67 63 6f 6c 6f 72 20 20 46 52 4f 4d 20 65 76 bgcolor FROM ev
1d10: 65 6e 74 20 57 48 45 52 45 20 6f 62 6a 69 64 3d ent WHERE objid=
1d20: 25 64 22 2c 20 72 69 64 29 3b 0a 20 20 7d 65 6c %d", rid);. }el
1d30: 73 65 7b 0a 20 20 20 20 7a 43 6c 72 20 3d 20 22 se{. zClr = "
1d40: 22 3b 0a 20 20 7d 0a 20 20 7a 43 6c 72 20 3d 20 ";. }. zClr =
1d50: 50 44 28 22 63 6c 72 22 2c 7a 43 6c 72 29 3b 0a PD("clr",zClr);.
1d60: 20 20 69 66 28 20 66 6f 73 73 69 6c 5f 73 74 72 if( fossil_str
1d70: 63 6d 70 28 7a 43 6c 72 2c 22 23 23 22 29 3d 3d cmp(zClr,"##")==
1d80: 30 20 29 20 7a 43 6c 72 20 3d 20 50 44 28 22 63 0 ) zClr = PD("c
1d90: 63 6c 72 22 2c 22 22 29 3b 0a 0a 0a 20 20 2f 2a clr","");... /*
1da0: 20 49 66 20 65 64 69 74 69 6e 67 20 61 6e 20 65 If editing an e
1db0: 78 69 73 74 69 6e 67 20 65 76 65 6e 74 2c 20 65 xisting event, e
1dc0: 78 74 72 61 63 74 20 74 68 65 20 6b 65 79 20 66 xtract the key f
1dd0: 69 65 6c 64 73 20 74 6f 20 75 73 65 20 61 73 0a ields to use as.
1de0: 20 20 2a 2a 20 61 20 73 74 61 72 74 69 6e 67 20 ** a starting
1df0: 70 6f 69 6e 74 20 66 6f 72 20 74 68 65 20 65 64 point for the ed
1e00: 69 74 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 72 it.. */. if( r
1e10: 69 64 20 26 26 20 28 7a 42 6f 64 79 3d 3d 30 20 id && (zBody==0
1e20: 7c 7c 20 7a 45 54 69 6d 65 3d 3d 30 20 7c 7c 20 || zETime==0 ||
1e30: 7a 43 6f 6d 6d 65 6e 74 3d 3d 30 20 7c 7c 20 7a zComment==0 || z
1e40: 54 61 67 73 3d 3d 30 29 20 29 7b 0a 20 20 20 20 Tags==0) ){.
1e50: 4d 61 6e 69 66 65 73 74 20 2a 70 45 76 65 6e 74 Manifest *pEvent
1e60: 3b 0a 20 20 20 20 70 45 76 65 6e 74 20 3d 20 6d ;. pEvent = m
1e70: 61 6e 69 66 65 73 74 5f 67 65 74 28 72 69 64 2c anifest_get(rid,
1e80: 20 43 46 54 59 50 45 5f 45 56 45 4e 54 29 3b 0a CFTYPE_EVENT);.
1e90: 20 20 20 20 69 66 28 20 70 45 76 65 6e 74 20 26 if( pEvent &
1ea0: 26 20 70 45 76 65 6e 74 2d 3e 74 79 70 65 3d 3d & pEvent->type==
1eb0: 43 46 54 59 50 45 5f 45 56 45 4e 54 20 29 7b 0a CFTYPE_EVENT ){.
1ec0: 20 20 20 20 20 20 69 66 28 20 7a 42 6f 64 79 3d if( zBody=
1ed0: 3d 30 20 29 20 7a 42 6f 64 79 20 3d 20 70 45 76 =0 ) zBody = pEv
1ee0: 65 6e 74 2d 3e 7a 57 69 6b 69 3b 0a 20 20 20 20 ent->zWiki;.
1ef0: 20 20 69 66 28 20 7a 45 54 69 6d 65 3d 3d 30 20 if( zETime==0
1f00: 29 7b 0a 20 20 20 20 20 20 20 20 7a 45 54 69 6d ){. zETim
1f10: 65 20 3d 20 64 62 5f 74 65 78 74 28 30 2c 20 22 e = db_text(0, "
1f20: 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65 28 SELECT datetime(
1f30: 25 2e 31 37 67 29 22 2c 20 70 45 76 65 6e 74 2d %.17g)", pEvent-
1f40: 3e 72 45 76 65 6e 74 44 61 74 65 29 3b 0a 20 20 >rEventDate);.
1f50: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 }. if(
1f60: 7a 43 6f 6d 6d 65 6e 74 3d 3d 30 20 29 20 7a 43 zComment==0 ) zC
1f70: 6f 6d 6d 65 6e 74 20 3d 20 70 45 76 65 6e 74 2d omment = pEvent-
1f80: 3e 7a 43 6f 6d 6d 65 6e 74 3b 0a 20 20 20 20 7d >zComment;. }
1f90: 0a 20 20 20 20 69 66 28 20 7a 54 61 67 73 3d 3d . if( zTags==
1fa0: 30 20 29 7b 0a 20 20 20 20 20 20 7a 54 61 67 73 0 ){. zTags
1fb0: 20 3d 20 64 62 5f 74 65 78 74 28 30 2c 0a 20 20 = db_text(0,.
1fc0: 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 67 72 "SELECT gr
1fd0: 6f 75 70 5f 63 6f 6e 63 61 74 28 73 75 62 73 74 oup_concat(subst
1fe0: 72 28 74 61 67 6e 61 6d 65 2c 35 29 2c 27 2c 20 r(tagname,5),',
1ff0: 27 29 22 0a 20 20 20 20 20 20 20 20 22 20 20 46 ')". " F
2000: 52 4f 4d 20 74 61 67 78 72 65 66 2c 20 74 61 67 ROM tagxref, tag
2010: 22 0a 20 20 20 20 20 20 20 20 22 20 57 48 45 52 ". " WHER
2020: 45 20 74 61 67 78 72 65 66 2e 72 69 64 3d 25 64 E tagxref.rid=%d
2030: 22 0a 20 20 20 20 20 20 20 20 22 20 20 20 41 4e ". " AN
2040: 44 20 74 61 67 78 72 65 66 2e 74 61 67 69 64 3d D tagxref.tagid=
2050: 74 61 67 2e 74 61 67 69 64 22 0a 20 20 20 20 20 tag.tagid".
2060: 20 20 20 22 20 20 20 41 4e 44 20 74 61 67 2e 74 " AND tag.t
2070: 61 67 6e 61 6d 65 20 47 4c 4f 42 20 27 73 79 6d agname GLOB 'sym
2080: 2d 2a 27 22 2c 0a 20 20 20 20 20 20 20 20 72 69 -*'",. ri
2090: 64 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 7d d. );. }
20a0: 0a 20 20 7d 0a 20 20 7a 45 54 69 6d 65 20 3d 20 . }. zETime =
20b0: 64 62 5f 74 65 78 74 28 30 2c 20 22 53 45 4c 45 db_text(0, "SELE
20c0: 43 54 20 63 6f 61 6c 65 73 63 65 28 64 61 74 65 CT coalesce(date
20d0: 74 69 6d 65 28 25 51 29 2c 64 61 74 65 74 69 6d time(%Q),datetim
20e0: 65 28 27 6e 6f 77 27 29 29 22 2c 20 7a 45 54 69 e('now'))", zETi
20f0: 6d 65 29 3b 0a 20 20 69 66 28 20 50 28 22 73 75 me);. if( P("su
2100: 62 6d 69 74 22 29 21 3d 30 20 26 26 20 28 7a 42 bmit")!=0 && (zB
2110: 6f 64 79 21 3d 30 20 26 26 20 7a 43 6f 6d 6d 65 ody!=0 && zComme
2120: 6e 74 21 3d 30 29 20 29 7b 0a 20 20 20 20 63 68 nt!=0) ){. ch
2130: 61 72 20 2a 7a 44 61 74 65 3b 0a 20 20 20 20 42 ar *zDate;. B
2140: 6c 6f 62 20 63 6b 73 75 6d 3b 0a 20 20 20 20 69 lob cksum;. i
2150: 6e 74 20 6e 72 69 64 3b 0a 20 20 20 20 62 6c 6f nt nrid;. blo
2160: 62 5f 7a 65 72 6f 28 26 65 76 65 6e 74 29 3b 0a b_zero(&event);.
2170: 20 20 20 20 64 62 5f 62 65 67 69 6e 5f 74 72 61 db_begin_tra
2180: 6e 73 61 63 74 69 6f 6e 28 29 3b 0a 20 20 20 20 nsaction();.
2190: 6c 6f 67 69 6e 5f 76 65 72 69 66 79 5f 63 73 72 login_verify_csr
21a0: 66 5f 73 65 63 72 65 74 28 29 3b 0a 20 20 20 20 f_secret();.
21b0: 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 65 76 blob_appendf(&ev
21c0: 65 6e 74 2c 20 22 43 20 25 46 5c 6e 22 2c 20 7a ent, "C %F\n", z
21d0: 43 6f 6d 6d 65 6e 74 29 3b 0a 20 20 20 20 7a 44 Comment);. zD
21e0: 61 74 65 20 3d 20 64 61 74 65 5f 69 6e 5f 73 74 ate = date_in_st
21f0: 61 6e 64 61 72 64 5f 66 6f 72 6d 61 74 28 22 6e andard_format("n
2200: 6f 77 22 29 3b 0a 20 20 20 20 62 6c 6f 62 5f 61 ow");. blob_a
2210: 70 70 65 6e 64 66 28 26 65 76 65 6e 74 2c 20 22 ppendf(&event, "
2220: 44 20 25 73 5c 6e 22 2c 20 7a 44 61 74 65 29 3b D %s\n", zDate);
2230: 0a 20 20 20 20 66 72 65 65 28 7a 44 61 74 65 29 . free(zDate)
2240: 3b 0a 20 20 20 20 7a 45 54 69 6d 65 5b 31 30 5d ;. zETime[10]
2250: 20 3d 20 27 54 27 3b 0a 20 20 20 20 62 6c 6f 62 = 'T';. blob
2260: 5f 61 70 70 65 6e 64 66 28 26 65 76 65 6e 74 2c _appendf(&event,
2270: 20 22 45 20 25 73 20 25 73 5c 6e 22 2c 20 7a 45 "E %s %s\n", zE
2280: 54 69 6d 65 2c 20 7a 45 76 65 6e 74 49 64 29 3b Time, zEventId);
2290: 0a 20 20 20 20 7a 45 54 69 6d 65 5b 31 30 5d 20 . zETime[10]
22a0: 3d 20 27 20 27 3b 0a 20 20 20 20 69 66 28 20 72 = ' ';. if( r
22b0: 69 64 20 29 7b 0a 20 20 20 20 20 20 63 68 61 72 id ){. char
22c0: 20 2a 7a 55 75 69 64 20 3d 20 64 62 5f 74 65 78 *zUuid = db_tex
22d0: 74 28 30 2c 20 22 53 45 4c 45 43 54 20 75 75 69 t(0, "SELECT uui
22e0: 64 20 46 52 4f 4d 20 62 6c 6f 62 20 57 48 45 52 d FROM blob WHER
22f0: 45 20 72 69 64 3d 25 64 22 2c 20 72 69 64 29 3b E rid=%d", rid);
2300: 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 . blob_appe
2310: 6e 64 66 28 26 65 76 65 6e 74 2c 20 22 50 20 25 ndf(&event, "P %
2320: 73 5c 6e 22 2c 20 7a 55 75 69 64 29 3b 0a 20 20 s\n", zUuid);.
2330: 20 20 20 20 66 72 65 65 28 7a 55 75 69 64 29 3b free(zUuid);
2340: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 7a . }. if( z
2350: 43 6c 72 20 26 26 20 7a 43 6c 72 5b 30 5d 20 29 Clr && zClr[0] )
2360: 7b 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 {. blob_app
2370: 65 6e 64 66 28 26 65 76 65 6e 74 2c 20 22 54 20 endf(&event, "T
2380: 2b 62 67 63 6f 6c 6f 72 20 2a 20 25 46 5c 6e 22 +bgcolor * %F\n"
2390: 2c 20 7a 43 6c 72 29 3b 0a 20 20 20 20 7d 0a 20 , zClr);. }.
23a0: 20 20 20 69 66 28 20 7a 54 61 67 73 20 26 26 20 if( zTags &&
23b0: 7a 54 61 67 73 5b 30 5d 20 29 7b 0a 20 20 20 20 zTags[0] ){.
23c0: 20 20 42 6c 6f 62 20 74 61 67 73 2c 20 6f 6e 65 Blob tags, one
23d0: 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 2c 20 6a ;. int i, j
23e0: 3b 0a 20 20 20 20 20 20 53 74 6d 74 20 71 3b 0a ;. Stmt q;.
23f0: 20 20 20 20 20 20 63 68 61 72 20 2a 7a 42 6c 6f char *zBlo
2400: 62 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4c 6f 61 b;.. /* Loa
2410: 64 20 74 68 65 20 74 61 67 73 20 73 74 72 69 6e d the tags strin
2420: 67 20 69 6e 74 6f 20 61 20 62 6c 6f 62 20 2a 2f g into a blob */
2430: 0a 20 20 20 20 20 20 62 6c 6f 62 5f 7a 65 72 6f . blob_zero
2440: 28 26 74 61 67 73 29 3b 0a 20 20 20 20 20 20 62 (&tags);. b
2450: 6c 6f 62 5f 61 70 70 65 6e 64 28 26 74 61 67 73 lob_append(&tags
2460: 2c 20 7a 54 61 67 73 2c 20 2d 31 29 3b 0a 0a 20 , zTags, -1);..
2470: 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 70 73 65 /* Collapse
2480: 20 61 6c 6c 20 73 65 71 75 65 6e 63 65 73 20 6f all sequences o
2490: 66 20 77 68 69 74 65 73 70 61 63 65 20 61 6e 64 f whitespace and
24a0: 20 22 2c 22 20 63 68 61 72 61 63 74 65 72 73 20 "," characters
24b0: 69 6e 74 6f 0a 20 20 20 20 20 20 2a 2a 20 61 20 into. ** a
24c0: 73 69 6e 67 6c 65 20 73 70 61 63 65 20 63 68 61 single space cha
24d0: 72 61 63 74 65 72 20 2a 2f 0a 20 20 20 20 20 20 racter */.
24e0: 7a 42 6c 6f 62 20 3d 20 62 6c 6f 62 5f 73 74 72 zBlob = blob_str
24f0: 28 26 74 61 67 73 29 3b 0a 20 20 20 20 20 20 66 (&tags);. f
2500: 6f 72 28 69 3d 6a 3d 30 3b 20 7a 42 6c 6f 62 5b or(i=j=0; zBlob[
2510: 69 5d 3b 20 69 2b 2b 2c 20 6a 2b 2b 29 7b 0a 20 i]; i++, j++){.
2520: 20 20 20 20 20 20 20 69 66 28 20 66 6f 73 73 69 if( fossi
2530: 6c 5f 69 73 73 70 61 63 65 28 7a 42 6c 6f 62 5b l_isspace(zBlob[
2540: 69 5d 29 20 7c 7c 20 7a 42 6c 6f 62 5b 69 5d 3d i]) || zBlob[i]=
2550: 3d 27 2c 27 20 29 7b 0a 20 20 20 20 20 20 20 20 =',' ){.
2560: 20 20 77 68 69 6c 65 28 20 66 6f 73 73 69 6c 5f while( fossil_
2570: 69 73 73 70 61 63 65 28 7a 42 6c 6f 62 5b 69 2b isspace(zBlob[i+
2580: 31 5d 29 20 29 7b 20 69 2b 2b 3b 20 7d 0a 20 20 1]) ){ i++; }.
2590: 20 20 20 20 20 20 20 20 7a 42 6c 6f 62 5b 6a 5d zBlob[j]
25a0: 20 3d 20 27 20 27 3b 0a 20 20 20 20 20 20 20 20 = ' ';.
25b0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 }else{.
25c0: 20 7a 42 6c 6f 62 5b 6a 5d 20 3d 20 7a 42 6c 6f zBlob[j] = zBlo
25d0: 62 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 7d 0a b[i];. }.
25e0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 6c }. bl
25f0: 6f 62 5f 72 65 73 69 7a 65 28 26 74 61 67 73 2c ob_resize(&tags,
2600: 20 6a 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 50 j);.. /* P
2610: 61 72 73 65 20 6f 75 74 20 65 61 63 68 20 74 61 arse out each ta
2620: 67 20 61 6e 64 20 6c 6f 61 64 20 69 74 20 69 6e g and load it in
2630: 74 6f 20 61 20 74 65 6d 70 6f 72 61 72 79 20 74 to a temporary t
2640: 61 62 6c 65 20 66 6f 72 20 73 6f 72 74 69 6e 67 able for sorting
2650: 20 2a 2f 0a 20 20 20 20 20 20 64 62 5f 6d 75 6c */. db_mul
2660: 74 69 5f 65 78 65 63 28 22 43 52 45 41 54 45 20 ti_exec("CREATE
2670: 54 45 4d 50 20 54 41 42 4c 45 20 6e 65 77 74 61 TEMP TABLE newta
2680: 67 73 28 78 29 3b 22 29 3b 0a 20 20 20 20 20 20 gs(x);");.
2690: 77 68 69 6c 65 28 20 62 6c 6f 62 5f 74 6f 6b 65 while( blob_toke
26a0: 6e 28 26 74 61 67 73 2c 20 26 6f 6e 65 29 20 29 n(&tags, &one) )
26b0: 7b 0a 20 20 20 20 20 20 20 20 64 62 5f 6d 75 6c {. db_mul
26c0: 74 69 5f 65 78 65 63 28 22 49 4e 53 45 52 54 20 ti_exec("INSERT
26d0: 49 4e 54 4f 20 6e 65 77 74 61 67 73 20 56 41 4c INTO newtags VAL
26e0: 55 45 53 28 25 42 29 22 2c 20 26 6f 6e 65 29 3b UES(%B)", &one);
26f0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 . }. b
2700: 6c 6f 62 5f 72 65 73 65 74 28 26 74 61 67 73 29 lob_reset(&tags)
2710: 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 45 78 74 72 ;.. /* Extr
2720: 61 63 74 20 74 68 65 20 74 61 67 73 20 69 6e 20 act the tags in
2730: 73 6f 72 74 65 64 20 6f 72 64 65 72 20 61 6e 64 sorted order and
2740: 20 6d 61 6b 65 20 61 6e 20 65 6e 74 72 79 20 69 make an entry i
2750: 6e 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 61 n the. ** a
2760: 72 74 69 66 61 63 74 20 66 6f 72 20 65 61 63 68 rtifact for each
2770: 2e 20 2a 2f 0a 20 20 20 20 20 20 64 62 5f 70 72 . */. db_pr
2780: 65 70 61 72 65 28 26 71 2c 20 22 53 45 4c 45 43 epare(&q, "SELEC
2790: 54 20 78 20 46 52 4f 4d 20 6e 65 77 74 61 67 73 T x FROM newtags
27a0: 20 4f 52 44 45 52 20 42 59 20 78 22 29 3b 0a 20 ORDER BY x");.
27b0: 20 20 20 20 20 77 68 69 6c 65 28 20 64 62 5f 73 while( db_s
27c0: 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f tep(&q)==SQLITE_
27d0: 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 20 20 62 ROW ){. b
27e0: 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 65 76 65 lob_appendf(&eve
27f0: 6e 74 2c 20 22 54 20 2b 73 79 6d 2d 25 46 20 2a nt, "T +sym-%F *
2800: 5c 6e 22 2c 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 \n", db_column_t
2810: 65 78 74 28 26 71 2c 20 30 29 29 3b 0a 20 20 20 ext(&q, 0));.
2820: 20 20 20 7d 0a 20 20 20 20 20 20 64 62 5f 66 69 }. db_fi
2830: 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 20 20 nalize(&q);.
2840: 7d 0a 20 20 20 20 69 66 28 20 67 2e 7a 4c 6f 67 }. if( g.zLog
2850: 69 6e 20 29 7b 0a 20 20 20 20 20 20 62 6c 6f 62 in ){. blob
2860: 5f 61 70 70 65 6e 64 66 28 26 65 76 65 6e 74 2c _appendf(&event,
2870: 20 22 55 20 25 46 5c 6e 22 2c 20 67 2e 7a 4c 6f "U %F\n", g.zLo
2880: 67 69 6e 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 gin);. }.
2890: 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 65 76 blob_appendf(&ev
28a0: 65 6e 74 2c 20 22 57 20 25 64 5c 6e 25 73 5c 6e ent, "W %d\n%s\n
28b0: 22 2c 20 73 74 72 6c 65 6e 28 7a 42 6f 64 79 29 ", strlen(zBody)
28c0: 2c 20 7a 42 6f 64 79 29 3b 0a 20 20 20 20 6d 64 , zBody);. md
28d0: 35 73 75 6d 5f 62 6c 6f 62 28 26 65 76 65 6e 74 5sum_blob(&event
28e0: 2c 20 26 63 6b 73 75 6d 29 3b 0a 20 20 20 20 62 , &cksum);. b
28f0: 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 65 76 65 lob_appendf(&eve
2900: 6e 74 2c 20 22 5a 20 25 62 5c 6e 22 2c 20 26 63 nt, "Z %b\n", &c
2910: 6b 73 75 6d 29 3b 0a 20 20 20 20 62 6c 6f 62 5f ksum);. blob_
2920: 72 65 73 65 74 28 26 63 6b 73 75 6d 29 3b 0a 20 reset(&cksum);.
2930: 20 20 20 6e 72 69 64 20 3d 20 63 6f 6e 74 65 6e nrid = conten
2940: 74 5f 70 75 74 28 26 65 76 65 6e 74 29 3b 0a 20 t_put(&event);.
2950: 20 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 db_multi_exec
2960: 28 22 49 4e 53 45 52 54 20 4f 52 20 49 47 4e 4f ("INSERT OR IGNO
2970: 52 45 20 49 4e 54 4f 20 75 6e 73 65 6e 74 20 56 RE INTO unsent V
2980: 41 4c 55 45 53 28 25 64 29 22 2c 20 6e 72 69 64 ALUES(%d)", nrid
2990: 29 3b 0a 20 20 20 20 6d 61 6e 69 66 65 73 74 5f );. manifest_
29a0: 63 72 6f 73 73 6c 69 6e 6b 28 6e 72 69 64 2c 20 crosslink(nrid,
29b0: 26 65 76 65 6e 74 29 3b 0a 20 20 20 20 61 73 73 &event);. ass
29c0: 65 72 74 28 20 62 6c 6f 62 5f 69 73 5f 72 65 73 ert( blob_is_res
29d0: 65 74 28 26 65 76 65 6e 74 29 20 29 3b 0a 20 20 et(&event) );.
29e0: 20 20 63 6f 6e 74 65 6e 74 5f 64 65 6c 74 69 66 content_deltif
29f0: 79 28 72 69 64 2c 20 6e 72 69 64 2c 20 30 29 3b y(rid, nrid, 0);
2a00: 0a 20 20 20 20 64 62 5f 65 6e 64 5f 74 72 61 6e . db_end_tran
2a10: 73 61 63 74 69 6f 6e 28 30 29 3b 0a 20 20 20 20 saction(0);.
2a20: 63 67 69 5f 72 65 64 69 72 65 63 74 66 28 22 65 cgi_redirectf("e
2a30: 76 65 6e 74 3f 6e 61 6d 65 3d 25 54 22 2c 20 7a vent?name=%T", z
2a40: 45 76 65 6e 74 49 64 29 3b 0a 20 20 7d 0a 20 20 EventId);. }.
2a50: 69 66 28 20 50 28 22 63 61 6e 63 65 6c 22 29 21 if( P("cancel")!
2a60: 3d 30 20 29 7b 0a 20 20 20 20 63 67 69 5f 72 65 =0 ){. cgi_re
2a70: 64 69 72 65 63 74 66 28 22 65 76 65 6e 74 3f 6e directf("event?n
2a80: 61 6d 65 3d 25 54 22 2c 20 7a 45 76 65 6e 74 49 ame=%T", zEventI
2a90: 64 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a d);. return;.
2aa0: 20 20 7d 0a 20 20 69 66 28 20 7a 42 6f 64 79 3d }. if( zBody=
2ab0: 3d 30 20 29 7b 0a 20 20 20 20 7a 42 6f 64 79 20 =0 ){. zBody
2ac0: 3d 20 6d 70 72 69 6e 74 66 28 22 3c 69 3e 45 76 = mprintf("<i>Ev
2ad0: 65 6e 74 20 54 65 78 74 3c 2f 69 3e 22 29 3b 0a ent Text</i>");.
2ae0: 20 20 7d 0a 20 20 7a 48 74 6d 6c 50 61 67 65 4e }. zHtmlPageN
2af0: 61 6d 65 20 3d 20 6d 70 72 69 6e 74 66 28 22 45 ame = mprintf("E
2b00: 64 69 74 20 45 76 65 6e 74 20 25 53 22 2c 20 7a dit Event %S", z
2b10: 45 76 65 6e 74 49 64 29 3b 0a 20 20 73 74 79 6c EventId);. styl
2b20: 65 5f 68 65 61 64 65 72 28 7a 48 74 6d 6c 50 61 e_header(zHtmlPa
2b30: 67 65 4e 61 6d 65 29 3b 0a 20 20 69 66 28 20 50 geName);. if( P
2b40: 28 22 70 72 65 76 69 65 77 22 29 21 3d 30 20 29 ("preview")!=0 )
2b50: 7b 0a 20 20 20 20 42 6c 6f 62 20 74 69 74 6c 65 {. Blob title
2b60: 2c 20 74 61 69 6c 2c 20 63 6f 6d 3b 0a 20 20 20 , tail, com;.
2b70: 20 40 20 3c 70 3e 3c 62 3e 54 69 6d 65 6c 69 6e @ <p><b>Timelin
2b80: 65 20 63 6f 6d 6d 65 6e 74 20 70 72 65 76 69 65 e comment previe
2b90: 77 3a 3c 2f 62 3e 3c 2f 70 3e 0a 20 20 20 20 40 w:</b></p>. @
2ba0: 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 <blockquote>.
2bb0: 20 20 40 20 3c 74 61 62 6c 65 20 62 6f 72 64 65 @ <table borde
2bc0: 72 3d 22 30 22 3e 0a 20 20 20 20 69 66 28 20 7a r="0">. if( z
2bd0: 43 6c 72 20 26 26 20 7a 43 6c 72 5b 30 5d 20 29 Clr && zClr[0] )
2be0: 7b 0a 20 20 20 20 20 20 40 20 3c 74 72 3e 3c 74 {. @ <tr><t
2bf0: 64 20 73 74 79 6c 65 3d 22 62 61 63 6b 67 72 6f d style="backgro
2c00: 75 6e 64 2d 63 6f 6c 6f 72 3a 20 25 68 28 7a 43 und-color: %h(zC
2c10: 6c 72 29 3b 22 3e 0a 20 20 20 20 7d 65 6c 73 65 lr);">. }else
2c20: 7b 0a 20 20 20 20 20 20 40 20 3c 74 72 3e 3c 74 {. @ <tr><t
2c30: 64 3e 0a 20 20 20 20 7d 0a 20 20 20 20 62 6c 6f d>. }. blo
2c40: 62 5f 7a 65 72 6f 28 26 63 6f 6d 29 3b 0a 20 20 b_zero(&com);.
2c50: 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 26 63 blob_append(&c
2c60: 6f 6d 2c 20 7a 43 6f 6d 6d 65 6e 74 2c 20 2d 31 om, zComment, -1
2c70: 29 3b 0a 20 20 20 20 77 69 6b 69 5f 63 6f 6e 76 );. wiki_conv
2c80: 65 72 74 28 26 63 6f 6d 2c 20 30 2c 20 57 49 4b ert(&com, 0, WIK
2c90: 49 5f 49 4e 4c 49 4e 45 7c 57 49 4b 49 5f 4e 4f I_INLINE|WIKI_NO
2ca0: 42 41 44 4c 49 4e 4b 53 29 3b 0a 20 20 20 20 40 BADLINKS);. @
2cb0: 20 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62 </td></tr></tab
2cc0: 6c 65 3e 0a 20 20 20 20 40 20 3c 2f 62 6c 6f 63 le>. @ </bloc
2cd0: 6b 71 75 6f 74 65 3e 0a 20 20 20 20 40 20 3c 70 kquote>. @ <p
2ce0: 3e 3c 62 3e 50 61 67 65 20 63 6f 6e 74 65 6e 74 ><b>Page content
2cf0: 20 70 72 65 76 69 65 77 3a 3c 2f 62 3e 3c 70 3e preview:</b><p>
2d00: 0a 20 20 20 20 40 20 3c 62 6c 6f 63 6b 71 75 6f . @ <blockquo
2d10: 74 65 3e 0a 20 20 20 20 62 6c 6f 62 5f 7a 65 72 te>. blob_zer
2d20: 6f 28 26 65 76 65 6e 74 29 3b 0a 20 20 20 20 62 o(&event);. b
2d30: 6c 6f 62 5f 61 70 70 65 6e 64 28 26 65 76 65 6e lob_append(&even
2d40: 74 2c 20 7a 42 6f 64 79 2c 20 2d 31 29 3b 0a 20 t, zBody, -1);.
2d50: 20 20 20 69 66 28 20 77 69 6b 69 5f 66 69 6e 64 if( wiki_find
2d60: 5f 74 69 74 6c 65 28 26 65 76 65 6e 74 2c 20 26 _title(&event, &
2d70: 74 69 74 6c 65 2c 20 26 74 61 69 6c 29 20 29 7b title, &tail) ){
2d80: 0a 20 20 20 20 20 20 40 20 3c 68 32 20 61 6c 69 . @ <h2 ali
2d90: 67 6e 3d 22 63 65 6e 74 65 72 22 3e 25 68 28 62 gn="center">%h(b
2da0: 6c 6f 62 5f 73 74 72 28 26 74 69 74 6c 65 29 29 lob_str(&title))
2db0: 3c 2f 68 32 3e 0a 20 20 20 20 20 20 77 69 6b 69 </h2>. wiki
2dc0: 5f 63 6f 6e 76 65 72 74 28 26 74 61 69 6c 2c 20 _convert(&tail,
2dd0: 30 2c 20 30 29 3b 0a 20 20 20 20 7d 65 6c 73 65 0, 0);. }else
2de0: 7b 0a 20 20 20 20 20 20 77 69 6b 69 5f 63 6f 6e {. wiki_con
2df0: 76 65 72 74 28 26 65 76 65 6e 74 2c 20 30 2c 20 vert(&event, 0,
2e00: 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 40 20 0);. }. @
2e10: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 68 72 </blockquote><hr
2e20: 20 2f 3e 0a 20 20 20 20 62 6c 6f 62 5f 72 65 73 />. blob_res
2e30: 65 74 28 26 65 76 65 6e 74 29 3b 0a 20 20 7d 0a et(&event);. }.
2e40: 20 20 66 6f 72 28 6e 3d 32 2c 20 7a 3d 7a 42 6f for(n=2, z=zBo
2e50: 64 79 3b 20 7a 5b 30 5d 3b 20 7a 2b 2b 29 7b 0a dy; z[0]; z++){.
2e60: 20 20 20 20 69 66 28 20 7a 5b 30 5d 3d 3d 27 5c if( z[0]=='\
2e70: 6e 27 20 29 20 6e 2b 2b 3b 0a 20 20 7d 0a 20 20 n' ) n++;. }.
2e80: 69 66 28 20 6e 3c 32 30 20 29 20 6e 20 3d 20 32 if( n<20 ) n = 2
2e90: 30 3b 0a 20 20 69 66 28 20 6e 3e 34 30 20 29 20 0;. if( n>40 )
2ea0: 6e 20 3d 20 34 30 3b 0a 20 20 40 20 3c 66 6f 72 n = 40;. @ <for
2eb0: 6d 20 6d 65 74 68 6f 64 3d 22 70 6f 73 74 22 20 m method="post"
2ec0: 61 63 74 69 6f 6e 3d 22 25 73 28 67 2e 7a 54 6f action="%s(g.zTo
2ed0: 70 29 2f 65 76 65 6e 74 65 64 69 74 22 3e 3c 64 p)/eventedit"><d
2ee0: 69 76 3e 0a 20 20 6c 6f 67 69 6e 5f 69 6e 73 65 iv>. login_inse
2ef0: 72 74 5f 63 73 72 66 5f 73 65 63 72 65 74 28 29 rt_csrf_secret()
2f00: 3b 0a 20 20 40 20 3c 69 6e 70 75 74 20 74 79 70 ;. @ <input typ
2f10: 65 3d 22 68 69 64 64 65 6e 22 20 6e 61 6d 65 3d e="hidden" name=
2f20: 22 6e 61 6d 65 22 20 76 61 6c 75 65 3d 22 25 68 "name" value="%h
2f30: 28 7a 45 76 65 6e 74 49 64 29 22 20 2f 3e 0a 20 (zEventId)" />.
2f40: 20 40 20 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 @ <table border
2f50: 3d 22 30 22 20 63 65 6c 6c 73 70 61 63 69 6e 67 ="0" cellspacing
2f60: 3d 22 31 30 22 3e 0a 0a 20 20 40 20 3c 74 72 3e ="10">.. @ <tr>
2f70: 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 <td align="right
2f80: 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c " valign="top"><
2f90: 62 3e 45 76 65 6e 74 26 6e 62 73 70 3b 54 69 6d b>Event Tim
2fa0: 65 3a 3c 2f 62 3e 3c 2f 74 64 3e 0a 20 20 40 20 e:</b></td>. @
2fb0: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 <td valign="top"
2fc0: 3e 0a 20 20 40 20 20 20 3c 69 6e 70 75 74 20 74 >. @ <input t
2fd0: 79 70 65 3d 22 74 65 78 74 22 20 6e 61 6d 65 3d ype="text" name=
2fe0: 22 74 22 20 73 69 7a 65 3d 22 32 35 22 20 76 61 "t" size="25" va
2ff0: 6c 75 65 3d 22 25 68 28 7a 45 54 69 6d 65 29 22 lue="%h(zETime)"
3000: 20 2f 3e 0a 20 20 40 20 3c 2f 74 64 3e 3c 2f 74 />. @ </td></t
3010: 72 3e 0a 0a 20 20 40 20 3c 74 72 3e 3c 74 64 20 r>.. @ <tr><td
3020: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 align="right" va
3030: 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 54 69 lign="top"><b>Ti
3040: 6d 65 6c 69 6e 65 26 6e 62 73 70 3b 43 6f 6d 6d meline Comm
3050: 65 6e 74 3a 3c 2f 62 3e 3c 2f 74 64 3e 0a 20 20 ent:</b></td>.
3060: 40 20 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f @ <td valign="to
3070: 70 22 3e 0a 20 20 40 20 3c 74 65 78 74 61 72 65 p">. @ <textare
3080: 61 20 6e 61 6d 65 3d 22 63 22 20 63 6c 61 73 73 a name="c" class
3090: 3d 22 65 76 65 6e 74 65 64 69 74 22 20 63 6f 6c ="eventedit" col
30a0: 73 3d 22 38 30 22 0a 20 20 40 20 20 72 6f 77 73 s="80". @ rows
30b0: 3d 22 33 22 20 77 72 61 70 3d 22 76 69 72 74 75 ="3" wrap="virtu
30c0: 61 6c 22 3e 25 68 28 7a 43 6f 6d 6d 65 6e 74 29 al">%h(zComment)
30d0: 3c 2f 74 65 78 74 61 72 65 61 3e 0a 20 20 40 20 </textarea>. @
30e0: 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 20 20 40 20 </td></tr>.. @
30f0: 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 72 <tr><td align="r
3100: 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f ight" valign="to
3110: 70 22 3e 3c 62 3e 42 61 63 6b 67 72 6f 75 6e 64 p"><b>Background
3120: 26 6e 62 73 70 3b 43 6f 6c 6f 72 3a 3c 2f 62 3e Color:</b>
3130: 3c 2f 74 64 3e 0a 20 20 40 20 3c 74 64 20 76 61 </td>. @ <td va
3140: 6c 69 67 6e 3d 22 74 6f 70 22 3e 0a 20 20 72 65 lign="top">. re
3150: 6e 64 65 72 5f 63 6f 6c 6f 72 5f 63 68 6f 6f 73 nder_color_choos
3160: 65 72 28 30 2c 20 7a 43 6c 72 2c 20 30 2c 20 22 er(0, zClr, 0, "
3170: 63 6c 72 22 2c 20 22 63 63 6c 72 22 29 3b 0a 20 clr", "cclr");.
3180: 20 40 20 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 20 @ </td></tr>..
3190: 20 40 20 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e @ <tr><td align
31a0: 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d ="right" valign=
31b0: 22 74 6f 70 22 3e 3c 62 3e 54 61 67 73 3a 3c 2f "top"><b>Tags:</
31c0: 62 3e 3c 2f 74 64 3e 0a 20 20 40 20 3c 74 64 20 b></td>. @ <td
31d0: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 0a 20 20 valign="top">.
31e0: 40 20 20 20 3c 69 6e 70 75 74 20 74 79 70 65 3d @ <input type=
31f0: 22 74 65 78 74 22 20 6e 61 6d 65 3d 22 67 22 20 "text" name="g"
3200: 73 69 7a 65 3d 22 34 30 22 20 76 61 6c 75 65 3d size="40" value=
3210: 22 25 68 28 7a 54 61 67 73 29 22 20 2f 3e 0a 20 "%h(zTags)" />.
3220: 20 40 20 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 20 @ </td></tr>..
3230: 20 40 20 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e @ <tr><td align
3240: 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d ="right" valign=
3250: 22 74 6f 70 22 3e 3c 62 3e 50 61 67 65 26 6e 62 "top"><b>Page&nb
3260: 73 70 3b 43 6f 6e 74 65 6e 74 3a 3c 2f 62 3e 3c sp;Content:</b><
3270: 2f 74 64 3e 0a 20 20 40 20 3c 74 64 20 76 61 6c /td>. @ <td val
3280: 69 67 6e 3d 22 74 6f 70 22 3e 0a 20 20 40 20 3c ign="top">. @ <
3290: 74 65 78 74 61 72 65 61 20 6e 61 6d 65 3d 22 77 textarea name="w
32a0: 22 20 63 6c 61 73 73 3d 22 65 76 65 6e 74 65 64 " class="evented
32b0: 69 74 22 20 63 6f 6c 73 3d 22 38 30 22 0a 20 20 it" cols="80".
32c0: 40 20 20 72 6f 77 73 3d 22 25 64 28 6e 29 22 20 @ rows="%d(n)"
32d0: 77 72 61 70 3d 22 76 69 72 74 75 61 6c 22 3e 25 wrap="virtual">%
32e0: 68 28 7a 42 6f 64 79 29 3c 2f 74 65 78 74 61 72 h(zBody)</textar
32f0: 65 61 3e 0a 20 20 40 20 3c 2f 74 64 3e 3c 2f 74 ea>. @ </td></t
3300: 72 3e 0a 0a 20 20 40 20 3c 74 72 3e 3c 74 64 20 r>.. @ <tr><td
3310: 63 6f 6c 73 70 61 6e 3d 22 32 22 3e 0a 20 20 40 colspan="2">. @
3320: 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 73 75 <input type="su
3330: 62 6d 69 74 22 20 6e 61 6d 65 3d 22 70 72 65 76 bmit" name="prev
3340: 69 65 77 22 20 76 61 6c 75 65 3d 22 50 72 65 76 iew" value="Prev
3350: 69 65 77 20 59 6f 75 72 20 43 68 61 6e 67 65 73 iew Your Changes
3360: 22 20 2f 3e 0a 20 20 40 20 3c 69 6e 70 75 74 20 " />. @ <input
3370: 74 79 70 65 3d 22 73 75 62 6d 69 74 22 20 6e 61 type="submit" na
3380: 6d 65 3d 22 73 75 62 6d 69 74 22 20 76 61 6c 75 me="submit" valu
3390: 65 3d 22 41 70 70 6c 79 20 54 68 65 73 65 20 43 e="Apply These C
33a0: 68 61 6e 67 65 73 22 20 2f 3e 0a 20 20 40 20 3c hanges" />. @ <
33b0: 69 6e 70 75 74 20 74 79 70 65 3d 22 73 75 62 6d input type="subm
33c0: 69 74 22 20 6e 61 6d 65 3d 22 63 61 6e 63 65 6c it" name="cancel
33d0: 22 20 76 61 6c 75 65 3d 22 43 61 6e 63 65 6c 22 " value="Cancel"
33e0: 20 2f 3e 0a 20 20 40 20 3c 2f 74 64 3e 3c 2f 74 />. @ </td></t
33f0: 72 3e 3c 2f 74 61 62 6c 65 3e 0a 20 20 40 20 3c r></table>. @ <
3400: 2f 64 69 76 3e 3c 2f 66 6f 72 6d 3e 0a 20 20 73 /div></form>. s
3410: 74 79 6c 65 5f 66 6f 6f 74 65 72 28 29 3b 0a 7d tyle_footer();.}
3420: 0a .