+ from_email = settings.SERVER_EMAIL
+ send_mail(_("Password reset on %s alpha2 testing") % SITENAME,
+ t.render(Context(c)), from_email, [user.email])
+
+
+class EmailChangeForm(forms.ModelForm):
+ class Meta:
+ model = EmailChange
+ fields = ('new_email_address',)
+
+ def clean_new_email_address(self):
+ addr = self.cleaned_data['new_email_address']
+ if AstakosUser.objects.filter(email__iexact=addr):
+ raise forms.ValidationError(_(u'This email address is already in use. Please supply a different email address.'))
+ return addr
+
+ def save(self, email_template_name, request, commit=True):
+ ec = super(EmailChangeForm, self).save(commit=False)
+ ec.user = request.user
+ activation_key = hashlib.sha1(
+ str(random()) + smart_str(ec.new_email_address))
+ ec.activation_key = activation_key.hexdigest()
+ if commit:
+ ec.save()
+ send_change_email(ec, request, email_template_name=email_template_name)
+
+
+class SignApprovalTermsForm(forms.ModelForm):
+ class Meta:
+ model = AstakosUser
+ fields = ("has_signed_terms",)
+
+ def __init__(self, *args, **kwargs):
+ super(SignApprovalTermsForm, self).__init__(*args, **kwargs)
+
+ def clean_has_signed_terms(self):
+ has_signed_terms = self.cleaned_data['has_signed_terms']
+ if not has_signed_terms:
+ raise forms.ValidationError(_('You have to agree with the terms'))
+ return has_signed_terms
+
+
+class InvitationForm(forms.ModelForm):
+ username = forms.EmailField(label=_("Email"))
+
+ def __init__(self, *args, **kwargs):
+ super(InvitationForm, self).__init__(*args, **kwargs)
+
+ class Meta:
+ model = Invitation
+ fields = ('username', 'realname')
+
+ def clean_username(self):
+ username = self.cleaned_data['username']
+ try:
+ Invitation.objects.get(username=username)
+ raise forms.ValidationError(
+ _('There is already invitation for this email.'))
+ except Invitation.DoesNotExist:
+ pass
+ return username
+
+
+class ExtendedPasswordChangeForm(PasswordChangeForm):
+ """
+ Extends PasswordChangeForm by enabling user
+ to optionally renew also the token.
+ """
+ renew = forms.BooleanField(label='Renew token', required=False)
+
+ def __init__(self, user, *args, **kwargs):
+ super(ExtendedPasswordChangeForm, self).__init__(user, *args, **kwargs)
+
+ def save(self, commit=True):
+ user = super(ExtendedPasswordChangeForm, self).save(commit=False)
+ if self.cleaned_data.get('renew'):
+ user.renew_token()
+ if commit:
+ user.save()
+ return user
+
+
+class AstakosGroupCreationForm(forms.ModelForm):
+# issue_date = forms.DateField(widget=SelectDateWidget())
+# expiration_date = forms.DateField(widget=SelectDateWidget())
+ kind = forms.ModelChoiceField(
+ queryset=GroupKind.objects.all(),
+ label="",
+ widget=forms.HiddenInput()
+ )
+ name = forms.URLField()
+ moderation_enabled = forms.BooleanField(
+ help_text="Check if you want to approve members participation manually",
+ required=False
+ )
+
+ class Meta:
+ model = AstakosGroup
+
+ def __init__(self, *args, **kwargs):
+ try:
+ resources = kwargs.pop('resources')
+ except KeyError:
+ resources = {}
+ super(AstakosGroupCreationForm, self).__init__(*args, **kwargs)
+ self.fields.keyOrder = ['kind', 'name', 'homepage', 'desc', 'issue_date',
+ 'expiration_date', 'estimated_participants',
+ 'moderation_enabled']
+ for id, r in resources.iteritems():
+ self.fields['resource_%s' % id] = forms.IntegerField(
+ label=r,
+ required=False,
+ help_text=_('Leave it blank for no additional quota.')
+ )
+
+ def resources(self):
+ for name, value in self.cleaned_data.items():
+ prefix, delimiter, suffix = name.partition('resource_')
+ if suffix:
+ # yield only those having a value
+ if not value:
+ continue
+ yield (suffix, value)
+
+class AstakosGroupUpdateForm(forms.ModelForm):
+ class Meta:
+ model = AstakosGroup
+ fields = ('homepage', 'desc')
+
+class AddGroupMembersForm(forms.Form):
+ q = forms.CharField(max_length=800, widget=forms.Textarea, label=_('Search users'),
+ help_text=_('Add comma separated user emails'),
+ required=True)
+
+ def clean(self):
+ q = self.cleaned_data.get('q') or ''
+ users = q.split(',')
+ users = list(u.strip() for u in users if u)
+ db_entries = AstakosUser.objects.filter(email__in=users)
+ unknown = list(set(users) - set(u.email for u in db_entries))
+ if unknown:
+ raise forms.ValidationError(
+ _('Unknown users: %s' % ','.join(unknown)))
+ self.valid_users = db_entries
+ return self.cleaned_data
+
+ def get_valid_users(self):
+ """Should be called after form cleaning"""
+ try:
+ return self.valid_users
+ except:
+ return ()
+
+
+class AstakosGroupSearchForm(forms.Form):
+ q = forms.CharField(max_length=200, label='Search group')