From 9e60ac4deec6ae4fb2b8ff8bae276d0cc7088068 Mon Sep 17 00:00:00 2001 From: Arthur Darcet Date: Sat, 2 Feb 2013 19:57:19 +0100 Subject: [PATCH] Group directory view --- xnet/accounts/decorators.py | 33 +++++++++++-------- xnet/accounts/models.py | 4 +-- xnet/accounts/urls.py | 2 ++ xnet/accounts/views.py | 30 +++++++++++++++-- xnet/site/static/css/groups.css | 24 -------------- xnet/templates/groups/base.html | 20 ++++++++++-- xnet/templates/groups/directory.html | 62 ++++++++++++++++++++++++++++++++++++ xnet/templates/groups/home.html | 16 ++++++---- xnet/templates/groups/index.html | 8 ++--- 9 files changed, 142 insertions(+), 57 deletions(-) delete mode 100644 xnet/site/static/css/groups.css create mode 100644 xnet/templates/groups/directory.html diff --git a/xnet/accounts/decorators.py b/xnet/accounts/decorators.py index 4496b10..825df8d 100644 --- a/xnet/accounts/decorators.py +++ b/xnet/accounts/decorators.py @@ -1,4 +1,4 @@ -from functools import wraps +import functools from django.http import HttpResponseForbidden from django.shortcuts import get_object_or_404 @@ -6,16 +6,21 @@ from django.shortcuts import get_object_or_404 from .models import XGroup, Membership -def group_required(view_func, level=Membership.LEVEL_MEMBER): - @wraps(view_func) - def _wrapped_view_func(request, group_id, *args, **kwargs): - group = get_object_or_404(XGroup, pk=group_id) - if request.user.memberships.filter( - xgroup=group, - level__gte=level, - state='enabled', - ).exists(): - return view_func(request, group, *args, **kwargs) - else: - return HttpResponseForbidden() - return _wrapped_view_func +class group_required(object): + def __init__(self, level=Membership.LEVEL_MEMBER): + self.level = level + + def __call__(self, view_func): + @functools.wraps(view_func) + def wrapped_view_func(request, group_id, *args, **kwargs): + group = get_object_or_404(XGroup, pk=group_id) + membership = request.user.memberships.filter( + xgroup=group, + level__gte=self.level, + state='enabled', + ) + if membership.exists(): + return view_func(request, group, *args, membership=membership[0], **kwargs) + else: + return HttpResponseForbidden() + return wrapped_view_func diff --git a/xnet/accounts/models.py b/xnet/accounts/models.py index 6308429..bba15c5 100644 --- a/xnet/accounts/models.py +++ b/xnet/accounts/models.py @@ -63,8 +63,8 @@ class XGroup(models.Model): dns = models.CharField(max_length=128, verbose_name=u"dns domain", blank=True) web = models.CharField(max_length=255, verbose_name=u"website", blank=True) - #contact = models.ForeignKey('') - description = models.TextField() + #contact = models.ForeignKey('Account') + description = models.TextField(blank=True) logo = ImageField(upload_to='logos', null=True, blank=True) class Meta: diff --git a/xnet/accounts/urls.py b/xnet/accounts/urls.py index 772093c..5f4b864 100644 --- a/xnet/accounts/urls.py +++ b/xnet/accounts/urls.py @@ -5,4 +5,6 @@ urlpatterns = patterns( 'xnet.accounts.views', url(r'^$', 'index', name='group-list'), url(r'^home/([0-9]+)$', 'home', name='group-home'), + url(r'^directory/([0-9]+)$', 'directory', name='group-directory'), + url(r'^([a-zA-Z0-9]+)/delete/([a-zA-Z0-9\.]+)$', 'membership_delete', name='membership-delete'), ) diff --git a/xnet/accounts/views.py b/xnet/accounts/views.py index e525b86..aab40ea 100644 --- a/xnet/accounts/views.py +++ b/xnet/accounts/views.py @@ -1,11 +1,35 @@ from django.contrib import messages from django.shortcuts import get_object_or_404, render -from xnet.accounts.models import XGroup +from xnet.accounts.decorators import group_required +from xnet.accounts.models import XGroup, Membership def index(request): - return render(request, 'groups/index.html', {'groups': XGroup.objects.order_by('kind')}) + return render(request, 'groups/index.html', { + 'groups': XGroup.objects.order_by('kind'), + 'sidebar': 'list', + }) def home(request, pk): - return render(request, 'groups/home.html', {'group': get_object_or_404(XGroup, pk=pk)}) + return render(request, 'groups/home.html', { + 'group': get_object_or_404(XGroup, pk=pk), + 'sidebar': 'home', + }) + +@group_required() +def directory(request, group, membership=None): + print(group.memberships.filter(state='enabled').order_by('level')) + return render(request, 'groups/directory.html', { + 'group': group, + 'memberships': group.memberships. \ + filter(state='enabled'). \ + select_related(). \ + order_by('level'), + 'is_admin': membership.level == Membership.LEVEL_ADMIN, + 'sidebar': 'directory', + }) + +@group_required(level=Membership.LEVEL_ADMIN) +def membership_delete(request, group, to_delete): + pass diff --git a/xnet/site/static/css/groups.css b/xnet/site/static/css/groups.css deleted file mode 100644 index db2d9a7..0000000 --- a/xnet/site/static/css/groups.css +++ /dev/null @@ -1,24 +0,0 @@ -.group_list { - float: left; - border: solid 1px black; - border-radius: 5px; - background-color: white; - margin: 1%; - width: 22%; -} -.group_list h3 { - margin: 0 10px 0 10px; - font-size: medium; -} -.group_list li { - list-style: none; -} - -.group-desc .logo { - float: right; - margin: 0; -} -.group-desc p { - float: left; - clear: left; -} diff --git a/xnet/templates/groups/base.html b/xnet/templates/groups/base.html index 793fd09..eb9eeab 100644 --- a/xnet/templates/groups/base.html +++ b/xnet/templates/groups/base.html @@ -1,7 +1,21 @@ {% extends "base.html" %} {% load static %} -{% block css %} - {{ block.super }} - +{% block sidebar %} + +{% if group %} +

