X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fevent.c;h=d786998ab8ef818c0d5bebf7e15b291c1b04b7e1;hb=HEAD;hp=7433e53120ed2c99007772b6fa03ef64f3539344;hpb=8e165dd308679f195af8614d62dbdb4e43238495;p=citadel.git diff --git a/webcit/event.c b/webcit/event.c index 7433e5312..ffe0688ab 100644 --- a/webcit/event.c +++ b/webcit/event.c @@ -1,11 +1,19 @@ /* - * $Id$ - * * Editing calendar events. + * + * Copyright (c) 2002-2012 by the citadel.org team + * + * This program is open source software. You can redistribute it and/or + * modify it under the terms of the GNU General Public License, version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. */ #include "webcit.h" -#include "webserver.h" + #include "calendar.h" /* @@ -16,6 +24,7 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, char *from, int unread, calview *calv) { + wcsession *WCC = WC; icalcomponent *vevent; icalproperty *p; icalvalue *v; @@ -30,7 +39,10 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, char buf[SIZ]; int organizer_is_me = 0; int i, j = 0; + /************************************************************ + * Uncomment this to see the UID in calendar events for debugging int sequence = 0; + */ char weekday_labels[7][32]; char month_labels[12][32]; long weekstart = 0; @@ -51,8 +63,8 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, int which_rrend_is_preselected; int which_rryeartype_is_preselected; - - char *tabnames[3]; + const char *ch; + const char *tabnames[3]; const char *frequency_units[8]; const char *ordinals[6]; @@ -73,7 +85,7 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, ordinals[4] = _("fourth"); ordinals[5] = _("fifth"); - + tabnames[0] = _("Event"); tabnames[1] = _("Attendees"); tabnames[2] = _("Recurrence"); @@ -81,7 +93,7 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, get_pref_long("weekstart", &weekstart, 17); if (weekstart > 6) weekstart = 0; - lprintf(9, "display_edit_individual_event(%ld) calview=%s year=%s month=%s day=%s\n", + syslog(LOG_DEBUG, "display_edit_individual_event(%ld) calview=%s year=%s month=%s day=%s\n", msgnum, bstr("calview"), bstr("year"), bstr("month"), bstr("day") ); @@ -143,13 +155,15 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, /* Learn the sequence */ p = icalcomponent_get_first_property(vevent, ICAL_SEQUENCE_PROPERTY); + /************************************************************ + * Uncomment this to see the UID in calendar events for debugging if (p != NULL) { sequence = icalproperty_get_sequence(p); } - + */ /* Begin output */ - output_headers(1, 1, 2, 0, 0, 0); - wc_printf("
\n"); + output_headers(1, 1, 1, 0, 0, 0); + wc_printf("
\n"); wc_printf("

"); wc_printf(_("Add or edit an event")); wc_printf("

