diff options
Diffstat (limited to 'chimere/models.py')
| -rw-r--r-- | chimere/models.py | 136 |
1 files changed, 73 insertions, 63 deletions
diff --git a/chimere/models.py b/chimere/models.py index 7db530a..60e4cd1 100644 --- a/chimere/models.py +++ b/chimere/models.py @@ -105,7 +105,7 @@ class News(models.Model): date = models.DateField(_(u"Date"), auto_now_add=True) content = models.TextField() url = models.URLField(_(u"Url"), max_length=200, blank=True, null=True) - areas = SelectMultipleField('Area', verbose_name=_(u"Associated areas"), + maps = SelectMultipleField('Map', verbose_name=_(u"Associated maps"), blank=True, null=True) def __unicode__(self): ordering = ["-date"] @@ -239,7 +239,7 @@ class SubCategory(models.Model): verbose_name_plural = _(u"Sub-categories") @classmethod - def getAvailable(cls, item_types=None, area_name=None, public=False): + def getAvailable(cls, item_types=None, map_name=None, public=False): '''Get list of tuples with first the category and second the associated subcategories ''' @@ -252,14 +252,14 @@ class SubCategory(models.Model): if public: subcategories = subcategories.filter(submission=True) selected_cats = [] - if area_name: - area = Area.objects.get(urn=area_name) + if map_name: + map = Map.objects.get(urn=map_name) # if there some restrictions with categories limit them - if area.subcategories.count(): - sub_ids = [sub.id for sub in area.subcategories.all()] + if map.subcategories.count(): + sub_ids = [sub.id for sub in map.subcategories.all()] subcategories = subcategories.filter(id__in=sub_ids) selected_cats = [subcat.pk - for subcat in area.default_subcategories.all()] + for subcat in map.default_subcategories.all()] for sub_category in subcategories.order_by('order'): if sub_category.category not in sub_categories: sub_categories[sub_category.category] = [] @@ -275,9 +275,9 @@ class SubCategory(models.Model): return subcategories @classmethod - def getAvailableTuples(cls, area_name=None): + def getAvailableTuples(cls, map_name=None): cats = [] - for cat, subcats in cls.getAvailable(area_name=area_name): + for cat, subcats in cls.getAvailable(map_name=map_name): cats.append((unicode(cat), [(subcat.pk, subcat.name) for subcat in subcats])) return cats @@ -679,20 +679,20 @@ class Marker(GeographicItem): if cats.count(): return cats.all()[0] - def get_absolute_url(self, area_name=''): + def get_absolute_url(self, map_name=''): parameters = 'current_feature=%d' % self.id if self.default_category: parameters += '&checked_categories=%s' % self.default_category.pk urn = TinyUrl.getUrnByParameters(parameters) - area_name = area_name + '/' if area_name else '' - url = reverse('chimere:tiny', args=[area_name, urn]) + map_name = map_name + '/' if map_name else '' + url = reverse('chimere:tiny', args=[map_name, urn]) return url PRE_ATTRS = { 'Marker':('name', 'geometry', 'import_version', 'modified_since_import'), 'Route':('name', 'geometry', 'import_version', 'modified_since_import'), - 'Area':('urn', 'name'), + 'Map':('urn', 'name'), } def geometry_pre_save(cls, pre_save_geom_values): def geom_pre_save(sender, **kwargs): @@ -1278,14 +1278,14 @@ class SimpleArea: return True return False - def getCategories(self, status='A', filter_available=True, area_name=None): + def getCategories(self, status='A', filter_available=True, map_name=None): """ - Get categories for this area + Get categories for this map """ wheres = [] - if area_name: + if map_name: subcategory_pks = [] - for cat, subcats in SubCategory.getAvailable(area_name=area_name): + for cat, subcats in SubCategory.getAvailable(map_name=map_name): for subcat in subcats: subcategory_pks.append(unicode(subcat.pk)) if filter_available: @@ -1349,11 +1349,11 @@ class Layer(models.Model): class Meta: verbose_name = _("Layer") -class Area(models.Model, SimpleArea): - """Rectangular area of the map +class Map(models.Model, SimpleArea): + """A map """ name = models.CharField(_(u"Name"), max_length=150) - urn = models.SlugField(_(u"Area urn"), max_length=50, blank=True, + urn = models.SlugField(_(u"Map urn"), max_length=50, blank=True, unique=True) welcome_message = models.TextField(_(u"Welcome message"), blank=True, null=True) @@ -1363,18 +1363,18 @@ class Area(models.Model, SimpleArea): default='POINT(0 0)', srid=settings.CHIMERE_EPSG_DISPLAY_PROJECTION) lower_right_corner = models.PointField(_(u"Lower right corner"), default='POINT(0 0)', srid=settings.CHIMERE_EPSG_DISPLAY_PROJECTION) - default = models.NullBooleanField(_(u"Default area"), - help_text=_(u"Only one area is set by default")) - layers = SelectMultipleField(Layer, related_name='areas', - through='AreaLayers', blank=True) + default = models.NullBooleanField(_(u"Default map"), + help_text=_(u"Only one map is set by default")) + layers = SelectMultipleField(Layer, related_name='maps', + through='MapLayers', blank=True) default_subcategories = SelectMultipleField(SubCategory, blank=True, verbose_name=_(u"Sub-categories checked by default")) dynamic_categories = models.NullBooleanField( _(u"Sub-categories dynamicaly displayed"), help_text=_(u"If checked, categories are only displayed in the menu if " u"they are available on the current extent.")) - subcategories = SelectMultipleField(SubCategory, related_name='areas', - blank=True, db_table='chimere_subcategory_areas', + subcategories = SelectMultipleField(SubCategory, related_name='maps', + blank=True, db_table='chimere_subcategory_maps', verbose_name=_(u"Restricted to theses sub-categories"), help_text=_(u"If no sub-category is set all sub-categories are " u"available")) @@ -1389,11 +1389,11 @@ class Area(models.Model, SimpleArea): class Meta: ordering = ('order', 'name') - verbose_name = _("Area") + verbose_name = _("Map") @classmethod def getAvailable(cls): - '''Get available areas + '''Get available maps ''' return cls.objects.filter(available=True) @@ -1419,54 +1419,64 @@ class Area(models.Model, SimpleArea): """ return Q(route__contained=self.getWkt()) -pre_save_area_values = {} -def area_pre_save(sender, **kwargs): +pre_save_map_values = {} +def map_pre_save(sender, **kwargs): if not kwargs['instance']: return - geometry_pre_save(Area, pre_save_area_values)(sender, **kwargs) -pre_save.connect(area_pre_save, sender=Area) + geometry_pre_save(Map, pre_save_map_values)(sender, **kwargs) +pre_save.connect(map_pre_save, sender=Map) -def area_post_save(sender, **kwargs): +def map_post_save(sender, **kwargs): if not kwargs['instance']: return - area = kwargs['instance'] - if area.default: - defaults = Area.objects.filter(default=True).exclude(pk=area.pk) + map = kwargs['instance'] + if map.default: + defaults = Map.objects.filter(default=True).exclude(pk=map.pk) for default in defaults: default.default = False default.save() # manage permissions - old_urn, old_name = area.urn, area.name - if area.pk in pre_save_area_values: - old_urn, old_name = pre_save_area_values[area.pk] + old_urn, old_name = map.urn, map.name + if map.pk in pre_save_map_values: + old_urn, old_name = pre_save_map_values[map.pk] perm, old_groups, old_users = None, [], [] - if area.urn != old_urn: - oldmnemo = 'change_area_' + old_urn + + if map.urn != old_urn: + oldmnemo = 'change_map_' + old_urn old_perm = Permission.objects.filter(codename=oldmnemo) if old_perm.count(): perm = old_perm.all()[0] - perm.codename = 'change_area_' + area.urn + perm.codename = 'change_map_' + map.urn perm.save() - if not area.urn: - area.urn = defaultfilters.slugify(area.name) - area.save() - mnemo = 'change_area_' + area.urn + if not map.urn: + map.urn = defaultfilters.slugify(map.name) + map.save() + + # fix old mnemo + oldmnemo = 'change_area_' + old_urn + old_perm = Permission.objects.filter(codename=oldmnemo) + if old_perm.count(): + perm = old_perm.all()[0] + perm.codename = 'change_map_' + map.urn + perm.save() + + mnemo = 'change_map_' + map.urn perm = Permission.objects.filter(codename=mnemo) - lbl = "Can change " + area.name + lbl = "Can change " + map.name if not perm.count(): content_type, created = ContentType.objects.get_or_create( - app_label="chimere", model="area") + app_label="chimere", model="map") perm = Permission(name=lbl, content_type_id=content_type.id, codename=mnemo) perm.save() else: perm = perm.all()[0] - if old_name != area.name: + if old_name != map.name: perm.name = lbl perm.save() # manage moderation group - groupname = area.name + " moderation" - if old_name != area.name: + groupname = map.name + " moderation" + if old_name != map.name: old_groupname = old_name + " moderation" old_gp = Group.objects.filter(name=old_groupname) if old_gp.count(): @@ -1487,33 +1497,33 @@ def area_post_save(sender, **kwargs): for p in Permission.objects.filter(content_type=ct).all(): group.permissions.add(p) -post_save.connect(area_post_save, sender=Area) +post_save.connect(map_post_save, sender=Map) -def get_areas_for_user(user): +def get_maps_for_user(user): """ Getting subcats for a specific user """ perms = user.get_all_permissions() - areas = set() - prefix = 'chimere.change_area_' + maps = set() + prefix = 'chimere.change_map_' for perm in perms: if perm.startswith(prefix): try: - area = Area.objects.get(urn=perm[len(prefix):]) - areas.add(area) + map = Map.objects.get(urn=perm[len(prefix):]) + maps.add(map) except ObjectDoesNotExist: pass - return areas + return maps -def get_users_by_area(area): - if not area: +def get_users_by_map(map): + if not map: return [] - perm = 'change_area_'+area.urn + perm = 'change_map_'+map.urn return User.objects.filter(Q(groups__permissions__codename=perm)| Q(user_permissions__codename=perm)).all() -class AreaLayers(models.Model): - area = models.ForeignKey(Area) +class MapLayers(models.Model): + map = models.ForeignKey(Map) layer = models.ForeignKey(Layer) order = models.IntegerField(_(u"Order")) default = models.NullBooleanField(_(u"Default layer")) |
