diff options
Diffstat (limited to 'chimere/models.py')
| -rw-r--r-- | chimere/models.py | 51 |
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] |
