X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fwiki.c;h=47af67ec4170f276b06deb8cb6c30d14694c1c3b;hb=2125d9ebd1c4914fe6ec6e6051fbc8e8f24b8b8b;hp=0d94c7d854c3e84c5b62d6a7eaa1631c2fe74ad7;hpb=27bce336d4dde403225ec0764ab42ea0d4996c80;p=citadel.git
diff --git a/webcit/wiki.c b/webcit/wiki.c
index 0d94c7d85..47af67ec4 100644
--- a/webcit/wiki.c
+++ b/webcit/wiki.c
@@ -1,11 +1,19 @@
/*
- * $Id$
- *
* Functions pertaining to rooms with a wiki view
+ *
+ * Copyright (c) 2009-2012 by the citadel.org team
+ *
+ * This program is open source software. You can redistribute it and/or
+ * modify it under the terms of the GNU General Public License, version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*/
#include "webcit.h"
-#include "groupdav.h"
+#include "dav.h"
/*
* Convert a string to something suitable as a wiki index
@@ -31,31 +39,18 @@ void str_wiki_index(char *s)
/*
* Display a specific page from a wiki room
+ *
+ * "rev" may be set to an empty string to display the current version.
+ * "do_revert" may be set to nonzero to perform a reversion to the specified version.
*/
-void display_wiki_page_backend(const StrBuf *roomname, char *pagename)
+void display_wiki_page_backend(char *pagename, char *rev, int do_revert)
{
const StrBuf *Mime;
long msgnum = (-1L);
+ char buf[256];
- str_wiki_index(pagename);
-
- if (StrLength(roomname) > 0) {
-
- /* If we're not in the correct room, try going there. */
- if (strcasecmp(ChrPtr(roomname), ChrPtr(WC->wc_roomname))) {
- gotoroom(roomname);
- }
-
- /* If we're still not in the correct room, it doesn't exist. */
- if (strcasecmp(ChrPtr(roomname), ChrPtr(WC->wc_roomname))) {
- wc_printf(_("There is no room called '%s'."), ChrPtr(roomname));
- return;
- }
-
- }
-
- if (WC->wc_view != VIEW_WIKI) {
- wc_printf(_("'%s' is not a Wiki room."), ChrPtr(roomname));
+ if (WC->CurRoom.view != VIEW_WIKI) {
+ wc_printf(_("'%s' is not a Wiki room."), ChrPtr(WC->CurRoom.name) );
return;
}
@@ -63,14 +58,27 @@ void display_wiki_page_backend(const StrBuf *roomname, char *pagename)
strcpy(pagename, "home");
}
- /* Found it! Now read it. */
- msgnum = locate_message_by_uid(pagename);
+ str_wiki_index(pagename); /* convert index name to lowercase and numeric only */
+
+ if ((rev != NULL) && (strlen(rev) > 0)) {
+ /* read an older revision */
+ serv_printf("WIKI rev|%s|%s|%s", pagename, rev, (do_revert ? "revert" : "fetch") );
+ serv_getln(buf, sizeof buf);
+ if (buf[0] == '2') {
+ msgnum = extract_long(&buf[4], 0);
+ }
+ }
+ else {
+ /* read the current revision */
+ msgnum = locate_message_by_uid(pagename);
+ }
+
if (msgnum >= 0L) {
read_message(WC->WBuf, HKEY("view_message"), msgnum, NULL, &Mime);
return;
}
- wc_printf("
"
+ wc_printf("
"
"
" @@ -90,13 +98,16 @@ void display_wiki_page_backend(const StrBuf *roomname, char *pagename) */ void display_wiki_page(void) { - const StrBuf *roomname; char pagename[128]; + char rev[128]; + int do_revert = 0; output_headers(1, 1, 1, 0, 0, 0); - roomname = sbstr("room"); safestrncpy(pagename, bstr("page"), sizeof pagename); - display_wiki_page_backend(roomname, pagename); + str_wiki_index(pagename); + safestrncpy(rev, bstr("rev"), sizeof rev); + do_revert = atoi(bstr("revert")); + display_wiki_page_backend(pagename, rev, do_revert); wDumpContent(1); } @@ -106,30 +117,13 @@ void display_wiki_page(void) */ void tmplput_display_wiki_history(StrBuf *Target, WCTemplputParams *TP) { - const StrBuf *roomname; char pagename[128]; StrBuf *Buf; int row = 0; - roomname = sbstr("room"); safestrncpy(pagename, bstr("page"), sizeof pagename); str_wiki_index(pagename); - if (StrLength(roomname) > 0) { - - /* If we're not in the correct room, try going there. */ - if (strcasecmp(ChrPtr(roomname), ChrPtr(WC->wc_roomname))) { - gotoroom(roomname); - } - - /* If we're still not in the correct room, it doesn't exist. */ - if (strcasecmp(ChrPtr(roomname), ChrPtr(WC->wc_roomname))) { - wc_printf(_("There is no room called '%s'."), ChrPtr(roomname)); - return; - } - - } - serv_printf("WIKI history|%s", pagename); Buf = NewStrBuf(); StrBuf_ServGetln(Buf); @@ -141,25 +135,19 @@ void tmplput_display_wiki_history(StrBuf *Target, WCTemplputParams *TP) StrBuf *author = NewStrBuf(); StrBuf *node = NewStrBuf(); - wc_printf(" |