diff options
| 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 | 
| commit | 40e3f0a927b22fef64b6a59c006511b4ba243a07 (patch) | |
| tree | cde63d0487fe0112c1d9c243701a48d53075a30e /chimere/models.py | |
| parent | 4bc82f3f73577118d3cc534eaf749d16321c552a (diff) | |
| parent | 58aba7b0661d51e98132e2ed1b726c865316b4a2 (diff) | |
| download | Chimè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.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]  | 
