X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fwiki.c;h=186bd00ca1b8f73355e9b264da6a04e57588b116;hb=86a1d535af8c52cc9536b03b707eed2d8674da31;hp=0f35b6150a2a8b00e8b689c138fbf613ec9bd034;hpb=1e32899153e9e52aaec1e651e0c33a563b8aaed8;p=citadel.git
diff --git a/webcit/wiki.c b/webcit/wiki.c
index 0f35b6150..186bd00ca 100644
--- a/webcit/wiki.c
+++ b/webcit/wiki.c
@@ -1,22 +1,22 @@
/*
- * $Id: $
- */
-/**
+ * Functions pertaining to rooms with a wiki view
+ *
+ * Copyright (c) 2009-2012 by the citadel.org team
*
- * \defgroup Wiki Wiki; Functions pertaining to rooms with a wiki view
- * \ingroup WebcitDisplayItems
+ * 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"
-
-/**
- * \brief Convert a string to something suitable as a wiki index
- *
- * \param s The string to be converted.
+/*
+ * Convert a string to something suitable as a wiki index
*/
void str_wiki_index(char *s)
{
@@ -37,74 +37,323 @@ void str_wiki_index(char *s)
}
}
-/**
- * \brief Display a specific page from a wiki room
+/*
+ * 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(void)
+void display_wiki_page_backend(char *pagename, char *rev, int do_revert)
{
- char roomname[128];
- char pagename[128];
- char errmsg[256];
+ const StrBuf *Mime;
long msgnum = (-1L);
+ char buf[256];
- safestrncpy(roomname, bstr("room"), sizeof roomname);
- safestrncpy(pagename, bstr("page"), sizeof pagename);
str_wiki_index(pagename);
- if (strlen(roomname) > 0) {
-
- /* If we're not in the correct room, try going there. */
- if (strcasecmp(roomname, WC->wc_roomname)) {
- gotoroom(roomname);
- }
-
- /* If we're still not in the correct room, it doesn't exist. */
- if (strcasecmp(roomname, WC->wc_roomname)) {
- snprintf(errmsg, sizeof errmsg,
- _("There is no room called '%s'."),
- roomname);
- convenience_page("FF0000", _("Error"), errmsg);
- return;
- }
-
- }
-
- if (WC->wc_view != VIEW_WIKI) {
- snprintf(errmsg, sizeof errmsg,
- _("'%s' is not a Wiki room."),
- roomname);
- convenience_page("FF0000", _("Error"), errmsg);
+ if (WC->CurRoom.view != VIEW_WIKI) {
+ wc_printf(_("'%s' is not a Wiki room."), ChrPtr(WC->CurRoom.name) );
return;
}
- if (strlen(pagename) == 0) {
+ if (IsEmptyStr(pagename)) {
strcpy(pagename, "home");
}
/* 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) {
- output_headers(1, 1, 1, 0, 0, 0);
- read_message(msgnum, 0, "");
- wDumpContent(1);
+ read_message(WC->WBuf, HKEY("view_message"), msgnum, NULL, &Mime);
return;
}
- output_headers(1, 1, 1, 0, 0, 0);
- wprintf("
"
+ wc_printf("
"
"
"
);
- wprintf(" "); - wprintf(_("There is no page called '%s' here."), pagename); - wprintf(" "); - wprintf(_("Select the 'Edit this page' link in the room banner " + wc_printf(" "); + wc_printf(_("There is no page called '%s' here."), pagename); + wc_printf(" "); + wc_printf(_("Select the 'Edit this page' link in the room banner " "if you would like to create this page.")); - wprintf(" "); - wprintf(" |
%s | ", _("Date")); + wc_printf("%s | ", _("Author")); + + while((StrBuf_ServGetln(Buf) >= 0) && strcmp(ChrPtr(Buf), "000")) { + + rev_date = extract_long(ChrPtr(Buf), 1); + webcit_fmt_date(rev_date_displayed, sizeof rev_date_displayed, rev_date, DATEFMT_FULL); + StrBufExtract_token(author, Buf, 2, '|'); + + wc_printf("||||
---|---|---|---|---|---|
%s | ", rev_date_displayed); + if (!strcasecmp(ChrPtr(node), (char *)WC->serv_info->serv_nodename)) { + escputs(ChrPtr(author)); + wc_printf(" @ "); + escputs(ChrPtr(node)); + } + else { + wc_printf(""); + escputs(ChrPtr(author)); + wc_printf(""); + } + wc_printf(" | "); + + if (row == 0) { + wc_printf("%s | ", + bstr("page"), + _("(show)") + ); + wc_printf("(%s) | ", _("Current version")); + } + + else { + wc_printf("%s | ", + bstr("page"), + ChrPtr(rev_uuid), + _("(show)") + ); + wc_printf("%s | ", + bstr("page"), + ChrPtr(rev_uuid), + _("(revert)") + ); + } + wc_printf("
%s | ", _("Page title")); + + while((StrBuf_ServGetln(Buf) >= 0) && strcmp(ChrPtr(Buf), "000")) { + StrBufExtract_token(pagetitle, Buf, 1, '|'); + + if (!bmstrcasestr((char *)ChrPtr(pagetitle), "_HISTORY_")) { /* no history pages */ + wc_printf("
---|
"); + escputs(ChrPtr(pagetitle)); + wc_printf(" | "); + wc_printf("