Package omeroweb :: Package webadmin :: Module forms
[hide private]
[frames] | no frames]

Source Code for Module omeroweb.webadmin.forms

  1  #!/usr/bin/env python 
  2  # -*- coding: utf-8 -*- 
  3  #  
  4  #  
  5  #  
  6  # Copyright (c) 2008 University of Dundee.  
  7  #  
  8  # This program is free software: you can redistribute it and/or modify 
  9  # it under the terms of the GNU Affero General Public License as 
 10  # published by the Free Software Foundation, either version 3 of the 
 11  # License, or (at your option) any later version. 
 12  #  
 13  # This program is distributed in the hope that it will be useful, 
 14  # but WITHOUT ANY WARRANTY; without even the implied warranty of 
 15  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 16  # GNU Affero General Public License for more details. 
 17  #  
 18  # You should have received a copy of the GNU Affero General Public License 
 19  # along with this program.  If not, see <http://www.gnu.org/licenses/>. 
 20  #  
 21  # Author: Aleksandra Tarkowska <A(dot)Tarkowska(at)dundee(dot)ac(dot)uk>, 2008. 
 22  #  
 23  # Version: 1.0 
 24  # 
 25   
 26  from django.conf import settings 
 27  from django import forms 
 28  from django.forms import ModelForm 
 29  from django.forms.widgets import Textarea 
 30  from django.forms.widgets import HiddenInput 
 31   
 32  from omeroweb.connector import Server 
 33   
 34  from omeroweb.custom_forms import NonASCIIForm 
 35   
 36  from custom_forms import ServerModelChoiceField, \ 
 37          GroupModelChoiceField, GroupModelMultipleChoiceField, \ 
 38          ExperimenterModelChoiceField, ExperimenterModelMultipleChoiceField, \ 
 39          DefaultGroupField, OmeNameField 
 40  from custom_widgets import DefaultGroupRadioSelect 
 41   
 42   
 43  ################################################################# 
 44  # Non-model Form 
 45   
