# -*- coding: utf-8 -*- from django import forms from django.contrib.auth import get_user_model from django.utils.translation import ugettext_lazy as _ from super_archives.models import MailingList from .utils.validators import validate_social_account User = get_user_model() class SocialAccountField(forms.Field): def __init__(self, *args, **kwargs): self.url = kwargs.pop('url', None) super(SocialAccountField, self).__init__(*args, **kwargs) def validate(self, value): super(SocialAccountField, self).validate(value) if value and not validate_social_account(value, self.url): raise forms.ValidationError(_('Social account does not exist'), code='social-account-doesnot-exist') class UserForm(forms.ModelForm): required = ('first_name', 'last_name', 'email', 'username') class Meta: model = User def __init__(self, *args, **kwargs): super(UserForm, self).__init__(*args, **kwargs) for field_name, field in self.fields.items(): # Adds form-control class to all form fields field.widget.attrs.update({'class': 'form-control'}) # Set UserForm.required fields as required if field_name in UserForm.required: field.required = True class UserCreationForm(UserForm): class Meta: model = User fields = ('first_name', 'last_name', 'email', 'username') class UserUpdateForm(UserForm): class Meta: model = User fields = ('username', 'first_name', 'last_name', 'institution', 'role', 'twitter', 'facebook', 'google_talk', 'webpage') twitter = SocialAccountField(url='https://twitter.com/', required=False) facebook = SocialAccountField(url='https://graph.facebook.com/', required=False) class ListsForm(forms.Form): LISTS_NAMES = ((list.name, list.name) for list in MailingList.objects.all()) lists = forms.MultipleChoiceField(label=_(u'Mailing lists'), required=False, widget=forms.CheckboxSelectMultiple, choices=LISTS_NAMES)