required_css_class = 'required'
contact = forms.CharField(max_length=128)
- def save(self, request):
+ def save(self, request, formsets=None):
from .models import Attachment, Contact
body = {}
for name, value in self.cleaned_data.items():
if not isinstance(value, UploadedFile) and name != 'contact':
- body[name] = value
+ body[name] = value
+
+ for formset in formsets or []:
+ for f in formset.forms:
+ sub_body = {}
+ for name, value in f.cleaned_data.items():
+ if not isinstance(value, UploadedFile):
+ sub_body[name] = value
+ if sub_body:
+ body.setdefault(f.form_tag, []).append(sub_body)
+
contact = Contact.objects.create(body=body,
ip=request.META['REMOTE_ADDR'],
contact=self.cleaned_data['contact'],
raise Http404
if request.method == 'POST':
form = form_class(request.POST, request.FILES)
- if form.is_valid():
- form.save(request)
+ formsets = []
+ valid = form.is_valid()
+ for formset in getattr(form, 'form_formsets', ()):
+ fset = formset(request.POST, request.FILES)
+ if not fset.is_valid():
+ valid = False
+ formsets.append(fset)
+ if valid:
+ form.save(request, formsets)
return redirect('contact_thanks', form_tag)
else:
form = form_class(initial=request.GET)
+ formsets = []
+ for formset in getattr(form, 'form_formsets', ()):
+ formsets.append(formset())
return render(request,
['contact/%s/form.html' % form_tag, 'contact/form.html'],
- {'form': form}
+ {'form': form, 'formsets': formsets}
)
contact = forms.EmailField(label=u'Adres e-mail', max_length=128)
telefon = forms.CharField(label=u'Telefon', max_length=32)
uczestnicy = forms.IntegerField(label=u'Przewidywana liczba uczestników zajęć')
+
+
+class WTEMStudentForm(forms.Form):
+ first_name = forms.CharField(label=u'Imię', max_length=128)
+ last_name = forms.CharField(label=u'Nazwisko', max_length=128)
+ email = forms.EmailField(label=u'Adres e-mail', max_length=128)
+ form_tag = "student"
+
+class NoEmptyFormsAllowedBaseFormSet(forms.formsets.BaseFormSet):
+ """
+ Won't allow formset_factory to be submitted with no forms
+ """
+ def clean(self):
+ for form in self.forms:
+ if form.cleaned_data:
+ return
+ raise forms.ValidationError(u"Proszę podać dane przynajmniej jednego ucznia.")
+
+class WTEMForm(ContactForm):
+ form_tag = "wtem"
+ form_title = u"WTEM - rejestracja uczestników"
+ submit_label = u"Wyślij zgłoszenie"
+ form_formsets = (forms.formsets.formset_factory(WTEMStudentForm, formset=NoEmptyFormsAllowedBaseFormSet),)
+
+ contact = forms.EmailField(label=u'Adres e-mail opiekuna/opiekunki', max_length=128)
+ imie = forms.CharField(label=u'Imię', max_length=128)
+ nazwisko = forms.CharField(label=u'Nazwisko', max_length=128)
+ function = forms.CharField(label=u'Pełniona funkcja', max_length=255)
+ institution = forms.CharField(label=u'Nazwa instytucji', max_length=255)
+ institution_address = forms.CharField(label=u'Adres instytucji', widget=forms.Textarea, max_length=1000)
+ institution_email = forms.EmailField(label=u'Adres e-mail instytucji', max_length=128)
+ institution_phone = forms.CharField(label=u'Telefon do instytucji', max_length=32)
+ institution_www = forms.URLField(label=u'Strona WWW instytucji', max_length=255, required=False)
+
+ zgoda_regulamin = forms.BooleanField(
+ label=u'Znam i akceptuję regulamin Wielkiego Turnieju Edukacji Medialnej.',
+ help_text=u'Zobacz <a href="/media/chunks/attachment/.pdf">regulamin Wielkiego Turnieju Edukacji Medialnej</a>.'
+ )
+ potw_uczniowie = forms.BooleanField(
+ label=u'Potwierdzam, że zgłoszeni Uczestnicy/Uczestniczki w chwili rejestracji są uczniami/uczennicami szkoły ponadgimnazjalnej.',
+ #help_text=u'Zobacz <a href="/media/chunks/attachment/.pdf">regulamin Wielkiego Turnieju Edukacji Medialnej</a>.'
+ )
+ zgoda_informacje = forms.BooleanField(
+ label=u'Wyrażam zgodę na otrzymywanie informacji od Fundacji Nowoczesna Polska związanych z edukacją medialną.',
+ required=False
+ )
+
'catalogue/js/lesson.js',
'sponsors/js/sponsors.js',
'curriculum/curriculum.js',
+ 'js/formset.js',
),
'output_filename': 'compressed/base.js',
},
--- /dev/null
+(function($) {
+ $(function() {
+
+
+function cloneMore(selector, type) {
+ var newElement = $(selector).clone(true);
+ var total = $('#id_' + type + '-TOTAL_FORMS').val();
+ newElement.find(':input').each(function() {
+ var name = $(this).attr('name').replace('__prefix__', total);
+ var id = 'id_' + name;
+ $(this).attr({'name': name, 'id': id});
+ });
+ newElement.find('label').each(function() {
+ var newFor = $(this).attr('for').replace('__prefix__', total);
+ $(this).attr('for', newFor);
+ });
+ newElement.attr({'style': '', 'id': ''});
+ total++;
+ $('#id_' + type + '-TOTAL_FORMS').val(total);
+ $(selector).before(newElement);
+}
+
+
+
+ $('.add_more').click(function() {
+ cloneMore($(this).data('selector'), $(this).data('prefix'));
+ });
+
+ });
+})(jQuery);
--- /dev/null
+{% extends "base.html" %}
+{% load chunks %}
+
+{% block title %}{{ form.form_title }}{% endblock %}
+
+{% block body %}
+
+
+
+
+
+
+ <h1>{% block contact_form_title %}{{ form.form_title }}{% endblock %}</h1>
+
+ <div class="form-info">
+ {% block contact_form_description %}
+ {% chunk "contact_form__"|add:form.form_tag %}
+ {% endblock %}
+ </div>
+
+ <form method="POST" action="." enctype="multipart/form-data" class="submit-form">
+ {% csrf_token %}
+ <h3>Dane Opiekuna/Opiekunki i instytucji zgłaszającej Uczestnika:</h3>
+ <table>
+ {{ form.as_table }}
+ </table>
+
+ {% for formset in formsets %}
+
+ {{ formset.management_form }}
+
+ <ul class="errorlist">
+ {% for err in formset.non_form_errors %}
+ <li>{{ err }}</li>
+ {% endfor %}
+ </ul>
+
+ {% for form in formset.forms %}
+ <h3>Dane Uczestnika/Uczestniczki:</h3>
+
+ <table>
+ {{ form.as_table }}
+ </table>
+ {% endfor %}
+
+ <div id="formstub-{{ formset.prefix }}" style="display:none">
+ <h3>Dane Uczestnika/Uczestniczki:</h3>
+ <table>
+ {{ formset.empty_form.as_table }}
+ </table>
+ </div>
+
+ <input type="button" value="+ Dodaj kolejną osobę" class="add_more" data-selector="#formstub-{{formset.prefix}}" data-prefix="{{formset.prefix}}">
+ <script>
+
+ </script>
+
+ {% endfor %}
+
+ <p>
+ <button style="font-size:1.5em;">{% block contact_form_submit %}{{ form.submit_label }}{% endblock %}</button>
+ </p>
+ </form>
+
+
+{% endblock %}
--- /dev/null
+Dziękujemy za rejestrację w Wielkim Turnieju Edukacji Medialnej.
+Do udziału zostały zgłoszone następujące osoby:
+{% for student in contact.body.student %}
+* {{ student.first_name }} {{ student.last_name }}{% endfor %}
+
+Pierwszy etap Turnieju odbędzie się 21 listopada 2013 r. o godz. 15.30.
+Po zakończeniu rejestracji (4 listopada) każdy Uczestnik otrzyma maila
+z indywidualną instrukcją dotyczącą udziału w I etapie Turnieju.
+
+Wszystkie ogłoszenia związane z Turniejem będą publikowane na stronie
+http://edukacjamedialna.edu.pl/WTEM. W razie pytań lub wątpliwości
+możesz kontaktować się z nami pisząc na adres
+edukacjamedialna@nowoczesnapolska.org.pl.
+
+Z pozdrowieniami
+
+Zespół Edukacji Medialnej
+Fundacja Nowoczesna Polska
--- /dev/null
+Dziękujemy za rejestrację w Wielkim Turnieju Edukacji Medialnej.
--- /dev/null
+{% extends "contact/thanks.html" %}
+
+{% block contact_form_description %}
+<p>Dziękujemy za rejestrację w Wielkim Turnieju Edukacji Medialnej.</p>
+
+<p>Na adres adres e-mail Opiekuna została wysłana wiadomość potwierdzająca
+rejestrację.</p>
+
+<p>Pierwszy etap Turnieju odbędzie się 21 listopada 2013 r. o godz. 15.30.<br>
+Serdecznie zapraszamy do udziału.</p>
+
+<p>Zespół Edukacji Medialnej<br>
+Fundacja Nowoczesna Polska</p>
+{% endblock %}