from django.shortcuts import render
|
from django.http import HttpResponse
|
from django.template import loader
|
from .models import Problem, ProblemGroup
|
from django.contrib.auth.decorators import login_required
|
from django.contrib.admin.views.decorators import staff_member_required
|
from django.views.decorators.csrf import csrf_exempt
|
from exam.models import Exam
|
from django.http import JsonResponse
|
from django.utils.decorators import method_decorator
|
from django.views import generic
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
from .forms import ProblemGroupForm
|
from django.urls import reverse
|
|
@login_required
|
@staff_member_required
|
def index(request):
|
template = loader.get_template('problem/index.html')
|
problem_list = Problem.objects.all()
|
context = {
|
'problem_list': problem_list,
|
}
|
return HttpResponse(template.render(context, request))
|
|
|
@login_required
|
@staff_member_required
|
def problemgrouplist(request):
|
template = loader.get_template('problem/problemgroups.html')
|
problemgroup_list = ProblemGroup.objects.filter(problemhomegroup=False).all()
|
|
context = {
|
'problemgroup_list': problemgroup_list,
|
}
|
|
return HttpResponse(template.render(context, request))
|
|
|
@method_decorator(staff_member_required, name="dispatch")
|
class ProblemGroupNewView(LoginRequiredMixin, generic.CreateView):
|
form_class = ProblemGroupForm
|
template_name = "problem/problemgroup_new.html"
|
|
def get_success_url(self):
|
return reverse("problemgrouplist", args=())
|
|
|
@method_decorator(staff_member_required, name="dispatch")
|
class ProblemGroupDetailView(LoginRequiredMixin, generic.UpdateView, generic.DetailView):
|
model = ProblemGroup
|
form_class = ProblemGroupForm
|
template_name = "problem/problemgroup_new.html"
|
|
def get_success_url(self):
|
return reverse("problemgroupdetail", args=(self.object.pk,))
|
|
def get_context_data(self, **kwargs):
|
# Call the base implementation first to get the context
|
context = super(ProblemGroupDetailView, self).get_context_data(**kwargs)
|
# Create any data and add it to the context
|
context["some_data"] = "This is just some data"
|
return context
|
|
|
|
|
@login_required
|
@staff_member_required
|
@csrf_exempt
|
def addProblemToExam(request, pk):
|
import json
|
problem=Problem.objects.get(pk=pk)
|
exam_id=request.session.get('selected_exam')
|
try:
|
exam=Exam.objects.get(pk=exam_id)
|
except:
|
exam=None
|
if exam is None:
|
return JsonResponse({'status': 'Fail'})
|
exam.add_problem(problem)
|
return JsonResponse({'status': 'OK'})
|
|
|
@login_required
|
@staff_member_required
|
@csrf_exempt
|
def addProblemGroupToExam(request, pk):
|
import json
|
group=ProblemGroup.objects.get(pk=pk)
|
exam_id=request.session.get('selected_exam')
|
try:
|
exam=Exam.objects.get(pk=exam_id)
|
except:
|
exam=None
|
if exam is None:
|
return JsonResponse({'status': 'Fail'})
|
exam.problem_group.add(group)
|
return JsonResponse({'status': 'OK'})
|