From 3dda2ca00e4b0a59af54b5db739da3c4f3d9cb02 Mon Sep 17 00:00:00 2001
From: Oláh István Gergely <olah.istvan.gergely@cloud.bme.hu>
Date: Fri, 7 Mar 2014 12:05:35 +0100
Subject: [PATCH] dashboard: fix group-details member-removing ajax

---
 circle/dashboard/static/dashboard/group-details.js            | 42 +++++++++++++++++++++++++++++++++++++++++-
 circle/dashboard/templates/dashboard/confirm/ajax-remove.html | 22 ++++++++++++++++++++++
 circle/dashboard/templates/dashboard/group-detail.html        |  6 +++---
 circle/dashboard/urls.py                                      |  6 +++---
 circle/dashboard/views.py                                     | 10 +++++-----
 5 files changed, 74 insertions(+), 12 deletions(-)
 create mode 100644 circle/dashboard/templates/dashboard/confirm/ajax-remove.html

diff --git a/circle/dashboard/static/dashboard/group-details.js b/circle/dashboard/static/dashboard/group-details.js
index 19b2f15..8a6be48 100644
--- a/circle/dashboard/static/dashboard/group-details.js
+++ b/circle/dashboard/static/dashboard/group-details.js
@@ -1,4 +1,3 @@
-
   /* rename */
   $("#group-details-h1-name, .group-details-rename-button").click(function() {
     $("#group-details-h1-name").hide();
@@ -25,3 +24,44 @@
     });
     return false;
   });
+
+  /* for Node removes buttons */
+  $('.delete-from-group').click(function() {
+    var href = $(this).attr('href');
+    var group = $(this).data('group_pk');
+    var member = $(this).data('member_pk');
+    var dir = window.location.pathname.indexOf('list') == -1;
+    addModalConfirmation(removeMember, 
+      { 'url': href,
+        'data': [],
+        'group_pk': group,
+        'member_pk': member,
+        'type': "user",
+        'redirect': dir});
+
+    return false;
+  });
+
+function removeMember(data) {
+  $.ajax({
+    type: 'POST',
+    url: data['url'],
+    headers: {"X-CSRFToken": getCookie('csrftoken')},
+    success: function(re, textStatus, xhr) {
+      if(!data['redirect']) {
+        selected = [];
+        addMessage(re['message'], 'success');
+        $('a[data-'+data['type']+'-pk="' + data['pk'] + '"]').closest('tr').fadeOut(function() {
+          $(this).remove();
+        });
+      } else {
+        window.location.replace('/dashboard');
+      }
+    },
+    error: function(xhr, textStatus, error) {
+      addMessage('Uh oh :(', 'danger')
+    }
+  });
+}
+
+
diff --git a/circle/dashboard/templates/dashboard/confirm/ajax-remove.html b/circle/dashboard/templates/dashboard/confirm/ajax-remove.html
new file mode 100644
index 0000000..794b1fd
--- /dev/null
+++ b/circle/dashboard/templates/dashboard/confirm/ajax-remove.html
@@ -0,0 +1,22 @@
+{% load i18n %}
+<div class="modal fade" id="confirmation-modal" tabindex="-1" role="dialog"> 
+  <div class="modal-dialog"> 
+    <div class="modal-content"> 
+      <div class="modal-body">  
+        {% if text %}
+          {{ text }}
+        {% else %}
+          {%blocktrans with object=object%}
+	  Are you sure you want to remove <strong>{{ member }}</strong> from <strong>{{ object }}</strong>?
+          {%endblocktrans%}
+        {% endif %}
+        <br />
+        <div class="pull-right" style="margin-top: 15px;">
+          <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button> 
+          <button id="confirmation-modal-button" type="button" class="btn btn-warning">Remove</button> 
+        </div>
+        <div class="clearfix"></div>
+      </div>
+    </div><!-- /.modal-content --> 
+  </div><!-- /.modal-dialog --> 
+</div>
diff --git a/circle/dashboard/templates/dashboard/group-detail.html b/circle/dashboard/templates/dashboard/group-detail.html
index b334606..b220ab7 100644
--- a/circle/dashboard/templates/dashboard/group-detail.html
+++ b/circle/dashboard/templates/dashboard/group-detail.html
@@ -40,7 +40,7 @@
      <thead><tr><th></th><th>{% trans "Who" %}</th><th></th><th></th></tr></thead>
         {% for i in users %}
 	<tr><td><i class="icon-user"></i></td><td>{{i.username}}</td>
-		<td><a data-groupmember-pk="{{i.pk}}" href="{% url "dashboard.views.remove-user" user_pk=i.pk group_pk=group.pk %}?next={{ request.path }}" class="real-link groupmember-delete btn btn-link btn-xs"><i class="icon-remove"><span class="sr-only">{% trans "remove" %}</span></i></a></td></tr>
+		<td><a data-group_pk="{{ group.pk }}" data-member_pk="{{i.pk}}" href="{% url "dashboard.views.remove-user" member_pk=i.pk group_pk=group.pk %}?next={{ request.path }}" class="real-link delete-from-group btn btn-link btn-xs"><i class="icon-remove"><span class="sr-only">{% trans "remove" %}</span></i></a></td></tr>
         {% endfor %}
         <tr><td><i class="icon-plus"></i></td>
             <td><input type="text" class="form-control" name="list-new-name"
@@ -66,7 +66,7 @@
                     <option{%if id = i.level%} selected="selected"{%endif%} value="{{id}}">{{name}}</option>
                     {% endfor %}
             </select></td>
