summaryrefslogtreecommitdiff
path: root/chimere/models.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@peacefrogs.net>2012-10-02 19:17:33 +0200
committerÉtienne Loks <etienne.loks@peacefrogs.net>2012-10-02 19:17:33 +0200
commit40e3f0a927b22fef64b6a59c006511b4ba243a07 (patch)
treecde63d0487fe0112c1d9c243701a48d53075a30e /chimere/models.py
parent4bc82f3f73577118d3cc534eaf749d16321c552a (diff)
parent58aba7b0661d51e98132e2ed1b726c865316b4a2 (diff)
downloadChimère-40e3f0a927b22fef64b6a59c006511b4ba243a07.tar.bz2
Chimère-40e3f0a927b22fef64b6a59c006511b4ba243a07.zip
Merge branch 'master' into saclay
Conflicts: chimere/admin.py chimere/locale/fr/LC_MESSAGES/django.po chimere/models.py chimere/templates/chimere/main_map.html chimere/templatetags/chimere_tags.py chimere/views.py
Diffstat (limited to 'chimere/models.py')
-rw-r--r--chimere/models.py51
1 files changed, 39 insertions, 12 deletions
diff --git a/chimere/models.py b/chimere/models.py
index c11a115..e44b43c 100644
--- a/chimere/models.py
+++ b/chimere/models.py
@@ -204,7 +204,9 @@ class SubCategory(models.Model):
'''
category = models.ForeignKey(Category, verbose_name=_(u"Category"))
name = models.CharField(_(u"Name"), max_length=150)
- available = models.BooleanField(_(u"Available"))
+ available = models.BooleanField(_(u"Available"), default=True)
+ submission = models.BooleanField(_(u"Available for submission"),
+ default=True)
icon = models.ForeignKey(Icon, verbose_name=_(u"Icon"))
hover_icon = models.ForeignKey(Icon, verbose_name=_(u"Hover icon"),
blank=True, null=True, related_name='subcat_hovered')
@@ -225,7 +227,7 @@ class SubCategory(models.Model):
verbose_name_plural = _(u"Sub-categories")
@classmethod
- def getAvailable(cls, item_types=None, area_name=None):
+ def getAvailable(cls, item_types=None, area_name=None, public=False):
'''Get list of tuples with first the category and second the associated
subcategories
'''
@@ -235,6 +237,8 @@ class SubCategory(models.Model):
subcategories = subcategories.filter(available=True)
else:
subcategories = subcategories.filter(item_type__in=item_types)
+ if public:
+ subcategories = subcategories.filter(submission=True)
selected_cats = []
if area_name:
area = Area.objects.get(urn=area_name)
@@ -448,6 +452,10 @@ class Marker(GeographicItem):
def short_desc(self):
return shortify(self.description)
+ @property
+ def geometry(self):
+ return self.point.wkt
+
class Meta:
ordering = ('status', 'name')
verbose_name = _(u"Point of interest")
@@ -549,21 +557,33 @@ class Marker(GeographicItem):
url = reverse('chimere:tiny', args=[area_name, urn])
return url
+def geometry_pre_save(cls, pre_save_geom_values):
+ def geom_pre_save(sender, **kwargs):
+ if not kwargs['instance'] or not kwargs['instance'].pk:
+ return
+ instance = kwargs['instance']
+ try:
+ instance = cls.objects.get(pk=instance.pk)
+ pre_save_geom_values[instance.pk] = (instance.name,
+ instance.geometry, instance.import_version)
+ except ObjectDoesNotExist:
+ pass
+ return geom_pre_save
+
pre_save_marker_values = {}
def marker_pre_save(sender, **kwargs):
if not kwargs['instance']:
return
- instance = kwargs['instance']
- pre_save_marker_values[instance.pk] = (instance.name, instance.point,
- instance.import_version)
+ geometry_pre_save(Marker, pre_save_marker_values)(sender, **kwargs)
pre_save.connect(marker_pre_save, sender=Marker)
def geometry_post_save(pre_save_geom_values):
def geom_post_save(sender, **kwargs):
- if not kwargs['instance']:
+ if not kwargs['instance'] \
+ or kwargs['instance'].pk not in pre_save_geom_values:
return
instance = kwargs['instance']
- name, geometry, import_version = pre_save_geom_values[instance]
+ name, geometry, import_version = pre_save_geom_values[instance.pk]
if (instance.import_version != import_version
and instance.modified_since_import):
instance.modified_since_import = False
@@ -573,8 +593,13 @@ def geometry_post_save(pre_save_geom_values):
return
if instance.name != name or instance.geometry != geometry:
instance.modified_since_import = True
+ instance.save()
return geom_post_save
-post_save.connect(geometry_post_save(pre_save_marker_values), sender=Marker)
+def marker_post_save(sender, **kwargs):
+ if not kwargs['instance']:
+ return
+ geometry_post_save(pre_save_marker_values)(sender, **kwargs)
+post_save.connect(marker_post_save, sender=Marker)
class MultimediaType(models.Model):
MEDIA_TYPES = (('A', _(u"Audio")),
@@ -876,6 +901,10 @@ class Route(GeographicItem):
ordering = ('status', 'name')
verbose_name = _(u"Route")
+ @property
+ def geometry(self):
+ return self.point.wkt
+
def get_init_multi(self):
if not self.associated_marker.count():
return []
@@ -933,15 +962,13 @@ pre_save_route_values = {}
def route_pre_save(sender, **kwargs):
if not kwargs['instance']:
return
- instance = kwargs['instance']
- pre_save_route_values[instance.pk] = (instance.name, instance.route,
- instance.import_version)
+ geometry_pre_save(Route, pre_save_route_values)(sender, **kwargs)
pre_save.connect(route_pre_save, sender=Route)
def route_post_save(sender, **kwargs):
if not kwargs['instance']:
return
- geometry_post_save(pre_save_route_values)
+ geometry_post_save(pre_save_route_values)(sender, **kwargs)
instance = kwargs['instance']
marker_fields = [f.attname for f in Marker._meta.fields]
route_fields = [f.attname for f in Route._meta.fields]