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) | 
