summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
Diffstat (limited to 'main')
-rw-r--r--main/actions.py2
-rw-r--r--main/models.py40
-rw-r--r--main/views.py37
3 files changed, 54 insertions, 25 deletions
diff --git a/main/actions.py b/main/actions.py
index a4bf06d..77f8a46 100644
--- a/main/actions.py
+++ b/main/actions.py
@@ -30,4 +30,4 @@ class Action:
self.id, self.path, self.label = id, main_path + path, label
actions = [Action('view', '', _('View')), Action('edit', 'edit', _('Add')),
- Action('edit-route', 'edit-route', _('Add route'))]
+ Action('edit_route', 'edit_route', _('Add route'))]
diff --git a/main/models.py b/main/models.py
index ead8a85..ee44a84 100644
--- a/main/models.py
+++ b/main/models.py
@@ -24,6 +24,7 @@ from django.utils.translation import ugettext_lazy as _
from django.contrib.gis.db import models
from django.contrib import admin
+from django.db.models import Q
from chimere import settings
from chimere.main.widgets import PointField, RouteField
@@ -72,20 +73,31 @@ class SubCategory(models.Model):
name = models.CharField(_("Name"), max_length=150)
available = models.BooleanField(_("Available"))
icon = models.ForeignKey(Icon, verbose_name=_("Icon"))
+ color = models.CharField(max_length=10, blank=True, null=True)
order = models.IntegerField(_("Order"))
+ TYPE = (('M', _('Marker')),
+ ('R', _('Route')),
+ ('B', _('Both')),)
+ item_type = models.CharField(_("Item type"), max_length=1, choices=TYPE)
def __unicode__(self):
return u"%s / %s" % (self.category.name, self.name)
class Meta:
ordering = ["category", "order"]
verbose_name = _("Subcategory")
- def getAvailable():
+ def getAvailable(item_types=None):
'''Get list of tuples with first the category and second the associated
subcategories
'''
sub_categories = {}
- for sub_category in SubCategory.objects.filter(category__available=True,
- available=True):
+ subcategories = None
+ if not item_types:
+ subcategories = SubCategory.objects.filter(category__available=True,
+ available=True)
+ else:
+ subcategories = SubCategory.objects.filter(category__available=True,
+ item_type__in=item_types)
+ for sub_category in subcategories:
if sub_category.category not in sub_categories:
sub_categories[sub_category.category] = []
sub_categories[sub_category.category].append(sub_category)
@@ -153,13 +165,11 @@ class Marker(models.Model):
def getGeoJSON(self):
'''Return a GeoJSON string
'''
- return """{"type":"Feature", "geometry":{"type":"Point", \
-"crs": "EPSG:%(epsg)d", "coordinates":[%(longitude)s, %(latitude)s]}, \
+ return """{"type":"Feature", "geometry":%(geometry)s, \
"properties":{"pk": %(id)d, "name": "%(name)s", \
"icon_path":"%(icon_path)s", "icon_width":%(icon_width)d, \
"icon_height":%(icon_height)d}}""" % {'id':self.id, 'name':self.name,
-'icon_path':self.subcategory.icon.image, 'latitude':self.getLatitude(),
-'longitude':self.getLongitude(), 'epsg':settings.EPSG_PROJECTION,
+'icon_path':self.subcategory.icon.image, 'geometry':self.point.geojson,
'icon_width':self.subcategory.icon.image.width,
'icon_height':self.subcategory.icon.image.height,}
@@ -223,17 +233,13 @@ class Route(models.Model):
def getGeoJSON(self):
'''Return a GeoJSON string
'''
- return """{"type":"Feature", "geometry":{"type":"Point", \
-"crs": "EPSG:%(epsg)d", "coordinates":[%(longitude)s, %(latitude)s]}, \
+ color = '#000'
+ if self.subcategory.color:
+ color = self.subcategory.color
+ return """{"type":"Feature", "geometry":%(geometry)s, \
"properties":{"pk": %(id)d, "name": "%(name)s", \
-"icon_path":"%(icon_path)s", "icon_width":%(icon_width)d, \
-"icon_height":%(icon_height)d}}""" % {'id':self.id, 'name':self.name,
-'icon_path':self.subcategory.icon.image, 'latitude':self.getLatitude(),
-'longitude':self.getLongitude(), 'epsg':settings.EPSG_PROJECTION,
-'icon_width':self.subcategory.icon.image.width,
-'icon_height':self.subcategory.icon.image.height,}
-
-
+"color":"%(color)s"}}""" % {'id':self.id, 'name':self.name,
+'color':color, 'geometry':self.route.geojson,}
class PropertyModel(models.Model):
'''Model for a property
diff --git a/main/views.py b/main/views.py
index f0cc604..a7a4da7 100644
--- a/main/views.py
+++ b/main/views.py
@@ -77,7 +77,7 @@ def edit(request):
# set the submited status
marker.status = 'S'
marker.save()
- return HttpResponseRedirect('/chimere/submited')
+ return HttpResponseRedirect('/chimere/submited/edit')
else:
# An unbound form
form = MarkerForm()
@@ -88,7 +88,7 @@ def edit(request):
'media_path':settings.MEDIA_URL,
'form':form,
'extra_head':form.media,
- 'sub_categories':SubCategory.getAvailable(),
+ 'sub_categories':SubCategory.getAvailable(['M', 'B']),
'point_widget':PointChooserWidget().render('point', None),
'properties':declared_fields
}
@@ -111,18 +111,18 @@ def editRoute(request):
# set the submited status
route.status = 'S'
route.save()
- return HttpResponseRedirect('/chimere/submited')
+ return HttpResponseRedirect('/chimere/submited/edit_route')
else:
# An unbound form
form = RouteForm()
# get the « manualy » declared_fields. Ie: properties
declared_fields = form.declared_fields.keys()
- response_dct = {'actions':actions, 'action_selected':'edit-route',
+ response_dct = {'actions':actions, 'action_selected':'edit_route',
'error_message':'',
'media_path':settings.MEDIA_URL,
'form':form,
'extra_head':form.media,
- 'sub_categories':SubCategory.getAvailable(),
+ 'sub_categories':SubCategory.getAvailable(['R', 'B']),
'route_widget':RouteChooserWidget().render('route', None),
'properties':declared_fields
}
@@ -139,11 +139,12 @@ def welcome(request, display=None):
response_dct['news_lst'] = News.objects.filter(available=True)
return loader.render_to_string('welcome.html', response_dct)
-def submited(request):
+def submited(request, action):
"""
Successful submission page
"""
- response_dct = {'actions':actions, 'action_selected':'edit',
+ print action
+ response_dct = {'actions':actions, 'action_selected':action,
'media_path':settings.MEDIA_URL,}
return render_to_response('submited.html', response_dct)
@@ -174,3 +175,25 @@ def getMarkers(request, category_ids):
data = '{"type": "FeatureCollection", "features":[%s]}' % \
",".join([marker.getGeoJSON() for marker in markers])
return HttpResponse(data)
+
+def getGeoObjects(request, category_ids):
+ '''
+ Get the JSON for a route
+ '''
+ try:
+ query = Route.objects.filter(status='A',
+ subcategory__in=category_ids.split('_'))
+ except:
+ return HttpResponse('no results')
+ geo_objects = list(query)
+ try:
+ query = Marker.objects.filter(status='A',
+ subcategory__in=category_ids.split('_'))
+ except:
+ return HttpResponse('no results')
+ geo_objects += list(query)
+ if not geo_objects:
+ return HttpResponse('no results')
+ data = '{"type": "FeatureCollection", "features":[%s]}' % \
+ ",".join([geo_object.getGeoJSON() for geo_object in geo_objects])
+ return HttpResponse(data) \ No newline at end of file