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..9350a067 100755 --- a/alliance_auth/settings.py.example +++ b/alliance_auth/settings.py.example @@ -41,6 +41,7 @@ INSTALLED_APPS = ( 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + 'django.contrib.humanize', 'django_evolution', 'djcelery', 'celerytask', @@ -53,6 +54,7 @@ INSTALLED_APPS = ( 'groupmanagement', 'hrapplications', 'timerboard', + 'srp', ) MIDDLEWARE_CLASSES = ( diff --git a/alliance_auth/urls.py b/alliance_auth/urls.py index b2663708..3c749519 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,25 @@ 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_all/$', 'srp.views.srp_management_all', name='auth_srp_management_all_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_fleet_edit/(\w+)$', 'srp.views.srp_fleet_edit_view', name='auth_srp_fleet_edit_view'), + url(r'^srp_fleet_mark_completed/(\w+)', 'srp.views.srp_fleet_mark_completed', + name='auth_srp_fleet_mark_completed'), + url(r'^srp_fleet_mark_uncompleted/(\w+)', 'srp.views.srp_fleet_mark_uncompleted', + name='auth_srp_fleet_mark_uncompleted'), + 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"), + url(r'srp_request_approve/(\w+)', 'srp.views.srp_request_approve', + name='auth_srp_request_approve'), + url(r'srp_request_reject/(\w+)', 'srp.views.srp_request_reject', name='auth_srp_request_reject'), + url(r'srp_request_amount_update/(\w+)', 'srp.views.srp_request_update_amount_view', + name="auth_srp_request_update_amount_view") + ) \ No newline at end of file diff --git a/celerytask/models.py b/celerytask/models.py index 0b290a62..3d14398a 100755 --- a/celerytask/models.py +++ b/celerytask/models.py @@ -4,7 +4,9 @@ from django.contrib.auth.models import User class SyncGroupCache(models.Model): groupname = models.CharField(max_length=254) + servicename = models.CharField(max_length=254, default="") + user = models.ForeignKey(User) def __str__(self): - return self.user.username + ' - ' + self.groupname + ' - SyncGroupCache' + return self.user.username + ' - ' + self.groupname + ' - ' + self.servicename + ' - SyncGroupCache' diff --git a/celerytask/tasks.py b/celerytask/tasks.py index 15111bb6..50b3660c 100755 --- a/celerytask/tasks.py +++ b/celerytask/tasks.py @@ -83,6 +83,21 @@ def update_teamspeak3_groups(user): Teamspeak3Manager.update_groups(authserviceinfo.teamspeak3_uid, groups) +def create_syncgroup_for_user(user, groupname, servicename): + synccache = SyncGroupCache() + synccache.groupname = groupname + synccache.user = user + synccache.servicename = servicename + synccache.save() + + +def remove_all_syncgroups_for_service(user, servicename): + syncgroups = SyncGroupCache.objects.filter(user=user) + for syncgroup in syncgroups: + if syncgroup.servicename == servicename: + syncgroup.delete() + + def add_to_databases(user, groups, syncgroups): authserviceinfo = None try: @@ -93,27 +108,28 @@ def add_to_databases(user, groups, syncgroups): if authserviceinfo: authserviceinfo = AuthServicesInfo.objects.get(user=user) - update = False for group in groups: - syncgroup = syncgroups.filter(groupname=group.name) - if not syncgroup: - synccache = SyncGroupCache() - synccache.groupname = group.name - synccache.user = user - synccache.save() - update = True - if update: if authserviceinfo.jabber_username and authserviceinfo.jabber_username != "": - update_jabber_groups(user) + if syncgroups.filter(groupname=group.name).filter(servicename="openfire").exists() is not True: + create_syncgroup_for_user(user, group.name, "openfire") + update_jabber_groups(user) if authserviceinfo.mumble_username and authserviceinfo.mumble_username != "": - update_mumble_groups(user) + if syncgroups.filter(groupname=group.name).filter(servicename="mumble").exists() is not True: + create_syncgroup_for_user(user, group.name, "mumble") + update_mumble_groups(user) if authserviceinfo.forum_username and authserviceinfo.forum_username != "": - update_forum_groups(user) + if syncgroups.filter(groupname=group.name).filter(servicename="phpbb3").exists() is not True: + create_syncgroup_for_user(user, group.name, "phpbb3") + update_forum_groups(user) if authserviceinfo.ipboard_username and authserviceinfo.ipboard_username != "": - update_ipboard_groups(user) + if syncgroups.filter(groupname=group.name).filter(servicename="ipboard").exists() is not True: + create_syncgroup_for_user(user, group.name, "ipboard") + update_ipboard_groups(user) if authserviceinfo.teamspeak3_uid and authserviceinfo.teamspeak3_uid != "": - update_teamspeak3_groups(user) + if syncgroups.filter(groupname=group.name).filter(servicename="teamspeak3").exists() is not True: + create_syncgroup_for_user(user, group.name, "teamspeak3") + update_teamspeak3_groups(user) def remove_from_databases(user, groups, syncgroups): @@ -168,8 +184,7 @@ def run_api_refresh(): if api_key_pairs: valid_key = False authserviceinfo = AuthServicesInfo.objects.get(user=user) - # We do a check on the authservice info to insure that we shoud run the check - # No point in running the check on people who arn't on services + print 'Running update on user: ' + user.username if authserviceinfo.main_char_id: if authserviceinfo.main_char_id != "": @@ -192,8 +207,8 @@ def run_api_refresh(): main_alliance_id = EveManager.get_charater_alliance_id_by_id(authserviceinfo.main_char_id) if main_alliance_id == settings.ALLIANCE_ID: pass - elif corp != None: - if not corp.is_blue: + elif corp is not None: + if corp.is_blue is not True: deactivate_services(user) else: deactivate_services(user) @@ -277,6 +292,15 @@ def run_alliance_corp_update(): all_alliance_api_info['executor_id'], all_alliance_api_info['member_count'], False) + else: + EveManager.update_alliance_info(all_alliance_api_info['id'], + all_alliance_api_info['executor_id'], + all_alliance_api_info['member_count'], False) + else: + EveManager.update_alliance_info(all_alliance_api_info['id'], + all_alliance_api_info['executor_id'], + all_alliance_api_info['member_count'], False) + # Update corp infos for all_corp_info in EveManager.get_all_corporation_info(): alliance = None @@ -325,7 +349,7 @@ def run_alliance_corp_update(): # Check the alliances for all_alliance_info in EveManager.get_all_alliance_info(): if all_alliance_info.alliance_id != settings.ALLIANCE_ID: - if not all_alliance_info.is_blue: + if all_alliance_info.is_blue is not True: all_alliance_info.delete() diff --git a/eveonline/views.py b/eveonline/views.py old mode 100644 new mode 100755 index a687fd37..008c68dc --- a/eveonline/views.py +++ b/eveonline/views.py @@ -18,6 +18,7 @@ from util.common_task import deactivate_services from util.common_task import generate_corp_group_name from eveonline.models import EveCorporationInfo from eveonline.models import EveCharacter +from eveonline.models import EveApiKeyPair from authentication.models import AuthServicesInfo @@ -140,14 +141,14 @@ def corp_stats_view(request): main_char = EveCharacter.objects.get(character_id=auth_info.main_char_id) corp = EveCorporationInfo.objects.get(corporation_id=main_char.corporation_id) current_count = 0 - allcharacters = [] + allcharacters = {} all_characters = EveCharacter.objects.all() for char in all_characters: if char: try: if char.corporation_id == corp.corporation_id: current_count = current_count + 1 - allcharacters.append(char) + allcharacters[char.character_name] = EveApiKeyPair.objects.get(api_id=char.api_id) except: pass 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/services/managers/ipboard_manager.py b/services/managers/ipboard_manager.py index bfff174d..a85a146a 100755 --- a/services/managers/ipboard_manager.py +++ b/services/managers/ipboard_manager.py @@ -6,7 +6,6 @@ from django.conf import settings class IPBoardManager: - def __init__(self): pass @@ -23,15 +22,18 @@ class IPBoardManager: @staticmethod def exec_xmlrpc(func, **kwargs): """ Send a XMLRPC request """ + try: + server = xmlrpclib.Server(settings.IPBOARD_ENDPOINT, verbose=False) + params = {} + for i in kwargs: + params[i] = kwargs[i] + params['api_key'] = settings.IPBOARD_APIKEY + params['api_module'] = settings.IPBOARD_APIMODULE + print params - server = xmlrpclib.Server(settings.IPBOARD_ENDPOINT, verbose=False) - params = {} - for i in kwargs: - params[i] = kwargs[i] - params['api_key'] = settings.IPBOARD_APIKEY - params['api_module'] = settings.IPBOARD_APIMODULE - print params - return getattr(server, func)(params) + return getattr(server, func)(params) + except: + return {} @staticmethod def add_user(username, email): @@ -39,7 +41,8 @@ class IPBoardManager: sanatized = str(IPBoardManager.__santatize_username(username)) plain_password = IPBoardManager.__generate_random_pass() password = md5(plain_password).hexdigest() - ret = IPBoardManager.exec_xmlrpc('createUser', username=sanatized, email=str(email), display_name=sanatized, md5_passwordHash=password) + ret = IPBoardManager.exec_xmlrpc('createUser', username=sanatized, email=str(email), display_name=sanatized, + md5_passwordHash=password) return sanatized, plain_password @staticmethod diff --git a/services/managers/mumble_manager.py b/services/managers/mumble_manager.py index 20641b27..71d2f34c 100755 --- a/services/managers/mumble_manager.py +++ b/services/managers/mumble_manager.py @@ -218,7 +218,13 @@ class MumbleManager: for g in addgroups: if not g in mumble_groups: mumble_groups[g] = MumbleManager._add_group(g) - MumbleManager._add_user_to_group(userid, mumble_groups[g]) + try: + MumbleManager._add_user_to_group(userid, mumble_groups[g]) + except: + print "Error occurred while adding a mumble to a group" for g in remgroups: - MumbleManager._del_user_from_group(userid, mumble_groups[g]) + try: + MumbleManager._del_user_from_group(userid, mumble_groups[g]) + except: + print "Error occurred while removing a mumble user from group" diff --git a/services/managers/phpbb3_manager.py b/services/managers/phpbb3_manager.py index ac6d690c..ce9dc62f 100755 --- a/services/managers/phpbb3_manager.py +++ b/services/managers/phpbb3_manager.py @@ -62,7 +62,10 @@ class Phpbb3Manager: cursor = connections['phpbb3'].cursor() cursor.execute(Phpbb3Manager.SQL_USER_ID_FROM_USERNAME, [username]) row = cursor.fetchone() - return row[0] + if row is not None: + return row[0] + else: + return None @staticmethod def __get_all_groups(): @@ -95,13 +98,19 @@ class Phpbb3Manager: @staticmethod def __add_user_to_group(userid, groupid): - cursor = connections['phpbb3'].cursor() - cursor.execute(Phpbb3Manager.SQL_ADD_USER_GROUP, [groupid, userid, 0]) + try: + cursor = connections['phpbb3'].cursor() + cursor.execute(Phpbb3Manager.SQL_ADD_USER_GROUP, [groupid, userid, 0]) + except: + pass @staticmethod def __remove_user_from_group(userid, groupid): cursor = connections['phpbb3'].cursor() - cursor.execute(Phpbb3Manager.SQL_REMOVE_USER_GROUP, [userid, groupid]) + try: + cursor.execute(Phpbb3Manager.SQL_REMOVE_USER_GROUP, [userid, groupid]) + except: + pass @staticmethod def add_user(username, email, groups): @@ -118,8 +127,8 @@ class Phpbb3Manager: try: cursor.execute(Phpbb3Manager.SQL_ADD_USER, [username_clean, username_clean, pwhash, - email, 2, Phpbb3Manager.__get_current_utc_date(), - "", ""]) + email, 2, Phpbb3Manager.__get_current_utc_date(), + "", ""]) Phpbb3Manager.update_groups(username_clean, groups) except: pass @@ -152,32 +161,36 @@ class Phpbb3Manager: @staticmethod def update_groups(username, groups): userid = Phpbb3Manager.__get_user_id(username) - forum_groups = Phpbb3Manager.__get_all_groups() - user_groups = set(Phpbb3Manager.__get_user_groups(userid)) - act_groups = set([g.replace(' ', '-') for g in groups]) - addgroups = act_groups - user_groups - remgroups = user_groups - act_groups - print username - print addgroups - print remgroups - for g in addgroups: - if not g in forum_groups: - forum_groups[g] = Phpbb3Manager.__create_group(g) - Phpbb3Manager.__add_user_to_group(userid, forum_groups[g]) + if userid is not None: + forum_groups = Phpbb3Manager.__get_all_groups() + user_groups = set(Phpbb3Manager.__get_user_groups(userid)) + act_groups = set([g.replace(' ', '-') for g in groups]) + addgroups = act_groups - user_groups + remgroups = user_groups - act_groups + print username + print addgroups + print remgroups + for g in addgroups: + if not g in forum_groups: + forum_groups[g] = Phpbb3Manager.__create_group(g) + Phpbb3Manager.__add_user_to_group(userid, forum_groups[g]) - for g in remgroups: - Phpbb3Manager.__remove_user_from_group(userid, forum_groups[g]) + for g in remgroups: + Phpbb3Manager.__remove_user_from_group(userid, forum_groups[g]) @staticmethod def remove_group(username, group): cursor = connections['phpbb3'].cursor() userid = Phpbb3Manager.__get_user_id(username) - groupid = Phpbb3Manager.__get_group_id(group) - - if userid: - if groupid: - cursor.execute(Phpbb3Manager.SQL_REMOVE_USER_GROUP, [userid, groupid]) + if userid is not None: + groupid = Phpbb3Manager.__get_group_id(group) + if userid: + if groupid: + try: + cursor.execute(Phpbb3Manager.SQL_REMOVE_USER_GROUP, [userid, groupid]) + except: + pass @staticmethod def check_user(username): diff --git a/services/managers/teamspeak3_manager.py b/services/managers/teamspeak3_manager.py index 141306af..fd382337 100755 --- a/services/managers/teamspeak3_manager.py +++ b/services/managers/teamspeak3_manager.py @@ -18,7 +18,7 @@ class Teamspeak3Manager: def __santatize_username(username): sanatized = username.replace(" ", "_") sanatized = sanatized.replace("'", "") - return sanatized.lower() + return sanatized @staticmethod def __generate_username(username, corp_ticker): @@ -39,6 +39,7 @@ class Teamspeak3Manager: def _group_id_by_name(groupname): server = Teamspeak3Manager.__get_created_server() group_cache = server.send_command('servergrouplist') + for group in group_cache: if group['keys']['name'] == groupname: return group['keys']['sgid'] @@ -206,8 +207,10 @@ class Teamspeak3Manager: @staticmethod def update_groups(uid, l_groups): + print uid + print l_groups userid = Teamspeak3Manager._get_userid(uid) - if userid: + if userid is not None: server_groups = Teamspeak3Manager._group_list() user_groups = set(Teamspeak3Manager._user_group_list(userid)) groups = [] diff --git a/services/managers/util/ts3.py b/services/managers/util/ts3.py index 9b1c55fb..f13a04ba 100755 --- a/services/managers/util/ts3.py +++ b/services/managers/util/ts3.py @@ -139,7 +139,7 @@ class TS3Proto(): v = [v[0], '='.join(v[1:])] key, value = v keys[key] = self._unescape_str(value) - elif v[0][0] == '-': + elif v[0][0] and v[0][0] == '-': # Option opts.append(v[0][1:]) else: diff --git a/services/views.py b/services/views.py index 26e1e775..26909594 100755 --- a/services/views.py +++ b/services/views.py @@ -12,6 +12,7 @@ from managers.ipboard_manager import IPBoardManager from managers.teamspeak3_manager import Teamspeak3Manager from authentication.managers import AuthServicesInfoManager from eveonline.managers import EveManager +from celerytask.tasks import remove_all_syncgroups_for_service from celerytask.tasks import update_jabber_groups from celerytask.tasks import update_mumble_groups from celerytask.tasks import update_forum_groups @@ -96,6 +97,7 @@ def activate_forum(request): def deactivate_forum(request): authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) result = Phpbb3Manager.disable_user(authinfo.forum_username) + remove_all_syncgroups_for_service(request.user, "phpbb") # false we failed if result: AuthServicesInfoManager.update_user_forum_info("", "", request.user) @@ -134,6 +136,7 @@ def activate_ipboard_forum(request): def deactivate_ipboard_forum(request): authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) result = IPBoardManager.disable_user(authinfo.ipboard_username) + remove_all_syncgroups_for_service(request.user, "ipboard") # false we failed if result: AuthServicesInfoManager.update_user_ipboard_info("", "", request.user) @@ -171,6 +174,7 @@ def activate_jabber(request): def deactivate_jabber(request): authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) result = OpenfireManager.delete_user(authinfo.jabber_username) + remove_all_syncgroups_for_service(request.user, "openfire") # If our username is blank means we failed if result: AuthServicesInfoManager.update_user_jabber_info("", "", request.user) @@ -212,6 +216,7 @@ def activate_mumble(request): def deactivate_mumble(request): authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) result = MumbleManager.delete_user(authinfo.mumble_username) + remove_all_syncgroups_for_service(request.user, "mumble") # if false we failed if result: AuthServicesInfoManager.update_user_mumble_info("", "", request.user) @@ -224,6 +229,7 @@ def deactivate_mumble(request): def reset_mumble_password(request): authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) result = MumbleManager.update_user_password(authinfo.mumble_username) + # if blank we failed if result != "": AuthServicesInfoManager.update_user_mumble_info(authinfo.mumble_username, result, request.user) @@ -254,9 +260,13 @@ def activate_teamspeak3(request): def deactivate_teamspeak3(request): authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) result = Teamspeak3Manager.delete_user(authinfo.teamspeak3_uid) + + remove_all_syncgroups_for_service(request.user, "teamspeak3") + # if false we failed if result: AuthServicesInfoManager.update_user_teamspeak3_info("", "", request.user) + return HttpResponseRedirect("/services/") return HttpResponseRedirect("/") @@ -269,6 +279,8 @@ def reset_teamspeak3_perm(request): Teamspeak3Manager.delete_user(authinfo.teamspeak3_uid) + remove_all_syncgroups_for_service(request.user, "teamspeak3") + if check_if_user_has_permission(request.user, "blue_member"): result = Teamspeak3Manager.generate_new_blue_permissionkey(authinfo.teamspeak3_uid, character.character_name, character.corporation_ticker) @@ -279,5 +291,6 @@ def reset_teamspeak3_perm(request): # if blank we failed if result != "": AuthServicesInfoManager.update_user_teamspeak3_info(result[0], result[1], request.user) + update_teamspeak3_groups(request.user) return HttpResponseRedirect("/services/") return HttpResponseRedirect("/") \ No newline at end of file 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..7f9225e5 --- /dev/null +++ b/srp/form.py @@ -0,0 +1,20 @@ +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") + + +class SrpFleetUpdateCostForm(forms.Form): + srp_total_amount = forms.IntegerField(required=True, label="Total SRP Amount") + + +class SrpFleetMainUpdateForm(forms.Form): + fleet_aar_link = forms.CharField(required=True, label="After Action Report Link") \ No newline at end of file diff --git a/srp/models.py b/srp/models.py new file mode 100755 index 00000000..4400db6b --- /dev/null +++ b/srp/models.py @@ -0,0 +1,29 @@ +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_srp_status = models.CharField(max_length=254, default="") + fleet_commander = models.ForeignKey(EveCharacter) + fleet_srp_aar_link = models.CharField(max_length=254, default="") + + def __str__(self): + return self.fleet_name + " - SrpFleetMain" + + +class SrpUserRequest(models.Model): + killboard_link = models.CharField(max_length=254, default="") + after_action_report_link = models.CharField(max_length=254, default="") + additional_info = models.CharField(max_length=254, default="") + srp_status = models.CharField(max_length=254, default="") + srp_total_amount = models.BigIntegerField(default=0) + 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..61a160be --- /dev/null +++ b/srp/views.py @@ -0,0 +1,276 @@ +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 +from form import SrpFleetUpdateCostForm +from form import SrpFleetMainUpdateForm + + +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): + totalcost = 0 + runningcost = 0 + price_pair = {} + for fleet_main in SrpFleetMain.objects.filter(fleet_srp_status="").iterator(): + for fleet_data in SrpUserRequest.objects.filter(srp_fleet_main=fleet_main).iterator(): + totalcost = totalcost + fleet_data.srp_total_amount + runningcost = runningcost + fleet_data.srp_total_amount + price_pair[fleet_main.id] = runningcost + runningcost = 0 + + context = {"srpfleets": SrpFleetMain.objects.filter(fleet_srp_status=""), "totalcost": totalcost, + "price_pair": price_pair} + return render_to_response('registered/srpmanagement.html', context, context_instance=RequestContext(request)) + + +@login_required +@user_passes_test(srp_util_test) +def srp_management_all(request): + totalcost = 0 + runningcost = 0 + price_pair = {} + for fleet_main in SrpFleetMain.objects.all().iterator(): + for fleet_data in SrpUserRequest.objects.filter(srp_fleet_main=fleet_main).iterator(): + totalcost = totalcost + fleet_data.srp_total_amount + runningcost = runningcost + fleet_data.srp_total_amount + price_pair[fleet_main.id] = runningcost + runningcost = 0 + + context = {"srpfleets": SrpFleetMain.objects.all(), "totalcost": totalcost, "price_pair": price_pair} + 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).exists(): + fleet_main = SrpFleetMain.objects.get(id=fleet_id) + totalcost = 0 + for fleet_data in SrpUserRequest.objects.filter(srp_fleet_main=fleet_main): + totalcost = totalcost + fleet_data.srp_total_amount + + context = {"fleet_id": fleet_id, "fleet_status": fleet_main.fleet_srp_status, + "srpfleetrequests": SrpUserRequest.objects.filter(srp_fleet_main=fleet_main), + "totalcost": totalcost} + + 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 +@permission_required('auth.srp_management') +def srp_fleet_mark_completed(request, fleet_id): + if SrpFleetMain.objects.filter(id=fleet_id).exists(): + srpfleetmain = SrpFleetMain.objects.get(id=fleet_id) + srpfleetmain.fleet_srp_status = "Completed" + srpfleetmain.save() + + return HttpResponseRedirect("/srp_fleet_view/" + str(fleet_id)) + + +@login_required +@permission_required('auth.srp_management') +def srp_fleet_mark_uncompleted(request, fleet_id): + if SrpFleetMain.objects.filter(id=fleet_id).exists(): + srpfleetmain = SrpFleetMain.objects.get(id=fleet_id) + srpfleetmain.fleet_srp_status = "" + srpfleetmain.save() + + return HttpResponseRedirect("/srp_fleet_view/" + str(fleet_id)) + + +@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)) + + +@login_required +@permission_required('auth.srp_management') +def srp_request_approve(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.srp_status = "Approved" + srpuserrequest.save() + + if stored_fleet_view is None: + return HttpResponseRedirect("/srp") + else: + return HttpResponseRedirect("/srp_fleet_view/" + str(stored_fleet_view)) + + +@login_required +@permission_required('auth.srp_management') +def srp_request_reject(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.srp_status = "Rejected" + srpuserrequest.save() + + if stored_fleet_view is None: + return HttpResponseRedirect("/srp") + else: + return HttpResponseRedirect("/srp_fleet_view/" + str(stored_fleet_view)) + + +@login_required +@permission_required('auth.srp_management') +def srp_request_update_amount_view(request, fleet_srp_request_id): + no_srp_code = False + srp_code = "" + + if SrpUserRequest.objects.filter(id=fleet_srp_request_id).exists() is False: + no_srp_code = True + + if request.method == 'POST': + form = SrpFleetUpdateCostForm(request.POST) + + if form.is_valid(): + srp_request = SrpUserRequest.objects.get(id=fleet_srp_request_id) + srp_request.srp_total_amount = form.cleaned_data['srp_total_amount'] + srp_request.save() + + return HttpResponseRedirect("/srp_fleet_view/" + str(srp_request.srp_fleet_main.id)) + else: + form = SrpFleetUpdateCostForm() + + render_items = {'form': form, "no_srp_code": no_srp_code} + + return render_to_response('registered/srpfleetrequestamount.html', render_items, + context_instance=RequestContext(request)) + + +@login_required +@permission_required('auth.srp_management') +def srp_fleet_edit_view(request, fleet_id): + no_fleet_id = False + form = None + if SrpFleetMain.objects.filter(id=fleet_id).exists(): + if request.method == 'POST': + form = SrpFleetMainUpdateForm(request.POST) + if form.is_valid(): + srpfleetmain = SrpFleetMain.objects.get(id=fleet_id) + srpfleetmain.fleet_srp_aar_link = form.cleaned_data['fleet_aar_link'] + srpfleetmain.save() + return HttpResponseRedirect("/srp") + else: + form = SrpFleetMainUpdateForm() + else: + no_fleet_id = True + + render_items = {'form': form, "no_fleet_id": no_fleet_id} + + return render_to_response('registered/srpfleetupdate.html', render_items, + context_instance=RequestContext(request)) \ 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 -
Character Name | +Actions | +|||||||
---|---|---|---|---|---|---|---|---|
- {{ character.character_name }} + |
+ {{ key }} + |
+ + + + |
Pilot Name | +Killboard Link | +Additional Info | +SRP ISK Cost | +Status | + {% if perms.auth.srp_management %} +Actions | + {% endif %} +
---|---|---|---|---|---|
+
+ {{ srpfleetrequest.character.character_name }}
+
+ |
+ + {{ srpfleetrequest.killboard_link }} + | +{{ srpfleetrequest.additional_info }} | +ISK: {{ srpfleetrequest.srp_total_amount | intcomma }} | +
+ {% if srpfleetrequest.srp_status == "Approved" %}
+
+ Approved
+
+ {% elif srpfleetrequest.srp_status == "Rejected" %}
+
+ Rejected
+
+ {% else %}
+
+ Pending
+
+ {% endif %}
+ |
+ {% if perms.auth.srp_management %}
+
+ + + + + + + + + + + + + + | + {% endif %} +
Fleet Name | +Fleet Time | +Fleet Doctrine | +Fleet Commander | +Fleet AAR | +Fleet SRP Code | +Fleet ISK Cost | +SRP Status | +Actions | +
---|---|---|---|---|---|---|---|---|
+
+ {{ srpfleet.fleet_name }}
+
+ |
+ {{ srpfleet.fleet_time }} | +{{ srpfleet.fleet_doctrine }} | +
+
+ {{ srpfleet.fleet_commander.character_name }}
+
+ |
+ {{ srpfleet.fleet_srp_aar_link }} | ++ + | ++ {% for key,value in price_pair.items %} + {% if key == srpfleet.id %} + ISK: {{ value | intcomma }} + {% endif %} + {% endfor %} + | + +
+ {% if srpfleet.fleet_srp_status == "" %}
+
+ Pending
+
+ {% else %}
+
+ Completed
+
+ {% endif %}
+ |
+ + + + + + + {% if perms.auth.srp_management %} + + + + + + + + {% endif %} + | +