#include "webcit.h"
#include "webserver.h"
+#include "calendar.h"
/*
* Display an event by itself (for editing)
* 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)
{
icalcomponent *vevent;
icalproperty *p;
wprintf("</TD></TR>\n");
- /*
- * If this is an all-day-event, set the end time to be identical to
- * the start time (the hour/minute/second will be set to midnight).
- * Otherwise extract or create it.
- */
wprintf("<TR><TD><B>");
wprintf(_("End"));
wprintf("</B></TD><TD id=\"dtendcell\">\n");
- if (t_start.is_date) {
- t_end = t_start;
+ 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.
+ */
+ if (t_start.is_date) {
+ icaltime_adjust(&t_end, -1, 0, 0, 0);
+ }
}
else {
- p = icalcomponent_get_first_property(vevent,
- ICAL_DTEND_PROPERTY);
- if (p != NULL) {
- t_end = icalproperty_get_dtend(p);
+ if (created_new_vevent == 1) {
+ /* set default duration */
+ if (t_start.is_date) {
+ /*
+ * If this is an all-day-event, set the end time to be identical to
+ * the start time (the hour/minute/second will be set to midnight).
+ */
+ t_end = t_start;
+ }
+ else {
+ /*
+ * If this is not an all-day event and there is no
+ * end time specified, make the default one hour
+ * from the start time.
+ */
+ t_end = t_start;
+ t_end.hour += 1;
+ t_end.second = 0;
+ t_end = icaltime_normalize(t_end);
+ /* t_end = icaltime_from_timet(now, 0); */
+ }
}
else {
/*
- * If this is not an all-day event and there is no
- * end time specified, make the default one hour
- * from the start time.
+ * If an existing event has no end date/time this is
+ * supposed to mean end = start.
*/
t_end = t_start;
- t_end.hour += 1;
- t_end.second = 0;
- t_end = icaltime_normalize(t_end);
- /* t_end = icaltime_from_timet(now, 0); */
}
}
display_icaltimetype_as_webform(&t_end, "dtend", 0);
*/
if (icalcomponent_get_first_property(vevent, ICAL_ORGANIZER_PROPERTY)
== NULL) {
- sprintf(organizer_string, "MAILTO:%s", WC->cs_inet_email);
+ sprintf(organizer_string, "MAILTO:%s", ChrPtr(WC->cs_inet_email));
icalcomponent_add_property(vevent,
icalproperty_new_organizer(organizer_string)
);
int rrymonth = t_start.month;
int which_rryeartype_is_preselected = 0;
- if ( (recur.by_day[0] != ICAL_RECURRENCE_ARRAY_MAX)
- && (recur.by_month[0] != ICAL_RECURRENCE_ARRAY_MAX) ) {
+ if (
+ (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)
+ ) {
which_rryeartype_is_preselected = 1;
rrymweek = icalrecurrencetype_day_position(recur.by_day[0]);
rrymweekday = icalrecurrencetype_day_day_of_week(recur.by_day[0]) - 1;
* 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) {
char buf[SIZ];
icalproperty *prop;
icalcomponent *vevent, *encaps;
icalproperty_free(prop);
}
+ /* Add NOW() to the calendar object... */
+ icalcomponent_set_dtstamp(vevent,
+ icaltime_from_timet(
+ time(NULL), 0));
+
if (havebstr("summary")) {
icalcomponent_add_property(vevent,
icalproperty_new_summary(bstr("summary")));
icalproperty_free(prop);
}
- if (all_day_event == 0) {
+ 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)
- )
- );
}
+ icalcomponent_add_property(vevent,
+ icalproperty_new_dtend(icaltime_normalize(t)
+ )
+ );
+
/* recurrence rules -- begin */
/* remove any existing rule */