X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fevent.c;h=d786998ab8ef818c0d5bebf7e15b291c1b04b7e1;hb=HEAD;hp=fbc2614a39d745e17ad831146d5a3a97e2059393;hpb=7ca836c2017c56ca8dfc19707ff9780485c557a6;p=citadel.git
diff --git a/webcit/event.c b/webcit/event.c
index fbc2614a3..ffe0688ab 100644
--- a/webcit/event.c
+++ b/webcit/event.c
@@ -1,11 +1,20 @@
/*
- * $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"
/*
* Display an event by itself (for editing)
@@ -13,8 +22,9 @@
* msgnum reference on the citserver
*/
void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum, char *from,
- int unread, struct calview *calv)
+ int unread, calview *calv)
{
+ wcsession *WCC = WC;
icalcomponent *vevent;
icalproperty *p;
icalvalue *v;
@@ -29,14 +39,53 @@ 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;
icalproperty *rrule = NULL;
struct icalrecurrencetype recur;
+ char weekday_is_selected[7];
+ int which_rrmonthtype_is_preselected = 0;
+
+ int rrmday;
+ int rrmweekday;
+
+ icaltimetype day1;
+ int weekbase;
+ int rrmweek;
+ int rrymweek;
+ int rrymweekday;
+ int rrymonth;
+ int which_rrend_is_preselected;
+ int which_rryeartype_is_preselected;
+
+ const char *ch;
+ const char *tabnames[3];
+ const char *frequency_units[8];
+ const char *ordinals[6];
+
+ frequency_units[0] = _("seconds");
+ frequency_units[1] = _("minutes");
+ frequency_units[2] = _("hours");
+ frequency_units[3] = _("days");
+ frequency_units[4] = _("weeks");
+ frequency_units[5] = _("months");
+ frequency_units[6] = _("years");
+ frequency_units[7] = _("never");
+
+
+ ordinals[0] = "0";
+ ordinals[1] = _("first");
+ ordinals[2] = _("second");
+ ordinals[3] = _("third");
+ ordinals[4] = _("fourth");
+ ordinals[5] = _("fifth");
+
- char *tabnames[3];
tabnames[0] = _("Event");
tabnames[1] = _("Attendees");
tabnames[2] = _("Recurrence");
@@ -44,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")
);
@@ -106,45 +155,49 @@ 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);
- wprintf("
\n");
+ output_headers(1, 1, 1, 0, 0, 0);
+ wc_printf("
\n");
+ wc_printf("
");
+ wc_printf(_("Add or edit an event"));
+ wc_printf("
");
+ wc_printf("\n");
- wprintf("
");
+ wc_printf("
\n");
/************************************************************
* Uncomment this to see the UID in calendar events for debugging
- wprintf("UID == ");
+ wc_printf("UID == ");
p = icalcomponent_get_first_property(vevent, ICAL_UID_PROPERTY);
if (p != NULL) {
escputs((char *)icalproperty_get_comment(p));
}
- wprintf("
\n");
- wprintf("SEQUENCE == %d
\n", sequence);
+ wc_printf("
\n");
+ wc_printf("SEQUENCE == %d
\n", sequence);
*************************************************************/
- wprintf("
\n");
end_tab(3, 3);
-
- wprintf("
\n"); /* end 'fix_scrollbar_bug' div */
+ wc_printf("\n");
StrBufAppendPrintf(WC->trailing_javascript,
- "eventEditAllDay(); \n"
- "RecurrenceShowHide(); \n"
+ "eventEditAllDay(); \n"
+ "RecurrenceShowHide(); \n"
+ "EnableOrDisableCheckButton(); \n"
);
- address_book_popup();
+ do_template("addressbook_popup");
+
wDumpContent(1);
if (created_new_vevent) {
@@ -742,7 +793,8 @@ void display_edit_individual_event(icalcomponent *supplied_vevent, long msgnum,
* msgnum: the index on the citserver
*/
void save_individual_event(icalcomponent *supplied_vevent, long msgnum, char *from,
- int unread, struct calview *calv) {
+ int unread, calview *calv) {
+ StrBuf *Buf;
char buf[SIZ];
icalproperty *prop;
icalcomponent *vevent, *encaps;
@@ -757,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;
@@ -775,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;
@@ -797,15 +850,19 @@ void save_individual_event(icalcomponent *supplied_vevent, long msgnum, char *fr
icalproperty_free(prop);
}
+ /* Add NOW() to the calendar object... */
+ icalcomponent_set_dtstamp(vevent,
+ icaltime_from_timet_with_zone(
+ time(NULL), 0, icaltimezone_get_utc_timezone()));
+
if (havebstr("summary")) {
-
icalcomponent_add_property(vevent,
icalproperty_new_summary(bstr("summary")));
} else {
icalcomponent_add_property(vevent,
- icalproperty_new_summary("Untitled Event"));
+ icalproperty_new_summary(_("Untitled Event")));
}
-
+
while (prop = icalcomponent_get_first_property(vevent,
ICAL_LOCATION_PROPERTY), prop != NULL) {
icalcomponent_remove_property(vevent, prop);
@@ -866,14 +923,21 @@ void save_individual_event(icalcomponent *supplied_vevent, long msgnum, char *fr
icalproperty_free(prop);
}
- if (all_day_event == 0) {
- icaltime_from_webform(&t, "dtend");
- icalcomponent_add_property(vevent,
- icalproperty_new_dtend(icaltime_normalize(t)
- )
- );
+ if (all_day_event) {
+ 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");
}
+ icalcomponent_add_property(vevent,
+ icalproperty_new_dtend(icaltime_normalize(t)
+ )
+ );
+
/* recurrence rules -- begin */
/* remove any existing rule */
@@ -994,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 */
@@ -1018,11 +1082,7 @@ void save_individual_event(icalcomponent *supplied_vevent, long msgnum, char *fr
/* First, strip out the parenthesized partstats. */
strcpy(form_attendees, bstr("attendees"));
- do {
- i = strlen(form_attendees);
- stripout(form_attendees, '(', ')');
- j = strlen(form_attendees);
- } while (i != j);
+ while ( stripout(form_attendees, '(', ')') != 0);
/* Next, change any commas to newlines, because we want newline-separated attendees. */
j = strlen(form_attendees);
@@ -1038,21 +1098,21 @@ void save_individual_event(icalcomponent *supplied_vevent, long msgnum, char *fr
/* Now iterate! */
for (i=0; i
ImportantMessage, &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);
@@ -1148,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);
}
}
}