summaryrefslogtreecommitdiff
path: root/chimere/forms.py
diff options
context:
space:
mode:
Diffstat (limited to 'chimere/forms.py')
-rw-r--r--chimere/forms.py90
1 files changed, 75 insertions, 15 deletions
diff --git a/chimere/forms.py b/chimere/forms.py
index 0d4bba6..1d403c8 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
@@ -163,6 +183,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
@@ -246,16 +269,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
"""
@@ -562,3 +601,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)))