diff --git a/NEWS b/NEWS index be722a25c..481c58fe4 100644 --- a/NEWS +++ b/NEWS @@ -20,6 +20,7 @@ Bug fixes - [core] handle properly mails using windows-1255 charset (#4124) - [core] fixed email reminders sent multiple times (#4100) - [core] fixed LDIF to vCard conversion for non-handled multi-value attributes (#4086) + - [core] properly honor the "include in freebusy" setting (#3354) - [eas] set reply/forwarded flags when ReplaceMime is set (#4133) - [eas] remove alarms over EAS if we don't want them (#4059) - [eas] correctly set RSVP on event invitations diff --git a/SoObjects/Appointments/SOGoAppointmentFolder.m b/SoObjects/Appointments/SOGoAppointmentFolder.m index cc28a562a..0d3f9b030 100644 --- a/SoObjects/Appointments/SOGoAppointmentFolder.m +++ b/SoObjects/Appointments/SOGoAppointmentFolder.m @@ -431,36 +431,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 8d4528511..9ec1c2e56 100644 --- a/SoObjects/Appointments/SOGoFreeBusyObject.m +++ b/SoObjects/Appointments/SOGoFreeBusyObject.m @@ -309,6 +309,7 @@ to: (NSCalendarDate *) endDate { SOGoAppointmentFolder *calFolder; + SOGoAppointmentFolders *calFolders; SOGoUser *user; SOGoUserDefaults *ud; NSArray *folders; @@ -318,9 +319,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 29f671813..3907e226d 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 @@ -317,6 +317,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;