Luke Plant avatar Luke Plant committed a2c4aa9

Admin tweaks for more public viewers of information

Comments (0)

Files changed (1)

contacts/admin.py

 from .models import Contact, HomeGroup
 
 
+CONTACT_VIEWER_GROUP_NAME = 'Contact viewers'
+
+def is_contact_viewer(user):
+    return user.groups.filter(name=CONTACT_VIEWER_GROUP_NAME).exists()
+
 class ContactAdmin(admin.ModelAdmin):
     def address(obj):
-        lines = obj.address.split('\n')
-        return lines[0] + u'...' if len(lines) > 1 else obj.address
-    list_display = ['name', address, 'post_code', 'phone_number', 'mobile_number', 'email', 'church_member', 'home_group']
-    list_filter = ['church_member', 'home_group']
+        return ', '.join(obj.address.strip().split('\n'))
+    list_display = ['name', address, 'post_code', 'phone_number', 'mobile_number', 'email']
 
+    # We allow some church people to view admin screens.  Some data is kept
+    # private from them, therefore we are careful about list_display,
+    # list_filter, fieldsets
+    # TODO:
+    # Once we move to Django 1.4, can define get_list_display
+    # and conditionally add attributes not in church_public_attrs
+
+    church_public_attrs = ['name', 'address', 'post_code', 'phone_number',
+                           'mobile_number', 'email']
+
+    def get_fieldsets(self, request, obj=None):
+        if  is_contact_viewer(request.user):
+           return [('', {'fields': self.church_public_attrs})]
+        else:
+            return super(ContactAdmin, self).get_fieldsets(request, obj=obj)
+
+    def get_readonly_fields(self, request, obj=None):
+        if is_contact_viewer(request.user):
+            # All are readonly
+            return [f.name for f in Contact._meta.fields if not f.primary_key]
+        else:
+            return super(ContactAdmin, self).get_readonly_fields(request, obj=obj)
 
 class HomeGroupAdmin(admin.ModelAdmin):
     list_display = ['name', 'group_email']
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.