From 190947f18d3e005fa8bc20ab3ae3662615f2e745 Mon Sep 17 00:00:00 2001 From: Raynaldo Rivera Date: Sun, 19 Oct 2014 00:47:19 -0700 Subject: [PATCH] Added group management --- alliance_auth/__init__.py | 3 + alliance_auth/settings.py | 1 + alliance_auth/urls.py | 13 ++ authentication/models.py | 2 +- eveonline/models.py | 2 +- eveonline/views.py | 1 + groupmanagement/__init__.py | 0 groupmanagement/admin.py | 6 + groupmanagement/models.py | 23 ++++ groupmanagement/tests.py | 3 + groupmanagement/views.py | 145 ++++++++++++++++++++++ templates/public/base.html | 8 ++ templates/registered/addapikey.html | 2 +- templates/registered/apikeymanagment.html | 2 +- templates/registered/characters.html | 2 +- templates/registered/groupmanagement.html | 75 +++++++++++ templates/registered/groups.html | 59 +++++++++ templates/registered/services.html | 3 +- util/__init__.py | 6 + 19 files changed, 350 insertions(+), 6 deletions(-) create mode 100644 groupmanagement/__init__.py create mode 100644 groupmanagement/admin.py create mode 100644 groupmanagement/models.py create mode 100644 groupmanagement/tests.py create mode 100644 groupmanagement/views.py create mode 100644 templates/registered/groupmanagement.html create mode 100644 templates/registered/groups.html diff --git a/alliance_auth/__init__.py b/alliance_auth/__init__.py index e69de29b..631dfacb 100644 --- a/alliance_auth/__init__.py +++ b/alliance_auth/__init__.py @@ -0,0 +1,3 @@ +from util import bootstrap_permissions + +bootstrap_permissions() \ No newline at end of file diff --git a/alliance_auth/settings.py b/alliance_auth/settings.py index e3d52316..9ce39b9e 100644 --- a/alliance_auth/settings.py +++ b/alliance_auth/settings.py @@ -58,6 +58,7 @@ INSTALLED_APPS = ( 'registration', 'services', 'eveonline', + 'groupmanagement' ) MIDDLEWARE_CLASSES = ( diff --git a/alliance_auth/urls.py b/alliance_auth/urls.py index 201ed049..339fce63 100644 --- a/alliance_auth/urls.py +++ b/alliance_auth/urls.py @@ -34,6 +34,19 @@ urlpatterns = patterns('', url(r'^characters/', 'eveonline.views.characters_view', name='auth_characters'), url(r'^main_character_change/(\w+)/$', 'eveonline.views.main_character_change', name='auth_main_character_change'), + # Group management + url(r'^groups/', 'groupmanagement.views.groups_view', name='auth_groups'), + url(r'^group/management/', 'groupmanagement.views.group_management', name='auth_group_management'), + url(r'^group/request_add/(\w+)', 'groupmanagement.views.group_request_add', name='auth_group_request_add'), + url(r'^group/request/accept/(\w+)', 'groupmanagement.views.group_accept_request', name='auth_group_accept_request'), + url(r'^group/request/reject/(\w+)', 'groupmanagement.views.group_reject_request', name='auth_group_reject_request'), + + url(r'^group/request_leave/(\w+)', 'groupmanagement.views.group_request_leave', name='auth_group_request_leave'), + url(r'group/leave_request/accept/(\w+)', 'groupmanagement.views.group_leave_accept_request', + name='auth_group_leave_accept_request'), + url(r'^group/leave_request/reject/(\w+)', 'groupmanagement.views.group_leave_reject_request', + name='auth_group_leave_reject_request'), + # Service Urls url(r'^services/', 'services.views.services_view', name='auth_services'), diff --git a/authentication/models.py b/authentication/models.py index 862e91b2..5b5c9134 100644 --- a/authentication/models.py +++ b/authentication/models.py @@ -15,4 +15,4 @@ class AuthServicesInfo(models.Model): user = models.ForeignKey(User) def __str__(self): - return self.user.username \ No newline at end of file + return self.user.username + ' - AuthInfo' \ No newline at end of file diff --git a/eveonline/models.py b/eveonline/models.py index 59a36f72..3bf56ed1 100644 --- a/eveonline/models.py +++ b/eveonline/models.py @@ -23,4 +23,4 @@ class EveApiKeyPair(models.Model): user = models.ForeignKey(User) def __str__(self): - return self.user.username \ No newline at end of file + return self.user.username + " - ApiKeyPair" \ No newline at end of file diff --git a/eveonline/views.py b/eveonline/views.py index 3f39c803..f217dcc4 100644 --- a/eveonline/views.py +++ b/eveonline/views.py @@ -17,6 +17,7 @@ from util.common_task import remove_user_from_group from util.common_task import deactivate_services from util.common_task import generate_corp_group_name + @login_required def add_api_key(request): if request.method == 'POST': diff --git a/groupmanagement/__init__.py b/groupmanagement/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/groupmanagement/admin.py b/groupmanagement/admin.py new file mode 100644 index 00000000..9946163d --- /dev/null +++ b/groupmanagement/admin.py @@ -0,0 +1,6 @@ +from django.contrib import admin +from models import GroupDescription +from models import GroupRequest + +admin.site.register(GroupDescription) +admin.site.register(GroupRequest) diff --git a/groupmanagement/models.py b/groupmanagement/models.py new file mode 100644 index 00000000..eb2c7f9f --- /dev/null +++ b/groupmanagement/models.py @@ -0,0 +1,23 @@ +from django.db import models +from django.contrib.auth.models import User +from django.contrib.auth.models import Group +from eveonline.models import EveCharacter + + +class GroupDescription(models.Model): + description = models.CharField(max_length=512) + group = models.ForeignKey(Group, unique=True) + + def __str__(self): + return self.group.name + " - Description" + + +class GroupRequest(models.Model): + status = models.CharField(max_length=254) + leave_request = models.BooleanField(default=0) + user = models.ForeignKey(User) + group = models.ForeignKey(Group) + main_char = models.ForeignKey(EveCharacter) + + def __str__(self): + return self.user.username + ":" + self.group.name \ No newline at end of file diff --git a/groupmanagement/tests.py b/groupmanagement/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/groupmanagement/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/groupmanagement/views.py b/groupmanagement/views.py new file mode 100644 index 00000000..f1c9fed5 --- /dev/null +++ b/groupmanagement/views.py @@ -0,0 +1,145 @@ +from django.template import RequestContext +from django.shortcuts import HttpResponseRedirect +from django.shortcuts import render_to_response +from django.contrib.auth.decorators import login_required +from django.contrib.auth.decorators import permission_required +from django.contrib.auth.models import Group +from django.contrib.auth.models import User + +from models import GroupDescription +from models import GroupRequest + +from authentication.managers import AuthServicesInfoManager +from eveonline.managers import EveManager + + +@login_required +@permission_required('auth.group_management') +def group_management(request): + acceptrequests = [] + leaverequests = [] + + for grouprequest in GroupRequest.objects.all(): + if grouprequest.leave_request: + leaverequests.append(grouprequest) + else: + acceptrequests.append(grouprequest) + + render_items = {'acceptrequests': acceptrequests, 'leaverequests': leaverequests} + + return render_to_response('registered/groupmanagement.html', + render_items, context_instance=RequestContext(request)) + + +@login_required +@permission_required('auth.group_management') +def group_accept_request(request, group_request_id): + try: + group_request = GroupRequest.objects.get(id=group_request_id) + group, created = Group.objects.get_or_create(name=group_request.group.name) + request.user.groups.add(group) + request.user.save() + group_request.delete() + except: + pass + + return HttpResponseRedirect("/group/management/") + + +@login_required +@permission_required('auth.group_management') +def group_reject_request(request, group_request_id): + try: + group_request = GroupRequest.objects.get(id=group_request_id) + + if group_request: + group_request.delete() + except: + pass + + return HttpResponseRedirect("/group/management/") + + +@login_required +@permission_required('auth.group_management') +def group_leave_accept_request(request, group_request_id): + try: + group_request = GroupRequest.objects.get(id=group_request_id) + group, created = Group.objects.get_or_create(name=group_request.group.name) + request.user.groups.remove(group) + request.user.save() + group_request.delete() + except: + pass + + return HttpResponseRedirect("/group/management/") + + +@login_required +@permission_required('auth.group_management') +def group_leave_reject_request(request, group_request_id): + try: + group_request = GroupRequest.objects.get(id=group_request_id) + + if group_request: + group_request.delete() + except: + pass + + return HttpResponseRedirect("/group/management/") + +@login_required +def groups_view(request): + + paired_list = [] + + for group in Group.objects.all(): + # Check if group is a corp + if "Corp" in group.name: + pass + else: + # Get the descriptionn + groupDesc = GroupDescription.objects.filter(group=group) + groupRequest = GroupRequest.objects.filter(user=request.user).filter(group=group) + + if groupDesc: + if groupRequest: + paired_list.append((group, groupDesc[0], groupRequest[0])) + else: + paired_list.append((group, groupDesc[0], "")) + else: + if groupRequest: + paired_list.append((group, "", groupRequest[0])) + else: + paired_list.append((group, "", "")) + + render_items = {'pairs': paired_list} + return render_to_response('registered/groups.html', + render_items, context_instance=RequestContext(request)) + +@login_required +def group_request_add(request, group_id): + auth_info = AuthServicesInfoManager.get_auth_service_info(request.user) + grouprequest = GroupRequest() + grouprequest.status = 'pending' + grouprequest.group = Group.objects.get(id=group_id) + grouprequest.user = request.user + grouprequest.main_char = EveManager.get_character_by_id(auth_info.main_char_id) + grouprequest.leave_request = False + grouprequest.save() + + return HttpResponseRedirect("/groups") + + +@login_required +def group_request_leave(request, group_id): + auth_info = AuthServicesInfoManager.get_auth_service_info(request.user) + grouprequest = GroupRequest() + grouprequest.status = 'pending' + grouprequest.group = Group.objects.get(id=group_id) + grouprequest.user = request.user + grouprequest.main_char = EveManager.get_character_by_id(auth_info.main_char_id) + grouprequest.leave_request = True + grouprequest.save() + + return HttpResponseRedirect("/groups") \ No newline at end of file diff --git a/templates/public/base.html b/templates/public/base.html index 8f285f3c..54c3ca0b 100644 --- a/templates/public/base.html +++ b/templates/public/base.html @@ -65,6 +65,9 @@
  • Api Keys
  • +
  • + Groups +
  • Services
  • @@ -78,6 +81,11 @@
  • Change Password
  • + {% if perms.auth.group_management %} +
  • + Group Management +
  • + {% endif %} diff --git a/templates/registered/addapikey.html b/templates/registered/addapikey.html index 159be68d..9f809683 100644 --- a/templates/registered/addapikey.html +++ b/templates/registered/addapikey.html @@ -4,7 +4,7 @@ {% block title %}Alliance Auth{% endblock %} -{% block page_title %}Something something here{% endblock page_title %} +{% block page_title %}Add Api Key{% endblock page_title %} {% block extra_css %}{% endblock extra_css %} {% block content %} diff --git a/templates/registered/apikeymanagment.html b/templates/registered/apikeymanagment.html index 1c6a8ed8..4bb5902c 100644 --- a/templates/registered/apikeymanagment.html +++ b/templates/registered/apikeymanagment.html @@ -4,7 +4,7 @@ {% block title %}Alliance Auth{% endblock %} -{% block page_title %}Something something here{% endblock page_title %} +{% block page_title %}API Key Management{% endblock page_title %} {% block extra_css %}{% endblock extra_css %} {% block content %} diff --git a/templates/registered/characters.html b/templates/registered/characters.html index 6e43ab7a..9c855410 100644 --- a/templates/registered/characters.html +++ b/templates/registered/characters.html @@ -3,7 +3,7 @@ {% block title %}Alliance Auth{% endblock %} -{% block page_title %}Something something here{% endblock page_title %} +{% block page_title %}Characters{% endblock page_title %} {% block extra_css %}{% endblock extra_css %} {% block content %} diff --git a/templates/registered/groupmanagement.html b/templates/registered/groupmanagement.html new file mode 100644 index 00000000..c0aeef0d --- /dev/null +++ b/templates/registered/groupmanagement.html @@ -0,0 +1,75 @@ +{% extends "public/base.html" %} +{% load staticfiles %} + +{% block title %}Alliance Auth{% endblock %} + +{% block page_title %}Groups Management{% endblock page_title %} +{% block extra_css %}{% endblock extra_css %} + +{% block content %} +
    + + + + + + + + + + + + {% for acceptrequest in acceptrequests %} + + + + + + + {% endfor %} +
    RequestIDCharacterNameGroupNameAction
    {{ acceptrequest.id }}{{ acceptrequest.main_char.character_name }}{{ acceptrequest.group.name }} + + + + + + + +
    + + + + + + + + + + {% for leaverequest in leaverequests %} + + + + + + + {% endfor %} +
    RequestIDCharacterNameGroupNameAction
    {{ leaverequest.id }}{{ leaverequest.main_char.character_name }}{{ leaverequest.group.name }} + + + + + + + +
    +
    + +{% endblock content %} diff --git a/templates/registered/groups.html b/templates/registered/groups.html new file mode 100644 index 00000000..59a57e55 --- /dev/null +++ b/templates/registered/groups.html @@ -0,0 +1,59 @@ +{% extends "public/base.html" %} +{% load staticfiles %} + +{% block title %}Alliance Auth{% endblock %} + +{% block page_title %}Available{% endblock page_title %} +{% block extra_css %}{% endblock extra_css %} + +{% block content %} +
    +

    Available Groups

    + {% if perms.auth.alliance_member %} + + + + + + + + + {% for pair in pairs %} + + + + + + + {% endfor %} +
    GroupIDGroupNameGroupDescAction
    {{ pair.0.id }}{{ pair.0.name }}{{ pair.1.description }} + {% if pair.0 in user.groups.all %} + {% if pair.2 == ""%} + + + + {% else %} + + {% endif %} + {% elif pair.2 == "" %} + + + + {% else %} + + {% endif %} +
    + {% else %} + + {% endif %} +
    + +{% endblock content %} diff --git a/templates/registered/services.html b/templates/registered/services.html index 81028d3e..f08f128a 100644 --- a/templates/registered/services.html +++ b/templates/registered/services.html @@ -3,7 +3,7 @@ {% block title %}Alliance Auth{% endblock %} -{% block page_title %}Something something here{% endblock page_title %} +{% block page_title %}Services Management{% endblock page_title %} {% block extra_css %}{% endblock extra_css %} {% block content %} @@ -56,6 +56,7 @@ {% endifequal %} + Mumble {{ authinfo.mumble_username }} diff --git a/util/__init__.py b/util/__init__.py index d9380613..e18ac2cc 100644 --- a/util/__init__.py +++ b/util/__init__.py @@ -3,6 +3,12 @@ from django.contrib.auth.models import User from django.contrib.auth.models import Permission +def bootstrap_permissions(): + ct = ContentType.objects.get_for_model(User) + stored_permission, created = Permission.objects.get_or_create(codename="group_management", + content_type=ct, name="group_management") + + def add_member_permission(user, permission): ct = ContentType.objects.get_for_model(User) stored_permission, created = Permission.objects.get_or_create(codename=permission,