Revert "file lost through rebasing"

This reverts commit a952402c39.
This commit is contained in:
Francis Lachapelle 2014-10-08 10:35:50 -04:00
parent f7df4c1fa0
commit e11eea7548
8 changed files with 87 additions and 260 deletions

View file

@ -19,7 +19,6 @@
*/ */
#import <Foundation/NSArray.h> #import <Foundation/NSArray.h>
#import <Foundation/NSValue.h>
#import <Foundation/NSDictionary.h> #import <Foundation/NSDictionary.h>
#import <Foundation/NSEnumerator.h> #import <Foundation/NSEnumerator.h>
#import <Foundation/NSKeyValueCoding.h> #import <Foundation/NSKeyValueCoding.h>
@ -81,12 +80,10 @@
return defaultUserID; return defaultUserID;
} }
- (id <WOActionResults>) usersForObjectAction - (NSArray *) usersForObject
{ {
id <WOActionResults> result;
NSEnumerator *aclsEnum; NSEnumerator *aclsEnum;
NSString *currentUID, *ownerLogin; NSString *currentUID, *ownerLogin;
NSDictionary *object;
if (!prepared) if (!prepared)
{ {
@ -100,29 +97,12 @@
if (!([currentUID isEqualToString: ownerLogin] if (!([currentUID isEqualToString: ownerLogin]
|| [currentUID isEqualToString: defaultUserID] || [currentUID isEqualToString: defaultUserID]
|| [currentUID isEqualToString: @"anonymous"])) || [currentUID isEqualToString: @"anonymous"]))
{ [users addObjectUniquely: currentUID];
// 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];
}
} }
// 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; prepared = YES;
} }
result = [self responseWithStatus: 200 return users;
andString: [users jsonRepresentation]];
return result;
} }
- (void) setCurrentUser: (NSString *) newCurrentUser - (void) setCurrentUser: (NSString *) newCurrentUser
@ -153,13 +133,20 @@
return [um getFullEmailForUID: [self currentUser]]; return [um getFullEmailForUID: [self currentUser]];
} }
- (BOOL) canSubscribeUsers
{
return [[self clientObject]
respondsToSelector: @selector (subscribeUserOrGroup:reallyDo:response:)];
}
- (BOOL) currentUserIsSubscribed - (BOOL) currentUserIsSubscribed
{ {
SOGoGCSFolder *folder; SOGoGCSFolder *folder;
folder = [self clientObject]; folder = [self clientObject];
return ([folder respondsToSelector: @selector (userIsSubscriber:)] && [folder userIsSubscriber: currentUser]); return ([folder respondsToSelector: @selector (userIsSubscriber:)]
&& [folder userIsSubscriber: currentUser]);
} }
- (void) setUserUIDS: (NSString *) retainedUsers - (void) setUserUIDS: (NSString *) retainedUsers

View file

