Revert "file lost through rebasing"

This reverts commit a952402c39.
pull/91/head
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/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

View File

@ -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];

View File

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

View File

@ -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];

View File

@ -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>

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

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