user upadate: add/revoke project access
Change-Id: I81565801160e91fc10bb68ce92431bdab9383477
diff --git a/userhandler/templates/modal/user_edit.html b/userhandler/templates/modal/user_edit.html
index d3c3d38..caeeb3a 100644
--- a/userhandler/templates/modal/user_edit.html
+++ b/userhandler/templates/modal/user_edit.html
@@ -10,14 +10,15 @@
class="form-horizontal"
method="post" enctype="multipart/form-data">
{% csrf_token %}
+ <input type="hidden" id="projects_old" name="projects_old" value="asdasd">
<div class="modal-body" id="modal_edit_user_body">
- <div class="form-group">
+ {% comment %}<div class="form-group">
<label for="username_edit" class="col-sm-3 control-label">Username *</label>
<div class="col-sm-6">
<input class="form-control" id="username_edit" name="username"
placeholder="Username" required>
</div>
- </div>
+ </div>{% endcomment %}
<div class="form-group">
<label for=projects" class="col-sm-3 control-label">Default project *</label>
<div class="col-sm-6">
diff --git a/userhandler/templates/user_list.html b/userhandler/templates/user_list.html
index b83ec32..2a0092f 100644
--- a/userhandler/templates/user_list.html
+++ b/userhandler/templates/user_list.html
@@ -133,8 +133,8 @@
'data-toggle="dropdown" aria-expanded="false">Actions ' +
'<span class="fa fa-caret-down"></span></button> ' +
'<ul class="dropdown-menu">' +
- //'<li> <a href="#" onclick="javascript:openModalEditUser({user_id:\'' + row['_id'] + '\', usernarme:\'' + row['username'] + '\', projects: \'' + row['projects'] + '\'})">' +
- //'<i class="fa fa-edit"></i> Edit</a></li>' +
+ '<li> <a href="#" onclick="javascript:openModalEditUser({user_id:\'' + row['_id'] + '\', usernarme:\'' + row['username'] + '\', projects: \'' + row['projects'] + '\'})">' +
+ '<i class="fa fa-edit"></i> Edit</a></li>' +
'<li> <a href="#" onclick="javascript:deleteUser(\'' + row['_id'] + '\', \'' + row['username'] + '\')"' +
'style="color:red"><i class="fa fa-trash"></i> Delete</a></li> </ul></div>';
},
@@ -143,6 +143,57 @@
]
});
+ var select2_groups = $('#projects_edit').select2({
+ placeholder: 'Select Projects',
+ width: '100%',
+ ajax: {
+ url: '/projects/list',
+ dataType: 'json',
+ processResults: function (data) {
+ projects = [];
+ if (data['projects']) {
+ for (d in data['projects']) {
+ var project = data['projects'][d];
+ projects.push({
+ "id": project['_id'],
+ "text": project['name']
+ });
+
+ }
+ }
+
+ return {
+ results: projects
+ };
+ }
+ }
+ });
+
+ var select2_single = $('#default_project_edit').select2({
+ placeholder: 'Select Default Project',
+ width: '100%',
+ ajax: {
+ url: '/projects/list',
+ dataType: 'json',
+ processResults: function (data) {
+ projects = [];
+ if (data['projects']) {
+ for (d in data['projects']) {
+ var project = data['projects'][d];
+ projects.push({
+ id: project['_id'],
+ text: project['name']
+ });
+ }
+ }
+
+ return {
+ results: projects
+ };
+ }
+ }
+ });
+
setInterval(function () {
table.ajax.reload();
}, 10000);
@@ -150,9 +201,9 @@
$("#formEditUser").submit(function (event) {
event.preventDefault(); //prevent default action
var post_url = $(this).attr("action"); //get form action url
- var request_method = $(this).attr("method"); //get form GET/POST method
+ var request_method = $(this).attr("method");
var form_data = new FormData(this); //Encode form elements for submission
- console.log(post_url);
+
$.ajax({
url: post_url,
type: request_method,
@@ -164,10 +215,12 @@
processData: false
}).done(function (response, textStatus, jqXHR) {
$('#modal_edit_user').modal('hide');
+ table.ajax.reload();
bootbox.alert({
title: "Result",
- message: "User edited successfully."
+ message: "User modified successfully."
});
+
}).fail(function (result) {
var data = result.responseJSON;
var title = "Error " + (data.code ? data.code : 'unknown');
diff --git a/userhandler/urls.py b/userhandler/urls.py
index 9b07f43..2bd735b 100644
--- a/userhandler/urls.py
+++ b/userhandler/urls.py
@@ -18,7 +18,7 @@
from userhandler import views
urlpatterns = [
- url(r'^list$', views.list, name='list'),
+ url(r'^list$', views.user_list, name='list'),
url(r'^create$', views.create, name='create'),
url(r'^(?P<user_id>[0-9a-zA-Z]+)', views.update, name='update'),
url(r'^(?P<user_id>[0-9a-zA-Z]+)/delete$', views.delete, name='delete')
diff --git a/userhandler/views.py b/userhandler/views.py
index 05d5925..3aa227a 100644
--- a/userhandler/views.py
+++ b/userhandler/views.py
@@ -11,7 +11,7 @@
@login_required
-def list(request):
+def user_list(request):
user = osmutils.get_user(request)
client = Client()
result = client.user_list(user.get_token())
@@ -51,18 +51,29 @@
user = osmutils.get_user(request)
try:
client = Client()
- user_data = {
- "projects": request.POST.getlist('projects')
- }
- print user_data
- update_res = client.user_update(user.get_token(), user_id, user_data)
+ projects_old = request.POST.get('projects_old').split(',')
+ projects_new = request.POST.getlist('projects')
+ default_project = request.POST.get('default_project')
+ projects_new.append(default_project)
+ projects_to_add = list(set(projects_new) - set(projects_old))
+ projects_to_remove = list(set(projects_old) - set(projects_new))
+
+ payload = {}
+
+ for p in projects_to_remove:
+ payload["$"+str(p)] = None
+ for p in projects_to_add:
+ if p not in projects_old:
+ payload["$+"+str(p)] = str(p)
+ payload["$" + default_project] = None
+ payload["$+[0]"] = default_project
+
+ update_res = client.user_update(user.get_token(), user_id, {"projects": payload})
except Exception as e:
log.exception(e)
return __response_handler(request, {}, 'users:list', to_redirect=True, )
-
-
def __response_handler(request, data_res, url=None, to_redirect=None, *args, **kwargs):
raw_content_types = request.META.get('HTTP_ACCEPT', '*/*').split(',')
if 'application/json' in raw_content_types or url is None: