summaryrefslogtreecommitdiff
path: root/chimere/forms.py
diff options
context:
space:
mode:
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
commitc978532f9ac828a812acb6fbb12da978eb55dc28 (patch)
tree5947d874f1e7e6c0b311075c23a49338e48bb851 /chimere/forms.py
parent8a4293f93328ad4aca63a9019f68b41e004fbf18 (diff)
downloadChimè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.py31
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)