summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@peacefrogs.net>2012-03-09 17:39:59 +0100
committerÉtienne Loks <etienne.loks@peacefrogs.net>2012-03-09 17:39:59 +0100
commita825c819ede7dd3b3524f218ffafa10fdd483e87 (patch)
tree6b601e5f7f0c6ab536cdabf8827e671f7a255869
parent85c1ee167e2bbc4a3a71562f4d4423d1e88dcf79 (diff)
downloadChimère-a825c819ede7dd3b3524f218ffafa10fdd483e87.tar.bz2
Chimère-a825c819ede7dd3b3524f218ffafa10fdd483e87.zip
Manage multimedia type tree
-rw-r--r--chimere/forms.py10
-rw-r--r--chimere/models.py27
2 files changed, 29 insertions, 8 deletions
diff --git a/chimere/forms.py b/chimere/forms.py
index 4933c3a..430cb0c 100644
--- a/chimere/forms.py
+++ b/chimere/forms.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-# Copyright (C) 2008-2011 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
+# Copyright (C) 2008-2012 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as
@@ -31,7 +31,8 @@ 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, PictureFile
+ News, Category, SubCategory, RouteFile, MultimediaFile, MultimediaType, \
+ PictureFile
from chimere.widgets import AreaField, PointField, TextareaWidget, \
DatePickerWidget
@@ -317,6 +318,11 @@ class MultimediaFileForm(BaseFileForm):
model = MultimediaFile
exclude = ('order',)
+ def __init__(self, *args, **kwargs):
+ super(MultimediaFileForm, self).__init__(*args, **kwargs)
+ self.fields['multimedia_type'].widget.choices = \
+ MultimediaType.get_tuples()
+
MultimediaFileFormSet = formset_factory(MultimediaFileForm, can_delete=True)
class PictureFileForm(BaseFileForm):
diff --git a/chimere/models.py b/chimere/models.py
index da9104d..03c54a8 100644
--- a/chimere/models.py
+++ b/chimere/models.py
@@ -368,21 +368,36 @@ class MultimediaType(models.Model):
name = models.CharField(_(u"Name"), max_length=150)
mime_type = models.CharField(_(u"Mime type"), max_length=50, blank=True,
null=True)
- iframe = models.BooleanField(u"Inside an iframe", default=False)
+ iframe = models.BooleanField(_(u"Inside an iframe"), default=False)
available = models.BooleanField(_(u"Available"), default=True)
def __unicode__(self):
return self.name
+ @classmethod
+ def get_tuples(cls):
+ vals = cls.objects.filter(available=True).order_by('media_type',
+ 'name')
+ tuples, c_tpe = [('', '--')], None
+ media_type_dct = dict(cls.MEDIA_TYPES)
+ for tpe, pk, name in [(media_type_dct[v.media_type], v.pk, v.name)
+ for v in vals]:
+ if not c_tpe or c_tpe != tpe:
+ c_tpe = tpe
+ tuples.append([tpe, []])
+ tuples[-1][1].append((pk, name))
+ return tuples
+
IFRAME_LINKS = {
'youtube':((re.compile(r'youtube.com\/watch\?v=([A-Za-z0-9]*)'),
re.compile(r'youtu.be\/([A-Za-z0-9]*)'),
re.compile(r'youtube.com\/embed\/([A-Za-z0-9]*)')),
"http://www.youtube.com/embed/%s"),
- 'dailymotion':((re.compile(r'dailymotion.com/video/([A-Za-z0-9]*)_[A-Za-z0-9_-]*'),
- re.compile(r'dailymotion.com/embed/video/([A-Za-z0-9]*)'),
- re.compile("http://www.dailymotion.com/embed/video/%s")),
- 'http://www.dailymotion.com/embed/video/%s'),
+ 'dailymotion':(
+ (re.compile(r'dailymotion.com/video/([A-Za-z0-9]*)_[A-Za-z0-9_-]*'),
+ re.compile(r'dailymotion.com/embed/video/([A-Za-z0-9]*)'),
+ re.compile("http://www.dailymotion.com/embed/video/%s")),
+ 'http://www.dailymotion.com/embed/video/%s'),
'vimeo':((re.compile(r'vimeo.com/([A-Za-z0-9]*)'),
re.compile(r'vimeo.com/video/([A-Za-z0-9]*)')),
"http://player.vimeo.com/video/%s")
@@ -417,7 +432,7 @@ class PictureFile(models.Model):
height_field='height', width_field='width')
height = models.IntegerField(_(u"Height"))
width = models.IntegerField(_(u"Width"))
- miniature = models.BooleanField(_(u"Display inside the resume?"))
+ miniature = models.BooleanField(_(u"Display inside the description?"))
order = models.IntegerField(_(u"Order"), default=1)
def __unicode__(self):