Newer
Older
from crispy_forms.helper import FormHelper
from django import forms
from django.contrib.auth.models import User
from django.contrib.postgres.forms import HStoreField
from django.urls import resolve
from django.utils.translation import ugettext_lazy as _
from .models import (Alert, AppSettings, DataFile, DataSet, Institution, Lab,
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
class BaseNestedFormSet(forms.BaseFormSet):
def is_valid(self):
result = super().is_valid()
if self.is_bound:
for form in self.forms:
if hasattr(form, 'nested'):
result = result and form.nested.is_valid()
return result
class BaseInlineNestedFormSet(forms.BaseInlineFormSet):
def is_valid(self):
result = super().is_valid()
if self.is_bound:
for form in self.forms:
if hasattr(form, 'nested'):
result = result and form.nested.is_valid()
return result
def save(self, commit=True):
result = super().save(commit=commit)
for form in self.forms:
if hasattr(form, 'nested'):
if not self._should_delete_form(form):
form.nested.save(commit=commit)
return result
class AlertForm(forms.ModelForm):
class Meta:
model = Alert
fields = ['id', 'message_en', 'message_fr', 'start', 'end']
labels = {
'message_en': _('Message (English)'),
'message_fr': _('Message (French)'),
'start': _('Start'),
'end': _('End')
}
widgets = {
'message_en': forms.Textarea(attrs={'rows': 3}),
'message_fr': forms.Textarea(attrs={'rows': 3}),
}
class UserForm(forms.ModelForm):
class Meta:
model = User
fields = ('first_name', 'last_name', 'email')
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
if self.instance.pk and self.instance.profile.accountname:
self.fields['first_name'].disabled = True
self.fields['last_name'].disabled = True
self.fields['email'].disabled = True
else:
self.fields['first_name'].required = True
self.fields['last_name'].required = True
self.fields['email'].required = True
class LDAPUserForm(forms.Form):
accountname = forms.CharField(max_length=32, required=True, label=_('LDAP ID'))
class Meta:
model = Profile
exclude = ('user', 'accountname')
widgets = {'labs': forms.CheckboxSelectMultiple()}
class ProfileUpdateForm(forms.ModelForm):
labels = {
'accountname': _('LDAP ID')
}
field_order = ['accountname']
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
Jonathan Seguin
committed
if hasattr(self.instance, 'user') and self.instance.accountname:
self.fields['labs'].widget = forms.CheckboxSelectMultiple(attrs={'disabled': 'disabled'})
self.fields['accountname'].widget.attrs['readonly'] = True
class InstitutionForm(forms.ModelForm):
class Meta:
model = Institution
fields = ('__all__')
class DataFileForm(forms.ModelForm):
class Meta:
model = DataFile
fields = ('annotations', 'lab')
def __init__(self, request, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['lab'].choices = [('', '----------')]
if request.user.is_staff:
self.fields['lab'].choices += [(lab.id, lab.name) for lab in Lab.objects.all()]
else:
self.fields['lab'].choices += [(lab.id, lab.name) for lab in request.user.profile.labs.all()]
class BasicDataFileForm(forms.ModelForm):
model = DataFile
fields = ('file',)
class DataFileAnnotationForm(forms.Form):
dropzone_files = forms.CharField(required=False, widget=forms.HiddenInput)
annotations = HStoreField(required=False, label=_('Attach these annotations with the uploaded files:'))
lab = forms.ChoiceField(required=False, label=_('Attach uploaded files to this lab:'))
def __init__(self, request, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['lab'].choices = [('', '----------')]
if request.user.is_staff:
self.fields['lab'].choices += [(lab.id, lab.name) for lab in Lab.objects.all()]
else:
self.fields['lab'].choices += [(lab.id, lab.name) for lab in request.user.profile.labs.all()]
class DataSetForm(forms.ModelForm):
class Meta:
model = DataSet
fields = ('name', 'share_profiles', 'share_labs', 'share_groups', 'files')
class LabForm(forms.ModelForm):
class Meta:
model = Lab
fields = ('__all__')
class ShareGroupForm(forms.ModelForm):
class Meta:
model = ShareGroup
fields = ('name', 'profiles')
class LabSelectionForm(forms.Form):
lab = forms.ChoiceField(required=True)
redirect_to = forms.CharField(max_length=256, required=True, widget=forms.HiddenInput)
def __init__(self, request, *args, **kwargs):
super().__init__(*args, **kwargs)
if request.user.is_authenticated:
self.fields['lab'].choices = [(lab.id, lab.name) for lab in request.user.profile.labs.all()]
self.fields['lab'].initial = request.session.get('active_lab_id')
self.fields['redirect_to'].initial = resolve(request.path_info).url_name
self.helper = FormHelper()
self.helper.form_show_labels = False
class AppSettingsForm(forms.ModelForm):
class Meta:
model = AppSettings
fields = ('__all__')