.
This commit is contained in:
@@ -1 +1,11 @@
|
|||||||
from django.core.exceptions import PermissionDenied
|
from django.core.exceptions import PermissionDenied
|
||||||
|
|
||||||
|
def user_is_cid_user_manager(function):
|
||||||
|
def wrap(request, *args, **kwargs):
|
||||||
|
if request.user.groups.filter(name='cid_user_manager').exists() or request.user.is_superuser:
|
||||||
|
return function(request, *args, **kwargs)
|
||||||
|
else:
|
||||||
|
raise PermissionDenied
|
||||||
|
wrap.__doc__ = function.__doc__
|
||||||
|
wrap.__name__ = function.__name__
|
||||||
|
return wrap
|
||||||
@@ -20,7 +20,11 @@
|
|||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary><h3>Add/Edit CID users</h3></summary>
|
<summary><h3>Add/Edit CID users</h3></summary>
|
||||||
<button id="add-selected-cids">Add to selected</button>
|
<button id="add-exams-selected-cids">Add exams to selected</button>
|
||||||
|
<button id="clear-exams-selected-cids">Clear selected exams</button>
|
||||||
|
<button id="activate-selected-cids">Activate selected</button>
|
||||||
|
<button id="deactivate-selected-cids">Deactivate selected</button>
|
||||||
|
<button id="delete-selected-cids">Delete selected</button>
|
||||||
<p>Select exams below to add user to.</p>
|
<p>Select exams below to add user to.</p>
|
||||||
<div class="exam-selectors">
|
<div class="exam-selectors">
|
||||||
<span>
|
<span>
|
||||||
@@ -106,6 +110,10 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getGenericData() {
|
function getGenericData() {
|
||||||
|
selected_cids = []
|
||||||
|
$("#manage-span input:checked").each((n, el) => {
|
||||||
|
selected_cids.push(el.value)
|
||||||
|
})
|
||||||
return {
|
return {
|
||||||
csrfmiddlewaretoken: "{{ csrf_token }}",
|
csrfmiddlewaretoken: "{{ csrf_token }}",
|
||||||
physics_exams: JSON.stringify($("#physics-exams").val()),
|
physics_exams: JSON.stringify($("#physics-exams").val()),
|
||||||
@@ -113,17 +121,26 @@
|
|||||||
sba_exams: JSON.stringify($("#sbas-exams").val()),
|
sba_exams: JSON.stringify($("#sbas-exams").val()),
|
||||||
longs_exams: JSON.stringify($("#longs-exams").val()),
|
longs_exams: JSON.stringify($("#longs-exams").val()),
|
||||||
anatomy_exams: JSON.stringify($("#anatomy-exams").val()),
|
anatomy_exams: JSON.stringify($("#anatomy-exams").val()),
|
||||||
|
delete: false,
|
||||||
|
number_to_create: 0,
|
||||||
|
activate: false,
|
||||||
|
deactivate: false,
|
||||||
|
add_exams: false,
|
||||||
|
clear_exams: false,
|
||||||
|
selected_cids: JSON.stringify(selected_cids),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
|
$("#add-exams-selected-cids").click((evt) => {
|
||||||
|
data = getGenericData();
|
||||||
|
data["add_exams"] = true;
|
||||||
|
postAjax(data);
|
||||||
|
});
|
||||||
|
|
||||||
$("#add-new-cids").click((evt) => {
|
$("#add-new-cids").click((evt) => {
|
||||||
|
|
||||||
n = $("#add-number").get(0).value;
|
n = $("#add-number").get(0).value;
|
||||||
selected_cids = []
|
|
||||||
$("#manage-span input:checked").each((n, el) => {
|
|
||||||
selected_cids.push(el.value)
|
|
||||||
})
|
|
||||||
|
|
||||||
if (n < 1) {
|
if (n < 1) {
|
||||||
toastr.info("You need to enter how many users to add.");
|
toastr.info("You need to enter how many users to add.");
|
||||||
@@ -132,7 +149,6 @@
|
|||||||
|
|
||||||
data = getGenericData();
|
data = getGenericData();
|
||||||
data["number_to_create"] = n;
|
data["number_to_create"] = n;
|
||||||
data["selected_cids"] = selected_cids;
|
|
||||||
|
|
||||||
postAjax(data);
|
postAjax(data);
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import urllib
|
|||||||
from django.views import View
|
from django.views import View
|
||||||
from django_filters.views import FilterView
|
from django_filters.views import FilterView
|
||||||
from django_tables2.views import SingleTableMixin
|
from django_tables2.views import SingleTableMixin
|
||||||
|
from generic.decorators import user_is_cid_user_manager
|
||||||
from generic.filters import CidUserFilter
|
from generic.filters import CidUserFilter
|
||||||
|
|
||||||
from generic.tables import CidUserTable
|
from generic.tables import CidUserTable
|
||||||
@@ -951,6 +952,7 @@ class CidUserView(LoginRequiredMixin, SingleTableMixin, FilterView):
|
|||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
@user_is_cid_user_manager
|
||||||
def manage_cid_users(request):
|
def manage_cid_users(request):
|
||||||
if request.is_ajax() and request.method == "POST":
|
if request.is_ajax() and request.method == "POST":
|
||||||
physics_exams = json.loads(request.POST.get("physics_exams"))
|
physics_exams = json.loads(request.POST.get("physics_exams"))
|
||||||
@@ -959,10 +961,67 @@ def manage_cid_users(request):
|
|||||||
longs_exams = json.loads(request.POST.get("longs_exams"))
|
longs_exams = json.loads(request.POST.get("longs_exams"))
|
||||||
anatomy_exams = json.loads(request.POST.get("anatomy_exams"))
|
anatomy_exams = json.loads(request.POST.get("anatomy_exams"))
|
||||||
|
|
||||||
|
selected_cids = json.loads(request.POST.get("selected_cids"))
|
||||||
|
|
||||||
new_cid = max(CidUser.objects.all().order_by("-cid")[0].cid + 1, 50000)
|
new_cid = max(CidUser.objects.all().order_by("-cid")[0].cid + 1, 50000)
|
||||||
|
|
||||||
number_to_create = int(request.POST.get("number_to_create"))
|
number_to_create = int(request.POST.get("number_to_create"))
|
||||||
|
|
||||||
|
delete = request.POST.get("deleted")
|
||||||
|
activate = request.POST.get("activate")
|
||||||
|
deactivate = request.POST.get("deactivate")
|
||||||
|
add_exams = request.POST.get("add_exams")
|
||||||
|
clear_exams = request.POST.get("clear_exams")
|
||||||
|
|
||||||
|
if delete:
|
||||||
|
cids = CidUser.objects.filter(pk__in=selected_cids).delete()
|
||||||
|
return JsonResponse({"status": "success"})
|
||||||
|
|
||||||
|
if activate:
|
||||||
|
cids = CidUser.objects.filter(pk__in=selected_cids)
|
||||||
|
for c in cids:
|
||||||
|
c.active = True
|
||||||
|
c.save()
|
||||||
|
return JsonResponse({"status": "success"})
|
||||||
|
|
||||||
|
if deactivate:
|
||||||
|
cids = CidUser.objects.filter(pk__in=selected_cids)
|
||||||
|
for c in cids:
|
||||||
|
c.active = False
|
||||||
|
c.save()
|
||||||
|
return JsonResponse({"status": "success"})
|
||||||
|
|
||||||
|
if clear_exams:
|
||||||
|
cids = CidUser.objects.filter(pk__in=selected_cids)
|
||||||
|
for c in cids:
|
||||||
|
c.physics_exams.clear()
|
||||||
|
c.rapid_exams.clear()
|
||||||
|
c.sba_exams.clear()
|
||||||
|
c.longs_exams.clear()
|
||||||
|
c.anatomy_exams.clear()
|
||||||
|
return JsonResponse({"status": "success"})
|
||||||
|
|
||||||
|
if add_exams:
|
||||||
|
cids = CidUser.objects.filter(pk__in=selected_cids)
|
||||||
|
for c in cids:
|
||||||
|
if physics_exams:
|
||||||
|
c.physics_exams.set(physics_exams)
|
||||||
|
c.save()
|
||||||
|
if rapid_exams:
|
||||||
|
c.rapid_exams.set(rapid_exams)
|
||||||
|
c.save()
|
||||||
|
if sba_exams:
|
||||||
|
c.sba_exams.set(sba_exams)
|
||||||
|
c.save()
|
||||||
|
if longs_exams:
|
||||||
|
c.longs_exams.set(longs_exams)
|
||||||
|
c.save()
|
||||||
|
if anatomy_exams:
|
||||||
|
c.anatomy_exams.set(anatomy_exams)
|
||||||
|
c.save()
|
||||||
|
return JsonResponse({"status": "success"})
|
||||||
|
|
||||||
|
|
||||||
for n in range(number_to_create):
|
for n in range(number_to_create):
|
||||||
passcode = "".join(random.choices(string.ascii_uppercase, k=4))
|
passcode = "".join(random.choices(string.ascii_uppercase, k=4))
|
||||||
c = CidUser(cid=new_cid, passcode=passcode)
|
c = CidUser(cid=new_cid, passcode=passcode)
|
||||||
|
|||||||
Reference in New Issue
Block a user