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 "<INPUT TYPE=\"text\" NAME=\"summary\" "
75 "MAXLENGTH=\"64\" SIZE=\"64\" VALUE=\"");
76 p = icalcomponent_get_first_property(vevent, ICAL_SUMMARY_PROPERTY);
78 escputs((char *)icalproperty_get_comment(p));
82 wprintf("Start date/time: ");
83 p = icalcomponent_get_first_property(vevent, ICAL_DTSTART_PROPERTY);
85 t = icalproperty_get_dtstart(p);
88 t = icaltime_from_timet(now, 0);
90 display_icaltimetype_as_webform(&t, "dtstart");
93 wprintf("End date/time: ");
94 p = icalcomponent_get_first_property(vevent, ICAL_DTEND_PROPERTY);
96 t = icalproperty_get_dtend(p);
99 t = icaltime_from_timet(now, 0);
101 display_icaltimetype_as_webform(&t, "dtend");
104 wprintf("<CENTER><TEXTAREA NAME=\"description\" wrap=soft "
105 "ROWS=10 COLS=80 WIDTH=80>\n"
107 p = icalcomponent_get_first_property(vevent, ICAL_DESCRIPTION_PROPERTY);
109 escputs((char *)icalproperty_get_comment(p));
111 wprintf("</TEXTAREA><BR>\n");
113 wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Save\">"
115 "<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Delete\">\n"
117 "<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Cancel\">\n"
121 wprintf("</FORM>\n");
125 if (created_new_vevent) {
126 icalcomponent_free(vevent);
131 * Save an edited event
133 void save_individual_event(icalcomponent *supplied_vevent, long msgnum) {
135 int delete_existing = 0;
137 icalcomponent *vevent;
138 int created_new_vevent = 0;
140 if (supplied_vevent != NULL) {
141 vevent = supplied_vevent;
144 vevent = icalcomponent_new(ICAL_VEVENT_COMPONENT);
145 created_new_vevent = 1;
148 if (!strcasecmp(bstr("sc"), "Save")) {
150 /* Replace values in the component with ones from the form */
152 while (prop = icalcomponent_get_first_property(vevent,
153 ICAL_SUMMARY_PROPERTY), prop != NULL) {
154 icalcomponent_remove_property(vevent, prop);
156 icalcomponent_add_property(vevent,
157 icalproperty_new_summary(bstr("summary")));
159 while (prop = icalcomponent_get_first_property(vevent,
160 ICAL_DESCRIPTION_PROPERTY), prop != NULL) {
161 icalcomponent_remove_property(vevent, prop);
163 icalcomponent_add_property(vevent,
164 icalproperty_new_description(bstr("description")));
166 while (prop = icalcomponent_get_first_property(vevent,
167 ICAL_DTSTART_PROPERTY), prop != NULL) {
168 icalcomponent_remove_property(vevent, prop);
170 icalcomponent_add_property(vevent,
171 icalproperty_new_dtstart(
172 icaltime_from_webform("dtstart")
176 while (prop = icalcomponent_get_first_property(vevent,
177 ICAL_DUE_PROPERTY), prop != NULL) {
178 icalcomponent_remove_property(vevent, prop);
180 icalcomponent_add_property(vevent,
181 icalproperty_new_due(
182 icaltime_from_webform("due")
186 /* Serialize it and save it to the message base */
187 serv_puts("ENT0 1|||4");
190 serv_puts("Content-type: text/calendar");
192 serv_puts(icalcomponent_as_ical_string(vevent));
199 * If the user clicked 'Delete' then delete it, period.
201 if (!strcasecmp(bstr("sc"), "Delete")) {
205 if ( (delete_existing) && (msgnum > 0L) ) {
206 serv_printf("DELE %ld", atol(bstr("msgnum")));
210 if (created_new_vevent) {
211 icalcomponent_free(vevent);
214 /* Go back to the event list */
219 #endif /* HAVE_ICAL_H */