Browse Source

[useradmin] Bulk delete groups frontend

Refactored templates to emulate the delete users files to pass names to
backend instead of individual group names.
Paul McCaughtry 11 năm trước cách đây
mục cha
commit
e2780ba9cd

+ 13 - 9
apps/useradmin/src/useradmin/templates/delete_group.mako

@@ -16,13 +16,17 @@
 <%!
 from django.utils.translation import ugettext as _
 %>
-<form id="deleteGroupForm" action="${path}" method="POST">
-<div class="modal-header">
-    <a href="#" class="close" data-dismiss="modal">&times;</a>
-    <h3 id="deleteGroupMessage">${_("Are you sure you want to delete")} ${groupname}${_("?")}</h3>
-</div>
-<div class="modal-footer">
-    <a href="javascript:void(0);" class="btn" data-dismiss="modal">${_('No')}</a>
-    <input type="submit" class="btn btn-danger" value="${_('Yes')}"/>
-</div>
+<form id="deleteGroupForm" action="${ url('useradmin.views.delete_group') }" method="POST">
+  <div class="modal-header">
+      <a href="#" class="close" data-dismiss="modal">&times;</a>
+      <h3 id="deleteGroupMessage">${_("Are you sure you want to delete the selected group(s)?")}</h3>
+  </div>
+  <div class="modal-footer">
+      <a href="javascript:void(0);" class="btn" data-dismiss="modal">${_('No')}</a>
+      <input type="submit" class="btn btn-danger" value="${_('Yes')}"/>
+  </div>
+  <div class="hide">
+    <select name="group_ids" data-bind="options: availableUsers, selectedOptions: chosenUsers"
+            multiple="true"></select>
+  </div>
 </form>

+ 20 - 2
apps/useradmin/src/useradmin/templates/list_groups.mako

@@ -83,7 +83,7 @@ ${layout.menubar(section='groups')}
           <td>
             %if user.is_superuser:
               <strong><a title="${_('Edit %(groupname)s') % dict(groupname=group.name)}"
-                         href="${ url('useradmin.views.edit_group', name=urllib.quote(group.name)) }"
+                         href="${ url('useradmin.views.edit_group', name=urllib.quote(group.name))}"
                          data-row-selector="true">${group.name}</a></strong>
             %else:
               <strong>${group.name}</strong>
@@ -109,8 +109,16 @@ ${layout.menubar(section='groups')}
 
 <div id="deleteGroup" class="modal hide fade groupModal"></div>
 
+<script src="/static/ext/js/knockout-min.js" type="text/javascript" charset="utf-8"></script>
 <script type="text/javascript" charset="utf-8">
   $(document).ready(function () {
+    var viewModel = {
+      availableUsers: ko.observableArray(${ groups_json | n }),
+      chosenUsers: ko.observableArray([])
+    };
+
+    ko.applyBindings(viewModel);
+
     $(".datatables").dataTable({
       "bPaginate": false,
       "bLengthChange": false,
@@ -172,7 +180,7 @@ ${layout.menubar(section='groups')}
     });
 
     function toggleActions() {
-      if ($(".groupCheck[checked='checked']").length == 1) {
+      if ($(".groupCheck[checked='checked']").length > 0) {
         $("#deleteGroupBtn").removeAttr("disabled").data("confirmation-url", $(".groupCheck[checked='checked']").data("confirmation-url"));
       }
       else {
@@ -180,6 +188,16 @@ ${layout.menubar(section='groups')}
       }
     }
 
+    $("#deleteGroupBtn").click(function () {
+      viewModel.chosenUsers.removeAll();
+
+      $(".hueCheckbox[checked='checked']").each(function (index) {
+        viewModel.chosenUsers.push($(this).data("id"));
+      });
+
+      $("#deleteGroup").modal("show");
+    });
+
     $("a[data-row-selector='true']").jHueRowSelector();
   });
 </script>