summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@peacefrogs.net>2010-11-18 18:13:04 +0100
committerÉtienne Loks <etienne.loks@peacefrogs.net>2010-11-18 18:13:04 +0100
commit3b6e3004cd94b6d36dda3bb976eed8de3b972ba6 (patch)
treebe40e1338a66ed3ca697f1c1e08962b80367f240
parenta996be2b23a734a21a8b312501a976ffb60fa7e8 (diff)
downloadChimère-3b6e3004cd94b6d36dda3bb976eed8de3b972ba6.tar.bz2
Chimère-3b6e3004cd94b6d36dda3bb976eed8de3b972ba6.zip
Better management of rights for categories not associated to an area (fixes #268)
-rw-r--r--chimere/main/admin.py7
-rw-r--r--chimere/main/forms.py2
-rwxr-xr-xchimere/scripts/upgrade.py43
3 files changed, 39 insertions, 13 deletions
diff --git a/chimere/main/admin.py b/chimere/main/admin.py
index 38bb2b8..30ea716 100644
--- a/chimere/main/admin.py
+++ b/chimere/main/admin.py
@@ -56,10 +56,9 @@ class MarkerAdmin(admin.ModelAdmin):
qs = self.model._default_manager.get_query_set()
if not request.user.is_superuser:
areas = get_areas_for_user(request.user)
- if not areas:
- return self.model.objects.extra(where=['1=0'])
- in_areas = " or ".join([area.getIncludeSql() for area in areas])
- qs = qs.extra(where=[in_areas])
+ if areas:
+ in_areas = " or ".join([area.getIncludeSql() for area in areas])
+ qs = qs.extra(where=[in_areas])
ordering = self.ordering or ()
if ordering:
qs = qs.order_by(*ordering)
diff --git a/chimere/main/forms.py b/chimere/main/forms.py
index 1bc197f..ef13dc8 100644
--- a/chimere/main/forms.py
+++ b/chimere/main/forms.py
@@ -247,10 +247,8 @@ class AreaAdminForm(forms.ModelForm):
"""
Custom save method in order to manage area
"""
- print 1
new_area = super(AreaAdminForm, self).save(*args, **keys)
area = self.cleaned_data['area']
- print 2
new_area.upper_left_corner = 'POINT(%s %s)' % (area[0][0], area[0][1])
new_area.lower_right_corner = 'POINT(%s %s)' % (area[1][0],
area[1][1])
diff --git a/chimere/scripts/upgrade.py b/chimere/scripts/upgrade.py
index 0649a52..4c1cdc0 100755
--- a/chimere/scripts/upgrade.py
+++ b/chimere/scripts/upgrade.py
@@ -62,17 +62,46 @@ UNIQUE"
transaction.commit_unless_managed()
print " * urn field has now the constraint NOT NULL"
+from django.contrib.auth.models import Permission, ContentType
+
+# check if permission have been correctly set for each areas
+areas = Area.objects.all()
+for area in areas:
+ content_type = ContentType.objects.get(app_label="main",
+ model="area")
+ mnemo = 'change_area_' + area.urn
+ perm = Permission.objects.filter(codename=mnemo)
+ if not perm:
+ lbl = "Can change " + area.name
+ perm = Permission(name=lbl, content_type_id=content_type.id,
+ codename=mnemo)
+ perm.save()
+ print ' * permission "' + lbl + '" has been created'
+ print " WARNING: don't forget to update administrator's rights with \
+this new permission"
+
# early versions before 0.1: subcategory_areas table doesn't exist
+# version 1.0 subcategory_areas renamed to main_subcategory_areas
-query = """SELECT c.relname FROM pg_class c
-WHERE c.relname = 'subcategory_areas';"""
+query = QUERY_CHECK_TABLE % 'main_subcategory_areas'
cursor.execute(query)
transaction.commit_unless_managed()
row = cursor.fetchone()
if not row:
- query_create = """
-CREATE TABLE "subcategory_areas" (
+ query = QUERY_CHECK_TABLE % 'subcategory_areas'
+ cursor.execute(query)
+ transaction.commit_unless_managed()
+
+ row = cursor.fetchone()
+ if row:
+ query_rename = """ALTER TABLE subcategory_areas RENAME TO main_subcategory_areas;"""
+ cursor.execute(query_rename)
+ transaction.commit_unless_managed()
+ print " * subcategory_areas renamed to main_subcategory_areas"
+ else:
+ query_create = """
+CREATE TABLE "main_subcategory_areas" (
"id" serial NOT NULL PRIMARY KEY,
"subcategory_id" integer NOT NULL REFERENCES "main_subcategory" ("id")
DEFERRABLE INITIALLY DEFERRED,
@@ -80,9 +109,9 @@ CREATE TABLE "subcategory_areas" (
DEFERRABLE INITIALLY DEFERRED,
UNIQUE ("subcategory_id", "area_id"));
"""
- cursor.execute(query_create)
- transaction.commit_unless_managed()
- print " * subcategory_areas created"
+ cursor.execute(query_create)
+ transaction.commit_unless_managed()
+ print " * main_subcategory_areas created"
# early versions before 0.1: main_tinyurl table doesn't exist