X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fwiki.c;h=ef1a4441212dad909e6ee031dd6df87b11319364;hb=4b4dc864ede7c5d8d956febe4a0afb422b78e7c4;hp=0d94c7d854c3e84c5b62d6a7eaa1631c2fe74ad7;hpb=27bce336d4dde403225ec0764ab42ea0d4996c80;p=citadel.git
diff --git a/webcit/wiki.c b/webcit/wiki.c
index 0d94c7d85..ef1a44412 100644
--- a/webcit/wiki.c
+++ b/webcit/wiki.c
@@ -1,11 +1,25 @@
/*
- * $Id$
- *
* Functions pertaining to rooms with a wiki view
+ *
+ * Copyright (c) 2009-2011 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 as
+ * published by the Free Software Foundation; either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "webcit.h"
-#include "groupdav.h"
+#include "dav.h"
/*
* Convert a string to something suitable as a wiki index
@@ -31,30 +45,34 @@ 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(const StrBuf *roomname, 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))) {
+ if (strcasecmp(ChrPtr(roomname), ChrPtr(WC->CurRoom.name))) {
gotoroom(roomname);
}
/* If we're still not in the correct room, it doesn't exist. */
- if (strcasecmp(ChrPtr(roomname), ChrPtr(WC->wc_roomname))) {
+ if (strcasecmp(ChrPtr(roomname), ChrPtr(WC->CurRoom.name))) {
wc_printf(_("There is no room called '%s'."), ChrPtr(roomname));
return;
}
}
- if (WC->wc_view != VIEW_WIKI) {
+ if (WC->CurRoom.view != VIEW_WIKI) {
wc_printf(_("'%s' is not a Wiki room."), ChrPtr(roomname));
return;
}
@@ -64,13 +82,26 @@ void display_wiki_page_backend(const StrBuf *roomname, char *pagename)
}
/* Found it! Now read it. */
- msgnum = locate_message_by_uid(pagename);
+
+ 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("
"
"
" @@ -92,11 +123,15 @@ 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); + safestrncpy(rev, bstr("rev"), sizeof rev); + do_revert = atoi(bstr("revert")); + display_wiki_page_backend(roomname, pagename, rev, do_revert); wDumpContent(1); } @@ -118,12 +153,12 @@ void tmplput_display_wiki_history(StrBuf *Target, WCTemplputParams *TP) if (StrLength(roomname) > 0) { /* If we're not in the correct room, try going there. */ - if (strcasecmp(ChrPtr(roomname), ChrPtr(WC->wc_roomname))) { + if (strcasecmp(ChrPtr(roomname), ChrPtr(WC->CurRoom.name))) { gotoroom(roomname); } /* If we're still not in the correct room, it doesn't exist. */ - if (strcasecmp(ChrPtr(roomname), ChrPtr(WC->wc_roomname))) { + if (strcasecmp(ChrPtr(roomname), ChrPtr(WC->CurRoom.name))) { wc_printf(_("There is no room called '%s'."), ChrPtr(roomname)); return; } @@ -141,25 +176,19 @@ void tmplput_display_wiki_history(StrBuf *Target, WCTemplputParams *TP) StrBuf *author = NewStrBuf(); StrBuf *node = NewStrBuf(); - wc_printf(" |