propagate from branch 'ca.inverse.sogo.1_3_12' (head f5ba6db440f5a8ba817af65dea12b4a616fdfe71)

to branch 'ca.inverse.sogo' (head df5dd81d62db331ba5c8de9f2257f9430c586534)

Monotone-Parent: df5dd81d62db331ba5c8de9f2257f9430c586534
Monotone-Parent: f5ba6db440f5a8ba817af65dea12b4a616fdfe71
Monotone-Revision: 31373520d86c320c1658f22e3bde2eee178c2003

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2012-01-09T16:38:18
Monotone-Branch: ca.inverse.sogo
maint-2.0.2
Wolfgang Sourdeau 2012-01-09 16:38:18 +00:00
commit 5468b9b1a2
11 changed files with 141 additions and 68 deletions

View File

@ -1,3 +1,8 @@
2012-01-05 Francis Lachapelle <flachapelle@inverse.ca>
* SoObjects/SOGo/SOGoUserManager.m (-_registerSource:inDomain::):
log error when duplicated IDs are found.
2012-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* UI/WebServerResources/ContactsUI.js
@ -66,6 +71,20 @@
the identifier of the source that authenticated the specified user
as the "SOGoSource" entry of the returned dictionary.
2012-01-03 Francis Lachapelle <flachapelle@inverse.ca>
* SoObjects/Appointments/SOGoAptMailNotification.m (-setupValues):
don't set the start/end times when dealing with an all-day event.
* SoObjects/Appointments/SOGoAptMailInvitation.m (-getBody): don't
display the start/end times when dealing with an all-day event.
* SoObjects/Appointments/SOGoAptMailReceipt.m (-_formattedUserDate:): idem.
* SoObjects/Appointments/SOGoAptMailUpdate.m (-getSubject): idem.
* SoObjects/Appointments/SOGoAptMailDeletion.m (-getBody): idem.
2012-01-02 Francis Lachapelle <flachapelle@inverse.ca>
* UI/WebServerResources/UIxPreferences.js (getFilterFromEditor):

View File

@ -1,3 +1,8 @@
2012-01-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* NSString+NGCards.m (-vCardSubvalues): fixed allocation of
parsing buffer to avoid a buffer overflow.
2011-12-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* NGVCard.m (-initWithUid:): initialize "CLASS" and "PROFILE".

View File

@ -337,7 +337,7 @@
valuesKey = @"";
max = [self length];
stringBuffer = NSZoneMalloc (NULL, sizeof (unichar) * max + 1);
stringBuffer = NSZoneMalloc (NULL, sizeof (unichar) * (max + 1));
[self getCharacters: stringBuffer];
stringBuffer[max] = 0;

View File

