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 VALIGN=CENTER SRC=\"/static/vcalendar.gif\">"
57 "<FONT SIZE=+1 COLOR=\"FFFFFF\""
59 "</FONT></TD></TR></TABLE><BR>\n"
63 p = icalcomponent_get_first_property(vevent, ICAL_UID_PROPERTY);
65 escputs((char *)icalproperty_get_comment(p));
67 wprintf(" (FIXME remove this when done)<BR>\n");
69 wprintf("<FORM METHOD=\"POST\" ACTION=\"/save_event\">\n");
70 wprintf("<INPUT TYPE=\"hidden\" NAME=\"msgnum\" VALUE=\"%ld\">\n",
72 wprintf("<INPUT TYPE=\"hidden\" NAME=\"calview\" VALUE=\"%s\">\n",
74 wprintf("<INPUT TYPE=\"hidden\" NAME=\"year\" VALUE=\"%s\">\n",
76 wprintf("<INPUT TYPE=\"hidden\" NAME=\"month\" VALUE=\"%s\">\n",
78 wprintf("<INPUT TYPE=\"hidden\" NAME=\"day\" VALUE=\"%s\">\n",
81 /* Put it in a borderless table so it lines up nicely */
82 wprintf("<TABLE border=0 width=100%%>\n");
84 wprintf("<TR><TD><B>Summary</B></TD><TD>\n"
85 "<INPUT TYPE=\"text\" NAME=\"summary\" "
86 "MAXLENGTH=\"64\" SIZE=\"64\" VALUE=\"");
87 p = icalcomponent_get_first_property(vevent, ICAL_SUMMARY_PROPERTY);
89 escputs((char *)icalproperty_get_comment(p));
91 wprintf("\"></TD></TR>\n");
93 wprintf("<TR><TD><B>Location</B></TD><TD>\n"
94 "<INPUT TYPE=\"text\" NAME=\"location\" "
95 "MAXLENGTH=\"64\" SIZE=\"64\" VALUE=\"");
96 p = icalcomponent_get_first_property(vevent, ICAL_LOCATION_PROPERTY);
98 escputs((char *)icalproperty_get_comment(p));
100 wprintf("\"></TD></TR>\n");
102 wprintf("<TR><TD><B>Start</B></TD><TD>\n");
103 p = icalcomponent_get_first_property(vevent, ICAL_DTSTART_PROPERTY);
105 t = icalproperty_get_dtstart(p);
108 t = icaltime_from_timet(now, 0);
110 display_icaltimetype_as_webform(&t, "dtstart");
111 wprintf("</TD></TR>\n");
113 wprintf("<TR><TD><B>End</B></TD><TD>\n");
114 p = icalcomponent_get_first_property(vevent, ICAL_DTEND_PROPERTY);
116 t = icalproperty_get_dtend(p);
119 t = icaltime_from_timet(now, 0);
121 display_icaltimetype_as_webform(&t, "dtend");
122 wprintf("</TD></TR>\n");
124 wprintf("<TR><TD><B>Notes</B></TD><TD>\n"
125 "<TEXTAREA NAME=\"description\" wrap=soft "
126 "ROWS=10 COLS=80 WIDTH=80>\n"
128 p = icalcomponent_get_first_property(vevent, ICAL_DESCRIPTION_PROPERTY);
130 escputs((char *)icalproperty_get_comment(p));
132 wprintf("</TEXTAREA></TD></TR></TABLE>\n");
135 "<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Save\">"
137 "<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Delete\">\n"
139 "<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Cancel\">\n"
143 wprintf("</FORM>\n");
147 if (created_new_vevent) {
148 icalcomponent_free(vevent);
153 * Save an edited event
155 void save_individual_event(icalcomponent *supplied_vevent, long msgnum) {
157 int delete_existing = 0;
159 icalcomponent *vevent;
160 int created_new_vevent = 0;
162 if (supplied_vevent != NULL) {
163 vevent = supplied_vevent;
166 vevent = icalcomponent_new(ICAL_VEVENT_COMPONENT);
167 created_new_vevent = 1;
170 if (!strcasecmp(bstr("sc"), "Save")) {
172 /* Replace values in the component with ones from the form */
174 while (prop = icalcomponent_get_first_property(vevent,
175 ICAL_SUMMARY_PROPERTY), prop != NULL) {
176 icalcomponent_remove_property(vevent, prop);
178 icalcomponent_add_property(vevent,
179 icalproperty_new_summary(bstr("summary")));
181 while (prop = icalcomponent_get_first_property(vevent,
182 ICAL_LOCATION_PROPERTY), prop != NULL) {
183 icalcomponent_remove_property(vevent, prop);
185 icalcomponent_add_property(vevent,
186 icalproperty_new_location(bstr("location")));
188 while (prop = icalcomponent_get_first_property(vevent,
189 ICAL_DESCRIPTION_PROPERTY), prop != NULL) {
190 icalcomponent_remove_property(vevent, prop);
192 icalcomponent_add_property(vevent,
193 icalproperty_new_description(bstr("description")));
195 while (prop = icalcomponent_get_first_property(vevent,
196 ICAL_DTSTART_PROPERTY), prop != NULL) {
197 icalcomponent_remove_property(vevent, prop);
199 icalcomponent_add_property(vevent,
200 icalproperty_new_dtstart(
201 icaltime_from_webform("dtstart")
205 while (prop = icalcomponent_get_first_property(vevent,
206 ICAL_DUE_PROPERTY), prop != NULL) {
207 icalcomponent_remove_property(vevent, prop);
209 icalcomponent_add_property(vevent,
210 icalproperty_new_due(
211 icaltime_from_webform("due")
215 /* Give this event a UID if it doesn't have one. */
216 if (icalcomponent_get_first_property(vevent,
217 ICAL_UID_PROPERTY) == NULL) {
218 generate_new_uid(buf);
219 icalcomponent_add_property(vevent,
220 icalproperty_new_uid(buf)
224 /* Serialize it and save it to the message base */
225 serv_puts("ENT0 1|||4");
228 serv_puts("Content-type: text/calendar");
230 serv_puts(icalcomponent_as_ical_string(vevent));
237 * If the user clicked 'Delete' then delete it, period.
239 if (!strcasecmp(bstr("sc"), "Delete")) {
243 if ( (delete_existing) && (msgnum > 0L) ) {
244 serv_printf("DELE %ld", atol(bstr("msgnum")));
248 if (created_new_vevent) {
249 icalcomponent_free(vevent);
252 /* Go back to the event list */
257 #endif /* HAVE_ICAL_H */