Mercurial > hg > savane-forge
changeset 191:d112c8a7a07b
Add separate project memberlist page
author | Sylvain Beucler <beuc@beuc.net> |
---|---|
date | Sun, 25 Jul 2010 19:18:28 +0200 |
parents | 215aef9e9393 |
children | 82f0f3f73b0b |
files | savane/svmain/models.py savane/svmain/templatetags/svtopmenu.py savane/svmain/urls.py static_media/savane/css/Savannah.css templates/svmain/group_detail.html templates/svmain/group_memberlist.html templates/svmain/svtopmenu.html |
diffstat | 7 files changed, 90 insertions(+), 29 deletions(-) [+] |
line wrap: on
line diff
--- a/savane/svmain/models.py +++ b/savane/svmain/models.py @@ -493,8 +493,11 @@ else: return self.group.name - def get_admins(self): - return auth_models.User.objects.filter(membership__admin_flags='A') + def get_admin_memberships(self): + return self.group.membership_set.filter(admin_flags='A') + + def get_active_memberships(self): + return self.group.membership_set.exclude(admin_flags='P') @staticmethod def query_active_groups_raw(conn, fields):
--- a/savane/svmain/templatetags/svtopmenu.py +++ b/savane/svmain/templatetags/svtopmenu.py @@ -18,8 +18,9 @@ from django import template from django.core.urlresolvers import reverse +from django.conf import settings +from django.utils.translation import ugettext as _ import savane.svmain.models as svmain_models -from django.conf import settings register = template.Library() @@ -35,20 +36,21 @@ """ icon = 'main' entries = [] + group = context['group'] if menu_name == 'group': entry_home = { 'text' : 'Home', - 'href' : reverse('savane.svmain.group_detail', args=[context['group'].name]), + 'href' : reverse('savane.svmain.group_detail', args=[group.name]), 'title': "Project Main Page at %s" % 'this website'} entry_home['children'] = [] - entry_home['children'].append({'text' : 1.1, 'href' : 1.1, 'title': 1.1 }) - if (context['user'].groups.filter(name=context['group']).count()): + entry_home['children'].append({'text' : _("Main"), 'href' : reverse('savane.svmain.group_detail', args=[group.name]) }) + entry_home['children'].append({'text' : _("View Members"), 'href' : reverse('savane.svmain.group_memberlist', args=[group.name]) }) + if (svmain_models.Membership.is_admin(context['user'], group)): entry_home['children'].append({'separator' : True }) - entry_home['children'].append({'text' : "I'm a member", 'href' : 1.2, 'title': 1.2 }) - if (svmain_models.Membership.objects.filter(user=context['user'], group=context['group'], admin_flags='A').count()): - entry_home['children'].append({'separator' : True }) - entry_home['children'].append({'text' : "I'm an admin", - 'href' : reverse('savane.svmain.group_admin', args=[context['group'].name]) }) + entry_home['children'].append({'text' : _("Administer:"), 'strong': True, + 'href' : reverse('savane.svmain.group_admin', args=[group.name]) }) + entry_home['children'].append({'text' : _("Manage Members"), + 'href' : reverse('savane.svmain.group_admin_members', args=[group.name]) }) entry_test = { 'text' : 2, 'href' : 2, 'title': 2, 'children':
--- a/savane/svmain/urls.py +++ b/savane/svmain/urls.py @@ -84,6 +84,15 @@ name='savane.svmain.group_detail'), url(r'^pr/(?P<slug>[-\w]+)/$', views.group_redir), url(r'^projects/(?P<slug>[-\w]+)/$', views.group_redir), + url(r'^p/(?P<slug>[-\w]+)/memberlist/$', object_detail, + { 'queryset' : auth_models.Group.objects.all(), + 'slug_field' : 'name', + 'extra_context' : { 'title' : 'Summary: Project Memberlist' }, + 'template_name' : 'svmain/group_memberlist.html', + 'template_object_name' : 'group', }, + name='savane.svmain.group_memberlist'), +) +urlpatterns += decorated_patterns ('', login_required, url(r'^p/(?P<slug>[-\w]+)/join/$', views.group_join), ) urlpatterns += decorated_patterns ('', only_project_admin,
--- a/static_media/savane/css/Savannah.css +++ b/static_media/savane/css/Savannah.css @@ -569,7 +569,7 @@ -.boxtitle { +.box th, .boxtitle { font-weight: bold; text-align: center; text-transform: capitalize; @@ -1077,7 +1077,7 @@ margin-right: 1%; } -.boxtitle { +.box th, .boxtitle { background-image: url("../images/leopard.png"); background-color: #eddb5a; border: thin outset #641212;
--- a/templates/svmain/group_detail.html +++ b/templates/svmain/group_detail.html @@ -11,24 +11,24 @@ <div class="indexright"> <div class="box"> <div class="boxtitle">{% trans "Membership Info" %}</div> - {% if group.svgroupinfo.get_admins %} - <div class="boxitem"><span class="smaller">{% trans "Project Admins:" %}</span></div> - {% for user in group.svgroupinfo.get_admins %} - <div class="{% cycle 'boxitemalt' 'boxitem' %}"><span class="smaller"> - - <a href="{% url savane.svmain.user_detail user.username %}">{{ user.svuserinfo.get_full_name_display }}</a></span></div> + {% if group.svgroupinfo.get_admin_memberships %} + <div class="boxitem smaller">{% trans "Project Admins:" %}</div> + {% for membership in group.svgroupinfo.get_admin_memberships %} + <div class="{% cycle 'boxitemalt' 'boxitem' %} smaller"> + - <a href="{% url savane.svmain.user_detail membership.user.username %}">{{ membership.user.svuserinfo.get_full_name_display }}</a></div> {% endfor %} {% else %} - <div class="boxitem"><span class="smaller">{% trans "No members!" %}</span></div> + <div class="boxitem smaller">{% trans "No members!" %}</div> {% endif %} - <div class="boxitem"><span class="smaller">{% blocktrans count group.user_set.count as count %}{{count}} active member{% plural %}{{count}} active members{% endblocktrans %}</span></div> - <div class="boxitemalt"><span class="smaller">[<a href="memberlist/">{% trans "View Members" %}</a>]</span></div> + <div class="boxitem smaller">{% blocktrans count group.user_set.count as count %}{{count}} active member{% plural %}{{count}} active members{% endblocktrans %}</div> + <div class="boxitemalt smaller">[<a href="memberlist/">{% trans "View Members" %}</a>]</div> </div> <div class="box"> <div class="boxtitle">{% trans "Group identification" %}</div> - <div class="boxitem"><span class="smaller">{% trans "Id:" %} <strong>#{{group.pk}}</strong></span></div> - <div class="boxitemalt"><span class="smaller">{% trans "System Name:" %} <strong>{{group.name}}</strong></span></div> - <div class="boxitem"><span class="smaller">{% trans "Name:" %} <strong>{{group.svgroupinfo.full_name}}</strong></span></div> - <div class="boxitemalt"><span class="smaller">{% trans "Group Type:" %} <strong>{{group.svgroupinfo.type.name}}</strong></span></div> + <div class="boxitem smaller">{% trans "Id:" %} <strong>#{{group.pk}}</strong></div> + <div class="boxitemalt smaller">{% trans "System Name:" %} <strong>{{group.name}}</strong></div> + <div class="boxitem smaller">{% trans "Name:" %} <strong>{{group.svgroupinfo.full_name}}</strong></div> + <div class="boxitemalt smaller">{% trans "Group Type:" %} <strong>{{group.svgroupinfo.type.name}}</strong></div> </div> </div>
new file mode 100644 --- /dev/null +++ b/templates/svmain/group_memberlist.html @@ -0,0 +1,45 @@ +{% extends "base.html" %} +{% load i18n %} +{% load svtopmenu %} + +{% block title %} +{{group.svgroupinfo.get_full_name_display}} - {{title}} +{% endblock %} + +{% block icon %}people{% endblock %} + +{% block topmenu %} + {% svtopmenu "group" %} +{% endblock %} + +{% block content %} + +<table class="box"> +<tr><th></th><th>Member</th><th>Resume and skills</th></tr> +{% for membership in group.svgroupinfo.get_active_memberships %} +<tr class="{% cycle 'boxitemalt' 'boxitem' %}"> + <td> + {% ifequal membership.admin_flags 'A' %} + <img class="icon" + alt="{% trans "Project Administrator" %}" + src="{{STATIC_MEDIA_URL}}savane/images/common/roles1/project-admin.orig.png" /> + {% else %} + <img class="icon" + alt="{% trans "Project Member" %}" + src="{{STATIC_MEDIA_URL}}savane/images/common/roles1/project-member.orig.png" /> + {% endifequal %} + </td> + <td><a href="{% url savane.svmain.user_detail membership.user.username %}">{{ membership.user.svuserinfo.get_full_name_display }}</a></td> + <td>TODO</td> +{% endfor %} +</table> + +{% endblock %} + +{% comment %} +Local Variables: ** +mode: django-html ** +tab-width: 4 ** +indent-tabs-mode: nil ** +End: ** +{% endcomment %}
--- a/templates/svmain/svtopmenu.html +++ b/templates/svmain/svtopmenu.html @@ -5,10 +5,12 @@ <ul id="submenu{{forloop.counter}}" class="topmenuitemsubmenu"> {% for l2 in l1.children %} {% if l2.separator %} - <li class="topmenuitemsubmenuseparator"> </li> - {% else %} - <li class="topmenuitemsubmenu"><a href="{{l2.href}}" title="{{l2.title}}">{{ l2.text }}</a></li> - {% endif %} + <li class="topmenuitemsubmenuseparator"> </li> + {% else %} + <li class="topmenuitemsubmenu"><a href="{{l2.href}}" title="{{l2.title}}"> + {% if l2.strong %}<strong>{{ l2.text }}</strong>{% else %}{{ l2.text }}{% endif %} + </a></li> + {% endif %} {% endfor %} </ul> </li>