summaryrefslogtreecommitdiff
path: root/chimere/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'chimere/models.py')
-rw-r--r--chimere/models.py70
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)