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.sogomaint-2.0.2
commit
5468b9b1a2
19
ChangeLog
19
ChangeLog
|
@ -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>
|
2012-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||||||
|
|
||||||
* UI/WebServerResources/ContactsUI.js
|
* UI/WebServerResources/ContactsUI.js
|
||||||
|
@ -66,6 +71,20 @@
|
||||||
the identifier of the source that authenticated the specified user
|
the identifier of the source that authenticated the specified user
|
||||||
as the "SOGoSource" entry of the returned dictionary.
|
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>
|
2012-01-02 Francis Lachapelle <flachapelle@inverse.ca>
|
||||||
|
|
||||||
* UI/WebServerResources/UIxPreferences.js (getFilterFromEditor):
|
* UI/WebServerResources/UIxPreferences.js (getFilterFromEditor):
|
||||||
|
|
|
@ -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>
|
2011-12-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||||||
|
|
||||||
* NGVCard.m (-initWithUid:): initialize "CLASS" and "PROFILE".
|
* NGVCard.m (-initWithUid:): initialize "CLASS" and "PROFILE".
|
||||||
|
|
|
@ -325,7 +325,7 @@
|
||||||
ELEM;...:subvalue1;subvalue1,subvalue2 (where KEY = @"") */
|
ELEM;...:subvalue1;subvalue1,subvalue2 (where KEY = @"") */
|
||||||
NSMutableDictionary *values; /* key <> ordered values associations */
|
NSMutableDictionary *values; /* key <> ordered values associations */
|
||||||
NSMutableArray *orderedValues = nil; /* those are separated by ';' and contain
|
NSMutableArray *orderedValues = nil; /* those are separated by ';' and contain
|
||||||
subvalues, may or may not be named */
|
subvalues, may or may not be named */
|
||||||
NSMutableArray *subValues = nil; /* those are separeted by ',' */
|
NSMutableArray *subValues = nil; /* those are separeted by ',' */
|
||||||
unichar *stringBuffer, *substringBuffer;
|
unichar *stringBuffer, *substringBuffer;
|
||||||
NSString *valuesKey, *substring;
|
NSString *valuesKey, *substring;
|
||||||
|
@ -337,7 +337,7 @@
|
||||||
valuesKey = @"";
|
valuesKey = @"";
|
||||||
|
|
||||||
max = [self length];
|
max = [self length];
|
||||||
stringBuffer = NSZoneMalloc (NULL, sizeof (unichar) * max + 1);
|
stringBuffer = NSZoneMalloc (NULL, sizeof (unichar) * (max + 1));
|
||||||
[self getCharacters: stringBuffer];
|
[self getCharacters: stringBuffer];
|
||||||
stringBuffer[max] = 0;
|
stringBuffer[max] = 0;
|
||||||
|
|
||||||
|
|
|
@ -35,14 +35,19 @@ vtodo_class2 = "(Confidential task)";
|
||||||
/* Invitation */
|
/* Invitation */
|
||||||
"Event Invitation: \"%{Summary}\"" = "Event Invitation: \"%{Summary}\"";
|
"Event Invitation: \"%{Summary}\"" = "Event Invitation: \"%{Summary}\"";
|
||||||
"(sent by %{SentBy}) " = "(sent by %{SentBy}) ";
|
"(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}";
|
"%{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 */
|
/* Deletion */
|
||||||
"Event Cancelled: \"%{Summary}\"" = "Event Cancelled: \"%{Summary}\"";
|
"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}"
|
||||||
= "%{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 */
|
/* 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 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:"
|
"The following parameters have changed in the \"%{Summary}\" meeting:"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2010 Inverse
|
Copyright (C) 2010-2012 Inverse
|
||||||
|
|
||||||
This file is part of SOGo
|
This file is part of SOGo
|
||||||
|
|
||||||
|
@ -49,12 +49,20 @@
|
||||||
if (!values)
|
if (!values)
|
||||||
[self setupValues];
|
[self setupValues];
|
||||||
|
|
||||||
bodyFormat = [self labelForKey: (@"%{Organizer} %{SentByText}has cancelled"
|
if ([values objectForKey: @"StartTime"] && [values objectForKey: @"EndTime"])
|
||||||
@" this event: %{Summary}.\n\n"
|
bodyFormat = [self labelForKey: (@"%{Organizer} %{SentByText}has cancelled"
|
||||||
@"Start: %{StartDate} at %{StartTime}\n"
|
@" this event: %{Summary}.\n\n"
|
||||||
@"End: %{EndDate} at %{EndTime}\n"
|
@"Start: %{StartDate} at %{StartTime}\n"
|
||||||
@"Description: %{Description}")
|
@"End: %{EndDate} at %{EndTime}\n"
|
||||||
inContext: context];
|
@"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];
|
return [values keysWithFormat: bodyFormat];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2010 Inverse
|
Copyright (C) 2010-2012 Inverse
|
||||||
|
|
||||||
This file is part of SOGo
|
This file is part of SOGo
|
||||||
|
|
||||||
|
@ -54,8 +54,20 @@
|
||||||
if (!values)
|
if (!values)
|
||||||
[self setupValues];
|
[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"])
|
||||||
inContext: context];
|
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];
|
return [values keysWithFormat: bodyFormat];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2006-2010 Inverse inc.
|
Copyright (C) 2006-2012 Inverse inc.
|
||||||
Copyright (C) 2000-2005 SKYRIX Software AG
|
Copyright (C) 2000-2005 SKYRIX Software AG
|
||||||
|
|
||||||
This file is part of SOGo.
|
This file is part of SOGo.
|
||||||
|
@ -209,14 +209,16 @@
|
||||||
date = [self newStartDate];
|
date = [self newStartDate];
|
||||||
[values setObject: [dateFormatter shortFormattedDate: date]
|
[values setObject: [dateFormatter shortFormattedDate: date]
|
||||||
forKey: @"StartDate"];
|
forKey: @"StartDate"];
|
||||||
[values setObject: [dateFormatter formattedTime: date]
|
if (![apt isAllDay])
|
||||||
forKey: @"StartTime"];
|
[values setObject: [dateFormatter formattedTime: date]
|
||||||
|
forKey: @"StartTime"];
|
||||||
|
|
||||||
date = [self newEndDate];
|
date = [self newEndDate];
|
||||||
[values setObject: [dateFormatter shortFormattedDate: date]
|
[values setObject: [dateFormatter shortFormattedDate: date]
|
||||||
forKey: @"EndDate"];
|
forKey: @"EndDate"];
|
||||||
[values setObject: [dateFormatter formattedTime: date]
|
if (![apt isAllDay])
|
||||||
forKey: @"EndTime"];
|
[values setObject: [dateFormatter formattedTime: date]
|
||||||
|
forKey: @"EndTime"];
|
||||||
|
|
||||||
description = [[self apt] comment];
|
description = [[self apt] comment];
|
||||||
[values setObject: (description ? description : @"")
|
[values setObject: (description ? description : @"")
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* SOGoAptMailReceipt.m - this file is part of SOGo
|
/* 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>
|
* Author: Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||||||
*
|
*
|
||||||
|
@ -146,9 +146,12 @@ static NSCharacterSet *wsSet = nil;
|
||||||
|
|
||||||
formatter = [currentUser dateFormatterInContext: context];
|
formatter = [currentUser dateFormatterInContext: context];
|
||||||
|
|
||||||
return [NSString stringWithFormat: @"%@ - %@",
|
if ([apt isAllDay])
|
||||||
[formatter formattedDate: tzDate],
|
return [formatter formattedDate: tzDate];
|
||||||
[formatter formattedTime: tzDate]];
|
else
|
||||||
|
return [NSString stringWithFormat: @"%@ - %@",
|
||||||
|
[formatter formattedDate: tzDate],
|
||||||
|
[formatter formattedTime: tzDate]];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSString *) aptStartDate
|
- (NSString *) aptStartDate
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2010 Inverse
|
Copyright (C) 2010-2012 Inverse
|
||||||
|
|
||||||
This file is part of SOGo
|
This file is part of SOGo
|
||||||
|
|
||||||
|
@ -131,8 +131,10 @@
|
||||||
date = [self oldStartDate];
|
date = [self oldStartDate];
|
||||||
[values setObject: [dateFormatter shortFormattedDate: date]
|
[values setObject: [dateFormatter shortFormattedDate: date]
|
||||||
forKey: @"OldStartDate"];
|
forKey: @"OldStartDate"];
|
||||||
[values setObject: [dateFormatter formattedTime: date]
|
|
||||||
forKey: @"OldStartTime"];
|
if (![apt isAllDay])
|
||||||
|
[values setObject: [dateFormatter formattedTime: date]
|
||||||
|
forKey: @"OldStartTime"];
|
||||||
|
|
||||||
[self _setupBodyValuesWithFormatter: dateFormatter];
|
[self _setupBodyValuesWithFormatter: dateFormatter];
|
||||||
}
|
}
|
||||||
|
@ -144,10 +146,16 @@
|
||||||
if (!values)
|
if (!values)
|
||||||
[self setupValues];
|
[self setupValues];
|
||||||
|
|
||||||
subjectFormat = [self labelForKey: @"The appointment \"%{Summary}\" for the"
|
if ([values objectForKey: @"OldStartTime"])
|
||||||
@" %{OldStartDate} at"
|
subjectFormat = [self labelForKey: (@"The appointment \"%{Summary}\" for the"
|
||||||
@" %{OldStartTime} has changed"
|
@" %{OldStartDate} at"
|
||||||
inContext: context];
|
@" %{OldStartTime} has changed")
|
||||||
|
inContext: context];
|
||||||
|
else
|
||||||
|
subjectFormat = [self labelForKey: (@"The appointment \"%{Summary}\" for the"
|
||||||
|
@" %{OldStartDate}"
|
||||||
|
@" has changed")
|
||||||
|
inContext: context];
|
||||||
|
|
||||||
return [values keysWithFormat: subjectFormat];
|
return [values keysWithFormat: subjectFormat];
|
||||||
}
|
}
|
||||||
|
|
|
@ -103,44 +103,51 @@
|
||||||
sourceID = [udSource objectForKey: @"id"];
|
sourceID = [udSource objectForKey: @"id"];
|
||||||
if ([sourceID length] > 0)
|
if ([sourceID length] > 0)
|
||||||
{
|
{
|
||||||
type = [[udSource objectForKey: @"type"] lowercaseString];
|
if ([_sourcesMetadata objectForKey: sourceID])
|
||||||
c = NSClassFromString([_registry sourceClassForType: type]);
|
[self errorWithFormat: @"attempted to register a contact/user source"
|
||||||
sogoSource = [c sourceFromUDSource: udSource inDomain: domain];
|
@" with duplicated id (%@)", sourceID];
|
||||||
if (sourceID)
|
|
||||||
[_sources setObject: sogoSource forKey: sourceID];
|
|
||||||
else
|
|
||||||
[self errorWithFormat: @"id field missing in an user source,"
|
|
||||||
@" check the SOGoUserSources defaults"];
|
|
||||||
metadata = [NSMutableDictionary dictionary];
|
|
||||||
if (domain)
|
|
||||||
[metadata setObject: domain forKey: @"domain"];
|
|
||||||
value = [udSource objectForKey: @"canAuthenticate"];
|
|
||||||
if (value)
|
|
||||||
[metadata setObject: value forKey: @"canAuthenticate"];
|
|
||||||
value = [udSource objectForKey: @"isAddressBook"];
|
|
||||||
if (value)
|
|
||||||
{
|
|
||||||
[metadata setObject: value forKey: @"isAddressBook"];
|
|
||||||
isAddressBook = [value boolValue];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
isAddressBook = NO;
|
|
||||||
value = [udSource objectForKey: @"displayName"];
|
|
||||||
if (value)
|
|
||||||
[metadata setObject: value forKey: @"displayName"];
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (isAddressBook)
|
type = [[udSource objectForKey: @"type"] lowercaseString];
|
||||||
[self errorWithFormat: @"addressbook source '%@' has"
|
c = NSClassFromString([_registry sourceClassForType: type]);
|
||||||
@" no displayname", sourceID];
|
sogoSource = [c sourceFromUDSource: udSource inDomain: domain];
|
||||||
|
if (sourceID)
|
||||||
|
[_sources setObject: sogoSource forKey: sourceID];
|
||||||
|
else
|
||||||
|
[self errorWithFormat: @"id field missing in an user source,"
|
||||||
|
@" check the SOGoUserSources defaults"];
|
||||||
|
metadata = [NSMutableDictionary dictionary];
|
||||||
|
if (domain)
|
||||||
|
[metadata setObject: domain forKey: @"domain"];
|
||||||
|
value = [udSource objectForKey: @"canAuthenticate"];
|
||||||
|
if (value)
|
||||||
|
[metadata setObject: value forKey: @"canAuthenticate"];
|
||||||
|
value = [udSource objectForKey: @"isAddressBook"];
|
||||||
|
if (value)
|
||||||
|
{
|
||||||
|
[metadata setObject: value forKey: @"isAddressBook"];
|
||||||
|
isAddressBook = [value boolValue];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
isAddressBook = NO;
|
||||||
|
value = [udSource objectForKey: @"displayName"];
|
||||||
|
if (value)
|
||||||
|
[metadata setObject: value forKey: @"displayName"];
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (isAddressBook)
|
||||||
|
[self errorWithFormat: @"addressbook source '%@' has"
|
||||||
|
@" no displayname", sourceID];
|
||||||
|
}
|
||||||
|
value = [udSource objectForKey: @"MailFieldNames"];
|
||||||
|
if (value)
|
||||||
|
[metadata setObject: value forKey: @"MailFieldNames"];
|
||||||
|
value = [udSource objectForKey: @"SearchFieldNames"];
|
||||||
|
if (value)
|
||||||
|
[metadata setObject: value forKey: @"SearchFieldNames"];
|
||||||
|
|
||||||
|
[_sourcesMetadata setObject: metadata forKey: sourceID];
|
||||||
}
|
}
|
||||||
value = [udSource objectForKey: @"MailFieldNames"];
|
|
||||||
if (value)
|
|
||||||
[metadata setObject: value forKey: @"MailFieldNames"];
|
|
||||||
value = [udSource objectForKey: @"SearchFieldNames"];
|
|
||||||
if (value)
|
|
||||||
[metadata setObject: value forKey: @"SearchFieldNames"];
|
|
||||||
[_sourcesMetadata setObject: metadata forKey: sourceID];
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
[self errorWithFormat: @"attempted to register a contact/user source"
|
[self errorWithFormat: @"attempted to register a contact/user source"
|
||||||
|
|
|
@ -457,7 +457,7 @@
|
||||||
{
|
{
|
||||||
WOResponse *result;
|
WOResponse *result;
|
||||||
NSDictionary *data;
|
NSDictionary *data;
|
||||||
NSCalendarDate *eventDate;
|
NSCalendarDate *eventStartDate, *eventEndDate;
|
||||||
NSTimeZone *timeZone;
|
NSTimeZone *timeZone;
|
||||||
SOGoUserDefaults *ud;
|
SOGoUserDefaults *ud;
|
||||||
SOGoCalendarComponent *co;
|
SOGoCalendarComponent *co;
|
||||||
|
@ -469,8 +469,10 @@
|
||||||
result = [self responseWithStatus: 200];
|
result = [self responseWithStatus: 200];
|
||||||
ud = [[context activeUser] userDefaults];
|
ud = [[context activeUser] userDefaults];
|
||||||
timeZone = [ud timeZone];
|
timeZone = [ud timeZone];
|
||||||
eventDate = [event startDate];
|
eventStartDate = [event startDate];
|
||||||
[eventDate setTimeZone: timeZone];
|
eventEndDate = [event endDate];
|
||||||
|
[eventStartDate setTimeZone: timeZone];
|
||||||
|
[eventEndDate setTimeZone: timeZone];
|
||||||
co = [self clientObject];
|
co = [self clientObject];
|
||||||
|
|
||||||
if (!componentCalendar)
|
if (!componentCalendar)
|
||||||
|
@ -507,8 +509,10 @@
|
||||||
data = [NSDictionary dictionaryWithObjectsAndKeys:
|
data = [NSDictionary dictionaryWithObjectsAndKeys:
|
||||||
[componentCalendar displayName], @"calendar",
|
[componentCalendar displayName], @"calendar",
|
||||||
[event tag], @"component",
|
[event tag], @"component",
|
||||||
[dateFormatter formattedDate: eventDate], @"startDate",
|
[dateFormatter formattedDate: eventStartDate], @"startDate",
|
||||||
[dateFormatter formattedTime: eventDate], @"startTime",
|
[dateFormatter formattedTime: eventStartDate], @"startTime",
|
||||||
|
[dateFormatter formattedDate: eventEndDate], @"endDate",
|
||||||
|
[dateFormatter formattedTime: eventEndDate], @"endTime",
|
||||||
([event hasRecurrenceRules] ? @"1": @"0"), @"isRecurring",
|
([event hasRecurrenceRules] ? @"1": @"0"), @"isRecurring",
|
||||||
([event isAllDay] ? @"1": @"0"), @"isAllDay",
|
([event isAllDay] ? @"1": @"0"), @"isAllDay",
|
||||||
[event summary], @"summary",
|
[event summary], @"summary",
|
||||||
|
|
Loading…
Reference in New Issue