--- /dev/null
+from functools import wraps
+
+from django.http import HttpResponseForbidden
+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 Meta:
verbose_name = u"adhérent"
verbose_name_plural = u"adhérents"
+ unique_together = ['xgroup', 'xuser']
def __unicode__(self):
- return self.name
+ return u"{} {} de {} [{}]".format(self.xuser, dict(Membership.LEVEL_CHOICES)[self.level], self.xgroup, self.state)
urlpatterns = patterns(
'xnet.accounts.views',
url(r'^$', 'index', name='group-list'),
- url(r'^view/([0-9]+)$', 'view', name='group-view'),
+ url(r'^home/([0-9]+)$', 'home', name='group-home'),
)
def index(request):
return render(request, 'groups/index.html', {'groups': XGroup.objects.order_by('kind')})
-def view(request, pk):
- return render(request, 'groups/view.html', {'group': get_object_or_404(XGroup, pk=pk)})
+def home(request, pk):
+ return render(request, 'groups/home.html', {'group': get_object_or_404(XGroup, pk=pk)})
<input type="text" class="search-field" data-target="{{ group.grouper }}_type" />
<ul>
{% for item in group.list %}
- <li><a href="{% url 'accounts:group-view' item.pk %}">{{ item }}</a></li>
+ <li><a href="{% url 'accounts:group-home' item.pk %}">{{ item }}</a></li>
{% endfor %}
</ul>
</div>