7240eb568a5a0a7277651a04edf6c02887818ec6
[prawokultury.git] / prawokultury / contact_forms.py
1 # -*- coding: utf-8 -*-
2 from __future__ import unicode_literals
3
4 from django.conf import settings
5 from django import forms
6 from contact.forms import ContactForm
7 from contact.models import Contact
8 from contact.fields import HeaderField
9 from django.utils.functional import lazy
10 from django.utils.translation import ugettext_lazy as _
11 from django.utils.safestring import mark_safe
12 from migdal.models import Entry
13
14 mark_safe_lazy = lazy(mark_safe, unicode)
15
16
17 class RegistrationForm(ContactForm):
18     form_tag = 'register'
19
20     save_as_tag = '2015'
21     conference_name = u'CopyCamp 2015' 
22     
23     form_title = _('Registration')
24     admin_list = ['first_name', 'last_name', 'organization']
25
26     first_name = forms.CharField(label=_('First name'), max_length=128)
27     last_name = forms.CharField(label=_('Last name'), max_length=128)
28     contact = forms.EmailField(label=_('E-mail'), max_length=128)
29     organization = forms.CharField(label=_('Organization'), 
30             max_length=256, required=False)
31     country = forms.CharField(label=_('Country'), max_length=128)
32
33     #days = forms.ChoiceField(
34     #    label = _("I'm planning to show up on"),
35     #    choices=[
36     #        ('both', _('Both days of the conference')),
37     #        ('only-6th', _('November 6th only')),
38     #        ('only-7th', _('November 7th only')),
39     #    ], widget=forms.RadioSelect())
40     
41     agree_mailing = forms.BooleanField(
42         label=_('I am interested in receiving information about the Modern Poland Foundation\'s activities by e-mail'),
43         required=False
44     )
45     agree_data = forms.BooleanField(
46         label=_('Permission for data processing'),
47         help_text=_(u'I hereby grant Modern Poland Foundation (Fundacja Nowoczesna Polska, ul. Marszałkowska 84/92, 00-514 Warszawa) permission to process my personal data (name, e-mail address) for purposes of registration for CopyCamp conference.')
48     )
49     agree_license = forms.BooleanField(
50         label=_('Permission for publication'),
51         help_text=_('I agree to having materials, recorded during the conference, released under the terms of <a href="http://creativecommons.org/licenses/by-sa/3.0/deed">CC BY-SA</a> license and to publishing my image.'),
52         required=False
53     )
54
55     def __init__(self, *args, **kwargs):
56         super(RegistrationForm, self).__init__(*args, **kwargs)
57         self.started = getattr(settings, 'REGISTRATION_STARTED', False)
58         self.limit_reached = Contact.objects.filter(form_tag=self.save_as_tag).count() >= settings.REGISTRATION_LIMIT
59         try:
60             url = Entry.objects.get(slug_pl='regulamin').get_absolute_url()
61             self.fields['agree_toc'] = forms.BooleanField(
62                 required = True,
63                 label = mark_safe(_('I accept <a href="%s">Terms and Conditions of CopyCamp</a>') % url)
64             )
65         except Entry.DoesNotExist:
66             pass
67
68
69 tracks = (
70     _('CopyArt'),
71     _('Models of Remuneration'),
72     _('Copyright and Education'),
73     _('Technology and Innovation'),
74     _('Copyright and Human Rights'),
75     _('Technologies in Social Activism'),
76     _('Copyright Enforcement'),
77     _('Future of Copyright'),
78     _('Copyright Debate')
79 )
80
81 class RegisterSpeaker(RegistrationForm):
82     form_tag = 'register-speaker'
83     save_as_tag = '2015-speaker'
84     form_title = _('Open call for presentations')
85
86     presentation_thematic_track = forms.ChoiceField(
87         label = _('Please select one thematic track'),
88         choices=[(t,t) for t in tracks], widget=forms.RadioSelect())
89
90     bio = forms.CharField(label=_('Short biographical note (max. 500 characters)'),
91             widget=forms.Textarea, max_length=500, required=True)
92     photo = forms.FileField(label=_('Photo'), required=False)
93     phone = forms.CharField(label=_('Phone number'), max_length=64,
94         required=False,
95         help_text=_('Used only for organizational purposes.'))
96
97     #presentation = forms.BooleanField(label=_('Presentation'), required=False)
98     presentation_title = forms.CharField(label=_('Title of presentation'),
99             max_length=256)
100     #presentation = forms.FileField(label=_('Presentation'),
101     #        required=False)
102     presentation_summary = forms.CharField(label=_('Summary of presentation (max. 1800 characters)'),
103             widget=forms.Textarea, max_length=1800)
104
105     presentation_post_conference_publication = forms.BooleanField(
106         label=_('I am interested in including my paper in the post-conference publication'),
107         required=False
108     )
109
110     #workshop = forms.BooleanField(label=_('Workshop'), required=False)
111     #workshop_title = forms.CharField(label=_('Title of workshop'),
112     #        max_length=256, required=False)
113     #workshop_summary = forms.CharField(label=_('Summary of workshop (max. 1800 characters)'),
114     #        widget=forms.Textarea, max_length=1800, required=False)
115
116
117     def __init__(self, *args, **kw):
118         super(RegisterSpeaker, self).__init__(*args, **kw)
119         self.closed = getattr(settings, 'REGISTRATION_SPEAKER_CLOSED', False)
120         self.fields.keyOrder = [
121             'first_name',
122             'last_name',
123             'contact',
124             'phone',
125             'organization',
126             'bio',
127             'photo',
128 #            'presentation',
129             'presentation_title',
130             'presentation_summary',
131             'presentation_thematic_track',
132             'presentation_post_conference_publication',
133 #            'workshop',
134 #            'workshop_title',
135 #            'workshop_summary',
136
137             'agree_mailing',
138             'agree_data',
139             'agree_license'
140         ]
141
142
143 class NextForm(ContactForm):
144     form_tag = '/next'
145     form_title = _('Next CopyCamp')
146
147     name = forms.CharField(label=_('Name'), max_length=128)
148     contact = forms.EmailField(label=_('E-mail'), max_length=128)
149     organization = forms.CharField(label=_('Organization'),
150             max_length=256, required=False)
151
152
153 class WorkshopForm(ContactForm):
154     form_tag = 'workshop'
155     save_as_tag = 'workshop-2015'
156     conference_name = u'CopyCamp 2015'
157     form_title = _('Workshop')
158
159     name = forms.CharField(label=_('Name'), max_length=128)
160     contact = forms.EmailField(label=_('E-mail'), max_length=128)
161     organization = forms.CharField(label=_('Organization'),
162             max_length=256, required=False)
163
164     _#header = HeaderField(label=mark_safe_lazy(_("<h3>I'll take a part in workshops</h3>")), help_text=_('Only workshops with any spots left are visible here.'))
165
166     #_h1 = HeaderField(label=mark_safe_lazy(_("<strong>Thursday, November 6th, 10 a.m.–12 noon</strong>")))
167
168     #w_rysiek = forms.BooleanField(label=_(u'Michał „rysiek” Woźniak, Koalicja Otwartej Edukacji KOED: Wprowadzenie do prawa autorskiego i wolnych licencji'), required=False)
169     #w_bartsch = forms.BooleanField(label=_(u'Natalia Bartsch: Wykorzystywanie istniejących utworów w tworzeniu przedstawienia teatralnego'), required=False)
170     #w_samsung = forms.BooleanField(label=_(u'Rafał Sikorski: Prywatny użytek w prawie autorskim w XXI wieku. Jak powinien wyglądać w\u00a0Unii Europejskiej?'), required=False)
171
172     #_h2 = HeaderField(label=mark_safe_lazy(_("<strong>Friday, November 7th, 10 a.m.–12 noon</strong>")))
173
174     #w_mezei = forms.BooleanField(label=_(u'Péter Mezei: European copyright alternatives – 2014 (Workshop will be held in English)'), required=False)
175     #w_sliwowski = forms.BooleanField(label=_(u'Kamil Śliwowski, Koalicja Otwartej Edukacji KOED: Prawo autorskie w Sieci - ćwiczenia praktyczne'), required=False)
176
177     #_h3 = HeaderField(label=mark_safe_lazy(_("<strong>Friday, November 7th, 12 noon–2 p.m.</strong>")))
178
179     #w_zaiks = forms.BooleanField(label=_(u'Łukasz Łyczkowski, Adam Pacuski, Stowarzyszenie Autorów ZAiKS: Praktyczne aspekty dozwolonego użytku'), required=False)
180     #w_creativepoland = forms.BooleanField(label=_(u'Paweł Kaźmierczyk i Dagmara Białek, Creative Poland: Sektor kreatywny – pomysły są w cenie'), required=False)
181
182     #_header_1 = HeaderField(label='')
183
184     #agree_mailing = forms.BooleanField(
185     #    label=_('I am interested in receiving information about the Modern Poland Foundation\'s activities by e-mail'),
186     #    required=False
187     #)
188     agree_data = forms.BooleanField(
189         label=_('Permission for data processing'),
190         help_text=_(u'I hereby grant Modern Poland Foundation (Fundacja Nowoczesna Polska, ul. Marszałkowska 84/92, 00-514 Warszawa) permission to process my personal data (name, e-mail address) for purposes of registration for CopyCamp conference.')
191     )
192     agree_license = forms.BooleanField(
193         label=_('Permission for publication'),
194         help_text=_('I agree to having materials, recorded during the conference, released under the terms of <a href="http://creativecommons.org/licenses/by-sa/3.0/deed">CC BY-SA</a> license and to publishing my image.'),
195         required=False
196     )
197
198     def __init__(self, *args, **kwargs):
199         super(WorkshopForm, self).__init__(*args, **kwargs)
200         self.limit_reached = Contact.objects.filter(form_tag=self.save_as_tag).count() >= 60
201
202     #    counts = {k: 0 for k in self.start_workshops}
203     #    for contact in Contact.objects.filter(form_tag=self.save_as_tag):
204     #        for workshop in self.start_workshops:
205     #            if contact.body.get('w_%s' % workshop, False): counts[workshop] += 1
206     #    some_full = False
207     #    for k, v in counts.items():
208     #        if v >= 60:
209     #            some_full = True
210     #            if 'w_%s' % k in self.fields:
211     #                del self.fields['w_%s' % k]
212     #            if k in self.workshops:
213     #                self.workshops.remove(k)
214     #    if not some_full:
215     #        self.fields['_header'].help_text = None
216
217     #def clean(self):
218     #    any_workshop = False
219     #    for w in self.start_workshops:
220     #        if self.cleaned_data.get('w_%s' % w):
221     #            any_workshop = True
222     #    if not any_workshop:
223     #        self._errors['_header'] = [_("Please choose at least one workshop.")]
224     #    return self.cleaned_data
225