diff --git a/README.md b/README.md index 46ea6aee..7b8164f2 100755 --- a/README.md +++ b/README.md @@ -95,6 +95,7 @@ Special Permissions In Admin: auth | user | blue_member ( Auto Added to people who register has a blue when adding api key) auth | user | corp_stats (View basic corp auth stats *who is authed etc*) auth | user | timer_management ( Access to create and remove timers) + auth | user | srp_management ( Allows for an individual to create and remove srp fleets and fleet data) Beta Testers/ Bug Fixers: diff --git a/alliance_auth/settings.py.example b/alliance_auth/settings.py.example index cbcd7b06..d6c11364 100755 --- a/alliance_auth/settings.py.example +++ b/alliance_auth/settings.py.example @@ -53,6 +53,7 @@ INSTALLED_APPS = ( 'groupmanagement', 'hrapplications', 'timerboard', + 'srp', ) MIDDLEWARE_CLASSES = ( diff --git a/alliance_auth/urls.py b/alliance_auth/urls.py index b2663708..313265c8 100755 --- a/alliance_auth/urls.py +++ b/alliance_auth/urls.py @@ -81,6 +81,9 @@ urlpatterns = patterns('', name="auth_hrapplication_reject"), url(r'hr_application_search/', 'hrapplications.views.hr_application_search', name="auth_hrapplication_search"), + url(r'hr_mark_in_progress/(\w+)', 'hrapplications.views.hr_application_mark_in_progress', + name="auth_hrapplication_mark_in_progress"), + # Service Urls url(r'^services/', 'services.views.services_view', name='auth_services'), @@ -130,4 +133,13 @@ urlpatterns = patterns('', url(r'^timers/$', 'timerboard.views.timer_view', name='auth_timer_view'), url(r'^add_timer/$', 'timerboard.views.add_timer_view', name='auth_add_timer_view'), url(r'^remove_timer/(\w+)', 'timerboard.views.remove_timer', name='auth_remove_timer'), + + # SRP URLS + url(r'^srp/$', 'srp.views.srp_management', name='auth_srp_management_view'), + url(r'^srp_fleet_view/(\w+)$', 'srp.views.srp_fleet_view', name='auth_srp_fleet_view'), + url(r'^srp_fleet_add_view/$', 'srp.views.srp_fleet_add_view', name='auth_srp_fleet_add_view'), + url(r'^srp_fleet_remove/(\w+)$', 'srp.views.srp_fleet_remove', name='auth_srp_flet_remove'), + url(r'^srp_request/(\w+)', 'srp.views.srp_request_view', name='auth_srp_request_view'), + url(r'^srp_request_remove/(\w+)', 'srp.views.srp_request_remove', + name="auth_srp_request_remove"), ) \ No newline at end of file diff --git a/hrapplications/models.py b/hrapplications/models.py index b37173db..68fd06b4 100755 --- a/hrapplications/models.py +++ b/hrapplications/models.py @@ -19,6 +19,8 @@ class HRApplication(models.Model): approved_denied = models.NullBooleanField(blank=True, null=True) reviewer_user = models.ForeignKey(User, blank=True, null=True, related_name="review_user") reviewer_character = models.ForeignKey(EveCharacter, blank=True, null=True) + reviewer_inprogress_character = models.ForeignKey(EveCharacter, blank=True, null=True, + related_name="inprogress_character") def __str__(self): return self.character_name + " - Application" diff --git a/hrapplications/views.py b/hrapplications/views.py index 0d1676d5..a3951e33 100755 --- a/hrapplications/views.py +++ b/hrapplications/views.py @@ -177,4 +177,16 @@ def hr_application_search(request): return render_to_response('registered/hrapplicationsearchview.html', context, context_instance=RequestContext(request)) else: - return HttpResponseRedirect("/hr_application_management/") \ No newline at end of file + return HttpResponseRedirect("/hr_application_management/") + + +@login_required +@permission_required('auth.human_resources') +def hr_application_mark_in_progress(request, app_id): + if HRApplication.objects.filter(id=app_id).exists(): + auth_info = AuthServicesInfo.objects.get(user=request.user) + application = HRApplication.objects.get(id=app_id) + application.reviewer_inprogress_character = EveCharacter.objects.get(character_id=auth_info.main_char_id) + application.save() + + return HttpResponseRedirect("/hr_application_view/" + str(app_id)) diff --git a/portal/views.py b/portal/views.py index 5af18fc1..7ee8e625 100755 --- a/portal/views.py +++ b/portal/views.py @@ -7,7 +7,6 @@ from authentication.managers import AuthServicesInfoManager - # Create your views here. def index_view(request): return render_to_response('public/index.html', None, context_instance=RequestContext(request)) diff --git a/srp/__init__.py b/srp/__init__.py new file mode 100755 index 00000000..e69de29b diff --git a/srp/admin.py b/srp/admin.py new file mode 100755 index 00000000..5ddca89d --- /dev/null +++ b/srp/admin.py @@ -0,0 +1,8 @@ +from django.contrib import admin + +from models import SrpFleetMain +from models import SrpUserRequest + +# Register your models here. +admin.site.register(SrpFleetMain) +admin.site.register(SrpUserRequest) \ No newline at end of file diff --git a/srp/form.py b/srp/form.py new file mode 100755 index 00000000..9bef65a9 --- /dev/null +++ b/srp/form.py @@ -0,0 +1,12 @@ +from django import forms + + +class SrpFleetMainForm(forms.Form): + fleet_name = forms.CharField(required=True, label="Fleet Name") + fleet_time = forms.DateTimeField(required=True, label="Fleet Time") + fleet_doctrine = forms.CharField(required=True, label="Fleet Doctrine") + + +class SrpFleetUserRequestForm(forms.Form): + killboard_link = forms.CharField(required=True, label="Killboard Link") + additional_info = forms.CharField(required=False, label="Additional Info") \ No newline at end of file diff --git a/srp/models.py b/srp/models.py new file mode 100755 index 00000000..522906fd --- /dev/null +++ b/srp/models.py @@ -0,0 +1,24 @@ +from django.db import models + +from eveonline.models import EveCharacter + + +class SrpFleetMain(models.Model): + fleet_name = models.CharField(max_length=254, default="") + fleet_doctrine = models.CharField(max_length=254, default="") + fleet_time = models.DateTimeField() + fleet_srp_code = models.CharField(max_length=254, default="", unique=True) + fleet_commander = models.ForeignKey(EveCharacter) + + def __str__(self): + return self.fleet_name + " - SrpFleetMain" + + +class SrpUserRequest(models.Model): + killboard_link = models.CharField(max_length=254, default="") + additional_info = models.CharField(max_length=254, default="") + character = models.ForeignKey(EveCharacter) + srp_fleet_main = models.ForeignKey(SrpFleetMain) + + def __str__(self): + return self.character.character_name + " - SrpUserRequest" \ No newline at end of file diff --git a/srp/tests.py b/srp/tests.py new file mode 100755 index 00000000..a39b155a --- /dev/null +++ b/srp/tests.py @@ -0,0 +1 @@ +# Create your tests here. diff --git a/srp/views.py b/srp/views.py new file mode 100755 index 00000000..ce6f8930 --- /dev/null +++ b/srp/views.py @@ -0,0 +1,133 @@ +from django.template import RequestContext +from django.http 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.decorators import user_passes_test + +from util import random_string +from eveonline.managers import EveManager +from authentication.managers import AuthServicesInfoManager +from util import check_if_user_has_permission +from models import SrpFleetMain +from models import SrpUserRequest +from form import SrpFleetMainForm +from form import SrpFleetUserRequestForm + + +def srp_util_test(user): + return check_if_user_has_permission(user, 'alliance_member') or check_if_user_has_permission(user, 'blue_member') + + +@login_required +@user_passes_test(srp_util_test) +def srp_management(request): + context = {"srpfleets": SrpFleetMain.objects.all()} + return render_to_response('registered/srpmanagement.html', context, context_instance=RequestContext(request)) + + +@login_required +@user_passes_test(srp_util_test) +def srp_fleet_view(request, fleet_id): + if SrpFleetMain.objects.filter(id=fleet_id): + fleet_main = SrpFleetMain.objects.get(id=fleet_id) + context = {"srpfleetrequests": SrpUserRequest.objects.filter(srp_fleet_main=fleet_main)} + + return render_to_response('registered/srpfleetdata.html', context, context_instance=RequestContext(request)) + + else: + return HttpResponseRedirect("/srp") + + +@login_required +@permission_required('auth.srp_management') +def srp_fleet_add_view(request): + completed = False + completed_srp_code = "" + + if request.method == 'POST': + form = SrpFleetMainForm(request.POST) + + if form.is_valid(): + authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) + character = EveManager.get_character_by_id(authinfo.main_char_id) + + srp_fleet_main = SrpFleetMain() + srp_fleet_main.fleet_name = form.cleaned_data['fleet_name'] + srp_fleet_main.fleet_doctrine = form.cleaned_data['fleet_doctrine'] + srp_fleet_main.fleet_time = form.cleaned_data['fleet_time'] + srp_fleet_main.fleet_srp_code = random_string(8) + srp_fleet_main.fleet_commander = character + + srp_fleet_main.save() + + completed = True + completed_srp_code = srp_fleet_main.fleet_srp_code + + else: + form = SrpFleetMainForm() + + render_items = {'form': form, "completed": completed, "completed_srp_code": completed_srp_code} + + return render_to_response('registered/srpfleetadd.html', render_items, context_instance=RequestContext(request)) + + +@login_required +@permission_required('auth.srp_management') +def srp_fleet_remove(request, fleet_id): + if SrpFleetMain.objects.filter(id=fleet_id).exists(): + srpfleetmain = SrpFleetMain.objects.get(id=fleet_id) + srpfleetmain.delete() + + return HttpResponseRedirect("/srp") + + +@login_required +@user_passes_test(srp_util_test) +def srp_request_view(request, fleet_srp): + completed = False + no_srp_code = False + srp_code = "" + + if SrpFleetMain.objects.filter(fleet_srp_code=fleet_srp).exists() is False: + no_srp_code = True + + if request.method == 'POST': + form = SrpFleetUserRequestForm(request.POST) + + if form.is_valid(): + authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) + character = EveManager.get_character_by_id(authinfo.main_char_id) + srp_fleet_main = SrpFleetMain.objects.get(fleet_srp_code=fleet_srp) + + srp_request = SrpUserRequest() + srp_request.killboard_link = form.cleaned_data['killboard_link'] + srp_request.additional_info = form.cleaned_data['additional_info'] + srp_request.character = character + srp_request.srp_fleet_main = srp_fleet_main + srp_request.save() + + completed = True + + else: + form = SrpFleetUserRequestForm() + + render_items = {'form': form, "completed": completed, "no_srp_code": no_srp_code} + + return render_to_response('registered/srpfleetrequest.html', render_items, context_instance=RequestContext(request)) + + +@login_required +@permission_required('auth.srp_management') +def srp_request_remove(request, srp_request_id): + stored_fleet_view = None + + if SrpUserRequest.objects.filter(id=srp_request_id).exists(): + srpuserrequest = SrpUserRequest.objects.get(id=srp_request_id) + stored_fleet_view = srpuserrequest.srp_fleet_main.id + srpuserrequest.delete() + + if stored_fleet_view is None: + return HttpResponseRedirect("/srp") + else: + return HttpResponseRedirect("/srp_fleet_view/" + str(stored_fleet_view)) \ No newline at end of file diff --git a/templates/public/base.html b/templates/public/base.html index ff0e5e83..0c4c76a7 100755 --- a/templates/public/base.html +++ b/templates/public/base.html @@ -63,17 +63,19 @@ href="{% url 'auth_dashboard' %}"> Dashboard -
  • - Characters -
  • +
  • Api Keys
  • +
  • + Characters +
  • + {% if perms.auth.alliance_member %}
  • Groups
  • {% endif %} + +
  • + Help +
  • + + +
  • +
    Aux Navigation
    +
  • {% if perms.auth.alliance_member or perms.auth.blue_member %}
  • Services -
  • - -
  • - OP Timers + class="fa fa-cogs fa-fw grayiconecolor"> Alliance Services
  • {% endif %} @@ -104,11 +111,39 @@ {% endif %} -
  • - Help -
  • + {% if perms.auth.corp_stats %} +
  • + Corporation Stats +
  • + {% endif %} + + {% if perms.auth.group_management %} +
  • + Group Management +
  • + {% endif %} + + {% if perms.auth.alliance_member or perms.auth.blue_member %} + +
  • + OP Timers +
  • + + +
  • + Ship Replacement +
  • + + {% endif %} +
  • Util
    @@ -127,21 +162,6 @@ class="fa fa-space-shuttle fa-fw grayiconecolor"> Fleet Broadcast Formatter
  • {% endif %} - {% if perms.auth.corp_stats %} -
  • - Corporation Stats -
  • - {% endif %} - - {% if perms.auth.group_management %} -
  • - Group Management -
  • - {% endif %} {% if perms.auth.jabber_broadcast %}
  • @@ -151,6 +171,7 @@
  • {% endif %} + diff --git a/templates/registered/hrapplicationview.html b/templates/registered/hrapplicationview.html index 61fa288a..571a5586 100755 --- a/templates/registered/hrapplicationview.html +++ b/templates/registered/hrapplicationview.html @@ -28,21 +28,22 @@ {% endif %} +
    - {% if application.reviewer_character == None %} + {% if application.reviewer_inprogress_character == None %} {% else %} + role="alert">{{ application.reviewer_inprogress_character.character_name }}
    {% endif %}
    - +
    @@ -110,18 +111,27 @@
    +
    - - - + {% if application.reviewer_inprogress_character != None %} + + + - - - + + + - - - + + + + + {% else %} + + + + {% endif %}

    diff --git a/templates/registered/srpfleetadd.html b/templates/registered/srpfleetadd.html new file mode 100755 index 00000000..d0776353 --- /dev/null +++ b/templates/registered/srpfleetadd.html @@ -0,0 +1,49 @@ +{% extends "public/base.html" %} +{% load bootstrap %} +{% load staticfiles %} + +{% block title %}Alliance Auth - SRP Fleet Create{% endblock %} + +{% block page_title %}SRP Fleet Create{% endblock page_title %} +{% block extra_css %} + {% endblock extra_css %} + +{% block content %} + +
    +

    Create SRP Fleet

    + +
    +
    +
    + {% if completed == False %} + + {% else %} + + + + {% endif %} +
    +
    +
    + +
    + +{% endblock content %} + +{% block extra_script %} + + $('#id_fleet_time').datetimepicker({ + maskInput: true, + format: 'Y-m-d H:i',minDate:0 + }); + +{% endblock extra_script %} diff --git a/templates/registered/srpfleetdata.html b/templates/registered/srpfleetdata.html new file mode 100755 index 00000000..95a0e88e --- /dev/null +++ b/templates/registered/srpfleetdata.html @@ -0,0 +1,51 @@ +{% extends "public/base.html" %} +{% load bootstrap %} +{% load staticfiles %} + +{% block title %}Alliance Auth{% endblock %} + +{% block page_title %}Srp Fleet Data{% endblock page_title %} +{% block extra_css %}{% endblock extra_css %} + +{% block content %} +
    +
    +

    SRP Fleet Data +

    + + + + + + {% if perms.auth.timer_management %} + + {% endif %} + + {% for srpfleetrequest in srpfleetrequests %} + + + + + {% if perms.auth.timer_management %} + + {% endif %} + + {% endfor %} +
    Pilot NameKillboard LinkAdditional InfoActions
    +
    + {{ srpfleetrequest.character.character_name }} +
    +
    + {{ srpfleetrequest.killboard_link }} + {{ srpfleetrequest.additional_info }} + + + + +
    +
    +
    + +{% endblock content %} diff --git a/templates/registered/srpfleetrequest.html b/templates/registered/srpfleetrequest.html new file mode 100755 index 00000000..7a0ba37f --- /dev/null +++ b/templates/registered/srpfleetrequest.html @@ -0,0 +1,49 @@ +{% extends "public/base.html" %} +{% load bootstrap %} +{% load staticfiles %} + +{% block title %}Alliance Auth - SRP Request{% endblock %} + +{% block page_title %}SRP Request{% endblock page_title %} +{% block extra_css %} + {% endblock extra_css %} + +{% block content %} + +
    +

    Create SRP Request

    + +
    +
    +
    + {% if no_srp_code %} + + {% else %} + {% if completed == False %} + + {% else %} + + {% endif %} + {% endif %} +
    +
    +
    + +
    + +{% endblock content %} + +{% block extra_script %} + + $('#id_fleet_time').datetimepicker({ + maskInput: true, + format: 'Y-m-d H:i',minDate:0 + }); + +{% endblock extra_script %} diff --git a/templates/registered/srpmanagement.html b/templates/registered/srpmanagement.html new file mode 100755 index 00000000..6dcc0577 --- /dev/null +++ b/templates/registered/srpmanagement.html @@ -0,0 +1,73 @@ +{% extends "public/base.html" %} +{% load bootstrap %} +{% load staticfiles %} + +{% block title %}Alliance Auth{% endblock %} + +{% block page_title %}Srp Management{% endblock page_title %} +{% block extra_css %}{% endblock extra_css %} + +{% block content %} +
    +
    +

    SRP Management +
    + {% if perms.auth.timer_management %} + + + + {% endif %} +
    +

    + + + + + + + {% if perms.auth.timer_management %} + + {% endif %} + + + {% for srpfleet in srpfleets %} + + + + + + {% if perms.auth.timer_management %} + + {% endif %} + + + {% endfor %} +
    Fleet NameFleet TimeFleet DoctrineFleet CommanderFleet SRP CodeActions
    +
    + {{ srpfleet.fleet_name }} +
    +
    {{ srpfleet.fleet_time }}{{ srpfleet.fleet_doctrine }} +
    + {{ srpfleet.fleet_commander.character_name }} +
    +
    +
    + {{ srpfleet.fleet_srp_code }} +
    +
    + + + + + {% if perms.auth.timer_management %} + + + + {% endif %} +
    +
    +
    + +{% endblock content %} diff --git a/util/__init__.py b/util/__init__.py index 824043cd..c896973a 100755 --- a/util/__init__.py +++ b/util/__init__.py @@ -1,3 +1,5 @@ +import uuid + from django.contrib.contenttypes.models import ContentType from django.contrib.auth.models import User from django.contrib.auth.models import Group @@ -14,6 +16,7 @@ def bootstrap_permissions(): Permission.objects.get_or_create(codename="blue_member", content_type=ct, name="blue_member") Permission.objects.get_or_create(codename="corp_stats", content_type=ct, name="corp_stats") Permission.objects.get_or_create(codename="timer_management", content_type=ct, name="timer_management") + Permission.objects.get_or_create(codename="srp_management", content_type=ct, name="srp_management") Group.objects.get_or_create(name=settings.DEFAULT_ALLIANCE_GROUP) Group.objects.get_or_create(name=settings.DEFAULT_BLUE_GROUP) @@ -43,4 +46,12 @@ def check_if_user_has_permission(user, permission): ct = ContentType.objects.get_for_model(User) stored_permission, created = Permission.objects.get_or_create(codename=permission, content_type=ct, name=permission) - return user.has_perm('auth.' + permission) \ No newline at end of file + return user.has_perm('auth.' + permission) + + +def random_string(string_length=10): + """Returns a random string of length string_length.""" + random = str(uuid.uuid4()) # Convert UUID format to a Python string. + random = random.upper() # Make all characters uppercase. + random = random.replace("-", "") # Remove the UUID '-'. + return random[0:string_length] # Return the random string. \ No newline at end of file