diff --git a/NEWS b/NEWS index 16d6bc989..3d6df120c 100644 --- a/NEWS +++ b/NEWS @@ -8,6 +8,7 @@ Enhancements Bug fixes - [core] fixed calendar component move across collections (#4116) - [core] handle properly mails using windows-1255 charset (#4124) + - [core] properly honor the "include in freebusy" setting (#3354) - [eas] fixed opacity in EAS freebusy (#4033) - [eas] set reply/forwarded flags when ReplaceMime is set (#4133) - [eas] remove alarms over EAS if we don't want them (#4059) diff --git a/SoObjects/Appointments/SOGoAppointmentFolder.m b/SoObjects/Appointments/SOGoAppointmentFolder.m index ac5967655..582de41c0 100644 --- a/SoObjects/Appointments/SOGoAppointmentFolder.m +++ b/SoObjects/Appointments/SOGoAppointmentFolder.m @@ -445,36 +445,27 @@ static Class iCalEventK = nil; - (BOOL) includeInFreeBusy { NSNumber *excludeFromFreeBusy; - NSString *userLogin; + NSString *userLogin, *ownerInContext; BOOL is_owner; userLogin = [[context activeUser] login]; - is_owner = [userLogin isEqualToString: self->owner]; - - // Check if the owner (not the active user) has excluded the calendar from her/his free busy data. - excludeFromFreeBusy - = [self folderPropertyValueInCategory: @"FreeBusyExclusions" - forUser: [context activeUser]]; + ownerInContext = [[self container] ownerInContext: context]; + is_owner = [userLogin isEqualToString: ownerInContext]; - if ([self isSubscription]) - { - // If the user has not yet set an include/not include fb information let's EXCLUDE it. - if (!excludeFromFreeBusy) - return NO; - else - return ![excludeFromFreeBusy boolValue]; - } - else if (is_owner) - { - // We are the owner but we haven't included/excluded freebusy info, let's INCLUDE it. - if (!excludeFromFreeBusy) - return YES; - else - return ![excludeFromFreeBusy boolValue]; - } + if (is_owner) + excludeFromFreeBusy + = [self folderPropertyValueInCategory: @"FreeBusyExclusions" + forUser: [context activeUser]]; + else + excludeFromFreeBusy + = [self folderPropertyValueInCategory: @"FreeBusyExclusions" + forUser: [SOGoUser userWithLogin: ownerInContext]]; - // It's not a subscribtion and we aren't the owner. Let's INCLUDE the freebusy info. - return YES; + // We haven't included/excluded freebusy info, let's INCLUDE it. + if (!excludeFromFreeBusy) + return YES; + + return ![excludeFromFreeBusy boolValue]; } - (void) setIncludeInFreeBusy: (BOOL) newInclude diff --git a/SoObjects/Appointments/SOGoFreeBusyObject.m b/SoObjects/Appointments/SOGoFreeBusyObject.m index 1c6e55662..1cc0b1a79 100644 --- a/SoObjects/Appointments/SOGoFreeBusyObject.m +++ b/SoObjects/Appointments/SOGoFreeBusyObject.m @@ -317,6 +317,7 @@ to: (NSCalendarDate *) endDate { SOGoAppointmentFolder *calFolder; + SOGoAppointmentFolders *calFolders; SOGoUser *user; SOGoUserDefaults *ud; NSArray *folders; @@ -326,9 +327,12 @@ infos = [NSMutableArray array]; - folders = [[container lookupName: @"Calendar" - inContext: context - acquire: NO] subFolders]; + calFolders = [container lookupName: @"Calendar" + inContext: context + acquire: NO]; + [calFolders appendSubscribedSources]; + folders = [calFolders subFolders]; + max = [folders count]; for (count = 0; count < max; count++) { diff --git a/SoObjects/SOGo/SOGoParentFolder.m b/SoObjects/SOGo/SOGoParentFolder.m index 89521b058..fbed6bd1d 100644 --- a/SoObjects/SOGo/SOGoParentFolder.m +++ b/SoObjects/SOGo/SOGoParentFolder.m @@ -1,6 +1,6 @@ /* SOGoParentFolder.m - this file is part of SOGo * - * Copyright (C) 2006-2015 Inverse inc. + * Copyright (C) 2006-2017 Inverse inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -323,6 +323,12 @@ static SoSecurityManager *sm = nil; int i; BOOL dirty; + if (!subscribedSubFolders) + subscribedSubFolders = [NSMutableDictionary new]; + + if (!subFolderClass) + subFolderClass = [[self class] subFolderClass]; + error = nil; /* we ignore non-DB errors at this time... */ dirty = NO;