Skip to content

Commit 066d695

Browse files
committed
Fix sponsorlogos, fix submissionlist, add way to edit submissions
1 parent 8fcca23 commit 066d695

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+1035
-576
lines changed

marathon/cms_plugins.py

Lines changed: 70 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,65 @@ def render(self, context, instance, placeholder):
2222
else:
2323
submissions = Submission.objects.filter(hidden=False)
2424

25+
unique_players = []
26+
run_times = {}
27+
total_time = 0
28+
for s in submissions:
29+
for p in s.players.all():
30+
if p not in unique_players:
31+
unique_players.append(p)
32+
time = s.estimate.split(":")
33+
if len(time) == 2:
34+
run_id = s.game_title.lower() + s.category.lower()
35+
run_time = int(time[0]) * 60 + int(time[1])
36+
if run_id in run_times:
37+
if run_times[run_id] < run_time:
38+
total_time -= run_times[run_id]
39+
run_times[run_id] = run_time
40+
total_time += run_time
41+
else:
42+
run_times[run_id] = run_time
43+
total_time += run_time
44+
total_days = int(total_time / 60 / 24)
45+
total_hours = int(total_time / 60) % 24
46+
total_minutes = total_time % 60
47+
time_string = str(total_hours) + " t " + str(total_minutes) + " m"
48+
if total_days > 0:
49+
time_string = str(total_days) + " p " + str(total_hours) + "." + str(int(total_minutes/6)) + " t"
50+
51+
context['submissions'] = submissions
52+
context['game_count'] = str(len(run_times))
53+
context['unique_players'] = str(len(unique_players))
54+
context['total_run_time'] = time_string
55+
return context
56+
57+
58+
@plugin_pool.register_plugin
59+
class MySubmissionsPlugin(CMSPluginBase):
60+
name = 'My Submissions'
61+
model = MarathonPlugin
62+
render_template = 'marathon/plugins/my_submissions.html'
63+
cache = False
64+
65+
def render(self, context, instance, placeholder):
66+
context = super().render(context, instance, placeholder)
67+
if context['request'].user.is_authenticated:
68+
player = get_player_info_for_user(context['request'].user)
69+
else:
70+
player = {'id': -1}
71+
72+
if instance.event:
73+
submissions = Submission.objects.filter(event=instance.event, hidden=False, players__in=[player['id']])
74+
else:
75+
submissions = Submission.objects.filter(hidden=False, players__in=[player['id']])
76+
77+
event_duration = (instance.event.end - instance.event.start).days
78+
event_days = []
79+
for d in range(event_duration + 1):
80+
event_days.append(instance.event.start + datetime.timedelta(days=d))
81+
context['require_authentication'] = True
82+
context['event'] = instance.event
83+
context['event_days'] = event_days
2584
context['submissions'] = submissions
2685
return context
2786

@@ -37,18 +96,27 @@ def render(self, context, instance, placeholder):
3796
context = super().render(context, instance, placeholder)
3897

3998
previous_data = context['request'].session.get('previous_form')
99+
if context['request'].user.is_authenticated and not previous_data:
100+
player_info = get_player_info_for_user(context['request'].user)
101+
last_submit = Submission.objects.filter(event=instance.event, hidden=False, players__in=[player_info['id']]).last()
102+
if last_submit:
103+
form = SubmissionForm(initial={'time_constraints': last_submit.time_constraints})
104+
else:
105+
form = SubmissionForm()
106+
else:
107+
form = SubmissionForm(previous_data)
40108

41-
form = SubmissionForm(previous_data)
42109
if previous_data:
43110
player_form = PlayerForm(previous_data, prefix='player')
44111
elif context['request'].user.is_authenticated:
45-
print('got user')
46112
player_info = get_player_info_for_user(context['request'].user)
47113
player_form = PlayerForm(initial=player_info, prefix='player')
48114
if player_info.get('discord'):
49115
player_form.fields['discord'].widget.attrs['readonly'] = True
50116
else:
51117
player_form = PlayerForm(prefix='player')
118+
119+
52120
event_duration = (instance.event.end - instance.event.start).days
53121
event_days = []
54122
for d in range(event_duration + 1):

