Skip to content

Commit

Permalink
Fix saving of inactive calendars
Browse files Browse the repository at this point in the history
Fixes #3862, #3980
  • Loading branch information
cgx committed Jan 6, 2017
1 parent 02fc147 commit ea7934a
Show file tree
Hide file tree
Showing 5 changed files with 78 additions and 10 deletions.
1 change: 1 addition & 0 deletions NEWS
Expand Up @@ -35,6 +35,7 @@ Bug fixes
- [web] handle URI in vCard photos (#2683)
- [web] handle semicolon in values during LDIF import (#1760)
- [web] fixed computation of week number (#3973, #3976)
- [web] fixed saving of inactive calendars (#3862, #3980)
- [eas] properly skip folders we don't want to synchronize (#3943)
- [eas] fixed 30 mins freebusy offset with S Planner
- [eas] now correctly handles reminders on tasks (#3964)
Expand Down
50 changes: 49 additions & 1 deletion UI/Common/UIxParentFolderActions.m
Expand Up @@ -20,12 +20,15 @@


#import <NGObjWeb/NSException+HTTP.h>
#import <NGObjWeb/WOContext.h>
#import <NGObjWeb/WOContext+SoObjects.h>
#import <NGObjWeb/WOResponse.h>
#import <NGObjWeb/WORequest.h>

#import <SoObjects/SOGo/SOGoParentFolder.h>
#import <SoObjects/SOGo/SOGoUser.h>
#import <SoObjects/SOGo/SOGoUserSettings.h>

#import <SOGo/NSArray+Utilities.h>
#import <SOGo/NSDictionary+Utilities.h>
#import <SOGo/NSString+Utilities.h>

Expand Down Expand Up @@ -91,4 +94,49 @@ @implementation UIxParentFolderActions
return response;
}

- (WOResponse *) saveFoldersActivationAction
{
NSDictionary *params;
NSEnumerator *foldersEnumerator;
NSMutableArray *folderSubscription;
NSMutableDictionary *moduleSettings;
NSString *baseFolder, *folderName;
SOGoParentFolder *clientObject;
SOGoUser *activeUser;
SOGoUserSettings *us;
WORequest *request;
BOOL makeActive;

request = [context request];
params = [[request contentAsString] objectFromJSONString];
activeUser = [context activeUser];
clientObject = [self clientObject];
baseFolder = [clientObject nameInContainer];
us = [activeUser userSettings];
moduleSettings = [us objectForKey: baseFolder];
if (!moduleSettings)
moduleSettings = [NSMutableDictionary dictionary];
[us setObject: moduleSettings forKey: baseFolder];
folderSubscription = [moduleSettings objectForKey: @"InactiveFolders"];
if (!folderSubscription)
{
folderSubscription = [NSMutableArray array];
[moduleSettings setObject: folderSubscription forKey: @"InactiveFolders"];
}

foldersEnumerator = [params keyEnumerator];
while ((folderName = [foldersEnumerator nextObject]))
{
makeActive = [[params objectForKey: folderName] boolValue];
if (makeActive)
[folderSubscription removeObject: folderName];
else
[folderSubscription addObjectUniquely: folderName];
}
[us synchronize];

return [self responseWith204];
}


@end
5 changes: 5 additions & 0 deletions UI/Common/product.plist
Expand Up @@ -78,6 +78,11 @@
actionClass = "UIxParentFolderActions";
actionName = "createFolder";
};
saveFoldersActivation = {
protectedBy = "Change Images And Files";
actionClass = "UIxParentFolderActions";
actionName = "saveFoldersActivation";
};
};
};
SOGoFolder = {
Expand Down
19 changes: 18 additions & 1 deletion UI/WebServerResources/js/Scheduler/Calendar.service.js
Expand Up @@ -94,7 +94,6 @@
list = this.$calendars;

sibling = _.findIndex(list, function(o, i) {
console.debug(i + ': "' + o.id + '".localeCompare("' + calendar.name + '") = ' + o.name.localeCompare(calendar.name));
return (calendar.id == 'personal' ||
(o.id != 'personal' && o.name.localeCompare(calendar.name) > 0));
});
Expand Down Expand Up @@ -325,6 +324,24 @@
return Calendar.$q.all(promises);
};

/**
* @function saveFoldersActivation
* @memberof Calendar
* @desc Save to the user's settings the activation state of the calendars
* @param {string[]} folders - the folders IDs
* @returns a promise of the HTTP operation
*/
Calendar.saveFoldersActivation = function(ids) {
var request = {};

_.forEach(ids, function(id) {
var calendar = Calendar.$get(id);
request[calendar.id] = calendar.active;
});

return Calendar.$$resource.post(null, 'saveFoldersActivation', request);
};

/**
* @function saveFoldersOrder
* @desc Save to the user's settings the current calendars order.
Expand Down
13 changes: 5 additions & 8 deletions UI/WebServerResources/js/Scheduler/CalendarsController.js
Expand Up @@ -58,25 +58,22 @@
);
},
function(newList, oldList) {
var commonList, ids, promises;
var commonList, ids, promise;

// Identify which calendar has changed
commonList = _.intersectionBy(newList, oldList, 'id');
ids = _.map(_.filter(commonList, function(o) {
var oldObject = _.find(oldList, { id: o.id });
return !_.isEqual(o, oldObject);
}), 'id');
promises = [];
promise = Calendar.$q.when();

if (ids.length > 0) {
$log.debug(ids.join(', ') + ' changed');
_.forEach(ids, function(id) {
var calendar = Calendar.$get(id);
promises.push(calendar.$setActivation());
});
promise = Calendar.saveFoldersActivation(ids);
}
if (promises.length > 0 || commonList.length != newList.length || commonList.length != oldList.length)
Calendar.$q.all(promises).then(function() {
if (ids.length > 0 || commonList.length != newList.length || commonList.length != oldList.length)
promise.then(function() {
$rootScope.$emit('calendars:list');
});
},
Expand Down

0 comments on commit ea7934a

Please sign in to comment.