]> code.citadel.org Git - citadel.git/blobdiff - webcit/wiki.c
* wiki page list
[citadel.git] / webcit / wiki.c
index d42802a8eb3331af0f8d97e5e2a0b139f3ed91b5..b7b03c1a0363e9885443263456f9d0b89a0be7b2 100644 (file)
@@ -249,6 +249,72 @@ void display_wiki_history(void)
 }
 
 
+/*
+ * Display a list of all pages in a Wiki room (template callback)
+ */
+void tmplput_display_wiki_pagelist(StrBuf *Target, WCTemplputParams *TP)
+{
+       const StrBuf *roomname;
+       StrBuf *Buf;
+       int row = 0;
+
+       roomname = sbstr("room");
+       if (StrLength(roomname) > 0) {
+               /* If we're not in the correct room, try going there. */
+               if (strcasecmp(ChrPtr(roomname), ChrPtr(WC->wc_roomname))) {
+                       gotoroom(roomname);
+               }
+       
+               /* If we're still not in the correct room, it doesn't exist. */
+               if (strcasecmp(ChrPtr(roomname), ChrPtr(WC->wc_roomname))) {
+                       wc_printf(_("There is no room called '%s'."), ChrPtr(roomname));
+                       return;
+               }
+       }
+
+       serv_printf("MSGS ALL|||4");
+       Buf = NewStrBuf();
+       StrBuf_ServGetln(Buf);
+       if (GetServerStatus(Buf, NULL) == 1) {
+               StrBuf *pagetitle = NewStrBuf();
+
+               wc_printf("<div class=\"fix_scrollbar_bug\">"
+                       "<table class=\"wiki_history_background\">"     /* FIXME make its own class */
+               );
+
+               wc_printf("<th>%s</th>", _("Page title"));
+
+               while(StrBuf_ServGetln(Buf), strcmp(ChrPtr(Buf), "000")) {
+                       StrBufExtract_token(pagetitle, Buf, 1, '|');
+
+                       if (!bmstrcasestr((char *)ChrPtr(pagetitle), "_HISTORY_")) {    /* no history pages */
+                               wc_printf("<tr bgcolor=\"%s\">", ((row%2) ? "#FFFFFF" : "#DDDDDD"));
+                               wc_printf("<td>");
+                               escputs(ChrPtr(pagetitle));             /* FIXME make it linkable */
+                               wc_printf("</td>");
+                               wc_printf("</tr>\n");
+                               ++row;
+                       }
+               }
+               wc_printf("</table>\n");
+               FreeStrBuf(&pagetitle);
+       }
+
+       FreeStrBuf(&Buf);
+}
+
+
+/*
+ * Display a list of all pages in a Wiki room
+ */
+void display_wiki_pagelist(void)
+{
+       output_headers(1, 1, 1, 0, 0, 0);
+       do_template("wiki_pagelist", NULL);
+       wDumpContent(1);
+}
+
+
 int wiki_Cleanup(void **ViewSpecific)
 {
        char pagename[5];
@@ -273,5 +339,7 @@ InitModule_WIKI
 
        WebcitAddUrlHandler(HKEY("wiki"), "", 0, display_wiki_page, 0);
        WebcitAddUrlHandler(HKEY("wiki_history"), "", 0, display_wiki_history, 0);
+       WebcitAddUrlHandler(HKEY("wiki_pagelist"), "", 0, display_wiki_pagelist, 0);
        RegisterNamespace("WIKI:DISPLAYHISTORY", 0, 0, tmplput_display_wiki_history, NULL, CTX_NONE);
+       RegisterNamespace("WIKI:DISPLAYPAGELIST", 0, 0, tmplput_display_wiki_pagelist, NULL, CTX_NONE);
 }