parent
f7df4c1fa0
commit
e11eea7548
|
@ -19,7 +19,6 @@
|
|||
*/
|
||||
|
||||
#import <Foundation/NSArray.h>
|
||||
#import <Foundation/NSValue.h>
|
||||
#import <Foundation/NSDictionary.h>
|
||||
#import <Foundation/NSEnumerator.h>
|
||||
#import <Foundation/NSKeyValueCoding.h>
|
||||
|
@ -81,12 +80,10 @@
|
|||
return defaultUserID;
|
||||
}
|
||||
|
||||
- (id <WOActionResults>) usersForObjectAction
|
||||
- (NSArray *) usersForObject
|
||||
{
|
||||
id <WOActionResults> result;
|
||||
NSEnumerator *aclsEnum;
|
||||
NSString *currentUID, *ownerLogin;
|
||||
NSDictionary *object;
|
||||
|
||||
if (!prepared)
|
||||
{
|
||||
|
@ -99,30 +96,13 @@
|
|||
{
|
||||
if (!([currentUID isEqualToString: ownerLogin]
|
||||
|| [currentUID isEqualToString: defaultUserID]
|
||||
|| [currentUID isEqualToString: @"anonymous"]))
|
||||
{
|
||||
// Set the current user in order to get information associated with it
|
||||
[self setCurrentUser: currentUID];
|
||||
|
||||
// Build the object associated with the key; currentUID
|
||||
object = [NSDictionary dictionaryWithObjectsAndKeys: currentUser, @"UID",
|
||||
[self currentUserClass], @"userClass",
|
||||
[self currentUserDisplayName], @"displayName",
|
||||
[NSNumber numberWithBool:[self currentUserIsSubscribed]], @"isSubscribed", nil];
|
||||
[users addObject:object];
|
||||
}
|
||||
|| [currentUID isEqualToString: @"anonymous"]))
|
||||
[users addObjectUniquely: currentUID];
|
||||
}
|
||||
// Adding the Any authenticated user and the public access
|
||||
[users addObject:[NSDictionary dictionaryWithObjectsAndKeys: @"<default>", @"UID", @"Any authenticated user", @"displayName", @"public-user", @"userClass", nil]];
|
||||
if ([self isPublicAccessEnabled])
|
||||
[users addObject:[NSDictionary dictionaryWithObjectsAndKeys: @"anonymous", @"UID", @"Public access", @"displayName", @"public-user", @"userClass", nil]];
|
||||
prepared = YES;
|
||||
}
|
||||
|
||||
result = [self responseWithStatus: 200
|
||||
andString: [users jsonRepresentation]];
|
||||
|
||||
return result;
|
||||
return users;
|
||||
}
|
||||
|
||||
- (void) setCurrentUser: (NSString *) newCurrentUser
|
||||
|
@ -153,13 +133,20 @@
|
|||
return [um getFullEmailForUID: [self currentUser]];
|
||||
}
|
||||
|
||||
- (BOOL) canSubscribeUsers
|
||||
{
|
||||
return [[self clientObject]
|
||||
respondsToSelector: @selector (subscribeUserOrGroup:reallyDo:response:)];
|
||||
}
|
||||
|
||||
- (BOOL) currentUserIsSubscribed
|
||||
{
|
||||
SOGoGCSFolder *folder;
|
||||
|
||||
folder = [self clientObject];
|
||||
|
||||
return ([folder respondsToSelector: @selector (userIsSubscriber:)] && [folder userIsSubscriber: currentUser]);
|
||||
return ([folder respondsToSelector: @selector (userIsSubscriber:)]
|
||||
&& [folder userIsSubscriber: currentUser]);
|
||||
}
|
||||
|
||||
- (void) setUserUIDS: (NSString *) retainedUsers
|
||||
|
|
|
@ -119,25 +119,25 @@
|
|||
if ([newUID length] > 0)
|
||||
{
|
||||
if (!defaultUserID)
|
||||
ASSIGN (defaultUserID, [[self clientObject] defaultUserID]);
|
||||
ASSIGN (defaultUserID, [[self clientObject] defaultUserID]);
|
||||
|
||||
um = [SOGoUserManager sharedUserManager];
|
||||
if ([newUID isEqualToString: defaultUserID] || [newUID isEqualToString: @"anonymous"]
|
||||
|| [[um getEmailForUID: newUID] length] > 0)
|
||||
{
|
||||
if (![newUID hasPrefix: @"@"])
|
||||
{
|
||||
{
|
||||
if (![newUID hasPrefix: @"@"])
|
||||
{
|
||||
domain = [[context activeUser] domain];
|
||||
group = [SOGoGroup groupWithIdentifier: newUID inDomain: domain];
|
||||
if (group)
|
||||
newUID = [NSString stringWithFormat: @"@%@", newUID];
|
||||
}
|
||||
group = [SOGoGroup groupWithIdentifier: newUID inDomain: domain];
|
||||
if (group)
|
||||
newUID = [NSString stringWithFormat: @"@%@", newUID];
|
||||
}
|
||||
ASSIGN (uid, newUID);
|
||||
clientObject = [self clientObject];
|
||||
[userRights addObjectsFromArray: [clientObject aclsForUser: uid]];
|
||||
clientObject = [self clientObject];
|
||||
[userRights addObjectsFromArray: [clientObject aclsForUser: uid]];
|
||||
|
||||
response = YES;
|
||||
}
|
||||
}
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
@ -183,11 +183,13 @@
|
|||
id <WOActionResults> response;
|
||||
|
||||
if (![self _initRights])
|
||||
response = [self responseWithStatus: 403
|
||||
andString: @"No such user."];
|
||||
response = [NSException exceptionWithHTTPStatus: 403
|
||||
reason: @"No such user."];
|
||||
else
|
||||
response = [self responseWithStatus: 200
|
||||
andString:[[self userRightsForObject] jsonRepresentation]];
|
||||
{
|
||||
[self prepareRightsForm];
|
||||
response = self;
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
|
@ -235,7 +237,6 @@
|
|||
{
|
||||
response = [self responseWithStatus: 403
|
||||
andString: @"No such user."];
|
||||
return response;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -246,9 +247,10 @@
|
|||
dd = [[context activeUser] domainDefaults];
|
||||
if (![o isEqualToArray: userRights] && [dd aclSendEMailNotifications])
|
||||
[self sendACLAdvisoryTemplateForObject: [self clientObject]];
|
||||
|
||||
response = [self jsCloseWithRefreshMethod: nil];
|
||||
}
|
||||
}
|
||||
response = [self jsCloseWithRefreshMethod: nil];
|
||||
return response;
|
||||
}
|
||||
|
||||
|
@ -265,7 +267,7 @@
|
|||
}
|
||||
|
||||
- (void) appendExclusiveRight: (NSString *) newRight
|
||||
fromList: (NSArray *) list
|
||||
fromList: (NSArray *) list
|
||||
{
|
||||
[userRights removeObjectsInArray: list];
|
||||
[self appendRight: newRight];
|
||||
|
|
|
@ -63,11 +63,6 @@
|
|||
pageName = "UIxUserRightsEditor";
|
||||
actionName = "saveUserRights";
|
||||
};
|
||||
getUsersForObject = {
|
||||
protectedBy = "view";
|
||||
pageName = "UIxAclEditor";
|
||||
actionName = "usersForObject";
|
||||
};
|
||||
};
|
||||
};
|
||||
SOGoParentFolder = {
|
||||
|
|
|
@ -22,7 +22,6 @@
|
|||
|
||||
#import <Foundation/NSArray.h>
|
||||
#import <Foundation/NSEnumerator.h>
|
||||
#import <Foundation/NSValue.h>
|
||||
#import <NGObjWeb/WORequest.h>
|
||||
#import <SoObjects/SOGo/SOGoPermissions.h>
|
||||
|
||||
|
@ -30,61 +29,80 @@
|
|||
|
||||
@implementation UIxContactsUserRightsEditor
|
||||
|
||||
/*- (void) setUserCanCreateObjects: (BOOL) userCanCreateObjects
|
||||
- (void) setUserCanCreateObjects: (BOOL) userCanCreateObjects
|
||||
{
|
||||
if (userCanCreateObjects)
|
||||
[self appendRight: SOGoRole_ObjectCreator];
|
||||
else
|
||||
[self removeRight: SOGoRole_ObjectCreator];
|
||||
}*/
|
||||
}
|
||||
|
||||
- (BOOL) userCanCreateObjects
|
||||
{
|
||||
return [userRights containsObject: SOGoRole_ObjectCreator];
|
||||
}
|
||||
|
||||
- (void) setUserCanEraseObjects: (BOOL) userCanEraseObjects
|
||||
{
|
||||
if (userCanEraseObjects)
|
||||
[self appendRight: SOGoRole_ObjectEraser];
|
||||
else
|
||||
[self removeRight: SOGoRole_ObjectEraser];
|
||||
}
|
||||
|
||||
- (BOOL) userCanEraseObjects
|
||||
{
|
||||
return [userRights containsObject: SOGoRole_ObjectEraser];
|
||||
}
|
||||
|
||||
- (void) setUserCanEditObjects: (BOOL) userCanEditObjects
|
||||
{
|
||||
if (userCanEditObjects)
|
||||
[self appendRight: SOGoRole_ObjectEditor];
|
||||
else
|
||||
[self removeRight: SOGoRole_ObjectEditor];
|
||||
}
|
||||
|
||||
- (BOOL) userCanEditObjects
|
||||
{
|
||||
return [userRights containsObject: SOGoRole_ObjectEditor];
|
||||
}
|
||||
|
||||
- (void) setUserCanViewObjects: (BOOL) userCanViewObjects
|
||||
{
|
||||
if (userCanViewObjects)
|
||||
[self appendRight: SOGoRole_ObjectViewer];
|
||||
else
|
||||
[self removeRight: SOGoRole_ObjectViewer];
|
||||
}
|
||||
|
||||
- (BOOL) userCanViewObjects
|
||||
{
|
||||
return [userRights containsObject: SOGoRole_ObjectViewer];
|
||||
}
|
||||
|
||||
- (NSDictionary *) userRightsForObject
|
||||
- (void) updateRights
|
||||
{
|
||||
return [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithBool:[self userCanCreateObjects]], @"canCreateObjects",
|
||||
[NSNumber numberWithBool:[self userCanEraseObjects]], @"canEraseObjects",
|
||||
[NSNumber numberWithBool:[self userCanEditObjects]], @"canEditObjects",
|
||||
[NSNumber numberWithBool:[self userCanViewObjects]], @"canViewObjects", nil];
|
||||
}
|
||||
WORequest *request;
|
||||
|
||||
- (void) updateRights: (NSDictionary *) newRights
|
||||
{
|
||||
request = [context request];
|
||||
|
||||
if ([[newRights objectForKey: @"canCreateObjects"] boolValue])
|
||||
if ([[request formValueForKey: @"ObjectCreator"] length] > 0)
|
||||
[self appendRight: SOGoRole_ObjectCreator];
|
||||
else
|
||||
[self removeRight: SOGoRole_ObjectCreator];
|
||||
|
||||
if ([[newRights objectForKey: @"canEditObjects"] boolValue])
|
||||
if ([[request formValueForKey: @"ObjectEditor"] length] > 0)
|
||||
[self appendRight: SOGoRole_ObjectEditor];
|
||||
else
|
||||
[self removeRight: SOGoRole_ObjectEditor];
|
||||
|
||||
if ([[newRights objectForKey: @"canViewObjects"] boolValue])
|
||||
if ([[request formValueForKey: @"ObjectViewer"] length] > 0)
|
||||
[self appendRight: SOGoRole_ObjectViewer];
|
||||
else
|
||||
[self removeRight: SOGoRole_ObjectViewer];
|
||||
|
||||
if ([[newRights objectForKey: @"canEraseObjects"] boolValue])
|
||||
if ([[request formValueForKey: @"ObjectEraser"] length] > 0)
|
||||
[self appendRight: SOGoRole_ObjectEraser];
|
||||
else
|
||||
[self removeRight: SOGoRole_ObjectEraser];
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
xmlns:label="OGo:label"
|
||||
xmlns:rsrc="OGo:url"
|
||||
const:userDefaultsKeys="SOGoContactsCategories"
|
||||
const:jsFiles="Common/acl-model.js, Common/resource.js, Contacts/card-model.js, Contacts/addressbook-model.js"
|
||||
const:jsFiles="Common/resource.js, Contacts/card-model.js, Contacts/addressbook-model.js"
|
||||
className="UIxPageFrame"
|
||||
title="name"
|
||||
var:popup="isPopup">
|
||||
|
@ -61,14 +61,12 @@
|
|||
</ul>
|
||||
|
||||
<div>
|
||||
<div data-ui-view="addressbooks"><!-- addressbooks list --></div>
|
||||
|
||||
<!-- modal for addressbook sharing options -->
|
||||
<script type="text/ng-template" id="addressbookSharing.html">
|
||||
<div id="modalACL">
|
||||
<h2>Sharing</h2>
|
||||
<div>
|
||||
<!-- left side -->
|
||||
<script type="text/ng-template" id="addressbookSharing.html">
|
||||
<div id="modalACL">
|
||||
<h2>Sharing</h2>
|
||||
<div>
|
||||
<!-- left side -->
|
||||
<div id="usersList">
|
||||
<div>
|
||||
<ul>
|
||||
|
@ -135,6 +133,16 @@
|
|||
<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>
|
||||
|
||||
<!-- modal for addressbook sharing options -->
|
||||
<script type="text/ng-template" id="addressbookSharing.html">
|
||||
<h2>Sharing</h2>
|
||||
<p class="lead"></p>
|
||||
<p></p>
|
||||
<span class="close-reveal-modal" data-ng-click="closeModal()"><i class="icon-close"><!-- close --></i></span>
|
||||
</script>
|
||||
|
||||
<script type="text/ng-template" id="addressbooks.html">
|
||||
|
||||
<!-- dropdown menu for addressbook options button -->
|
||||
|
@ -143,16 +151,16 @@
|
|||
<li>
|
||||
<span class="button"><i class="icon-hyperlink"><!-- links --></i></span>
|
||||
</li>
|
||||
<li data-ng-hide="addressbook.isRemote">
|
||||
<li data-ng-show="!addressbook.isRemote">
|
||||
<span class="button"><i class="icon-pencil" data-ng-click="edit()"><!-- rename --></i></span>
|
||||
</li>
|
||||
<li data-ng-hide="addressbook.isRemote">
|
||||
<span class="button" data-ng-click="share()"><i class="icon-share"><!-- share --></i></span>
|
||||
<li data-ng-show="!addressbook.isRemote">
|
||||
<span class="button" data-ng-click="share()"><i class="icon-earth"><!-- share --></i></span>
|
||||
</li>
|
||||
<li data-ng-hide="addressbook.isRemote">
|
||||
<li data-ng-show="!addressbook.isRemote">
|
||||
<span class="button" data-ng-click="importCards()"><i class="icon-file"><!-- import --></i></span>
|
||||
</li>
|
||||
<li data-ng-hide="addressbook.isRemote">
|
||||
<li data-ng-show="!addressbook.isRemote">
|
||||
<span class="button" data-ng-click="confirmDelete(addressbook)"><i class="icon-trash"><!-- delete --></i></span>
|
||||
</li>
|
||||
</ul>
|
||||
|
|
|
@ -1,54 +0,0 @@
|
|||
(function() {
|
||||
'use strict';
|
||||
|
||||
function AclUsers(addressbook) {
|
||||
this.addressbook_id = addressbook.id;
|
||||
this.addressbook_name = addressbook.name;
|
||||
this.addressbook_owner = addressbook.owner;
|
||||
}
|
||||
|
||||
/* The factory we'll use to register with Angular */
|
||||
AclUsers.factory = ['$q', '$timeout', 'sgSettings', 'sgResource', function($q, $timeout, Settings, Resource) {
|
||||
angular.extend(AclUsers, {
|
||||
$q: $q,
|
||||
$timeout: $timeout,
|
||||
$$resource: new Resource(Settings.baseURL)
|
||||
});
|
||||
|
||||
return AclUsers; // return constructor
|
||||
}];
|
||||
|
||||
/* Factory registration in Angular module */
|
||||
angular.module('SOGo.Common').factory('sgAclUsers', AclUsers.factory);
|
||||
|
||||
/* Instance methods
|
||||
* Public method, assigned to prototype
|
||||
*/
|
||||
AclUsers.prototype.getUsers = function() {
|
||||
return AclUsers.$$resource.fetch(this.addressbook_id, "getUsersForObject");
|
||||
};
|
||||
|
||||
AclUsers.prototype.searchUsers = function(inputText) {
|
||||
var param = "search=" + inputText;
|
||||
return AclUsers.$$resource.fetch(null, "usersSearch", param);
|
||||
};
|
||||
|
||||
AclUsers.prototype.openRightsForUserId = function(user) {
|
||||
var param = "uid=" + user;
|
||||
return AclUsers.$$resource.fetch(this.addressbook_id, "userRights", param);
|
||||
};
|
||||
|
||||
AclUsers.prototype.addUser = function(user) {
|
||||
var param = "uid=" + user;
|
||||
AclUsers.$$resource.fetch(this.addressbook_id, "addUserInAcls", param);
|
||||
};
|
||||
|
||||
AclUsers.prototype.removeUser = function(user) {
|
||||
var userId = "uid=" + user.UID;
|
||||
AclUsers.$$resource.fetch(this.addressbook_id, "removeUserFromAcls", userId);
|
||||
};
|
||||
|
||||
AclUsers.prototype.saveUsersRights = function(dirtyObjects) {
|
||||
AclUsers.$$resource.saveAclUsers(this.addressbook_id, "saveUserRights", dirtyObjects);
|
||||
};
|
||||
})();
|
|
@ -178,19 +178,7 @@
|
|||
$scope.share = function() {
|
||||
var modal = $modal.open({
|
||||
templateUrl: 'addressbookSharing.html',
|
||||
controller: function($scope, $http, $modalInstance, sgAclUsers) {
|
||||
/* Variables for the scope */
|
||||
$scope.AclUsers = new sgAclUsers($rootScope.addressbook);
|
||||
$scope.userObjects = {};
|
||||
$scope.AclUsers.getUsers().then(function(data) {
|
||||
$scope.users = data;
|
||||
});
|
||||
var dirtyObjects = {};
|
||||
|
||||
/* Functions */
|
||||
$scope.removeButton = function() {
|
||||
return ($scope.userSelected && $scope.userSelected.userClass != "public-user") ? false : true;
|
||||
};
|
||||
controller: function($scope, $modalInstance) {
|
||||
$scope.closeModal = function() {
|
||||
$modalInstance.close();
|
||||
};
|
||||
|
|
|
@ -353,123 +353,6 @@ $column-gutter: 0;
|
|||
}
|
||||
}
|
||||
}
|
||||
#modalACL {
|
||||
@include grid-row();
|
||||
#usersList {
|
||||
background-color: $f-dropdown-list-hover-bg;
|
||||
border: solid black 1px;
|
||||
box-shadow: 5px 5px 2px #888888;
|
||||
@include grid-column($columns:7);
|
||||
@media #{$medium-up} {
|
||||
@include grid-column($columns:7);
|
||||
}
|
||||
.subscriptionArea {
|
||||
float:right;
|
||||
input, span {
|
||||
vertical-align: -webkit-baseline-middle;
|
||||
margin: 0
|
||||
}
|
||||
}
|
||||
ul {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
li {
|
||||
list-style-type: none;
|
||||
width: 100%;
|
||||
float: left;
|
||||
clear: left;
|
||||
background-color: $f-dropdown-list-hover-bg;
|
||||
transition: background 300ms ease;
|
||||
display: block;
|
||||
color: #666;
|
||||
line-height: rem-calc(24);
|
||||
padding: $table-head-padding;
|
||||
span {
|
||||
vertical-align: -webkit-baseline-middle;
|
||||
}
|
||||
&:hover, &:active {
|
||||
background-color: $f-dropdown-list-hover-bg;
|
||||
background-color: #fff;
|
||||
}
|
||||
&._selected, &._selected span {
|
||||
background-color: $module-color;
|
||||
background-color: #fff;
|
||||
}
|
||||
.removeAclUser:hover {
|
||||
&:focus, &:hover {
|
||||
color: $primary-color;
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.addContactsToolbar {
|
||||
width:99%;
|
||||
padding-left: 5px;
|
||||
display:inline-block;
|
||||
}
|
||||
}
|
||||
|
||||
#AccessRightList {
|
||||
overflow: auto;
|
||||
overflow-x: hidden;
|
||||
border-left: solid black;
|
||||
border-top:solid black 1px;
|
||||
border-right:solid black 1px;
|
||||
border-bottom: solid black 1px;
|
||||
min-height: 272px;
|
||||
@include grid-column($columns:6);
|
||||
@media #{$medium-up} {
|
||||
@include grid-column($columns:6);
|
||||
}
|
||||
box-shadow: 5px 5px 2px #888888;
|
||||
background-color: $f-dropdown-list-hover-bg;
|
||||
transition: background 300ms ease;
|
||||
DIV.title
|
||||
{ border-bottom: solid black;
|
||||
background-color:white;
|
||||
}
|
||||
DIV.title SPAN
|
||||
{ float: left;
|
||||
line-height: 14px;
|
||||
text-align: right;
|
||||
width: 120px;
|
||||
}
|
||||
DIV.title SPAN.value
|
||||
{ float: none;
|
||||
margin-left: 2em;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
}
|
||||
DIV.title label
|
||||
{ margin-left: 1em;
|
||||
}
|
||||
ul {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
li {
|
||||
list-style-type: none;
|
||||
width: 100%;
|
||||
float: left;
|
||||
clear: left;
|
||||
display: block;
|
||||
color: #666;
|
||||
line-height: rem-calc(24);
|
||||
padding: $table-head-padding;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#aclButtons {
|
||||
clear:both;
|
||||
text-align: right;
|
||||
padding-top:1em;
|
||||
button{
|
||||
margin:0;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.buttonsToolbar {
|
||||
text-align: right;
|
||||
|
|
Loading…
Reference in New Issue