]> code.citadel.org Git - citadel.git/blobdiff - webcit/calendar.c
* add Michael Meskes patch: make time in task due dates optional
[citadel.git] / webcit / calendar.c
index 9012e8966ac000f0dd116b0cc1e49363238c60ca..7208760215c994c03f9072542f0dd88c4b6a5ff3 100644 (file)
@@ -125,7 +125,7 @@ void cal_process_object(StrBuf *Target,
                        }
                        else {
                                tt = icaltime_as_timet(t);
-                               webcit_fmt_date(buf, tt, 0);
+                               webcit_fmt_date(buf, tt, DATEFMT_FULL);
                                StrBufAppendPrintf(Target, "<dt>");
                                StrBufAppendPrintf(Target, _("Starting date/time:"));
                                StrBufAppendPrintf(Target, "</dt><dd>%s</dd>", buf);
@@ -136,7 +136,7 @@ void cal_process_object(StrBuf *Target,
                if (p != NULL) {
                        t = icalproperty_get_dtend(p);
                        tt = icaltime_as_timet(t);
-                       webcit_fmt_date(buf, tt, 0);
+                       webcit_fmt_date(buf, tt, DATEFMT_FULL);
                        StrBufAppendPrintf(Target, "<dt>");
                        StrBufAppendPrintf(Target, _("Ending date/time:"));
                        StrBufAppendPrintf(Target, "</dt><dd>%s</dd>", buf);
@@ -280,7 +280,7 @@ void cal_process_object(StrBuf *Target,
 void cal_process_attachment(wc_mime_attachment *Mime) 
 {
        icalcomponent *cal;
-       
+
        cal = icalcomponent_new_from_string(ChrPtr(Mime->Data));
        FlushStrBuf(Mime->Data);
        if (cal == NULL) {
@@ -599,7 +599,12 @@ void display_edit_individual_task(icalcomponent *supplied_vtodo, long msgnum, ch
        if (supplied_vtodo != NULL) {
                vtodo = supplied_vtodo;
 
-               /**
+               /*
+                * It's safe to convert to UTC here because there are no recurrences to worry about.
+                */
+               ical_dezonify(vtodo);
+
+               /*
                 * If we're looking at a fully encapsulated VCALENDAR
                 * rather than a VTODO component, attempt to use the first
                 * relevant VTODO subcomponent.  If there is none, the
@@ -678,6 +683,13 @@ void display_edit_individual_task(icalcomponent *supplied_vtodo, long msgnum, ch
        else
                IcalTime = icaltime_current_time_with_zone(get_default_icaltimezone());
        display_icaltimetype_as_webform(&IcalTime, "dtstart", 0);
+
+       wprintf("<INPUT TYPE=\"CHECKBOX\" NAME=\"dtstart_time\" ID=\"dtstart_time\" VALUE=\"yes\"");
+       if (!IcalTime.is_date) {
+               wprintf("CHECKED=\"CHECKED\"");
+       }
+       wprintf(">");
+       wprintf(_("Time associated"));
        wprintf("</TD></TR>\n");
 
        wprintf("<TR><TD>");
@@ -699,7 +711,13 @@ void display_edit_individual_task(icalcomponent *supplied_vtodo, long msgnum, ch
        else
                IcalTime = icaltime_current_time_with_zone(get_default_icaltimezone());
        display_icaltimetype_as_webform(&IcalTime, "due", 0);
-               
+
+       wprintf("<INPUT TYPE=\"CHECKBOX\" NAME=\"due_time\" ID=\"due_time\" VALUE=\"yes\"");
+       if (!IcalTime.is_date) {
+               wprintf("CHECKED=\"CHECKED\"");
+       }
+       wprintf(">");
+       wprintf(_("Time associated"));
        wprintf("</TD></TR>\n");
        todoStatus = icalcomponent_get_status(vtodo);
        wprintf("<TR><TD>\n");
@@ -813,7 +831,7 @@ void save_individual_task(icalcomponent *supplied_vtodo, long msgnum, char* from
                                                   icalproperty_new_summary(bstr("summary")));
                } else {
                        icalcomponent_add_property(vtodo,
-                                                  icalproperty_new_summary("Untitled Task"));
+                                                  icalproperty_new_summary(_("Untitled Task")));
                }
        
                while (prop = icalcomponent_get_first_property(vtodo,
@@ -832,7 +850,12 @@ void save_individual_task(icalcomponent *supplied_vtodo, long msgnum, char* from
                        icalproperty_free(prop);
                }
                if (IsEmptyStr(bstr("nodtstart"))) {
-                       icaltime_from_webform(&t, "dtstart");
+                       if (yesbstr("dtstart_time")) {
+                               icaltime_from_webform(&t, "dtstart");
+                       }
+                       else {
+                               icaltime_from_webform_dateonly(&t, "dtstart");
+                       }
                        icalcomponent_add_property(vtodo,
                                                   icalproperty_new_dtstart(t)
                                );
@@ -842,10 +865,23 @@ void save_individual_task(icalcomponent *supplied_vtodo, long msgnum, char* from
                        icalcomponent_remove_property(vtodo,prop);
                        icalproperty_free(prop);
                }
+               while(prop = icalcomponent_get_first_property(vtodo,
+                                                             ICAL_PERCENTCOMPLETE_PROPERTY), prop != NULL) {
+                       icalcomponent_remove_property(vtodo,prop);
+                       icalproperty_free(prop);
+               }
+
                if (havebstr("status")) {
-                       icalproperty_status taskStatus = icalproperty_string_to_status(
-                               bstr("status"));
+                       icalproperty_status taskStatus = icalproperty_string_to_status(bstr("status"));
                        icalcomponent_set_status(vtodo, taskStatus);
+                       icalcomponent_add_property(vtodo,
+                               icalproperty_new_percentcomplete(
+                                       (strcasecmp(bstr("status"), "completed") ? 0 : 100)
+                               )
+                       );
+               }
+               else {
+                       icalcomponent_add_property(vtodo, icalproperty_new_percentcomplete(0));
                }
                while (prop = icalcomponent_get_first_property(vtodo,
                                                               ICAL_CATEGORIES_PROPERTY), prop != NULL) {
@@ -862,7 +898,12 @@ void save_individual_task(icalcomponent *supplied_vtodo, long msgnum, char* from
                        icalproperty_free(prop);
                }
                if (IsEmptyStr(bstr("nodue"))) {
-                       icaltime_from_webform(&t, "due");
+                       if (yesbstr("due_time")) {
+                               icaltime_from_webform(&t, "due");
+                       }
+                       else {
+                               icaltime_from_webform_dateonly(&t, "due");
+                       }
                        icalcomponent_add_property(vtodo,
                                                   icalproperty_new_due(t)
                                );
@@ -1058,7 +1099,7 @@ void display_edit_task(void) {
                        
        /* Force change the room if we have to */
        if (havebstr("taskrm")) {
-               gotoroom((char *)bstr("taskrm"));
+               gotoroom(sbstr("taskrm"));
        }
 
        msgnum = lbstr("msgnum");
@@ -1175,6 +1216,10 @@ void
 InitModule_CALENDAR
 (void)
 {
+       RegisterPreference("daystart", _("Calendar day view begins at:"), PRF_INT, NULL);
+       RegisterPreference("dayend", _("Calendar day view ends at:"), PRF_INT, NULL);
+       RegisterPreference("weekstart", _("Week starts on:"), PRF_INT, NULL);
+
        WebcitAddUrlHandler(HKEY("display_edit_task"), display_edit_task, 0);
        WebcitAddUrlHandler(HKEY("save_task"), save_task, 0);
        WebcitAddUrlHandler(HKEY("display_edit_event"), display_edit_event, 0);