diff options
author | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-08-29 19:29:48 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-11-26 15:53:31 +0100 |
commit | c978532f9ac828a812acb6fbb12da978eb55dc28 (patch) | |
tree | 5947d874f1e7e6c0b311075c23a49338e48bb851 /chimere/forms.py | |
parent | 8a4293f93328ad4aca63a9019f68b41e004fbf18 (diff) | |
download | Chimère-c978532f9ac828a812acb6fbb12da978eb55dc28.tar.bz2 Chimère-c978532f9ac828a812acb6fbb12da978eb55dc28.zip |
Manage auto-detection of multimedia type by extension - improvement on alternate multimedia widget
Conflicts:
chimere/admin.py
chimere/forms.py
chimere/models.py
chimere/templates/chimere/blocks/alternate_multimedia.html
chimere/templatetags/chimere_tags.py
Diffstat (limited to 'chimere/forms.py')
-rw-r--r-- | chimere/forms.py | 31 |
1 files changed, 28 insertions, 3 deletions
diff --git a/chimere/forms.py b/chimere/forms.py index efea3dd..813f0f8 100644 --- a/chimere/forms.py +++ b/chimere/forms.py @@ -32,8 +32,9 @@ from django.contrib.admin.widgets import AdminDateWidget 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 + News, Category, SubCategory, RouteFile, MultimediaFile, MultimediaType, \ + PictureFile, Importer, IMPORTER_CHOICES, PropertyModelChoice, IFRAME_LINKS,\ + MultimediaExtension from chimere.widgets import AreaField, PointField, TextareaWidget, \ ImportFiltrWidget, TextareaAdminWidget, DatePickerWidget, \ ImporterChoicesWidget, RE_XAPI @@ -425,7 +426,31 @@ class MultimediaFileForm(BaseFileForm): def __init__(self, *args, **kwargs): super(MultimediaFileForm, self).__init__(*args, **kwargs) self.fields['multimedia_type'].widget.choices = \ - MultimediaType.get_tuples() + MultimediaType.get_tuples() + + def clean(self): + if not self.cleaned_data.get('multimedia_type') or\ + not self.cleaned_data.get('url'): + return self.cleaned_data + if 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) |