(fix) handle default classification for tasks (fixes #3541)

This commit is contained in:
Ludovic Marcotte
2016-03-23 13:41:08 -04:00
parent 0291b49fd1
commit 3a9c28f0ea
4 changed files with 50 additions and 32 deletions
+1 -32
View File
@@ -1759,37 +1759,6 @@ inRecurrenceExceptionsForEvent: (iCalEvent *) theEvent
}
}
- (void) _adjustClassificationInRequestCalendar: (iCalCalendar *) rqCalendar
{
SOGoUserDefaults *userDefaults;
NSString *accessClass;
NSArray *allObjects;
id entity;
int i;
userDefaults = [[context activeUser] userDefaults];
allObjects = [rqCalendar allObjects];
for (i = 0; i < [allObjects count]; i++)
{
entity = [allObjects objectAtIndex: i];
if ([entity respondsToSelector: @selector(accessClass)])
{
accessClass = [entity accessClass];
if (!accessClass || [accessClass length] == 0)
{
if ([entity isKindOfClass: [iCalEvent class]])
[entity setAccessClass: [userDefaults calendarEventsDefaultClassification]];
else if ([entity isKindOfClass: [iCalToDo class]])
[entity setAccessClass: [userDefaults calendarTasksDefaultClassification]];
}
}
}
}
//
// iOS devices (and potentially others) send event invitations with no PARTSTAT defined.
// This confuses DAV clients like Thunderbird, or event SOGo web. The RFC says:
@@ -2006,7 +1975,7 @@ inRecurrenceExceptionsForEvent: (iCalEvent *) theEvent
}
[self _adjustEventsInRequestCalendar: calendar];
[self _adjustClassificationInRequestCalendar: calendar];
[self adjustClassificationInRequestCalendar: calendar];
[self _adjustPartStatInRequestCalendar: calendar];
}
@@ -94,6 +94,8 @@
- (void) snoozeAlarm: (unsigned int) minutes;
- (void) adjustClassificationInRequestCalendar: (iCalCalendar *) rqCalendar;
@end
#endif /* SOGOCALENDARCOMPONENT_H */
@@ -1445,4 +1445,36 @@
// return values;
// }
- (void) adjustClassificationInRequestCalendar: (iCalCalendar *) rqCalendar
{
SOGoUserDefaults *userDefaults;
NSString *accessClass;
NSArray *allObjects;
id entity;
int i;
userDefaults = [[context activeUser] userDefaults];
allObjects = [rqCalendar allObjects];
for (i = 0; i < [allObjects count]; i++)
{
entity = [allObjects objectAtIndex: i];
if ([entity respondsToSelector: @selector(accessClass)])
{
accessClass = [entity accessClass];
if (!accessClass || [accessClass length] == 0)
{
if ([entity isKindOfClass: [iCalEvent class]])
[entity setAccessClass: [userDefaults calendarEventsDefaultClassification]];
else if ([entity isKindOfClass: [iCalToDo class]])
[entity setAccessClass: [userDefaults calendarTasksDefaultClassification]];
}
}
}
}
@end
+15
View File
@@ -21,6 +21,8 @@
#import <Foundation/NSCalendarDate.h>
#import <NGObjWeb/WOResponse.h>
#import <NGObjWeb/WOContext+SoObjects.h>
#import <NGExtensions/NSObject+Logs.h>
#import <NGExtensions/NSNull+misc.h>
#import <NGCards/iCalCalendar.h>
@@ -105,4 +107,17 @@
}
- (id) PUTAction: (WOContext *) _ctx
{
iCalCalendar *rqCalendar;
WORequest *rq;
rq = [_ctx request];
rqCalendar = [iCalCalendar parseSingleFromSource: [rq contentAsString]];
[self adjustClassificationInRequestCalendar: rqCalendar];
[rq setContent: [[rqCalendar versitString] dataUsingEncoding: [rq contentEncoding]]];
return [super PUTAction: _ctx];
}
@end /* SOGoTaskObject */