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 20 43 6f 70 79 ard Hipp.** Copy
0030: 72 69 67 68 74 20 28 63 29 20 32 30 30 38 20 53 right (c) 2008 S
0040: 74 65 70 68 61 6e 20 42 65 61 6c 0a 2a 2a 0a 2a tephan Beal.**.*
0050: 2a 20 54 68 69 73 20 70 72 6f 67 72 61 6d 20 69 * This program i
0060: 73 20 66 72 65 65 20 73 6f 66 74 77 61 72 65 3b s free software;
0070: 20 79 6f 75 20 63 61 6e 20 72 65 64 69 73 74 72 you can redistr
0080: 69 62 75 74 65 20 69 74 20 61 6e 64 2f 6f 72 0a ibute it and/or.
0090: 2a 2a 20 6d 6f 64 69 66 79 20 69 74 20 75 6e 64 ** modify it und
00a0: 65 72 20 74 68 65 20 74 65 72 6d 73 20 6f 66 20 er the terms of
00b0: 74 68 65 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 the GNU General
00c0: 50 75 62 6c 69 63 0a 2a 2a 20 4c 69 63 65 6e 73 Public.** Licens
00d0: 65 20 76 65 72 73 69 6f 6e 20 32 20 61 73 20 70 e version 2 as p
00e0: 75 62 6c 69 73 68 65 64 20 62 79 20 74 68 65 20 ublished by the
00f0: 46 72 65 65 20 53 6f 66 74 77 61 72 65 20 46 6f Free Software Fo
0100: 75 6e 64 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 undation..**.**
0110: 54 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 This program is
0120: 64 69 73 74 72 69 62 75 74 65 64 20 69 6e 20 74 distributed in t
0130: 68 65 20 68 6f 70 65 20 74 68 61 74 20 69 74 20 he hope that it
0140: 77 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2c 0a will be useful,.
0150: 2a 2a 20 62 75 74 20 57 49 54 48 4f 55 54 20 41 ** but WITHOUT A
0160: 4e 59 20 57 41 52 52 41 4e 54 59 3b 20 77 69 74 NY WARRANTY; wit
0170: 68 6f 75 74 20 65 76 65 6e 20 74 68 65 20 69 6d hout even the im
0180: 70 6c 69 65 64 20 77 61 72 72 61 6e 74 79 20 6f plied warranty o
0190: 66 0a 2a 2a 20 4d 45 52 43 48 41 4e 54 41 42 49 f.** MERCHANTABI
01a0: 4c 49 54 59 20 6f 72 20 46 49 54 4e 45 53 53 20 LITY or FITNESS
01b0: 46 4f 52 20 41 20 50 41 52 54 49 43 55 4c 41 52 FOR A PARTICULAR
01c0: 20 50 55 52 50 4f 53 45 2e 20 20 53 65 65 20 74 PURPOSE. See t
01d0: 68 65 20 47 4e 55 0a 2a 2a 20 47 65 6e 65 72 61 he GNU.** Genera
01e0: 6c 20 50 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 l Public License
01f0: 20 66 6f 72 20 6d 6f 72 65 20 64 65 74 61 69 6c for more detail
0200: 73 2e 0a 2a 2a 20 0a 2a 2a 20 59 6f 75 20 73 68 s..** .** You sh
0210: 6f 75 6c 64 20 68 61 76 65 20 72 65 63 65 69 76 ould have receiv
0220: 65 64 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 ed a copy of the
0230: 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62 GNU General Pub
0240: 6c 69 63 0a 2a 2a 20 4c 69 63 65 6e 73 65 20 61 lic.** License a
0250: 6c 6f 6e 67 20 77 69 74 68 20 74 68 69 73 20 6c long with this l
0260: 69 62 72 61 72 79 3b 20 69 66 20 6e 6f 74 2c 20 ibrary; if not,
0270: 77 72 69 74 65 20 74 6f 20 74 68 65 0a 2a 2a 20 write to the.**
0280: 46 72 65 65 20 53 6f 66 74 77 61 72 65 20 46 6f Free Software Fo
0290: 75 6e 64 61 74 69 6f 6e 2c 20 49 6e 63 2e 2c 20 undation, Inc.,
02a0: 35 39 20 54 65 6d 70 6c 65 20 50 6c 61 63 65 20 59 Temple Place
02b0: 2d 20 53 75 69 74 65 20 33 33 30 2c 0a 2a 2a 20 - Suite 330,.**
02c0: 42 6f 73 74 6f 6e 2c 20 4d 41 20 20 30 32 31 31 Boston, MA 0211
02d0: 31 2d 31 33 30 37 2c 20 55 53 41 2e 0a 2a 2a 0a 1-1307, USA..**.
02e0: 2a 2a 20 41 75 74 68 6f 72 20 63 6f 6e 74 61 63 ** Author contac
02f0: 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 3a 0a 2a t information:.*
0300: 2a 20 20 20 64 72 68 40 68 77 61 63 69 2e 63 6f * drh@hwaci.co
0310: 6d 0a 2a 2a 20 20 20 68 74 74 70 3a 2f 2f 77 77 m.** http://ww
0320: 77 2e 68 77 61 63 69 2e 63 6f 6d 2f 64 72 68 2f w.hwaci.com/drh/
0330: 0a 2a 2a 0a 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: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0370: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0380: 2a 2a 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 ***.**.** This f
0390: 69 6c 65 20 63 6f 6e 74 61 69 6e 73 20 63 6f 64 ile contains cod
03a0: 65 20 74 6f 20 64 6f 20 66 6f 72 6d 61 74 74 69 e to do formatti
03b0: 6e 67 20 6f 66 20 77 69 6b 69 20 74 65 78 74 2e ng of wiki text.
03c0: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 .*/.#include <as
03d0: 73 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 sert.h>.#include
03e0: 20 3c 63 74 79 70 65 2e 68 3e 0a 23 69 6e 63 6c <ctype.h>.#incl
03f0: 75 64 65 20 22 63 6f 6e 66 69 67 2e 68 22 0a 23 ude "config.h".#
0400: 69 6e 63 6c 75 64 65 20 22 77 69 6b 69 2e 68 22 include "wiki.h"
0410: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 ../*.** Return t
0420: 72 75 65 20 69 66 20 74 68 65 20 69 6e 70 75 74 rue if the input
0430: 20 73 74 72 69 6e 67 20 69 73 20 61 20 77 65 6c string is a wel
0440: 6c 2d 66 6f 72 6d 65 64 20 77 69 6b 69 20 70 61 l-formed wiki pa
0450: 67 65 20 6e 61 6d 65 2e 0a 2a 2a 0a 2a 2a 20 57 ge name..**.** W
0460: 65 6c 6c 2d 66 6f 72 6d 65 64 20 77 69 6b 69 20 ell-formed wiki
0470: 70 61 67 65 20 6e 61 6d 65 73 20 64 6f 20 6e 6f page names do no
0480: 74 20 62 65 67 69 6e 20 6f 72 20 65 6e 64 20 77 t begin or end w
0490: 69 74 68 20 77 68 69 74 65 73 70 61 63 65 2c 0a ith whitespace,.
04a0: 2a 2a 20 61 6e 64 20 64 6f 20 6e 6f 74 20 63 6f ** and do not co
04b0: 6e 74 61 69 6e 20 74 61 62 73 20 6f 72 20 6f 74 ntain tabs or ot
04c0: 68 65 72 20 63 6f 6e 74 72 6f 6c 20 63 68 61 72 her control char
04d0: 61 63 74 65 72 73 20 61 6e 64 20 64 6f 20 6e 6f acters and do no
04e0: 74 0a 2a 2a 20 63 6f 6e 74 61 69 6e 20 6d 6f 72 t.** contain mor
04f0: 65 20 74 68 61 6e 20 61 20 73 69 6e 67 6c 65 20 e than a single
0500: 73 70 61 63 65 20 63 68 61 72 61 63 74 65 72 20 space character
0510: 69 6e 20 61 20 72 6f 77 2e 20 20 57 65 6c 6c 2d in a row. Well-
0520: 66 6f 72 6d 65 64 0a 2a 2a 20 6e 61 6d 65 73 20 formed.** names
0530: 6d 75 73 74 20 62 65 20 62 65 74 77 65 65 6e 20 must be between
0540: 33 20 61 6e 64 20 31 30 30 20 63 68 72 61 63 74 3 and 100 chract
0550: 65 72 73 20 69 6e 20 6c 65 6e 67 74 68 2c 20 69 ers in length, i
0560: 6e 63 6c 75 73 69 76 65 2e 0a 2a 2f 0a 69 6e 74 nclusive..*/.int
0570: 20 77 69 6b 69 5f 6e 61 6d 65 5f 69 73 5f 77 65 wiki_name_is_we
0580: 6c 6c 66 6f 72 6d 65 64 28 63 6f 6e 73 74 20 63 llformed(const c
0590: 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69 har *z){. int i
05a0: 3b 0a 20 20 69 66 28 20 7a 5b 30 5d 3c 3d 30 78 ;. if( z[0]<=0x
05b0: 32 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 ){. return
05c0: 20 30 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 0;. }. for(i=
05d0: 31 3b 20 7a 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 1; z[i]; i++){.
05e0: 20 20 20 69 66 28 20 7a 5b 69 5d 3c 30 78 32 30 if( z[i]<0x20
05f0: 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 ) return 0;.
0600: 20 69 66 28 20 7a 5b 69 5d 3d 3d 30 78 32 30 20 if( z[i]==0x20
0610: 26 26 20 7a 5b 69 2d 31 5d 3d 3d 30 78 32 30 20 && z[i-1]==0x20
0620: 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a ) return 0;. }.
0630: 20 20 69 66 28 20 7a 5b 69 2d 31 5d 3d 3d 27 20 if( z[i-1]=='
0640: 27 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 ' ) return 0;.
0650: 69 66 28 20 69 3c 33 20 7c 7c 20 69 3e 31 30 30 if( i<3 || i>100
0660: 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 72 ) return 0;. r
0670: 65 74 75 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a eturn 1;.}../*.*
0680: 2a 20 4f 75 74 70 75 74 20 72 75 6c 65 73 20 66 * Output rules f
0690: 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 77 or well-formed w
06a0: 69 6b 69 20 70 61 67 65 73 0a 2a 2f 0a 73 74 61 iki pages.*/.sta
06b0: 74 69 63 20 76 6f 69 64 20 77 65 6c 6c 5f 66 6f tic void well_fo
06c0: 72 6d 65 64 5f 77 69 6b 69 5f 6e 61 6d 65 5f 72 rmed_wiki_name_r
06d0: 75 6c 65 73 28 76 6f 69 64 29 7b 0a 20 20 40 20 ules(void){. @
06e0: 3c 75 6c 3e 0a 20 20 40 20 3c 6c 69 3e 20 4d 75 <ul>. @ <li> Mu
06f0: 73 74 20 6e 6f 74 20 62 65 67 69 6e 20 6f 72 20 st not begin or
0700: 65 6e 64 20 77 69 74 68 20 61 20 73 70 61 63 65 end with a space
0710: 2e 0a 20 20 40 20 3c 6c 69 3e 20 4d 75 73 74 20 .. @ <li> Must
0720: 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 79 20 not contain any
0730: 63 6f 6e 74 72 6f 6c 20 63 68 61 72 61 63 74 65 control characte
0740: 72 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 74 61 rs, including ta
0750: 62 20 6f 72 0a 20 20 40 20 20 20 20 20 20 6e 65 b or. @ ne
0760: 77 6c 69 6e 65 2e 0a 20 20 40 20 3c 6c 69 3e 20 wline.. @ <li>
0770: 4d 75 73 74 20 6e 6f 74 20 68 61 76 65 20 74 77 Must not have tw
0780: 6f 20 6f 72 20 6d 6f 72 65 20 73 70 61 63 65 73 o or more spaces
0790: 20 69 6e 20 61 20 72 6f 77 20 69 6e 74 65 72 6e in a row intern
07a0: 61 6c 6c 79 2e 0a 20 20 40 20 3c 6c 69 3e 20 4d ally.. @ <li> M
07b0: 75 73 74 20 62 65 20 62 65 74 77 65 65 6e 20 33 ust be between 3
07c0: 20 61 6e 64 20 31 30 30 20 63 68 61 72 61 63 74 and 100 charact
07d0: 65 72 73 20 69 6e 20 6c 65 6e 67 74 68 2e 0a 20 ers in length..
07e0: 20 40 20 3c 2f 75 6c 3e 0a 7d 0a 0a 2f 2a 0a 2a @ </ul>.}../*.*
07f0: 2a 20 43 68 65 63 6b 20 61 20 77 69 6b 69 20 6e * Check a wiki n
0800: 61 6d 65 2e 20 20 49 66 20 69 74 20 69 73 20 6e ame. If it is n
0810: 6f 74 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 2c 20 ot well-formed,
0820: 74 68 65 6e 20 69 73 73 75 65 20 61 6e 20 65 72 then issue an er
0830: 72 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 74 75 72 ror.** and retur
0840: 6e 20 74 72 75 65 2e 20 20 49 66 20 69 74 20 69 n true. If it i
0850: 73 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 2c 20 72 s well-formed, r
0860: 65 74 75 72 6e 20 66 61 6c 73 65 2e 0a 2a 2f 0a eturn false..*/.
0870: 73 74 61 74 69 63 20 69 6e 74 20 63 68 65 63 6b static int check
0880: 5f 6e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 _name(const char
0890: 20 2a 7a 29 7b 0a 20 20 69 66 28 20 21 77 69 6b *z){. if( !wik
08a0: 69 5f 6e 61 6d 65 5f 69 73 5f 77 65 6c 6c 66 6f i_name_is_wellfo
08b0: 72 6d 65 64 28 7a 29 20 29 7b 0a 20 20 20 20 73 rmed(z) ){. s
08c0: 74 79 6c 65 5f 68 65 61 64 65 72 28 22 57 69 6b tyle_header("Wik
08d0: 69 20 50 61 67 65 20 4e 61 6d 65 20 45 72 72 6f i Page Name Erro
08e0: 72 22 29 3b 0a 20 20 20 20 40 20 54 68 65 20 77 r");. @ The w
08f0: 69 6b 69 20 6e 61 6d 65 20 22 3c 62 3e 25 68 28 iki name "<b>%h(
0900: 7a 29 3c 2f 62 3e 22 20 69 73 20 6e 6f 74 20 77 z)</b>" is not w
0910: 65 6c 6c 2d 66 6f 72 6d 65 64 2e 20 20 52 75 6c ell-formed. Rul
0920: 65 73 20 66 6f 72 0a 20 20 20 20 40 20 77 69 6b es for. @ wik
0930: 69 20 70 61 67 65 20 6e 61 6d 65 73 3a 0a 20 20 i page names:.
0940: 20 20 77 65 6c 6c 5f 66 6f 72 6d 65 64 5f 77 69 well_formed_wi
0950: 6b 69 5f 6e 61 6d 65 5f 72 75 6c 65 73 28 29 3b ki_name_rules();
0960: 0a 20 20 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65 . style_foote
0970: 72 28 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 r();. return
0980: 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 1;. }. return
0990: 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50 0;.}../*.** WEBP
09a0: 41 47 45 3a 20 68 6f 6d 65 0a 2a 2a 20 57 45 42 AGE: home.** WEB
09b0: 50 41 47 45 3a 20 69 6e 64 65 78 0a 2a 2a 20 57 PAGE: index.** W
09c0: 45 42 50 41 47 45 3a 20 6e 6f 74 5f 66 6f 75 6e EBPAGE: not_foun
09d0: 64 0a 2a 2f 0a 76 6f 69 64 20 68 6f 6d 65 5f 70 d.*/.void home_p
09e0: 61 67 65 28 76 6f 69 64 29 7b 0a 20 20 63 68 61 age(void){. cha
09f0: 72 20 2a 7a 50 61 67 65 4e 61 6d 65 20 3d 20 64 r *zPageName = d
0a00: 62 5f 67 65 74 28 22 70 72 6f 6a 65 63 74 2d 6e b_get("project-n
0a10: 61 6d 65 22 2c 30 29 3b 0a 20 20 6c 6f 67 69 6e ame",0);. login
0a20: 5f 63 68 65 63 6b 5f 63 72 65 64 65 6e 74 69 61 _check_credentia
0a30: 6c 73 28 29 3b 0a 20 20 69 66 28 20 21 67 2e 6f ls();. if( !g.o
0a40: 6b 52 64 57 69 6b 69 20 29 7b 0a 20 20 20 20 63 kRdWiki ){. c
0a50: 67 69 5f 72 65 64 69 72 65 63 74 66 28 22 25 73 gi_redirectf("%s
0a60: 2f 6c 6f 67 69 6e 3f 67 3d 25 73 2f 68 6f 6d 65 /login?g=%s/home
0a70: 22 2c 20 67 2e 7a 42 61 73 65 55 52 4c 2c 20 67 ", g.zBaseURL, g
0a80: 2e 7a 42 61 73 65 55 52 4c 29 3b 0a 20 20 7d 0a .zBaseURL);. }.
0a90: 20 20 69 66 28 20 7a 50 61 67 65 4e 61 6d 65 20 if( zPageName
0aa0: 29 7b 0a 20 20 20 20 6c 6f 67 69 6e 5f 63 68 65 ){. login_che
0ab0: 63 6b 5f 63 72 65 64 65 6e 74 69 61 6c 73 28 29 ck_credentials()
0ac0: 3b 0a 20 20 20 20 67 2e 7a 45 78 74 72 61 20 3d ;. g.zExtra =
0ad0: 20 7a 50 61 67 65 4e 61 6d 65 3b 0a 20 20 20 20 zPageName;.
0ae0: 63 67 69 5f 73 65 74 5f 70 61 72 61 6d 65 74 65 cgi_set_paramete
0af0: 72 5f 6e 6f 63 6f 70 79 28 22 6e 61 6d 65 22 2c r_nocopy("name",
0b00: 20 67 2e 7a 45 78 74 72 61 29 3b 0a 20 20 20 20 g.zExtra);.
0b10: 67 2e 69 73 48 6f 6d 65 20 3d 20 31 3b 0a 20 20 g.isHome = 1;.
0b20: 20 20 77 69 6b 69 5f 70 61 67 65 28 29 3b 0a 20 wiki_page();.
0b30: 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 return;. }.
0b40: 20 73 74 79 6c 65 5f 68 65 61 64 65 72 28 22 48 style_header("H
0b50: 6f 6d 65 22 29 3b 0a 20 20 40 20 3c 70 3e 54 68 ome");. @ <p>Th
0b60: 69 73 20 69 73 20 61 20 73 74 75 62 20 68 6f 6d is is a stub hom
0b70: 65 2d 70 61 67 65 20 66 6f 72 20 74 68 65 20 70 e-page for the p
0b80: 72 6f 6a 65 63 74 2e 0a 20 20 40 20 54 6f 20 66 roject.. @ To f
0b90: 69 6c 6c 20 69 6e 20 74 68 69 73 20 70 61 67 65 ill in this page
0ba0: 2c 20 66 69 72 73 74 20 67 6f 20 74 6f 0a 20 20 , first go to.
0bb0: 40 20 3c 61 20 68 72 65 66 3d 22 25 73 28 67 2e @ <a href="%s(g.
0bc0: 7a 42 61 73 65 55 52 4c 29 2f 73 65 74 75 70 5f zBaseURL)/setup_
0bd0: 63 6f 6e 66 69 67 22 3e 73 65 74 75 70 2f 63 6f config">setup/co
0be0: 6e 66 69 67 3c 2f 61 3e 0a 20 20 40 20 61 6e 64 nfig</a>. @ and
0bf0: 20 65 73 74 61 62 6c 69 73 68 20 61 20 22 50 72 establish a "Pr
0c00: 6f 6a 65 63 74 20 4e 61 6d 65 22 2e 20 20 54 68 oject Name". Th
0c10: 65 6e 20 63 72 65 61 74 65 20 61 0a 20 20 40 20 en create a. @
0c20: 77 69 6b 69 20 70 61 67 65 20 77 69 74 68 20 74 wiki page with t
0c30: 68 61 74 20 6e 61 6d 65 2e 20 20 54 68 65 20 63 hat name. The c
0c40: 6f 6e 74 65 6e 74 20 6f 66 20 74 68 61 74 20 77 ontent of that w
0c50: 69 6b 69 20 70 61 67 65 0a 20 20 40 20 77 69 6c iki page. @ wil
0c60: 6c 20 62 65 20 64 69 73 70 6c 61 79 65 64 20 69 l be displayed i
0c70: 6e 20 70 6c 61 63 65 20 6f 66 20 74 68 69 73 20 n place of this
0c80: 6d 65 73 73 61 67 65 2e 0a 20 20 73 74 79 6c 65 message.. style
0c90: 5f 66 6f 6f 74 65 72 28 29 3b 0a 7d 0a 0a 2f 2a _footer();.}../*
0ca0: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 .** Return true
0cb0: 69 66 20 74 68 65 20 67 69 76 65 6e 20 70 61 67 if the given pag
0cc0: 65 6e 61 6d 65 20 69 73 20 74 68 65 20 6e 61 6d ename is the nam
0cd0: 65 20 6f 66 20 74 68 65 20 73 61 6e 64 62 6f 78 e of the sandbox
0ce0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 69 .*/.static int i
0cf0: 73 5f 73 61 6e 64 62 6f 78 28 63 6f 6e 73 74 20 s_sandbox(const
0d00: 63 68 61 72 20 2a 7a 50 61 67 65 6e 61 6d 65 29 char *zPagename)
0d10: 7b 0a 20 20 72 65 74 75 72 6e 20 73 74 72 63 61 {. return strca
0d20: 73 65 63 6d 70 28 7a 50 61 67 65 6e 61 6d 65 2c secmp(zPagename,
0d30: 22 73 61 6e 64 62 6f 78 22 29 3d 3d 30 20 7c 7c "sandbox")==0 ||
0d40: 0a 20 20 20 20 20 20 20 20 20 73 74 72 63 61 73 . strcas
0d50: 65 63 6d 70 28 7a 50 61 67 65 6e 61 6d 65 2c 22 ecmp(zPagename,"
0d60: 73 61 6e 64 20 62 6f 78 22 29 3d 3d 30 3b 0a 7d sand box")==0;.}
0d70: 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50 41 47 45 3a ../*.** WEBPAGE:
0d80: 20 77 69 6b 69 0a 2a 2a 20 55 52 4c 3a 20 2f 77 wiki.** URL: /w
0d90: 69 6b 69 3f 6e 61 6d 65 3d 50 41 47 45 4e 41 4d iki?name=PAGENAM
0da0: 45 0a 2a 2f 0a 76 6f 69 64 20 77 69 6b 69 5f 70 E.*/.void wiki_p
0db0: 61 67 65 28 76 6f 69 64 29 7b 0a 20 20 63 68 61 age(void){. cha
0dc0: 72 20 2a 7a 54 61 67 3b 0a 20 20 69 6e 74 20 72 r *zTag;. int r
0dd0: 69 64 20 3d 20 30 3b 0a 20 20 69 6e 74 20 69 73 id = 0;. int is
0de0: 53 61 6e 64 62 6f 78 3b 0a 20 20 42 6c 6f 62 20 Sandbox;. Blob
0df0: 77 69 6b 69 3b 0a 20 20 4d 61 6e 69 66 65 73 74 wiki;. Manifest
0e00: 20 6d 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 m;. const char
0e10: 20 2a 7a 50 61 67 65 4e 61 6d 65 3b 0a 20 20 63 *zPageName;. c
0e20: 68 61 72 20 2a 7a 42 6f 64 79 20 3d 20 6d 70 72 har *zBody = mpr
0e30: 69 6e 74 66 28 22 25 73 22 2c 22 3c 69 3e 45 6d intf("%s","<i>Em
0e40: 70 74 79 20 50 61 67 65 3c 2f 69 3e 22 29 3b 0a pty Page</i>");.
0e50: 0a 20 20 6c 6f 67 69 6e 5f 63 68 65 63 6b 5f 63 . login_check_c
0e60: 72 65 64 65 6e 74 69 61 6c 73 28 29 3b 0a 20 20 redentials();.
0e70: 69 66 28 20 21 67 2e 6f 6b 52 64 57 69 6b 69 20 if( !g.okRdWiki
0e80: 29 7b 20 6c 6f 67 69 6e 5f 6e 65 65 64 65 64 28 ){ login_needed(
0e90: 29 3b 20 72 65 74 75 72 6e 3b 20 7d 0a 20 20 7a ); return; }. z
0ea0: 50 61 67 65 4e 61 6d 65 20 3d 20 50 28 22 6e 61 PageName = P("na
0eb0: 6d 65 22 29 3b 0a 20 20 69 66 28 20 7a 50 61 67 me");. if( zPag
0ec0: 65 4e 61 6d 65 3d 3d 30 20 29 7b 0a 20 20 20 20 eName==0 ){.
0ed0: 73 74 79 6c 65 5f 68 65 61 64 65 72 28 22 57 69 style_header("Wi
0ee0: 6b 69 22 29 3b 0a 20 20 20 20 40 20 3c 75 6c 3e ki");. @ <ul>
0ef0: 0a 20 20 20 20 7b 20 63 68 61 72 20 2a 7a 48 6f . { char *zHo
0f00: 6d 65 50 61 67 65 4e 61 6d 65 20 3d 20 64 62 5f mePageName = db_
0f10: 67 65 74 28 22 70 72 6f 6a 65 63 74 2d 6e 61 6d get("project-nam
0f20: 65 22 2c 30 29 3b 0a 20 20 20 20 20 20 69 66 28 e",0);. if(
0f30: 20 7a 48 6f 6d 65 50 61 67 65 4e 61 6d 65 20 29 zHomePageName )
0f40: 7b 0a 20 20 20 20 20 20 20 20 40 20 3c 6c 69 3e {. @ <li>
0f50: 20 3c 61 20 68 72 65 66 3d 22 25 73 28 67 2e 7a <a href="%s(g.z
0f60: 42 61 73 65 55 52 4c 29 2f 77 69 6b 69 3f 6e 61 BaseURL)/wiki?na
0f70: 6d 65 3d 25 74 28 7a 48 6f 6d 65 50 61 67 65 4e me=%t(zHomePageN
0f80: 61 6d 65 29 22 3e 0a 20 20 20 20 20 20 20 20 40 ame)">. @
0f90: 20 20 20 20 20 20 25 68 28 7a 48 6f 6d 65 50 61 %h(zHomePa
0fa0: 67 65 4e 61 6d 65 29 3c 2f 61 3e 20 77 69 6b 69 geName)</a> wiki
0fb0: 20 68 6f 6d 65 20 70 61 67 65 2e 3c 2f 6c 69 3e home page.</li>
0fc0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 . }. }.
0fd0: 20 20 20 40 20 3c 6c 69 3e 20 3c 61 20 68 72 65 @ <li> <a hre
0fe0: 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 4c f="%s(g.zBaseURL
0ff0: 29 2f 74 69 6d 65 6c 69 6e 65 3f 79 3d 77 22 3e )/timeline?y=w">
1000: 52 65 63 65 6e 74 20 63 68 61 6e 67 65 73 3c 2f Recent changes</
1010: 61 3e 20 74 6f 20 77 69 6b 69 0a 20 20 20 20 40 a> to wiki. @
1020: 20 20 20 20 20 20 70 61 67 65 73 2e 20 3c 2f 6c pages. </l
1030: 69 3e 0a 20 20 20 20 40 20 3c 6c 69 3e 20 3c 61 i>. @ <li> <a
1040: 20 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 href="%s(g.zBas
1050: 65 55 52 4c 29 2f 77 69 6b 69 5f 72 75 6c 65 73 eURL)/wiki_rules
1060: 22 3e 46 6f 72 6d 61 74 74 69 6e 67 20 72 75 6c ">Formatting rul
1070: 65 73 3c 2f 61 3e 20 66 6f 72 20 0a 20 20 20 20 es</a> for .
1080: 40 20 20 20 20 20 20 77 69 6b 69 2e 3c 2f 6c 69 @ wiki.</li
1090: 3e 0a 20 20 20 20 40 20 3c 6c 69 3e 20 55 73 65 >. @ <li> Use
10a0: 20 74 68 65 20 3c 61 20 68 72 65 66 3d 22 25 73 the <a href="%s
10b0: 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 77 69 6b (g.zBaseURL)/wik
10c0: 69 3f 6e 61 6d 65 3d 53 61 6e 64 62 6f 78 22 3e i?name=Sandbox">
10d0: 53 61 6e 64 62 6f 78 3c 2f 61 3e 0a 20 20 20 20 Sandbox</a>.
10e0: 40 20 20 20 20 20 20 74 6f 20 65 78 70 65 72 69 @ to experi
10f0: 6d 65 6e 74 2e 3c 2f 6c 69 3e 0a 20 20 20 20 69 ment.</li>. i
1100: 66 28 20 67 2e 6f 6b 4e 65 77 57 69 6b 69 20 29 f( g.okNewWiki )
1110: 7b 0a 20 20 20 20 20 20 40 20 3c 6c 69 3e 20 20 {. @ <li>
1120: 43 72 65 61 74 65 20 61 20 3c 61 20 68 72 65 66 Create a <a href
1130: 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 ="%s(g.zBaseURL)
1140: 2f 77 69 6b 69 6e 65 77 22 3e 6e 65 77 20 77 69 /wikinew">new wi
1150: 6b 69 20 70 61 67 65 3c 2f 61 3e 2e 3c 2f 6c 69 ki page</a>.</li
1160: 3e 0a 20 20 20 20 7d 0a 20 20 20 20 40 20 3c 6c >. }. @ <l
1170: 69 3e 20 3c 61 20 68 72 65 66 3d 22 25 73 28 67 i> <a href="%s(g
1180: 2e 7a 42 61 73 65 55 52 4c 29 2f 77 63 6f 6e 74 .zBaseURL)/wcont
1190: 65 6e 74 22 3e 4c 69 73 74 20 6f 66 20 41 6c 6c ent">List of All
11a0: 20 57 69 6b 69 20 50 61 67 65 73 3c 2f 61 3e 0a Wiki Pages</a>.
11b0: 20 20 20 20 40 20 20 20 20 20 20 61 76 61 69 6c @ avail
11c0: 61 62 6c 65 20 6f 6e 20 74 68 69 73 20 73 65 72 able on this ser
11d0: 76 65 72 2e 3c 2f 6c 69 3e 0a 20 20 20 20 40 20 ver.</li>. @
11e0: 3c 2f 75 6c 3e 0a 20 20 20 20 73 74 79 6c 65 5f </ul>. style_
11f0: 66 6f 6f 74 65 72 28 29 3b 0a 20 20 20 20 72 65 footer();. re
1200: 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 69 66 28 20 turn;. }. if(
1210: 63 68 65 63 6b 5f 6e 61 6d 65 28 7a 50 61 67 65 check_name(zPage
1220: 4e 61 6d 65 29 20 29 20 72 65 74 75 72 6e 3b 0a Name) ) return;.
1230: 20 20 69 73 53 61 6e 64 62 6f 78 20 3d 20 69 73 isSandbox = is
1240: 5f 73 61 6e 64 62 6f 78 28 7a 50 61 67 65 4e 61 _sandbox(zPageNa
1250: 6d 65 29 3b 0a 20 20 69 66 28 20 69 73 53 61 6e me);. if( isSan
1260: 64 62 6f 78 20 29 7b 0a 20 20 20 20 7a 42 6f 64 dbox ){. zBod
1270: 79 20 3d 20 64 62 5f 67 65 74 28 22 73 61 6e 64 y = db_get("sand
1280: 62 6f 78 22 2c 7a 42 6f 64 79 29 3b 0a 20 20 7d box",zBody);. }
1290: 65 6c 73 65 7b 0a 20 20 20 20 7a 54 61 67 20 3d else{. zTag =
12a0: 20 6d 70 72 69 6e 74 66 28 22 77 69 6b 69 2d 25 mprintf("wiki-%
12b0: 73 22 2c 20 7a 50 61 67 65 4e 61 6d 65 29 3b 0a s", zPageName);.
12c0: 20 20 20 20 72 69 64 20 3d 20 64 62 5f 69 6e 74 rid = db_int
12d0: 28 30 2c 20 0a 20 20 20 20 20 20 22 53 45 4c 45 (0, . "SELE
12e0: 43 54 20 72 69 64 20 46 52 4f 4d 20 74 61 67 78 CT rid FROM tagx
12f0: 72 65 66 22 0a 20 20 20 20 20 20 22 20 57 48 45 ref". " WHE
1300: 52 45 20 74 61 67 69 64 3d 28 53 45 4c 45 43 54 RE tagid=(SELECT
1310: 20 74 61 67 69 64 20 46 52 4f 4d 20 74 61 67 20 tagid FROM tag
1320: 57 48 45 52 45 20 74 61 67 6e 61 6d 65 3d 25 51 WHERE tagname=%Q
1330: 29 22 0a 20 20 20 20 20 20 22 20 4f 52 44 45 52 )". " ORDER
1340: 20 42 59 20 6d 74 69 6d 65 20 44 45 53 43 22 2c BY mtime DESC",
1350: 20 7a 54 61 67 0a 20 20 20 20 29 3b 0a 20 20 20 zTag. );.
1360: 20 66 72 65 65 28 7a 54 61 67 29 3b 0a 20 20 20 free(zTag);.
1370: 20 6d 65 6d 73 65 74 28 26 6d 2c 20 30 2c 20 73 memset(&m, 0, s
1380: 69 7a 65 6f 66 28 6d 29 29 3b 0a 20 20 20 20 62 izeof(m));. b
1390: 6c 6f 62 5f 7a 65 72 6f 28 26 6d 2e 63 6f 6e 74 lob_zero(&m.cont
13a0: 65 6e 74 29 3b 0a 20 20 20 20 69 66 28 20 72 69 ent);. if( ri
13b0: 64 20 29 7b 0a 20 20 20 20 20 20 42 6c 6f 62 20 d ){. Blob
13c0: 63 6f 6e 74 65 6e 74 3b 0a 20 20 20 20 20 20 63 content;. c
13d0: 6f 6e 74 65 6e 74 5f 67 65 74 28 72 69 64 2c 20 ontent_get(rid,
13e0: 26 63 6f 6e 74 65 6e 74 29 3b 0a 20 20 20 20 20 &content);.
13f0: 20 6d 61 6e 69 66 65 73 74 5f 70 61 72 73 65 28 manifest_parse(
1400: 26 6d 2c 20 26 63 6f 6e 74 65 6e 74 29 3b 0a 20 &m, &content);.
1410: 20 20 20 20 20 69 66 28 20 6d 2e 74 79 70 65 3d if( m.type=
1420: 3d 43 46 54 59 50 45 5f 57 49 4b 49 20 29 7b 0a =CFTYPE_WIKI ){.
1430: 20 20 20 20 20 20 20 20 7a 42 6f 64 79 20 3d 20 zBody =
1440: 6d 2e 7a 57 69 6b 69 3b 0a 20 20 20 20 20 20 7d m.zWiki;. }
1450: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 . }. }. if(
1460: 20 21 67 2e 69 73 48 6f 6d 65 20 29 7b 0a 20 20 !g.isHome ){.
1470: 20 20 69 66 28 20 28 72 69 64 20 26 26 20 67 2e if( (rid && g.
1480: 6f 6b 57 72 57 69 6b 69 29 20 7c 7c 20 28 21 72 okWrWiki) || (!r
1490: 69 64 20 26 26 20 67 2e 6f 6b 4e 65 77 57 69 6b id && g.okNewWik
14a0: 69 29 20 29 7b 0a 20 20 20 20 20 20 73 74 79 6c i) ){. styl
14b0: 65 5f 73 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e e_submenu_elemen
14c0: 74 28 22 45 64 69 74 22 2c 20 22 45 64 69 74 20 t("Edit", "Edit
14d0: 57 69 6b 69 20 50 61 67 65 22 2c 20 22 25 73 2f Wiki Page", "%s/
14e0: 77 69 6b 69 65 64 69 74 3f 6e 61 6d 65 3d 25 54 wikiedit?name=%T
14f0: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 67 2e ",. g.
1500: 7a 54 6f 70 2c 20 7a 50 61 67 65 4e 61 6d 65 29 zTop, zPageName)
1510: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 ;. }. if(
1520: 72 69 64 20 26 26 20 67 2e 6f 6b 41 70 6e 64 57 rid && g.okApndW
1530: 69 6b 69 20 29 7b 0a 20 20 20 20 20 20 73 74 79 iki ){. sty
1540: 6c 65 5f 73 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 le_submenu_eleme
1550: 6e 74 28 22 41 70 70 65 6e 64 22 2c 20 22 41 64 nt("Append", "Ad
1560: 64 20 41 20 43 6f 6d 6d 65 6e 74 22 2c 20 22 25 d A Comment", "%
1570: 73 2f 77 69 6b 69 61 70 70 65 6e 64 3f 6e 61 6d s/wikiappend?nam
1580: 65 3d 25 54 22 2c 0a 20 20 20 20 20 20 20 20 20 e=%T",.
1590: 20 20 67 2e 7a 54 6f 70 2c 20 7a 50 61 67 65 4e g.zTop, zPageN
15a0: 61 6d 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 ame);. }.
15b0: 69 66 28 20 67 2e 6f 6b 48 69 73 74 6f 72 79 20 if( g.okHistory
15c0: 29 7b 0a 20 20 20 20 20 20 73 74 79 6c 65 5f 73 ){. style_s
15d0: 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 ubmenu_element("
15e0: 48 69 73 74 6f 72 79 22 2c 20 22 48 69 73 74 6f History", "Histo
15f0: 72 79 22 2c 20 22 25 73 2f 77 68 69 73 74 6f 72 ry", "%s/whistor
1600: 79 3f 6e 61 6d 65 3d 25 54 22 2c 0a 20 20 20 20 y?name=%T",.
1610: 20 20 20 20 20 20 20 67 2e 7a 54 6f 70 2c 20 7a g.zTop, z
1620: 50 61 67 65 4e 61 6d 65 29 3b 0a 20 20 20 20 7d PageName);. }
1630: 0a 20 20 7d 0a 20 20 73 74 79 6c 65 5f 68 65 61 . }. style_hea
1640: 64 65 72 28 7a 50 61 67 65 4e 61 6d 65 29 3b 0a der(zPageName);.
1650: 20 20 62 6c 6f 62 5f 69 6e 69 74 28 26 77 69 6b blob_init(&wik
1660: 69 2c 20 7a 42 6f 64 79 2c 20 2d 31 29 3b 0a 20 i, zBody, -1);.
1670: 20 77 69 6b 69 5f 63 6f 6e 76 65 72 74 28 26 77 wiki_convert(&w
1680: 69 6b 69 2c 20 30 2c 20 30 29 3b 0a 20 20 62 6c iki, 0, 0);. bl
1690: 6f 62 5f 72 65 73 65 74 28 26 77 69 6b 69 29 3b ob_reset(&wiki);
16a0: 0a 20 20 69 66 28 20 21 69 73 53 61 6e 64 62 6f . if( !isSandbo
16b0: 78 20 29 7b 0a 20 20 20 20 6d 61 6e 69 66 65 73 x ){. manifes
16c0: 74 5f 63 6c 65 61 72 28 26 6d 29 3b 0a 20 20 7d t_clear(&m);. }
16d0: 0a 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 . style_footer(
16e0: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50 );.}../*.** WEBP
16f0: 41 47 45 3a 20 77 69 6b 69 65 64 69 74 0a 2a 2a AGE: wikiedit.**
1700: 20 55 52 4c 3a 20 2f 77 69 6b 69 65 64 69 74 3f URL: /wikiedit?
1710: 6e 61 6d 65 3d 50 41 47 45 4e 41 4d 45 0a 2a 2f name=PAGENAME.*/
1720: 0a 76 6f 69 64 20 77 69 6b 69 65 64 69 74 5f 70 .void wikiedit_p
1730: 61 67 65 28 76 6f 69 64 29 7b 0a 20 20 63 68 61 age(void){. cha
1740: 72 20 2a 7a 54 61 67 3b 0a 20 20 69 6e 74 20 72 r *zTag;. int r
1750: 69 64 20 3d 20 30 3b 0a 20 20 69 6e 74 20 69 73 id = 0;. int is
1760: 53 61 6e 64 62 6f 78 3b 0a 20 20 42 6c 6f 62 20 Sandbox;. Blob
1770: 77 69 6b 69 3b 0a 20 20 4d 61 6e 69 66 65 73 74 wiki;. Manifest
1780: 20 6d 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 m;. const char
1790: 20 2a 7a 50 61 67 65 4e 61 6d 65 3b 0a 20 20 63 *zPageName;. c
17a0: 68 61 72 20 2a 7a 48 74 6d 6c 50 61 67 65 4e 61 har *zHtmlPageNa
17b0: 6d 65 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 63 me;. int n;. c
17c0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 0a 20 20 onst char *z;.
17d0: 63 68 61 72 20 2a 7a 42 6f 64 79 20 3d 20 28 63 char *zBody = (c
17e0: 68 61 72 2a 29 50 28 22 77 22 29 3b 0a 0a 20 20 har*)P("w");..
17f0: 69 66 28 20 7a 42 6f 64 79 20 29 7b 0a 20 20 20 if( zBody ){.
1800: 20 7a 42 6f 64 79 20 3d 20 6d 70 72 69 6e 74 66 zBody = mprintf
1810: 28 22 25 73 22 2c 20 7a 42 6f 64 79 29 3b 0a 20 ("%s", zBody);.
1820: 20 7d 0a 20 20 6c 6f 67 69 6e 5f 63 68 65 63 6b }. login_check
1830: 5f 63 72 65 64 65 6e 74 69 61 6c 73 28 29 3b 0a _credentials();.
1840: 20 20 7a 50 61 67 65 4e 61 6d 65 20 3d 20 50 44 zPageName = PD
1850: 28 22 6e 61 6d 65 22 2c 22 22 29 3b 0a 20 20 69 ("name","");. i
1860: 66 28 20 63 68 65 63 6b 5f 6e 61 6d 65 28 7a 50 f( check_name(zP
1870: 61 67 65 4e 61 6d 65 29 20 29 20 72 65 74 75 72 ageName) ) retur
1880: 6e 3b 0a 20 20 69 73 53 61 6e 64 62 6f 78 20 3d n;. isSandbox =
1890: 20 69 73 5f 73 61 6e 64 62 6f 78 28 7a 50 61 67 is_sandbox(zPag
18a0: 65 4e 61 6d 65 29 3b 0a 20 20 69 66 28 20 69 73 eName);. if( is
18b0: 53 61 6e 64 62 6f 78 20 29 7b 0a 20 20 20 20 69 Sandbox ){. i
18c0: 66 28 20 21 67 2e 6f 6b 57 72 57 69 6b 69 20 29 f( !g.okWrWiki )
18d0: 7b 0a 20 20 20 20 20 20 6c 6f 67 69 6e 5f 6e 65 {. login_ne
18e0: 65 64 65 64 28 29 3b 0a 20 20 20 20 20 20 72 65 eded();. re
18f0: 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 turn;. }.
1900: 69 66 28 20 7a 42 6f 64 79 3d 3d 30 20 29 7b 0a if( zBody==0 ){.
1910: 20 20 20 20 20 20 7a 42 6f 64 79 20 3d 20 64 62 zBody = db
1920: 5f 67 65 74 28 22 73 61 6e 64 62 6f 78 22 2c 22 _get("sandbox","
1930: 22 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 ");. }. }els
1940: 65 7b 0a 20 20 20 20 7a 54 61 67 20 3d 20 6d 70 e{. zTag = mp
1950: 72 69 6e 74 66 28 22 77 69 6b 69 2d 25 73 22 2c rintf("wiki-%s",
1960: 20 7a 50 61 67 65 4e 61 6d 65 29 3b 0a 20 20 20 zPageName);.
1970: 20 72 69 64 20 3d 20 64 62 5f 69 6e 74 28 30 2c rid = db_int(0,
1980: 20 0a 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 . "SELECT
1990: 72 69 64 20 46 52 4f 4d 20 74 61 67 78 72 65 66 rid FROM tagxref
19a0: 22 0a 20 20 20 20 20 20 22 20 57 48 45 52 45 20 ". " WHERE
19b0: 74 61 67 69 64 3d 28 53 45 4c 45 43 54 20 74 61 tagid=(SELECT ta
19c0: 67 69 64 20 46 52 4f 4d 20 74 61 67 20 57 48 45 gid FROM tag WHE
19d0: 52 45 20 74 61 67 6e 61 6d 65 3d 25 51 29 22 0a RE tagname=%Q)".
19e0: 20 20 20 20 20 20 22 20 4f 52 44 45 52 20 42 59 " ORDER BY
19f0: 20 6d 74 69 6d 65 20 44 45 53 43 22 2c 20 7a 54 mtime DESC", zT
1a00: 61 67 0a 20 20 20 20 29 3b 0a 20 20 20 20 66 72 ag. );. fr
1a10: 65 65 28 7a 54 61 67 29 3b 0a 20 20 20 20 69 66 ee(zTag);. if
1a20: 28 20 28 72 69 64 20 26 26 20 21 67 2e 6f 6b 57 ( (rid && !g.okW
1a30: 72 57 69 6b 69 29 20 7c 7c 20 28 21 72 69 64 20 rWiki) || (!rid
1a40: 26 26 20 21 67 2e 6f 6b 4e 65 77 57 69 6b 69 29 && !g.okNewWiki)
1a50: 20 29 7b 0a 20 20 20 20 20 20 6c 6f 67 69 6e 5f ){. login_
1a60: 6e 65 65 64 65 64 28 29 3b 0a 20 20 20 20 20 20 needed();.
1a70: 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 return;. }.
1a80: 20 20 6d 65 6d 73 65 74 28 26 6d 2c 20 30 2c 20 memset(&m, 0,
1a90: 73 69 7a 65 6f 66 28 6d 29 29 3b 0a 20 20 20 20 sizeof(m));.
1aa0: 62 6c 6f 62 5f 7a 65 72 6f 28 26 6d 2e 63 6f 6e blob_zero(&m.con
1ab0: 74 65 6e 74 29 3b 0a 20 20 20 20 69 66 28 20 72 tent);. if( r
1ac0: 69 64 20 26 26 20 7a 42 6f 64 79 3d 3d 30 20 29 id && zBody==0 )
1ad0: 7b 0a 20 20 20 20 20 20 42 6c 6f 62 20 63 6f 6e {. Blob con
1ae0: 74 65 6e 74 3b 0a 20 20 20 20 20 20 63 6f 6e 74 tent;. cont
1af0: 65 6e 74 5f 67 65 74 28 72 69 64 2c 20 26 63 6f ent_get(rid, &co
1b00: 6e 74 65 6e 74 29 3b 0a 20 20 20 20 20 20 6d 61 ntent);. ma
1b10: 6e 69 66 65 73 74 5f 70 61 72 73 65 28 26 6d 2c nifest_parse(&m,
1b20: 20 26 63 6f 6e 74 65 6e 74 29 3b 0a 20 20 20 20 &content);.
1b30: 20 20 69 66 28 20 6d 2e 74 79 70 65 3d 3d 43 46 if( m.type==CF
1b40: 54 59 50 45 5f 57 49 4b 49 20 29 7b 0a 20 20 20 TYPE_WIKI ){.
1b50: 20 20 20 20 20 7a 42 6f 64 79 20 3d 20 6d 2e 7a zBody = m.z
1b60: 57 69 6b 69 3b 0a 20 20 20 20 20 20 7d 0a 20 20 Wiki;. }.
1b70: 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 50 28 }. }. if( P(
1b80: 22 73 75 62 6d 69 74 22 29 21 3d 30 20 26 26 20 "submit")!=0 &&
1b90: 7a 42 6f 64 79 21 3d 30 20 29 7b 0a 20 20 20 20 zBody!=0 ){.
1ba0: 63 68 61 72 20 2a 7a 44 61 74 65 3b 0a 20 20 20 char *zDate;.
1bb0: 20 42 6c 6f 62 20 63 6b 73 75 6d 3b 0a 20 20 20 Blob cksum;.
1bc0: 20 69 6e 74 20 6e 72 69 64 3b 0a 20 20 20 20 62 int nrid;. b
1bd0: 6c 6f 62 5f 7a 65 72 6f 28 26 77 69 6b 69 29 3b lob_zero(&wiki);
1be0: 0a 20 20 20 20 64 62 5f 62 65 67 69 6e 5f 74 72 . db_begin_tr
1bf0: 61 6e 73 61 63 74 69 6f 6e 28 29 3b 0a 20 20 20 ansaction();.
1c00: 20 69 66 28 20 69 73 53 61 6e 64 62 6f 78 20 29 if( isSandbox )
1c10: 7b 0a 20 20 20 20 20 20 64 62 5f 73 65 74 28 22 {. db_set("
1c20: 73 61 6e 64 62 6f 78 22 2c 7a 42 6f 64 79 2c 30 sandbox",zBody,0
1c30: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 );. }else{.
1c40: 20 20 20 20 6c 6f 67 69 6e 5f 76 65 72 69 66 79 login_verify
1c50: 5f 63 73 72 66 5f 73 65 63 72 65 74 28 29 3b 0a _csrf_secret();.
1c60: 20 20 20 20 20 20 7a 44 61 74 65 20 3d 20 64 62 zDate = db
1c70: 5f 74 65 78 74 28 30 2c 20 22 53 45 4c 45 43 54 _text(0, "SELECT
1c80: 20 64 61 74 65 74 69 6d 65 28 27 6e 6f 77 27 29 datetime('now')
1c90: 22 29 3b 0a 20 20 20 20 20 20 7a 44 61 74 65 5b ");. zDate[
1ca0: 31 30 5d 20 3d 20 27 54 27 3b 0a 20 20 20 20 20 10] = 'T';.
1cb0: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 77 blob_appendf(&w
1cc0: 69 6b 69 2c 20 22 44 20 25 73 5c 6e 22 2c 20 7a iki, "D %s\n", z
1cd0: 44 61 74 65 29 3b 0a 20 20 20 20 20 20 66 72 65 Date);. fre
1ce0: 65 28 7a 44 61 74 65 29 3b 0a 20 20 20 20 20 20 e(zDate);.
1cf0: 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 77 69 blob_appendf(&wi
1d00: 6b 69 2c 20 22 4c 20 25 46 5c 6e 22 2c 20 7a 50 ki, "L %F\n", zP
1d10: 61 67 65 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 ageName);.
1d20: 69 66 28 20 72 69 64 20 29 7b 0a 20 20 20 20 20 if( rid ){.
1d30: 20 20 20 63 68 61 72 20 2a 7a 55 75 69 64 20 3d char *zUuid =
1d40: 20 64 62 5f 74 65 78 74 28 30 2c 20 22 53 45 4c db_text(0, "SEL
1d50: 45 43 54 20 75 75 69 64 20 46 52 4f 4d 20 62 6c ECT uuid FROM bl
1d60: 6f 62 20 57 48 45 52 45 20 72 69 64 3d 25 64 22 ob WHERE rid=%d"
1d70: 2c 20 72 69 64 29 3b 0a 20 20 20 20 20 20 20 20 , rid);.
1d80: 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 77 69 blob_appendf(&wi
1d90: 6b 69 2c 20 22 50 20 25 73 5c 6e 22 2c 20 7a 55 ki, "P %s\n", zU
1da0: 75 69 64 29 3b 0a 20 20 20 20 20 20 20 20 66 72 uid);. fr
1db0: 65 65 28 7a 55 75 69 64 29 3b 0a 20 20 20 20 20 ee(zUuid);.
1dc0: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 67 2e 7a }. if( g.z
1dd0: 4c 6f 67 69 6e 20 29 7b 0a 20 20 20 20 20 20 20 Login ){.
1de0: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 77 blob_appendf(&w
1df0: 69 6b 69 2c 20 22 55 20 25 46 5c 6e 22 2c 20 67 iki, "U %F\n", g
1e00: 2e 7a 4c 6f 67 69 6e 29 3b 0a 20 20 20 20 20 20 .zLogin);.
1e10: 7d 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 }. blob_app
1e20: 65 6e 64 66 28 26 77 69 6b 69 2c 20 22 57 20 25 endf(&wiki, "W %
1e30: 64 5c 6e 25 73 5c 6e 22 2c 20 73 74 72 6c 65 6e d\n%s\n", strlen
1e40: 28 7a 42 6f 64 79 29 2c 20 7a 42 6f 64 79 29 3b (zBody), zBody);
1e50: 0a 20 20 20 20 20 20 6d 64 35 73 75 6d 5f 62 6c . md5sum_bl
1e60: 6f 62 28 26 77 69 6b 69 2c 20 26 63 6b 73 75 6d ob(&wiki, &cksum
1e70: 29 3b 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 );. blob_ap
1e80: 70 65 6e 64 66 28 26 77 69 6b 69 2c 20 22 5a 20 pendf(&wiki, "Z
1e90: 25 62 5c 6e 22 2c 20 26 63 6b 73 75 6d 29 3b 0a %b\n", &cksum);.
1ea0: 20 20 20 20 20 20 62 6c 6f 62 5f 72 65 73 65 74 blob_reset
1eb0: 28 26 63 6b 73 75 6d 29 3b 0a 20 20 20 20 20 20 (&cksum);.
1ec0: 6e 72 69 64 20 3d 20 63 6f 6e 74 65 6e 74 5f 70 nrid = content_p
1ed0: 75 74 28 26 77 69 6b 69 2c 20 30 2c 20 30 29 3b ut(&wiki, 0, 0);
1ee0: 0a 20 20 20 20 20 20 64 62 5f 6d 75 6c 74 69 5f . db_multi_
1ef0: 65 78 65 63 28 22 49 4e 53 45 52 54 20 4f 52 20 exec("INSERT OR
1f00: 49 47 4e 4f 52 45 20 49 4e 54 4f 20 75 6e 73 65 IGNORE INTO unse
1f10: 6e 74 20 56 41 4c 55 45 53 28 25 64 29 22 2c 20 nt VALUES(%d)",
1f20: 6e 72 69 64 29 3b 0a 20 20 20 20 20 20 6d 61 6e nrid);. man
1f30: 69 66 65 73 74 5f 63 72 6f 73 73 6c 69 6e 6b 28 ifest_crosslink(
1f40: 6e 72 69 64 2c 20 26 77 69 6b 69 29 3b 0a 20 20 nrid, &wiki);.
1f50: 20 20 20 20 62 6c 6f 62 5f 72 65 73 65 74 28 26 blob_reset(&
1f60: 77 69 6b 69 29 3b 0a 20 20 20 20 20 20 63 6f 6e wiki);. con
1f70: 74 65 6e 74 5f 64 65 6c 74 69 66 79 28 72 69 64 tent_deltify(rid
1f80: 2c 20 6e 72 69 64 2c 20 30 29 3b 0a 20 20 20 20 , nrid, 0);.
1f90: 7d 0a 20 20 20 20 64 62 5f 65 6e 64 5f 74 72 61 }. db_end_tra
1fa0: 6e 73 61 63 74 69 6f 6e 28 30 29 3b 0a 20 20 20 nsaction(0);.
1fb0: 20 63 67 69 5f 72 65 64 69 72 65 63 74 66 28 22 cgi_redirectf("
1fc0: 77 69 6b 69 3f 6e 61 6d 65 3d 25 54 22 2c 20 7a wiki?name=%T", z
1fd0: 50 61 67 65 4e 61 6d 65 29 3b 0a 20 20 7d 0a 20 PageName);. }.
1fe0: 20 69 66 28 20 50 28 22 63 61 6e 63 65 6c 22 29 if( P("cancel")
1ff0: 21 3d 30 20 29 7b 0a 20 20 20 20 63 67 69 5f 72 !=0 ){. cgi_r
2000: 65 64 69 72 65 63 74 66 28 22 77 69 6b 69 3f 6e edirectf("wiki?n
2010: 61 6d 65 3d 25 54 22 2c 20 7a 50 61 67 65 4e 61 ame=%T", zPageNa
2020: 6d 65 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b me);. return;
2030: 0a 20 20 7d 0a 20 20 69 66 28 20 7a 42 6f 64 79 . }. if( zBody
2040: 3d 3d 30 20 29 7b 0a 20 20 20 20 7a 42 6f 64 79 ==0 ){. zBody
2050: 20 3d 20 6d 70 72 69 6e 74 66 28 22 3c 69 3e 45 = mprintf("<i>E
2060: 6d 70 74 79 20 50 61 67 65 3c 2f 69 3e 22 29 3b mpty Page</i>");
2070: 0a 20 20 7d 0a 20 20 7a 48 74 6d 6c 50 61 67 65 . }. zHtmlPage
2080: 4e 61 6d 65 20 3d 20 6d 70 72 69 6e 74 66 28 22 Name = mprintf("
2090: 45 64 69 74 3a 20 25 73 22 2c 20 7a 50 61 67 65 Edit: %s", zPage
20a0: 4e 61 6d 65 29 3b 0a 20 20 73 74 79 6c 65 5f 68 Name);. style_h
20b0: 65 61 64 65 72 28 7a 48 74 6d 6c 50 61 67 65 4e eader(zHtmlPageN
20c0: 61 6d 65 29 3b 0a 20 20 69 66 28 20 50 28 22 70 ame);. if( P("p
20d0: 72 65 76 69 65 77 22 29 21 3d 30 20 29 7b 0a 20 review")!=0 ){.
20e0: 20 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 77 69 blob_zero(&wi
20f0: 6b 69 29 3b 0a 20 20 20 20 62 6c 6f 62 5f 61 70 ki);. blob_ap
2100: 70 65 6e 64 28 26 77 69 6b 69 2c 20 7a 42 6f 64 pend(&wiki, zBod
2110: 79 2c 20 2d 31 29 3b 0a 20 20 20 20 40 20 50 72 y, -1);. @ Pr
2120: 65 76 69 65 77 3a 3c 68 72 3e 0a 20 20 20 20 77 eview:<hr>. w
2130: 69 6b 69 5f 63 6f 6e 76 65 72 74 28 26 77 69 6b iki_convert(&wik
2140: 69 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 40 20 i, 0, 0);. @
2150: 3c 68 72 3e 0a 20 20 20 20 62 6c 6f 62 5f 72 65 <hr>. blob_re
2160: 73 65 74 28 26 77 69 6b 69 29 3b 0a 20 20 7d 0a set(&wiki);. }.
2170: 20 20 66 6f 72 28 6e 3d 32 2c 20 7a 3d 7a 42 6f for(n=2, z=zBo
2180: 64 79 3b 20 7a 5b 30 5d 3b 20 7a 2b 2b 29 7b 0a dy; z[0]; z++){.
2190: 20 20 20 20 69 66 28 20 7a 5b 30 5d 3d 3d 27 5c if( z[0]=='\
21a0: 6e 27 20 29 20 6e 2b 2b 3b 0a 20 20 7d 0a 20 20 n' ) n++;. }.
21b0: 69 66 28 20 6e 3c 32 30 20 29 20 6e 20 3d 20 32 if( n<20 ) n = 2
21c0: 30 3b 0a 20 20 69 66 28 20 6e 3e 34 30 20 29 20 0;. if( n>40 )
21d0: 6e 20 3d 20 34 30 3b 0a 20 20 40 20 3c 66 6f 72 n = 40;. @ <for
21e0: 6d 20 6d 65 74 68 6f 64 3d 22 50 4f 53 54 22 20 m method="POST"
21f0: 61 63 74 69 6f 6e 3d 22 25 73 28 67 2e 7a 42 61 action="%s(g.zBa
2200: 73 65 55 52 4c 29 2f 77 69 6b 69 65 64 69 74 22 seURL)/wikiedit"
2210: 3e 0a 20 20 6c 6f 67 69 6e 5f 69 6e 73 65 72 74 >. login_insert
2220: 5f 63 73 72 66 5f 73 65 63 72 65 74 28 29 3b 0a _csrf_secret();.
2230: 20 20 40 20 3c 69 6e 70 75 74 20 74 79 70 65 3d @ <input type=
2240: 22 68 69 64 64 65 6e 22 20 6e 61 6d 65 3d 22 6e "hidden" name="n
2250: 61 6d 65 22 20 76 61 6c 75 65 3d 22 25 68 28 7a ame" value="%h(z
2260: 50 61 67 65 4e 61 6d 65 29 22 3e 0a 20 20 40 20 PageName)">. @
2270: 3c 74 65 78 74 61 72 65 61 20 6e 61 6d 65 3d 22 <textarea name="
2280: 77 22 20 63 6c 61 73 73 3d 22 77 69 6b 69 65 64 w" class="wikied
2290: 69 74 22 20 63 6f 6c 73 3d 22 38 30 22 20 0a 20 it" cols="80" .
22a0: 20 40 20 20 72 6f 77 73 3d 22 25 64 28 6e 29 22 @ rows="%d(n)"
22b0: 20 77 72 61 70 3d 22 76 69 72 74 75 61 6c 22 3e wrap="virtual">
22c0: 25 68 28 7a 42 6f 64 79 29 3c 2f 74 65 78 74 61 %h(zBody)</texta
22d0: 72 65 61 3e 0a 20 20 40 20 3c 62 72 3e 0a 20 20 rea>. @ <br>.
22e0: 40 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 73 @ <input type="s
22f0: 75 62 6d 69 74 22 20 6e 61 6d 65 3d 22 70 72 65 ubmit" name="pre
2300: 76 69 65 77 22 20 76 61 6c 75 65 3d 22 50 72 65 view" value="Pre
2310: 76 69 65 77 20 59 6f 75 72 20 43 68 61 6e 67 65 view Your Change
2320: 73 22 3e 0a 20 20 40 20 3c 69 6e 70 75 74 20 74 s">. @ <input t
2330: 79 70 65 3d 22 73 75 62 6d 69 74 22 20 6e 61 6d ype="submit" nam
2340: 65 3d 22 73 75 62 6d 69 74 22 20 76 61 6c 75 65 e="submit" value
2350: 3d 22 41 70 70 6c 79 20 54 68 65 73 65 20 43 68 ="Apply These Ch
2360: 61 6e 67 65 73 22 3e 0a 20 20 40 20 3c 69 6e 70 anges">. @ <inp
2370: 75 74 20 74 79 70 65 3d 22 73 75 62 6d 69 74 22 ut type="submit"
2380: 20 6e 61 6d 65 3d 22 63 61 6e 63 65 6c 22 20 76 name="cancel" v
2390: 61 6c 75 65 3d 22 43 61 6e 63 65 6c 22 3e 0a 20 alue="Cancel">.
23a0: 20 40 20 3c 2f 66 6f 72 6d 3e 0a 20 20 69 66 28 @ </form>. if(
23b0: 20 21 69 73 53 61 6e 64 62 6f 78 20 29 7b 0a 20 !isSandbox ){.
23c0: 20 20 20 6d 61 6e 69 66 65 73 74 5f 63 6c 65 61 manifest_clea
23d0: 72 28 26 6d 29 3b 0a 20 20 7d 0a 20 20 73 74 79 r(&m);. }. sty
23e0: 6c 65 5f 66 6f 6f 74 65 72 28 29 3b 0a 7d 0a 0a le_footer();.}..
23f0: 2f 2a 0a 2a 2a 20 57 45 42 50 41 47 45 3a 20 77 /*.** WEBPAGE: w
2400: 69 6b 69 6e 65 77 0a 2a 2a 20 55 52 4c 20 2f 77 ikinew.** URL /w
2410: 69 6b 69 6e 65 77 0a 2a 2a 0a 2a 2a 20 50 72 6f ikinew.**.** Pro
2420: 6d 70 74 20 74 68 65 20 75 73 65 72 20 74 6f 20 mpt the user to
2430: 65 6e 74 65 72 20 74 68 65 20 6e 61 6d 65 20 6f enter the name o
2440: 66 20 61 20 6e 65 77 20 77 69 6b 69 20 70 61 67 f a new wiki pag
2450: 65 2e 20 20 54 68 65 6e 20 72 65 64 69 72 65 63 e. Then redirec
2460: 74 0a 2a 2a 20 74 6f 20 74 68 65 20 77 69 6b 69 t.** to the wiki
2470: 65 64 69 74 20 73 63 72 65 65 6e 20 66 6f 72 20 edit screen for
2480: 74 68 61 74 20 6e 65 77 20 70 61 67 65 2e 0a 2a that new page..*
2490: 2f 0a 76 6f 69 64 20 77 69 6b 69 6e 65 77 5f 70 /.void wikinew_p
24a0: 61 67 65 28 76 6f 69 64 29 7b 0a 20 20 63 6f 6e age(void){. con
24b0: 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a st char *zName;.
24c0: 20 20 6c 6f 67 69 6e 5f 63 68 65 63 6b 5f 63 72 login_check_cr
24d0: 65 64 65 6e 74 69 61 6c 73 28 29 3b 0a 20 20 69 edentials();. i
24e0: 66 28 20 21 67 2e 6f 6b 4e 65 77 57 69 6b 69 20 f( !g.okNewWiki
24f0: 29 7b 0a 20 20 20 20 6c 6f 67 69 6e 5f 6e 65 65 ){. login_nee
2500: 64 65 64 28 29 3b 0a 20 20 20 20 72 65 74 75 72 ded();. retur
2510: 6e 3b 0a 20 20 7d 20 20 0a 20 20 7a 4e 61 6d 65 n;. } . zName
2520: 20 3d 20 50 44 28 22 6e 61 6d 65 22 2c 22 22 29 = PD("name","")
2530: 3b 0a 20 20 69 66 28 20 7a 4e 61 6d 65 5b 30 5d ;. if( zName[0]
2540: 20 26 26 20 77 69 6b 69 5f 6e 61 6d 65 5f 69 73 && wiki_name_is
2550: 5f 77 65 6c 6c 66 6f 72 6d 65 64 28 7a 4e 61 6d _wellformed(zNam
2560: 65 29 20 29 7b 0a 20 20 20 20 63 67 69 5f 72 65 e) ){. cgi_re
2570: 64 69 72 65 63 74 66 28 22 77 69 6b 69 65 64 69 directf("wikiedi
2580: 74 3f 6e 61 6d 65 3d 25 54 22 2c 20 7a 4e 61 6d t?name=%T", zNam
2590: 65 29 3b 0a 20 20 7d 0a 20 20 73 74 79 6c 65 5f e);. }. style_
25a0: 68 65 61 64 65 72 28 22 43 72 65 61 74 65 20 41 header("Create A
25b0: 20 4e 65 77 20 57 69 6b 69 20 50 61 67 65 22 29 New Wiki Page")
25c0: 3b 0a 20 20 40 20 3c 70 3e 52 75 6c 65 73 20 66 ;. @ <p>Rules f
25d0: 6f 72 20 77 69 6b 69 20 70 61 67 65 20 6e 61 6d or wiki page nam
25e0: 65 73 3a 0a 20 20 77 65 6c 6c 5f 66 6f 72 6d 65 es:. well_forme
25f0: 64 5f 77 69 6b 69 5f 6e 61 6d 65 5f 72 75 6c 65 d_wiki_name_rule
2600: 73 28 29 3b 0a 20 20 40 20 3c 2f 70 3e 0a 20 20 s();. @ </p>.
2610: 40 20 3c 66 6f 72 6d 20 6d 65 74 68 6f 64 3d 22 @ <form method="
2620: 50 4f 53 54 22 20 61 63 74 69 6f 6e 3d 22 25 73 POST" action="%s
2630: 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 77 69 6b (g.zBaseURL)/wik
2640: 69 6e 65 77 22 3e 0a 20 20 40 20 3c 70 3e 4e 61 inew">. @ <p>Na
2650: 6d 65 20 6f 66 20 6e 65 77 20 77 69 6b 69 20 70 me of new wiki p
2660: 61 67 65 3a 0a 20 20 40 20 3c 69 6e 70 75 74 20 age:. @ <input
2670: 74 79 70 65 3d 22 74 65 78 74 22 20 77 69 64 74 type="text" widt
2680: 68 3d 22 33 35 22 20 6e 61 6d 65 3d 22 6e 61 6d h="35" name="nam
2690: 65 22 20 76 61 6c 75 65 3d 22 25 68 28 7a 4e 61 e" value="%h(zNa
26a0: 6d 65 29 22 3e 0a 20 20 40 20 3c 69 6e 70 75 74 me)">. @ <input
26b0: 20 74 79 70 65 3d 22 73 75 62 6d 69 74 22 20 76 type="submit" v
26c0: 61 6c 75 65 3d 22 43 72 65 61 74 65 22 3e 0a 20 alue="Create">.
26d0: 20 40 20 3c 2f 70 3e 3c 2f 66 6f 72 6d 3e 0a 20 @ </p></form>.
26e0: 20 69 66 28 20 7a 4e 61 6d 65 5b 30 5d 20 29 7b if( zName[0] ){
26f0: 0a 20 20 20 20 40 20 3c 70 3e 3c 62 3e 3c 66 6f . @ <p><b><fo
2700: 6e 74 20 63 6f 6c 6f 72 3d 22 72 65 64 22 3e 0a nt color="red">.
2710: 20 20 20 20 40 20 22 25 68 28 7a 4e 61 6d 65 29 @ "%h(zName)
2720: 22 20 69 73 20 6e 6f 74 20 61 20 76 61 6c 69 64 " is not a valid
2730: 20 77 69 6b 69 20 70 61 67 65 20 6e 61 6d 65 21 wiki page name!
2740: 3c 2f 66 6f 6e 74 3e 3c 2f 62 3e 3c 2f 70 3e 0a </font></b></p>.
2750: 20 20 7d 0a 20 20 73 74 79 6c 65 5f 66 6f 6f 74 }. style_foot
2760: 65 72 28 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 er();.}.../*.**
2770: 41 70 70 65 6e 64 20 74 68 65 20 77 69 6b 69 20 Append the wiki
2780: 74 65 78 74 20 66 6f 72 20 61 6e 20 72 65 6d 61 text for an rema
2790: 72 6b 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 rk to the end of
27a0: 20 74 68 65 20 67 69 76 65 6e 20 42 4c 4f 42 2e the given BLOB.
27b0: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 .*/.static void
27c0: 61 70 70 65 6e 64 52 65 6d 61 72 6b 28 42 6c 6f appendRemark(Blo
27d0: 62 20 2a 70 29 7b 0a 20 20 63 68 61 72 20 2a 7a b *p){. char *z
27e0: 44 61 74 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68 Date;. const ch
27f0: 61 72 20 2a 7a 55 73 65 72 3b 0a 20 20 63 6f 6e ar *zUser;. con
2800: 73 74 20 63 68 61 72 20 2a 7a 52 65 6d 61 72 6b st char *zRemark
2810: 3b 0a 20 20 63 68 61 72 20 2a 7a 49 64 3b 0a 0a ;. char *zId;..
2820: 20 20 7a 44 61 74 65 20 3d 20 64 62 5f 74 65 78 zDate = db_tex
2830: 74 28 30 2c 20 22 53 45 4c 45 43 54 20 64 61 74 t(0, "SELECT dat
2840: 65 74 69 6d 65 28 27 6e 6f 77 27 29 22 29 3b 0a etime('now')");.
2850: 20 20 7a 49 64 20 3d 20 64 62 5f 74 65 78 74 28 zId = db_text(
2860: 30 2c 20 22 53 45 4c 45 43 54 20 6c 6f 77 65 72 0, "SELECT lower
2870: 28 68 65 78 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 (hex(randomblob(
2880: 38 29 29 29 22 29 3b 0a 20 20 62 6c 6f 62 5f 61 8)))");. blob_a
2890: 70 70 65 6e 64 28 70 2c 20 22 5c 6e 3c 3c 66 6f ppend(p, "\n<<fo
28a0: 73 73 69 6c 3e 3e 5c 6e 22 2c 20 2d 31 29 3b 0a ssil>>\n", -1);.
28b0: 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 70 blob_appendf(p
28c0: 2c 20 22 5c 6e 5c 6e 3c 68 72 3e 3c 64 69 76 20 , "\n\n<hr><div
28d0: 69 64 3d 5c 22 25 73 5c 22 3e 3c 69 3e 4f 6e 20 id=\"%s\"><i>On
28e0: 25 73 20 55 54 43 20 25 68 22 2c 20 0a 20 20 20 %s UTC %h", .
28f0: 20 7a 49 64 2c 20 7a 44 61 74 65 2c 20 67 2e 7a zId, zDate, g.z
2900: 4c 6f 67 69 6e 29 3b 0a 20 20 66 72 65 65 28 7a Login);. free(z
2910: 44 61 74 65 29 3b 0a 20 20 7a 55 73 65 72 20 3d Date);. zUser =
2920: 20 50 44 28 22 75 22 2c 67 2e 7a 4c 6f 67 69 6e PD("u",g.zLogin
2930: 29 3b 0a 20 20 69 66 28 20 7a 55 73 65 72 5b 30 );. if( zUser[0
2940: 5d 20 26 26 20 73 74 72 63 6d 70 28 7a 55 73 65 ] && strcmp(zUse
2950: 72 2c 67 2e 7a 4c 6f 67 69 6e 29 20 29 7b 0a 20 r,g.zLogin) ){.
2960: 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 blob_appendf(
2970: 70 2c 20 22 20 28 63 6c 61 69 6d 69 6e 67 20 74 p, " (claiming t
2980: 6f 20 62 65 20 25 68 29 22 2c 20 7a 55 73 65 72 o be %h)", zUser
2990: 29 3b 0a 20 20 7d 0a 20 20 7a 52 65 6d 61 72 6b );. }. zRemark
29a0: 20 3d 20 50 44 28 22 72 22 2c 22 22 29 3b 0a 20 = PD("r","");.
29b0: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 70 2c blob_appendf(p,
29c0: 20 22 20 61 64 64 65 64 3a 3c 2f 69 3e 3c 62 72 " added:</i><br
29d0: 20 2f 3e 5c 6e 25 73 5c 6e 3c 3c 66 6f 73 73 69 />\n%s\n<<fossi
29e0: 6c 3e 3e 5c 6e 3c 2f 64 69 76 20 69 64 3d 5c 22 l>>\n</div id=\"
29f0: 25 73 5c 22 3e 22 2c 20 7a 52 65 6d 61 72 6b 2c %s\">", zRemark,
2a00: 20 7a 49 64 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 zId);.}../*.**
2a10: 57 45 42 50 41 47 45 3a 20 77 69 6b 69 61 70 70 WEBPAGE: wikiapp
2a20: 65 6e 64 0a 2a 2a 20 55 52 4c 3a 20 2f 77 69 6b end.** URL: /wik
2a30: 69 61 70 70 65 6e 64 3f 6e 61 6d 65 3d 50 41 47 iappend?name=PAG
2a40: 45 4e 41 4d 45 0a 2a 2f 0a 76 6f 69 64 20 77 69 ENAME.*/.void wi
2a50: 6b 69 61 70 70 65 6e 64 5f 70 61 67 65 28 76 6f kiappend_page(vo
2a60: 69 64 29 7b 0a 20 20 63 68 61 72 20 2a 7a 54 61 id){. char *zTa
2a70: 67 3b 0a 20 20 69 6e 74 20 72 69 64 20 3d 20 30 g;. int rid = 0
2a80: 3b 0a 20 20 69 6e 74 20 69 73 53 61 6e 64 62 6f ;. int isSandbo
2a90: 78 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 x;. const char
2aa0: 2a 7a 50 61 67 65 4e 61 6d 65 3b 0a 20 20 63 68 *zPageName;. ch
2ab0: 61 72 20 2a 7a 48 74 6d 6c 50 61 67 65 4e 61 6d ar *zHtmlPageNam
2ac0: 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 e;. const char
2ad0: 2a 7a 55 73 65 72 3b 0a 0a 20 20 6c 6f 67 69 6e *zUser;.. login
2ae0: 5f 63 68 65 63 6b 5f 63 72 65 64 65 6e 74 69 61 _check_credentia
2af0: 6c 73 28 29 3b 0a 20 20 7a 50 61 67 65 4e 61 6d ls();. zPageNam
2b00: 65 20 3d 20 50 44 28 22 6e 61 6d 65 22 2c 22 22 e = PD("name",""
2b10: 29 3b 0a 20 20 69 66 28 20 63 68 65 63 6b 5f 6e );. if( check_n
2b20: 61 6d 65 28 7a 50 61 67 65 4e 61 6d 65 29 20 29 ame(zPageName) )
2b30: 20 72 65 74 75 72 6e 3b 0a 20 20 69 73 53 61 6e return;. isSan
2b40: 64 62 6f 78 20 3d 20 69 73 5f 73 61 6e 64 62 6f dbox = is_sandbo
2b50: 78 28 7a 50 61 67 65 4e 61 6d 65 29 3b 0a 20 20 x(zPageName);.
2b60: 69 66 28 20 21 69 73 53 61 6e 64 62 6f 78 20 29 if( !isSandbox )
2b70: 7b 0a 20 20 20 20 7a 54 61 67 20 3d 20 6d 70 72 {. zTag = mpr
2b80: 69 6e 74 66 28 22 77 69 6b 69 2d 25 73 22 2c 20 intf("wiki-%s",
2b90: 7a 50 61 67 65 4e 61 6d 65 29 3b 0a 20 20 20 20 zPageName);.
2ba0: 72 69 64 20 3d 20 64 62 5f 69 6e 74 28 30 2c 20 rid = db_int(0,
2bb0: 0a 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 72 . "SELECT r
2bc0: 69 64 20 46 52 4f 4d 20 74 61 67 78 72 65 66 22 id FROM tagxref"
2bd0: 0a 20 20 20 20 20 20 22 20 57 48 45 52 45 20 74 . " WHERE t
2be0: 61 67 69 64 3d 28 53 45 4c 45 43 54 20 74 61 67 agid=(SELECT tag
2bf0: 69 64 20 46 52 4f 4d 20 74 61 67 20 57 48 45 52 id FROM tag WHER
2c00: 45 20 74 61 67 6e 61 6d 65 3d 25 51 29 22 0a 20 E tagname=%Q)".
2c10: 20 20 20 20 20 22 20 4f 52 44 45 52 20 42 59 20 " ORDER BY
2c20: 6d 74 69 6d 65 20 44 45 53 43 22 2c 20 7a 54 61 mtime DESC", zTa
2c30: 67 0a 20 20 20 20 29 3b 0a 20 20 20 20 66 72 65 g. );. fre
2c40: 65 28 7a 54 61 67 29 3b 0a 20 20 20 20 69 66 28 e(zTag);. if(
2c50: 20 21 72 69 64 20 29 7b 0a 20 20 20 20 20 20 66 !rid ){. f
2c60: 6f 73 73 69 6c 5f 72 65 64 69 72 65 63 74 5f 68 ossil_redirect_h
2c70: 6f 6d 65 28 29 3b 0a 20 20 20 20 20 20 72 65 74 ome();. ret
2c80: 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 urn;. }. }.
2c90: 20 69 66 28 20 21 67 2e 6f 6b 41 70 6e 64 57 69 if( !g.okApndWi
2ca0: 6b 69 20 29 7b 0a 20 20 20 20 6c 6f 67 69 6e 5f ki ){. login_
2cb0: 6e 65 65 64 65 64 28 29 3b 0a 20 20 20 20 72 65 needed();. re
2cc0: 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 69 66 28 20 turn;. }. if(
2cd0: 50 28 22 73 75 62 6d 69 74 22 29 21 3d 30 20 26 P("submit")!=0 &
2ce0: 26 20 50 28 22 72 22 29 21 3d 30 20 26 26 20 50 & P("r")!=0 && P
2cf0: 28 22 75 22 29 21 3d 30 20 29 7b 0a 20 20 20 20 ("u")!=0 ){.
2d00: 63 68 61 72 20 2a 7a 44 61 74 65 3b 0a 20 20 20 char *zDate;.
2d10: 20 42 6c 6f 62 20 63 6b 73 75 6d 3b 0a 20 20 20 Blob cksum;.
2d20: 20 69 6e 74 20 6e 72 69 64 3b 0a 20 20 20 20 42 int nrid;. B
2d30: 6c 6f 62 20 62 6f 64 79 3b 0a 20 20 20 20 42 6c lob body;. Bl
2d40: 6f 62 20 63 6f 6e 74 65 6e 74 3b 0a 20 20 20 20 ob content;.
2d50: 42 6c 6f 62 20 77 69 6b 69 3b 0a 20 20 20 20 4d Blob wiki;. M
2d60: 61 6e 69 66 65 73 74 20 6d 3b 0a 0a 20 20 20 20 anifest m;..
2d70: 62 6c 6f 62 5f 7a 65 72 6f 28 26 62 6f 64 79 29 blob_zero(&body)
2d80: 3b 0a 20 20 20 20 69 66 28 20 69 73 53 61 6e 64 ;. if( isSand
2d90: 62 6f 78 20 29 7b 0a 20 20 20 20 20 20 62 6c 6f box ){. blo
2da0: 62 5f 61 70 70 65 6e 64 66 28 26 62 6f 64 79 2c b_appendf(&body,
2db0: 20 64 62 5f 67 65 74 28 22 73 61 6e 64 62 6f 78 db_get("sandbox
2dc0: 22 2c 22 22 29 29 3b 0a 20 20 20 20 20 20 61 70 ",""));. ap
2dd0: 70 65 6e 64 52 65 6d 61 72 6b 28 26 62 6f 64 79 pendRemark(&body
2de0: 29 3b 0a 20 20 20 20 20 20 64 62 5f 73 65 74 28 );. db_set(
2df0: 22 73 61 6e 64 62 6f 78 22 2c 20 62 6c 6f 62 5f "sandbox", blob_
2e00: 73 74 72 28 26 62 6f 64 79 29 2c 20 30 29 3b 0a str(&body), 0);.
2e10: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 }else{.
2e20: 20 6c 6f 67 69 6e 5f 76 65 72 69 66 79 5f 63 73 login_verify_cs
2e30: 72 66 5f 73 65 63 72 65 74 28 29 3b 0a 20 20 20 rf_secret();.
2e40: 20 20 20 63 6f 6e 74 65 6e 74 5f 67 65 74 28 72 content_get(r
2e50: 69 64 2c 20 26 63 6f 6e 74 65 6e 74 29 3b 0a 20 id, &content);.
2e60: 20 20 20 20 20 6d 61 6e 69 66 65 73 74 5f 70 61 manifest_pa
2e70: 72 73 65 28 26 6d 2c 20 26 63 6f 6e 74 65 6e 74 rse(&m, &content
2e80: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6d 2e 74 );. if( m.t
2e90: 79 70 65 3d 3d 43 46 54 59 50 45 5f 57 49 4b 49 ype==CFTYPE_WIKI
2ea0: 20 29 7b 0a 20 20 20 20 20 20 20 20 62 6c 6f 62 ){. blob
2eb0: 5f 61 70 70 65 6e 64 28 26 62 6f 64 79 2c 20 6d _append(&body, m
2ec0: 2e 7a 57 69 6b 69 2c 20 2d 31 29 3b 0a 20 20 20 .zWiki, -1);.
2ed0: 20 20 20 7d 0a 20 20 20 20 20 20 6d 61 6e 69 66 }. manif
2ee0: 65 73 74 5f 63 6c 65 61 72 28 26 6d 29 3b 0a 20 est_clear(&m);.
2ef0: 20 20 20 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 blob_zero(&
2f00: 77 69 6b 69 29 3b 0a 20 20 20 20 20 20 64 62 5f wiki);. db_
2f10: 62 65 67 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f begin_transactio
2f20: 6e 28 29 3b 0a 20 20 20 20 20 20 7a 44 61 74 65 n();. zDate
2f30: 20 3d 20 64 62 5f 74 65 78 74 28 30 2c 20 22 53 = db_text(0, "S
2f40: 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65 28 27 ELECT datetime('
2f50: 6e 6f 77 27 29 22 29 3b 0a 20 20 20 20 20 20 7a now')");. z
2f60: 44 61 74 65 5b 31 30 5d 20 3d 20 27 54 27 3b 0a Date[10] = 'T';.
2f70: 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e blob_appen
2f80: 64 66 28 26 77 69 6b 69 2c 20 22 44 20 25 73 5c df(&wiki, "D %s\
2f90: 6e 22 2c 20 7a 44 61 74 65 29 3b 0a 20 20 20 20 n", zDate);.
2fa0: 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 blob_appendf(&
2fb0: 77 69 6b 69 2c 20 22 4c 20 25 46 5c 6e 22 2c 20 wiki, "L %F\n",
2fc0: 7a 50 61 67 65 4e 61 6d 65 29 3b 0a 20 20 20 20 zPageName);.
2fd0: 20 20 69 66 28 20 72 69 64 20 29 7b 0a 20 20 20 if( rid ){.
2fe0: 20 20 20 20 20 63 68 61 72 20 2a 7a 55 75 69 64 char *zUuid
2ff0: 20 3d 20 64 62 5f 74 65 78 74 28 30 2c 20 22 53 = db_text(0, "S
3000: 45 4c 45 43 54 20 75 75 69 64 20 46 52 4f 4d 20 ELECT uuid FROM
3010: 62 6c 6f 62 20 57 48 45 52 45 20 72 69 64 3d 25 blob WHERE rid=%
3020: 64 22 2c 20 72 69 64 29 3b 0a 20 20 20 20 20 20 d", rid);.
3030: 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 blob_appendf(&
3040: 77 69 6b 69 2c 20 22 50 20 25 73 5c 6e 22 2c 20 wiki, "P %s\n",
3050: 7a 55 75 69 64 29 3b 0a 20 20 20 20 20 20 20 20 zUuid);.
3060: 66 72 65 65 28 7a 55 75 69 64 29 3b 0a 20 20 20 free(zUuid);.
3070: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 67 }. if( g
3080: 2e 7a 4c 6f 67 69 6e 20 29 7b 0a 20 20 20 20 20 .zLogin ){.
3090: 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 blob_appendf(
30a0: 26 77 69 6b 69 2c 20 22 55 20 25 46 5c 6e 22 2c &wiki, "U %F\n",
30b0: 20 67 2e 7a 4c 6f 67 69 6e 29 3b 0a 20 20 20 20 g.zLogin);.
30c0: 20 20 7d 0a 20 20 20 20 20 20 61 70 70 65 6e 64 }. append
30d0: 52 65 6d 61 72 6b 28 26 62 6f 64 79 29 3b 0a 20 Remark(&body);.
30e0: 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 blob_append
30f0: 66 28 26 77 69 6b 69 2c 20 22 57 20 25 64 5c 6e f(&wiki, "W %d\n
3100: 25 73 5c 6e 22 2c 20 62 6c 6f 62 5f 73 69 7a 65 %s\n", blob_size
3110: 28 26 62 6f 64 79 29 2c 20 62 6c 6f 62 5f 73 74 (&body), blob_st
3120: 72 28 26 62 6f 64 79 29 29 3b 0a 20 20 20 20 20 r(&body));.
3130: 20 6d 64 35 73 75 6d 5f 62 6c 6f 62 28 26 77 69 md5sum_blob(&wi
3140: 6b 69 2c 20 26 63 6b 73 75 6d 29 3b 0a 20 20 20 ki, &cksum);.
3150: 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 blob_appendf(
3160: 26 77 69 6b 69 2c 20 22 5a 20 25 62 5c 6e 22 2c &wiki, "Z %b\n",
3170: 20 26 63 6b 73 75 6d 29 3b 0a 20 20 20 20 20 20 &cksum);.
3180: 62 6c 6f 62 5f 72 65 73 65 74 28 26 63 6b 73 75 blob_reset(&cksu
3190: 6d 29 3b 0a 20 20 20 20 20 20 6e 72 69 64 20 3d m);. nrid =
31a0: 20 63 6f 6e 74 65 6e 74 5f 70 75 74 28 26 77 69 content_put(&wi
31b0: 6b 69 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 ki, 0, 0);.
31c0: 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 22 db_multi_exec("
31d0: 49 4e 53 45 52 54 20 4f 52 20 49 47 4e 4f 52 45 INSERT OR IGNORE
31e0: 20 49 4e 54 4f 20 75 6e 73 65 6e 74 20 56 41 4c INTO unsent VAL
31f0: 55 45 53 28 25 64 29 22 2c 20 6e 72 69 64 29 3b UES(%d)", nrid);
3200: 0a 20 20 20 20 20 20 6d 61 6e 69 66 65 73 74 5f . manifest_
3210: 63 72 6f 73 73 6c 69 6e 6b 28 6e 72 69 64 2c 20 crosslink(nrid,
3220: 26 77 69 6b 69 29 3b 0a 20 20 20 20 20 20 62 6c &wiki);. bl
3230: 6f 62 5f 72 65 73 65 74 28 26 77 69 6b 69 29 3b ob_reset(&wiki);
3240: 0a 20 20 20 20 20 20 63 6f 6e 74 65 6e 74 5f 64 . content_d
3250: 65 6c 74 69 66 79 28 72 69 64 2c 20 6e 72 69 64 eltify(rid, nrid
3260: 2c 20 30 29 3b 0a 20 20 20 20 20 20 64 62 5f 65 , 0);. db_e
3270: 6e 64 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 30 nd_transaction(0
3280: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 67 69 );. }. cgi
3290: 5f 72 65 64 69 72 65 63 74 66 28 22 77 69 6b 69 _redirectf("wiki
32a0: 3f 6e 61 6d 65 3d 25 54 22 2c 20 7a 50 61 67 65 ?name=%T", zPage
32b0: 4e 61 6d 65 29 3b 0a 20 20 7d 0a 20 20 69 66 28 Name);. }. if(
32c0: 20 50 28 22 63 61 6e 63 65 6c 22 29 21 3d 30 20 P("cancel")!=0
32d0: 29 7b 0a 20 20 20 20 63 67 69 5f 72 65 64 69 72 ){. cgi_redir
32e0: 65 63 74 66 28 22 77 69 6b 69 3f 6e 61 6d 65 3d ectf("wiki?name=
32f0: 25 54 22 2c 20 7a 50 61 67 65 4e 61 6d 65 29 3b %T", zPageName);
3300: 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d . return;. }
3310: 0a 20 20 7a 48 74 6d 6c 50 61 67 65 4e 61 6d 65 . zHtmlPageName
3320: 20 3d 20 6d 70 72 69 6e 74 66 28 22 41 70 70 65 = mprintf("Appe
3330: 6e 64 20 43 6f 6d 6d 65 6e 74 20 54 6f 3a 20 25 nd Comment To: %
3340: 73 22 2c 20 7a 50 61 67 65 4e 61 6d 65 29 3b 0a s", zPageName);.
3350: 20 20 73 74 79 6c 65 5f 68 65 61 64 65 72 28 7a style_header(z
3360: 48 74 6d 6c 50 61 67 65 4e 61 6d 65 29 3b 0a 20 HtmlPageName);.
3370: 20 69 66 28 20 50 28 22 70 72 65 76 69 65 77 22 if( P("preview"
3380: 29 21 3d 30 20 29 7b 0a 20 20 20 20 42 6c 6f 62 )!=0 ){. Blob
3390: 20 70 72 65 76 69 65 77 3b 0a 20 20 20 20 62 6c preview;. bl
33a0: 6f 62 5f 7a 65 72 6f 28 26 70 72 65 76 69 65 77 ob_zero(&preview
33b0: 29 3b 0a 20 20 20 20 61 70 70 65 6e 64 52 65 6d );. appendRem
33c0: 61 72 6b 28 26 70 72 65 76 69 65 77 29 3b 0a 20 ark(&preview);.
33d0: 20 20 20 40 20 50 72 65 76 69 65 77 3a 3c 68 72 @ Preview:<hr
33e0: 3e 0a 20 20 20 20 77 69 6b 69 5f 63 6f 6e 76 65 >. wiki_conve
33f0: 72 74 28 26 70 72 65 76 69 65 77 2c 20 30 2c 20 rt(&preview, 0,
3400: 30 29 3b 0a 20 20 20 20 40 20 3c 68 72 3e 0a 20 0);. @ <hr>.
3410: 20 20 20 62 6c 6f 62 5f 72 65 73 65 74 28 26 70 blob_reset(&p
3420: 72 65 76 69 65 77 29 3b 0a 20 20 7d 0a 20 20 7a review);. }. z
3430: 55 73 65 72 20 3d 20 50 44 28 22 75 22 2c 20 67 User = PD("u", g
3440: 2e 7a 4c 6f 67 69 6e 29 3b 0a 20 20 40 20 3c 66 .zLogin);. @ <f
3450: 6f 72 6d 20 6d 65 74 68 6f 64 3d 22 50 4f 53 54 orm method="POST
3460: 22 20 61 63 74 69 6f 6e 3d 22 25 73 28 67 2e 7a " action="%s(g.z
3470: 42 61 73 65 55 52 4c 29 2f 77 69 6b 69 61 70 70 BaseURL)/wikiapp
3480: 65 6e 64 22 3e 0a 20 20 6c 6f 67 69 6e 5f 69 6e end">. login_in
3490: 73 65 72 74 5f 63 73 72 66 5f 73 65 63 72 65 74 sert_csrf_secret
34a0: 28 29 3b 0a 20 20 40 20 3c 69 6e 70 75 74 20 74 ();. @ <input t
34b0: 79 70 65 3d 22 68 69 64 64 65 6e 22 20 6e 61 6d ype="hidden" nam
34c0: 65 3d 22 6e 61 6d 65 22 20 76 61 6c 75 65 3d 22 e="name" value="
34d0: 25 68 28 7a 50 61 67 65 4e 61 6d 65 29 22 3e 0a %h(zPageName)">.
34e0: 20 20 40 20 59 6f 75 72 20 4e 61 6d 65 3a 0a 20 @ Your Name:.
34f0: 20 40 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 @ <input type="
3500: 74 65 78 74 22 20 6e 61 6d 65 3d 22 75 22 20 73 text" name="u" s
3510: 69 7a 65 3d 22 32 30 22 20 76 61 6c 75 65 3d 22 ize="20" value="
3520: 25 68 28 7a 55 73 65 72 29 22 3e 3c 62 72 3e 0a %h(zUser)"><br>.
3530: 20 20 40 20 43 6f 6d 6d 65 6e 74 20 74 6f 20 61 @ Comment to a
3540: 70 70 65 6e 64 3a 3c 62 72 3e 0a 20 20 40 20 3c ppend:<br>. @ <
3550: 74 65 78 74 61 72 65 61 20 6e 61 6d 65 3d 22 72 textarea name="r
3560: 22 20 63 6c 61 73 73 3d 22 77 69 6b 69 65 64 69 " class="wikiedi
3570: 74 22 20 63 6f 6c 73 3d 22 38 30 22 20 0a 20 20 t" cols="80" .
3580: 40 20 20 72 6f 77 73 3d 22 31 30 22 20 77 72 61 @ rows="10" wra
3590: 70 3d 22 76 69 72 74 75 61 6c 22 3e 25 68 28 50 p="virtual">%h(P
35a0: 44 28 22 72 22 2c 22 22 29 29 3c 2f 74 65 78 74 D("r",""))</text
35b0: 61 72 65 61 3e 0a 20 20 40 20 3c 62 72 3e 0a 20 area>. @ <br>.
35c0: 20 40 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 @ <input type="
35d0: 73 75 62 6d 69 74 22 20 6e 61 6d 65 3d 22 70 72 submit" name="pr
35e0: 65 76 69 65 77 22 20 76 61 6c 75 65 3d 22 50 72 eview" value="Pr
35f0: 65 76 69 65 77 20 59 6f 75 72 20 43 6f 6d 6d 65 eview Your Comme
3600: 6e 74 22 3e 0a 20 20 40 20 3c 69 6e 70 75 74 20 nt">. @ <input
3610: 74 79 70 65 3d 22 73 75 62 6d 69 74 22 20 6e 61 type="submit" na
3620: 6d 65 3d 22 73 75 62 6d 69 74 22 20 76 61 6c 75 me="submit" valu
3630: 65 3d 22 41 70 70 65 6e 64 20 59 6f 75 72 20 43 e="Append Your C
3640: 68 61 6e 67 65 73 22 3e 0a 20 20 40 20 3c 69 6e hanges">. @ <in
3650: 70 75 74 20 74 79 70 65 3d 22 73 75 62 6d 69 74 put type="submit
3660: 22 20 6e 61 6d 65 3d 22 63 61 6e 63 65 6c 22 20 " name="cancel"
3670: 76 61 6c 75 65 3d 22 43 61 6e 63 65 6c 22 3e 0a value="Cancel">.
3680: 20 20 40 20 3c 2f 66 6f 72 6d 3e 0a 20 20 73 74 @ </form>. st
3690: 79 6c 65 5f 66 6f 6f 74 65 72 28 29 3b 0a 7d 0a yle_footer();.}.
36a0: 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 ./*.** Name of t
36b0: 68 65 20 77 69 6b 69 20 68 69 73 74 6f 72 79 20 he wiki history
36c0: 70 61 67 65 20 62 65 69 6e 67 20 67 65 6e 65 72 page being gener
36d0: 61 74 65 64 0a 2a 2f 0a 73 74 61 74 69 63 20 63 ated.*/.static c
36e0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 57 69 6b 69 onst char *zWiki
36f0: 50 61 67 65 4e 61 6d 65 3b 0a 0a 2f 2a 0a 2a 2a PageName;../*.**
3700: 20 46 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 65 64 Function called
3710: 20 74 6f 20 6f 75 74 70 75 74 20 65 78 74 72 61 to output extra
3720: 20 74 65 78 74 20 61 74 20 74 68 65 20 65 6e 64 text at the end
3730: 20 6f 66 20 65 61 63 68 20 6c 69 6e 65 20 69 6e of each line in
3740: 0a 2a 2a 20 61 20 77 69 6b 69 20 68 69 73 74 6f .** a wiki histo
3750: 72 79 20 6c 69 73 74 69 6e 67 2e 0a 2a 2f 0a 73 ry listing..*/.s
3760: 74 61 74 69 63 20 76 6f 69 64 20 77 69 6b 69 5f tatic void wiki_
3770: 68 69 73 74 6f 72 79 5f 65 78 74 72 61 28 69 6e history_extra(in
3780: 74 20 72 69 64 29 7b 0a 20 20 40 20 3c 61 20 68 t rid){. @ <a h
3790: 72 65 66 3d 22 25 73 28 67 2e 7a 54 6f 70 29 2f ref="%s(g.zTop)/
37a0: 77 64 69 66 66 3f 6e 61 6d 65 3d 25 74 28 7a 57 wdiff?name=%t(zW
37b0: 69 6b 69 50 61 67 65 4e 61 6d 65 29 26 61 3d 25 ikiPageName)&a=%
37c0: 64 28 72 69 64 29 22 3e 5b 64 69 66 66 5d 3c 2f d(rid)">[diff]</
37d0: 61 3e 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50 a>.}../*.** WEBP
37e0: 41 47 45 3a 20 77 68 69 73 74 6f 72 79 0a 2a 2a AGE: whistory.**
37f0: 20 55 52 4c 3a 20 2f 77 68 69 73 74 6f 72 79 3f URL: /whistory?
3800: 6e 61 6d 65 3d 50 41 47 45 4e 41 4d 45 0a 2a 2a name=PAGENAME.**
3810: 0a 2a 2a 20 53 68 6f 77 20 74 68 65 20 63 6f 6d .** Show the com
3820: 70 6c 65 74 65 20 63 68 61 6e 67 65 20 68 69 73 plete change his
3830: 74 6f 72 79 20 66 6f 72 20 61 20 73 69 6e 67 6c tory for a singl
3840: 65 20 77 69 6b 69 20 70 61 67 65 2e 0a 2a 2f 0a e wiki page..*/.
3850: 76 6f 69 64 20 77 68 69 73 74 6f 72 79 5f 70 61 void whistory_pa
3860: 67 65 28 76 6f 69 64 29 7b 0a 20 20 53 74 6d 74 ge(void){. Stmt
3870: 20 71 3b 0a 20 20 63 68 61 72 20 2a 7a 54 69 74 q;. char *zTit
3880: 6c 65 3b 0a 20 20 63 68 61 72 20 2a 7a 53 51 4c le;. char *zSQL
3890: 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a ;. const char *
38a0: 7a 50 61 67 65 4e 61 6d 65 3b 0a 20 20 6c 6f 67 zPageName;. log
38b0: 69 6e 5f 63 68 65 63 6b 5f 63 72 65 64 65 6e 74 in_check_credent
38c0: 69 61 6c 73 28 29 3b 0a 20 20 69 66 28 20 21 67 ials();. if( !g
38d0: 2e 6f 6b 48 69 73 74 6f 72 79 20 29 7b 20 6c 6f .okHistory ){ lo
38e0: 67 69 6e 5f 6e 65 65 64 65 64 28 29 3b 20 72 65 gin_needed(); re
38f0: 74 75 72 6e 3b 20 7d 0a 20 20 7a 50 61 67 65 4e turn; }. zPageN
3900: 61 6d 65 20 3d 20 50 44 28 22 6e 61 6d 65 22 2c ame = PD("name",
3910: 22 22 29 3b 0a 20 20 7a 54 69 74 6c 65 20 3d 20 "");. zTitle =
3920: 6d 70 72 69 6e 74 66 28 22 48 69 73 74 6f 72 79 mprintf("History
3930: 20 4f 66 20 25 73 22 2c 20 7a 50 61 67 65 4e 61 Of %s", zPageNa
3940: 6d 65 29 3b 0a 20 20 73 74 79 6c 65 5f 68 65 61 me);. style_hea
3950: 64 65 72 28 7a 54 69 74 6c 65 29 3b 0a 20 20 66 der(zTitle);. f
3960: 72 65 65 28 7a 54 69 74 6c 65 29 3b 0a 0a 20 20 ree(zTitle);..
3970: 7a 53 51 4c 20 3d 20 6d 70 72 69 6e 74 66 28 22 zSQL = mprintf("
3980: 25 73 20 41 4e 44 20 65 76 65 6e 74 2e 6f 62 6a %s AND event.obj
3990: 69 64 20 49 4e 20 22 0a 20 20 20 20 20 20 20 20 id IN ".
39a0: 20 20 20 20 20 20 20 20 20 22 20 20 28 53 45 4c " (SEL
39b0: 45 43 54 20 72 69 64 20 46 52 4f 4d 20 74 61 67 ECT rid FROM tag
39c0: 78 72 65 66 20 57 48 45 52 45 20 74 61 67 69 64 xref WHERE tagid
39d0: 3d 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 =".
39e0: 20 20 20 20 20 20 20 20 20 20 22 28 53 45 4c 45 "(SELE
39f0: 43 54 20 74 61 67 69 64 20 46 52 4f 4d 20 74 61 CT tagid FROM ta
3a00: 67 20 57 48 45 52 45 20 74 61 67 6e 61 6d 65 3d g WHERE tagname=
3a10: 27 77 69 6b 69 2d 25 71 27 29 29 22 0a 20 20 20 'wiki-%q'))".
3a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4f "O
3a30: 52 44 45 52 20 42 59 20 6d 74 69 6d 65 20 44 45 RDER BY mtime DE
3a40: 53 43 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 SC",.
3a50: 20 20 20 20 20 20 74 69 6d 65 6c 69 6e 65 5f 71 timeline_q
3a60: 75 65 72 79 5f 66 6f 72 5f 77 77 77 28 29 2c 20 uery_for_www(),
3a70: 7a 50 61 67 65 4e 61 6d 65 29 3b 0a 20 20 64 62 zPageName);. db
3a80: 5f 70 72 65 70 61 72 65 28 26 71 2c 20 7a 53 51 _prepare(&q, zSQ
3a90: 4c 29 3b 0a 20 20 66 72 65 65 28 7a 53 51 4c 29 L);. free(zSQL)
3aa0: 3b 0a 20 20 7a 57 69 6b 69 50 61 67 65 4e 61 6d ;. zWikiPageNam
3ab0: 65 20 3d 20 7a 50 61 67 65 4e 61 6d 65 3b 0a 20 e = zPageName;.
3ac0: 20 77 77 77 5f 70 72 69 6e 74 5f 74 69 6d 65 6c www_print_timel
3ad0: 69 6e 65 28 26 71 2c 20 54 49 4d 45 4c 49 4e 45 ine(&q, TIMELINE
3ae0: 5f 41 52 54 49 44 2c 20 77 69 6b 69 5f 68 69 73 _ARTID, wiki_his
3af0: 74 6f 72 79 5f 65 78 74 72 61 29 3b 0a 20 20 64 tory_extra);. d
3b00: 62 5f 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a b_finalize(&q);.
3b10: 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 29 style_footer()
3b20: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50 41 ;.}../*.** WEBPA
3b30: 47 45 3a 20 77 64 69 66 66 0a 2a 2a 20 55 52 4c GE: wdiff.** URL
3b40: 3a 20 2f 77 68 69 73 74 6f 72 79 3f 6e 61 6d 65 : /whistory?name
3b50: 3d 50 41 47 45 4e 41 4d 45 26 61 3d 52 49 44 31 =PAGENAME&a=RID1
3b60: 26 62 3d 52 49 44 32 0a 2a 2a 0a 2a 2a 20 53 68 &b=RID2.**.** Sh
3b70: 6f 77 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 ow the differenc
3b80: 65 20 62 65 74 77 65 65 6e 20 74 77 6f 20 77 69 e between two wi
3b90: 6b 69 20 70 61 67 65 73 2e 0a 2a 2f 0a 76 6f 69 ki pages..*/.voi
3ba0: 64 20 77 64 69 66 66 5f 70 61 67 65 28 76 6f 69 d wdiff_page(voi
3bb0: 64 29 7b 0a 20 20 63 68 61 72 20 2a 7a 54 69 74 d){. char *zTit
3bc0: 6c 65 3b 0a 20 20 69 6e 74 20 72 69 64 31 2c 20 le;. int rid1,
3bd0: 72 69 64 32 3b 0a 20 20 63 6f 6e 73 74 20 63 68 rid2;. const ch
3be0: 61 72 20 2a 7a 50 61 67 65 4e 61 6d 65 3b 0a 20 ar *zPageName;.
3bf0: 20 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 31 2c 20 Blob content1,
3c00: 63 6f 6e 74 65 6e 74 32 3b 0a 20 20 4d 61 6e 69 content2;. Mani
3c10: 66 65 73 74 20 6d 31 2c 20 6d 32 3b 0a 20 20 42 fest m1, m2;. B
3c20: 6c 6f 62 20 77 31 2c 20 77 32 2c 20 64 3b 0a 0a lob w1, w2, d;..
3c30: 20 20 6c 6f 67 69 6e 5f 63 68 65 63 6b 5f 63 72 login_check_cr
3c40: 65 64 65 6e 74 69 61 6c 73 28 29 3b 0a 20 20 72 edentials();. r
3c50: 69 64 31 20 3d 20 61 74 6f 69 28 50 44 28 22 61 id1 = atoi(PD("a
3c60: 22 2c 22 30 22 29 29 3b 0a 20 20 69 66 28 20 21 ","0"));. if( !
3c70: 67 2e 6f 6b 48 69 73 74 6f 72 79 20 29 7b 20 6c g.okHistory ){ l
3c80: 6f 67 69 6e 5f 6e 65 65 64 65 64 28 29 3b 20 72 ogin_needed(); r
3c90: 65 74 75 72 6e 3b 20 7d 0a 20 20 69 66 28 20 72 eturn; }. if( r
3ca0: 69 64 31 3d 3d 30 20 29 20 66 6f 73 73 69 6c 5f id1==0 ) fossil_
3cb0: 72 65 64 69 72 65 63 74 5f 68 6f 6d 65 28 29 3b redirect_home();
3cc0: 0a 20 20 72 69 64 32 20 3d 20 61 74 6f 69 28 50 . rid2 = atoi(P
3cd0: 44 28 22 62 22 2c 22 30 22 29 29 3b 0a 20 20 7a D("b","0"));. z
3ce0: 50 61 67 65 4e 61 6d 65 20 3d 20 50 44 28 22 6e PageName = PD("n
3cf0: 61 6d 65 22 2c 22 22 29 3b 0a 20 20 7a 54 69 74 ame","");. zTit
3d00: 6c 65 20 3d 20 6d 70 72 69 6e 74 66 28 22 43 68 le = mprintf("Ch
3d10: 61 6e 67 65 73 20 54 6f 20 25 73 22 2c 20 7a 50 anges To %s", zP
3d20: 61 67 65 4e 61 6d 65 29 3b 0a 20 20 73 74 79 6c ageName);. styl
3d30: 65 5f 68 65 61 64 65 72 28 7a 54 69 74 6c 65 29 e_header(zTitle)
3d40: 3b 0a 20 20 66 72 65 65 28 7a 54 69 74 6c 65 29 ;. free(zTitle)
3d50: 3b 0a 0a 20 20 69 66 28 20 72 69 64 32 3d 3d 30 ;.. if( rid2==0
3d60: 20 29 7b 0a 20 20 20 20 72 69 64 32 20 3d 20 64 ){. rid2 = d
3d70: 62 5f 69 6e 74 28 30 2c 0a 20 20 20 20 20 20 22 b_int(0,. "
3d80: 53 45 4c 45 43 54 20 6f 62 6a 69 64 20 46 52 4f SELECT objid FRO
3d90: 4d 20 65 76 65 6e 74 20 4a 4f 49 4e 20 74 61 67 M event JOIN tag
3da0: 78 72 65 66 20 4f 4e 20 6f 62 6a 69 64 3d 72 69 xref ON objid=ri
3db0: 64 20 41 4e 44 20 74 61 67 78 72 65 66 2e 74 61 d AND tagxref.ta
3dc0: 67 69 64 3d 22 0a 20 20 20 20 20 20 20 20 20 20 gid=".
3dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 28 "(
3de0: 53 45 4c 45 43 54 20 74 61 67 69 64 20 46 52 4f SELECT tagid FRO
3df0: 4d 20 74 61 67 20 57 48 45 52 45 20 74 61 67 6e M tag WHERE tagn
3e00: 61 6d 65 3d 27 77 69 6b 69 2d 25 71 27 29 22 0a ame='wiki-%q')".
3e10: 20 20 20 20 20 20 22 20 57 48 45 52 45 20 65 76 " WHERE ev
3e20: 65 6e 74 2e 6d 74 69 6d 65 3c 28 53 45 4c 45 43 ent.mtime<(SELEC
3e30: 54 20 6d 74 69 6d 65 20 46 52 4f 4d 20 65 76 65 T mtime FROM eve
3e40: 6e 74 20 57 48 45 52 45 20 6f 62 6a 69 64 3d 25 nt WHERE objid=%
3e50: 64 29 22 0a 20 20 20 20 20 20 22 20 4f 52 44 45 d)". " ORDE
3e60: 52 20 42 59 20 65 76 65 6e 74 2e 6d 74 69 6d 65 R BY event.mtime
3e70: 20 44 45 53 43 20 4c 49 4d 49 54 20 31 22 2c 0a DESC LIMIT 1",.
3e80: 20 20 20 20 20 20 7a 50 61 67 65 4e 61 6d 65 2c zPageName,
3e90: 20 72 69 64 31 0a 20 20 20 20 29 3b 0a 20 20 7d rid1. );. }
3ea0: 0a 20 20 63 6f 6e 74 65 6e 74 5f 67 65 74 28 72 . content_get(r
3eb0: 69 64 31 2c 20 26 63 6f 6e 74 65 6e 74 31 29 3b id1, &content1);
3ec0: 0a 20 20 6d 61 6e 69 66 65 73 74 5f 70 61 72 73 . manifest_pars
3ed0: 65 28 26 6d 31 2c 20 26 63 6f 6e 74 65 6e 74 31 e(&m1, &content1
3ee0: 29 3b 0a 20 20 69 66 28 20 6d 31 2e 74 79 70 65 );. if( m1.type
3ef0: 21 3d 43 46 54 59 50 45 5f 57 49 4b 49 20 29 20 !=CFTYPE_WIKI )
3f00: 66 6f 73 73 69 6c 5f 72 65 64 69 72 65 63 74 5f fossil_redirect_
3f10: 68 6f 6d 65 28 29 3b 0a 20 20 62 6c 6f 62 5f 69 home();. blob_i
3f20: 6e 69 74 28 26 77 31 2c 20 6d 31 2e 7a 57 69 6b nit(&w1, m1.zWik
3f30: 69 2c 20 2d 31 29 3b 0a 20 20 62 6c 6f 62 5f 7a i, -1);. blob_z
3f40: 65 72 6f 28 26 77 32 29 3b 0a 20 20 69 66 28 20 ero(&w2);. if(
3f50: 72 69 64 32 20 29 7b 0a 20 20 20 20 63 6f 6e 74 rid2 ){. cont
3f60: 65 6e 74 5f 67 65 74 28 72 69 64 32 2c 20 26 63 ent_get(rid2, &c
3f70: 6f 6e 74 65 6e 74 32 29 3b 0a 20 20 20 20 6d 61 ontent2);. ma
3f80: 6e 69 66 65 73 74 5f 70 61 72 73 65 28 26 6d 32 nifest_parse(&m2
3f90: 2c 20 26 63 6f 6e 74 65 6e 74 32 29 3b 0a 20 20 , &content2);.
3fa0: 20 20 69 66 28 20 6d 32 2e 74 79 70 65 3d 3d 43 if( m2.type==C
3fb0: 46 54 59 50 45 5f 57 49 4b 49 20 29 7b 0a 20 20 FTYPE_WIKI ){.
3fc0: 20 20 20 20 62 6c 6f 62 5f 69 6e 69 74 28 26 77 blob_init(&w
3fd0: 32 2c 20 6d 32 2e 7a 57 69 6b 69 2c 20 2d 31 29 2, m2.zWiki, -1)
3fe0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 6c ;. }. }. bl
3ff0: 6f 62 5f 7a 65 72 6f 28 26 64 29 3b 0a 20 20 74 ob_zero(&d);. t
4000: 65 78 74 5f 64 69 66 66 28 26 77 32 2c 20 26 77 ext_diff(&w2, &w
4010: 31 2c 20 26 64 2c 20 35 29 3b 0a 20 20 40 20 3c 1, &d, 5);. @ <
4020: 70 72 65 3e 0a 20 20 40 20 25 68 28 62 6c 6f 62 pre>. @ %h(blob
4030: 5f 73 74 72 28 26 64 29 29 0a 20 20 40 20 3c 2f _str(&d)). @ </
4040: 70 72 65 3e 0a 20 20 73 74 79 6c 65 5f 66 6f 6f pre>. style_foo
4050: 74 65 72 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 ter();.}../*.**
4060: 57 45 42 50 41 47 45 3a 20 77 63 6f 6e 74 65 6e WEBPAGE: wconten
4070: 74 0a 2a 2a 0a 2a 2a 20 4c 69 73 74 20 61 6c 6c t.**.** List all
4080: 20 61 76 61 69 6c 61 62 6c 65 20 77 69 6b 69 20 available wiki
4090: 70 61 67 65 73 20 77 69 74 68 20 64 61 74 65 20 pages with date
40a0: 63 72 65 61 74 65 64 20 61 6e 64 20 6c 61 73 74 created and last
40b0: 20 6d 6f 64 69 66 69 65 64 2e 0a 2a 2f 0a 76 6f modified..*/.vo
40c0: 69 64 20 77 63 6f 6e 74 65 6e 74 5f 70 61 67 65 id wcontent_page
40d0: 28 76 6f 69 64 29 7b 0a 20 20 53 74 6d 74 20 71 (void){. Stmt q
40e0: 3b 0a 20 20 6c 6f 67 69 6e 5f 63 68 65 63 6b 5f ;. login_check_
40f0: 63 72 65 64 65 6e 74 69 61 6c 73 28 29 3b 0a 20 credentials();.
4100: 20 69 66 28 20 21 67 2e 6f 6b 52 64 57 69 6b 69 if( !g.okRdWiki
4110: 20 29 7b 20 6c 6f 67 69 6e 5f 6e 65 65 64 65 64 ){ login_needed
4120: 28 29 3b 20 72 65 74 75 72 6e 3b 20 7d 0a 20 20 (); return; }.
4130: 73 74 79 6c 65 5f 68 65 61 64 65 72 28 22 41 76 style_header("Av
4140: 61 69 6c 61 62 6c 65 20 57 69 6b 69 20 50 61 67 ailable Wiki Pag
4150: 65 73 22 29 3b 0a 20 20 40 20 3c 75 6c 3e 0a 20 es");. @ <ul>.
4160: 20 64 62 5f 70 72 65 70 61 72 65 28 26 71 2c 20 db_prepare(&q,
4170: 0a 20 20 20 20 22 53 45 4c 45 43 54 20 73 75 62 . "SELECT sub
4180: 73 74 72 28 74 61 67 6e 61 6d 65 2c 20 36 2c 20 str(tagname, 6,
4190: 31 30 30 30 29 20 46 52 4f 4d 20 74 61 67 20 57 1000) FROM tag W
41a0: 48 45 52 45 20 74 61 67 6e 61 6d 65 20 47 4c 4f HERE tagname GLO
41b0: 42 20 27 77 69 6b 69 2d 2a 27 22 0a 20 20 20 20 B 'wiki-*'".
41c0: 22 20 4f 52 44 45 52 20 42 59 20 6c 6f 77 65 72 " ORDER BY lower
41d0: 28 74 61 67 6e 61 6d 65 29 22 0a 20 20 29 3b 0a (tagname)". );.
41e0: 20 20 77 68 69 6c 65 28 20 64 62 5f 73 74 65 70 while( db_step
41f0: 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 (&q)==SQLITE_ROW
4200: 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 ){. const ch
4210: 61 72 20 2a 7a 4e 61 6d 65 20 3d 20 64 62 5f 63 ar *zName = db_c
4220: 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 30 olumn_text(&q, 0
4230: 29 3b 0a 20 20 20 20 40 20 3c 6c 69 3e 3c 61 20 );. @ <li><a
4240: 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 href="%s(g.zBase
4250: 55 52 4c 29 2f 77 69 6b 69 3f 6e 61 6d 65 3d 25 URL)/wiki?name=%
4260: 54 28 7a 4e 61 6d 65 29 22 3e 25 68 28 7a 4e 61 T(zName)">%h(zNa
4270: 6d 65 29 3c 2f 61 3e 3c 2f 6c 69 3e 0a 20 20 7d me)</a></li>. }
4280: 0a 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 . db_finalize(&
4290: 71 29 3b 0a 20 20 40 20 3c 2f 75 6c 3e 0a 20 20 q);. @ </ul>.
42a0: 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 29 3b 0a style_footer();.
42b0: 7d 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50 41 47 45 }../*.** WEBPAGE
42c0: 3a 20 77 69 6b 69 5f 72 75 6c 65 73 0a 2a 2f 0a : wiki_rules.*/.
42d0: 76 6f 69 64 20 77 69 6b 69 72 75 6c 65 73 5f 70 void wikirules_p
42e0: 61 67 65 28 76 6f 69 64 29 7b 0a 20 20 73 74 79 age(void){. sty
42f0: 6c 65 5f 68 65 61 64 65 72 28 22 57 69 6b 69 20 le_header("Wiki
4300: 46 6f 72 6d 61 74 74 69 6e 67 20 52 75 6c 65 73 Formatting Rules
4310: 22 29 3b 0a 20 20 40 20 3c 68 32 3e 46 6f 72 6d ");. @ <h2>Form
4320: 61 74 74 69 6e 67 20 52 75 6c 65 20 53 75 6d 6d atting Rule Summ
4330: 61 72 79 3c 2f 68 32 3e 0a 20 20 40 20 3c 6f 6c ary</h2>. @ <ol
4340: 3e 0a 20 20 40 20 3c 6c 69 3e 20 42 6c 61 6e 6b >. @ <li> Blank
4350: 20 6c 69 6e 65 73 20 61 72 65 20 70 61 72 61 67 lines are parag
4360: 72 61 70 68 20 62 72 65 61 6b 73 0a 20 20 40 20 raph breaks. @
4370: 3c 6c 69 3e 20 42 75 6c 6c 65 74 73 20 61 72 65 <li> Bullets are
4380: 20 22 2a 22 20 73 75 72 72 6f 75 6e 64 65 64 20 "*" surrounded
4390: 62 79 20 74 77 6f 20 73 70 61 63 65 73 20 61 74 by two spaces at
43a0: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f the beginning o
43b0: 66 20 74 68 65 20 6c 69 6e 65 2e 0a 20 20 40 20 f the line.. @
43c0: 3c 6c 69 3e 20 45 6e 75 6d 65 72 61 74 69 6f 6e <li> Enumeration
43d0: 20 69 74 65 6d 73 20 61 72 65 20 61 20 6e 75 6d items are a num
43e0: 62 65 72 20 73 75 72 72 6f 75 6e 64 65 64 20 62 ber surrounded b
43f0: 79 20 74 77 6f 20 73 70 61 63 65 0a 20 20 40 20 y two space. @
4400: 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 at the beginning
4410: 20 6f 66 20 61 20 6c 69 6e 65 2e 0a 20 20 40 20 of a line.. @
4420: 3c 6c 69 3e 20 49 6e 64 65 6e 74 65 64 20 70 61 <li> Indented pa
4430: 72 67 72 61 70 68 73 20 62 65 67 69 6e 20 77 69 rgraphs begin wi
4440: 74 68 20 61 20 74 61 62 20 6f 72 20 74 77 6f 20 th a tab or two
4450: 73 70 61 63 65 73 2e 0a 20 20 40 20 3c 6c 69 3e spaces.. @ <li>
4460: 20 48 79 70 65 72 6c 69 6e 6b 73 20 61 72 65 20 Hyperlinks are
4470: 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 20 73 contained with s
4480: 71 75 61 72 65 20 62 72 61 63 6b 65 74 73 3a 20 quare brackets:
4490: 20 22 5b 74 61 72 67 65 74 5d 22 0a 20 20 40 20 "[target]". @
44a0: 3c 6c 69 3e 20 4d 6f 73 74 20 6f 72 64 69 6e 61 <li> Most ordina
44b0: 72 79 20 48 54 4d 4c 20 77 6f 72 6b 73 2e 0a 20 ry HTML works..
44c0: 20 40 20 3c 6c 69 3e 20 26 6c 74 3b 76 65 72 62 @ <li> <verb
44d0: 61 74 69 6d 26 67 74 3b 20 61 6e 64 20 26 6c 74 atim> and <
44e0: 3b 6e 6f 77 69 6b 69 26 67 74 3b 2e 0a 20 20 40 ;nowiki>.. @
44f0: 20 3c 2f 6f 6c 3e 0a 20 20 40 20 3c 70 3e 57 65 </ol>. @ <p>We
4500: 20 63 61 6c 6c 20 74 68 65 20 66 69 72 73 74 20 call the first
4510: 66 69 76 65 20 72 75 6c 65 73 20 61 62 6f 76 65 five rules above
4520: 20 22 77 69 6b 69 22 20 66 6f 72 6d 61 74 74 69 "wiki" formatti
4530: 6e 67 20 72 75 6c 65 73 2e 20 20 54 68 65 0a 20 ng rules. The.
4540: 20 40 20 6c 61 73 74 20 74 77 6f 20 72 75 6c 65 @ last two rule
4550: 73 20 61 72 65 20 74 68 65 20 48 54 4d 4c 20 66 s are the HTML f
4560: 6f 72 6d 61 74 74 69 6e 67 20 72 75 6c 65 2e 3c ormatting rule.<
4570: 2f 70 3e 0a 20 20 40 20 3c 68 32 3e 46 6f 72 6d /p>. @ <h2>Form
4580: 61 74 74 69 6e 67 20 52 75 6c 65 20 44 65 74 61 atting Rule Deta
4590: 69 6c 73 3c 2f 68 32 3e 0a 20 20 40 20 3c 6f 6c ils</h2>. @ <ol
45a0: 3e 0a 20 20 40 20 3c 6c 69 3e 20 3c 70 3e 3c 62 >. @ <li> <p><b
45b0: 3e 50 61 72 61 67 72 61 70 68 73 3c 2f 62 3e 2e >Paragraphs</b>.
45c0: 20 20 41 6e 79 20 73 65 71 75 65 6e 63 65 20 6f Any sequence o
45d0: 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 62 6c f one or more bl
45e0: 61 6e 6b 20 6c 69 6e 65 73 20 66 6f 72 6d 73 0a ank lines forms.
45f0: 20 20 40 20 61 20 70 61 72 61 67 72 61 70 68 20 @ a paragraph
4600: 62 72 65 61 6b 2e 20 20 43 65 6e 74 65 72 65 64 break. Centered
4610: 20 6f 72 20 72 69 67 68 74 2d 6a 75 73 74 69 66 or right-justif
4620: 69 65 64 20 70 61 72 61 67 72 61 70 68 73 20 61 ied paragraphs a
4630: 72 65 20 6e 6f 74 0a 20 20 40 20 73 75 70 70 6f re not. @ suppo
4640: 72 74 65 64 20 62 79 20 77 69 6b 69 20 6d 61 72 rted by wiki mar
4650: 6b 75 70 2c 20 62 75 74 20 79 6f 75 20 63 61 6e kup, but you can
4660: 20 64 6f 20 74 68 65 73 65 20 74 68 69 6e 67 73 do these things
4670: 20 69 66 20 79 6f 75 20 6e 65 65 64 20 74 68 65 if you need the
4680: 6d 0a 20 20 40 20 75 73 69 6e 67 20 48 54 4d 4c m. @ using HTML
4690: 2e 3c 2f 70 3e 0a 20 20 40 20 3c 6c 69 3e 20 3c .</p>. @ <li> <
46a0: 70 3e 3c 62 3e 42 75 6c 6c 65 74 20 4c 69 73 74 p><b>Bullet List
46b0: 73 3c 2f 62 3e 2e 0a 20 20 40 20 41 20 62 75 6c s</b>.. @ A bul
46c0: 6c 65 74 20 6c 69 73 74 20 69 74 65 6d 20 69 73 let list item is
46d0: 20 61 20 6c 69 6e 65 20 74 68 61 74 20 62 65 67 a line that beg
46e0: 69 6e 73 20 77 69 74 68 20 61 20 73 69 6e 67 6c ins with a singl
46f0: 65 20 22 2a 22 20 63 68 61 72 61 63 74 65 72 0a e "*" character.
4700: 20 20 40 20 73 75 72 72 6f 75 6e 64 65 64 20 6f @ surrounded o
4710: 6e 0a 20 20 40 20 62 6f 74 68 20 73 69 64 65 73 n. @ both sides
4720: 20 62 79 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 by two or more
4730: 73 70 61 63 65 73 20 6f 72 20 62 79 20 61 20 74 spaces or by a t
4740: 61 62 2e 20 20 4f 6e 6c 79 20 61 20 73 69 6e 67 ab. Only a sing
4750: 6c 65 20 6c 65 76 65 6c 0a 20 20 40 20 6f 66 20 le level. @ of
4760: 62 75 6c 6c 65 74 20 6c 69 73 74 20 69 73 20 73 bullet list is s
4770: 75 70 70 6f 72 74 65 64 20 62 79 20 77 69 6b 69 upported by wiki
4780: 2e 20 20 46 6f 72 20 6e 65 73 74 65 64 20 6c 69 . For nested li
4790: 73 74 73 2c 20 75 73 65 20 48 54 4d 4c 2e 3c 2f sts, use HTML.</
47a0: 70 3e 0a 20 20 40 20 3c 6c 69 3e 20 3c 70 3e 3c p>. @ <li> <p><
47b0: 62 3e 45 6e 75 6d 65 72 61 74 69 6f 6e 20 4c 69 b>Enumeration Li
47c0: 73 74 73 3c 2f 62 3e 2e 0a 20 20 40 20 41 6e 20 sts</b>.. @ An
47d0: 65 6e 75 6d 65 72 61 74 69 6f 6e 20 6c 69 73 74 enumeration list
47e0: 20 69 74 65 6d 20 69 73 20 61 20 6c 69 6e 65 20 item is a line
47f0: 74 68 61 74 20 62 65 67 69 6e 73 0a 20 20 40 20 that begins. @
4800: 77 69 74 68 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 with one or more
4810: 20 64 69 67 69 74 73 20 6f 70 74 69 6f 6e 61 6c digits optional
4820: 6c 79 0a 20 20 40 20 66 6f 6c 6c 6f 77 65 64 20 ly. @ followed
4830: 62 79 20 61 20 22 2e 22 20 61 6e 64 20 69 73 20 by a "." and is
4840: 73 75 72 72 6f 75 6e 64 65 64 20 6f 6e 20 62 6f surrounded on bo
4850: 74 68 20 73 69 64 65 73 20 62 79 20 74 77 6f 20 th sides by two
4860: 6f 72 20 6d 6f 72 65 20 73 70 61 63 65 73 20 6f or more spaces o
4870: 72 0a 20 20 40 20 62 79 20 61 20 74 61 62 2e 20 r. @ by a tab.
4880: 20 54 68 65 20 6e 75 6d 62 65 72 20 69 73 20 73 The number is s
4890: 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64 20 62 ignificant and b
48a0: 65 63 6f 6d 65 73 20 74 68 65 20 6e 75 6d 62 65 ecomes the numbe
48b0: 72 20 73 68 6f 77 6e 0a 20 20 40 20 69 6e 20 74 r shown. @ in t
48c0: 68 65 20 72 65 6e 64 65 72 65 64 20 65 6e 75 6d he rendered enum
48d0: 65 72 61 74 69 6f 6e 20 69 74 65 6d 2e 20 20 4f eration item. O
48e0: 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 6c 65 76 nly a single lev
48f0: 65 6c 20 6f 66 20 65 6e 75 6d 65 72 61 74 69 6f el of enumeratio
4900: 6e 0a 20 20 40 20 6c 69 73 74 20 69 73 20 73 75 n. @ list is su
4910: 70 70 6f 72 74 65 64 20 62 79 20 77 69 6b 69 2e pported by wiki.
4920: 20 20 46 6f 72 20 6e 65 73 74 65 64 20 65 6e 75 For nested enu
4930: 6d 65 72 61 74 69 6f 6e 73 20 6f 72 20 66 6f 72 merations or for
4940: 0a 20 20 40 20 65 6e 75 6d 65 72 61 74 69 6f 6e . @ enumeration
4950: 73 20 74 68 61 74 20 63 6f 75 6e 74 20 75 73 69 s that count usi
4960: 6e 67 20 6c 65 74 74 65 72 73 20 6f 72 20 72 6f ng letters or ro
4970: 6d 61 6e 20 6e 75 6d 65 72 69 61 6c 73 2c 20 75 man numerials, u
4980: 73 65 20 48 54 4d 4c 2e 3c 2f 70 3e 0a 20 20 40 se HTML.</p>. @
4990: 20 3c 6c 69 3e 20 3c 70 3e 3c 62 3e 49 6e 64 65 <li> <p><b>Inde
49a0: 6e 74 65 64 20 50 61 72 61 67 72 61 70 68 73 3c nted Paragraphs<
49b0: 2f 62 3e 2e 0a 20 20 40 20 41 6e 79 20 70 61 72 /b>.. @ Any par
49c0: 61 67 72 61 70 68 20 74 68 61 74 20 62 65 67 69 agraph that begi
49d0: 6e 73 20 77 69 74 68 20 74 77 6f 20 6f 72 20 6d ns with two or m
49e0: 6f 72 65 20 73 70 61 63 65 73 20 6f 72 20 61 20 ore spaces or a
49f0: 74 61 62 20 61 6e 64 0a 20 20 40 20 77 68 69 63 tab and. @ whic
4a00: 68 20 69 73 20 6e 6f 74 20 61 20 62 75 6c 6c 65 h is not a bulle
4a10: 74 20 6f 72 20 65 6e 75 6d 65 72 61 74 69 6f 6e t or enumeration
4a20: 20 6c 69 73 74 20 69 74 65 6d 20 69 73 20 72 65 list item is re
4a30: 6e 64 65 72 65 64 20 0a 20 20 40 20 69 6e 64 65 ndered . @ inde
4a40: 6e 74 65 64 2e 20 20 4f 6e 6c 79 20 61 20 73 69 nted. Only a si
4a50: 6e 67 6c 65 20 6c 65 76 65 6c 20 6f 66 20 69 6e ngle level of in
4a60: 64 65 6e 74 61 74 69 6f 6e 20 69 73 20 73 75 70 dentation is sup
4a70: 70 6f 72 74 65 64 20 62 79 20 77 69 6b 69 3b 20 ported by wiki;
4a80: 75 73 65 0a 20 20 40 20 48 54 4d 4c 20 66 6f 72 use. @ HTML for
4a90: 20 64 65 65 70 65 72 20 69 6e 64 65 6e 74 61 74 deeper indentat
4aa0: 69 6f 6e 2e 3c 2f 70 3e 0a 20 20 40 20 3c 6c 69 ion.</p>. @ <li
4ab0: 3e 20 3c 70 3e 3c 62 3e 48 79 70 65 72 6c 69 6e > <p><b>Hyperlin
4ac0: 6b 73 3c 2f 62 3e 2e 0a 20 20 40 20 54 65 78 74 ks</b>.. @ Text
4ad0: 20 77 69 74 68 69 6e 20 73 71 75 61 72 65 20 62 within square b
4ae0: 72 61 63 6b 65 74 73 20 28 22 5b 2e 2e 2e 5d 22 rackets ("[...]"
4af0: 29 20 62 65 63 6f 6d 65 73 20 61 20 68 79 70 65 ) becomes a hype
4b00: 72 6c 69 6e 6b 2e 20 20 54 68 65 0a 20 20 40 20 rlink. The. @
4b10: 74 61 72 67 65 74 20 63 61 6e 20 62 65 20 61 20 target can be a
4b20: 77 69 6b 69 20 70 61 67 65 20 6e 61 6d 65 2c 20 wiki page name,
4b30: 74 68 65 20 61 72 74 69 66 61 63 74 20 49 44 20 the artifact ID
4b40: 6f 66 20 61 20 63 68 65 63 6b 2d 69 6e 20 6f 72 of a check-in or
4b50: 20 74 69 63 6b 65 74 2c 0a 20 20 40 20 74 68 65 ticket,. @ the
4b60: 20 6e 61 6d 65 20 6f 66 20 61 6e 20 69 6d 61 67 name of an imag
4b70: 65 2c 20 6f 72 20 61 20 55 52 4c 2e 20 20 42 79 e, or a URL. By
4b80: 20 64 65 66 61 75 6c 74 2c 20 74 68 65 20 74 61 default, the ta
4b90: 72 67 65 74 20 69 73 20 64 69 73 70 6c 61 79 65 rget is displaye
4ba0: 64 0a 20 20 40 20 61 73 20 74 68 65 20 74 65 78 d. @ as the tex
4bb0: 74 20 6f 66 20 74 68 65 20 68 79 70 65 72 6c 69 t of the hyperli
4bc0: 6e 6b 2e 20 20 42 75 74 20 79 6f 75 20 63 61 6e nk. But you can
4bd0: 20 73 70 65 63 69 66 79 20 61 6c 74 65 72 6e 61 specify alterna
4be0: 74 69 76 65 20 74 65 78 74 0a 20 20 40 20 61 66 tive text. @ af
4bf0: 74 65 72 20 74 68 65 20 74 61 72 67 65 74 20 6e ter the target n
4c00: 61 6d 65 20 73 65 70 61 72 61 74 65 64 20 62 79 ame separated by
4c10: 20 61 20 22 7c 22 20 63 68 61 72 61 63 74 65 72 a "|" character
4c20: 2e 3c 2f 70 3e 0a 20 20 40 20 3c 6c 69 3e 20 3c .</p>. @ <li> <
4c30: 70 3e 3c 62 3e 48 54 4d 4c 3c 2f 62 3e 2e 0a 20 p><b>HTML</b>..
4c40: 20 40 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 @ The following
4c50: 20 73 74 61 6e 64 61 72 64 20 48 54 4d 4c 20 65 standard HTML e
4c60: 6c 65 6d 65 6e 74 73 20 6d 61 79 20 62 65 20 75 lements may be u
4c70: 73 65 64 3a 0a 20 20 40 20 26 6c 74 3b 61 26 67 sed:. @ <a&g
4c80: 74 3b 0a 20 20 40 20 26 6c 74 3b 61 64 64 72 65 t;. @ <addre
4c90: 73 73 26 67 74 3b 0a 20 20 40 20 26 6c 74 3b 62 ss>. @ <b
4ca0: 26 67 74 3b 0a 20 20 40 20 26 6c 74 3b 62 69 67 >. @ <big
4cb0: 26 67 74 3b 0a 20 20 40 20 26 6c 74 3b 62 6c 6f >. @ <blo
4cc0: 63 6b 71 75 6f 74 65 26 67 74 3b 0a 20 20 40 20 ckquote>. @
4cd0: 26 6c 74 3b 62 72 26 67 74 3b 0a 20 20 40 20 26 <br>. @ &
4ce0: 6c 74 3b 63 65 6e 74 65 72 26 67 74 3b 0a 20 20 lt;center>.
4cf0: 40 20 26 6c 74 3b 63 69 74 65 26 67 74 3b 0a 20 @ <cite>.
4d00: 20 40 20 26 6c 74 3b 63 6f 64 65 26 67 74 3b 0a @ <code>.
4d10: 20 20 40 20 26 6c 74 3b 64 64 26 67 74 3b 0a 20 @ <dd>.
4d20: 20 40 20 26 6c 74 3b 64 66 6e 26 67 74 3b 0a 20 @ <dfn>.
4d30: 20 40 20 26 6c 74 3b 64 69 76 26 67 74 3b 0a 20 @ <div>.
4d40: 20 40 20 26 6c 74 3b 64 6c 26 67 74 3b 0a 20 20 @ <dl>.
4d50: 40 20 26 6c 74 3b 64 74 26 67 74 3b 0a 20 20 40 @ <dt>. @
4d60: 20 26 6c 74 3b 65 6d 26 67 74 3b 0a 20 20 40 20 <em>. @
4d70: 26 6c 74 3b 66 6f 6e 74 26 67 74 3b 0a 20 20 40 <font>. @
4d80: 20 26 6c 74 3b 68 31 26 67 74 3b 0a 20 20 40 20 <h1>. @
4d90: 26 6c 74 3b 68 32 26 67 74 3b 0a 20 20 40 20 26 <h2>. @ &
4da0: 6c 74 3b 68 33 26 67 74 3b 0a 20 20 40 20 26 6c lt;h3>. @ &l
4db0: 74 3b 68 34 26 67 74 3b 0a 20 20 40 20 26 6c 74 t;h4>. @ <
4dc0: 3b 68 35 26 67 74 3b 0a 20 20 40 20 26 6c 74 3b ;h5>. @ <
4dd0: 68 36 26 67 74 3b 0a 20 20 40 20 26 6c 74 3b 68 h6>. @ <h
4de0: 72 26 67 74 3b 0a 20 20 40 20 26 6c 74 3b 69 6d r>. @ <im
4df0: 67 26 67 74 3b 0a 20 20 40 20 26 6c 74 3b 69 26 g>. @ <i&
4e00: 67 74 3b 0a 20 20 40 20 26 6c 74 3b 6b 62 64 26 gt;. @ <kbd&
4e10: 67 74 3b 0a 20 20 40 20 26 6c 74 3b 6c 69 26 67 gt;. @ <li&g
4e20: 74 3b 0a 20 20 40 20 26 6c 74 3b 6e 6f 62 72 26 t;. @ <nobr&
4e30: 67 74 3b 0a 20 20 40 20 26 6c 74 3b 6f 6c 26 67 gt;. @ <ol&g
4e40: 74 3b 0a 20 20 40 20 26 6c 74 3b 70 26 67 74 3b t;. @ <p>
4e50: 0a 20 20 40 20 26 6c 74 3b 70 72 65 26 67 74 3b . @ <pre>
4e60: 0a 20 20 40 20 26 6c 74 3b 73 26 67 74 3b 0a 20 . @ <s>.
4e70: 20 40 20 26 6c 74 3b 73 61 6d 70 26 67 74 3b 0a @ <samp>.
4e80: 20 20 40 20 26 6c 74 3b 73 6d 61 6c 6c 26 67 74 @ <small>
4e90: 3b 0a 20 20 40 20 26 6c 74 3b 73 74 72 69 6b 65 ;. @ <strike
4ea0: 26 67 74 3b 0a 20 20 40 20 26 6c 74 3b 73 74 72 >. @ <str
4eb0: 6f 6e 67 26 67 74 3b 0a 20 20 40 20 26 6c 74 3b ong>. @ <
4ec0: 73 75 62 26 67 74 3b 0a 20 20 40 20 26 6c 74 3b sub>. @ <
4ed0: 73 75 70 26 67 74 3b 0a 20 20 40 20 26 6c 74 3b sup>. @ <
4ee0: 74 61 62 6c 65 26 67 74 3b 0a 20 20 40 20 26 6c table>. @ &l
4ef0: 74 3b 74 64 26 67 74 3b 0a 20 20 40 20 26 6c 74 t;td>. @ <
4f00: 3b 74 68 26 67 74 3b 0a 20 20 40 20 26 6c 74 3b ;th>. @ <
4f10: 74 72 26 67 74 3b 0a 20 20 40 20 26 6c 74 3b 74 tr>. @ <t
4f20: 74 26 67 74 3b 0a 20 20 40 20 26 6c 74 3b 75 26 t>. @ <u&
4f30: 67 74 3b 0a 20 20 40 20 26 6c 74 3b 75 6c 26 67 gt;. @ <ul&g
4f40: 74 3b 0a 20 20 40 20 26 6c 74 3b 76 61 72 26 67 t;. @ <var&g
4f50: 74 3b 2e 0a 20 20 40 20 49 6e 20 61 64 64 69 74 t;.. @ In addit
4f60: 69 6f 6e 2c 20 74 68 65 72 65 20 61 72 65 20 74 ion, there are t
4f70: 77 6f 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 wo non-standard
4f80: 65 6c 65 6d 65 6e 74 73 20 61 76 61 69 6c 61 62 elements availab
4f90: 6c 65 3a 0a 20 20 40 20 26 6c 74 3b 76 65 72 62 le:. @ <verb
4fa0: 61 74 69 6d 26 67 74 3b 20 61 6e 64 20 26 6c 74 atim> and <
4fb0: 3b 6e 6f 77 69 6b 69 26 67 74 3b 2e 0a 20 20 40 ;nowiki>.. @
4fc0: 20 4e 6f 20 6f 74 68 65 72 20 65 6c 65 6d 65 6e No other elemen
4fd0: 74 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 2e 20 ts are allowed.
4fe0: 20 41 6c 6c 20 61 74 74 72 69 62 75 74 65 73 20 All attributes
4ff0: 61 72 65 20 63 68 65 63 6b 65 64 20 61 6e 64 0a are checked and.
5000: 20 20 40 20 6f 6e 6c 79 20 61 20 66 65 77 20 62 @ only a few b
5010: 65 6e 69 67 6e 20 61 74 74 72 69 62 75 74 65 73 enign attributes
5020: 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 are allowed on
5030: 65 61 63 68 20 65 6c 65 6d 65 6e 74 2e 0a 20 20 each element..
5040: 40 20 49 6e 20 70 61 72 74 69 63 75 6c 61 72 2c @ In particular,
5050: 20 61 6e 79 20 61 74 74 72 69 62 75 74 65 73 20 any attributes
5060: 74 68 61 74 20 73 70 65 63 69 66 79 20 6a 61 76 that specify jav
5070: 61 73 63 72 69 70 74 20 6f 72 20 43 53 53 0a 20 ascript or CSS.
5080: 20 40 20 61 72 65 20 65 6c 69 64 65 64 2e 3c 2f @ are elided.</
5090: 70 3e 3c 2f 6c 69 3e 0a 20 20 40 20 3c 6c 69 3e p></li>. @ <li>
50a0: 3c 70 3e 3c 62 3e 53 70 65 63 69 61 6c 20 4d 61 <p><b>Special Ma
50b0: 72 6b 75 70 2e 3c 2f 62 3e 0a 20 20 40 20 54 68 rkup.</b>. @ Th
50c0: 65 20 26 6c 74 3b 6e 6f 77 69 6b 69 26 67 74 3b e <nowiki>
50d0: 20 74 61 67 20 64 69 73 61 62 6c 65 73 20 61 6c tag disables al
50e0: 6c 20 77 69 6b 69 20 66 6f 72 6d 61 74 74 69 6e l wiki formattin
50f0: 67 20 72 75 6c 65 73 0a 20 20 40 20 74 68 72 6f g rules. @ thro
5100: 75 67 68 20 74 68 65 20 6d 61 74 63 68 69 6e 67 ugh the matching
5110: 20 26 6c 74 3b 2f 6e 6f 77 69 6b 69 26 67 74 3b </nowiki>
5120: 20 65 6c 65 6d 65 6e 74 2e 0a 20 20 40 20 54 68 element.. @ Th
5130: 65 20 26 6c 74 3b 76 65 72 62 61 74 69 6d 26 67 e <verbatim&g
5140: 74 3b 20 74 61 67 20 77 6f 72 6b 73 20 6c 69 6b t; tag works lik
5150: 65 20 26 6c 74 3b 70 72 65 26 67 74 3b 20 77 69 e <pre> wi
5160: 74 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e 0a th the addition.
5170: 20 20 40 20 74 68 61 74 20 69 74 20 61 6c 73 6f @ that it also
5180: 20 64 69 73 61 62 6c 65 73 20 61 6c 6c 20 77 69 disables all wi
5190: 6b 69 20 61 6e 64 20 48 54 4d 4c 20 6d 61 72 6b ki and HTML mark
51a0: 75 70 0a 20 20 40 20 74 68 72 6f 75 67 68 20 74 up. @ through t
51b0: 68 65 20 6d 61 74 63 68 69 6e 67 20 26 6c 74 3b he matching <
51c0: 2f 76 65 72 62 61 74 69 6d 26 67 74 3b 2e 0a 20 /verbatim>..
51d0: 20 40 20 3c 2f 6f 6c 3e 0a 20 20 73 74 79 6c 65 @ </ol>. style
51e0: 5f 66 6f 6f 74 65 72 28 29 3b 0a 7d 0a 0a 2f 2a _footer();.}../*
51f0: 0a 2a 2a 20 41 64 64 20 61 20 6e 65 77 20 77 69 .** Add a new wi
5200: 6b 69 20 70 61 67 65 20 74 6f 20 74 68 65 20 72 ki page to the r
5210: 65 73 70 6f 73 69 74 6f 72 79 2e 20 20 54 68 65 espository. The
5220: 20 70 61 67 65 20 6e 61 6d 65 20 69 73 0a 2a 2a page name is.**
5230: 20 67 69 76 65 6e 20 62 79 20 74 68 65 20 7a 50 given by the zP
5240: 61 67 65 4e 61 6d 65 20 70 61 72 61 6d 65 74 65 ageName paramete
5250: 72 2e 20 20 69 73 4e 65 77 20 6d 75 73 74 20 62 r. isNew must b
5260: 65 20 74 72 75 65 20 74 6f 20 63 72 65 61 74 65 e true to create
5270: 0a 2a 2a 20 61 20 6e 65 77 20 70 61 67 65 2e 20 .** a new page.
5280: 20 49 66 20 6e 6f 20 70 72 65 76 69 6f 75 73 20 If no previous
5290: 70 61 67 65 20 77 69 74 68 20 74 68 65 20 6e 61 page with the na
52a0: 6d 65 20 7a 50 61 67 65 4e 61 6d 65 20 65 78 69 me zPageName exi
52b0: 73 74 73 0a 2a 2a 20 61 6e 64 20 69 73 4e 65 77 sts.** and isNew
52c0: 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65 6e 20 is false, then
52d0: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 74 68 72 this routine thr
52e0: 6f 77 73 20 61 6e 20 65 72 72 6f 72 2e 0a 2a 2a ows an error..**
52f0: 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 .** The content
5300: 6f 66 20 74 68 65 20 6e 65 77 20 70 61 67 65 20 of the new page
5310: 69 73 20 67 69 76 65 6e 20 62 79 20 74 68 65 20 is given by the
5320: 62 6c 6f 62 20 70 43 6f 6e 74 65 6e 74 2e 0a 2a blob pContent..*
5330: 2f 0a 69 6e 74 20 77 69 6b 69 5f 63 6d 64 5f 63 /.int wiki_cmd_c
5340: 6f 6d 6d 69 74 28 63 68 61 72 20 63 6f 6e 73 74 ommit(char const
5350: 20 2a 20 7a 50 61 67 65 4e 61 6d 65 2c 20 69 6e * zPageName, in
5360: 74 20 69 73 4e 65 77 2c 20 42 6c 6f 62 20 2a 70 t isNew, Blob *p
5370: 43 6f 6e 74 65 6e 74 29 7b 0a 20 20 42 6c 6f 62 Content){. Blob
5380: 20 77 69 6b 69 3b 20 20 20 20 20 20 20 20 20 20 wiki;
5390: 20 20 20 20 2f 2a 20 57 69 6b 69 20 70 61 67 65 /* Wiki page
53a0: 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 42 6c content */. Bl
53b0: 6f 62 20 63 6b 73 75 6d 3b 20 20 20 20 20 20 20 ob cksum;
53c0: 20 20 20 20 20 20 2f 2a 20 77 69 6b 69 20 63 68 /* wiki ch
53d0: 65 63 6b 73 75 6d 20 2a 2f 0a 20 20 69 6e 74 20 ecksum */. int
53e0: 72 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 rid;
53f0: 20 20 20 20 2f 2a 20 61 72 74 69 66 61 63 74 20 /* artifact
5400: 49 44 20 6f 66 20 70 61 72 65 6e 74 20 70 61 67 ID of parent pag
5410: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 72 69 64 3b e */. int nrid;
5420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
5430: 2a 20 61 72 74 69 66 61 63 74 20 49 44 20 6f 66 * artifact ID of
5440: 20 6e 65 77 20 77 69 6b 69 20 70 61 67 65 20 2a new wiki page *
5450: 2f 0a 20 20 63 68 61 72 20 2a 7a 44 61 74 65 3b /. char *zDate;
5460: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 /* t
5470: 69 6d 65 73 74 61 6d 70 20 2a 2f 0a 20 20 63 68 imestamp */. ch
5480: 61 72 20 2a 7a 55 75 69 64 3b 20 20 20 20 20 20 ar *zUuid;
5490: 20 20 20 20 20 20 2f 2a 20 75 75 69 64 20 66 6f /* uuid fo
54a0: 72 20 72 69 64 20 2a 2f 0a 0a 20 20 72 69 64 20 r rid */.. rid
54b0: 3d 20 64 62 5f 69 6e 74 28 30 2c 0a 20 20 20 20 = db_int(0,.
54c0: 20 22 53 45 4c 45 43 54 20 78 2e 72 69 64 20 46 "SELECT x.rid F
54d0: 52 4f 4d 20 74 61 67 20 74 2c 20 74 61 67 78 72 ROM tag t, tagxr
54e0: 65 66 20 78 22 0a 20 20 20 20 20 22 20 57 48 45 ef x". " WHE
54f0: 52 45 20 78 2e 74 61 67 69 64 3d 74 2e 74 61 67 RE x.tagid=t.tag
5500: 69 64 20 41 4e 44 20 74 2e 74 61 67 6e 61 6d 65 id AND t.tagname
5510: 3d 27 77 69 6b 69 2d 25 71 27 22 0a 20 20 20 20 ='wiki-%q'".
5520: 20 22 20 4f 52 44 45 52 20 42 59 20 78 2e 6d 74 " ORDER BY x.mt
5530: 69 6d 65 20 44 45 53 43 20 4c 49 4d 49 54 20 31 ime DESC LIMIT 1
5540: 22 2c 0a 20 20 20 20 20 7a 50 61 67 65 4e 61 6d ",. zPageNam
5550: 65 0a 20 20 29 3b 0a 20 20 69 66 28 20 72 69 64 e. );. if( rid
5560: 3d 3d 30 20 26 26 20 21 69 73 4e 65 77 20 29 7b ==0 && !isNew ){
5570: 0a 20 20 20 20 66 6f 73 73 69 6c 5f 66 61 74 61 . fossil_fata
5580: 6c 28 22 6e 6f 20 73 75 63 68 20 77 69 6b 69 20 l("no such wiki
5590: 70 61 67 65 3a 20 25 73 22 2c 20 7a 50 61 67 65 page: %s", zPage
55a0: 4e 61 6d 65 29 3b 0a 20 20 7d 0a 20 20 69 66 28 Name);. }. if(
55b0: 20 72 69 64 21 3d 30 20 26 26 20 69 73 4e 65 77 rid!=0 && isNew
55c0: 20 29 7b 0a 20 20 20 20 66 6f 73 73 69 6c 5f 66 ){. fossil_f
55d0: 61 74 61 6c 28 22 77 69 6b 69 20 70 61 67 65 20 atal("wiki page
55e0: 25 73 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 %s already exist
55f0: 73 22 2c 20 7a 50 61 67 65 4e 61 6d 65 29 3b 0a s", zPageName);.
5600: 20 20 7d 0a 0a 20 20 62 6c 6f 62 5f 7a 65 72 6f }.. blob_zero
5610: 28 26 77 69 6b 69 29 3b 0a 20 20 7a 44 61 74 65 (&wiki);. zDate
5620: 20 3d 20 64 62 5f 74 65 78 74 28 30 2c 20 22 53 = db_text(0, "S
5630: 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65 28 27 ELECT datetime('
5640: 6e 6f 77 27 29 22 29 3b 0a 20 20 7a 44 61 74 65 now')");. zDate
5650: 5b 31 30 5d 20 3d 20 27 54 27 3b 0a 20 20 62 6c [10] = 'T';. bl
5660: 6f 62 5f 61 70 70 65 6e 64 66 28 26 77 69 6b 69 ob_appendf(&wiki
5670: 2c 20 22 44 20 25 73 5c 6e 22 2c 20 7a 44 61 74 , "D %s\n", zDat
5680: 65 29 3b 0a 20 20 66 72 65 65 28 7a 44 61 74 65 e);. free(zDate
5690: 29 3b 0a 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 );. blob_append
56a0: 66 28 26 77 69 6b 69 2c 20 22 4c 20 25 46 5c 6e f(&wiki, "L %F\n
56b0: 22 2c 20 7a 50 61 67 65 4e 61 6d 65 20 29 3b 0a ", zPageName );.
56c0: 20 20 69 66 28 20 72 69 64 20 29 7b 0a 20 20 20 if( rid ){.
56d0: 20 7a 55 75 69 64 20 3d 20 64 62 5f 74 65 78 74 zUuid = db_text
56e0: 28 30 2c 20 22 53 45 4c 45 43 54 20 75 75 69 64 (0, "SELECT uuid
56f0: 20 46 52 4f 4d 20 62 6c 6f 62 20 57 48 45 52 45 FROM blob WHERE
5700: 20 72 69 64 3d 25 64 22 2c 20 72 69 64 29 3b 0a rid=%d", rid);.
5710: 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 blob_appendf
5720: 28 26 77 69 6b 69 2c 20 22 50 20 25 73 5c 6e 22 (&wiki, "P %s\n"
5730: 2c 20 7a 55 75 69 64 29 3b 0a 20 20 20 20 66 72 , zUuid);. fr
5740: 65 65 28 7a 55 75 69 64 29 3b 0a 20 20 7d 0a 20 ee(zUuid);. }.
5750: 20 75 73 65 72 5f 73 65 6c 65 63 74 28 29 3b 0a user_select();.
5760: 20 20 69 66 28 20 67 2e 7a 4c 6f 67 69 6e 20 29 if( g.zLogin )
5770: 7b 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 {. blob_app
5780: 65 6e 64 66 28 26 77 69 6b 69 2c 20 22 55 20 25 endf(&wiki, "U %
5790: 46 5c 6e 22 2c 20 67 2e 7a 4c 6f 67 69 6e 29 3b F\n", g.zLogin);
57a0: 0a 20 20 7d 0a 20 20 62 6c 6f 62 5f 61 70 70 65 . }. blob_appe
57b0: 6e 64 66 28 20 26 77 69 6b 69 2c 20 22 57 20 25 ndf( &wiki, "W %
57c0: 64 5c 6e 25 73 5c 6e 22 2c 20 62 6c 6f 62 5f 73 d\n%s\n", blob_s
57d0: 69 7a 65 28 70 43 6f 6e 74 65 6e 74 29 2c 0a 20 ize(pContent),.
57e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 b
57f0: 6c 6f 62 5f 73 74 72 28 70 43 6f 6e 74 65 6e 74 lob_str(pContent
5800: 29 20 29 3b 0a 20 20 6d 64 35 73 75 6d 5f 62 6c ) );. md5sum_bl
5810: 6f 62 28 26 77 69 6b 69 2c 20 26 63 6b 73 75 6d ob(&wiki, &cksum
5820: 29 3b 0a 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 );. blob_append
5830: 66 28 26 77 69 6b 69 2c 20 22 5a 20 25 62 5c 6e f(&wiki, "Z %b\n
5840: 22 2c 20 26 63 6b 73 75 6d 29 3b 0a 20 20 62 6c ", &cksum);. bl
5850: 6f 62 5f 72 65 73 65 74 28 26 63 6b 73 75 6d 29 ob_reset(&cksum)
5860: 3b 0a 20 20 64 62 5f 62 65 67 69 6e 5f 74 72 61 ;. db_begin_tra
5870: 6e 73 61 63 74 69 6f 6e 28 29 3b 0a 20 20 6e 72 nsaction();. nr
5880: 69 64 20 3d 20 63 6f 6e 74 65 6e 74 5f 70 75 74 id = content_put
5890: 28 20 26 77 69 6b 69 2c 20 30 2c 20 30 20 29 3b ( &wiki, 0, 0 );
58a0: 0a 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 . db_multi_exec
58b0: 28 22 49 4e 53 45 52 54 20 4f 52 20 49 47 4e 4f ("INSERT OR IGNO
58c0: 52 45 20 49 4e 54 4f 20 75 6e 73 65 6e 74 20 56 RE INTO unsent V
58d0: 41 4c 55 45 53 28 25 64 29 22 2c 20 6e 72 69 64 ALUES(%d)", nrid
58e0: 29 3b 0a 20 20 6d 61 6e 69 66 65 73 74 5f 63 72 );. manifest_cr
58f0: 6f 73 73 6c 69 6e 6b 28 6e 72 69 64 2c 26 77 69 osslink(nrid,&wi
5900: 6b 69 29 3b 0a 20 20 62 6c 6f 62 5f 72 65 73 65 ki);. blob_rese
5910: 74 28 26 77 69 6b 69 29 3b 0a 20 20 63 6f 6e 74 t(&wiki);. cont
5920: 65 6e 74 5f 64 65 6c 74 69 66 79 28 72 69 64 2c ent_deltify(rid,
5930: 6e 72 69 64 2c 30 29 3b 0a 20 20 64 62 5f 65 6e nrid,0);. db_en
5940: 64 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 30 29 d_transaction(0)
5950: 3b 0a 20 20 61 75 74 6f 73 79 6e 63 28 41 55 54 ;. autosync(AUT
5960: 4f 53 59 4e 43 5f 50 55 53 48 29 3b 20 20 0a 20 OSYNC_PUSH); .
5970: 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a return 1;.}../*
5980: 0a 2a 2a 20 43 4f 4d 4d 41 4e 44 3a 20 77 69 6b .** COMMAND: wik
5990: 69 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 25 i.**.** Usage: %
59a0: 66 6f 73 73 69 6c 20 77 69 6b 69 20 28 65 78 70 fossil wiki (exp
59b0: 6f 72 74 7c 63 72 65 61 74 65 7c 63 6f 6d 6d 69 ort|create|commi
59c0: 74 7c 6c 69 73 74 29 20 57 69 6b 69 4e 61 6d 65 t|list) WikiName
59d0: 0a 2a 2a 0a 2a 2a 20 52 75 6e 20 76 61 72 69 6f .**.** Run vario
59e0: 75 73 20 73 75 62 63 6f 6d 6d 61 6e 64 73 20 74 us subcommands t
59f0: 6f 20 77 6f 72 6b 20 77 69 74 68 20 77 69 6b 69 o work with wiki
5a00: 20 65 6e 74 72 69 65 73 2e 0a 2a 2a 0a 2a 2a 20 entries..**.**
5a10: 20 20 20 20 25 66 6f 73 73 69 6c 20 77 69 6b 69 %fossil wiki
5a20: 20 65 78 70 6f 72 74 20 50 41 47 45 4e 41 4d 45 export PAGENAME
5a30: 20 3f 46 49 4c 45 3f 0a 2a 2a 0a 2a 2a 20 20 20 ?FILE?.**.**
5a40: 20 20 20 20 20 53 65 6e 64 73 20 74 68 65 20 6c Sends the l
5a50: 61 74 65 73 74 20 76 65 72 73 69 6f 6e 20 6f 66 atest version of
5a60: 20 74 68 65 20 50 41 47 45 4e 41 4d 45 20 77 69 the PAGENAME wi
5a70: 6b 69 0a 2a 2a 20 20 20 20 20 20 20 20 65 6e 74 ki.** ent
5a80: 72 79 20 74 6f 20 74 68 65 20 67 69 76 65 6e 20 ry to the given
5a90: 66 69 6c 65 20 6f 72 20 73 74 61 6e 64 61 72 64 file or standard
5aa0: 20 6f 75 74 70 75 74 2e 0a 2a 2a 0a 2a 2a 20 20 output..**.**
5ab0: 20 20 20 25 66 6f 73 73 69 6c 20 77 69 6b 69 20 %fossil wiki
5ac0: 63 6f 6d 6d 69 74 20 50 41 47 45 4e 41 4d 45 20 commit PAGENAME
5ad0: 3f 46 49 4c 45 3f 0a 2a 2a 0a 2a 2a 20 20 20 20 ?FILE?.**.**
5ae0: 20 20 20 20 43 6f 6d 6d 69 74 20 63 68 61 6e 67 Commit chang
5af0: 65 73 20 74 6f 20 61 20 77 69 6b 69 20 70 61 67 es to a wiki pag
5b00: 65 20 66 72 6f 6d 20 46 49 4c 45 20 6f 72 20 66 e from FILE or f
5b10: 72 6f 6d 20 73 74 61 6e 64 61 72 64 0a 2a 2a 20 rom standard.**
5b20: 20 20 20 20 20 20 20 69 6e 70 75 74 2e 0a 2a 2a input..**
5b30: 0a 2a 2a 20 20 20 20 20 25 66 6f 73 73 69 6c 20 .** %fossil
5b40: 77 69 6b 69 20 63 72 65 61 74 65 20 50 41 47 45 wiki create PAGE
5b50: 4e 41 4d 45 20 3f 46 49 4c 45 3f 0a 2a 2a 0a 2a NAME ?FILE?.**.*
5b60: 2a 20 20 20 20 20 20 20 20 43 72 65 61 74 65 20 * Create
5b70: 61 20 6e 65 77 20 77 69 6b 69 20 70 61 67 65 20 a new wiki page
5b80: 77 69 74 68 20 69 6e 69 74 69 61 6c 20 63 6f 6e with initial con
5b90: 74 65 6e 74 20 74 61 6b 65 6e 20 66 72 6f 6d 0a tent taken from.
5ba0: 2a 2a 20 20 20 20 20 20 20 20 46 49 4c 45 20 6f ** FILE o
5bb0: 72 20 66 72 6f 6d 20 73 74 61 6e 64 61 72 64 20 r from standard
5bc0: 69 6e 70 75 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 input..**.**
5bd0: 20 25 66 6f 73 73 69 6c 20 77 69 6b 69 20 6c 69 %fossil wiki li
5be0: 73 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 st.**.**
5bf0: 4c 69 73 74 73 20 61 6c 6c 20 77 69 6b 69 20 65 Lists all wiki e
5c00: 6e 74 72 69 65 73 2c 20 6f 6e 65 20 70 65 72 20 ntries, one per
5c10: 6c 69 6e 65 2c 20 6f 72 64 65 72 65 64 0a 2a 2a line, ordered.**
5c20: 20 20 20 20 20 20 20 20 63 61 73 65 2d 69 6e 73 case-ins
5c30: 65 6e 74 69 76 65 6c 79 20 62 79 20 6e 61 6d 65 entively by name
5c40: 2e 0a 2a 2a 0a 2a 2a 20 54 4f 44 4f 73 3a 0a 2a ..**.** TODOs:.*
5c50: 2a 0a 2a 2a 20 20 20 20 20 25 66 6f 73 73 69 6c *.** %fossil
5c60: 20 77 69 6b 69 20 65 78 70 6f 72 74 20 3f 2d 75 wiki export ?-u
5c70: 20 41 52 54 49 46 41 43 54 3f 20 57 69 6b 69 4e ARTIFACT? WikiN
5c80: 61 6d 65 20 3f 46 49 4c 45 3f 0a 2a 2a 0a 2a 2a ame ?FILE?.**.**
5c90: 20 20 20 20 20 20 20 20 4f 75 74 70 75 74 73 20 Outputs
5ca0: 74 68 65 20 73 65 6c 65 63 74 65 64 20 76 65 72 the selected ver
5cb0: 73 69 6f 6e 20 6f 66 20 57 69 6b 69 4e 61 6d 65 sion of WikiName
5cc0: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 25 66 6f 73 ..**.** %fos
5cd0: 73 69 6c 20 77 69 6b 69 20 64 65 6c 65 74 65 20 sil wiki delete
5ce0: 3f 2d 6d 20 4d 45 53 53 41 47 45 3f 20 57 69 6b ?-m MESSAGE? Wik
5cf0: 69 4e 61 6d 65 0a 2a 2a 0a 2a 2a 20 20 20 20 20 iName.**.**
5d00: 20 20 20 54 68 65 20 73 61 6d 65 20 61 73 20 64 The same as d
5d10: 65 6c 65 74 69 6e 67 20 61 20 66 69 6c 65 20 65 eleting a file e
5d20: 6e 74 72 79 2c 20 62 75 74 20 69 20 64 6f 6e 27 ntry, but i don'
5d30: 74 20 6b 6e 6f 77 20 69 66 20 66 6f 73 73 69 6c t know if fossil
5d40: 0a 2a 2a 20 20 20 20 20 20 20 20 73 75 70 70 6f .** suppo
5d50: 72 74 73 20 61 20 63 6f 6d 6d 69 74 20 6d 65 73 rts a commit mes
5d60: 73 61 67 65 20 66 6f 72 20 57 69 6b 69 20 65 6e sage for Wiki en
5d70: 74 72 69 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 tries..**.**
5d80: 20 25 66 6f 73 73 69 6c 20 77 69 6b 69 20 3f 2d %fossil wiki ?-
5d90: 75 3f 20 3f 2d 64 3f 20 3f 2d 73 3d 5b 7c 5d 3f u? ?-d? ?-s=[|]?
5da0: 20 6c 69 73 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 list.**.**
5db0: 20 20 20 4c 69 73 74 73 20 74 68 65 20 61 72 74 Lists the art
5dc0: 69 66 61 63 74 20 49 44 20 61 6e 64 2f 6f 72 20 ifact ID and/or
5dd0: 44 61 74 65 20 6f 66 20 6c 61 73 74 20 63 68 61 Date of last cha
5de0: 6e 67 65 20 61 6c 6f 6e 67 20 77 69 74 68 0a 2a nge along with.*
5df0: 2a 20 20 20 20 20 20 20 20 65 61 63 68 20 65 6e * each en
5e00: 74 72 79 20 6e 61 6d 65 2c 20 64 65 6c 69 6d 69 try name, delimi
5e10: 74 65 64 20 62 79 20 74 68 65 20 2d 73 20 63 68 ted by the -s ch
5e20: 61 72 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 25 66 ar..**.** %f
5e30: 6f 73 73 69 6c 20 77 69 6b 69 20 64 69 66 66 20 ossil wiki diff
5e40: 3f 41 52 54 49 46 41 43 54 3f 20 3f 2d 66 20 69 ?ARTIFACT? ?-f i
5e50: 6e 66 69 6c 65 5b 3d 73 74 64 69 6e 5d 3f 20 45 nfile[=stdin]? E
5e60: 6e 74 72 79 4e 61 6d 65 0a 2a 2a 0a 2a 2a 20 20 ntryName.**.**
5e70: 20 20 20 20 20 20 44 69 66 66 73 20 74 68 65 20 Diffs the
5e80: 6c 6f 63 61 6c 20 63 6f 70 79 20 6f 66 20 61 20 local copy of a
5e90: 70 61 67 65 20 77 69 74 68 20 61 20 67 69 76 65 page with a give
5ea0: 6e 20 76 65 72 73 69 6f 6e 20 28 64 65 66 61 75 n version (defau
5eb0: 6c 74 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 lting.**
5ec0: 74 6f 20 74 68 65 20 68 65 61 64 20 76 65 72 73 to the head vers
5ed0: 69 6f 6e 29 2e 0a 2a 2f 0a 76 6f 69 64 20 77 69 ion)..*/.void wi
5ee0: 6b 69 5f 63 6d 64 28 76 6f 69 64 29 7b 0a 20 20 ki_cmd(void){.
5ef0: 69 6e 74 20 6e 3b 0a 20 20 64 62 5f 66 69 6e 64 int n;. db_find
5f00: 5f 61 6e 64 5f 6f 70 65 6e 5f 72 65 70 6f 73 69 _and_open_reposi
5f10: 74 6f 72 79 28 31 29 3b 0a 20 20 69 66 28 20 67 tory(1);. if( g
5f20: 2e 61 72 67 63 3c 33 20 29 7b 0a 20 20 20 20 67 .argc<3 ){. g
5f30: 6f 74 6f 20 77 69 6b 69 5f 63 6d 64 5f 75 73 61 oto wiki_cmd_usa
5f40: 67 65 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 73 74 ge;. }. n = st
5f50: 72 6c 65 6e 28 67 2e 61 72 67 76 5b 32 5d 29 3b rlen(g.argv[2]);
5f60: 0a 20 20 69 66 28 20 6e 3d 3d 30 20 29 7b 0a 20 . if( n==0 ){.
5f70: 20 20 20 67 6f 74 6f 20 77 69 6b 69 5f 63 6d 64 goto wiki_cmd
5f80: 5f 75 73 61 67 65 3b 0a 20 20 7d 0a 0a 20 20 69 _usage;. }.. i
5f90: 66 28 20 73 74 72 6e 63 6d 70 28 67 2e 61 72 67 f( strncmp(g.arg
5fa0: 76 5b 32 5d 2c 22 65 78 70 6f 72 74 22 2c 6e 29 v[2],"export",n)
5fb0: 3d 3d 30 20 29 7b 0a 20 20 20 20 63 68 61 72 20 ==0 ){. char
5fc0: 63 6f 6e 73 74 20 2a 7a 50 61 67 65 4e 61 6d 65 const *zPageName
5fd0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 ; /* Name
5fe0: 20 6f 66 20 74 68 65 20 77 69 6b 69 20 70 61 67 of the wiki pag
5ff0: 65 20 74 6f 20 65 78 70 6f 72 74 20 2a 2f 0a 20 e to export */.
6000: 20 20 20 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a char const *z
6010: 46 69 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 File;
6020: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 /* Name of the
6030: 6f 75 74 70 75 74 20 66 69 6c 65 20 28 30 3d 73 output file (0=s
6040: 74 64 6f 75 74 29 20 2a 2f 0a 20 20 20 20 69 6e tdout) */. in
6050: 74 20 72 69 64 3b 20 20 20 20 20 20 20 20 20 20 t rid;
6060: 20 20 20 20 20 20 2f 2a 20 41 72 74 69 66 61 63 /* Artifac
6070: 74 20 49 44 20 6f 66 20 74 68 65 20 77 69 6b 69 t ID of the wiki
6080: 20 70 61 67 65 20 2a 2f 0a 20 20 20 20 69 6e 74 page */. int
6090: 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 i;
60a0: 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 /* Loop cou
60b0: 6e 74 65 72 20 2a 2f 0a 20 20 20 20 63 68 61 72 nter */. char
60c0: 20 2a 7a 42 6f 64 79 20 3d 20 30 3b 20 20 20 20 *zBody = 0;
60d0: 20 20 20 20 2f 2a 20 57 69 6b 69 20 70 61 67 65 /* Wiki page
60e0: 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 20 20 content */.
60f0: 4d 61 6e 69 66 65 73 74 20 6d 3b 20 20 20 20 20 Manifest m;
6100: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73 65 /* Parse
6110: 64 20 77 69 6b 69 20 70 61 67 65 20 63 6f 6e 74 d wiki page cont
6120: 65 6e 74 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 ent */. if( (
6130: 67 2e 61 72 67 63 21 3d 34 29 20 26 26 20 28 67 g.argc!=4) && (g
6140: 2e 61 72 67 63 21 3d 35 29 20 29 7b 0a 20 20 20 .argc!=5) ){.
6150: 20 20 20 75 73 61 67 65 28 22 65 78 70 6f 72 74 usage("export
6160: 20 50 41 47 45 4e 41 4d 45 20 3f 46 49 4c 45 3f PAGENAME ?FILE?
6170: 22 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 50 ");. }. zP
6180: 61 67 65 4e 61 6d 65 20 3d 20 67 2e 61 72 67 76 ageName = g.argv
6190: 5b 33 5d 3b 0a 20 20 20 20 72 69 64 20 3d 20 64 [3];. rid = d
61a0: 62 5f 69 6e 74 28 30 2c 20 22 53 45 4c 45 43 54 b_int(0, "SELECT
61b0: 20 78 2e 72 69 64 20 46 52 4f 4d 20 74 61 67 20 x.rid FROM tag
61c0: 74 2c 20 74 61 67 78 72 65 66 20 78 22 0a 20 20 t, tagxref x".
61d0: 20 20 20 20 22 20 57 48 45 52 45 20 78 2e 74 61 " WHERE x.ta
61e0: 67 69 64 3d 74 2e 74 61 67 69 64 20 41 4e 44 20 gid=t.tagid AND
61f0: 74 2e 74 61 67 6e 61 6d 65 3d 27 77 69 6b 69 2d t.tagname='wiki-
6200: 25 71 27 22 0a 20 20 20 20 20 20 22 20 4f 52 44 %q'". " ORD
6210: 45 52 20 42 59 20 78 2e 6d 74 69 6d 65 20 44 45 ER BY x.mtime DE
6220: 53 43 20 4c 49 4d 49 54 20 31 22 2c 0a 20 20 20 SC LIMIT 1",.
6230: 20 20 20 7a 50 61 67 65 4e 61 6d 65 20 0a 20 20 zPageName .
6240: 20 20 29 3b 0a 20 20 20 20 69 66 28 20 72 69 64 );. if( rid
6250: 20 29 7b 0a 20 20 20 20 20 20 42 6c 6f 62 20 63 ){. Blob c
6260: 6f 6e 74 65 6e 74 3b 0a 20 20 20 20 20 20 63 6f ontent;. co
6270: 6e 74 65 6e 74 5f 67 65 74 28 72 69 64 2c 20 26 ntent_get(rid, &
6280: 63 6f 6e 74 65 6e 74 29 3b 0a 20 20 20 20 20 20 content);.
6290: 6d 61 6e 69 66 65 73 74 5f 70 61 72 73 65 28 26 manifest_parse(&
62a0: 6d 2c 20 26 63 6f 6e 74 65 6e 74 29 3b 0a 20 20 m, &content);.
62b0: 20 20 20 20 69 66 28 20 6d 2e 74 79 70 65 3d 3d if( m.type==
62c0: 43 46 54 59 50 45 5f 57 49 4b 49 20 29 7b 0a 20 CFTYPE_WIKI ){.
62d0: 20 20 20 20 20 20 20 7a 42 6f 64 79 20 3d 20 6d zBody = m
62e0: 2e 7a 57 69 6b 69 3b 0a 20 20 20 20 20 20 7d 0a .zWiki;. }.
62f0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 7a 42 }. if( zB
6300: 6f 64 79 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 ody==0 ){.
6310: 66 6f 73 73 69 6c 5f 66 61 74 61 6c 28 22 77 69 fossil_fatal("wi
6320: 6b 69 20 70 61 67 65 20 5b 25 73 5d 20 6e 6f 74 ki page [%s] not
6330: 20 66 6f 75 6e 64 22 2c 7a 50 61 67 65 4e 61 6d found",zPageNam
6340: 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f e);. }. fo
6350: 72 28 69 3d 73 74 72 6c 65 6e 28 7a 42 6f 64 79 r(i=strlen(zBody
6360: 29 3b 20 69 3e 30 20 26 26 20 69 73 73 70 61 63 ); i>0 && isspac
6370: 65 28 7a 42 6f 64 79 5b 69 2d 31 5d 29 3b 20 69 e(zBody[i-1]); i
6380: 2d 2d 29 7b 7d 0a 20 20 20 20 7a 46 69 6c 65 20 --){}. zFile
6390: 20 3d 20 28 67 2e 61 72 67 63 3d 3d 34 29 20 3f = (g.argc==4) ?
63a0: 20 30 20 3a 20 67 2e 61 72 67 76 5b 34 5d 3b 0a 0 : g.argv[4];.
63b0: 20 20 20 20 69 66 28 20 7a 46 69 6c 65 20 29 7b if( zFile ){
63c0: 0a 20 20 20 20 20 20 46 49 4c 45 20 2a 20 7a 46 . FILE * zF
63d0: 3b 0a 20 20 20 20 20 20 73 68 6f 72 74 20 64 6f ;. short do
63e0: 43 6c 6f 73 65 20 3d 20 30 3b 0a 20 20 20 20 20 Close = 0;.
63f0: 20 69 66 28 20 28 31 20 3d 3d 20 73 74 72 6c 65 if( (1 == strle
6400: 6e 28 7a 46 69 6c 65 29 29 20 26 26 20 28 27 2d n(zFile)) && ('-
6410: 27 3d 3d 7a 46 69 6c 65 5b 30 5d 29 20 29 7b 0a '==zFile[0]) ){.
6420: 20 20 20 20 20 20 20 20 7a 46 20 3d 20 73 74 64 zF = std
6430: 6f 75 74 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 out;. }else
6440: 7b 0a 20 20 20 20 20 20 20 20 7a 46 20 3d 20 66 {. zF = f
6450: 6f 70 65 6e 28 20 7a 46 69 6c 65 2c 20 22 77 22 open( zFile, "w"
6460: 20 29 3b 0a 20 20 20 20 20 20 20 20 64 6f 43 6c );. doCl
6470: 6f 73 65 20 3d 20 7a 46 20 3f 20 31 20 3a 20 30 ose = zF ? 1 : 0
6480: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 ;. }.
6490: 69 66 28 20 21 20 7a 46 20 29 7b 0a 20 20 20 20 if( ! zF ){.
64a0: 20 20 20 20 66 6f 73 73 69 6c 5f 66 61 74 61 6c fossil_fatal
64b0: 28 22 77 69 6b 69 20 65 78 70 6f 72 74 20 63 6f ("wiki export co
64c0: 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 6f 75 74 uld not open out
64d0: 70 75 74 20 66 69 6c 65 20 66 6f 72 20 77 72 69 put file for wri
64e0: 74 69 6e 67 2e 22 29 3b 0a 20 20 20 20 20 20 7d ting.");. }
64f0: 0a 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 7a . fprintf(z
6500: 46 2c 22 25 2e 2a 73 5c 6e 22 2c 20 69 2c 20 7a F,"%.*s\n", i, z
6510: 42 6f 64 79 29 3b 0a 20 20 20 20 20 20 69 66 28 Body);. if(
6520: 20 64 6f 43 6c 6f 73 65 20 29 20 66 63 6c 6f 73 doClose ) fclos
6530: 65 28 7a 46 29 3b 0a 20 20 20 20 7d 65 6c 73 65 e(zF);. }else
6540: 7b 0a 09 70 72 69 6e 74 66 28 22 25 2e 2a 73 5c {..printf("%.*s\
6550: 6e 22 2c 20 69 2c 20 7a 42 6f 64 79 29 3b 0a 20 n", i, zBody);.
6560: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 3b }. return;
6570: 0a 20 20 7d 65 6c 73 65 0a 20 20 69 66 28 20 73 . }else. if( s
6580: 74 72 6e 63 6d 70 28 67 2e 61 72 67 76 5b 32 5d trncmp(g.argv[2]
6590: 2c 22 63 6f 6d 6d 69 74 22 2c 6e 29 3d 3d 30 0a ,"commit",n)==0.
65a0: 20 20 20 20 20 20 7c 7c 20 73 74 72 6e 63 6d 70 || strncmp
65b0: 28 67 2e 61 72 67 76 5b 32 5d 2c 22 63 72 65 61 (g.argv[2],"crea
65c0: 74 65 22 2c 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 te",n)==0 ){.
65d0: 20 63 68 61 72 20 2a 7a 50 61 67 65 4e 61 6d 65 char *zPageName
65e0: 3b 0a 20 20 20 20 42 6c 6f 62 20 63 6f 6e 74 65 ;. Blob conte
65f0: 6e 74 3b 0a 20 20 20 20 69 66 28 20 67 2e 61 72 nt;. if( g.ar
6600: 67 63 21 3d 34 20 26 26 20 67 2e 61 72 67 63 21 gc!=4 && g.argc!
6610: 3d 35 20 29 7b 0a 20 20 20 20 20 20 75 73 61 67 =5 ){. usag
6620: 65 28 22 63 6f 6d 6d 69 74 20 50 41 47 45 4e 41 e("commit PAGENA
6630: 4d 45 20 3f 46 49 4c 45 3f 22 29 3b 0a 20 20 20 ME ?FILE?");.
6640: 20 7d 0a 20 20 20 20 7a 50 61 67 65 4e 61 6d 65 }. zPageName
6650: 20 3d 20 67 2e 61 72 67 76 5b 33 5d 3b 0a 20 20 = g.argv[3];.
6660: 20 20 69 66 28 20 67 2e 61 72 67 63 3d 3d 34 20 if( g.argc==4
6670: 29 7b 0a 20 20 20 20 20 20 62 6c 6f 62 5f 72 65 ){. blob_re
6680: 61 64 5f 66 72 6f 6d 5f 63 68 61 6e 6e 65 6c 28 ad_from_channel(
6690: 26 63 6f 6e 74 65 6e 74 2c 20 73 74 64 69 6e 2c &content, stdin,
66a0: 20 2d 31 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b -1);. }else{
66b0: 0a 20 20 20 20 20 20 62 6c 6f 62 5f 72 65 61 64 . blob_read
66c0: 5f 66 72 6f 6d 5f 66 69 6c 65 28 26 63 6f 6e 74 _from_file(&cont
66d0: 65 6e 74 2c 20 67 2e 61 72 67 76 5b 34 5d 29 3b ent, g.argv[4]);
66e0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 67 . }. if( g
66f0: 2e 61 72 67 76 5b 32 5d 5b 31 5d 3d 3d 27 72 27 .argv[2][1]=='r'
6700: 20 29 7b 0a 20 20 20 20 20 20 77 69 6b 69 5f 63 ){. wiki_c
6710: 6d 64 5f 63 6f 6d 6d 69 74 28 7a 50 61 67 65 4e md_commit(zPageN
6720: 61 6d 65 2c 20 31 2c 20 26 63 6f 6e 74 65 6e 74 ame, 1, &content
6730: 29 3b 0a 20 20 20 20 20 20 70 72 69 6e 74 66 28 );. printf(
6740: 22 43 72 65 61 74 65 64 20 6e 65 77 20 77 69 6b "Created new wik
6750: 69 20 70 61 67 65 20 25 73 2e 5c 6e 22 2c 20 7a i page %s.\n", z
6760: 50 61 67 65 4e 61 6d 65 29 3b 0a 20 20 20 20 7d PageName);. }
6770: 65 6c 73 65 7b 0a 20 20 20 20 20 20 77 69 6b 69 else{. wiki
6780: 5f 63 6d 64 5f 63 6f 6d 6d 69 74 28 7a 50 61 67 _cmd_commit(zPag
6790: 65 4e 61 6d 65 2c 20 30 2c 20 26 63 6f 6e 74 65 eName, 0, &conte
67a0: 6e 74 29 3b 0a 20 20 20 20 20 20 70 72 69 6e 74 nt);. print
67b0: 66 28 22 55 70 64 61 74 65 64 20 77 69 6b 69 20 f("Updated wiki
67c0: 70 61 67 65 20 25 73 2e 5c 6e 22 2c 20 7a 50 61 page %s.\n", zPa
67d0: 67 65 4e 61 6d 65 29 3b 0a 20 20 20 20 7d 0a 20 geName);. }.
67e0: 20 20 20 62 6c 6f 62 5f 72 65 73 65 74 28 26 63 blob_reset(&c
67f0: 6f 6e 74 65 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 ontent);. }else
6800: 0a 20 20 69 66 28 20 73 74 72 6e 63 6d 70 28 67 . if( strncmp(g
6810: 2e 61 72 67 76 5b 32 5d 2c 22 64 65 6c 65 74 65 .argv[2],"delete
6820: 22 2c 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 ",n)==0 ){. i
6830: 66 28 20 67 2e 61 72 67 63 21 3d 35 20 29 7b 0a f( g.argc!=5 ){.
6840: 20 20 20 20 20 20 75 73 61 67 65 28 22 64 65 6c usage("del
6850: 65 74 65 20 50 41 47 45 4e 41 4d 45 22 29 3b 0a ete PAGENAME");.
6860: 20 20 20 20 7d 0a 20 20 20 20 66 6f 73 73 69 6c }. fossil
6870: 5f 66 61 74 61 6c 28 22 64 65 6c 65 74 65 20 6e _fatal("delete n
6880: 6f 74 20 79 65 74 20 69 6d 70 6c 65 6d 65 6e 74 ot yet implement
6890: 65 64 2e 22 29 3b 0a 20 20 7d 65 6c 73 65 0a 20 ed.");. }else.
68a0: 20 69 66 28 20 73 74 72 6e 63 6d 70 28 67 2e 61 if( strncmp(g.a
68b0: 72 67 76 5b 32 5d 2c 22 6c 69 73 74 22 2c 6e 29 rgv[2],"list",n)
68c0: 3d 3d 30 20 29 7b 0a 20 20 20 20 53 74 6d 74 20 ==0 ){. Stmt
68d0: 71 3b 0a 20 20 20 20 64 62 5f 70 72 65 70 61 72 q;. db_prepar
68e0: 65 28 26 71 2c 20 0a 20 20 20 20 20 20 22 53 45 e(&q, . "SE
68f0: 4c 45 43 54 20 73 75 62 73 74 72 28 74 61 67 6e LECT substr(tagn
6900: 61 6d 65 2c 20 36 29 20 46 52 4f 4d 20 74 61 67 ame, 6) FROM tag
6910: 20 57 48 45 52 45 20 74 61 67 6e 61 6d 65 20 47 WHERE tagname G
6920: 4c 4f 42 20 27 77 69 6b 69 2d 2a 27 22 0a 20 20 LOB 'wiki-*'".
6930: 20 20 20 20 22 20 4f 52 44 45 52 20 42 59 20 6c " ORDER BY l
6940: 6f 77 65 72 28 74 61 67 6e 61 6d 65 29 22 0a 20 ower(tagname)".
6950: 20 20 20 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 );. while(
6960: 20 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 db_step(&q)==SQ
6970: 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 LITE_ROW ){.
6980: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e const char *zN
6990: 61 6d 65 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f ame = db_column_
69a0: 74 65 78 74 28 26 71 2c 20 30 29 3b 0a 20 20 20 text(&q, 0);.
69b0: 20 20 20 70 72 69 6e 74 66 28 20 22 25 73 5c 6e printf( "%s\n
69c0: 22 2c 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 7d 0a ",zName);. }.
69d0: 20 20 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 db_finalize(
69e0: 26 71 29 3b 0a 20 20 7d 65 6c 73 65 0a 20 20 7b &q);. }else. {
69f0: 0a 20 20 20 20 67 6f 74 6f 20 77 69 6b 69 5f 63 . goto wiki_c
6a00: 6d 64 5f 75 73 61 67 65 3b 0a 20 20 7d 0a 20 20 md_usage;. }.
6a10: 72 65 74 75 72 6e 3b 0a 0a 77 69 6b 69 5f 63 6d return;..wiki_cm
6a20: 64 5f 75 73 61 67 65 3a 0a 20 20 75 73 61 67 65 d_usage:. usage
6a30: 28 22 65 78 70 6f 72 74 7c 63 72 65 61 74 65 7c ("export|create|
6a40: 63 6f 6d 6d 69 74 7c 6c 69 73 74 20 2e 2e 2e 22 commit|list ..."
6a50: 29 3b 0a 7d 0a );.}.