.
This commit is contained in:
@@ -48,6 +48,22 @@ from sbas.models import Exam as SbasExam
|
||||
from sbas.models import Question as SbasQuestion
|
||||
|
||||
class ExamFormMixin:
|
||||
class Meta:
|
||||
fields = [
|
||||
"name",
|
||||
"time_limit",
|
||||
"open_access",
|
||||
"authors_only",
|
||||
"exam_mode",
|
||||
"include_history",
|
||||
"active",
|
||||
"publish_results",
|
||||
"archive",
|
||||
"cid_user_groups",
|
||||
"user_user_groups",
|
||||
#"author",
|
||||
]
|
||||
|
||||
def save(self, commit=True):
|
||||
instance = ModelForm.save(self, False)
|
||||
instance.save()
|
||||
@@ -56,6 +72,18 @@ class ExamFormMixin:
|
||||
|
||||
return instance
|
||||
|
||||
class ExamAuthorFormMixin(ModelForm):
|
||||
class Meta:
|
||||
fields = ["author"]
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
ModelForm.__init__(self, *args, **kwargs)
|
||||
self.fields["author"] = ModelMultipleChoiceField(
|
||||
queryset=User.objects.all(),
|
||||
widget=FilteredSelectMultiple(verbose_name="Authors", is_stacked=False),
|
||||
)
|
||||
|
||||
|
||||
class ExaminationForm(ModelForm):
|
||||
class Meta:
|
||||
model = Examination
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
<a href="{% url app_name|add:':exam_update' exam.id %}" title="Edit the Exam">Edit</a>
|
||||
\ <a href="{% url app_name|add:':exam_delete' exam.id %}" title="Delete the Exam">Delete</a>
|
||||
\ <a href="{% url app_name|add:':exam_clone' exam.id %}" title="Clone the Exam">Clone</a>
|
||||
\ <a href="{% url app_name|add:':exam_authors' exam.id %}" title="Edit Exam Authors">Authors</a>
|
||||
{% endif %}
|
||||
{% if request.user.is_superuser %}
|
||||
\ <a href="{% url 'admin:'|add:app_name|add:'_exam_change' exam.id %}" title="Edit the Exam using the admin interface">Admin Edit</a>
|
||||
|
||||
@@ -71,6 +71,12 @@ import plotly.express as px
|
||||
# from rad.views import get_question_and_content_type
|
||||
from django.db.models import Prefetch
|
||||
|
||||
class AuthorRequiredMixin(object):
|
||||
def get_object(self, *args, **kwargs):
|
||||
obj = super().get_object(*args, **kwargs)
|
||||
if self.request.user not in obj.author.all():
|
||||
raise PermissionDenied() # or Http404
|
||||
return obj
|
||||
|
||||
class CidManagerRequiredMixin(UserPassesTestMixin):
|
||||
def test_func(self):
|
||||
|
||||
Reference in New Issue
Block a user