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"
62 p = icalcomponent_get_first_property(vevent, ICAL_UID_PROPERTY);
64 escputs((char *)icalproperty_get_comment(p));
66 wprintf(" (FIXME remove this when done)<BR>\n");
68 wprintf("<FORM METHOD=\"POST\" ACTION=\"/save_event\">\n");
69 wprintf("<INPUT TYPE=\"hidden\" NAME=\"msgnum\" VALUE=\"%ld\">\n",
71 wprintf("<INPUT TYPE=\"hidden\" NAME=\"calview\" VALUE=\"%s\">\n",
73 wprintf("<INPUT TYPE=\"hidden\" NAME=\"year\" VALUE=\"%s\">\n",
75 wprintf("<INPUT TYPE=\"hidden\" NAME=\"month\" VALUE=\"%s\">\n",
77 wprintf("<INPUT TYPE=\"hidden\" NAME=\"day\" VALUE=\"%s\">\n",
80 /* Put it in a borderless table so it lines up nicely */
81 wprintf("<TABLE border=0 width=100%%>\n");
83 wprintf("<TR><TD><B>Summary</B></TD><TD>\n"
84 "<INPUT TYPE=\"text\" NAME=\"summary\" "
85 "MAXLENGTH=\"64\" SIZE=\"64\" VALUE=\"");
86 p = icalcomponent_get_first_property(vevent, ICAL_SUMMARY_PROPERTY);
88 escputs((char *)icalproperty_get_comment(p));
90 wprintf("\"></TD></TR>\n");
92 wprintf("<TR><TD><B>Location</B></TD><TD>\n"
93 "<INPUT TYPE=\"text\" NAME=\"location\" "
94 "MAXLENGTH=\"64\" SIZE=\"64\" VALUE=\"");
95 p = icalcomponent_get_first_property(vevent, ICAL_LOCATION_PROPERTY);
97 escputs((char *)icalproperty_get_comment(p));
99 wprintf("\"></TD></TR>\n");
101 wprintf("<TR><TD><B>Start</B></TD><TD>\n");
102 p = icalcomponent_get_first_property(vevent, ICAL_DTSTART_PROPERTY);
104 t = icalproperty_get_dtstart(p);
107 t = icaltime_from_timet(now, 0);
109 display_icaltimetype_as_webform(&t, "dtstart");
110 wprintf("</TD></TR>\n");
112 wprintf("<TR><TD><B>End</B></TD><TD>\n");
113 p = icalcomponent_get_first_property(vevent, ICAL_DTEND_PROPERTY);
115 t = icalproperty_get_dtend(p);
118 t = icaltime_from_timet(now, 0);
120 display_icaltimetype_as_webform(&t, "dtend");
121 wprintf("</TD></TR>\n");
123 wprintf("<TR><TD><B>Notes</B></TD><TD>\n"
124 "<TEXTAREA NAME=\"description\" wrap=soft "
125 "ROWS=10 COLS=80 WIDTH=80>\n"
127 p = icalcomponent_get_first_property(vevent, ICAL_DESCRIPTION_PROPERTY);
129 escputs((char *)icalproperty_get_comment(p));
131 wprintf("</TEXTAREA></TD></TR></TABLE>\n");
134 "<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Save\">"
136 "<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Delete\">\n"
138 "<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Cancel\">\n"
142 wprintf("</FORM>\n");
146 if (created_new_vevent) {
147 icalcomponent_free(vevent);
152 * Save an edited event
154 void save_individual_event(icalcomponent *supplied_vevent, long msgnum) {
156 int delete_existing = 0;
158 icalcomponent *vevent;
159 int created_new_vevent = 0;
161 if (supplied_vevent != NULL) {
162 vevent = supplied_vevent;
165 vevent = icalcomponent_new(ICAL_VEVENT_COMPONENT);
166 created_new_vevent = 1;
169 if (!strcasecmp(bstr("sc"), "Save")) {
171 /* Replace values in the component with ones from the form */
173 while (prop = icalcomponent_get_first_property(vevent,
174 ICAL_SUMMARY_PROPERTY), prop != NULL) {
175 icalcomponent_remove_property(vevent, prop);
177 icalcomponent_add_property(vevent,
178 icalproperty_new_summary(bstr("summary")));
180 while (prop = icalcomponent_get_first_property(vevent,
181 ICAL_LOCATION_PROPERTY), prop != NULL) {
182 icalcomponent_remove_property(vevent, prop);
184 icalcomponent_add_property(vevent,
185 icalproperty_new_location(bstr("location")));
187 while (prop = icalcomponent_get_first_property(vevent,
188 ICAL_DESCRIPTION_PROPERTY), prop != NULL) {
189 icalcomponent_remove_property(vevent, prop);
191 icalcomponent_add_property(vevent,
192 icalproperty_new_description(bstr("description")));
194 while (prop = icalcomponent_get_first_property(vevent,
195 ICAL_DTSTART_PROPERTY), prop != NULL) {
196 icalcomponent_remove_property(vevent, prop);
198 icalcomponent_add_property(vevent,
199 icalproperty_new_dtstart(
200 icaltime_from_webform("dtstart")
204 while (prop = icalcomponent_get_first_property(vevent,
205 ICAL_DUE_PROPERTY), prop != NULL) {
206 icalcomponent_remove_property(vevent, prop);
208 icalcomponent_add_property(vevent,
209 icalproperty_new_due(
210 icaltime_from_webform("due")
214 /* Give this event a UID if it doesn't have one. */
215 if (icalcomponent_get_first_property(vevent,
216 ICAL_UID_PROPERTY) == NULL) {
217 generate_new_uid(buf);
218 icalcomponent_add_property(vevent,
219 icalproperty_new_uid(buf)
223 /* Serialize it and save it to the message base */
224 serv_puts("ENT0 1|||4");
227 serv_puts("Content-type: text/calendar");
229 serv_puts(icalcomponent_as_ical_string(vevent));
236 * If the user clicked 'Delete' then delete it, period.
238 if (!strcasecmp(bstr("sc"), "Delete")) {
242 if ( (delete_existing) && (msgnum > 0L) ) {
243 serv_printf("DELE %ld", atol(bstr("msgnum")));
247 if (created_new_vevent) {
248 icalcomponent_free(vevent);
251 /* Go back to the event list */
256 #endif /* HAVE_ICAL_H */