allow adding users to exams by group

This commit is contained in:
Ross
2024-09-02 12:16:37 +01:00
parent cf9b514597
commit 4f60440ea1
4 changed files with 129 additions and 57 deletions
+49 -45
View File
@@ -68,6 +68,7 @@ from django.forms.utils import from_current_timezone, to_current_timezone
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit
class SplitDateTimeFieldDefaultTime(SplitDateTimeField):
def compress(self, data_list):
if data_list:
@@ -79,9 +80,9 @@ class SplitDateTimeFieldDefaultTime(SplitDateTimeField):
)
if data_list[1] in self.empty_values:
data_list[1] = datetime.time(0, 1)
#raise ValidationError(
# raise ValidationError(
# self.error_messages["invalid_time"], code="invalid_time"
#)
# )
result = datetime.datetime.combine(*data_list)
return from_current_timezone(result)
return None
@@ -98,9 +99,9 @@ class SplitDateTimeFieldDefaultTimeEnd(SplitDateTimeField):
)
if data_list[1] in self.empty_values:
data_list[1] = datetime.time(23, 59)
#raise ValidationError(
# raise ValidationError(
# self.error_messages["invalid_time"], code="invalid_time"
#)
# )
result = datetime.datetime.combine(*data_list)
return from_current_timezone(result)
return None
@@ -111,29 +112,28 @@ class ExamFormMixin:
super(ModelForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_id = 'id-exam-form'
self.helper.form_class = 'exam-form'
self.helper.form_method = 'post'
self.helper.form_action = 'submit'
self.helper.form_id = "id-exam-form"
self.helper.form_class = "exam-form"
self.helper.form_method = "post"
self.helper.form_action = "submit"
self.helper.add_input(Submit("submit", "Submit"))
self.helper.add_input(Submit('submit', 'Submit'))
#if user.is_superuser or user.groups.filter(name="cid_user_manager").exists():
# if user.is_superuser or user.groups.filter(name="cid_user_manager").exists():
# cid_user_group_queryset = CidUserGroup.objects.filter(archive=False)
# user_user_group_queryset = UserUserGroup.objects.filter(archive=False)
#else:
# else:
# cid_user_group_queryset = CidUserGroup.objects.none()
# user_user_group_queryset = UserUserGroup.objects.none()
#self.fields["cid_user_groups"] = ModelMultipleChoiceField(
# self.fields["cid_user_groups"] = ModelMultipleChoiceField(
# required=False,
# queryset=cid_user_group_queryset,
#)
#self.fields["user_user_groups"] = ModelMultipleChoiceField(
# )
# self.fields["user_user_groups"] = ModelMultipleChoiceField(
# required=False,
# queryset=user_user_group_queryset,
#)
# )
self.fields["start_date"] = SplitDateTimeFieldDefaultTime(
widget=SplitDateTimeWidget(
date_attrs={"type": "date", "class": "datepicker"},
@@ -169,8 +169,8 @@ class ExamFormMixin:
"active",
"publish_results",
"archive",
#"cid_user_groups",
#"user_user_groups",
# "cid_user_groups",
# "user_user_groups",
# "author",
]
@@ -199,6 +199,7 @@ class ExamAuthorFormMixin(ModelForm):
widget=FilteredSelectMultiple(verbose_name="Authors", is_stacked=False),
)
class ExamMarkerFormMixin(ModelForm):
class Meta:
fields = ["markers"]
@@ -213,37 +214,41 @@ class ExamMarkerFormMixin(ModelForm):
class ExamGroupsFormMixin(ModelForm):
class Meta:
#model = ExamCollection
fields = ("cid_user_groups", "user_user_groups")
class Meta:
# model = ExamCollection
fields = ("cid_user_groups", "user_user_groups")
def __init__(self, *args, user, **kwargs) -> None:
super(ModelForm, self).__init__(*args, **kwargs)
def __init__(self, *args, user, **kwargs) -> None:
super(ModelForm, self).__init__(*args, **kwargs)
# TODO: decide how we should handle managing user groups
# i.e who should be able to access a list of all users?
# TODO: decide how we should handle managing user groups
# i.e who should be able to access a list of all users?
if user.is_superuser or user.groups.filter(name="cid_user_manager").exists():
cid_user_group_queryset = CidUserGroup.objects.filter(archive=False)
user_user_group_queryset = UserUserGroup.objects.filter(archive=False)
else:
cid_user_group_queryset = CidUserGroup.objects.filter(archive=False, open_access=True)
user_user_group_queryset = UserUserGroup.objects.none(archive=False, open_access=True)
#cid_user_group_queryset = CidUserGroup.objects.none()
#user_user_group_queryset = UserUserGroup.objects.none()
self.fields["cid_user_groups"] = ModelMultipleChoiceField(
required=False,
queryset=cid_user_group_queryset,
label="CID User Groups",
if user.is_superuser or user.groups.filter(name="cid_user_manager").exists():
cid_user_group_queryset = CidUserGroup.objects.filter(archive=False)
user_user_group_queryset = UserUserGroup.objects.filter(archive=False)
else:
cid_user_group_queryset = CidUserGroup.objects.filter(
archive=False, open_access=True
)
self.fields["user_user_groups"] = ModelMultipleChoiceField(
required=False,
queryset=user_user_group_queryset,
label="User Groups",
user_user_group_queryset = UserUserGroup.objects.none(
archive=False, open_access=True
)
self.fields["cid_user_groups"].widget.attrs["size"] = 8
self.fields["user_user_groups"].widget.attrs["size"] = 8
# cid_user_group_queryset = CidUserGroup.objects.none()
# user_user_group_queryset = UserUserGroup.objects.none()
self.fields["cid_user_groups"] = ModelMultipleChoiceField(
required=False,
queryset=cid_user_group_queryset,
label="CID User Groups",
)
self.fields["user_user_groups"] = ModelMultipleChoiceField(
required=False,
queryset=user_user_group_queryset,
label="User Groups",
)
self.fields["cid_user_groups"].widget.attrs["size"] = 8
self.fields["user_user_groups"].widget.attrs["size"] = 8
class ExaminationForm(ModelForm):
@@ -751,4 +756,3 @@ class ExamCollectionCloneForm(ModelForm):
class Meta:
model = ExamCollection
fields = ("name", "date")