add context to cloning forms

This commit is contained in:
Ross
2024-03-11 11:48:37 +00:00
parent 0cb38f5c31
commit a62023a5d8
17 changed files with 65 additions and 97 deletions
+20 -5
View File
@@ -49,7 +49,7 @@ from generic.decorators import user_is_cid_user_manager
from generic.filters import CidUserFilter, ExaminationFilter
from generic.tables import CidUserExamTable, CidUserTable, ExaminationTable
from generic.mixins import SuperuserRequiredMixin
from generic.mixins import CheckCanEditMixin, SuperuserRequiredMixin
import zipfile
from django.core.files.base import ContentFile
@@ -2433,11 +2433,16 @@ class GenericViewBase:
)
class ExamCloneMixin:
class ExamCloneMixin():
def get_template_names(self) -> list[str]:
return "exam_clone_form.html"
#return super().get_template_names()
def get_initial(self):
old_object = get_object_or_404(self.model, pk=self.kwargs["exam_id"])
if self.request.user not in old_object.get_author_objects() and not self.request.user.is_superuser:
if not old_object.check_user_can_edit(self.request.user):
raise PermissionDenied() # or Http404
initial_data = model_to_dict(old_object, exclude=["id"])
@@ -2458,8 +2463,18 @@ class ExamCloneMixin:
self.exam_questions = list(questions)
self.author = list(authors)
self.old_object = old_object
return initial_data
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["can_edit"] = self.old_object.check_user_can_edit(self.request.user)
context["exam"] = self.old_object
return context
def form_valid(self, form):
object = form.save()
# Reapply these otherwise they get lost?
@@ -3158,7 +3173,7 @@ class ExamCreateBase(RevisionMixin, LoginRequiredMixin, CreateView):
return kwargs
class ExamUpdateBase(RevisionMixin, LoginRequiredMixin, UpdateView):
class ExamUpdateBase(RevisionMixin, CheckCanEditMixin, LoginRequiredMixin, UpdateView):
template_name = "exam_update_form.html"
def form_valid(self, form):
@@ -3175,7 +3190,7 @@ class ExamUpdateBase(RevisionMixin, LoginRequiredMixin, UpdateView):
return kwargs
class ExamDeleteBase(RevisionMixin, DeleteView):
class ExamDeleteBase(RevisionMixin, CheckCanEditMixin, DeleteView):
template_name = "exam_confirm_delete.html"
def get_success_url(self) -> str: