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 GroupDescription
from models import GroupRequest from models import GroupRequest
from models import HiddenGroup from models import HiddenGroup
from models import OpenGroup
admin.site.register(GroupDescription) admin.site.register(GroupDescription)
admin.site.register(GroupRequest) admin.site.register(GroupRequest)
admin.site.register(HiddenGroup) admin.site.register(HiddenGroup)
admin.site.register(OpenGroup)

View File

@ -28,3 +28,9 @@ class HiddenGroup(models.Model):
def __str__(self): def __str__(self):
return self.group.name + " - Hidden" 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 GroupDescription
from models import GroupRequest from models import GroupRequest
from models import HiddenGroup from models import HiddenGroup
from models import OpenGroup
from authentication.managers import AuthServicesInfoManager from authentication.managers import AuthServicesInfoManager
from eveonline.managers import EveManager from eveonline.managers import EveManager
@ -145,10 +146,15 @@ def groups_view(request):
@login_required @login_required
def group_request_add(request, group_id): def group_request_add(request, group_id):
logger.debug("group_request_add called by user %s for group id %s" % (request.user, 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) auth_info = AuthServicesInfoManager.get_auth_service_info(request.user)
grouprequest = GroupRequest() grouprequest = GroupRequest()
grouprequest.status = 'pending' grouprequest.status = 'pending'
grouprequest.group = Group.objects.get(id=group_id) grouprequest.group = group
grouprequest.user = request.user grouprequest.user = request.user
grouprequest.main_char = EveManager.get_character_by_id(auth_info.main_char_id) grouprequest.main_char = EveManager.get_character_by_id(auth_info.main_char_id)
grouprequest.leave_request = False grouprequest.leave_request = False
@ -161,10 +167,15 @@ def group_request_add(request, group_id):
@login_required @login_required
def group_request_leave(request, group_id): def group_request_leave(request, group_id):
logger.debug("group_request_leave called by user %s for group id %s" % (request.user, 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) auth_info = AuthServicesInfoManager.get_auth_service_info(request.user)
grouprequest = GroupRequest() grouprequest = GroupRequest()
grouprequest.status = 'pending' grouprequest.status = 'pending'
grouprequest.group = Group.objects.get(id=group_id) grouprequest.group = group
grouprequest.user = request.user grouprequest.user = request.user
grouprequest.main_char = EveManager.get_character_by_id(auth_info.main_char_id) grouprequest.main_char = EveManager.get_character_by_id(auth_info.main_char_id)
grouprequest.leave_request = True grouprequest.leave_request = True

View File

@ -106,7 +106,7 @@
</li> </li>
{% endif %} {% 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> <li>
<a {% ifequal request.path "/hr_application_management/" %} <a {% ifequal request.path "/hr_application_management/" %}
class="active" {% endifequal %} class="active" {% endifequal %}

View File

@ -170,7 +170,7 @@
<td class="text-center"> <td class="text-center">
{% ifequal authinfo.teamspeak3_uid "" %} {% ifequal authinfo.teamspeak3_uid "" %}
{% else %} {% 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> Link</a>
{% endifequal %} {% endifequal %}
</td> </td>

View File

@ -120,7 +120,105 @@
{% endif %} {% endif %}
</tr> </tr>
</table> </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> <h4><b>Future Timers</b></h4>
<table class="table table-bordered"> <table class="table table-bordered">
<tr> <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); 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 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); 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)]) 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)]) minutes_left = forms.IntegerField(required=True, label="Minutes Remaining", validators=[MinValueValidator(0), MaxValueValidator(59)])
important = forms.BooleanField(label="Important", required=False) 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) important = models.BooleanField(default=False)
eve_character = models.ForeignKey(EveCharacter) eve_character = models.ForeignKey(EveCharacter)
eve_corp = models.ForeignKey(EveCorporationInfo) eve_corp = models.ForeignKey(EveCorporationInfo)
corp_timer = models.BooleanField(default=False)
user = models.ForeignKey(User) user = models.ForeignKey(User)

View File

@ -26,14 +26,25 @@ def timer_util_test(user):
@permission_required('auth.timer_view') @permission_required('auth.timer_view')
def timer_view(request): def timer_view(request):
logger.debug("timer_view called by user %s" % request.user) 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() timer_list = Timer.objects.all()
closest_timer = None closest_timer = None
if timer_list: if timer_list:
closest_timer = \ 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] 0]
logger.debug("Determined closest timer is %s" % closest_timer) 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} 'closest_timer': closest_timer}
return render_to_response('registered/timermanagement.html', render_items, context_instance=RequestContext(request)) 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.objective = form.cleaned_data['objective']
timer.eve_time = eve_time timer.eve_time = eve_time
timer.important = form.cleaned_data['important'] timer.important = form.cleaned_data['important']
timer.corp_timer = form.cleaned_data['corp_timer']
timer.eve_character = character timer.eve_character = character
timer.eve_corp = corporation timer.eve_corp = corporation
timer.user = request.user timer.user = request.user