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 "<IMG ALIGN=CENTER SRC=\"/static/vcalendar.gif\">"
57 "<FONT SIZE=+1 COLOR=\"FFFFFF\""
59 "</FONT></TD></TR></TABLE><BR>\n"
62 /************************************************************
63 * Uncomment this to see the UID in calendar events for debugging
65 p = icalcomponent_get_first_property(vevent, ICAL_UID_PROPERTY);
67 escputs((char *)icalproperty_get_comment(p));
69 *************************************************************/
71 wprintf("<FORM METHOD=\"POST\" ACTION=\"/save_event\">\n");
72 wprintf("<INPUT TYPE=\"hidden\" NAME=\"msgnum\" VALUE=\"%ld\">\n",
74 wprintf("<INPUT TYPE=\"hidden\" NAME=\"calview\" VALUE=\"%s\">\n",
76 wprintf("<INPUT TYPE=\"hidden\" NAME=\"year\" VALUE=\"%s\">\n",
78 wprintf("<INPUT TYPE=\"hidden\" NAME=\"month\" VALUE=\"%s\">\n",
80 wprintf("<INPUT TYPE=\"hidden\" NAME=\"day\" VALUE=\"%s\">\n",
83 /* Put it in a borderless table so it lines up nicely */
84 wprintf("<TABLE border=0 width=100%%>\n");
86 wprintf("<TR><TD><B>Summary</B></TD><TD>\n"
87 "<INPUT TYPE=\"text\" NAME=\"summary\" "
88 "MAXLENGTH=\"64\" SIZE=\"64\" VALUE=\"");
89 p = icalcomponent_get_first_property(vevent, ICAL_SUMMARY_PROPERTY);
91 escputs((char *)icalproperty_get_comment(p));
93 wprintf("\"></TD></TR>\n");
95 wprintf("<TR><TD><B>Location</B></TD><TD>\n"
96 "<INPUT TYPE=\"text\" NAME=\"location\" "
97 "MAXLENGTH=\"64\" SIZE=\"64\" VALUE=\"");
98 p = icalcomponent_get_first_property(vevent, ICAL_LOCATION_PROPERTY);
100 escputs((char *)icalproperty_get_comment(p));
102 wprintf("\"></TD></TR>\n");
104 wprintf("<TR><TD><B>Start</B></TD><TD>\n");
105 p = icalcomponent_get_first_property(vevent, ICAL_DTSTART_PROPERTY);
107 t = icalproperty_get_dtstart(p);
110 t = icaltime_from_timet(now, 0);
112 display_icaltimetype_as_webform(&t, "dtstart");
113 wprintf("</TD></TR>\n");
115 wprintf("<TR><TD><B>End</B></TD><TD>\n");
116 p = icalcomponent_get_first_property(vevent, ICAL_DTEND_PROPERTY);
118 t = icalproperty_get_dtend(p);
121 t = icaltime_from_timet(now, 0);
123 display_icaltimetype_as_webform(&t, "dtend");
124 wprintf("</TD></TR>\n");
126 wprintf("<TR><TD><B>Notes</B></TD><TD>\n"
127 "<TEXTAREA NAME=\"description\" wrap=soft "
128 "ROWS=10 COLS=80 WIDTH=80>\n"
130 p = icalcomponent_get_first_property(vevent, ICAL_DESCRIPTION_PROPERTY);
132 escputs((char *)icalproperty_get_comment(p));
134 wprintf("</TEXTAREA></TD></TR></TABLE>\n");
137 "<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Save\">"
139 "<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Delete\">\n"
141 "<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Cancel\">\n"
145 wprintf("</FORM>\n");
149 if (created_new_vevent) {
150 icalcomponent_free(vevent);
155 * Save an edited event
157 void save_individual_event(icalcomponent *supplied_vevent, long msgnum) {
159 int delete_existing = 0;
161 icalcomponent *vevent;
162 int created_new_vevent = 0;
163 int all_day_event = 0;
164 struct icaltimetype event_start;
166 if (supplied_vevent != NULL) {
167 vevent = supplied_vevent;
170 vevent = icalcomponent_new(ICAL_VEVENT_COMPONENT);
171 created_new_vevent = 1;
174 if (!strcasecmp(bstr("sc"), "Save")) {
176 /* Replace values in the component with ones from the form */
178 while (prop = icalcomponent_get_first_property(vevent,
179 ICAL_SUMMARY_PROPERTY), prop != NULL) {
180 icalcomponent_remove_property(vevent, prop);
182 icalcomponent_add_property(vevent,
183 icalproperty_new_summary(bstr("summary")));
185 while (prop = icalcomponent_get_first_property(vevent,
186 ICAL_LOCATION_PROPERTY), prop != NULL) {
187 icalcomponent_remove_property(vevent, prop);
189 icalcomponent_add_property(vevent,
190 icalproperty_new_location(bstr("location")));
192 while (prop = icalcomponent_get_first_property(vevent,
193 ICAL_DESCRIPTION_PROPERTY), prop != NULL) {
194 icalcomponent_remove_property(vevent, prop);
196 icalcomponent_add_property(vevent,
197 icalproperty_new_description(bstr("description")));
199 while (prop = icalcomponent_get_first_property(vevent,
200 ICAL_DTSTART_PROPERTY), prop != NULL) {
201 icalcomponent_remove_property(vevent, prop);
203 event_start = icaltime_from_webform("dtstart");
204 if (event_start.is_date) {
205 lprintf(9, "*** all day event ***\n");
208 icalcomponent_add_property(vevent,
209 icalproperty_new_dtstart(event_start)
212 while (prop = icalcomponent_get_first_property(vevent,
213 ICAL_DTEND_PROPERTY), prop != NULL) {
214 icalcomponent_remove_property(vevent, prop);
216 while (prop = icalcomponent_get_first_property(vevent,
217 ICAL_DURATION_PROPERTY), prop != NULL) {
218 icalcomponent_remove_property(vevent, prop);
220 if (all_day_event == 0) {
221 icalcomponent_add_property(vevent,
222 icalproperty_new_dtend(
223 icaltime_from_webform("dtend")
228 /* Give this event a UID if it doesn't have one. */
229 if (icalcomponent_get_first_property(vevent,
230 ICAL_UID_PROPERTY) == NULL) {
231 generate_new_uid(buf);
232 icalcomponent_add_property(vevent,
233 icalproperty_new_uid(buf)
237 /* Serialize it and save it to the message base */
238 serv_puts("ENT0 1|||4");
241 serv_puts("Content-type: text/calendar");
243 serv_puts(icalcomponent_as_ical_string(vevent));
250 * If the user clicked 'Delete' then delete it, period.
252 if (!strcasecmp(bstr("sc"), "Delete")) {
256 if ( (delete_existing) && (msgnum > 0L) ) {
257 serv_printf("DELE %ld", atol(bstr("msgnum")));
261 if (created_new_vevent) {
262 icalcomponent_free(vevent);
265 /* Go back to the event list */
270 #endif /* HAVE_ICAL_H */