From fd8ecfa1047b4ddd5cfaf71abe6f611f8c987d19 Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Thu, 8 Oct 2009 03:29:46 +0000 Subject: [PATCH] * When entering a wiki room, display the wiki home page using the view render API instead of a redirect. --- webcit/messages.c | 12 ++++++++--- webcit/roomops.c | 3 +++ webcit/wiki.c | 55 +++++++++++++++++++++++------------------------ 3 files changed, 39 insertions(+), 31 deletions(-) diff --git a/webcit/messages.c b/webcit/messages.c index 29eeef64f..8ca8a3126 100644 --- a/webcit/messages.c +++ b/webcit/messages.c @@ -759,7 +759,7 @@ void readloop(long oper) void *vMsg; message_summary *Msg; char cmd[256] = ""; - int i; + int i, r; wcsession *WCC = WC; HashPos *at; const char *HashKey; @@ -790,11 +790,17 @@ void readloop(long oper) jsonMessageListHdr(); } - switch(ViewMsg->GetParamsGetServerCall( + if (ViewMsg->GetParamsGetServerCall != NULL) { + r = ViewMsg->GetParamsGetServerCall( &Stat, &ViewSpecific, oper, - cmd, sizeof(cmd))) + cmd, sizeof(cmd) + ); + } else { + r = 0; + } + switch(r) { case 400: case 404: diff --git a/webcit/roomops.c b/webcit/roomops.c index 0c60a04b0..f40d9cf99 100644 --- a/webcit/roomops.c +++ b/webcit/roomops.c @@ -650,6 +650,9 @@ void embed_room_banner(char *got, int navbar_style) { break; case VIEW_WIKI: safestrncpy(buf, bstr("page"), sizeof buf); + if (IsEmptyStr(buf)) { + safestrncpy(buf, "home", sizeof buf); + } str_wiki_index(buf); wprintf( "
  • " diff --git a/webcit/wiki.c b/webcit/wiki.c index adc3fb868..b60d66d5b 100644 --- a/webcit/wiki.c +++ b/webcit/wiki.c @@ -32,16 +32,11 @@ void str_wiki_index(char *s) /* * Display a specific page from a wiki room */ -void display_wiki_page(void) +void display_wiki_page_backend(const StrBuf *roomname, char *pagename) { const StrBuf *Mime; - const StrBuf *roomname; - char pagename[128]; - char errmsg[256]; long msgnum = (-1L); - roomname = sbstr("room"); - safestrncpy(pagename, bstr("page"), sizeof pagename); str_wiki_index(pagename); if (StrLength(roomname) > 0) { @@ -53,20 +48,14 @@ void display_wiki_page(void) /* If we're still not in the correct room, it doesn't exist. */ if (strcasecmp(ChrPtr(roomname), ChrPtr(WC->wc_roomname))) { - snprintf(errmsg, sizeof errmsg, - _("There is no room called '%s'."), - ChrPtr(roomname)); - convenience_page("FF0000", _("Error"), errmsg); + wprintf(_("There is no room called '%s'."), ChrPtr(roomname)); return; } } if (WC->wc_view != VIEW_WIKI) { - snprintf(errmsg, sizeof errmsg, - _("'%s' is not a Wiki room."), - ChrPtr(roomname)); - convenience_page("FF0000", _("Error"), errmsg); + wprintf(_("'%s' is not a Wiki room."), ChrPtr(roomname)); return; } @@ -77,13 +66,10 @@ void display_wiki_page(void) /* Found it! Now read it. */ msgnum = locate_message_by_uid(pagename); if (msgnum >= 0L) { - output_headers(1, 1, 1, 0, 0, 0); read_message(WC->WBuf, HKEY("view_message"), msgnum, NULL, &Mime); - wDumpContent(1); return; } - output_headers(1, 1, 1, 0, 0, 0); wprintf("

    " "
    " "" @@ -96,19 +82,32 @@ void display_wiki_page(void) "if you would like to create this page.")); wprintf("

    "); wprintf("
    \n"); +} + + +/* + * Display a specific page from a wiki room + */ +void display_wiki_page(void) +{ + const StrBuf *roomname; + char pagename[128]; + + output_headers(1, 1, 1, 0, 0, 0); + roomname = sbstr("room"); + safestrncpy(pagename, bstr("page"), sizeof pagename); + display_wiki_page_backend(roomname, pagename); wDumpContent(1); } -int wiki_GetParamsGetServerCall(SharedMessageStatus *Stat, - void **ViewSpecific, - long oper, - char *cmd, - long len) + +int wiki_Cleanup(void **ViewSpecific) { - char buf[SIZ]; - sprintf(buf, "wiki?room=%s?page=home", ChrPtr(WC->wc_roomname)); - http_redirect(buf); - return 300; + char pagename[5]; + safestrncpy(pagename, "home", sizeof pagename); + display_wiki_page_backend(WC->wc_roomname, pagename); + wDumpContent(1); + return 0; } void @@ -117,11 +116,11 @@ InitModule_WIKI { RegisterReadLoopHandlerset( VIEW_WIKI, - wiki_GetParamsGetServerCall, NULL, NULL, NULL, - NULL + NULL, + wiki_Cleanup ); WebcitAddUrlHandler(HKEY("wiki"), display_wiki_page, 0); -- 2.30.2