X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fwiki.c;h=79ade49e2066fd1ab0be5ba2aef5bdd06b4b9a09;hb=8fa17e06dbbd9a2b4530011797ef7fb382ebb283;hp=f0287eb0667c028c35824e465e54b9488e533d87;hpb=090d68398dee252c7001c1f71d536b5859dfd0c6;p=citadel.git
diff --git a/webcit/wiki.c b/webcit/wiki.c
index f0287eb06..79ade49e2 100644
--- a/webcit/wiki.c
+++ b/webcit/wiki.c
@@ -1,7 +1,21 @@
/*
- * $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"
@@ -33,30 +47,32 @@ 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, char *rev)
+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;
}
@@ -65,14 +81,27 @@ void display_wiki_page_backend(const StrBuf *roomname, char *pagename, char *rev
strcpy(pagename, "home");
}
- /* Found it! Now read it. FIXME this is where we have to add the ability to read an old rev */
- msgnum = locate_message_by_uid(pagename);
+ /* Found it! Now read it. */
+
+ 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("
"
"
" @@ -95,12 +124,14 @@ 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); safestrncpy(rev, bstr("rev"), sizeof rev); - display_wiki_page_backend(roomname, pagename, rev); + do_revert = atoi(bstr("revert")); + display_wiki_page_backend(roomname, pagename, rev, do_revert); wDumpContent(1); } @@ -122,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; } @@ -145,25 +176,19 @@ void tmplput_display_wiki_history(StrBuf *Target, WCTemplputParams *TP) StrBuf *author = NewStrBuf(); StrBuf *node = NewStrBuf(); - wc_printf(" |