diff --git a/alliance_auth/settings.py.example b/alliance_auth/settings.py.example index 8eb5e13e..70f16ff7 100755 --- a/alliance_auth/settings.py.example +++ b/alliance_auth/settings.py.example @@ -58,6 +58,7 @@ INSTALLED_APPS = ( 'hrapplications', 'timerboard', 'srp', + 'sigtracker', ) MIDDLEWARE_CLASSES = ( @@ -438,6 +439,10 @@ LOGGING = { 'handlers': ['log_file', 'console'], 'level': 'DEBUG', }, + 'sigtracker': { + 'handlers': ['log_file', 'console'], + 'level': 'DEBUG', + }, 'util': { 'handlers': ['log_file', 'console'], 'level': 'DEBUG', diff --git a/alliance_auth/urls.py b/alliance_auth/urls.py index 5db17229..c0468ab4 100755 --- a/alliance_auth/urls.py +++ b/alliance_auth/urls.py @@ -165,4 +165,11 @@ urlpatterns = patterns('', # FLEET FITTINGS url(r'^fits/$', 'services.views.fleet_fits', name='auth_fleet_fits'), + + # Sig Tracker + url(r'^sigtracker/$', 'sigtracker.views.sigtracker_view', name='auth_signature_view'), + url(r'^add_signature/$', 'sigtracker.views.add_signature_view', name='auth_add_signature_view'), + url(r'^remove_signature/(\w+)', 'sigtracker.views.remove_signature', name='auth_remove_signature'), + + ) diff --git a/sigtracker/__init__.py b/sigtracker/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/sigtracker/admin.py b/sigtracker/admin.py new file mode 100644 index 00000000..00541e4f --- /dev/null +++ b/sigtracker/admin.py @@ -0,0 +1,6 @@ +from django.contrib import admin + +from models import sigtracker + +admin.site.register(sigtracker) +# Register your models here. diff --git a/sigtracker/form.py b/sigtracker/form.py new file mode 100644 index 00000000..accb7cce --- /dev/null +++ b/sigtracker/form.py @@ -0,0 +1,20 @@ +from django import forms +from django.core.validators import MaxValueValidator, MinValueValidator + + + +class SignatureForm(forms.Form): + sigtype = [('Wormhole', 'Wormhole'), ('Combat', 'Combat'), ('Data', 'Data'), + ('Relic', 'Relic')] + status = [('Open', 'Open'), ('Started', 'Started'), ('Finished', 'Finished')] + + system = forms.CharField(max_length=254, required=True, label='System') + ident = forms.CharField(max_length=254, required=True, label="ID") + sigtype = forms.ChoiceField(choices=sigtype, required=True, label="Signature Type") + destination = forms.CharField(max_length=254, label="destination", required=True, initial="") + status = forms.ChoiceField(choices=status, required=True, label="Status") + notes = forms.CharField(max_length=254, label="Notes", required=False, initial="") + + + + diff --git a/sigtracker/models.py b/sigtracker/models.py new file mode 100644 index 00000000..e1e3a3e4 --- /dev/null +++ b/sigtracker/models.py @@ -0,0 +1,19 @@ +from django.db import models +from django.contrib.auth.models import User +from django.utils import timezone +from eveonline.models import EveCharacter +from eveonline.models import EveCorporationInfo + + +class sigtracker(models.Model): + class Meta: + ordering = ['post_time'] + ident = models.CharField(max_length=254, default="") + system = models.CharField(max_length=254, default="") + destination = models.CharField(max_length=254, default="") + sigtype = models.CharField(max_length=254, default="") + status = models.CharField(max_length=254, default="") + notes = models.CharField(max_length=254, default="") + post_time = models.DateTimeField(default=timezone.now) + eve_character = models.ForeignKey(EveCharacter) + diff --git a/sigtracker/tests.py b/sigtracker/tests.py new file mode 100644 index 00000000..a39b155a --- /dev/null +++ b/sigtracker/tests.py @@ -0,0 +1 @@ +# Create your tests here. diff --git a/sigtracker/views.py b/sigtracker/views.py new file mode 100644 index 00000000..08b7a6c5 --- /dev/null +++ b/sigtracker/views.py @@ -0,0 +1,78 @@ +from django.http import HttpResponseRedirect +from django.template import RequestContext +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 django.utils import timezone + +from util import check_if_user_has_permission +from authentication.managers import AuthServicesInfoManager +from eveonline.managers import EveManager +from form import SignatureForm +from models import sigtracker + +import logging + +logger = logging.getLogger(__name__) + +def sigtracker_util_test(user): + return check_if_user_has_permission(user, 'member') or check_if_user_has_permission(user, 'blue_member') + + +@login_required +@user_passes_test(sigtracker_util_test) +@permission_required('auth.signature_view') +def sigtracker_view(request): + logger.info("sigtracker_view called by user %s" % request.user) + sigtracker_list = sigtracker.objects.all() + render_items = {'sigtracker': sigtracker.objects.all(),} + + return render_to_response('registered/signaturemanagement.html', render_items, context_instance=RequestContext(request)) + + +@login_required +@permission_required('auth.signature_management') +def add_signature_view(request): + logger.info("add_signature_view called by user %s" % request.user) + if request.method == 'POST': + form = SignatureForm(request.POST) + logger.info("Request type POST contains form valid: %s" % form.is_valid()) + if form.is_valid(): + #Get Current Time + post_time = timezone.now() + # Get character + auth_info = AuthServicesInfoManager.get_auth_service_info(request.user) + character = EveManager.get_character_by_id(auth_info.main_char_id) + # handle valid form + sig = sigtracker() + sig.ident = form.cleaned_data['ident'] + sig.system = form.cleaned_data['system'] + sig.destination = form.cleaned_data['destination'] + sig.sigtype = form.cleaned_data['sigtype'] + sig.status = form.cleaned_data['status'] + sig.notes = form.cleaned_data['notes'] + sig.create_time = post_time + sig.eve_character = character + sig.save() + return HttpResponseRedirect("/sigtracker/") + else: + logger.info("Returning new SignatureForm") + form = SignatureForm() + + render_items = {'form': form} + + return render_to_response('registered/addsignature.html', render_items, context_instance=RequestContext(request)) + + +@login_required +@permission_required('auth.signature_management') +def remove_signature(request, sigtracker_id): + logger.info("remove_signature called by user %s for signature id %s" % (request.user, sigtracker_id)) + if sigtracker.objects.filter(id=sigtracker_id).exists(): + sig = sigtracker.objects.get(id=sigtracker_id) + sig.delete() + logger.info("Deleting sigtracker id %s by user %s" % (sigtracker_id, request.user)) + else: + logger.info("Unable to delete signature id %s for user %s - signature matching id not found." % (sigtracker_id, request.user)) + return HttpResponseRedirect("/sigtracker/") diff --git a/stock/templates/public/base.html b/stock/templates/public/base.html index 13374967..e92d1b8a 100755 --- a/stock/templates/public/base.html +++ b/stock/templates/public/base.html @@ -137,6 +137,16 @@ href="{% url 'auth_fleet_fits' %}"> Fleet Doctrines + {% endif %} + + {% if perms.auth.member or perms.auth.blue_member %} +
ID | +System | +Destination | +Signature Type | +Status | +Notes | +Post Time | + {% if perms.auth.signature_management %} +Creator | +Action | + {% endif %} +
---|---|---|---|---|---|---|---|---|
{{ sigt.ident }} | + ++ {{ sigt.system }} + | +{{ sigt.destination }} | +{{ sigt.sigtype }} | +{{ sigt.status }} | +{{ sigt.notes }} | +{{ sigt.post_time}} | + {% if perms.auth.signature_management %} +{{ sigt.eve_character }} | ++ + + + | +