{{ group }}

+ +{% endif %} {% endblock %} diff --git a/xnet/templates/groups/directory.html b/xnet/templates/groups/directory.html new file mode 100644 index 0000000..d362961 --- /dev/null +++ b/xnet/templates/groups/directory.html @@ -0,0 +1,62 @@ +{% extends "groups/base.html" %} +{% load static %} + +{% block content %} +
+

{{ group.name }}

+ {% if is_admin %} +
+
+ + +
+ + + +
+
+
+ {% endif %} + + + + + + + + + + + {% for memb in memberships %} + + + + + + {% endfor %} + +
NomPromoContact
+ + {{ memb.xuser }} + + PROMO + + + + {% if is_admin %} + + + + + {% endif %} +
+
+{% endblock %} diff --git a/xnet/templates/groups/home.html b/xnet/templates/groups/home.html index d15a214..5876512 100644 --- a/xnet/templates/groups/home.html +++ b/xnet/templates/groups/home.html @@ -1,14 +1,16 @@ {% extends "groups/base.html" %} -{% block js %} - -{% endblock %} {% block content %}

{{ group.name }}

- {% if group.logo %}{% endif %} - {% if group.web %}

Web : {{ group.web }}

{% endif %} - {% if group.description %}

{{ group.description }}

{% endif %} + {% if group.logo %}{% endif %} +
+ {% if group.web %} +

Web : {{ group.web }}

+ {% endif %} + {% if group.description %} +

{{ group.description }}

+ {% endif %} +
{% endblock %} diff --git a/xnet/templates/groups/index.html b/xnet/templates/groups/index.html index 3d47d7f..9d3cd59 100644 --- a/xnet/templates/groups/index.html +++ b/xnet/templates/groups/index.html @@ -19,10 +19,10 @@ {% block content %} {% regroup groups by get_kind_display as group_list %} {% for group in group_list %} -
-

{{ group.grouper }}

- -