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",
66 "<INPUT TYPE=\"text\" NAME=\"summary\" "
67 "MAXLENGTH=\"64\" SIZE=\"64\" VALUE=\"");
68 p = icalcomponent_get_first_property(vevent, ICAL_SUMMARY_PROPERTY);
70 escputs((char *)icalproperty_get_comment(p));
74 wprintf("Start date: ");
75 p = icalcomponent_get_first_property(vevent, ICAL_DTSTART_PROPERTY);
77 t = icalproperty_get_dtstart(p);
80 t = icaltime_from_timet(now, 0);
82 display_icaltimetype_as_webform(&t, "dtstart");
85 wprintf("<CENTER><TEXTAREA NAME=\"description\" wrap=soft "
86 "ROWS=10 COLS=80 WIDTH=80>\n"
88 p = icalcomponent_get_first_property(vevent, ICAL_DESCRIPTION_PROPERTY);
90 escputs((char *)icalproperty_get_comment(p));
92 wprintf("</TEXTAREA><BR>\n");
94 wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Save\">"
96 "<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Delete\">\n"
98 "<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Cancel\">\n"
102 wprintf("</FORM>\n");
106 if (created_new_vevent) {
107 icalcomponent_free(vevent);
112 * Save an edited event
114 void save_individual_event(icalcomponent *supplied_vevent, long msgnum) {
116 int delete_existing = 0;
118 icalcomponent *vevent;
119 int created_new_vevent = 0;
121 if (supplied_vevent != NULL) {
122 vevent = supplied_vevent;
125 vevent = icalcomponent_new(ICAL_VEVENT_COMPONENT);
126 created_new_vevent = 1;
129 if (!strcasecmp(bstr("sc"), "Save")) {
131 /* Replace values in the component with ones from the form */
133 while (prop = icalcomponent_get_first_property(vevent,
134 ICAL_SUMMARY_PROPERTY), prop != NULL) {
135 icalcomponent_remove_property(vevent, prop);
137 icalcomponent_add_property(vevent,
138 icalproperty_new_summary(bstr("summary")));
140 while (prop = icalcomponent_get_first_property(vevent,
141 ICAL_DESCRIPTION_PROPERTY), prop != NULL) {
142 icalcomponent_remove_property(vevent, prop);
144 icalcomponent_add_property(vevent,
145 icalproperty_new_description(bstr("description")));
147 while (prop = icalcomponent_get_first_property(vevent,
148 ICAL_DTSTART_PROPERTY), prop != NULL) {
149 icalcomponent_remove_property(vevent, prop);
151 icalcomponent_add_property(vevent,
152 icalproperty_new_dtstart(
153 icaltime_from_webform("dtstart")
157 while (prop = icalcomponent_get_first_property(vevent,
158 ICAL_DUE_PROPERTY), prop != NULL) {
159 icalcomponent_remove_property(vevent, prop);
161 icalcomponent_add_property(vevent,
162 icalproperty_new_due(
163 icaltime_from_webform("due")
167 /* Serialize it and save it to the message base */
168 serv_puts("ENT0 1|||4");
171 serv_puts("Content-type: text/calendar");
173 serv_puts(icalcomponent_as_ical_string(vevent));
180 * If the user clicked 'Delete' then delete it, period.
182 if (!strcasecmp(bstr("sc"), "Delete")) {
186 if ( (delete_existing) && (msgnum > 0L) ) {
187 serv_printf("DELE %ld", atol(bstr("msgnum")));
191 if (created_new_vevent) {
192 icalcomponent_free(vevent);
195 /* Go back to the event list */
200 #endif /* HAVE_ICAL_H */