@@ -27,17 +27,6 @@ var Sharing = {
27
27
}
28
28
}
29
29
30
- // This ensures that if a project permission is added, and that project is associated with the resource, it gains
31
- // the "isMandatory" flag.
32
- if ( permission . contributor_type === 'Project' && Sharing . projectsSelector ) {
33
- for ( var j = 0 ; j < Sharing . projectsSelector . selected . length ; j ++ ) {
34
- if ( Sharing . projectsSelector . selected [ j ] . id === permission . contributor_id ) {
35
- permission . isMandatory = true ;
36
- break ;
37
- }
38
- }
39
- }
40
-
41
30
Sharing . permissionsTable . permissions . push ( permission ) ;
42
31
} ,
43
32
@@ -47,20 +36,7 @@ var Sharing = {
47
36
contributor_type : 'Project' ,
48
37
contributor_id : project . id ,
49
38
title : project . title ,
50
- access_type : Sharing . associatedProjectAccessType ,
51
- isMandatory : true } , true ) ;
52
- } ,
53
-
54
- removeMandatoryProjectPermissions : function ( ) {
55
- if ( ! Sharing . permissionsTable )
56
- return ;
57
- var indices = [ ] ;
58
- for ( var i = Sharing . permissionsTable . permissions . length - 1 ; i >= 0 ; i -- ) {
59
- if ( Sharing . permissionsTable . permissions [ i ] . contributor_type === 'Project' &&
60
- Sharing . permissionsTable . permissions [ i ] . isMandatory ) {
61
- Sharing . permissionsTable . permissions . splice ( i , 1 ) ;
62
- }
63
- }
39
+ access_type : Sharing . associatedProjectAccessType } , true ) ;
64
40
} ,
65
41
66
42
removePermissionForProject : function ( project ) {
@@ -72,13 +48,12 @@ var Sharing = {
72
48
}
73
49
if ( confirm ( 'Do you want to remove any permissions for ' + project . title + '?' ) ) {
74
50
Sharing . permissionsTable . permissions . splice ( i , 1 ) ;
75
- } else {
76
- Sharing . permissionsTable . permissions [ i ] . isMandatory = false ;
77
51
}
78
52
} ,
79
53
80
54
requestInstitutionsUrl : '<%= request_institutions_projects_path %>' ,
81
55
requestAllInstitutionsUrl : '<%= request_all_sharing_form_institutions_path %>' ,
56
+ requestDefaultDataUrl : '<%= default_data_project_path(' _replaceme_ ') %>' ,
82
57
83
58
accessTypes : {
84
59
noAccess : < %= Policy ::NO_ACCESS % > ,
@@ -120,15 +95,29 @@ var Sharing = {
120
95
} ,
121
96
122
97
// Ask if they want to use the default policy (if there is one)
123
- defaultPolicyPrompt: function (project, skipPrompt) {
98
+ defaultPolicyPrompt: function (project, policy, skipPrompt) {
124
99
if ( ! Sharing . permissionsTable )
125
100
return ;
126
101
127
- if ( Sharing . defaultPolicies [ project . id ] && ( skipPrompt || confirm ( '' + project . title + ' has a default sharing policy specified, do you want to apply it?' ) ) ) {
128
- Sharing . applyPolicy ( Sharing . defaultPolicies [ project . id ] ) ;
102
+ if ( policy && ( skipPrompt || confirm ( '' + project . title + ' has a default sharing policy specified, do you want to apply it?' ) ) ) {
103
+ Sharing . applyPolicy ( policy ) ;
129
104
} else { // Otherwise just add a permission for the project
130
105
Sharing . addPermissionForProject ( project ) ;
131
106
}
107
+ } ,
108
+
109
+ fetchDefaultData : function ( project ) {
110
+ return new Promise ( ( resolve , reject ) => {
111
+ $j . ajax ( Sharing . requestDefaultDataUrl . replace ( '_replaceme_' , project . id ) , {
112
+ success : function ( data ) {
113
+ resolve ( data ) ;
114
+ } ,
115
+ complete : function ( ) {
116
+ resolve ( { } ) ;
117
+ }
118
+ }
119
+ ) ;
120
+ } ) ;
132
121
}
133
122
} ;
134
123
@@ -171,7 +160,8 @@ Vue.component('permissions-table', {
171
160
computed : {
172
161
sortedPermissions : function ( ) {
173
162
return this . permissions . sort ( function ( a , b ) {
174
- return ( b . isMandatory || false ) - ( a . isMandatory || false ) ;
163
+ return ( ( b . contributor_type === 'Project' ) && Sharing . getSelectedProjectIds ( ) . includes ( b . contributor_id ) ) -
164
+ ( ( a . contributor_type === 'Project' ) && Sharing . getSelectedProjectIds ( ) . includes ( a . contributor_id ) ) ;
175
165
} ) ;
176
166
}
177
167
} ,
@@ -185,14 +175,14 @@ Vue.component('permissions-table', {
185
175
Vue.component('permission-row', {
186
176
props : [ 'index' , 'permission' , 'accessTypes' , 'publicAccessType' , 'fieldPrefixOrig' ] ,
187
177
template :
188
- '<tr class="permission-row" :class="{ mandatory: permission.isMandatory , hidden: permission.contributor_type === \'FavouriteGroup\' }">' +
178
+ '<tr class="permission-row" :class="{ mandatory: mandatory , hidden: permission.contributor_type === \'FavouriteGroup\' }">' +
189
179
'<td class="name-cell" :title="permission.title"><span class="type-icon-wrapper"><img :src="typeIcon" class="type-icon" :title="permission.contributor_type || \'All visitors\'"/></span> {{ permission.title }}' +
190
180
'<input v-if="permission.contributor_type" type="hidden" :name="fieldPrefix+\'[contributor_type]\'" v-model="permission.contributor_type"/>' +
191
181
'<input v-if="permission.contributor_id" type="hidden" :name="fieldPrefix+\'[contributor_id]\'" v-model="permission.contributor_id"/>' +
192
182
'</td>' +
193
183
'<td is="privilege-cell" v-for="accessType in accessTypes" :fieldPrefix="fieldPrefix" :permission="permission" :access-type="accessType" :public-access-type="publicAccessType"></td>' +
194
184
'<td class="actions-cell">' +
195
- '<a v-if="!permission.isMandatory " @click="$emit(\'delete-permission\')" class="clickable remove-button" title="Remove this permission">' +
185
+ '<a v-if="!mandatory " @click="$emit(\'delete-permission\')" class="clickable remove-button" title="Remove this permission">' +
196
186
'<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>' +
197
187
'</a>' +
198
188
'</td>' +
@@ -216,6 +206,15 @@ Vue.component('permission-row', {
216
206
}
217
207
218
208
return '<%= asset_path icon_filename_for_key(' world ') %>' ;
209
+ } ,
210
+ mandatory : function ( ) {
211
+ if ( this . permission . isPublic ) {
212
+ return true ;
213
+ }
214
+ if ( this . permission . contributor_type === 'Project' ) {
215
+ return Sharing . getSelectedProjectIds ( ) . includes ( this . permission . contributor_id ) ;
216
+ }
217
+ return false ;
219
218
}
220
219
}
221
220
} );
0 commit comments