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), ('^$', views.index),
(r'^list/$', views.group_list), (r'^list/$', views.group_list),
(r'^request/(?P<groupid>\d+)/$', views.create_request), (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.core.urlresolvers import reverse
from django.contrib import messages 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 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.app_defines import *
from groups.forms import GroupRequestForm from groups.forms import GroupRequestForm
from sso.tasks import update_user_access
def index(request): def index(request):
return HttpResponseRedirect(reverse('groups.views.group_list')) return HttpResponseRedirect(reverse('groups.views.group_list'))
@login_required @login_required
def group_list(request): def group_list(request):
""" View all groups, for users only public ones """ """ View all groups, for users only public ones """
@@ -49,9 +53,6 @@ def group_list(request):
return render_to_response('groups/group_list.html', locals(), context_instance=RequestContext(request)) return render_to_response('groups/group_list.html', locals(), context_instance=RequestContext(request))
@login_required
def view_group(request):
pass
@login_required @login_required
def create_request(request, groupid): def create_request(request, groupid):
@@ -75,3 +76,99 @@ def create_request(request, groupid):
form = GroupRequestForm() # An unbound form 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'))

View File

@@ -103,7 +103,7 @@ INSTALLED_APPS = (
'reddit', 'reddit',
'hr', 'hr',
'sso', 'sso',
# 'groups', 'groups',
'api', 'api',
) )

View File

@@ -0,0 +1,45 @@
{% extends "base.html" %}
{% block content %}
<h2>{{ group.name }}</h2>
<h3>Members</h3>
{% if group.user_set.all %}
<table>
<tr><th>Member Username</th><th>Characters</th><th>Status</th><th>Actions</th></tr>
{% for user, chars, status in member_list %}
<tr><td>{{ user.username }}</td>
<td>{{ chars }}</td>
<td>{{ status }}</td>
<td><a href="{% url groups.views.kick_member group.id user.id %}">Kick Member</a>
{% if request.user.is_superuser %}&nbsp;<a href="{% url groups.views.promote_member group.id user.id %}">Toggle Admin</a>{% endif %}</td>
</tr>
{% endfor %}
</table>
{% else %}
<b>This group has no members</b>
{% endif %}
<h3>Membership Requests</h3>
{% if requests %}
<table>
<tr><th>Username</th><th>Reason</th><th>Status</th><th>Created Date</th><th>Actions</th></tr>
{% for req in requests %}
<tr><td>{{ req.user }}</td>
<td>{{ req.reason }}</td>
<td>{{ req.get_status_description }}</td>
<td>{{ req.created_date }}</td>
<td><a href="{% url groups.views.accept_request req.id %}">Accept</a>&nbsp;
<a href="{% url groups.views.reject_request req.id %}">Reject</a></td>
</tr>
{% endfor %}
</table>
{% else %}
<b>This group has no outstanding requests</b>
{% endif %}
{% endblock %}

View File

@@ -12,7 +12,9 @@
{% for id, group, status, requestable in group_list %} {% for id, group, status, requestable in group_list %}
<tr><td>{{ group }}</td> <tr><td>{{ group }}</td>
<td>{{ status }}</td> <td>{{ status }}</td>
<td>{% ifequal status None %}{% if requestable %}<a href="{% url groups.views.create_request id %}">Request Membership</a>{% endif %}{% endifequal %}</td> <td>{% ifequal status None %}{% if requestable %}<a href="{% url groups.views.create_request id %}">Request Membership</a>{% endif %}{% endifequal %}
{% if status == 'Member' or status == 'Admin' %}<a href="{% url groups.views.kick_member id request.user.id %}">Leave</a>&nbsp;{% endif %}
{% if status == 'Admin' or request.user.is_superuser %}<a href="{% url groups.views.admin_group id %}">Admin</a>{% endif %}</td>
</tr> </tr>
{% endfor %} {% endfor %}
</table> </table>