4 * Functions pertaining to rooms with a wiki view
11 * Convert a string to something suitable as a wiki index
13 void str_wiki_index(char *s)
17 if (s == NULL) return;
19 /* First remove all non-alphanumeric characters */
20 for (i=0; i<strlen(s); ++i) {
22 strcpy(&s[i], &s[i+1]);
26 /* Then make everything lower case */
27 for (i=0; i<strlen(s); ++i) {
33 * Display a specific page from a wiki room
35 void display_wiki_page(void)
38 const StrBuf *roomname;
43 roomname = sbstr("room");
44 safestrncpy(pagename, bstr("page"), sizeof pagename);
45 str_wiki_index(pagename);
47 if (StrLength(roomname) > 0) {
49 /* If we're not in the correct room, try going there. */
50 if (strcasecmp(ChrPtr(roomname), ChrPtr(WC->wc_roomname))) {
54 /* If we're still not in the correct room, it doesn't exist. */
55 if (strcasecmp(ChrPtr(roomname), ChrPtr(WC->wc_roomname))) {
56 snprintf(errmsg, sizeof errmsg,
57 _("There is no room called '%s'."),
59 convenience_page("FF0000", _("Error"), errmsg);
65 if (WC->wc_view != VIEW_WIKI) {
66 snprintf(errmsg, sizeof errmsg,
67 _("'%s' is not a Wiki room."),
69 convenience_page("FF0000", _("Error"), errmsg);
73 if (IsEmptyStr(pagename)) {
74 strcpy(pagename, "home");
77 /* Found it! Now read it. */
78 msgnum = locate_message_by_uid(pagename);
80 output_headers(1, 1, 1, 0, 0, 0);
81 read_message(WC->WBuf, HKEY("view_message"), msgnum, NULL, &Mime);
86 output_headers(1, 1, 1, 0, 0, 0);
87 wprintf("<br /><br />"
88 "<div align=\"center\">"
89 "<table border=\"0\" bgcolor=\"#ffffff\" cellpadding=\"10\">"
90 "<tr><td align=\"center\">"
93 wprintf(_("There is no page called '%s' here."), pagename);
94 wprintf("</b><br><br>");
95 wprintf(_("Select the 'Edit this page' link in the room banner "
96 "if you would like to create this page."));
98 wprintf("</td></tr></table></div>\n");
102 int wiki_GetParamsGetServerCall(SharedMessageStatus *Stat,
109 sprintf(buf, "wiki?room=%s?page=home", ChrPtr(WC->wc_roomname));
118 RegisterReadLoopHandlerset(
120 wiki_GetParamsGetServerCall,
127 WebcitAddUrlHandler(HKEY("wiki"), display_wiki_page, 0);