Podium added and working, logo and website of campuses added in campus model

This commit is contained in:
zero 2022-08-19 15:43:25 +02:00
parent 0f64c7579c
commit 891c2530e6
8 changed files with 154 additions and 53 deletions

View File

@ -0,0 +1,25 @@
# Generated by Django 3.2.11 on 2022-08-18 15:41
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('accounts', '0012_auto_20220801_2212'),
]
operations = [
migrations.AddField(
model_name='campus',
name='logo',
field=models.URLField(default='https://42.fr'),
preserve_default=False,
),
migrations.AddField(
model_name='campus',
name='url',
field=models.URLField(default='https://42.fr', max_length=100),
preserve_default=False,
),
]

View File

@ -0,0 +1,23 @@
# Generated by Django 3.2.11 on 2022-08-18 15:44
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('accounts', '0013_auto_20220818_1741'),
]
operations = [
migrations.AlterField(
model_name='campus',
name='logo',
field=models.URLField(blank=True),
),
migrations.AlterField(
model_name='campus',
name='url',
field=models.URLField(blank=True, max_length=100),
),
]

View File

@ -28,6 +28,8 @@ class UserProfileInfo(models.Model):
class Campus(models.Model):
id = models.IntegerField(primary_key=True, unique=True)
name = models.CharField(max_length=50)
url = models.URLField(max_length=100,blank=True)
logo = models.URLField(max_length=200,blank=True)
def __str__(self):
return self.name
class Meta:

View File

@ -2,9 +2,41 @@
{% load i18n %}
{% block content %}
<div class="row">
<div class="col-12 ctf-head">
<h1>{% trans "42Network Scoreboard" %}</h1>
</div>
<div class="col-12">
<div class="row justify-content-md-center justify-content-sm-center">
<div class="col-4 col-sm-3 col-md-2 podium podium-two text-center">
<img src="https://42lyon.fr/wp-content/uploads/2022/04/Artboard-1.svg" width="100%"/>
<h3>#2 : </h3>
<p>
Score : {{ top3.1.1 }}
<br>
{{ top3.1.0 }}
</p>
</div>
<div class="col-4 col-sm-3 col-md-2 podium podium-one text-center">
<img src="http://127.0.0.1:8000/static/img/42ctf_logo_big_no_bg_full_white.svg" width="100%"/>
<h3>#1 : </h3>
<p>
Score : {{ top3.0.1 }}
<br>
{{ top3.0.0 }}
</p>
</div>
<div class="col-4 col-sm-3 col-md-2 podium podium-three text-center">
<img src="https://42lyon.fr/wp-content/uploads/2022/04/Artboard-1.svg" width="100%"/>
<h3>#3 : </h3>
<p>
Score : {{ top3.2.1 }}
<br>
{{ top3.2.0 }}
</p>
</div>
</div>
</div>
<div class="col-12">
<div>
<h4>Scoreboard</h4>
<table class="table table-dark">
<thead>
<tr>
@ -15,15 +47,16 @@
</thead>
<tbody>
{% for name, score in scores.items %}
{% if forloop.counter0 > 2 %}
<tr>
<th scope="row"># {{ forloop.counter0|add:1 }}</th>
<th><a href="{% url 'scoreboard:campus' campus=name %}"> {{ name }}</a></th>
<td>{{ score}}</td>
</tr>
{% endif %}
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
{% endblock %}

View File

@ -4,10 +4,8 @@
{% load is_member %}
<div class="row">
<div class="col-12 ctf-head">
<h1>{% trans "Scoreboard" %}</h1>
<h1>{% trans "Global Scoreboard" %}</h1>
</div>
<div class="col-12">
<div>
<table class="table table-dark">
<thead>
<tr>
@ -41,6 +39,8 @@
{% endfor %}
</tbody>
</table>
<div class="col-12">
<div>
<div class="pagination">
<span class="step-links">

View File

@ -1,6 +1,7 @@
from django.shortcuts import render
from django.core.paginator import Paginator
from accounts.models import UserProfileInfo, Campus
import itertools
def scoreboard(request):
scores = UserProfileInfo.objects.filter(score__gt=0).select_related().order_by('-score', 'last_submission_date', 'user__username')
@ -19,12 +20,12 @@ def campus(request, campus):
def network(request):
campuses = Campus.objects.all()
scores = {}
for campus in campuses:
users = UserProfileInfo.objects.filter(score__gt=0, campus__name__exact=campus).select_related().order_by('-score', 'last_submission_date', 'user__username')[:10]
scores[campus] = sum([u.score for u in users])
sorted_scores = {k: v for k, v in sorted(scores.items(), key=lambda item: item[1], reverse=True)}
return render(request, 'scoreboard/network.html', {'scores':sorted_scores})
top3 = list(itertools.islice(sorted_scores.items(), 3))
return render(request, 'scoreboard/network.html', {'scores':sorted_scores, 'top3': top3})
# Create your views here.

View File

@ -313,3 +313,20 @@ footer {
color: #a9a9a9;
text-decoration: none;
}
.podium{
margin-top:80px;
margin-bottom:30px;
vertical-align: bottom;
}
.podium h3 {margin-top:-5%;}
.podium img{position:relative;top: -55px}
.podium-one{
background-color: #313131;
height: 25vh;}
.podium-two{
background-color: #252525;
height: 20vh;margin-top:auto;}
.podium-three{
background-color: #1a1a1a;
height: 15vh;margin-top:auto;}

View File

@ -65,7 +65,7 @@
{% trans "Scoreboard" %}
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="{% url 'scoreboard:main' %}">{% trans "Main" %}</a>
<a class="dropdown-item" href="{% url 'scoreboard:main' %}">{% trans "Global" %}</a>
<a class="dropdown-item" href="{% url 'scoreboard:network' %}">{% trans "42 Network" %}</a>
</div>
</li>