6,603 changes: 6,603 additions & 0 deletions geonode/static/lib/js/select2.full.js

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions geonode/static/lib/js/select2.full.min.js

Large diffs are not rendered by default.

3,541 changes: 0 additions & 3,541 deletions geonode/static/lib/js/select2.js

This file was deleted.

23 changes: 0 additions & 23 deletions geonode/static/lib/js/select2.min.js

This file was deleted.

33 changes: 21 additions & 12 deletions geonode/templates/_permissions.html
Original file line number Diff line number Diff line change
@@ -1,4 +1,13 @@
{% load i18n %}

<style>
.select2-selection.required {
background-color: #ffffcc !important;
/* border-color: #ff9999;
border-width: 3px; */
}
</style>

<div class="panel-group" id="permissions-body">
<!-- view layer -->
<div class="panel panel-default">
Expand All @@ -20,13 +29,13 @@ <h4 class="panel-title">
<div class="radio">
<label>
{% trans "The following users:" %}
<input class="user-select" type="text" name="view_resourcebase" id="view_resourcebase_users" />
<select class="user-select" name="view_resourcebase" id="view_resourcebase_users" required></select>
</label>
</div>
<div class="radio">
<label>
{% trans "The following groups:" %}
<input class="group-select" type="text" name="view_resourcebase" id="view_resourcebase_groups" />
<select class="group-select" name="view_resourcebase" id="view_resourcebase_groups"></select>
</label>
</div>
</div>
Expand All @@ -52,13 +61,13 @@ <h4 class="panel-title">
<div class="radio">
<label>
{% trans "The following users:" %}
<input class="user-select" type="text" name="download_resourcebase" id="download_resourcebase_users" />
<select class="user-select" name="download_resourcebase" id="download_resourcebase_users" required></select>
</label>
</div>
<div class="radio">
<label>
{% trans "The following groups:" %}
<input class="group-select" type="text" name="download_resourcebase" id="download_resourcebase_groups" />
<select class="group-select" name="download_resourcebase" id="download_resourcebase_groups"></select>
</label>
</div>
</div>
Expand All @@ -78,13 +87,13 @@ <h4 class="panel-title">
<div class="radio">
<label>
{% trans "The following users:" %}
<input class="user-select" type="text" name="change_resourcebase_metadata" id="change_resourcebase_metadata_users" />
<select class="user-select" name="change_resourcebase_metadata" id="change_resourcebase_metadata_users" required></select>
</label>
</div>
<div class="radio">
<label>
{% trans "The following groups:" %}
<input class="group-select" type="text" name="change_resourcebase_metadata" id="change_resourcebase_metadata_groups" />
<select class="group-select" name="change_resourcebase_metadata" id="change_resourcebase_metadata_groups"></select>
</label>
</div>
</div>
Expand All @@ -105,13 +114,13 @@ <h4 class="panel-title">
<div class="radio">
<label>
{% trans "The following users:" %}
<input class="user-select" type="text" name="change_layer_data" id="change_layer_data_users" />
<select class="user-select" name="change_layer_data" id="change_layer_data_users" required></select>
</label>
</div>
<div class="radio">
<label>
{% trans "The following groups:" %}
<input class="group-select" type="text" name="change_layer_data" id="change_layer_data_groups" />
<select class="group-select" name="change_layer_data" id="change_layer_data_groups"></select>
</label>
</div>
</div>
Expand All @@ -131,13 +140,13 @@ <h4 class="panel-title">
<div class="radio">
<label>
{% trans "The following users:" %}
<input class="user-select" type="text" name="change_layer_style" id="change_layer_style_users" />
<select class="user-select" name="change_layer_style" id="change_layer_style_users" required></select>
</label>
</div>
<div class="radio">
<label>
{% trans "The following groups:" %}
<input class="group-select" type="text" name="change_layer_style" id="change_layer_style_groups" />
<select class="group-select" name="change_layer_style" id="change_layer_style_groups"></select>
</label>
</div>
</div>
Expand All @@ -158,13 +167,13 @@ <h4 class="panel-title">
<div class="radio">
<label>
{% trans "The following users:" %}
<input class="user-select" type="text" name="manage_resourcebase" id="manage_resourcebase_users" />
<select class="user-select" name="manage_resourcebase" id="manage_resourcebase_users" required></select>
</label>
</div>
<div class="radio">
<label>
{% trans "The following groups:" %}
<input class="group-select" type="text" name="manage_resourcebase" id="manage_resourcebase_groups" />
<select class="group-select" name="manage_resourcebase" id="manage_resourcebase_groups"></select>
</label>
</div>
</div>
Expand Down
153 changes: 79 additions & 74 deletions geonode/templates/_permissions_form_js.html
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
{% load i18n %}



<script type="text/javascript">

