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: ");
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("<CENTER><TEXTAREA NAME=\"description\" wrap=soft "
94 "ROWS=10 COLS=80 WIDTH=80>\n"
96 p = icalcomponent_get_first_property(vevent, ICAL_DESCRIPTION_PROPERTY);
98 escputs((char *)icalproperty_get_comment(p));
100 wprintf("</TEXTAREA><BR>\n");
102 wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Save\">"
104 "<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Delete\">\n"
106 "<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Cancel\">\n"
110 wprintf("</FORM>\n");
114 if (created_new_vevent) {
115 icalcomponent_free(vevent);
120 * Save an edited event
122 void save_individual_event(icalcomponent *supplied_vevent, long msgnum) {
124 int delete_existing = 0;
126 icalcomponent *vevent;
127 int created_new_vevent = 0;
129 if (supplied_vevent != NULL) {
130 vevent = supplied_vevent;
133 vevent = icalcomponent_new(ICAL_VEVENT_COMPONENT);
134 created_new_vevent = 1;
137 if (!strcasecmp(bstr("sc"), "Save")) {
139 /* Replace values in the component with ones from the form */
141 while (prop = icalcomponent_get_first_property(vevent,
142 ICAL_SUMMARY_PROPERTY), prop != NULL) {
143 icalcomponent_remove_property(vevent, prop);
145 icalcomponent_add_property(vevent,
146 icalproperty_new_summary(bstr("summary")));
148 while (prop = icalcomponent_get_first_property(vevent,
149 ICAL_DESCRIPTION_PROPERTY), prop != NULL) {
150 icalcomponent_remove_property(vevent, prop);
152 icalcomponent_add_property(vevent,
153 icalproperty_new_description(bstr("description")));
155 while (prop = icalcomponent_get_first_property(vevent,
156 ICAL_DTSTART_PROPERTY), prop != NULL) {
157 icalcomponent_remove_property(vevent, prop);
159 icalcomponent_add_property(vevent,
160 icalproperty_new_dtstart(
161 icaltime_from_webform("dtstart")
165 while (prop = icalcomponent_get_first_property(vevent,
166 ICAL_DUE_PROPERTY), prop != NULL) {
167 icalcomponent_remove_property(vevent, prop);
169 icalcomponent_add_property(vevent,
170 icalproperty_new_due(
171 icaltime_from_webform("due")
175 /* Serialize it and save it to the message base */
176 serv_puts("ENT0 1|||4");
179 serv_puts("Content-type: text/calendar");
181 serv_puts(icalcomponent_as_ical_string(vevent));
188 * If the user clicked 'Delete' then delete it, period.
190 if (!strcasecmp(bstr("sc"), "Delete")) {
194 if ( (delete_existing) && (msgnum > 0L) ) {
195 serv_printf("DELE %ld", atol(bstr("msgnum")));
199 if (created_new_vevent) {
200 icalcomponent_free(vevent);
203 /* Go back to the event list */
208 #endif /* HAVE_ICAL_H */