Source code for apps.widgets.smartgrid.forms

"""Forms for activity."""

from django import forms
from django.forms.util import ErrorList

from apps.widgets.smartgrid.models import ConfirmationCode, TextReminder, Level, \
    ColumnName
from apps.managers.player_mgr import player_mgr
from apps.widgets.smartgrid_library.models import LibraryQuestionChoice


[docs]class GenerateCodeForm(forms.Form): """Form for generating confirmation codes.""" event_id = forms.IntegerField(widget=forms.HiddenInput(), required=False) num_codes = forms.IntegerField(initial=0)
[docs]class ChangeLevelForm(forms.Form): """change level form.""" level_choice = forms.ModelChoiceField(queryset=Level.objects.all(), required=True) column_choice = forms.ModelChoiceField(queryset=ColumnName.objects.all(), required=True)
[docs]class ActivityTextForm(forms.Form): """Text form.""" question = forms.IntegerField(widget=forms.HiddenInput(), required=False) response = forms.CharField(widget=forms.Textarea(attrs={'rows': '2'}), required=True) comment = forms.CharField(widget=forms.Textarea(attrs={'rows': '3'}), required=False) social_email = forms.CharField(widget=forms.TextInput(attrs={'size': '30'}), required=False) def __init__(self, *args, **kwargs): self.request = kwargs.pop('request', None) self.action = kwargs.pop('action', None) qid = None if 'question_id' in kwargs: qid = kwargs.pop('question_id') super(ActivityTextForm, self).__init__(*args, **kwargs) if qid: self.fields['choice_response'] = forms.ModelChoiceField( queryset=LibraryQuestionChoice.objects.filter(question__id=qid), required=True)
[docs] def clean(self): """Custom validation to verify confirmation codes.""" cleaned_data = self.cleaned_data # Check if we are validating quetion if cleaned_data["question"] > 0: if not "response" in cleaned_data and not "choice_response" in cleaned_data: self._errors["response"] = ErrorList(["You need to answer the question."]) if "response" in cleaned_data: del cleaned_data["response"] if "choice_response" in cleaned_data: del cleaned_data["choice_response"] _validate_social_email(self.request, self.action, cleaned_data, self._errors) return cleaned_data
[docs]class ActivityCodeForm(forms.Form): """confirmation code form.""" response = forms.CharField(widget=forms.TextInput(attrs={'size': '15'}), required=True) comment = forms.CharField(widget=forms.Textarea(attrs={'rows': '3'}), required=False) social_email = forms.CharField(widget=forms.TextInput(attrs={'size': '30'}), required=False) def __init__(self, *args, **kwargs): self.request = kwargs.pop('request', None) self.action = kwargs.pop('action', None) super(ActivityCodeForm, self).__init__(*args, **kwargs)
[docs] def clean(self): """Custom validation to verify confirmation codes.""" cleaned_data = self.cleaned_data # Check if we are validating a confirmation code. try: code = ConfirmationCode.objects.get(code=cleaned_data["response"].lower()) # Check if the code is inactive. if not code.is_active: self._errors["response"] = ErrorList(["This code has already been used."]) del cleaned_data["response"] # Check if this action is the same as the added action (if provided) elif self.action and code.action.event != self.action: self._errors["response"] = ErrorList( ["This confirmation code is not valid for this action."]) del cleaned_data["response"] # Check if the user has already submitted a code for this action. elif code.action in self.request.user.action_set.filter( actionmember__award_date__isnull=False): self._errors["response"] = ErrorList( ["You have already redeemed a code for this action."]) del cleaned_data["response"] except ConfirmationCode.DoesNotExist: self._errors["response"] = ErrorList(["This code is not valid."]) del cleaned_data["response"] except KeyError: self._errors["response"] = ErrorList(["Please input code."]) _validate_social_email(self.request, self.action, cleaned_data, self._errors) return cleaned_data
[docs]class ActivityFreeResponseForm(forms.Form): """Free response form.""" response = forms.CharField(widget=forms.Textarea) comment = forms.CharField(widget=forms.Textarea(attrs={'rows': '3'}), required=False) social_email = forms.CharField(widget=forms.TextInput(attrs={'size': '30'}), required=False) def __init__(self, *args, **kwargs): self.request = kwargs.pop('request', None) self.action = kwargs.pop('action', None) super(ActivityFreeResponseForm, self).__init__(*args, **kwargs) def clean(self): cleaned_data = self.cleaned_data _validate_social_email(self.request, self.action, cleaned_data, self._errors) return cleaned_data
[docs]class ActivityImageForm(forms.Form): """Image upload form.""" image_response = forms.ImageField() comment = forms.CharField(widget=forms.Textarea(attrs={'rows': '3'}), required=False) social_email = forms.CharField(widget=forms.TextInput(attrs={'size': '30'}), required=False) def __init__(self, *args, **kwargs): self.request = kwargs.pop('request', None) self.action = kwargs.pop('action', None) super(ActivityImageForm, self).__init__(*args, **kwargs) def clean(self): cleaned_data = self.cleaned_data _validate_social_email(self.request, self.action, cleaned_data, self._errors) return cleaned_data
[docs]class ActivityFreeResponseImageForm(forms.Form): """Free response and image upload form.""" response = forms.CharField(widget=forms.Textarea) image_response = forms.ImageField() comment = forms.CharField(widget=forms.Textarea(attrs={'rows': '3'}), required=False) social_email = forms.CharField(widget=forms.TextInput(attrs={'size': '30'}), required=False) def __init__(self, *args, **kwargs): self.request = kwargs.pop('request', None) self.action = kwargs.pop('action', None) super(ActivityFreeResponseImageForm, self).__init__(*args, **kwargs) def clean(self): cleaned_data = self.cleaned_data _validate_social_email(self.request, self.action, cleaned_data, self._errors) return cleaned_data
[docs]class CommitmentCommentForm(forms.Form): """commitment comment form.""" social_email = forms.EmailField(required=False) def __init__(self, *args, **kwargs): self.username = kwargs.pop('user', None) super(CommitmentCommentForm, self).__init__(*args, **kwargs)
[docs] def clean_social_email(self): """Check if this social_email is valid.""" email = self.cleaned_data['social_email'].strip().lower() if email: user = player_mgr.get_user_by_email(email) if user == None: raise forms.ValidationError('Can not find a registered user with such email.') elif user.username == self.username: raise forms.ValidationError('Can not use your own email.') return email
[docs]class SurveyForm(forms.Form): """survey form.""" def __init__(self, *args, **kwargs): questions = None if 'questions' in kwargs: questions = kwargs.pop('questions') super(SurveyForm, self).__init__(*args, **kwargs) if questions: for i, q in enumerate(questions): self.fields['choice_response_%s' % i] = forms.ModelChoiceField( queryset=LibraryQuestionChoice.objects.filter(question__id=q.pk), label=q.question, required=True ) def clean(self): cleaned_data = self.cleaned_data return cleaned_data
def _validate_social_email(request, action, cleaned_data, errors): """validate the two social email.""" _ = action _validate_one_email(request, cleaned_data, "social_email", errors) def _validate_one_email(request, cleaned_data, email, errors): """validate one email.""" if cleaned_data[email]: user = player_mgr.get_user_by_email(cleaned_data[email].lower()) if user == None or user == request.user: errors[email] = ErrorList(["Invalid email. Please input only one valid email."]) del cleaned_data[email]
[docs]class EventCodeForm(forms.Form): """event code form in the upcoming event widget.""" response = forms.CharField(widget=forms.TextInput(attrs={'size': '12'})) social_email = forms.CharField(widget=forms.TextInput(attrs={'size': '15'}), initial="Email", required=False) #------ Reminder form ---------
from django.contrib.localflavor.us.forms import USPhoneNumberField REMINDER_TIME_CHOICES = ( ("1", "1 hour"), ("2", "2 hours"), ("3", "3 hours"), ("4", "4 hours"), ("5", "5 hours"), )
[docs]class ReminderForm(forms.Form): """reminder form.""" send_email = forms.BooleanField(required=False) email = forms.EmailField(required=False, label="Email Address") send_text = forms.BooleanField(required=False) email_advance = forms.ChoiceField(choices=REMINDER_TIME_CHOICES, label="Send reminder how far in advance?") text_number = USPhoneNumberField(required=False, label="Mobile phone number") text_carrier = forms.ChoiceField(choices=TextReminder.TEXT_CARRIERS, required=False, label="Carrier") text_advance = forms.ChoiceField(choices=REMINDER_TIME_CHOICES, label="Send reminder how far in advance?")
[docs] def clean(self): """validate form.""" cleaned_data = self.cleaned_data send_email = cleaned_data.get("send_email") email = None if "email" in cleaned_data: email = cleaned_data.get("email") if send_email and (not email or len(email) == 0): raise forms.ValidationError("A valid email address is required.") send_text = cleaned_data.get("send_text") number = None if "text_number" in cleaned_data: number = cleaned_data.get("text_number") if send_text and (not number or len(number) == 0): raise forms.ValidationError("A valid phone number is required.") return cleaned_data

This Page