X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fwiki.c;h=c5bb3086c7ba8c76db3e9c7fe9b086a63d262f26;hb=e935238cffe442d3fa0b530774bc4b3dab934bf7;hp=0d94c7d854c3e84c5b62d6a7eaa1631c2fe74ad7;hpb=27bce336d4dde403225ec0764ab42ea0d4996c80;p=citadel.git diff --git a/webcit/wiki.c b/webcit/wiki.c index 0d94c7d85..c5bb3086c 100644 --- a/webcit/wiki.c +++ b/webcit/wiki.c @@ -1,6 +1,4 @@ /* - * $Id$ - * * Functions pertaining to rooms with a wiki view */ @@ -31,30 +29,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,7 +66,20 @@ 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; @@ -92,11 +107,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 +137,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 +160,19 @@ void tmplput_display_wiki_history(StrBuf *Target, WCTemplputParams *TP) StrBuf *author = NewStrBuf(); StrBuf *node = NewStrBuf(); - wc_printf("