changeset 247:8da7cf2b1859

Don't display me as a project admin in membership management when I'm 'just' a superuser
author Sylvain Beucler <beuc@beuc.net>
date Sun, 08 Aug 2010 19:12:33 +0200
parents dd181f68dae4
children 5e7ba81027a4
files savane/svmain/models.py savane/svmain/templatetags/svmembership.py savane/svmain/views.py templates/svmain/group_admin_members.html
diffstat 4 files changed, 45 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/savane/svmain/models.py
+++ b/savane/svmain/models.py
@@ -664,6 +664,13 @@
                  .filter(user=user, group=group, admin_flags='A').count() > 0))
 
     @staticmethod
+    def is_nonsuper_admin(user, group):
+        return (not user.is_anonymous()
+                and Membership.is_member(user, group)
+                and Membership.objects
+                .filter(user=user, group=group, admin_flags='A').count() > 0)
+
+    @staticmethod
     def tidy(user=None, group=None):
         """
         If using a non-Savane users&groups base, create missing
new file mode 100644
--- /dev/null
+++ b/savane/svmain/templatetags/svmembership.py
@@ -0,0 +1,30 @@
+# Request membership properties
+# Copyright (C) 2010  Sylvain Beucler
+#
+# This file is part of Savane.
+# 
+# Savane is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+# 
+# Savane is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+# 
+# You should have received a copy of the GNU Affero General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+from django import template
+import savane.svmain.models as svmain_models
+
+register = template.Library()
+
+@register.filter
+def is_user_nonsuper_admin(user, group):
+    """
+    Return if the user is admin of this group (do not take superuser
+    privs in account)
+    """
+    return svmain_models.Membership.is_nonsuper_admin(user, group)
--- a/savane/svmain/views.py
+++ b/savane/svmain/views.py
@@ -252,7 +252,9 @@
     context = {}
     context.update(extra_context)
     context.update({'group' : group})
-    queryset = auth_models.User.objects.filter(is_active=True).exclude(pk__in=group.user_set.all())
+    queryset = auth_models.User.objects.filter(is_active=True) \
+        .exclude(pk__in=group.user_set.all()) \
+        .order_by('username')
     return search(object_list)(request,
                                queryset=queryset,
                                paginate_by=20,
--- a/templates/svmain/group_admin_members.html
+++ b/templates/svmain/group_admin_members.html
@@ -25,11 +25,12 @@
     &lt;<a href="{% url savane:svmain:user_detail membership.user.username %}">{{ membership.user.username }}</a>&gt;
   </td>
   <td>
-    {% ifequal request.user membership.user %}
+    {% load svmembership %}
+    {% if request.user|is_user_nonsuper_admin:group %}
     <em>{% trans "You are Admin" %}</em>
     {% else %}
     <input type="checkbox" name="admin_{{membership.pk}}" {% ifequal membership.admin_flags "A" %}checked="checked"{% endifequal %}/>
-    {% endifequal %}
+    {% endif %}
   </td>
   <td>
     {% ifequal request.user membership.user %}
@@ -43,10 +44,10 @@
 
 <h2>{% trans "Requests for inclusion" %}</h2>
 {% if pending_memberships %}
-  <table>
+  <table class="box">
   <tr><th>{% trans "User" %}</th><th>{% trans "Approve" %}</th><th>{% trans "Reject" %}</th></tr>
   {% for membership in pending_memberships %}
-  <tr>
+  <tr class="{% cycle 'boxitem' 'boxitemalt' %}">
     <td>{{ membership.user.get_full_name }} &lt;{{ membership.user.username }}&gt;</td>
     <td><input type="checkbox" name="approve_{{membership.pk}}" /></td>
     <td><input type="checkbox" name="reject_{{membership.pk}}" /></td>