-	    <td class="user-remove"><a data-groupaclmember-pk="{{i.user.id}}" href="{% url "dashboard.views.remove-acluser" user_pk=i.user.pk group_pk=group.pk %}?next={{ request.path }}" class="real-link groupacl-delete btn btn-link btn-xs"><i class="icon-remove"><span class="sr-only">{% trans "remove" %}</span></i></a></td></tr>
+	    <td class="user-remove"><a data-group_pk="{{ group.pk }}" data-member_pk="{{i.user.pk }}" href="{% url "dashboard.views.remove-acluser" member_pk=i.user.pk group_pk=group.pk %}?next={{ request.path }}" class="real-link delete-from-group btn btn-link btn-xs"><i class="icon-remove"><span class="sr-only">{% trans "remove" %}</span></i></a></td></tr>
         {% endfor %}
         {% for i in acl.groups %}
         <tr><td><i class="icon-user"></i></td><td>{{ i.group }}</td>
@@ -75,7 +75,7 @@
                     <option{%if id = i.level%} selected="selected"{%endif%} value="{{id}}">{{name}}</option>
                     {% endfor %}
             </select></td>
-	    <td class="user-remove"><a data-groupaclmember-pk="{{i.group.pk }}" href="{% url "dashboard.views.remove-aclgroup" user_pk=i.group.pk group_pk=group.pk %}?next={{ request.path }}" class="real-link groupacl-delete btn btn-link btn-xs"><i class="icon-remove"><span class="sr-only">{% trans "remove" %}</span></i></a></td></tr>
+	    <td class="user-remove"><a data-group_pk="{{ i.pk }}"data-member_pk="{{i.group.pk }}" href="{% url "dashboard.views.remove-aclgroup" member_pk=i.group.pk group_pk=group.pk %}?next={{ request.path }}" class="real-link delete-from-group btn btn-link btn-xs"><i class="icon-remove"><span class="sr-only">{% trans "remove" %}</span></i></a></td></tr>
         {% endfor %}
         <tr><td><i class="icon-plus"></i></td>
             <td><input type="text" class="form-control" name="perm-new-name"
diff --git a/circle/dashboard/urls.py b/circle/dashboard/urls.py
index bc6c25b..c1bd39b 100644
--- a/circle/dashboard/urls.py
+++ b/circle/dashboard/urls.py
@@ -103,13 +103,13 @@ urlpatterns = patterns(
         name="dashboard.views.disk-add"),
     url(r'^profile/$', MyPreferencesView.as_view(),
         name="dashboard.views.profile"),
-    url(r'^group/(?P<group_pk>\d+)/remove/acl/user/(?P<user_pk>\d+)/$',
+    url(r'^group/(?P<group_pk>\d+)/remove/acl/user/(?P<member_pk>\d+)/$',
         GroupRemoveAclUserView.as_view(),
         name="dashboard.views.remove-acluser"),
-    url(r'^group/(?P<group_pk>\d+)/remove/acl/group/(?P<user_pk>\d+)/$',
+    url(r'^group/(?P<group_pk>\d+)/remove/acl/group/(?P<member_pk>\d+)/$',
         GroupRemoveAclGroupView.as_view(),
         name="dashboard.views.remove-aclgroup"),
-    url(r'^group/(?P<group_pk>\d+)/remove/user/(?P<user_pk>\d+)/$',
+    url(r'^group/(?P<group_pk>\d+)/remove/user/(?P<member_pk>\d+)/$',
         GroupRemoveUserView.as_view(),
         name="dashboard.views.remove-user"),
     url(r'^group/create/$', GroupCreate.as_view(),
diff --git a/circle/dashboard/views.py b/circle/dashboard/views.py
index 7adc300..62b7ae7 100644
--- a/circle/dashboard/views.py
+++ b/circle/dashboard/views.py
@@ -1012,7 +1012,7 @@ class GroupRemoveUserView(LoginRequiredMixin, DeleteView):
     def get_context_data(self, **kwargs):
         context = super(GroupRemoveUserView, self).get_context_data(**kwargs)
         try:
-            context['member'] = User.objects.get(pk=self.user_pk)
+            context['member'] = User.objects.get(pk=self.member_pk)
         except User.DoesNotExist:
             raise Http404()
         return context
@@ -1024,8 +1024,8 @@ class GroupRemoveUserView(LoginRequiredMixin, DeleteView):
         else:
             return reverse_lazy('dashboard.views.group-list')
 
-    def get(self, request, user_pk, *args, **kwargs):
-        self.user_pk = user_pk
+    def get(self, request, member_pk, *args, **kwargs):
+        self.member_pk = member_pk
         return super(GroupRemoveUserView, self).get(request, *args, **kwargs)
 
     def get_template_names(self):
@@ -1042,7 +1042,7 @@ class GroupRemoveUserView(LoginRequiredMixin, DeleteView):
         return _("Member successfully removed from group!")
 
     def delete(self, request, *args, **kwargs):
-        self.remove_member(kwargs["user_pk"])
+        self.remove_member(kwargs["member_pk"])
         success_url = self.get_success_url()
         success_message = self.get_success_message()
 
@@ -1071,7 +1071,7 @@ class GroupRemoveAclGroupView(GroupRemoveUserView):
     def get_context_data(self, **kwargs):
         context = super(GroupRemoveUserView, self).get_context_data(**kwargs)
         try:
-            context['member'] = Group.objects.get(pk=self.user_pk)
+            context['member'] = Group.objects.get(pk=self.member_pk)
         except User.DoesNotExist:
             raise Http404()
         return context
--
libgit2 0.26.0