"); @@ -157,8 +171,6 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, wc_printf("
\n"); - wc_printf("
"); - /************************************************************ * Uncomment this to see the UID in calendar events for debugging wc_printf("UID == "); @@ -166,22 +178,26 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, if (p != NULL) { escputs((char *)icalproperty_get_comment(p)); } - wc_printf("
\n"); - wc_printf("SEQUENCE == %d
\n", sequence); + wc_printf("
\n"); + wc_printf("SEQUENCE == %d
\n", sequence); *************************************************************/ wc_printf("
\n"); wc_printf("\n", WC->nonce); - wc_printf("\n", + wc_printf("WBuf, WCC->CurRoom.name, NULL, 0, 0); + wc_printf("\">\n"); + + wc_printf("\n", msgnum); - wc_printf("\n", + wc_printf("\n", bstr("calview")); - wc_printf("\n", + wc_printf("\n", bstr("year")); - wc_printf("\n", + wc_printf("\n", bstr("month")); - wc_printf("\n", + wc_printf("\n", bstr("day")); @@ -189,33 +205,33 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, begin_tab(0, 3); /* Put it in a borderless table so it lines up nicely */ - wc_printf("\n"); + wc_printf("
\n"); - wc_printf("\n"); + wc_printf("\">\n"); - wc_printf("\n"); + wc_printf("\">\n"); - wc_printf("\n"); + wc_printf("\n"); - wc_printf("\n"); + wc_printf("\n"); - wc_printf(""); + wc_printf(""); /* * For a new event, the user creating the event should be the @@ -330,7 +344,7 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, */ if (icalcomponent_get_first_property(vevent, ICAL_ORGANIZER_PROPERTY) == NULL) { - sprintf(organizer_string, "MAILTO:%s", ChrPtr(WC->cs_inet_email)); + sprintf(organizer_string, "mailto:%s", ChrPtr(WC->cs_inet_email)); icalcomponent_add_property(vevent, icalproperty_new_organizer(organizer_string) ); @@ -343,9 +357,9 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, organizer = icalcomponent_get_first_property(vevent, ICAL_ORGANIZER_PROPERTY); if (organizer != NULL) { strcpy(organizer_string, icalproperty_get_organizer(organizer)); - if (!strncasecmp(organizer_string, "MAILTO:", 7)) { + if (!strncasecmp(organizer_string, "mailto:", 7)) { strcpy(organizer_string, &organizer_string[7]); - striplt(organizer_string); + string_trim(organizer_string); serv_printf("ISME %s", organizer_string); serv_getln(buf, sizeof buf); if (buf[0] == '2') { @@ -354,14 +368,14 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, } } - wc_printf("\n"); + wc_printf("\n"); /* Transparency */ - wc_printf("\n"); + wc_printf("\n"); /* Done with properties. */ @@ -421,11 +435,11 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, /* Attendees tab (need to move things here) */ begin_tab(1, 3); - wc_printf("
"); + wc_printf("
"); wc_printf(_("Summary")); - wc_printf("\n" - "\n" + "
"); + wc_printf("
"); wc_printf(_("Location")); - wc_printf("\n" - "\n" + "
"); + wc_printf("
"); wc_printf(_("Start")); - wc_printf("\n"); + wc_printf("\n"); p = icalcomponent_get_first_property(vevent, ICAL_DTSTART_PROPERTY); if (p != NULL) { t_start = icalproperty_get_dtstart(p); @@ -248,31 +264,29 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, ((yesbstr("alldayevent")) ? 1 : 0), icaltimezone_get_utc_timezone() ); - t_start.is_utc = 1; - } display_icaltimetype_as_webform(&t_start, "dtstart", 0); - wc_printf("%s", - (t_start.is_date ? "CHECKED=\"CHECKED\"" : "" ), + (t_start.is_date ? "checked=\"checked\"" : "" ), _("All day event") ); - wc_printf("
"); + wc_printf("
"); wc_printf(_("End")); - wc_printf("\n"); + wc_printf("\n"); p = icalcomponent_get_first_property(vevent, ICAL_DTEND_PROPERTY); if (p != NULL) { t_end = icalproperty_get_dtend(p); - + /* * If this is an all-day-event, the end time is set to real end - * day + 1, so we have to adjust accordingly. + * day + 1, so we have to adjust accordingly. */ if (t_start.is_date) { icaltime_adjust(&t_end, -1, 0, 0, 0); @@ -310,19 +324,19 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, } } display_icaltimetype_as_webform(&t_end, "dtend", 0); - wc_printf("
"); + wc_printf("
"); wc_printf(_("Notes")); - wc_printf("\n" - "
"); + wc_printf("
"); wc_printf(_("Organizer")); - wc_printf(""); + wc_printf(""); escputs(organizer_string); if (organizer_is_me) { - wc_printf(" "); + wc_printf(" "); wc_printf(_("(you are the organizer)")); - wc_printf("\n"); + wc_printf("\n"); } /* @@ -370,16 +384,16 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, * especially if this is a new event and there is no organizer already * in the calendar object. */ - wc_printf(""); - wc_printf("
"); + wc_printf("
"); wc_printf(_("Show time as:")); - wc_printf(""); + wc_printf(""); p = icalcomponent_get_first_property(vevent, ICAL_TRANSP_PROPERTY); if (p == NULL) { @@ -396,7 +410,7 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, v = NULL; } - wc_printf(""); wc_printf(_("Busy")); - wc_printf("
\n"); /* same table style as the event tab */ - wc_printf("\n"); + wc_printf("
"); + wc_printf("\n"); /* same table style as the event tab */ + wc_printf("\n"); - wc_printf("
"); wc_printf(_("Attendees")); - wc_printf("
" - ""); + wc_printf("
" + ""); wc_printf(_("(One per line)")); wc_printf("\n"); @@ -433,30 +447,30 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, wc_printf( " " - "" + "" "", _("Attendees"), _("Contacts") ); /* Pop open an address book -- end */ - wc_printf("
" - "
\n"); + wc_printf("
\n"); end_tab(1, 3); /* Recurrence tab */ @@ -486,17 +500,17 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, recur.freq = ICAL_WEEKLY_RECURRENCE; } - wc_printf("%s", - (rrule ? "CHECKED=\"CHECKED\"" : "" ), + (rrule ? "checked=\"checked\"" : "" ), _("This is a recurring event") ); wc_printf("
\n"); /* begin 'rrule_div' div */ - wc_printf("\n"); + wc_printf("
\n"); wc_printf("\n"); @@ -741,31 +755,30 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, /* submit buttons (common area beneath the tabs) */ begin_tab(3, 3); - wc_printf("
" - "" + wc_printf("
" + "" "  " - "\n" + "\n" "  " - "\n" + "\n" "  " - "\n" - "
\n", + "\n" + "
\n", _("Save"), _("Delete"), _("Check attendee availability"), _("Cancel") ); - wc_printf("\n"); end_tab(3, 3); - - wc_printf("\n"); /* end 'fix_scrollbar_bug' div */ + wc_printf("\n"); StrBufAppendPrintf(WC->trailing_javascript, "eventEditAllDay(); \n" "RecurrenceShowHide(); \n" "EnableOrDisableCheckButton(); \n" ); - address_book_popup(); + do_template("addressbook_popup"); + wDumpContent(1); if (created_new_vevent) { @@ -781,6 +794,7 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, */ void save_individual_event(icalcomponent *supplied_vevent, long msgnum, char *from, int unread, calview *calv) { + StrBuf *Buf; char buf[SIZ]; icalproperty *prop; icalcomponent *vevent, *encaps; @@ -795,6 +809,7 @@ void save_individual_event(icalcomponent *supplied_vevent, long msgnum, char *fr char organizer_string[SIZ]; int sequence = 0; enum icalproperty_transp formtransp = ICAL_TRANSP_NONE; + const char *ch; if (supplied_vevent != NULL) { vevent = supplied_vevent; @@ -813,7 +828,7 @@ void save_individual_event(icalcomponent *supplied_vevent, long msgnum, char *fr if (icalcomponent_isa(vevent) == ICAL_VCALENDAR_COMPONENT) { save_individual_event( icalcomponent_get_first_component( - vevent, ICAL_VEVENT_COMPONENT), + vevent, ICAL_VEVENT_COMPONENT), msgnum, from, unread, NULL ); return; @@ -836,9 +851,9 @@ void save_individual_event(icalcomponent *supplied_vevent, long msgnum, char *fr } /* Add NOW() to the calendar object... */ - icalcomponent_set_dtstamp(vevent, - icaltime_from_timet( - time(NULL), 0)); + icalcomponent_set_dtstamp(vevent, + icaltime_from_timet_with_zone( + time(NULL), 0, icaltimezone_get_utc_timezone())); if (havebstr("summary")) { icalcomponent_add_property(vevent, @@ -847,7 +862,7 @@ void save_individual_event(icalcomponent *supplied_vevent, long msgnum, char *fr icalcomponent_add_property(vevent, icalproperty_new_summary(_("Untitled Event"))); } - + while (prop = icalcomponent_get_first_property(vevent, ICAL_LOCATION_PROPERTY), prop != NULL) { icalcomponent_remove_property(vevent, prop); @@ -909,13 +924,13 @@ void save_individual_event(icalcomponent *supplied_vevent, long msgnum, char *fr } if (all_day_event) { - icaltime_from_webform_dateonly(&t, "dtend"); + icaltime_from_webform_dateonly(&t, "dtend"); /* with this field supposed to be non-inclusive we have to add one day */ icaltime_adjust(&t, 1, 0, 0, 0); } else { - icaltime_from_webform(&t, "dtend"); + icaltime_from_webform(&t, "dtend"); } icalcomponent_add_property(vevent, @@ -1043,14 +1058,14 @@ void save_individual_event(icalcomponent *supplied_vevent, long msgnum, char *fr icalcomponent_add_property(vevent, icalproperty_new_sequence(sequence) ); - + /* * Set the organizer, only if one does not already exist *and* * the form is supplying one */ strcpy(buf, bstr("organizer")); if ( (icalcomponent_get_first_property(vevent, - ICAL_ORGANIZER_PROPERTY) == NULL) + ICAL_ORGANIZER_PROPERTY) == NULL) && (!IsEmptyStr(buf)) ) { /* set new organizer */ @@ -1083,21 +1098,21 @@ void save_individual_event(icalcomponent *supplied_vevent, long msgnum, char *fr /* Now iterate! */ for (i=0; iImportantMessage, &buf[4]); + case '4': + while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) {} + break; + case '2': + AppendImportantMessage(buf + 4, - 1); + break; + default: + break; } icalmemory_free_ring (); icalcomponent_free(encaps); @@ -1193,10 +1214,10 @@ STARTOVER: for (attendee = icalcomponent_get_first_property(vevent, ICAL_ATTENDE /* If this was a save or delete, go back to the calendar or summary view. */ if (!havebstr("check_button")) { if (!strcasecmp(bstr("calview"), "summary")) { - summary(); + display_summary_page(); } else { - readloop(readfwd); + readloop(readfwd, eUseDefault); } } }
"); wc_printf(_("Recurrence rule")); @@ -512,8 +526,8 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, "onChange=\"RecurrenceShowHide();\">\n"); for (i=0; i<(sizeof frequency_units / sizeof(char *)); ++i) { wc_printf("\n", - ((i == recur.freq) ? "selected " : ""), - (((i == recur.freq) || ((i>=3)&&(i<=6))) ? "" : "disabled "), + ((i == recur.freq) ? "selected='selected' " : ""), + (((i == recur.freq) || ((i>=3)&&(i<=6))) ? "" : "disabled='disabled' "), i, frequency_units[i] ); @@ -541,7 +555,7 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, for (j=0; j<7; ++j) { i = ((j + (int)weekstart) % 7); wc_printf("%s\n", weekday_labels[i]); } wc_printf("\n"); /* end 'weekday_selector' div */ @@ -555,7 +569,7 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, wc_printf("", - ((which_rrmonthtype_is_preselected == 0) ? "checked" : "") + ((which_rrmonthtype_is_preselected == 0) ? "checked='checked'" : "") ); rrmday = t_start.day; @@ -580,12 +594,12 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, } wc_printf(_("on day %s%d%s of the month"), "", rrmday, ""); - wc_printf("
\n"); + wc_printf("
\n"); wc_printf("", - ((which_rrmonthtype_is_preselected == 1) ? "checked" : "") + ((which_rrmonthtype_is_preselected == 1) ? "checked='checked'" : "") ); wc_printf(_("on the ")); @@ -593,7 +607,7 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, "onChange=\"RecurrenceShowHide();\">\n"); for (i=1; i<=5; ++i) { wc_printf("\n", - ((i==rrmweek) ? "selected " : ""), + ((i==rrmweek) ? "selected='selected' " : ""), i, ordinals[i] ); @@ -605,14 +619,14 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, for (j=0; j<7; ++j) { i = ((j + (int)weekstart) % 7); wc_printf("\n", - ((i==rrmweekday) ? "selected " : ""), + ((i==rrmweekday) ? "selected='selected' " : ""), i, weekday_labels[i] ); } wc_printf(""); - wc_printf(" %s
\n", _("of the month")); + wc_printf(" %s
\n", _("of the month")); wc_printf("\n"); /* end 'monthday_selector' div */ @@ -623,8 +637,8 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, which_rryeartype_is_preselected = 0; if ( - (recur.by_day[0] != ICAL_RECURRENCE_ARRAY_MAX) - && (recur.by_day[0] != 0) + (recur.by_day[0] != ICAL_RECURRENCE_ARRAY_MAX) + && (recur.by_day[0] != 0) && (recur.by_month[0] != ICAL_RECURRENCE_ARRAY_MAX) && (recur.by_month[0] != 0) ) { @@ -639,15 +653,15 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, wc_printf("", - ((which_rryeartype_is_preselected == 0) ? "checked" : "") + ((which_rryeartype_is_preselected == 0) ? "checked='checked'" : "") ); wc_printf(_("every ")); - wc_printf("%s
", _("year on this date")); + wc_printf("%s
", _("year on this date")); wc_printf("", - ((which_rryeartype_is_preselected == 1) ? "checked" : "") + ((which_rryeartype_is_preselected == 1) ? "checked='checked'" : "") ); wc_printf(_("on the ")); @@ -655,7 +669,7 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, "onChange=\"RecurrenceShowHide();\">\n"); for (i=1; i<=5; ++i) { wc_printf("\n", - ((i==rrymweek) ? "selected " : ""), + ((i==rrymweek) ? "selected='selected' " : ""), i, ordinals[i] ); @@ -667,7 +681,7 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, for (j=0; j<7; ++j) { i = ((j + (int)weekstart) % 7); wc_printf("\n", - ((i==rrymweekday) ? "selected " : ""), + ((i==rrymweekday) ? "selected='selected' " : ""), i, weekday_labels[i] ); @@ -680,13 +694,13 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, "onChange=\"RecurrenceShowHide();\">\n"); for (i=1; i<=12; ++i) { wc_printf("\n", - ((i==rrymonth) ? "selected " : ""), + ((i==rrymonth) ? "selected='selected' " : ""), i, month_labels[i-1] ); } wc_printf(""); - wc_printf("
\n"); + wc_printf("
\n"); wc_printf("\n"); /* end 'yearday_selector' div */ @@ -704,25 +718,25 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, wc_printf("", - ((which_rrend_is_preselected == 0) ? "checked" : "") + ((which_rrend_is_preselected == 0) ? "checked='checked'" : "") ); - wc_printf("%s
\n", _("No ending date")); + wc_printf("%s
\n", _("No ending date")); wc_printf("", - ((which_rrend_is_preselected == 1) ? "checked" : "") + ((which_rrend_is_preselected == 1) ? "checked='checked'" : "") ); wc_printf(_("Repeat this event")); wc_printf(" ", recur.count); wc_printf(_("times")); - wc_printf("
\n"); + wc_printf("
\n"); wc_printf("", - ((which_rrend_is_preselected == 2) ? "checked" : "") + ((which_rrend_is_preselected == 2) ? "checked='checked'" : "") ); wc_printf(_("Repeat this event until ")); @@ -730,7 +744,7 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, recur.until = icaltime_add(t_start, icaldurationtype_from_int(604800)); } display_icaltimetype_as_webform(&recur.until, "rruntil", 1); - wc_printf("
\n"); + wc_printf("
\n"); wc_printf("