diff options
Diffstat (limited to 'chimere/models.py')
-rw-r--r-- | chimere/models.py | 70 |
1 files changed, 43 insertions, 27 deletions
diff --git a/chimere/models.py b/chimere/models.py index 55f5342..183e22d 100644 --- a/chimere/models.py +++ b/chimere/models.py @@ -338,6 +338,8 @@ class Importer(models.Model): verbose_name=_(u"Associated subcategories")) state = models.CharField(_(u"State"), max_length=200, blank=True, null=True) + associate_marker_to_way = models.BooleanField(_(u"Automatically associate "\ + u"a marker to a way"), default=False) class Meta: verbose_name = _(u"Importer") @@ -514,6 +516,10 @@ class Marker(GeographicItem): def geometry(self): return self.point.wkt + @property + def geom_attr(self): + return 'point' + class Meta: ordering = ('status', 'name') verbose_name = _(u"Point of interest") @@ -726,10 +732,10 @@ IFRAME_LINKS = { (re.compile(r'dailymotion.com/video/([A-Za-z0-9]*)_[A-Za-z0-9_-]*'), re.compile(r'dailymotion.com/embed/video/([A-Za-z0-9]*)'), re.compile("http://www.dailymotion.com/embed/video/%s")), - 'http://www.dailymotion.com/embed/video/%s'), - 'vimeo':((re.compile(r'vimeo.com/([A-Za-z0-9]*)'), - re.compile(r'vimeo.com/video/([A-Za-z0-9]*)')), - "http://player.vimeo.com/video/%s") + 'http://www.dailymotion.com/embed/video/%s'), + 'vimeo':((re.compile(r'vimeo.com/video/([A-Za-z0-9]*)'), + re.compile(r'vimeo.com/([A-Za-z0-9]*)'),), + "http://player.vimeo.com/video/%s") } class MultimediaExtension(models.Model): @@ -975,6 +981,8 @@ class Route(GeographicItem): null=True, height_field='height', width_field='width') height = models.IntegerField(_(u"Height"), blank=True, null=True) width = models.IntegerField(_(u"Width"), blank=True, null=True) + has_associated_marker = models.BooleanField(_(u"Has an associated marker"), + default=True) objects = models.GeoManager() def __unicode__(self): @@ -1010,6 +1018,10 @@ class Route(GeographicItem): def geometry(self): return self.route.wkt + @property + def geom_attr(self): + return 'route' + def get_init_multi(self): if not self.associated_marker.count(): return [] @@ -1075,27 +1087,31 @@ def route_post_save(sender, **kwargs): return 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] - marker_dct = dict([(k, getattr(instance, k)) for k in marker_fields - if k in route_fields and k not in ('id', 'ref_item_id')]) - marker_dct['point'] = "SRID=%d;POINT(%f %f)" % (instance.route.srid, - instance.route[0][0], instance.route[0][1]) - marker, created = Marker.objects.get_or_create(route=instance, - defaults=marker_dct) - if not created: - marker.status = instance.status - marker.save() - properties = {} - for pm in instance.properties(): - prop = instance.getProperty(pm) - if prop: - properties[pm.pk] = prop.python_value - # fix mis-initialized markers - if created: - for cat in instance.categories.all(): - marker.categories.add(cat) - marker.saveProperties(properties) + + # manage associated marker + if instance.has_associated_marker: + marker_fields = [f.attname for f in Marker._meta.fields] + route_fields = [f.attname for f in Route._meta.fields] + marker_dct = dict([(k, getattr(instance, k)) for k in marker_fields + if k in route_fields and k not in ('id', 'ref_item_id')]) + marker_dct['point'] = "SRID=%d;POINT(%f %f)" % (instance.route.srid, + instance.route[0][0], instance.route[0][1]) + marker, created = Marker.objects.get_or_create(route=instance, + defaults=marker_dct) + if not created: + marker.status = instance.status + marker.point = marker_dct['point'] + marker.save() + properties = {} + for pm in instance.properties(): + prop = instance.getProperty(pm) + if prop: + properties[pm.pk] = prop.python_value + # fix mis-initialized markers + if created: + for cat in instance.categories.all(): + marker.categories.add(cat) + marker.saveProperties(properties) post_save.connect(route_post_save, sender=Route) @@ -1104,7 +1120,7 @@ def sync_m2m_route(sender, **kwargs): return route = kwargs['instance'] marker = route.associated_marker - if not marker.count: + if not marker.count(): return marker = marker.all()[0] marker.categories.clear() @@ -1238,7 +1254,7 @@ class Area(models.Model, SimpleArea): unique=True) welcome_message = models.TextField(_(u"Welcome message"), blank=True, null=True) - order = models.IntegerField(_(u"Order")) + order = models.IntegerField(_(u"Order"), unique=True) available = models.BooleanField(_(u"Available")) upper_left_corner = models.PointField(_(u"Upper left corner"), default='POINT(0 0)', srid=settings.CHIMERE_EPSG_DISPLAY_PROJECTION) |