diff --git a/generic/forms.py b/generic/forms.py index 524136e7..96f7c303 100755 --- a/generic/forms.py +++ b/generic/forms.py @@ -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") - diff --git a/generic/templates/generic/cid_group_view_detail.html b/generic/templates/generic/cid_group_view_detail.html index 5ba72409..5e1d18ba 100755 --- a/generic/templates/generic/cid_group_view_detail.html +++ b/generic/templates/generic/cid_group_view_detail.html @@ -39,44 +39,67 @@ {% endif %} {% endif %}
It is possible to quickly add or remove all group candidates from an exam by clicking the buttons below. This will only affect the {{users|length}} candidates in this group. You will need to refresh the page to see updated candidate counts.
{% with group.GetGroupExams as exam_map %} {% for key, value in exam_map.items %}