Completed work on the groups application

This commit is contained in:
2011-01-10 16:11:39 +00:00
parent 304bdd87b1
commit dee1ba7895
5 changed files with 160 additions and 10 deletions

View File

@@ -6,4 +6,10 @@ urlpatterns = patterns('',
('^$', views.index),
(r'^list/$', views.group_list),
(r'^request/(?P<groupid>\d+)/$', views.create_request),
(r'^kick/(?P<groupid>\d+)/(?P<userid>\d+)/$', views.kick_member),
(r'^promote/(?P<groupid>\d+)/(?P<userid>\d+)/$', views.promote_member),
(r'^admin/(?P<groupid>\d+)/$', views.admin_group),
(r'^accept/(?P<requestid>\d+)/$', views.accept_request),
(r'^reject/(?P<requestid>\d+)/$', views.reject_request),
)

View File

@@ -5,16 +5,20 @@ from django.template import RequestContext
from django.core.urlresolvers import reverse
from django.contrib import messages
from django.contrib.auth.models import Group
from django.contrib.auth.models import Group, User
from django.contrib.auth.decorators import login_required
from groups.models import GroupInformation
from groups.models import GroupInformation, GroupRequest
from groups.app_defines import *
from groups.forms import GroupRequestForm
from sso.tasks import update_user_access
def index(request):
return HttpResponseRedirect(reverse('groups.views.group_list'))
@login_required
def group_list(request):
""" View all groups, for users only public ones """
@@ -22,8 +26,8 @@ def group_list(request):
if request.user.is_superuser:
groups = Group.objects.select_related('groupinformation').all()
else:
groups = Group.objects.select_related('groupinformation').filter(Q(groupinformation__public=True) |
Q(groupinformation__admins__in=[request.user]) |
groups = Group.objects.select_related('groupinformation').filter(Q(groupinformation__public=True) |
Q(groupinformation__admins__in=[request.user]) |
Q(user__in=[request.user]))
# Process the query into a list of tuples including status
@@ -49,9 +53,6 @@ def group_list(request):
return render_to_response('groups/group_list.html', locals(), context_instance=RequestContext(request))
@login_required
def view_group(request):
pass
@login_required
def create_request(request, groupid):
@@ -74,4 +75,100 @@ def create_request(request, groupid):
else:
form = GroupRequestForm() # An unbound form
return render_to_response('groups/create_request.html', locals(), context_instance=RequestContext(request))
return render_to_response('groups/create_request.html', locals(), context_instance=RequestContext(request))
@login_required
def accept_request(request, requestid):
requestobj = get_object_or_404(GroupRequest, id=requestid)
if request.user in requestobj.group.groupinformation.admins.all() or request.user.is_superuser:
requestobj.status = REQUEST_ACCEPTED
requestobj.user.groups.add(requestobj.group)
requestobj.changed_by = request.user
requestobj.save()
update_user_access.delay(requestobj.user.id)
messages.add_message(request, messages.INFO, "%s has been accepted into %s" % (requestobj.user, requestobj.group))
return HttpResponseRedirect(reverse('groups.views.admin_group', args=[requestobj.group.id]))
@login_required
def reject_request(request, requestid):
requestobj = get_object_or_404(GroupRequest, id=requestid)
if request.user in requestobj.group.groupinformation.admins.all() or request.user.is_superuser:
requestobj.status = REQUEST_REJECTED
requestobj.changed_by = request.user
requestobj.save()
messages.add_message(request, messages.INFO, "%s has been rejected for %s" % (requestobj.user, requestobj.group))
return HttpResponseRedirect(reverse('groups.views.admin_group', args=[requestobj.group.id]))
@login_required
def admin_group(request, groupid):
group = get_object_or_404(Group, id=groupid)
if group.groupinformation and request.user in group.groupinformation.admins.all() or request.user.is_superuser:
member_list = []
for member in set(group.user_set.all()):
if group.groupinformation and member in group.groupinformation.admins.all():
status = "Admin"
else:
status = "Member"
chars = []
for acc in member.eveaccount_set.all():
chars.extend(acc.characters.all().values_list('name', flat=True))
member_list.append((member, ', '.join(chars), status))
requests = group.requests.filter(status=REQUEST_PENDING)
return render_to_response('groups/group_admin.html', locals(), context_instance=RequestContext(request))
return HttpResponseRedirect(reverse('groups.views.group_list'))
@login_required
def promote_member(request, groupid, userid):
if request.user.is_superuser:
user = get_object_or_404(User, id=userid)
group = get_object_or_404(Group, id=groupid)
if not user in group.groupinformation.admins.all():
group.groupinformation.admins.add(user)
messages.add_message(request, messages.INFO, "%s is now a admin of %s" % (user.username, group.name))
else:
group.groupinformation.admins.remove(user)
messages.add_message(request, messages.INFO, "%s is no longer a admin of %s" % (user.username, group.name))
return HttpResponseRedirect(reverse('groups.views.admin_group', args=[groupid]))
@login_required
def kick_member(request, groupid, userid):
group = get_object_or_404(Group, id=groupid)
user = get_object_or_404(User, id=userid)
if user == request.user:
if user in group.groupinformation.admins.all():
group.groupinformation.admins.remove(user)
user.groups.remove(group)
update_user_access.delay(user.id)
messages.add_message(request, messages.INFO, "You have left the group %s" % group.name)
elif request.user in group.groupinformation.admins.all() or request.user.is_superuser:
if not user in group.groupinformation.admins.all():
user.groups.remove(group)
update_user_access.delay(user.id)
messages.add_message(request, messages.INFO, "%s has been removed from %s." % (user.username, group.name))
else:
messages.add_message(request, messages.INFO, "%s is a admin of %s and cannot be removed." % (user.username, group.name))
return HttpResponseRedirect(reverse('groups.views.admin_group', args=[groupid]))
return HttpResponseRedirect(reverse('groups.views.group_list'))