function permissionsString(form, type) {
Expand Down Expand Up @@ -35,15 +33,20 @@
* Cycle through permissions to map the form structure perm = ['user1',',user2'] to
* the geonode user = ['perm1','perm2'], the same for groups
*/

for(var perm in data){
if(data[perm][0] !== ''){
if(data[perm] !== ''){
var perms_to_assign = [perm];
if(perm=='manage_resourcebase'){
perms_to_assign = ['change_resourcebase', 'delete_resourcebase', 'change_resourcebase_permissions', 'publish_resourcebase'];
}
for (var i=0;i<data[perm][0].split(',').length;i++){
var user = data[perm][0].split(',')[i];
var d_perms = '';
if (data[perm] instanceof Array) {
d_perms = data[perm][0];
} else {
d_perms = data[perm];
}
for (var i=0;i<d_perms.split(',').length;i++){
var user = d_perms.split(',')[i];
for(var j=0;j< perms_to_assign.length;j++){
if(permissions['users'].hasOwnProperty(user)){
permissions['users'][user].push(perms_to_assign[j]);
Expand All @@ -53,13 +56,19 @@
}
}
}
if(data[perm][1] !== ''){
if(data[perm] instanceof Array && data[perm].length == 2){
var perms_to_assign = [perm];
if(perm=='manage_resourcebase'){
perms_to_assign = ['change_resourcebase', 'delete_resourcebase', 'change_resourcebase_permissions', 'publish_resourcebase'];
}
for (var i=0;i<data[perm][1].split(',').length;i++){
var group = data[perm][1].split(',')[i];
var d_perms = '';
if (data[perm] instanceof Array) {
d_perms = data[perm][1];
} else {
d_perms = data[perm];
}
for (var i=0;i<d_perms.split(',').length;i++){
var group = d_perms.split(',')[i];
for(var j=0;j< perms_to_assign.length;j++){
if(permissions['groups'].hasOwnProperty(group)){
permissions['groups'][group].push(perms_to_assign[j]);
Expand Down Expand Up @@ -154,7 +163,10 @@
users[user_perms[i]].push(user);
}
}
$('#' + perm + '_users').val(users[perm].join());
// $('#' + perm + '_users').val(users[perm].join());
$(users[perm]).each(function( index ) {
$('#' + perm + '_users').append(new Option(this, this));
});
}
addSelectUsers();

Expand Down Expand Up @@ -187,11 +199,12 @@
}
}
for (var perm in groups){
$('#' + perm + '_groups').val(groups[perm].join());
// $('#' + perm + '_groups').val(groups[perm].join());
$(groups[perm]).each(function( index ) {
$('#' + perm + '_groups').append(new Option(this, this));
});
}

addSelectGroups();

}
}
);
Expand All @@ -202,101 +215,93 @@
});

function addSelectUsers(){
$("input.user-select").select2({
$(".user-select").select2({
placeholder: '{% trans "Choose users..." %}',
tags: true,
tokenSeparators: [',', ' '],
minimumInputLength: 1,
multiple: true,
width: 'copy',
containerCssClass: function(e) {
return $(e).attr('required') ? 'required' : '';
},
ajax: {
url: "{% url "account_ajax_lookup" %}",
dataType: "json",
delay: 250,
type: "POST",
data: function (term, page) {
data: function (params) {
this.data('term', params.term);
return {
query: term,
query: params.term,
page: params.page || 1,
pageSize: 9
};
},
results: function (data, page) {
return {results: data.users};
}
},
id: userID,
formatResult: userFormatResult,
formatSelection: userFormatSelection,
initSelection: function(element, callback) {
var data = [];
var val = element.val().split(",");
$(val).each(function (index, value) {
data.push({username: value});
});
callback(data);
processResults: function (data, params) {
if (data.users.length)
return {
results: data.users.map(d => ({id: d.username, text: d.username})),
pagination: {
// more: !!data.paging.next
more: false
}
};
else
return {
results: [/* { id: this.$element.data('term'), text: this.$element.data('term') } */],
pagination: {
more: false
}
};
},
cache: true
}
});
}

function addSelectGroups(){
$("input.group-select").select2({
$(".group-select").select2({
placeholder: '{% trans "Choose groups..." %}',
minimumInputLength: 1,
multiple: true,
width: 'copy',
ajax: {
url: "{% url "account_ajax_lookup" %}",
dataType: "json",
delay: 250,
type: "POST",
data: function (term, page) {
data: function (params) {
this.data('term', params.term);
return {
query: term,
query: params.term,
page: params.page || 1,
pageSize: 9
};
},
results: function (data, page) {
return {results: data.groups};
}
},
id: groupID,
formatResult: groupFormatResult,
formatSelection: groupFormatSelection,
initSelection: function(element, callback) {
var data = [];
var val = element.val().split(",");
$(val).each(function (index, value) {
data.push({name: value});
});
callback(data);
processResults: function (data, params) {
if (data.groups.length)
return {
results: data.groups.map(d => ({id: d.name, text: d.title})),
pagination: {
// more: !!data.paging.next
more: false
}
};
else
return {
results: [/* { id: this.$element.data('term'), text: this.$element.data('term') } */],
pagination: {
more: false
}
};
},
cache: true
}
});
}

function userID(user) {
return user.username;
}

function groupID(group) {
return group.name;
}

function userFormatResult(user) {
return user.username;
}

function userFormatSelection(user) {
return user.username;
}

function groupFormatResult(group) {
return group.title;
}

function groupFormatSelection(group) {
return group.name;
}

var perms_submit = function() {
var form = $(this);
var action = form.attr("action");

var permissions = permissionsString(form, 'base');
$.ajax(
{
Expand Down