marathon/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ class Submission(models.Model):
7777
scoreboard_link = models.URLField(_('rankinglistalinkki'), blank=True)
7878

7979
# Extras
80-
time_constraints = models.TextField(_('aikataulurajoitteet'), blank=True, help_text=_('Mikäli sinulle kelpaavat ajat muuttuvat, voit korjata tiedot ilmoittautumisen päätyttyä.'))
80+
time_constraints = models.TextField(_('aikataulurajoitteet'), blank=True, help_text=_('Mikäli sinulle kelpaavat ajat muuttuvat, voit korjata tiedot ilmoittautumisen päätyttyä.'), default='')
8181
for_children = models.BooleanField(_('sopiva lapsille'), default=False,
8282
help_text=_('Runin sisältö ja selostus ovat lapsiyleisölle sopivia'))
8383
flashing_lights = models.BooleanField(_('sisältää nopeasti vilkkuvia valoja'), default=False)

marathon/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,6 @@
66
path('', views.active_event),
77
path('<slug:event>/', views.event_detail),
88
path('<slug:event>/submission/', views.new_submission, name='new-submission'),
9+
path('<slug:event>/edit/<slug:submission_id>', views.edit_submission, name='edit-submission'),
910
path('thanks', views.thanks),
1011
]

marathon/views.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1+
import datetime
2+
13
from django.contrib import messages
24
from django.http import Http404, HttpResponseRedirect
35
from django.shortcuts import render, get_object_or_404
46
from django.utils.translation import gettext_lazy as _
57

68
from .models import Event, Player, Submission
79
from .forms import SubmissionForm, PlayerForm
10+
from .utils import get_player_info_for_user
811

912

1013
def active_event(request):
@@ -49,5 +52,56 @@ def new_submission(request, event):
4952
return HttpResponseRedirect(request.GET.get('next', '/'))
5053
raise Http404('Tämmöstä ei oo')
5154

55+
56+
57+
def edit_submission(request, event, submission_id):
58+
if request.user.is_authenticated:
59+
player = get_player_info_for_user(request.user)
60+
else:
61+
return HttpResponseRedirect('/')
62+
event = get_object_or_404(Event, slug=event)
63+
submission = get_object_or_404(Submission, id=submission_id, event=event, hidden=False, players__in=[player['id']])
64+
65+
if request.method == 'POST':
66+
form = SubmissionForm(request.POST)
67+
68+
if form.is_valid():
69+
form = form.save(commit=False)
70+
submission.game_title = form.game_title
71+
submission.publish_year = form.publish_year
72+
submission.console = form.console
73+
submission.console_display = form.console_display
74+
submission.category = form.category
75+
submission.estimate = form.estimate
76+
submission.personal_best = form.personal_best
77+
submission.time_constraints = form.time_constraints
78+
submission.description = form.description
79+
submission.priority = form.priority
80+
submission.save()
81+
request.session['previous_form'] = None
82+
messages.add_message(request, messages.SUCCESS, _('Ilmoittautuminen onnistui!'))
83+
else:
84+
request.session['previous_form'] = request.POST
85+
messages.add_message(request, messages.ERROR, _('Ilmoittautuminen epäonnistui, tarkista lomake.'))
86+
return HttpResponseRedirect(request.GET.get('next', '/'))
87+
88+
if request.method == 'GET':
89+
90+
form = SubmissionForm(initial=vars(submission))
91+
event_duration = (event.end - event.start).days
92+
event_days = []
93+
for d in range(event_duration + 1):
94+
event_days.append(event.start + datetime.timedelta(days=d))
95+
96+
context = {
97+
'event': event,
98+
'event_days': event_days,
99+
'require_authentication': True,
100+
'form': form,
101+
'submission_id': submission_id,
102+
}
103+
return render(request, 'marathon/edit_submission.html', context)
104+
raise Http404('Tämmöstä ei oo')
105+
52106
def thanks(request):
53107
return

0 commit comments

Comments
 (0)