2016-07-07 18:54:16 -07:00
// Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved.
//
2016-08-17 15:37:46 +02:00
// This software (Documize Community Edition) is licensed under
2016-07-07 18:54:16 -07:00
// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html
//
// You can operate outside the AGPL restrictions by purchasing
// Documize Enterprise Edition and obtaining a commercial license
2016-08-17 15:37:46 +02:00
// by contacting <sales@documize.com>.
2016-07-07 18:54:16 -07:00
//
// https://documize.com
import Ember from 'ember' ;
2016-11-06 20:11:21 -08:00
import NotifierMixin from '../../mixins/notifier' ;
2016-07-07 18:54:16 -07:00
2016-08-17 15:37:46 +02:00
const {
inject : { service }
} = Ember ;
2017-03-24 13:10:32 +00:00
export default Ember . Component . extend ( NotifierMixin , {
2016-08-17 15:37:46 +02:00
folderService : service ( 'folder' ) ,
userService : service ( 'user' ) ,
2017-03-24 13:10:32 +00:00
appMeta : service ( ) ,
2016-08-23 10:13:29 +02:00
store : service ( ) ,
2016-07-07 18:54:16 -07:00
2017-03-24 13:10:32 +00:00
didReceiveAttrs ( ) {
2017-09-22 10:22:52 +01:00
this . get ( 'userService' ) . getSpaceUsers ( this . get ( 'folder.id' ) ) . then ( ( users ) => {
2017-03-24 13:10:32 +00:00
this . set ( 'users' , users ) ;
2016-07-07 18:54:16 -07:00
2017-09-14 12:54:57 +01:00
// set up users
let folderPermissions = [ ] ;
2016-07-07 18:54:16 -07:00
2016-08-23 10:13:29 +02:00
users . forEach ( ( user ) => {
let u = {
2017-03-24 13:10:32 +00:00
orgId : this . get ( 'folder.orgId' ) ,
2017-09-14 12:54:57 +01:00
folderId : this . get ( 'folder.id' ) ,
userId : user . get ( 'id' ) ,
fullname : user . get ( 'fullname' ) ,
2017-09-13 19:22:38 +01:00
spaceView : false ,
spaceManage : false ,
spaceOwner : false ,
2017-09-14 12:54:57 +01:00
documentAdd : false ,
documentEdit : false ,
documentDelete : false ,
documentMove : false ,
documentCopy : false ,
documentTemplate : false
2016-08-23 10:13:29 +02:00
} ;
2017-09-22 10:22:52 +01:00
let data = this . get ( 'store' ) . normalize ( 'space-permission' , u )
folderPermissions . pushObject ( this . get ( 'store' ) . push ( data ) ) ;
2016-08-23 10:13:29 +02:00
} ) ;
2017-09-14 12:54:57 +01:00
// set up Everyone user
let u = {
2017-03-24 13:10:32 +00:00
orgId : this . get ( 'folder.orgId' ) ,
2017-09-14 12:54:57 +01:00
folderId : this . get ( 'folder.id' ) ,
2017-10-03 17:52:03 -04:00
userId : '0' ,
2017-09-14 12:54:57 +01:00
fullname : ' Everyone' ,
2017-09-13 19:22:38 +01:00
spaceView : false ,
spaceManage : false ,
spaceOwner : false ,
2017-09-14 12:54:57 +01:00
documentAdd : false ,
documentEdit : false ,
documentDelete : false ,
documentMove : false ,
documentCopy : false ,
documentTemplate : false
2017-09-21 15:48:00 +01:00
} ;
2016-07-07 18:54:16 -07:00
2017-09-14 12:54:57 +01:00
let data = this . get ( 'store' ) . normalize ( 'space-permission' , u )
folderPermissions . pushObject ( this . get ( 'store' ) . push ( data ) ) ;
2016-07-07 18:54:16 -07:00
2017-03-24 13:10:32 +00:00
this . get ( 'folderService' ) . getPermissions ( this . get ( 'folder.id' ) ) . then ( ( permissions ) => {
2017-03-19 11:37:18 +00:00
permissions . forEach ( ( permission , index ) => { // eslint-disable-line no-unused-vars
2017-09-15 11:08:05 +01:00
let record = folderPermissions . findBy ( 'userId' , permission . get ( 'userId' ) ) ;
if ( is . not . undefined ( record ) ) {
record = Ember . setProperties ( record , permission ) ;
2016-07-07 18:54:16 -07:00
}
} ) ;
2017-03-24 13:10:32 +00:00
this . set ( 'permissions' , folderPermissions . sortBy ( 'fullname' ) ) ;
2016-07-07 18:54:16 -07:00
} ) ;
2017-08-07 14:42:02 +01:00
} ) ;
2016-07-07 18:54:16 -07:00
} ,
2017-03-24 13:10:32 +00:00
getDefaultInvitationMessage ( ) {
2017-09-15 11:08:05 +01:00
return "Hey there, I am sharing the " + this . get ( 'folder.name' ) + " space (in " + this . get ( "appMeta.title" ) + ") with you so we can both collaborate on documents." ;
2017-03-24 13:10:32 +00:00
} ,
2016-07-07 18:54:16 -07:00
2017-03-24 13:10:32 +00:00
actions : {
setPermissions ( ) {
let message = this . getDefaultInvitationMessage ( ) ;
let permissions = this . get ( 'permissions' ) ;
2017-09-15 11:08:05 +01:00
let folder = this . get ( 'folder' ) ;
let payload = { Message : message , Permissions : permissions } ;
2017-08-07 14:42:02 +01:00
2017-09-15 11:08:05 +01:00
let hasEveryone = _ . find ( permissions , function ( permission ) {
2017-10-03 17:52:03 -04:00
return permission . get ( 'userId' ) === "0" &&
2017-09-15 11:08:05 +01:00
( permission . get ( 'spaceView' ) || permission . get ( 'documentAdd' ) || permission . get ( 'documentEdit' ) || permission . get ( 'documentDelete' ) ||
permission . get ( 'documentMove' ) || permission . get ( 'documentCopy' ) || permission . get ( 'documentTemplate' ) ) ;
2016-07-07 18:54:16 -07:00
} ) ;
2017-03-24 13:10:32 +00:00
2017-09-15 11:08:05 +01:00
this . get ( 'folderService' ) . savePermissions ( folder . get ( 'id' ) , payload ) . then ( ( ) => {
this . showNotification ( 'Saved permissions' ) ;
} ) ;
if ( is . not . undefined ( hasEveryone ) ) {
folder . markAsPublic ( ) ;
this . showNotification ( 'Marked space as public' ) ;
} else {
if ( permissions . length > 1 ) {
folder . markAsRestricted ( ) ;
this . showNotification ( 'Marked space as protected' ) ;
} else {
folder . markAsPrivate ( ) ;
this . showNotification ( 'Marked space as private' ) ;
}
}
2016-07-07 18:54:16 -07:00
}
}
2016-07-24 14:49:40 -07:00
} ) ;