@ -35,14 +35,19 @@ vtodo_class2 = "(Confidential task)";
/* Invitation */
"Event Invitation: \"%{Summary}\"" = "Event Invitation: \"%{Summary}\"";
"(sent by %{SentBy}) " = "(sent by %{SentBy}) ";
"%{Organizer} %{SentByText}has invited you to %{Summary}.\n\nStart: %{StartDate}\nEnd: %{EndDate}\nDescription: %{Description}" = "%{Organizer} %{SentByText}has invited you to %{Summary}.\n\nStart: %{StartDate}\nEnd: %{EndDate}\nDescription: %{Description}";
"%{Organizer} %{SentByText}has invited you to %{Summary}.\n\nStart: %{StartDate} at %{StartTime}\nEnd: %{EndDate} at %{EndTime}\nDescription: %{Description}" = "%{Organizer} %{SentByText}has invited you to %{Summary}.\n\nStart: %{StartDate} at %{StartTime}\nEnd: %{EndDate} at %{EndTime}\nDescription: %{Description}";
/* Deletion */
"Event Cancelled: \"%{Summary}\"" = "Event Cancelled: \"%{Summary}\"";
"%{Organizer} %{SentByText}has cancelled this event: %{Summary}.\n\nStart: %{StartDate}\nEnd: %{EndDate}\nDescription: %{Description}"
= "%{Organizer} %{SentByText}has cancelled this event: %{Summary}.\n\nStart: %{StartDate}\nEnd: %{EndDate}\nDescription: %{Description}";
"%{Organizer} %{SentByText}has cancelled this event: %{Summary}.\n\nStart: %{StartDate} at %{StartTime}\nEnd: %{EndDate} at %{EndTime}\nDescription: %{Description}"
= "%{Organizer} %{SentByText}has cancelled this event: %{Summary}.\n\nStart: %{StartDate} at %{StartTime}\nEnd: %{EndDate} at %{EndTime}\nDescription: %{Description}";
/* Update */
"The appointment \"%{Summary}\" for the %{OldStartDate} has changed"
= "The appointment \"%{Summary}\" for the %{OldStartDate} has changed";
"The appointment \"%{Summary}\" for the %{OldStartDate} at %{OldStartTime} has changed"
= "The appointment \"%{Summary}\" for the %{OldStartDate} at %{OldStartTime} has changed";
"The following parameters have changed in the \"%{Summary}\" meeting:"

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2010 Inverse
Copyright (C) 2010-2012 Inverse
This file is part of SOGo
@ -49,12 +49,20 @@
if (!values)
[self setupValues];
if ([values objectForKey: @"StartTime"] && [values objectForKey: @"EndTime"])
bodyFormat = [self labelForKey: (@"%{Organizer} %{SentByText}has cancelled"
@" this event: %{Summary}.\n\n"
@"Start: %{StartDate} at %{StartTime}\n"
@"End: %{EndDate} at %{EndTime}\n"
@"Description: %{Description}")
inContext: context];
else
bodyFormat = [self labelForKey: (@"%{Organizer} %{SentByText}has cancelled"
@" this event: %{Summary}.\n\n"
@"Start: %{StartDate}\n"
@"End: %{EndDate}\n"
@"Description: %{Description}")
inContext: context];
return [values keysWithFormat: bodyFormat];
}

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2010 Inverse
Copyright (C) 2010-2012 Inverse
This file is part of SOGo
@ -54,7 +54,19 @@
if (!values)
[self setupValues];
bodyFormat = [self labelForKey: @"%{Organizer} %{SentByText}has invited you to %{Summary}.\n\nStart: %{StartDate} at %{StartTime}\nEnd: %{EndDate} at %{EndTime}\nDescription: %{Description}"
if ([values objectForKey: @"StartTime"] && [values objectForKey: @"EndTime"])
bodyFormat = [self labelForKey: (@"%{Organizer} %{SentByText}has invited you"
@" to %{Summary}.\n\n"
@"Start: %{StartDate} at %{StartTime}\n"
@"End: %{EndDate} at %{EndTime}\n"
@"Description: %{Description}")
inContext: context];
else
bodyFormat = [self labelForKey: (@"%{Organizer} %{SentByText}has invited you"
@" to %{Summary}.\n\n"
@"Start: %{StartDate}\n"
@"End: %{EndDate}\n"
@"Description: %{Description}")
inContext: context];
return [values keysWithFormat: bodyFormat];

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2006-2010 Inverse inc.
Copyright (C) 2006-2012 Inverse inc.
Copyright (C) 2000-2005 SKYRIX Software AG
This file is part of SOGo.
@ -209,12 +209,14 @@
date = [self newStartDate];
[values setObject: [dateFormatter shortFormattedDate: date]
forKey: @"StartDate"];
if (![apt isAllDay])
[values setObject: [dateFormatter formattedTime: date]
forKey: @"StartTime"];
date = [self newEndDate];
[values setObject: [dateFormatter shortFormattedDate: date]
forKey: @"EndDate"];
if (![apt isAllDay])
[values setObject: [dateFormatter formattedTime: date]
forKey: @"EndTime"];

View File

@ -1,6 +1,6 @@
/* SOGoAptMailReceipt.m - this file is part of SOGo
*
* Copyright (C) 2009 Inverse inc.
* Copyright (C) 2009-2012 Inverse inc.
*
* Author: Wolfgang Sourdeau <wsourdeau@inverse.ca>
*
@ -146,6 +146,9 @@ static NSCharacterSet *wsSet = nil;
formatter = [currentUser dateFormatterInContext: context];
if ([apt isAllDay])
return [formatter formattedDate: tzDate];
else
return [NSString stringWithFormat: @"%@ - %@",
[formatter formattedDate: tzDate],
[formatter formattedTime: tzDate]];

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2010 Inverse
Copyright (C) 2010-2012 Inverse
This file is part of SOGo
@ -131,6 +131,8 @@
date = [self oldStartDate];
[values setObject: [dateFormatter shortFormattedDate: date]
forKey: @"OldStartDate"];
if (![apt isAllDay])
[values setObject: [dateFormatter formattedTime: date]
forKey: @"OldStartTime"];
@ -144,9 +146,15 @@
if (!values)
[self setupValues];
subjectFormat = [self labelForKey: @"The appointment \"%{Summary}\" for the"
if ([values objectForKey: @"OldStartTime"])
subjectFormat = [self labelForKey: (@"The appointment \"%{Summary}\" for the"
@" %{OldStartDate} at"
@" %{OldStartTime} has changed"
@" %{OldStartTime} has changed")
inContext: context];
else
subjectFormat = [self labelForKey: (@"The appointment \"%{Summary}\" for the"
@" %{OldStartDate}"
@" has changed")
inContext: context];
return [values keysWithFormat: subjectFormat];

View File

@ -102,6 +102,11 @@
sourceID = [udSource objectForKey: @"id"];
if ([sourceID length] > 0)
{
if ([_sourcesMetadata objectForKey: sourceID])
[self errorWithFormat: @"attempted to register a contact/user source"
@" with duplicated id (%@)", sourceID];
else
{
type = [[udSource objectForKey: @"type"] lowercaseString];
c = NSClassFromString([_registry sourceClassForType: type]);
@ -140,8 +145,10 @@
value = [udSource objectForKey: @"SearchFieldNames"];
if (value)
[metadata setObject: value forKey: @"SearchFieldNames"];
[_sourcesMetadata setObject: metadata forKey: sourceID];
}
}
else
[self errorWithFormat: @"attempted to register a contact/user source"
@" without id (skipped)"];

View File

@ -457,7 +457,7 @@
{
WOResponse *result;
NSDictionary *data;
NSCalendarDate *eventDate;
NSCalendarDate *eventStartDate, *eventEndDate;
NSTimeZone *timeZone;
SOGoUserDefaults *ud;
SOGoCalendarComponent *co;
@ -469,8 +469,10 @@
result = [self responseWithStatus: 200];
ud = [[context activeUser] userDefaults];
timeZone = [ud timeZone];
eventDate = [event startDate];
[eventDate setTimeZone: timeZone];
eventStartDate = [event startDate];
eventEndDate = [event endDate];
[eventStartDate setTimeZone: timeZone];
[eventEndDate setTimeZone: timeZone];
co = [self clientObject];
if (!componentCalendar)
@ -507,8 +509,10 @@
data = [NSDictionary dictionaryWithObjectsAndKeys:
[componentCalendar displayName], @"calendar",
[event tag], @"component",
[dateFormatter formattedDate: eventDate], @"startDate",
[dateFormatter formattedTime: eventDate], @"startTime",
[dateFormatter formattedDate: eventStartDate], @"startDate",
[dateFormatter formattedTime: eventStartDate], @"startTime",
[dateFormatter formattedDate: eventEndDate], @"endDate",
[dateFormatter formattedTime: eventEndDate], @"endTime",
([event hasRecurrenceRules] ? @"1": @"0"), @"isRecurring",
([event isAllDay] ? @"1": @"0"), @"isAllDay",
[event summary], @"summary",