4 * Editing calendar events.
14 #include <sys/types.h>
16 #include <sys/socket.h>
18 #include <netinet/in.h>
28 #include "webserver.h"
35 * Display an event by itself (for editing)
37 void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum) {
38 icalcomponent *vevent;
40 struct icaltimetype t;
42 int created_new_vevent = 0;
46 if (supplied_vevent != NULL) {
47 vevent = supplied_vevent;
50 vevent = icalcomponent_new(ICAL_VEVENT_COMPONENT);
51 created_new_vevent = 1;
55 wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=007700><TR><TD>"
56 "<FONT SIZE=+1 COLOR=\"FFFFFF\""
58 "</FONT></TD></TR></TABLE><BR>\n"
61 wprintf("<FORM METHOD=\"POST\" ACTION=\"/save_event\">\n");
62 wprintf("<INPUT TYPE=\"hidden\" NAME=\"msgnum\" VALUE=\"%ld\">\n",
64 wprintf("<INPUT TYPE=\"hidden\" NAME=\"calview\" VALUE=\"%s\">\n",
66 wprintf("<INPUT TYPE=\"hidden\" NAME=\"year\" VALUE=\"%s\">\n",
68 wprintf("<INPUT TYPE=\"hidden\" NAME=\"month\" VALUE=\"%s\">\n",
70 wprintf("<INPUT TYPE=\"hidden\" NAME=\"day\" VALUE=\"%s\">\n",
74 /* Put it in a borderless table so it lines up nicely */
75 wprintf("<TABLE border=0 width=100%%>\n");
77 wprintf("<TR><TD><B>Summary</B></TD><TD>\n"
78 "<INPUT TYPE=\"text\" NAME=\"summary\" "
79 "MAXLENGTH=\"64\" SIZE=\"64\" VALUE=\"");
80 p = icalcomponent_get_first_property(vevent, ICAL_SUMMARY_PROPERTY);
82 escputs((char *)icalproperty_get_comment(p));
84 wprintf("\"></TD></TR>\n");
86 wprintf("<TR><TD><B>Start</B></TD><TD>\n");
87 p = icalcomponent_get_first_property(vevent, ICAL_DTSTART_PROPERTY);
89 t = icalproperty_get_dtstart(p);
92 t = icaltime_from_timet(now, 0);
94 display_icaltimetype_as_webform(&t, "dtstart");
95 wprintf("</TD></TR>\n");
97 wprintf("<TR><TD><B>End</B></TD><TD>\n");
98 p = icalcomponent_get_first_property(vevent, ICAL_DTEND_PROPERTY);
100 t = icalproperty_get_dtend(p);
103 t = icaltime_from_timet(now, 0);
105 display_icaltimetype_as_webform(&t, "dtend");
106 wprintf("</TD></TR>\n");
108 wprintf("<TR><TD><B>Notes</B></TD><TD>\n"
109 "<TEXTAREA NAME=\"description\" wrap=soft "
110 "ROWS=10 COLS=80 WIDTH=80>\n"
112 p = icalcomponent_get_first_property(vevent, ICAL_DESCRIPTION_PROPERTY);
114 escputs((char *)icalproperty_get_comment(p));
116 wprintf("</TEXTAREA></TD></TR></TABLE>\n");
119 "<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Save\">"
121 "<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Delete\">\n"
123 "<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Cancel\">\n"
127 wprintf("</FORM>\n");
131 if (created_new_vevent) {
132 icalcomponent_free(vevent);
137 * Save an edited event
139 void save_individual_event(icalcomponent *supplied_vevent, long msgnum) {
141 int delete_existing = 0;
143 icalcomponent *vevent;
144 int created_new_vevent = 0;
146 if (supplied_vevent != NULL) {
147 vevent = supplied_vevent;
150 vevent = icalcomponent_new(ICAL_VEVENT_COMPONENT);
151 created_new_vevent = 1;
154 if (!strcasecmp(bstr("sc"), "Save")) {
156 /* Replace values in the component with ones from the form */
158 while (prop = icalcomponent_get_first_property(vevent,
159 ICAL_SUMMARY_PROPERTY), prop != NULL) {
160 icalcomponent_remove_property(vevent, prop);
162 icalcomponent_add_property(vevent,
163 icalproperty_new_summary(bstr("summary")));
165 while (prop = icalcomponent_get_first_property(vevent,
166 ICAL_DESCRIPTION_PROPERTY), prop != NULL) {
167 icalcomponent_remove_property(vevent, prop);
169 icalcomponent_add_property(vevent,
170 icalproperty_new_description(bstr("description")));
172 while (prop = icalcomponent_get_first_property(vevent,
173 ICAL_DTSTART_PROPERTY), prop != NULL) {
174 icalcomponent_remove_property(vevent, prop);
176 icalcomponent_add_property(vevent,
177 icalproperty_new_dtstart(
178 icaltime_from_webform("dtstart")
182 while (prop = icalcomponent_get_first_property(vevent,
183 ICAL_DUE_PROPERTY), prop != NULL) {
184 icalcomponent_remove_property(vevent, prop);
186 icalcomponent_add_property(vevent,
187 icalproperty_new_due(
188 icaltime_from_webform("due")
192 /* Serialize it and save it to the message base */
193 serv_puts("ENT0 1|||4");
196 serv_puts("Content-type: text/calendar");
198 serv_puts(icalcomponent_as_ical_string(vevent));
205 * If the user clicked 'Delete' then delete it, period.
207 if (!strcasecmp(bstr("sc"), "Delete")) {
211 if ( (delete_existing) && (msgnum > 0L) ) {
212 serv_printf("DELE %ld", atol(bstr("msgnum")));
216 if (created_new_vevent) {
217 icalcomponent_free(vevent);
220 /* Go back to the event list */
225 #endif /* HAVE_ICAL_H */