From 526e3c4eefd9ab83e34737a57fb800d2d08cec60 Mon Sep 17 00:00:00 2001 From: Georgios Atheridis Date: Mon, 23 Jan 2023 10:16:08 +0000 Subject: [PATCH] Added more options for admin to change Admin can choose different amount of ranks for every ranking timeline. Ranking timelines are now appended to the database, allowing for a ranking timeline history. Message is now sent under the form when sending a clip, rather than going to a new page. Staff now has admin access, not just super user. --- .../migrations/0012_resetdata_ranks.py | 18 +++++ core/manager/models.py | 1 + core/manager/request_clip.py | 3 +- .../templates/manager/clip_viewer.html | 9 ++- core/manager/templates/manager/final.html | 67 ++----------------- core/manager/templates/manager/index.html | 1 + core/manager/views.py | 29 +++++--- core/static/main.css | 33 +++++++-- core/templates/base.html | 6 +- 9 files changed, 79 insertions(+), 88 deletions(-) create mode 100644 core/manager/migrations/0012_resetdata_ranks.py diff --git a/core/manager/migrations/0012_resetdata_ranks.py b/core/manager/migrations/0012_resetdata_ranks.py new file mode 100644 index 0000000..a4c260f --- /dev/null +++ b/core/manager/migrations/0012_resetdata_ranks.py @@ -0,0 +1,18 @@ +# Generated by Django 4.1.5 on 2023-01-23 00:22 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("manager", "0011_clip_rank"), + ] + + operations = [ + migrations.AddField( + model_name="resetdata", + name="ranks", + field=models.IntegerField(default=5), + ), + ] diff --git a/core/manager/models.py b/core/manager/models.py index 9053f1a..0f86ccb 100644 --- a/core/manager/models.py +++ b/core/manager/models.py @@ -5,6 +5,7 @@ from django.contrib.auth.models import User class ResetData(models.Model): date_time = models.DateTimeField() max_clips = models.IntegerField(default=2) + ranks = models.IntegerField(default=5) class Clip(models.Model): diff --git a/core/manager/request_clip.py b/core/manager/request_clip.py index cd5f2ec..783ec8e 100644 --- a/core/manager/request_clip.py +++ b/core/manager/request_clip.py @@ -10,8 +10,9 @@ from django.contrib.auth.models import User def request_clip(user, clip: str): id = urlparse(clip).path.split("/")[-1] user = User.objects.get(id=user.id) - reset_data = ResetData.objects.first() + reset_data = ResetData.objects.latest('date_time') reset_time = reset_data.date_time + print(reset_time) max_clips = reset_data.max_clips if ( diff --git a/core/manager/templates/manager/clip_viewer.html b/core/manager/templates/manager/clip_viewer.html index 1cf3ffe..c15202b 100644 --- a/core/manager/templates/manager/clip_viewer.html +++ b/core/manager/templates/manager/clip_viewer.html @@ -5,16 +5,15 @@ src="https://clips.twitch.tv/embed?clip={{ video.id }}&parent=localhost" height="600" width="1000" + preload="auto" allowfullscreen>
{% csrf_token %} - - - - - + {% for i in ranks %} + + {% endfor %}
diff --git a/core/manager/templates/manager/final.html b/core/manager/templates/manager/final.html index 846ee33..fb23576 100644 --- a/core/manager/templates/manager/final.html +++ b/core/manager/templates/manager/final.html @@ -1,81 +1,24 @@ {% extends 'base.html' %} {% block content %} + {% for i in ranks %} - + {% for video in videos %} - {% if video.rank == 5 %} - - {% endif %} - {% endfor %} - - - - {% for video in videos %} - {% if video.rank == 4 %} - - {% endif %} - {% endfor %} - - - - {% for video in videos %} - {% if video.rank == 3 %} - - {% endif %} - {% endfor %} - - - - {% for video in videos %} - {% if video.rank == 2 %} - - {% endif %} - {% endfor %} - - - - {% for video in videos %} - {% if video.rank == 1 %} + {% if video.rank == i %} {% endif %} {% endfor %} + {% endfor %}
Rank 5Rank {{ i }} - -
Rank 4 - -
Rank 3 - -
Rank 2 - -
Rank 1
{% endblock %} diff --git a/core/manager/templates/manager/index.html b/core/manager/templates/manager/index.html index 6d51191..6ffeaf2 100644 --- a/core/manager/templates/manager/index.html +++ b/core/manager/templates/manager/index.html @@ -8,6 +8,7 @@ + {{ message }} {% else %}

