]> code.citadel.org Git - citadel.git/blobdiff - webcit/calendar.c
+ add Michael Meskes Patch; hide Task due date UI elements if they're not applicable.
[citadel.git] / webcit / calendar.c
index d50e1f77e8ecb7ec93454d70becacd36dc00575f..9fcf8b7c8ffadb9d14e070dcbbbc9bd6c86d8b33 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);
@@ -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
@@ -670,6 +675,7 @@ void display_edit_individual_task(icalcomponent *supplied_vtodo, long msgnum, ch
        wprintf(_("No date"));
        
        wprintf(" ");
+       wprintf("<span ID=\"dtstart_date\">");
        wprintf(_("or"));
        wprintf(" ");
        if (p != NULL) {
@@ -678,7 +684,14 @@ 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("</TD></TR>\n");
+
+       wprintf("<INPUT TYPE=\"CHECKBOX\" NAME=\"dtstart_time_assoc\" ID=\"dtstart_time_assoc\" VALUE=\"yes\"");
+       if (!IcalTime.is_date) {
+               wprintf("CHECKED=\"CHECKED\"");
+       }
+       wprintf(">");
+       wprintf(_("Time associated"));
+       wprintf("</span></TD></TR>\n");
 
        wprintf("<TR><TD>");
        wprintf(_("Due date:"));
@@ -691,6 +704,7 @@ void display_edit_individual_task(icalcomponent *supplied_vtodo, long msgnum, ch
        wprintf(">");
        wprintf(_("No date"));
        wprintf(" ");
+       wprintf("<span ID=\"due_date\">\n");
        wprintf(_("or"));
        wprintf(" ");
        if (p != NULL) {
@@ -699,8 +713,14 @@ 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("</TD></TR>\n");
+
+       wprintf("<INPUT TYPE=\"CHECKBOX\" NAME=\"due_time_assoc\" ID=\"due_time_assoc\" VALUE=\"yes\"");
+       if (!IcalTime.is_date) {
+               wprintf("CHECKED=\"CHECKED\"");
+       }
+       wprintf(">");
+       wprintf(_("Time associated"));
+       wprintf("</span></TD></TR>\n");
        todoStatus = icalcomponent_get_status(vtodo);
        wprintf("<TR><TD>\n");
        wprintf(_("Completed:"));
@@ -813,7 +833,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 +852,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 +867,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 +900,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)
                                );
@@ -1175,9 +1218,9 @@ void
 InitModule_CALENDAR
 (void)
 {
-       RegisterPreference(HKEY("daystart"), _("Calendar day view begins at:"), PRF_INT, NULL);
-       RegisterPreference(HKEY("dayend"), _("Calendar day view ends at:"), PRF_INT, NULL);
-       RegisterPreference(HKEY("weekstart"), _("Week starts on:"), PRF_INT, NULL);
+       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);