Skip to content

Forms

hypha.apply.activity.forms

CommentForm

CommentForm(*args, user=None, has_coapplicants=False, mini=False, **kwargs)

Bases: FileFormMixin, ModelForm

Source code in hypha/apply/activity/forms.py
def __init__(self, *args, user=None, has_coapplicants=False, mini=False, **kwargs):
    super().__init__(*args, **kwargs)
    self.visibility_choices = self._meta.model.visibility_choices_for(
        user, has_coapplicants
    )
    visibility = self.fields["visibility"]
    # Set default visibility to "Applicant" for staff and staff can view everything.
    visibility.initial = self.visibility_choices[0]
    if len(self.visibility_choices) > 1:
        visibility.choices = self.visibility_choices
    else:
        visibility.required = False
        visibility.choices = self.visibility_choices
        visibility.initial = visibility.initial[0]
        visibility.widget = forms.HiddenInput()
    if not user.is_apply_staff:
        self.fields["assign_to"].widget = forms.HiddenInput()

    if mini:
        self.fields["message"].widget = Textarea(
            attrs={"rows": 2, "placeholder": _("Write a comment...")}
        )
    else:
        # If not mini, remove the unneeded fields from the form.
        for key in self.Meta.mini_fields:
            del self.fields[key]

attachments class-attribute instance-attribute

attachments = MultiFileField(label=_('Attachments'), required=False)

assign_to class-attribute instance-attribute

assign_to = forms.ModelChoiceField(queryset=User.objects.filter(groups__name=STAFF_GROUP_NAME), required=False, empty_label=_('Select...'), label=_('Assign to'))

visibility_choices instance-attribute

visibility_choices = self._meta.model.visibility_choices_for(user, has_coapplicants)

Meta

model class-attribute instance-attribute
model = Activity
mini_fields class-attribute instance-attribute
mini_fields = ('related_content_type', 'related_object_id', 'source_content_type', 'source_object_id')
fields class-attribute instance-attribute
fields = ('message', 'visibility', 'assign_to', *mini_fields)
labels class-attribute instance-attribute
labels = {'visibility': _('Visible to'), 'message': _('Message')}
help_texts class-attribute instance-attribute
help_texts = {'visibility': _('Select a relevant user role. Staff can view every comment.')}
widgets class-attribute instance-attribute
widgets = {'visibility': forms.RadioSelect(), 'message': PagedownWidget(), **{field: forms.HiddenInput() for field in mini_fields}}

save

save(commit=True)
Source code in hypha/apply/activity/forms.py
@transaction.atomic
def save(self, commit=True):
    instance = super().save(commit=True)
    added_files = self.cleaned_data["attachments"]
    assigned_user = self.cleaned_data["assign_to"]
    if assigned_user:
        # add task to assigned user
        add_task_to_user(
            code=COMMENT_TASK,
            user=assigned_user,
            related_obj=instance,
        )
    if added_files:
        ActivityAttachment.objects.bulk_create(
            ActivityAttachment(activity=instance, file=file) for file in added_files
        )
    return instance