Welcome Friend, please log in

{% endif %} diff --git a/core/manager/views.py b/core/manager/views.py index 12aa9ad..0835f80 100644 --- a/core/manager/views.py +++ b/core/manager/views.py @@ -11,8 +11,9 @@ from .models import Clip, ResetData @staff_member_required def show_clips(request, id): - reset_data = ResetData.objects.first() + reset_data = ResetData.objects.latest('date_time') reset_time = reset_data.date_time + print(reset_time) try: video = Clip.objects.filter(date_added__gt=reset_time)[id - 1] except IndexError: @@ -27,15 +28,18 @@ def show_clips(request, id): return redirect(show_clips, id=id + 1) return render(request, "manager/clip_viewer.html", context={ "video": video, + "ranks": range(reset_data.ranks, 0, -1), }) @staff_member_required def final_ranking(request): - reset_data = ResetData.objects.first() + reset_data = ResetData.objects.latest('date_time') reset_time = reset_data.date_time + print(reset_time) return render(request, "manager/final.html", context={ "videos": Clip.objects.filter(date_added__gt=reset_time), + "ranks": range(reset_data.ranks, 0, -1), }) @@ -48,18 +52,23 @@ def get_name(request): if form.is_valid(): try: request_clip(user=request.user, clip=form.cleaned_data["clip"]) - except ValidationError as e: - print(e) - return HttpResponse(b"

Clip already exists

") + except ValidationError: + message = "Sorry, clip already exists. Please send another clip." + return render(request, "manager/index.html", {"message": message}) + # return HttpResponse(b"

Clip already exists

") except TooManyClips: - return HttpResponse(b"

You have submitted the maximum number of clips

") - except Exception as e: - print(e) - return HttpResponse(b"

NOPE

") + message = "Sorry, you have already reached the clip limit." + return render(request, "manager/index.html", {"message": message}) + # return HttpResponse(b"

You have submitted the maximum number of clips

") + except Exception: + message = "Something went wrong." + return render(request, "manager/index.html", {"message": message}) + # return HttpResponse(b"

NOPE

") # process the data in form.cleaned_data as required # ... # redirect to a new URL: - return HttpResponse(b"

THANKS

") + message = "Thank you for submitting a clip." + return render(request, "manager/index.html", {"message": message}) # return HttpResponseRedirect("/thanks/") else: print("invalid") diff --git a/core/static/main.css b/core/static/main.css index 4ca4565..bfd3b23 100644 --- a/core/static/main.css +++ b/core/static/main.css @@ -97,6 +97,13 @@ a:active.btn { #buttons { padding-top: 2rem; + width: 1000px; +} + +#buttons form { + width: 100%; + display: flex; + justify-content: space-between; } .rank-btn { @@ -110,33 +117,45 @@ a:active.btn { cursor: pointer; } +.rank-btn.r8 { + background-color: #9BED72; +} + +.rank-btn.r7 { + background-color: #72ED73; +} + +.rank-btn.r6 { + background-color: #72ED9D; +} + .rank-btn.r5 { - background-color: #4CAF50; + background-color: #72EDC8; } .rank-btn.r4 { - background-color: #8CAF50; + background-color: #72E8ED; } .rank-btn.r3 { - background-color: #FCAF50; + background-color: #72BEED; } .rank-btn.r2 { - background-color: #FFAFF0; + background-color: #7294ED; } .rank-btn.r1 { - background-color: #FC0F50; + background-color: #7A72ED; } .rank-btn:hover { - background-color: #EEEEEE; + background-color: #EAFCFA; } .rank-btn:active { - background-color: #111111; + background-color: #84EEE0; color: #DDD; } diff --git a/core/templates/base.html b/core/templates/base.html index d786b03..e8cbf7e 100644 --- a/core/templates/base.html +++ b/core/templates/base.html @@ -15,13 +15,13 @@
Home - {% if user.is_superuser %} + {% if user.is_staff %} Rank {% endif %} - {% if user.is_superuser %} + {% if user.is_staff %} Admin {% endif %} - {% if user.is_superuser %} + {% if user.is_staff %} Results {% endif %} {% if user.is_authenticated %} -- 2.30.2