diff --git a/ChangeLog b/ChangeLog index e578ce025..6ba42cf1b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +<<<<<<< variant A +2012-02-02 Francis Lachapelle + + * UI/MailerUI/UIxMailMainFrame.m (-composeAction): recipient + addresses are now passed as a JSON-formatted string. + + * UI/MailerUI/UIxMailAccountActions.m (-composeAction): the + received "mailto" parameter is now a JSON-formatted string; we + parse it accordingly. + +>>>>>>> variant B 2012-02-03 Wolfgang Sourdeau * OpenChange/MAPIStoreSOGo.m (sogo_backend_create_root_folder): @@ -38,6 +49,8 @@ * OpenChange/MAPIApplication.m (-setUserContext:): do not retain the user context. +####### Ancestor +======= end 2012-02-01 Francis Lachapelle * UI/WebServerResources/UIxCalUserRightsEditor.js (onUpdateACL): diff --git a/SOPE/NGCards/ChangeLog b/SOPE/NGCards/ChangeLog index f7cbca6c4..2cba81e4c 100644 --- a/SOPE/NGCards/ChangeLog +++ b/SOPE/NGCards/ChangeLog @@ -1,3 +1,10 @@ +2012-02-03 Francis Lachapelle + + * iCalDailyRecurrenceCalculator.m + (-recurrenceRangesWithinCalendarDateRange): handle the case + where the occurrence start date doesn't cover the reference period + but the end date does. + 2012-01-11 Wolfgang Sourdeau * NSString+NGCards.m (-asCardAttributeValues): fixed a leak by diff --git a/SOPE/NGCards/iCalDailyRecurrenceCalculator.m b/SOPE/NGCards/iCalDailyRecurrenceCalculator.m index 728d0dec2..04106dab4 100644 --- a/SOPE/NGCards/iCalDailyRecurrenceCalculator.m +++ b/SOPE/NGCards/iCalDailyRecurrenceCalculator.m @@ -144,26 +144,29 @@ break; } - if (wrongDay == NO && - ([startDate compare: currentStartDate] == NSOrderedAscending || - [startDate compare: currentStartDate] == NSOrderedSame)) - { - NGCalendarDateRange *r; + if (wrongDay == NO) + { + currentEndDate = [currentStartDate addTimeInterval: [firstRange duration]]; + if ([startDate compare: currentStartDate] == NSOrderedAscending || + [startDate compare: currentStartDate] == NSOrderedSame || + [startDate compare: currentEndDate] == NSOrderedAscending) + { + NGCalendarDateRange *r; - if (isFirStart == NO && dayMask && repeatCount == 0) - { - if (![dayMask occursOnDay: [currentStartDate dayOfWeek]]) - wrongDay = YES; - } - - if (isFirStart == YES || wrongDay == NO) - { - currentEndDate = [currentStartDate addTimeInterval: [firstRange duration]]; - r = [NGCalendarDateRange calendarDateRangeWithStartDate: currentStartDate - endDate: currentEndDate]; - if ([_r containsDateRange: r] || [_r doesIntersectWithDateRange: r]) - [ranges addObject: r]; - } + if (isFirStart == NO && dayMask && repeatCount == 0) + { + if (![dayMask occursOnDay: [currentStartDate dayOfWeek]]) + wrongDay = YES; + } + + if (isFirStart == YES || wrongDay == NO) + { + r = [NGCalendarDateRange calendarDateRangeWithStartDate: currentStartDate + endDate: currentEndDate]; + if ([_r containsDateRange: r] || [_r doesIntersectWithDateRange: r]) + [ranges addObject: r]; + } + } } currentStartDate = [firStart dateByAddingYears: 0 months: 0 diff --git a/SoObjects/Appointments/SOGoAppointmentObject.m b/SoObjects/Appointments/SOGoAppointmentObject.m index 927610eb3..487d2eca1 100644 --- a/SoObjects/Appointments/SOGoAppointmentObject.m +++ b/SoObjects/Appointments/SOGoAppointmentObject.m @@ -392,7 +392,7 @@ ignoringAttendees: (NSArray *) attendees fromOldEvent: (iCalEvent *) oldEvent { - NSMutableArray *updateAttendees, *updateUIDs; + NSMutableArray *updateAttendees; NSEnumerator *enumerator; iCalPerson *currentAttendee; NSString *currentUID; @@ -400,7 +400,6 @@ updateAttendees = [NSMutableArray arrayWithArray: [newEvent attendees]]; [updateAttendees removeObjectsInArray: attendees]; - updateUIDs = [NSMutableArray arrayWithCapacity: [updateAttendees count]]; enumerator = [updateAttendees objectEnumerator]; while ((currentAttendee = [enumerator nextObject])) { diff --git a/UI/Common/English.lproj/Localizable.strings b/UI/Common/English.lproj/Localizable.strings index c484f9eb3..3c09cd52e 100644 --- a/UI/Common/English.lproj/Localizable.strings +++ b/UI/Common/English.lproj/Localizable.strings @@ -73,6 +73,15 @@ "delegate is a participant" = "The delegate is already a participant."; "delegate is a group" = "The specified address corresponds to a group. You can only delegate to a unique person."; +"Snooze for " = "Snooze for "; +"5 minutes" = "5 minutes"; +"10 minutes" = "10 minutes"; +"15 minutes" = "15 minutes"; +"30 minutes" = "30 minutes"; +"45 minutes" = "45 minutes"; +"1 hour" = "1 hour"; + + /* common buttons */ "OK" = "OK"; "Cancel" = "Cancel"; diff --git a/UI/Common/French.lproj/Localizable.strings b/UI/Common/French.lproj/Localizable.strings index 81bd7c83e..9428a41e4 100644 --- a/UI/Common/French.lproj/Localizable.strings +++ b/UI/Common/French.lproj/Localizable.strings @@ -73,6 +73,15 @@ "delegate is a participant" = "Le délégué est déjà un participant."; "delegate is a group" = "L'adresse spécifiée correspond à un groupe. Vous ne pouvez déléguer qu'à une personne."; +"Snooze for " = "Rappel dans "; +"5 minutes" = "5 minutes"; +"10 minutes" = "10 minutes"; +"15 minutes" = "15 minutes"; +"30 minutes" = "30 minutes"; +"45 minutes" = "45 minutes"; +"1 hour" = "1 heure"; + + /* common buttons */ "OK" = "OK"; "Cancel" = "Annuler"; diff --git a/UI/MailerUI/UIxMailAccountActions.m b/UI/MailerUI/UIxMailAccountActions.m index 0a9327135..2f9911ee8 100644 --- a/UI/MailerUI/UIxMailAccountActions.m +++ b/UI/MailerUI/UIxMailAccountActions.m @@ -212,7 +212,7 @@ SOGoDraftsFolder *drafts; SOGoDraftObject *newDraftMessage; NSString *urlBase, *url, *value, *signature; - NSArray *mailTo; + id mailTo; NSMutableDictionary *headers; BOOL save; @@ -225,9 +225,12 @@ value = [[self request] formValueForKey: @"mailto"]; if ([value length] > 0) { - mailTo = [[value stringByUnescapingURL] componentsSeparatedByString: @","]; - [headers setObject: mailTo forKey: @"to"]; - save = YES; + mailTo = [[value stringByUnescapingURL] objectFromJSONString]; + if (mailTo && [mailTo isKindOfClass: [NSArray class]]) + { + [headers setObject: (NSArray *) mailTo forKey: @"to"]; + save = YES; + } } value = [[self request] formValueForKey: @"subject"]; diff --git a/UI/MailerUI/UIxMailMainFrame.m b/UI/MailerUI/UIxMailMainFrame.m index 746196fe1..0d121651b 100644 --- a/UI/MailerUI/UIxMailMainFrame.m +++ b/UI/MailerUI/UIxMailMainFrame.m @@ -251,7 +251,7 @@ if ([addresses count] > 0) parameters = [NSString stringWithFormat: @"?mailto=%@", - [addresses componentsJoinedByString: @","]]; + [addresses jsonRepresentation]]; } } else if ([[request formValues] objectForKey: @"mailto"]) diff --git a/UI/WebServerResources/UIxPreferences.css b/UI/WebServerResources/UIxPreferences.css index c6c706de1..49cf366fb 100644 --- a/UI/WebServerResources/UIxPreferences.css +++ b/UI/WebServerResources/UIxPreferences.css @@ -109,17 +109,15 @@ DIV#filtersListWrapper top: 174px; left: 2em; } +DIV#filtersListWrapper TD, +DIV.bottomToolbar +{ -khtml-user-select: none; + -moz-user-select: none; } + TABLE#filtersList { width: 100%; cursor: default; } -TR.filterListRow -{ background: #ccddec; - cursor: pointer; } - -TD.filterListCell -{ -moz-user-select: none; } - TH#activeTableHeader { width: 50px; text-align: center; } diff --git a/UI/WebServerResources/UIxPreferences.js b/UI/WebServerResources/UIxPreferences.js index 8dd42e05a..39a6caacb 100644 --- a/UI/WebServerResources/UIxPreferences.js +++ b/UI/WebServerResources/UIxPreferences.js @@ -364,6 +364,8 @@ function onFilterMoveDown(event) { function onFilterEdit(event) { _editFilter(this.rowIndex - 1); event.stop(); + + return false; } function copyFilter(originalFilter) { diff --git a/UI/WebServerResources/generic.css b/UI/WebServerResources/generic.css index febb88576..f3422017e 100644 --- a/UI/WebServerResources/generic.css +++ b/UI/WebServerResources/generic.css @@ -535,9 +535,6 @@ DIV.dTreeNode SPAN._dragOver color: #fff; } -INPUT.checkBox -{ vertical-align: middle; } - /* resizable columns */ TABLE TD.resize-handle-active, @@ -814,9 +811,7 @@ SPAN.caption DIV.tabsContainer { overflow: hidden; - padding: 0px 5px; - -moz-user-select: none; - -khtml-user-select: none; } + padding: 0px 5px; } DIV.tabsContainer > DIV.scrollToolbar { position: absolute; diff --git a/UI/WebServerResources/iefixes.css b/UI/WebServerResources/iefixes.css index 65b67d9ef..2f17386c1 100644 --- a/UI/WebServerResources/iefixes.css +++ b/UI/WebServerResources/iefixes.css @@ -84,6 +84,16 @@ DIV#editorTabs TABLE.frame INPUT.textField INPUT.textField._invalid, INPUT.comboBoxField._invalid { background: #f00 !important; } +/* SchedulerUI */ + +DIV.eventInside.tentative, +DIV.eventInside.needs-action +{ filter: alpha(opacity=70); } + +DIV.eventInside.delegated, +DIV.eventInside.declined +{ filter: alpha(opacity=40); } + /* UIxAppointmentEditor */ DIV#attendeesMenu LI.separator diff --git a/debian/sogo.init b/debian/sogo.init index b571c5bfb..9dc4b5c27 100644 --- a/debian/sogo.init +++ b/debian/sogo.init @@ -75,7 +75,7 @@ case "$1" in ;; stop) log_daemon_msg "Stopping $DESC" "$NAME" - start-stop-daemon --stop --pidfile $PIDFILE --retry=TERM/20/KILL/5 + start-stop-daemon --stop --pidfile $PIDFILE --retry=TERM/20/KILL/5 --oknodo log_end_msg 0 ;; restart|force-reload)