Merge pull request #180 from Adarnof/requests

Closes #170 #169 #137 #181
This commit is contained in:
Adarnof 2016-01-17 02:02:12 -05:00
commit c8df2ad453
9 changed files with 139 additions and 7 deletions

View File

@ -3,8 +3,10 @@ from django.contrib import admin
from models import GroupDescription
from models import GroupRequest
from models import HiddenGroup
from models import OpenGroup
admin.site.register(GroupDescription)
admin.site.register(GroupRequest)
admin.site.register(HiddenGroup)
admin.site.register(OpenGroup)

View File

@ -28,3 +28,9 @@ class HiddenGroup(models.Model):
def __str__(self):
return self.group.name + " - Hidden"
class OpenGroup(models.Model):
group = models.OneToOneField(Group)
def __str__(self):
return self.group.name + " - Open"

View File

@ -9,6 +9,7 @@ from django.contrib.auth.models import Group
from models import GroupDescription
from models import GroupRequest
from models import HiddenGroup
from models import OpenGroup
from authentication.managers import AuthServicesInfoManager
from eveonline.managers import EveManager
@ -145,10 +146,15 @@ def groups_view(request):
@login_required
def group_request_add(request, group_id):
logger.debug("group_request_add called by user %s for group id %s" % (request.user, group_id))
group = Group.objects.get(id=group_id)
if OpenGroup.objects.filter(group=group).exists():
logger.info("%s joining %s as is an open group" % (request.user, group))
request.user.groups.add(group)
return HttpResponseRedirect("/groups")
auth_info = AuthServicesInfoManager.get_auth_service_info(request.user)
grouprequest = GroupRequest()
grouprequest.status = 'pending'
grouprequest.group = Group.objects.get(id=group_id)
grouprequest.group = group
grouprequest.user = request.user
grouprequest.main_char = EveManager.get_character_by_id(auth_info.main_char_id)
grouprequest.leave_request = False
@ -161,10 +167,15 @@ def group_request_add(request, group_id):
@login_required
def group_request_leave(request, group_id):
logger.debug("group_request_leave called by user %s for group id %s" % (request.user, group_id))
group = Group.objects.get(id=group_id)
if OpenGroup.objects.filter(group=group).exists():
logger.info("%s leaving %s as is an open group" % (request.user, group))
request.user.groups.remove(group)
return HttpResponseRedirect("/groups")
auth_info = AuthServicesInfoManager.get_auth_service_info(request.user)
grouprequest = GroupRequest()
grouprequest.status = 'pending'
grouprequest.group = Group.objects.get(id=group_id)
grouprequest.group = group
grouprequest.user = request.user
grouprequest.main_char = EveManager.get_character_by_id(auth_info.main_char_id)
grouprequest.leave_request = True

View File

@ -106,7 +106,7 @@
</li>
{% endif %}
{% if not perms.auth.member and not perms.auth.blue_member or perms.auth.human_resources %}
{% if not perms.auth.member or perms.auth.human_resources %}
<li>
<a {% ifequal request.path "/hr_application_management/" %}
class="active" {% endifequal %}

View File

@ -170,7 +170,7 @@
<td class="text-center">
{% ifequal authinfo.teamspeak3_uid "" %}
{% else %}
<a href="ts3server://{{ TEAMSPEAK3_PUBLIC_URL }}?token={{ authinfo.teamspeak3_perm_key }}">Teamspeak3
<a href="ts3server://{{ TEAMSPEAK3_PUBLIC_URL }}?token={{ authinfo.teamspeak3_perm_key }}&nickname={{ authinfo.teamspeak3_uid }}">Teamspeak3
Link</a>
{% endifequal %}
</td>

View File

