parent
63b20c4ba2
commit
57791e384b
|
@ -119,62 +119,29 @@
|
||||||
if ([newUID length] > 0)
|
if ([newUID length] > 0)
|
||||||
{
|
{
|
||||||
if (!defaultUserID)
|
if (!defaultUserID)
|
||||||
ASSIGN (defaultUserID, [[self clientObject] defaultUserID]);
|
ASSIGN (defaultUserID, [[self clientObject] defaultUserID]);
|
||||||
|
|
||||||
um = [SOGoUserManager sharedUserManager];
|
um = [SOGoUserManager sharedUserManager];
|
||||||
if ([newUID isEqualToString: defaultUserID] || [newUID isEqualToString: @"anonymous"]
|
if ([newUID isEqualToString: defaultUserID]
|
||||||
|| [[um getEmailForUID: newUID] length] > 0)
|
|| [newUID isEqualToString: @"anonymous"]
|
||||||
{
|
|| [[um getEmailForUID: newUID] length] > 0)
|
||||||
if (![newUID hasPrefix: @"@"])
|
{
|
||||||
{
|
if (![newUID hasPrefix: @"@"])
|
||||||
|
{
|
||||||
domain = [[context activeUser] domain];
|
domain = [[context activeUser] domain];
|
||||||
group = [SOGoGroup groupWithIdentifier: newUID inDomain: domain];
|
group = [SOGoGroup groupWithIdentifier: newUID inDomain: domain];
|
||||||
if (group)
|
if (group)
|
||||||
newUID = [NSString stringWithFormat: @"@%@", newUID];
|
newUID = [NSString stringWithFormat: @"@%@", newUID];
|
||||||
}
|
}
|
||||||
ASSIGN (uid, newUID);
|
|
||||||
clientObject = [self clientObject];
|
|
||||||
[userRights addObjectsFromArray: [clientObject aclsForUser: uid]];
|
|
||||||
|
|
||||||
response = YES;
|
ASSIGN (uid, newUID);
|
||||||
}
|
clientObject = [self clientObject];
|
||||||
|
[userRights addObjectsFromArray: [clientObject aclsForUser: uid]];
|
||||||
|
|
||||||
|
response = YES;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return response;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL) _initRightsWithParameter:(NSString *) newUID
|
|
||||||
{
|
|
||||||
BOOL response;
|
|
||||||
NSString *domain;
|
|
||||||
SOGoUserManager *um;
|
|
||||||
SOGoObject *clientObject;
|
|
||||||
SOGoGroup *group;
|
|
||||||
|
|
||||||
response = NO;
|
|
||||||
|
|
||||||
if ([newUID length] > 0)
|
|
||||||
{
|
|
||||||
if (!defaultUserID)
|
|
||||||
ASSIGN (defaultUserID, [[self clientObject] defaultUserID]);
|
|
||||||
|
|
||||||
um = [SOGoUserManager sharedUserManager];
|
|
||||||
if ([newUID isEqualToString: defaultUserID] || [newUID isEqualToString: @"anonymous"]
|
|
||||||
|| [[um getEmailForUID: newUID] length] > 0)
|
|
||||||
{
|
|
||||||
if (![newUID hasPrefix: @"@"])
|
|
||||||
{
|
|
||||||
domain = [[context activeUser] domain];
|
|
||||||
group = [SOGoGroup groupWithIdentifier: newUID inDomain: domain];
|
|
||||||
if (group)
|
|
||||||
newUID = [NSString stringWithFormat: @"@%@", newUID];
|
|
||||||
}
|
|
||||||
ASSIGN (uid, newUID);
|
|
||||||
clientObject = [self clientObject];
|
|
||||||
[userRights addObjectsFromArray: [clientObject aclsForUser: uid]];
|
|
||||||
|
|
||||||
response = YES;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -219,32 +186,20 @@
|
||||||
- (id <WOActionResults>) saveUserRightsAction
|
- (id <WOActionResults>) saveUserRightsAction
|
||||||
{
|
{
|
||||||
id <WOActionResults> response;
|
id <WOActionResults> response;
|
||||||
WORequest *value;
|
|
||||||
SOGoDomainDefaults *dd;
|
SOGoDomainDefaults *dd;
|
||||||
NSDictionary *jsonObject, *currentObject;
|
|
||||||
NSEnumerator *enumerator;
|
|
||||||
NSArray *o;
|
|
||||||
id key;
|
|
||||||
|
|
||||||
value = [[self context] request];
|
if (![self _initRights])
|
||||||
jsonObject = [[value contentAsString] objectFromJSONString];
|
response = [NSException exceptionWithHTTPStatus: 403
|
||||||
enumerator = [jsonObject keyEnumerator];
|
reason: @"No such user."];
|
||||||
|
else
|
||||||
|
{
|
||||||
|
NSArray *o;
|
||||||
|
|
||||||
while((key = [enumerator nextObject]))
|
|
||||||
{
|
|
||||||
currentObject = [jsonObject objectForKey: key];
|
|
||||||
if(![self _initRightsWithParameter: [currentObject objectForKey: @"UID"]])
|
|
||||||
{
|
|
||||||
response = [self responseWithStatus: 403
|
|
||||||
andString: @"No such user."];
|
|
||||||
return response;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
[self updateRights:[currentObject objectForKey: @"aclOptions"]];
|
|
||||||
[[self clientObject] setRoles: userRights forUser: uid];
|
|
||||||
|
|
||||||
o = [NSArray arrayWithArray: userRights];
|
o = [NSArray arrayWithArray: userRights];
|
||||||
|
|
||||||
|
[self updateRights];
|
||||||
|
[[self clientObject] setRoles: userRights forUser: uid];
|
||||||
|
|
||||||
dd = [[context activeUser] domainDefaults];
|
dd = [[context activeUser] domainDefaults];
|
||||||
if (![o isEqualToArray: userRights] && [dd aclSendEMailNotifications])
|
if (![o isEqualToArray: userRights] && [dd aclSendEMailNotifications])
|
||||||
[self sendACLAdvisoryTemplateForObject: [self clientObject]];
|
[self sendACLAdvisoryTemplateForObject: [self clientObject]];
|
||||||
|
@ -279,6 +234,10 @@
|
||||||
[userRights removeObjectsInArray: list];
|
[userRights removeObjectsInArray: list];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void) prepareRightsForm
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
- (void) updateRights
|
- (void) updateRights
|
||||||
{
|
{
|
||||||
[self subclassResponsibility: _cmd];
|
[self subclassResponsibility: _cmd];
|
||||||
|
|
|
@ -61,77 +61,6 @@
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<!-- modal for addressbook sharing options -->
|
|
||||||
<script type="text/ng-template" id="addressbookSharing.html">
|
|
||||||
<div id="modalACL">
|
|
||||||
<h2>Sharing</h2>
|
|
||||||
<div>
|
|
||||||
<!-- left side -->
|
|
||||||
<div id="usersList">
|
|
||||||
<div>
|
|
||||||
<ul>
|
|
||||||
<li data-ng-repeat="user in users" data-ng-click="selectUser($index)" data-ng-class="{_selected: $index==selected}">
|
|
||||||
<span>
|
|
||||||
<i data-ng-class="(user.userClass == 'public-user') ? 'icon-user4' : 'icon-vcard'"><!-- spacer --></i>
|
|
||||||
{{user.displayName}}</span>
|
|
||||||
<span class="subscriptionArea" data-ng-hide="user.userClass == 'public-user'">
|
|
||||||
<input type="checkbox" ng-model="user.isSubscribed" ng-checked="user.isSubscribed"
|
|
||||||
ng-disabled="user.isSubscribed" ng-change="dirtyObjects()" />
|
|
||||||
<span><var:string label:value="Subscribe User"/></span></span>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<form ng-submit="addUser(userToAdd)" class="addContactsToolbar">
|
|
||||||
<input type="search" ng-model="userToAdd" label:placeholder="add aclUser" typeahead-wait-ms="1000"
|
|
||||||
typeahead="user for user in getContacts($viewValue) | filter:$viewValue" class="form-control" />
|
|
||||||
</form>
|
|
||||||
<button data-ng-click="addUser(userToAdd)">Add User</button>
|
|
||||||
<button ng-disabled="removeButton()" data-ng-click="removeUser()">Remove User</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- right side -->
|
|
||||||
<div id="AccessRightList">
|
|
||||||
<input id="uid" type="hidden" name="uid" var:value="uid"/>
|
|
||||||
<div class="title">
|
|
||||||
<label><var:string label:value="Access rights to"/><br />
|
|
||||||
<span id="folderName" class="value">{{addressbook.name}}</span></label>
|
|
||||||
<label><var:string label:value="For user"/><br />
|
|
||||||
<span class="value">{{userSelected.displayName}}</span></label>
|
|
||||||
</div>
|
|
||||||
<div class="calendarUserRights">
|
|
||||||
<ul>
|
|
||||||
<li data-ng-show="displayUserRights()">
|
|
||||||
<input type="checkbox" ng-checked="userSelected.aclOptions.canCreateObjects"
|
|
||||||
ng-model="userSelected.aclOptions.canCreateObjects" ng-change="dirtyObjects()" />
|
|
||||||
<var:string label:value="This person can add cards to this addressbook."/></li>
|
|
||||||
|
|
||||||
<li data-ng-show="displayUserRights()" ng-model="displayUserRights">
|
|
||||||
<input type="checkbox" ng-checked="userSelected.aclOptions.canEditObjects"
|
|
||||||
ng-model="userSelected.aclOptions.canEditObjects" ng-change="dirtyObjects()" />
|
|
||||||
<var:string label:value="This person can edit the cards of this addressbook."/></li>
|
|
||||||
|
|
||||||
<li data-ng-show="displayUserRights()" ng-model="displayUserRights">
|
|
||||||
<input type="checkbox" ng-checked="userSelected.aclOptions.canEraseObjects"
|
|
||||||
ng-model="userSelected.aclOptions.canEraseObjects" ng-change="dirtyObjects()" />
|
|
||||||
<var:string label:value="This person can erase cards from this addressbook."/></li>
|
|
||||||
|
|
||||||
<li data-ng-hide="!userSelected.displayName">
|
|
||||||
<input type="checkbox" ng-checked="userSelected.aclOptions.canViewObjects"
|
|
||||||
ng-model="userSelected.aclOptions.canViewObjects" ng-change="dirtyObjects()" />
|
|
||||||
<var:string label:value="This person can read the cards of this addressbook."/></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="aclButtons">
|
|
||||||
<button data-ng-click="closeModal()">Close</button>
|
|
||||||
<button data-ng-click="saveModal()">Save</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<span class="close-reveal-modal" data-ng-click="closeModal()"><i class="icon-close"><!-- close --></i></span>
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<div data-ui-view="addressbooks"><!-- addressbooks list --></div>
|
<div data-ui-view="addressbooks"><!-- addressbooks list --></div>
|
||||||
|
|
||||||
|
|
|
@ -108,41 +108,4 @@
|
||||||
|
|
||||||
return deferred.promise;
|
return deferred.promise;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* @function fetch
|
|
||||||
* @desc Fetch resources using a specific object, action and/or parameters
|
|
||||||
* @param {string} object_id - the object on which the action will be applied (ex: addressbook, calendar)
|
|
||||||
* @param {string} action - the action to be used in the URL
|
|
||||||
* @param {string} params - the url parameter
|
|
||||||
*/
|
|
||||||
Resource.prototype.fetch = function(object_id, action, params) {
|
|
||||||
var deferred = this._q.defer();
|
|
||||||
var object_id_path = object_id ? ("/" + object_id) : "";
|
|
||||||
var action_path = action ? ("/" + action) : "";
|
|
||||||
var params_path = params ? ("?" + params) : "";
|
|
||||||
|
|
||||||
var path = this._path + object_id_path + action_path + params_path;
|
|
||||||
|
|
||||||
this._http
|
|
||||||
.get(path)
|
|
||||||
.success(deferred.resolve)
|
|
||||||
.error(deferred.reject);
|
|
||||||
|
|
||||||
return deferred.promise;
|
|
||||||
};
|
|
||||||
|
|
||||||
Resource.prototype.saveAclUsers = function(object_id, action, data) {
|
|
||||||
var deferred = this._q.defer();
|
|
||||||
var object_id_path = object_id ? ("/" + object_id) : "";
|
|
||||||
var action_path = action ? ("/" + action) : "";
|
|
||||||
var path = this._path + object_id_path + action_path;
|
|
||||||
|
|
||||||
this._http
|
|
||||||
.post(path, data)
|
|
||||||
.success(deferred.resolve)
|
|
||||||
.error(deferred.reject);
|
|
||||||
|
|
||||||
return deferred.promise;
|
|
||||||
};
|
|
||||||
})();
|
})();
|
||||||
|
|
|
@ -182,80 +182,6 @@
|
||||||
$scope.closeModal = function() {
|
$scope.closeModal = function() {
|
||||||
$modalInstance.close();
|
$modalInstance.close();
|
||||||
};
|
};
|
||||||
$scope.saveModal = function() {
|
|
||||||
if(Object.keys(dirtyObjects).length > 0) {
|
|
||||||
$scope.AclUsers.saveUsersRights(dirtyObjects);
|
|
||||||
}
|
|
||||||
$modalInstance.close();
|
|
||||||
};
|
|
||||||
$scope.removeUser = function() {
|
|
||||||
if ($scope.userSelected) {
|
|
||||||
if(dirtyObjects[$scope.userSelected.UID])
|
|
||||||
delete dirtyObjects[$scope.userSelected.UID];
|
|
||||||
$scope.AclUsers.removeUser($scope.userSelected);
|
|
||||||
$scope.AclUsers.getUsers().then(function(data) {
|
|
||||||
$scope.users = data;
|
|
||||||
});
|
|
||||||
$scope.userSelected = {};
|
|
||||||
}
|
|
||||||
};
|
|
||||||
$scope.addUser = function (user) {
|
|
||||||
if (user) {
|
|
||||||
angular.forEach($scope.userObjects, function(userObject) {
|
|
||||||
if (user.indexOf(userObject.uid) != -1) {
|
|
||||||
var test = true;
|
|
||||||
angular.forEach($scope.users, function(userData) {
|
|
||||||
if (user.indexOf(userData.UID) != -1) {
|
|
||||||
test = false;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
if (test) {
|
|
||||||
$scope.AclUsers.addUser(userObject.uid);
|
|
||||||
$scope.AclUsers.getUsers().then(function(data) {
|
|
||||||
$scope.users = data;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// TODO : Write a better msg and add the string inside the .string
|
|
||||||
Dialog.alert(l('Warning'), l('This user is already added to your AclUsers list'));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
$scope.selectUser = function(index) {
|
|
||||||
// Check if it is a different user
|
|
||||||
if ($scope.userSelected != $scope.users[index]){
|
|
||||||
$scope.userSelected = {};
|
|
||||||
$scope.selected = index;
|
|
||||||
$scope.userSelected = $scope.users[index];
|
|
||||||
|
|
||||||
if (dirtyObjects[$scope.userSelected.UID]) {
|
|
||||||
$scope.userSelected.aclOptions = dirtyObjects[$scope.userSelected.UID].aclOptions;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$scope.AclUsers.openRightsForUserId($scope.userSelected.UID).then(function(userRights) {
|
|
||||||
$scope.userSelected.aclOptions = userRights;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
$scope.getContacts = function(value){
|
|
||||||
return $scope.AclUsers.searchUsers(value).then(function(response) {
|
|
||||||
$scope.usersFound = [];
|
|
||||||
$scope.userObjects = response;
|
|
||||||
angular.forEach(response, function(userObject){
|
|
||||||
$scope.usersFound.push(userObject.displayName + " <" + userObject.email + ">");
|
|
||||||
});
|
|
||||||
return $scope.usersFound;
|
|
||||||
});
|
|
||||||
};
|
|
||||||
$scope.dirtyObjects = function() {
|
|
||||||
dirtyObjects[$scope.userSelected.UID] = $scope.userSelected;
|
|
||||||
};
|
|
||||||
$scope.displayUserRights = function() {
|
|
||||||
return ($scope.userSelected && $scope.userSelected.UID != "anonymous") ? true : false;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue