mirror of
https://github.com/nikdoof/test-auth.git
synced 2025-12-14 14:52:15 +00:00
Completed work on the groups application
This commit is contained in:
@@ -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),
|
||||||
)
|
)
|
||||||
|
|||||||
113
groups/views.py
113
groups/views.py
@@ -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 """
|
||||||
@@ -22,8 +26,8 @@ def group_list(request):
|
|||||||
if request.user.is_superuser:
|
if request.user.is_superuser:
|
||||||
groups = Group.objects.select_related('groupinformation').all()
|
groups = Group.objects.select_related('groupinformation').all()
|
||||||
else:
|
else:
|
||||||
groups = Group.objects.select_related('groupinformation').filter(Q(groupinformation__public=True) |
|
groups = Group.objects.select_related('groupinformation').filter(Q(groupinformation__public=True) |
|
||||||
Q(groupinformation__admins__in=[request.user]) |
|
Q(groupinformation__admins__in=[request.user]) |
|
||||||
Q(user__in=[request.user]))
|
Q(user__in=[request.user]))
|
||||||
|
|
||||||
# Process the query into a list of tuples including status
|
# 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))
|
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):
|
||||||
@@ -74,4 +75,100 @@ def create_request(request, groupid):
|
|||||||
else:
|
else:
|
||||||
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'))
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ INSTALLED_APPS = (
|
|||||||
'reddit',
|
'reddit',
|
||||||
'hr',
|
'hr',
|
||||||
'sso',
|
'sso',
|
||||||
# 'groups',
|
'groups',
|
||||||
'api',
|
'api',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
45
templates/groups/group_admin.html
Normal file
45
templates/groups/group_admin.html
Normal 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 %} <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>
|
||||||
|
<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 %}
|
||||||
@@ -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> {% 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>
|
||||||
|
|||||||
Reference in New Issue
Block a user