+ self.started = getattr(settings, 'REGISTRATION_STARTED', False)
+ self.limit_reached = Contact.objects.filter(form_tag=self.save_as_tag).count() >= settings.REGISTRATION_LIMIT
+ try:
+ url = Entry.objects.get(slug_pl='regulamin').get_absolute_url()
+ self.fields['agree_toc'] = forms.BooleanField(
+ required=True,
+ label = mark_safe(_('I accept <a href="%s">Terms and Conditions of CopyCamp</a>') % url)
+ )
+ except Entry.DoesNotExist:
+ pass
+
+
+tracks = (
+ _('Copyright and Art'),
+ _('Remuneration Models'),
+ _('Copyright, Education and Science'),
+ _('Technology, Innovation and Copyright'),
+ _('Copyright and Human Rights'),
+ _('Copyright Enforcement'),
+ _('Copyright Debate'),
+ _('Copyright Lawmaking'),
+)
+
+
+class RegisterSpeaker(RegistrationForm):
+ form_tag = 'register-speaker'
+ save_as_tag = '2015-speaker'
+ form_title = _('Open call for presentations')
+
+ presentation_thematic_track = forms.ChoiceField(
+ label=_('Please select one thematic track'),
+ choices=[(t, t) for t in tracks], widget=forms.RadioSelect())
+
+ bio = forms.CharField(label=mark_safe_lazy(
+ _('Short biographical note in Polish (max. 500 characters, fill <strong>at least</strong> one bio)')),
+ widget=forms.Textarea, max_length=500, required=False)
+ bio_en = forms.CharField(label=_('Short biographical note in English (max. 500 characters)'), widget=forms.Textarea,
+ max_length=500, required=False)
+ photo = forms.FileField(label=_('Photo'), required=False)
+ phone = forms.CharField(label=_('Phone number'), max_length=64,
+ required=False,
+ help_text=_('Used only for organizational purposes.'))
+
+ # presentation = forms.BooleanField(label=_('Presentation'), required=False)
+ presentation_title = forms.CharField(
+ label=mark_safe_lazy(_('Title of the presentation in Polish (fill <strong>at least</strong> one title)')),
+ max_length=256, required=False)
+ presentation_title_en = forms.CharField(label=_('Title of the presentation in English'),
+ max_length=256, required=False)
+ # presentation = forms.FileField(label=_('Presentation'), required=False)
+ presentation_summary = forms.CharField(label=_('Summary of presentation (max. 1800 characters)'),
+ widget=forms.Textarea, max_length=1800)
+
+ presentation_post_conference_publication = forms.BooleanField(
+ label=_('I am interested in including my paper in the post-conference publication'),
+ required=False
+ )
+
+ # workshop = forms.BooleanField(label=_('Workshop'), required=False)
+ # workshop_title = forms.CharField(label=_('Title of workshop'),
+ # max_length=256, required=False)
+ # workshop_summary = forms.CharField(label=_('Summary of workshop (max. 1800 characters)'),
+ # widget=forms.Textarea, max_length=1800, required=False)
+
+ def __init__(self, *args, **kw):
+ super(RegisterSpeaker, self).__init__(*args, **kw)
+ self.closed = getattr(settings, 'REGISTRATION_SPEAKER_CLOSED', False)
+ self.fields.keyOrder = [
+ 'first_name',
+ 'last_name',
+ 'contact',
+ 'phone',
+ 'organization',
+ 'bio',
+ 'bio_en',
+ 'photo',
+ # 'presentation',
+ 'presentation_title',
+ 'presentation_title_en',
+ 'presentation_summary',
+ 'presentation_thematic_track',
+ 'presentation_post_conference_publication',
+ # 'workshop',
+ # 'workshop_title',
+ # 'workshop_summary',
+
+ 'agree_mailing',
+ 'agree_data',
+ 'agree_license'
+ ]
+
+ def clean(self):
+ cleaned_data = super(RegisterSpeaker, self).clean()
+ errors = []
+ if not cleaned_data['bio'] and not cleaned_data['bio_en']:
+ errors.append(forms.ValidationError(_('Fill at least one bio!')))
+ if not cleaned_data['presentation_title'] and not cleaned_data['presentation_title_en']:
+ errors.append(forms.ValidationError(_('Fill at least one title!')))
+ if errors:
+ raise forms.ValidationError(errors)
+ return cleaned_data
+