@ -120,7 +120,105 @@
{% endif %}
</tr>
</table>
{% if corp_timers %}
<h4><b>Corp Timers</b></h4>
<table class="table table-bordered">
<tr>
<th style="width:150px" class="text-center">Details</th>
<th class="text-center">Objective</th>
<th class="text-center">System</th>
<th class="text-center">Structure</th>
<th class="text-center">Eve Time</th>
<th class="text-center">Local Time</th>
<th class="text-center">Creator</th>
{% if perms.auth.timer_management %}
<th class="text-center">Action</th>
{% endif %}
</tr>
{% for timer in corp_timers %}
{% ifequal timer.important True %}
<tr class="danger">
{% else %}
<tr class="info">
{% endifequal %}
<td style="width:150px" class="text-center">{{ timer.details }}</td>
<td class="text-center">
{% ifequal timer.objective "Hostile" %}
<div class="label label-danger">
Hostile
</div>
{% endifequal %}
{% ifequal timer.objective "Friendly" %}
<div class="label label-primary">
Friendly
</div>
{% endifequal %}
{% ifequal timer.objective "Neutral" %}
<div class="label label-default">
Neutral
</div>
{% endifequal %}
</td>
<td class="text-center"><a
href="http://evemaps.dotlan.net/system/{{ timer.system }}">{{ timer.system }} {{ timer.planet_moon }} </a>
</td>
<td class="text-center">
{% ifequal timer.structure "I-HUB" %}
<div class="label label-warning">
I-HUB
</div>
{% endifequal %}
{% ifequal timer.structure "POCO" %}
<div class="label label-success">
POCO
</div>
{% endifequal %}
{% ifequal timer.structure "POS[S]" %}
<div class="label label-info">
POS [S]
</div>
{% endifequal %}
{% ifequal timer.structure "POS[M]" %}
<div class="label label-info">
POS [M]
</div>
{% endifequal %}
{% ifequal timer.structure "POS[L]" %}
<div class="label label-info">
POS [L]
</div>
{% endifequal %}
{% ifequal timer.structure "Station" %}
<div class="label label-danger">
Station
</div>
{% endifequal %}
{% ifequal timer.structure "TCU" %}
<div class="label label-danger">
TCU
</div>
{% endifequal %}
{% ifequal timer.structure "Other" %}
<div class="label label-default">
Other
</div>
{% endifequal %}
</td>
<td class="text-center" nowrap>{{ timer.eve_time | date:"Y-m-d H:i" }}</td>
<td class="text-center" nowrap><div id="countdown{{ timer.id }}"></div></td>
<td class="text-center">{{ timer.eve_character.character_name }}</td>
{% if perms.auth.timer_management %}
<td class="text-center">
<a href="/remove_timer/{{ timer.id }}">
<button type="button" class="btn btn-danger"><span
class="glyphicon glyphicon-remove"></span></button>
</a>
</td>
{% endif %}
</tr>
{% endfor %}
</table>
{% endif %}
<h4><b>Future Timers</b></h4>
<table class="table table-bordered">
<tr>
@ -231,6 +329,7 @@ var clock{{ timer.id }} = document.getElementById("countdown{{ timer.id }}"), ta
setInterval(function(){clockClosest.innerHTML = targetDate.format('D @ h:ia'); if (targetDate > Date.now()){ clockClosest.innerHTML = clockClosest.innerHTML + "<BR>" + countdown(targetDate).toString();}}, 1000);
{% for timer in timers %}setInterval(function(){clock{{ timer.id }}.innerHTML = targetDate{{ timer.id }}.format('D @ h:ia'); if (targetDate{{ timer.id }} > Date.now()){ clock{{ timer.id }}.innerHTML = clock{{ timer.id }}.innerHTML + "<BR>" + countdown(targetDate{{ timer.id }}).toString();}}, 1000);{% endfor %}
{% for timer in corp_timers %}setInterval(function(){clock{{ timer.id }}.innerHTML = targetDate{{ timer.id }}.format('D @ h:ia'); if (targetDate{{ timer.id }} > Date.now()){ clock{{ timer.id }}.innerHTML = clock{{ timer.id }}.innerHTML + "<BR>" + countdown(targetDate{{ timer.id }}).toString();}}, 1000);{% endfor %}
setInterval(function(){updateClock()}, 1000);

View File

@ -17,3 +17,4 @@ class TimerForm(forms.Form):
hours_left = forms.IntegerField(required=True, label="Hours Remaining", validators=[MinValueValidator(0), MaxValueValidator(23)])
minutes_left = forms.IntegerField(required=True, label="Minutes Remaining", validators=[MinValueValidator(0), MaxValueValidator(59)])
important = forms.BooleanField(label="Important", required=False)
corp_timer = forms.BooleanField(label="Corp-Restricted", required=False)

View File

@ -17,4 +17,5 @@ class Timer(models.Model):
important = models.BooleanField(default=False)
eve_character = models.ForeignKey(EveCharacter)
eve_corp = models.ForeignKey(EveCorporationInfo)
corp_timer = models.BooleanField(default=False)
user = models.ForeignKey(User)

View File

@ -26,14 +26,25 @@ def timer_util_test(user):
@permission_required('auth.timer_view')
def timer_view(request):
logger.debug("timer_view called by user %s" % request.user)
auth_info = AuthServicesInfoManager.get_auth_service_info(request.user)
char = EveManager.get_character_by_id(auth_info.main_char_id)
if char:
corp = EveManager.get_corporation_info_by_id(char.corporation_id)
else:
corp = None
if corp:
corp_timers = Timer.objects.all().filter(corp_timer=True).filter(eve_corp=corp)
else:
corp_timers = []
timer_list = Timer.objects.all()
closest_timer = None
if timer_list:
closest_timer = \
sorted(list(Timer.objects.all()), key=lambda d: abs(datetime.datetime.now() - d.eve_time.replace(tzinfo=None)))[
sorted(list(Timer.objects.all().filter(corp_timer=False)), key=lambda d: abs(datetime.datetime.now() - d.eve_time.replace(tzinfo=None)))[
0]
logger.debug("Determined closest timer is %s" % closest_timer)
render_items = {'timers': Timer.objects.all(),
render_items = {'timers': Timer.objects.all().filter(corp_timer=False),
'corp_timers': corp_timers,
'closest_timer': closest_timer}
return render_to_response('registered/timermanagement.html', render_items, context_instance=RequestContext(request))
@ -66,6 +77,7 @@ def add_timer_view(request):
timer.objective = form.cleaned_data['objective']
timer.eve_time = eve_time
timer.important = form.cleaned_data['important']
timer.corp_timer = form.cleaned_data['corp_timer']
timer.eve_character = character
timer.eve_corp = corporation
timer.user = request.user