More work on the wiki view. Don't try to use it yet.
[citadel.git] / webcit / wiki.c
1 /*
2  * $Id:  $
3  */
4 /**
5  *
6  * \defgroup Wiki Wiki; Functions pertaining to rooms with a wiki view
7  *
8  */
9
10 /*@{*/
11 #include "webcit.h"
12
13
14
15 /** 
16  * \brief Convert a string to something suitable as a wiki index
17  *
18  * \param s The string to be converted.
19  */
20 void str_wiki_index(char *s)
21 {
22         int i;
23
24         if (s == NULL) return;
25
26         /* First remove all non-alphanumeric characters */
27         for (i=0; i<strlen(s); ++i) {
28                 if (!isalnum(s[i])) {
29                         strcpy(&s[i], &s[i+1]);
30                 }
31         }
32
33         /* Then make everything lower case */
34         for (i=0; i<strlen(s); ++i) {
35                 s[i] = tolower(s[i]);
36         }
37 }
38
39 /**
40  * \brief Display a specific page from a wiki room
41  */
42 void display_wiki_page(void)
43 {
44         char roomname[128];
45         char pagename[128];
46         char errmsg[256];
47         long msgnum = (-1L);
48
49         safestrncpy(roomname, bstr("room"), sizeof roomname);
50         safestrncpy(pagename, bstr("page"), sizeof pagename);
51         str_wiki_index(pagename);
52
53         /* If we're not in the correct room, try going there. */
54         if (strcasecmp(roomname, WC->wc_roomname)) {
55                 gotoroom(roomname);
56         }
57
58         /* If we're still not in the correct room, it doesn't exist. */
59         if (strcasecmp(roomname, WC->wc_roomname)) {
60                 snprintf(errmsg, sizeof errmsg,
61                         _("There is no room called '%s'."),
62                         roomname);
63                 convenience_page("FF0000", _("Error"), errmsg);
64                 return;
65         }
66
67         if (WC->wc_view != VIEW_WIKI) {
68                 snprintf(errmsg, sizeof errmsg,
69                         _("'%s' is not a Wiki room."),
70                         roomname);
71                 convenience_page("FF0000", _("Error"), errmsg);
72                 return;
73         }
74
75         if (strlen(pagename) == 0) {
76                 strcpy(pagename, "home");
77         }
78
79         /* Found it!  Now read it. */
80         msgnum = locate_message_by_uid(pagename);
81         if (msgnum >= 0L) {
82                 output_headers(1, 1, 1, 0, 0, 0);
83                 read_message(msgnum, 0, "");
84                 wDumpContent(1);
85                 return;
86         }
87
88         output_headers(1, 1, 1, 0, 0, 0);
89         wprintf("<br /><br />"
90                 "<div align=\"center\">"
91                 "<table border=\"0\" bgcolor=\"#ffffff\" cellpadding=\"10\">"
92                 "<tr><td align=\"center\">"
93         );
94         wprintf("<br><b>");
95         wprintf(_("There is no page called '%s' here."), pagename);
96         wprintf("</b><br><br>");
97         wprintf("<a href=\"display_enter?wikipage=%s\">", pagename);
98         wprintf(_("Click here if you would like to create this page."));
99         wprintf("</a>");
100         wprintf("<br><br>");
101         wprintf("</td></tr></table></div>\n");
102         wDumpContent(1);
103 }
104
105
106 /** @} */