46 -class LoginForm(NonASCIIForm):
47
48 - def __init__(self, *args, **kwargs):
49 super(LoginForm, self).__init__(*args, **kwargs) 50 self.fields['server'] = ServerModelChoiceField(Server, empty_label=None) 51 52 self.fields.keyOrder = ['server', 'username', 'password', 'ssl']
53 54 username = forms.CharField(max_length=50, widget=forms.TextInput(attrs={'size':22})) 55 password = forms.CharField(max_length=50, widget=forms.PasswordInput(attrs={'size':22, 'autocomplete': 'off'})) 56 ssl = forms.BooleanField(required=False, help_text='<img src="%swebgateway/img/nuvola_encrypted_grey16.png" title="Real-time encrypted data transfer can be turned on by checking the box, but it will slow down the data access. Turning it off does not affect the connection to the server which is always secure." alt="SSL"' % settings.STATIC_URL)
57
58 -class ForgottonPasswordForm(NonASCIIForm):
59 60 server = ServerModelChoiceField(Server, empty_label=None) 61 username = forms.CharField(max_length=50, widget=forms.TextInput(attrs={'size':28, 'autocomplete': 'off'})) 62 email = forms.EmailField(widget=forms.TextInput(attrs={'size':28, 'autocomplete': 'off'}))
63
64 -class ExperimenterForm(NonASCIIForm):
65
66 - def __init__(self, name_check=False, email_check=False, experimenter_is_me=False, *args, **kwargs):
67 super(ExperimenterForm, self).__init__(*args, **kwargs) 68 self.name_check=name_check 69 self.email_check=email_check 70 71 try: 72 self.fields['other_groups'] = GroupModelMultipleChoiceField(queryset=kwargs['initial']['groups'], initial=kwargs['initial']['other_groups'], required=False, label="Groups") 73 except: 74 self.fields['other_groups'] = GroupModelMultipleChoiceField(queryset=kwargs['initial']['groups'], required=False, label="Groups") 75 76 try: 77 if kwargs['initial']['default_group']: pass 78 self.fields['default_group'] = GroupModelChoiceField(queryset=kwargs['initial']['groups'], initial=kwargs['initial']['default_group'], empty_label=u"---------", required=False) 79 except: 80 self.fields['default_group'] = GroupModelChoiceField(queryset=kwargs['initial']['groups'], empty_label=u"---------", required=False) 81 self.fields['default_group'].widget.attrs['class'] = 'hidden' 82 83 if kwargs['initial'].has_key('with_password') and kwargs['initial']['with_password']: 84 self.fields['password'] = forms.CharField(max_length=50, widget=forms.PasswordInput(attrs={'size':30, 'autocomplete': 'off'})) 85 self.fields['confirmation'] = forms.CharField(max_length=50, widget=forms.PasswordInput(attrs={'size':30, 'autocomplete': 'off'})) 86 87 self.fields.keyOrder = ['omename', 'password', 'confirmation', 'first_name', 'middle_name', 'last_name', 'email', 'institution', 'administrator', 'active', 'default_group', 'other_groups'] 88 else: 89 self.fields.keyOrder = ['omename', 'first_name', 'middle_name', 'last_name', 'email', 'institution', 'administrator', 'active', 'default_group', 'other_groups'] 90 if experimenter_is_me: 91 self.fields['administrator'].widget.attrs['disabled'] = True 92 self.fields['administrator'].widget.attrs['title'] = "Removal of your own admin rights would be un-doable" 93 self.fields['active'].widget.attrs['disabled'] = True 94 self.fields['active'].widget.attrs['title'] = "You cannot disable yourself"
95 96 omename = OmeNameField(max_length=250, widget=forms.TextInput(attrs={'size':30, 'autocomplete': 'off'}), label="Username") 97 first_name = forms.CharField(max_length=250, widget=forms.TextInput(attrs={'size':30, 'autocomplete': 'off'})) 98 middle_name = forms.CharField(max_length=250, widget=forms.TextInput(attrs={'size':30, 'autocomplete': 'off'}), required=False) 99 last_name = forms.CharField(max_length=250, widget=forms.TextInput(attrs={'size':30, 'autocomplete': 'off'})) 100 email = forms.EmailField(widget=forms.TextInput(attrs={'size':30, 'autocomplete': 'off'}), required=False) 101 institution = forms.CharField(max_length=250, widget=forms.TextInput(attrs={'size':30, 'autocomplete': 'off'}), required=False) 102 administrator = forms.CharField(widget=forms.CheckboxInput(), required=False) 103 active = forms.CharField(widget=forms.CheckboxInput(), required=False) 104
105 - def clean_confirmation(self):
106 if self.cleaned_data.get('password') or self.cleaned_data.get('confirmation'): 107 if len(self.cleaned_data.get('password')) < 3: 108 raise forms.ValidationError('Password must be at least 3 characters long.') 109 if self.cleaned_data.get('password') != self.cleaned_data.get('confirmation'): 110 raise forms.ValidationError('Passwords do not match') 111 else: 112 return self.cleaned_data.get('password')
113
114 - def clean_omename(self):
115 if self.name_check: 116 raise forms.ValidationError('This username already exists.') 117 return self.cleaned_data.get('omename')
118
119 - def clean_email(self):
120 if self.email_check: 121 raise forms.ValidationError('This email already exist.') 122 return self.cleaned_data.get('email')
123
124 - def clean_other_groups(self):
125 if self.cleaned_data.get('other_groups') is None or len(self.cleaned_data.get('other_groups')) <= 0: 126 raise forms.ValidationError('User must be a member of at least one group.') 127 else: 128 return self.cleaned_data.get('other_groups')
129 130 131 PERMISSION_CHOICES = ( 132 ('0', 'Private'), 133 ('1', 'Read-Only'), 134 ('2', 'Read-Annotate'), 135 ) 136
137 -class GroupForm(NonASCIIForm):
138
139 - def __init__(self, name_check=False, *args, **kwargs):
140 super(GroupForm, self).__init__(*args, **kwargs) 141 self.name_check=name_check 142 try: 143 if kwargs['initial']['owners']: pass 144 self.fields['owners'] = ExperimenterModelMultipleChoiceField(queryset=kwargs['initial']['experimenters'], initial=kwargs['initial']['owners'], required=False) 145 except: 146 self.fields['owners'] = ExperimenterModelMultipleChoiceField(queryset=kwargs['initial']['experimenters'], required=False) 147 148 try: 149 if kwargs['initial']['members']: pass 150 self.fields['members'] = ExperimenterModelMultipleChoiceField(queryset=kwargs['initial']['experimenters'], initial=kwargs['initial']['members'], required=False) 151 except: 152 self.fields['members'] = ExperimenterModelMultipleChoiceField(queryset=kwargs['initial']['experimenters'], required=False) 153 154 155 self.fields['permissions'] = forms.ChoiceField(choices=PERMISSION_CHOICES, widget=forms.RadioSelect(), required=True, label="Permissions") 156 157 self.fields.keyOrder = ['name', 'description', 'owners', 'members', 'permissions']
158 159 name = forms.CharField(max_length=100, widget=forms.TextInput(attrs={'size':25, 'autocomplete': 'off'})) 160 description = forms.CharField(max_length=250, widget=forms.TextInput(attrs={'size':25, 'autocomplete': 'off'}), required=False) 161
162 - def clean_name(self):
163 if self.name_check: 164 raise forms.ValidationError('This name already exist.') 165 return self.cleaned_data.get('name')
166
167 -class GroupOwnerForm(forms.Form):
168
169 - def __init__(self, *args, **kwargs):
170 super(GroupOwnerForm, self).__init__(*args, **kwargs) 171 172 try: 173 if kwargs['initial']['owners']: pass 174 self.fields['owners'] = ExperimenterModelMultipleChoiceField(queryset=kwargs['initial']['experimenters'], initial=kwargs['initial']['owners'], required=False) 175 except: 176 self.fields['owners'] = ExperimenterModelMultipleChoiceField(queryset=kwargs['initial']['experimenters'], required=False) 177 178 try: 179 if kwargs['initial']['members']: pass 180 self.fields['members'] = ExperimenterModelMultipleChoiceField(queryset=kwargs['initial']['experimenters'], initial=kwargs['initial']['members'], required=False) 181 except: 182 self.fields['members'] = ExperimenterModelMultipleChoiceField(queryset=kwargs['initial']['experimenters'], required=False) 183 184 self.fields.keyOrder = ['owners', 'members', 'permissions']
185 186 permissions = forms.ChoiceField(choices=PERMISSION_CHOICES, widget=forms.RadioSelect(), required=True, label="Permissions")
187
188 -class MyAccountForm(NonASCIIForm):
189
190 - def __init__(self, email_check=False, *args, **kwargs):
191 super(MyAccountForm, self).__init__(*args, **kwargs) 192 self.email_check=email_check 193 try: 194 if kwargs['initial']['default_group']: pass 195 self.fields['default_group'] = GroupModelChoiceField(queryset=kwargs['initial']['groups'], initial=kwargs['initial']['default_group'], empty_label=None) 196 except: 197 self.fields['default_group'] = GroupModelChoiceField(queryset=kwargs['initial']['groups'], empty_label=None) 198 self.fields.keyOrder = ['omename', 'first_name', 'middle_name', 'last_name', 'email', 'institution', 'default_group']
199 200 omename = forms.CharField(max_length=50, widget=forms.TextInput(attrs={'onfocus':'this.blur()', 'size':30, 'autocomplete': 'off'}), label="Username") 201 first_name = forms.CharField(max_length=250, widget=forms.TextInput(attrs={'size':30, 'autocomplete': 'off'})) 202 middle_name = forms.CharField(max_length=250, widget=forms.TextInput(attrs={'size':30, 'autocomplete': 'off'}), required=False) 203 last_name = forms.CharField(max_length=250, widget=forms.TextInput(attrs={'size':30, 'autocomplete': 'off'})) 204 email = forms.EmailField(widget=forms.TextInput(attrs={'size':30, 'autocomplete': 'off'}), required=False) 205 institution = forms.CharField(max_length=250, widget=forms.TextInput(attrs={'size':30, 'autocomplete': 'off'}), required=False) 206
207 - def clean_email(self):
208 if self.email_check: 209 raise forms.ValidationError('This email already exist.') 210 return self.cleaned_data.get('email')
211 212
213 -class ContainedExperimentersForm(NonASCIIForm):
214
215 - def __init__(self, *args, **kwargs):
216 super(ContainedExperimentersForm, self).__init__(*args, **kwargs) 217 218 try: 219 if kwargs['initial']['members']: pass 220 self.fields['members'] = ExperimenterModelMultipleChoiceField(queryset=kwargs['initial']['experimenters'], initial=kwargs['initial']['members'], required=False) 221 except: 222 self.fields['members'] = ExperimenterModelMultipleChoiceField(queryset=kwargs['initial']['experimenters'], required=False) 223 224 self.fields.keyOrder = ['members']
225 226
227 -class UploadPhotoForm(forms.Form):
228 229 photo = forms.FileField(required=False) 230
231 - def clean_photo(self):
232 if self.cleaned_data.get('photo') is None: 233 raise forms.ValidationError('No image selected. Supported image formats (file extensions allowed): jpeg, jpg, gif, png. The maximum image size allowed is 200KB.') 234 if not self.cleaned_data.get('photo').content_type.startswith("image"): 235 raise forms.ValidationError('Supported image formats (file extensions allowed): jpeg, jpg, gif, png.') 236 if self.cleaned_data.get('photo').size > 204800: 237 raise forms.ValidationError('The maximum image size allowed is 200KB.') 238 return self.cleaned_data.get('photo')
239
240 -class ChangePassword(NonASCIIForm):
241 242 old_password = forms.CharField(max_length=50, widget=forms.PasswordInput(attrs={'size':30, 'autocomplete': 'off'}), label="Current password") 243 password = forms.CharField(max_length=50, widget=forms.PasswordInput(attrs={'size':30, 'autocomplete': 'off'}), label="New password") 244 confirmation = forms.CharField(max_length=50, widget=forms.PasswordInput(attrs={'size':30, 'autocomplete': 'off'}), label="Confirm password") 245
246 - def clean_confirmation(self):
247 if self.cleaned_data.get('password') or self.cleaned_data.get('confirmation'): 248 if len(self.cleaned_data.get('password')) < 3: 249 raise forms.ValidationError('Password must be at least 3 characters long.') 250 if self.cleaned_data.get('password') != self.cleaned_data.get('confirmation'): 251 raise forms.ValidationError('Passwords do not match') 252 else: 253 return self.cleaned_data.get('password')
254
255 -class EnumerationEntry(NonASCIIForm):
256 257 new_entry = forms.CharField(max_length=250, widget=forms.TextInput(attrs={'size':30}))
258 259
260 -class EnumerationEntries(NonASCIIForm):
261
262 - def __init__(self, entries, *args, **kwargs):
263 super(EnumerationEntries, self).__init__(*args, **kwargs) 264 for i,e in enumerate(entries): 265 try: 266 if kwargs['initial']['entries']: 267 self.fields[str(e.id)] = forms.CharField(max_length=250, initial=e.value, widget=forms.TextInput(attrs={'size':30}), label=i+1) 268 else: 269 self.fields[str(e.id)] = forms.CharField(max_length=250, widget=forms.TextInput(attrs={'size':30}), label=i+1) 270 except: 271 self.fields[str(e.id)] = forms.CharField(max_length=250, widget=forms.TextInput(attrs={'size':30}), label=i+1) 272 273 self.fields.keyOrder = [str(k) for k in self.fields.keys()]
274