*All* <FORM> blocks now contain a nonce field, and the use of
[citadel.git] / webcit / notes.c
1 /*
2  * $Id$
3  */
4 /**
5  * \defgroup StickyNotes Functions which handle "sticky notes"
6  * \ingroup WebcitDisplayItems
7  */
8 /*@{*/
9 #include "webcit.h"
10 #include "groupdav.h"
11 #include "webserver.h"
12
13 /**
14  * \brief display sticky notes
15  * \param msgnum the citadel mesage number
16  */
17 void display_note(long msgnum)
18 {
19         char buf[SIZ];
20         char notetext[SIZ];
21         char display_notetext[SIZ];
22         char eid[128];
23         int in_text = 0;
24         int i;
25
26         wprintf("<IMG ALIGN=MIDDLE src=\"static/storenotes_48x.gif\">\n");
27
28         serv_printf("MSG0 %ld", msgnum);
29         serv_getln(buf, sizeof buf);
30         if (buf[0] != '1') {
31                 wprintf("%s<br />\n", &buf[4]);
32                 return;
33         }
34
35         strcpy(notetext, "");
36         strcpy(eid, "");
37         while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
38
39                 /** Fill the buffer */
40                 if ( (in_text) && (strlen(notetext) < SIZ-256) ) {
41                         strcat(notetext, buf);
42                 }
43
44                 if ( (!in_text) && (!strncasecmp(buf, "exti=", 5)) ) {
45                         safestrncpy(eid, &buf[5], sizeof eid);
46                 }
47
48                 if ( (!in_text) && (!strcasecmp(buf, "text")) ) {
49                         in_text = 1;
50                 }
51         }
52
53         /** Now sanitize the buffer */
54         for (i=0; i<strlen(notetext); ++i) {
55                 if (isspace(notetext[i])) notetext[i] = ' ';
56         }
57
58         /** Make it HTML-happy and print it. */
59         stresc(display_notetext, notetext, 0, 0);
60         if (strlen(eid) > 0) {
61                 wprintf("<span id=\"note%s\">%s</span><br />\n", eid, display_notetext);
62         }
63         else {
64                 wprintf("<span id=\"note%ld\">%s</span><br />\n", msgnum, display_notetext);
65         }
66
67         /** Offer in-place editing. */
68         if (strlen(eid) > 0) {
69                 wprintf("<script type=\"text/javascript\">"
70                         "new Ajax.InPlaceEditor('note%s', 'updatenote?nonce=%ld?eid=%s', {rows:5,cols:72});"
71                         "</script>\n",
72                         eid,
73                         WC->nonce,
74                         eid
75                 );
76         }
77 }
78
79
80 /**
81  * \brief  This gets called by the Ajax.InPlaceEditor when we save a note.
82  */
83 void updatenote(void)
84 {
85         char buf[SIZ];
86         char notetext[SIZ];
87         char display_notetext[SIZ];
88         long msgnum;
89         int in_text = 0;
90         int i;
91
92         serv_printf("ENT0 1||0|0||||||%s", bstr("eid"));
93         serv_getln(buf, sizeof buf);
94         if (buf[0] == '4') {
95                 text_to_server(bstr("value"));
96                 serv_puts("000");
97         }
98
99         begin_ajax_response();
100         msgnum = locate_message_by_uid(bstr("eid"));
101         if (msgnum >= 0L) {
102                 serv_printf("MSG0 %ld", msgnum);
103                 serv_getln(buf, sizeof buf);
104                 if (buf[0] == '1') {
105                         while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
106                 
107                                 /** Fill the buffer */
108                                 if ( (in_text) && (strlen(notetext) < SIZ-256) ) {
109                                         strcat(notetext, buf);
110                                 }
111                 
112                                 if ( (!in_text) && (!strcasecmp(buf, "text")) ) {
113                                         in_text = 1;
114                                 }
115                         }
116                         /** Now sanitize the buffer */
117                         for (i=0; i<strlen(notetext); ++i) {
118                                 if (isspace(notetext[i])) notetext[i] = ' ';
119                         }
120                 
121                         /** Make it HTML-happy and print it. */
122                         stresc(display_notetext, notetext, 0, 0);
123                         wprintf("%s\n", display_notetext);
124                 }
125         }
126         else {
127                 wprintf("%s", _("An error has occurred."));
128         }
129
130         end_ajax_response();
131 }
132
133
134
135 /*@}*/