diff options
| author | Étienne Loks <etienne.loks@peacefrogs.net> | 2013-03-16 12:00:45 +0100 |
|---|---|---|
| committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2013-03-16 12:00:45 +0100 |
| commit | 24b244f358c05645e1dd11266fe1db3c1da03a52 (patch) | |
| tree | c6f3d6d784e5186bebcbe22e47d2eb0fd7efe05e /chimere/forms.py | |
| parent | 8ff3c1b6f1e7f41a3dfb373ea5bceb9f116603b9 (diff) | |
| parent | 8f854e8ca5c816ab58aacc04b4c360dba3de83ee (diff) | |
| download | Chimère-24b244f358c05645e1dd11266fe1db3c1da03a52.tar.bz2 Chimère-24b244f358c05645e1dd11266fe1db3c1da03a52.zip | |
Merge branch 'saclay'
Conflicts:
chimere/migrations/0029_auto__add_field_marker_modified_since_import__add_field_marker_not_for.py
chimere/migrations/0029_auto__add_propertymodelchoice.py
chimere/migrations/0030_auto__add_field_importer_default_name.py
chimere/migrations/0031_auto__add_field_subcategory_dated.py
chimere/migrations/0031_auto__chg_field_picturefile_width__chg_field_picturefile_height.py
chimere/migrations/0032_auto__add_field_subcategory_submission.py
chimere/migrations/0033_auto__add_field_importer_source_file.py
chimere/migrations/0034_auto__add_field_importer_origin__add_field_importer_license__add_field.py
chimere/migrations/0035_area_permissions.py
chimere/migrations/0035_auto__add_field_marker_modified_since_import__add_field_marker_not_for.py
chimere/migrations/0036_auto.py
chimere/migrations/0036_auto__add_field_importer_default_name.py
chimere/migrations/0037_auto__add_unique_area_order__add_field_importer_associate_marker_to_wa.py
chimere/migrations/0038_auto__chg_field_picturefile_width__chg_field_picturefile_height.py
chimere/migrations/0039_auto__add_multimediaextension__chg_field_multimediafile_multimedia_typ.py
chimere/migrations/0040_remove_excluded_status.py
chimere/migrations/0041_auto__add_field_importer_overwrite.py
chimere/migrations/0041_auto__add_field_importer_source_file.py
chimere/migrations/0042_auto__add_field_importer_origin__add_field_importer_license__add_field.py
chimere/migrations/0042_fix_rights.py
chimere/migrations/0043_area_permissions.py
chimere/migrations/0043_auto__add_field_importer_get_description.py
chimere/migrations/0044_auto.py
chimere/migrations/0044_auto__add_field_importer_default_description.py
chimere/migrations/0046_auto__del_field_subcategory_routing_available.py
chimere/migrations/0047_auto__add_unique_area_order__add_field_importer_associate_marker_to_wa.py
chimere/migrations/0049_auto__chg_field_multimediafile_multimedia_type.py
chimere/migrations/0050_remove_excluded_status.py
chimere/migrations/0051_auto__add_field_importer_overwrite.py
chimere/migrations/0054_fix_rights.py
chimere/old_migrations/v2.0/0029_auto__add_field_marker_modified_since_import__add_field_marker_not_for.py
chimere/old_migrations/v2.0/0030_auto__add_field_importer_default_name.py
chimere/old_migrations/v2.0/0031_auto__chg_field_picturefile_width__chg_field_picturefile_height.py
chimere/old_migrations/v2.0/0032_auto__add_field_subcategory_submission.py
chimere/old_migrations/v2.0/0033_auto__add_field_importer_source_file.py
chimere/old_migrations/v2.0/0034_auto__add_field_importer_origin__add_field_importer_license__add_field.py
chimere/old_migrations/v2.0/0035_area_permissions.py
chimere/old_migrations/v2.0/0036_auto.py
chimere/old_migrations/v2.0/0037_auto__add_unique_area_order__add_field_importer_associate_marker_to_wa.py
chimere/old_migrations/v2.0/0038_osm_import_filtr.py
chimere/old_migrations/v2.0/0039_auto__add_multimediaextension__chg_field_multimediafile_multimedia_typ.py
chimere/old_migrations/v2.0/0040_remove_excluded_status.py
chimere/old_migrations/v2.0/0041_auto__add_field_importer_overwrite.py
chimere/old_migrations/v2.0/0042_fix_rights.py
chimere/old_migrations/v2.0/0043_auto__add_field_importer_get_description.py
chimere/old_migrations/v2.0/0044_auto__add_field_importer_default_description.py
Diffstat (limited to 'chimere/forms.py')
| -rw-r--r-- | chimere/forms.py | 90 |
1 files changed, 75 insertions, 15 deletions
diff --git a/chimere/forms.py b/chimere/forms.py index 774f510..22cdc8f 100644 --- a/chimere/forms.py +++ b/chimere/forms.py @@ -33,10 +33,11 @@ from django.core.mail import EmailMessage, BadHeaderError from chimere.models import Marker, Route, PropertyModel, Property, Area,\ News, Category, SubCategory, RouteFile, MultimediaFile, MultimediaType, \ - PictureFile, Importer, IMPORTER_CHOICES, IFRAME_LINKS, MultimediaExtension + PictureFile, Importer, PropertyModelChoice, IFRAME_LINKS, \ + MultimediaExtension, Page, IMPORTER_CHOICES from chimere.widgets import AreaField, PointField, TextareaWidget, \ - ImportFiltrWidget, TextareaAdminWidget, DatePickerWidget, \ - ImporterChoicesWidget, RE_XAPI + FullTextareaWidget, DatePickerWidget, ButtonSelectWidget, NominatimWidget, \ + TextareaAdminWidget, ImportFiltrWidget, ImporterChoicesWidget, RE_XAPI from datetime import timedelta, datetime, tzinfo @@ -54,13 +55,18 @@ class UTC(tzinfo): def dst(self, dt): return ZERO +def getStaffEmails(): + return [u.email for u in + User.objects.filter(is_staff=True).exclude(email="").order_by('id')] + def notifyStaff(subject, body, sender=None): if not settings.EMAIL_HOST: return + user_list = getStaffEmails() + if not user_list: + return if settings.PROJECT_NAME: subject = u'[%s] %s' % (settings.PROJECT_NAME, subject) - user_list = [u.email for u in - User.objects.filter(is_staff=True).exclude(email="").order_by('id')] headers = {} if sender: headers['Reply-To'] = sender @@ -90,6 +96,20 @@ class ContactForm(forms.Form): email = forms.EmailField(label=_("Email (optional)"), required=False) content = forms.CharField(label=_("Object"), widget=forms.Textarea) +class SubCategoryAdminForm(forms.ModelForm): + ''' + Add a tinyMCE widget to fill description + ''' + description = forms.CharField(widget=FullTextareaWidget, required=False) + +class PageAdminForm(forms.ModelForm): + """ + Main form for extra pages + """ + content = forms.CharField(widget=FullTextareaWidget) + class Meta: + model = Page + class OSMForm(forms.Form): """ OSM export form @@ -165,6 +185,9 @@ class CategoryAdminForm(forms.ModelForm): js = list(settings.JQUERY_JS_URLS) + [ '%schimere/js/menu-sort.js' % settings.STATIC_URL, ] + css = { + 'all': ('chimere/css/admin.css',) + } class Meta: model = Category @@ -248,16 +271,32 @@ class MarkerAdminFormBase(forms.ModelForm): return new_marker # As we have dynamic fields, it's cleaner to make the class dynamic too -fields = {} -# declare properties -for prop in PropertyModel.objects.filter(available=True): - key = "property_%d_%d" % (prop.order, prop.id) - fields[key] = forms.CharField(label=prop.name, - widget=PropertyModel.TYPE_WIDGET[prop.type], - required=False) -MarkerAdminForm = type("MarkerAdminForm", (MarkerAdminFormBase,), fields) - -class MarkerForm(MarkerAdminForm): +def get_properties(queryset): + fields = {} + for prop in queryset: + key = "property_%d_%d" % (prop.order, prop.id) + if prop.type == 'C': + choices = PropertyModelChoice.objects.filter(propertymodel=prop, + available=True + ).order_by('value') + fields[key] = forms.ChoiceField(label=prop.name, + choices=[('', '--')] + \ + [(choice.pk, unicode(choice)) + for choice in choices], + required=False) + else: + fields[key] = forms.CharField(label=prop.name, + widget=PropertyModel.TYPE_WIDGET[prop.type], + required=False) + return fields + +# in admin all fields are displayed +MarkerAdminForm = type("MarkerAdminForm", (MarkerAdminFormBase,), + get_properties(PropertyModel.objects.all())) +MarkerBaseForm = type("MarkerBaseForm", (MarkerAdminFormBase,), + get_properties(PropertyModel.objects.filter(available=True))) + +class MarkerForm(MarkerBaseForm): """ Form for the edit page """ @@ -564,3 +603,24 @@ class AreaForm(AreaAdminForm): class Meta: model = Area +CHIMERE_ROUTING_TRANSPORT = [(idx, _(lbl)) + for idx, lbl in settings.CHIMERE_ROUTING_TRANSPORT] + +class RoutingForm(forms.Form): + transport = forms.ChoiceField(label='', widget=ButtonSelectWidget, + choices=CHIMERE_ROUTING_TRANSPORT, + initial=CHIMERE_ROUTING_TRANSPORT[0][0]) + start = forms.CharField(label=_(u"Start"), widget=NominatimWidget) + end = forms.CharField(label=_(u"Finish"), widget=NominatimWidget) + speed = forms.ChoiceField(label=_(u"Speed"), choices=[], + required=False, widget=forms.RadioSelect) + + def __init__(self, *args, **kwargs): + super(RoutingForm, self).__init__(*args, **kwargs) + if not settings.CHIMERE_ROUTING_SPEEDS: + self.fields.pop('speed') + self.fields['speed'].widget.choices = [] + for transport in settings.CHIMERE_ROUTING_SPEEDS: + for speed, lbl in settings.CHIMERE_ROUTING_SPEEDS[transport]: + self.fields['speed'].widget.choices.append( + ("%s_%d" % (transport, speed), _(lbl))) |