@ -119,25 +119,25 @@
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] || [newUID isEqualToString: @"anonymous"]
|| [[um getEmailForUID: newUID] length] > 0) || [[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); ASSIGN (uid, newUID);
clientObject = [self clientObject]; clientObject = [self clientObject];
[userRights addObjectsFromArray: [clientObject aclsForUser: uid]]; [userRights addObjectsFromArray: [clientObject aclsForUser: uid]];
response = YES; response = YES;
} }
} }
return response; return response;
} }
@ -183,11 +183,13 @@
id <WOActionResults> response; id <WOActionResults> response;
if (![self _initRights]) if (![self _initRights])
response = [self responseWithStatus: 403 response = [NSException exceptionWithHTTPStatus: 403
andString: @"No such user."]; reason: @"No such user."];
else else
response = [self responseWithStatus: 200 {
andString:[[self userRightsForObject] jsonRepresentation]]; [self prepareRightsForm];
response = self;
}
return response; return response;
} }
@ -235,7 +237,6 @@
{ {
response = [self responseWithStatus: 403 response = [self responseWithStatus: 403
andString: @"No such user."]; andString: @"No such user."];
return response;
} }
else else
{ {
@ -246,9 +247,10 @@
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]];
response = [self jsCloseWithRefreshMethod: nil];
} }
} }
response = [self jsCloseWithRefreshMethod: nil];
return response; return response;
} }
@ -265,7 +267,7 @@
} }
- (void) appendExclusiveRight: (NSString *) newRight - (void) appendExclusiveRight: (NSString *) newRight
fromList: (NSArray *) list fromList: (NSArray *) list
{ {
[userRights removeObjectsInArray: list]; [userRights removeObjectsInArray: list];
[self appendRight: newRight]; [self appendRight: newRight];

View file

@ -63,11 +63,6 @@
pageName = "UIxUserRightsEditor"; pageName = "UIxUserRightsEditor";
actionName = "saveUserRights"; actionName = "saveUserRights";
}; };
getUsersForObject = {
protectedBy = "view";
pageName = "UIxAclEditor";
actionName = "usersForObject";
};
}; };
}; };
SOGoParentFolder = { SOGoParentFolder = {

View file

@ -22,7 +22,6 @@
#import <Foundation/NSArray.h> #import <Foundation/NSArray.h>
#import <Foundation/NSEnumerator.h> #import <Foundation/NSEnumerator.h>
#import <Foundation/NSValue.h>
#import <NGObjWeb/WORequest.h> #import <NGObjWeb/WORequest.h>
#import <SoObjects/SOGo/SOGoPermissions.h> #import <SoObjects/SOGo/SOGoPermissions.h>
@ -30,61 +29,80 @@
@implementation UIxContactsUserRightsEditor @implementation UIxContactsUserRightsEditor
/*- (void) setUserCanCreateObjects: (BOOL) userCanCreateObjects - (void) setUserCanCreateObjects: (BOOL) userCanCreateObjects
{ {
if (userCanCreateObjects) if (userCanCreateObjects)
[self appendRight: SOGoRole_ObjectCreator]; [self appendRight: SOGoRole_ObjectCreator];
else else
[self removeRight: SOGoRole_ObjectCreator]; [self removeRight: SOGoRole_ObjectCreator];
}*/ }
- (BOOL) userCanCreateObjects - (BOOL) userCanCreateObjects
{ {
return [userRights containsObject: SOGoRole_ObjectCreator]; return [userRights containsObject: SOGoRole_ObjectCreator];
} }
- (void) setUserCanEraseObjects: (BOOL) userCanEraseObjects
{
if (userCanEraseObjects)
[self appendRight: SOGoRole_ObjectEraser];
else
[self removeRight: SOGoRole_ObjectEraser];
}
- (BOOL) userCanEraseObjects - (BOOL) userCanEraseObjects
{ {
return [userRights containsObject: SOGoRole_ObjectEraser]; return [userRights containsObject: SOGoRole_ObjectEraser];
} }
- (void) setUserCanEditObjects: (BOOL) userCanEditObjects
{
if (userCanEditObjects)
[self appendRight: SOGoRole_ObjectEditor];
else
[self removeRight: SOGoRole_ObjectEditor];
}
- (BOOL) userCanEditObjects - (BOOL) userCanEditObjects
{ {
return [userRights containsObject: SOGoRole_ObjectEditor]; return [userRights containsObject: SOGoRole_ObjectEditor];
} }
- (void) setUserCanViewObjects: (BOOL) userCanViewObjects
{
if (userCanViewObjects)
[self appendRight: SOGoRole_ObjectViewer];
else
[self removeRight: SOGoRole_ObjectViewer];
}
- (BOOL) userCanViewObjects - (BOOL) userCanViewObjects
{ {
return [userRights containsObject: SOGoRole_ObjectViewer]; return [userRights containsObject: SOGoRole_ObjectViewer];
} }
- (NSDictionary *) userRightsForObject - (void) updateRights
{ {
return [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithBool:[self userCanCreateObjects]], @"canCreateObjects", WORequest *request;
[NSNumber numberWithBool:[self userCanEraseObjects]], @"canEraseObjects",
[NSNumber numberWithBool:[self userCanEditObjects]], @"canEditObjects",
[NSNumber numberWithBool:[self userCanViewObjects]], @"canViewObjects", nil];
}
- (void) updateRights: (NSDictionary *) newRights request = [context request];
{
if ([[newRights objectForKey: @"canCreateObjects"] boolValue]) if ([[request formValueForKey: @"ObjectCreator"] length] > 0)
[self appendRight: SOGoRole_ObjectCreator]; [self appendRight: SOGoRole_ObjectCreator];
else else
[self removeRight: SOGoRole_ObjectCreator]; [self removeRight: SOGoRole_ObjectCreator];
if ([[newRights objectForKey: @"canEditObjects"] boolValue]) if ([[request formValueForKey: @"ObjectEditor"] length] > 0)
[self appendRight: SOGoRole_ObjectEditor]; [self appendRight: SOGoRole_ObjectEditor];
else else
[self removeRight: SOGoRole_ObjectEditor]; [self removeRight: SOGoRole_ObjectEditor];
if ([[newRights objectForKey: @"canViewObjects"] boolValue]) if ([[request formValueForKey: @"ObjectViewer"] length] > 0)
[self appendRight: SOGoRole_ObjectViewer]; [self appendRight: SOGoRole_ObjectViewer];
else else
[self removeRight: SOGoRole_ObjectViewer]; [self removeRight: SOGoRole_ObjectViewer];
if ([[newRights objectForKey: @"canEraseObjects"] boolValue]) if ([[request formValueForKey: @"ObjectEraser"] length] > 0)
[self appendRight: SOGoRole_ObjectEraser]; [self appendRight: SOGoRole_ObjectEraser];
else else
[self removeRight: SOGoRole_ObjectEraser]; [self removeRight: SOGoRole_ObjectEraser];

View file

@ -8,7 +8,7 @@
xmlns:label="OGo:label" xmlns:label="OGo:label"
xmlns:rsrc="OGo:url" xmlns:rsrc="OGo:url"
const:userDefaultsKeys="SOGoContactsCategories" 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" className="UIxPageFrame"
title="name" title="name"
var:popup="isPopup"> var:popup="isPopup">
@ -61,14 +61,12 @@
</ul> </ul>
<div> <div>
<div data-ui-view="addressbooks"><!-- addressbooks list --></div>
<!-- modal for addressbook sharing options --> <!-- modal for addressbook sharing options -->
<script type="text/ng-template" id="addressbookSharing.html"> <script type="text/ng-template" id="addressbookSharing.html">
<div id="modalACL"> <div id="modalACL">
<h2>Sharing</h2> <h2>Sharing</h2>
<div> <div>
<!-- left side --> <!-- left side -->
<div id="usersList"> <div id="usersList">
<div> <div>
<ul> <ul>
@ -135,6 +133,16 @@
<span class="close-reveal-modal" data-ng-click="closeModal()"><i class="icon-close"><!-- close --></i></span> <span class="close-reveal-modal" data-ng-click="closeModal()"><i class="icon-close"><!-- close --></i></span>
</script> </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"> <script type="text/ng-template" id="addressbooks.html">
<!-- dropdown menu for addressbook options button --> <!-- dropdown menu for addressbook options button -->
@ -143,16 +151,16 @@
<li> <li>
<span class="button"><i class="icon-hyperlink"><!-- links --></i></span> <span class="button"><i class="icon-hyperlink"><!-- links --></i></span>
</li> </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> <span class="button"><i class="icon-pencil" data-ng-click="edit()"><!-- rename --></i></span>
</li> </li>
<li data-ng-hide="addressbook.isRemote"> <li data-ng-show="!addressbook.isRemote">
<span class="button" data-ng-click="share()"><i class="icon-share"><!-- share --></i></span> <span class="button" data-ng-click="share()"><i class="icon-earth"><!-- share --></i></span>
</li> </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> <span class="button" data-ng-click="importCards()"><i class="icon-file"><!-- import --></i></span>
</li> </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> <span class="button" data-ng-click="confirmDelete(addressbook)"><i class="icon-trash"><!-- delete --></i></span>
</li> </li>
</ul> </ul>

View file

@ -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);
};
})();

View file

@ -178,19 +178,7 @@
$scope.share = function() { $scope.share = function() {
var modal = $modal.open({ var modal = $modal.open({
templateUrl: 'addressbookSharing.html', templateUrl: 'addressbookSharing.html',
controller: function($scope, $http, $modalInstance, sgAclUsers) { controller: function($scope, $modalInstance) {
/* 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;
};
$scope.closeModal = function() { $scope.closeModal = function() {
$modalInstance.close(); $modalInstance.close();
}; };

View file

@ -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 { .buttonsToolbar {
text-align: right; text-align: right;