From 4dd67ada40dcaa3f8b249637f8678b32c6f78c21 Mon Sep 17 00:00:00 2001 From: Andrew Williams Date: Tue, 14 Aug 2012 21:33:19 +0100 Subject: [PATCH] Add category support to groups, Fixes #281 --- app/groups/admin.py | 3 ++- app/groups/models.py | 11 +++++++++ app/groups/templates/groups/group_list.html | 25 +++++++++++++++------ app/groups/views.py | 17 ++++++++++---- 4 files changed, 44 insertions(+), 12 deletions(-) diff --git a/app/groups/admin.py b/app/groups/admin.py index 904fa53..8fb7f2f 100644 --- a/app/groups/admin.py +++ b/app/groups/admin.py @@ -1,7 +1,7 @@ from django.contrib import admin from django.contrib.auth.models import Group from django.contrib.auth.admin import GroupAdmin -from groups.models import GroupInformation, GroupRequest +from groups.models import GroupInformation, GroupRequest, GroupCategory class GroupRequestAdmin(admin.ModelAdmin): list_display = ('group', 'user', 'status', 'created_date', 'changed_by', 'changed_date') @@ -9,6 +9,7 @@ class GroupRequestAdmin(admin.ModelAdmin): list_filter = ('status',) admin.site.register(GroupRequest, GroupRequestAdmin) +admin.site.register(GroupCategory, admin.ModelAdmin) class SSOGroupInformationInline(admin.StackedInline): model = GroupInformation diff --git a/app/groups/models.py b/app/groups/models.py index e59e3ef..f6022bc 100644 --- a/app/groups/models.py +++ b/app/groups/models.py @@ -4,11 +4,22 @@ from django.contrib.auth.models import Group, User from groups.app_defines import * + +class GroupCategory(models.Model): + """Category to put groups into""" + + name = models.CharField('Category Name', max_length="250") + + def __unicode__(self): + return self.name + + class GroupInformation(models.Model): """ Extended group information """ group = models.OneToOneField(Group) + category = models.ForeignKey(GroupCategory, related_name='groups', null=True) type = models.IntegerField("Group Type", choices=GROUP_TYPE_CHOICES, default=GROUP_TYPE_PERMISSION) admins = models.ManyToManyField(User, blank=True) public = models.BooleanField("Public", default=False, help_text="Indicates if the group is visible to all") diff --git a/app/groups/templates/groups/group_list.html b/app/groups/templates/groups/group_list.html index 2d7aa75..9a24042 100644 --- a/app/groups/templates/groups/group_list.html +++ b/app/groups/templates/groups/group_list.html @@ -9,22 +9,33 @@

This is the list of your current groups, and groups you can request to be a member of.

{% if group_list %} +{% regroup group_list by category as groups_by_category %} + +{% for category in groups_by_category %} + +{% if category.grouper %} +

+

{{ category.grouper }}

+

+{% endif %} + - {% for id, group, description, status, requestable, fixed, pending, moderated in group_list %} - - - - + {% for group in category.list %} + + + + {% endfor %}
Group NameDescriptionStatusActions
{{ group }}{{ description }}{% if pending %}Request Pending{% else %}{% if status %}{{ status }}{% endif %}{% endif %}{% ifequal status None %}{% if requestable %}{% if moderated %}Request Membership{% else %}Join{% endif %}{% endif %}{% endifequal %} - {% if not fixed and status %}Leave {% endif %} - {% if status == 'Admin' or request.user.is_superuser %}{% if not fixed %}Admin{% endif %}{% endif %}
{{ group.group }}{{ group.description }}{% if group.pending %}Request Pending{% else %}{% if group.status %}{{ group.status }}{% endif %}{% endif %}{% ifequal group.status None %}{% if requestable %}{% if group.moderated %}Request Membership{% else %}Join{% endif %}{% endif %}{% endifequal %} + {% if not group.fixed and group.status %}Leave {% endif %} + {% if group.status == 'Admin' or request.user.is_superuser %}{% if not group.fixed %}Admin{% endif %}{% endif %}
+{% endfor %} {% else %} No groups are available. {% endif %} diff --git a/app/groups/views.py b/app/groups/views.py index d549c56..69631b9 100644 --- a/app/groups/views.py +++ b/app/groups/views.py @@ -53,12 +53,21 @@ def group_list(request): continue fixed = not group.groupinformation.type == GROUP_TYPE_PERMISSION - pending = group.requests.filter(status=REQUEST_PENDING,user=request.user).count() + pending = group.requests.filter(status=REQUEST_PENDING,user=request.user).count() - group_list.append((group.id, group.name, group.groupinformation.description, status, requestable, fixed, pending, group.groupinformation.moderated)) - - group_list = sorted(group_list, key=lambda name: name[1].lower()) + group_list.append({ + 'id': group.id, + 'group': group.name, + 'category': group.groupinformation.category or 'Other', + 'description': group.groupinformation.description, + 'status': status, + 'requestable': requestable, + 'fixed': fixed, + 'pending': pending, + 'moderated': group.groupinformation.moderated, + }) + group_list = sorted(group_list, key=lambda k: "%s-%s" % (k['category'], k['group'])) return render_to_response('groups/group_list.html', locals(), context_instance=RequestContext(request))