diff options
author | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-11-26 19:50:43 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-11-26 19:50:43 +0100 |
commit | 43b0c50accfa1017ee323ba121ac53920d1cdbf5 (patch) | |
tree | 9f554b2e55dfa8a36209363c82ddaa4915c3448f /chimere/forms.py | |
parent | f769930eca0a0bbccf991e52c6c6abbba6414390 (diff) | |
parent | a95b7d7e58b6d8e0847b9a49e3afe0ac7a939a39 (diff) | |
download | Chimère-43b0c50accfa1017ee323ba121ac53920d1cdbf5.tar.bz2 Chimère-43b0c50accfa1017ee323ba121ac53920d1cdbf5.zip |
Merge branch 'master' into saclay
Conflicts:
chimere/admin.py
chimere/fixtures/initial_data.json
chimere/forms.py
chimere/locale/fr/LC_MESSAGES/django.po
chimere/static/chimere/css/styles.css
chimere/templates/chimere/blocks/alternate_multimedia.html
chimere/templates/chimere/blocks/categories.html
chimere/widgets.py
Diffstat (limited to 'chimere/forms.py')
-rw-r--r-- | chimere/forms.py | 68 |
1 files changed, 42 insertions, 26 deletions
diff --git a/chimere/forms.py b/chimere/forms.py index be68205..db084f0 100644 --- a/chimere/forms.py +++ b/chimere/forms.py @@ -37,7 +37,7 @@ from chimere.models import Marker, Route, PropertyModel, Property, Area,\ MultimediaExtension, Page from chimere.widgets import AreaField, PointField, TextareaWidget, \ FullTextareaWidget, DatePickerWidget, ButtonSelectWidget, NominatimWidget, \ - TextareaAdminWidget + TextareaAdminWidget, ImportFiltrWidget, ImporterChoicesWidget, RE_XAPI from datetime import timedelta, datetime, tzinfo @@ -110,6 +110,23 @@ class PageAdminForm(forms.ModelForm): class Meta: model = Page +class OSMForm(forms.Form): + """ + OSM export form + """ + username = forms.CharField(label=_("OSM user")) + password = forms.CharField(label=_(u"Password"), + widget=forms.PasswordInput(render_value=False)) + # API URL are hardcoded: the day the API change Chimère will need + # adaptations not only on this portion... + api = forms.ChoiceField(label=_(u"API"), + choices=(('', '--'), + ('api06.dev.openstreetmap.org', + _(u"Test API - %s") % 'api06.dev.openstreetmap.org'), + ('api.openstreetmap.org/api', + _(u"Main API - %s") % 'api.openstreetmap.org/api'), + )) + class NewsAdminForm(forms.ModelForm): """ Main form for news @@ -119,6 +136,9 @@ class NewsAdminForm(forms.ModelForm): model = News class ImporterAdminForm(forms.ModelForm): + filtr = forms.CharField(widget=ImportFiltrWidget, required=False) + importer_type = forms.ChoiceField(widget=ImporterChoicesWidget, + choices=[('', '--')]+list(IMPORTER_CHOICES)) class Meta: model = Importer widgets = { @@ -131,6 +151,14 @@ class ImporterAdminForm(forms.ModelForm): Verify that only one type of source is provided Verify that shapefiles are zipped ''' + if self.cleaned_data.get('importer_type') == 'OSM' and \ + not self.cleaned_data.get('filtr'): + raise forms.ValidationError(_(u"For OSM import you must be "\ + u"provide a filter. Select an area and node/way filter.")) + if self.cleaned_data.get('importer_type') == 'OSM' and \ + not RE_XAPI.match(self.cleaned_data.get('filtr')): + raise forms.ValidationError(_(u"For OSM import you must be "\ + u"provide a filter. Select an area and node/way filter.")) if self.cleaned_data.get('importer_type') == 'SHP' and \ not self.cleaned_data.get('zipped'): raise forms.ValidationError(_(u"Shapefiles must be provided in a "\ @@ -358,13 +386,20 @@ class RouteForm(RouteAdminForm): Custom save method in order to manage associated marker and file """ new_route = super(RouteForm, self).save(*args, **keys) + if new_route.status == 'S': + new_route.has_associated_marker = True + new_route.save() # associate a route file if 'associated_file_id' in self.cleaned_data and \ self.cleaned_data['associated_file_id']: file_pk = int(self.cleaned_data['associated_file_id']) new_route.associated_file = RouteFile.objects.get(pk=file_pk) new_route.save() - new_marker = Marker.objects.get(route=new_route) + # change the associated marker (if available) + q_new_marker = Marker.objects.filter(route=new_route) + if not q_new_marker.count(): + return new_route + new_marker = q_new_marker.all()[0] # save description if self.cleaned_data['description']: new_marker.description = self.cleaned_data['description'] @@ -417,6 +452,11 @@ class MultimediaFileAdminForm(forms.ModelForm): '%schimere/js/menu-sort.js' % settings.STATIC_URL, ] + def __init__(self, *args, **kwargs): + super(MultimediaFileAdminForm, self).__init__(*args, **kwargs) + self.fields['multimedia_type'].widget.choices = \ + MultimediaType.get_tuples() + class MultimediaFileForm(BaseFileForm): """ Form for a multimedia file @@ -433,30 +473,6 @@ class MultimediaFileForm(BaseFileForm): # this can be auto detect self.fields['multimedia_type'].required = False - def clean(self): - if not self.cleaned_data.get('url'): - return self.cleaned_data - if self.cleaned_data.get('multimedia_type') and \ - self.cleaned_data['multimedia_type'].name != 'auto': - return self.cleaned_data - url = self.cleaned_data['url'] - for mm_type in IFRAME_LINKS: - res, embeded_url = IFRAME_LINKS[mm_type] - if [r for r in res if r.search(url)]: - multimedia_type = MultimediaType.objects.get( - name__iexact=mm_type) - self.cleaned_data['multimedia_type'] = multimedia_type - return self.cleaned_data - ext = url.split(".")[-1] - q = MultimediaExtension.objects.filter(name__iendswith=ext) - if q.count(): - self.cleaned_data['multimedia_type'] = q.all()[0].multimedia_type - else: - # default to an iframe - self.cleaned_data['multimedia_type'] = \ - MultimediaType.objects.filter(name__iexact='iframe').all()[0] - return self.cleaned_data - MultimediaFileFormSet = formset_factory(MultimediaFileForm, can_delete=True) class PictureFileAdminForm(forms.ModelForm): |