Page with popular and hard test. Icons in side menu

This commit is contained in:
Piotr Kopycki 2022-05-15 16:01:52 +02:00
parent f6445a18e4
commit c19d81a92c
15 changed files with 353 additions and 33 deletions

View File

@ -56,6 +56,7 @@ INSTALLED_APPS = [
"django_extensions", "django_extensions",
"django_social_share", "django_social_share",
'fontawesomefree', 'fontawesomefree',
"jquery",
"users", "users",
"trials", "trials",

View File

@ -16,12 +16,14 @@ Including another URLconf
from django.contrib import admin from django.contrib import admin
from django.urls import include from django.urls import include
from django.urls import path from django.urls import path
from .views import home, welcome, help from .views import home, welcome, help, hard, popular
from django.contrib.staticfiles.urls import staticfiles_urlpatterns from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns = [ urlpatterns = [
path('', welcome, name='welcome'), path('', welcome, name='welcome'),
path('home', home, name='home'), path('home', home, name='home'),
path('popular', popular, name='popular'),
path('hard', hard, name='hard'),
path('help', help, name='help'), path('help', help, name='help'),
path('users/', include("users.urls")), path('users/', include("users.urls")),
path('questions/', include("questions.urls")), path('questions/', include("questions.urls")),

View File

@ -2,6 +2,7 @@ from django.shortcuts import render, redirect
from django.template import loader from django.template import loader
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from trials.models import Test from trials.models import Test
import operator
@login_required @login_required
@ -18,6 +19,20 @@ def home(request):
def help(request): def help(request):
return render(request, 'help.html', ) return render(request, 'help.html', )
@login_required
def popular(request):
context = {}
context['tests'] = Test.objects.filter(avg_rating__gt=0)
context['tests'] = sorted(context['tests'], key=operator.attrgetter('avg_rating'), reverse=True)
return render(request, 'popular.html', context)
@login_required
def hard(request):
context = {}
context['tests'] = Test.objects.filter(difficulty_label__gt=0)
context['tests'] = sorted(context['tests'], key=operator.attrgetter('difficulty_label'), reverse=True)
return render(request, 'hard.html', context)
def welcome(request): def welcome(request):
return render(request, 'welcome.html') return render(request, 'welcome.html')

21
static/script.js Normal file
View File

@ -0,0 +1,21 @@
//$(function() {
// $(".newQuestionSection" ).draggable().resizable();
//} );
var questionId = 1;
$('.addQuestionButton').click(function(){
console.log("REEEEEEEE")
// Clone extra box, and remove duplicate ids
let clone = $("#question-copy").clone().removeAttr("hidden");
clone.id = "question"- + ++questionId;
//clone.find("*").removeAttr("id");
clone.find("*").each(function() {
$(this).attr("id", "q" + questionId + "-" + $(this).attr("id"));
});
clone.find("input:radio").each(function() {
$(this).attr("name", questionId);
});
// append it to div
$('#canvas').append(clone);
});

View File

@ -1,6 +1,6 @@
.sidenav { .sidenav {
height: 100%; height: 100%;
width: 195px; width: 215px;
position: fixed; position: fixed;
z-index: 1; z-index: 1;
top: 0; top: 0;
@ -44,7 +44,7 @@
} }
.main { .main {
margin-left: 190px; margin-left: 215px;
padding: 0px 40px; padding: 0px 40px;
} }
@ -515,6 +515,23 @@ background-color:#FF0B7E
width: 500px; width: 500px;
} }
.newQuestionSection {
border-radius: 25px;
border: 2px solid #FF0B7E;
padding: 20px;
width: 750px;
height: 350px;
}
.questionSectionLabelText {
font-weight: bold;
font-size: 16px;
padding-bottom: 20px;
}
.addQuestionButton {
}
.editContainer { .editContainer {
overflow: scroll; overflow: scroll;
} }

View File

@ -16,11 +16,14 @@
<body> <body>
<div class="sidenav"> <div class="sidenav">
<a href="{% url 'home' %}">Strona główna</a> <a href="{% url 'home' %}"><i class="fa-solid fa-house"></i> Strona główna</a>
<a href="{% url 'newTest' %}">Stwórz test</a> <a href="{% url 'popular' %}"><i class="fa-solid fa-star"></i> Popularne </a>
<a href="{% url 'myTests' %}">Twoje testy</a> <a href="{% url 'hard' %}"><i class="fa-solid fa-fire-flame-curved"></i> Trudne </a>
<a href="{% url 'solvedTests' %}">Wyniki testów</a> <a href="{% url 'home' %}"><i class="fa-solid fa-trophy"></i> Turnieje </a>
<a href="{% url 'help' %}">Pomoc</a> <br>
<a href="{% url 'newTest' %}"><i class="fa-solid fa-circle-plus"></i> Stwórz test</a>
<a href="{% url 'myTests' %}"><i class="fa-solid fa-note-sticky"></i> Twoje testy</a>
<a href="{% url 'solvedTests' %}"><i class="fa-solid fa-square-poll-horizontal"></i> Wyniki testów</a>
<p>Kategorie</p> <p>Kategorie</p>
<a href="/category/JezykPolski">Język polski</a> <a href="/category/JezykPolski">Język polski</a>
<a href="/category/JezykAngielski">Język angielski</a> <a href="/category/JezykAngielski">Język angielski</a>
@ -34,13 +37,16 @@
<a href="/category/Historia">Historia</a> <a href="/category/Historia">Historia</a>
<a href="/category/Inne">Inne</a> <a href="/category/Inne">Inne</a>
<p>Konto</p> <p>Konto</p>
<a href="/users/account">Ustawienia</a> <a href="/users/account"><i class="fa-solid fa-gear"></i> Ustawienia</a>
<a href="/users/logout">Wyloguj</a> <a href="{% url 'help' %}"><i class="fa-solid fa-circle-question"></i> Pomoc</a>
<a href="/users/logout"><i class="fa-solid fa-right-from-bracket"></i> Wyloguj</a>
</div> </div>
<div id="content", name="content", class="main"> <div id="content", name="content", class="main">
{% block content %} <div class="mainContainer">
{% endblock %} {% block content %}
{% endblock %}
</div>
</div> </div>
</body> </body>

View File

@ -32,31 +32,31 @@
<div class="mainTestMetaLineLabels"> <div class="mainTestMetaLineLabels">
<div class="mainTestMetaLabels"> <div class="mainTestMetaLabels">
Trudność: Trudność:
{% if test.avg_difficulty == 0.0 %} {% if test.difficulty_label == 0 %}
<span class="fa-solid fa-fire-flame-curved" title="Brak - za mało osób rozwiązało ten test"></span> <span class="fa-solid fa-fire-flame-curved" title="Brak - za mało osób rozwiązało ten test"></span>
<span class="fa-solid fa-fire-flame-curved" title="Brak - za mało osób rozwiązało ten test"></span> <span class="fa-solid fa-fire-flame-curved" title="Brak - za mało osób rozwiązało ten test"></span>
<span class="fa-solid fa-fire-flame-curved" title="Brak - za mało osób rozwiązało ten test"></span> <span class="fa-solid fa-fire-flame-curved" title="Brak - za mało osób rozwiązało ten test"></span>
<span class="fa-solid fa-fire-flame-curved" title="Brak - za mało osób rozwiązało ten test"></span> <span class="fa-solid fa-fire-flame-curved" title="Brak - za mało osób rozwiązało ten test"></span>
<span class="fa-solid fa-fire-flame-curved" title="Brak - za mało osób rozwiązało ten test"></span> <span class="fa-solid fa-fire-flame-curved" title="Brak - za mało osób rozwiązało ten test"></span>
{% elif test.avg_difficulty < 20.0 %} {% elif test.difficulty_label == 1 %}
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Bardzo trudny test, średni wynik użytkowników poniżej 20%"></span> <span class="fa-solid fa-fire-flame-curved fireChecked" title="Bardzo trudny test, średni wynik użytkowników poniżej 20%"></span>
<span class="fa-solid fa-fire-flame-curved" title="Bardzo trudny test, średni wynik użytkowników poniżej 20%">></span> <span class="fa-solid fa-fire-flame-curved" title="Bardzo trudny test, średni wynik użytkowników poniżej 20%">></span>
<span class="fa-solid fa-fire-flame-curved" title="Bardzo trudny test, średni wynik użytkowników poniżej 20%">></span> <span class="fa-solid fa-fire-flame-curved" title="Bardzo trudny test, średni wynik użytkowników poniżej 20%">></span>
<span class="fa-solid fa-fire-flame-curved" title="Bardzo trudny test, średni wynik użytkowników poniżej 20%">></span> <span class="fa-solid fa-fire-flame-curved" title="Bardzo trudny test, średni wynik użytkowników poniżej 20%">></span>
<span class="fa-solid fa-fire-flame-curved" title="Bardzo trudny test, średni wynik użytkowników poniżej 20%">></span> <span class="fa-solid fa-fire-flame-curved" title="Bardzo trudny test, średni wynik użytkowników poniżej 20%">></span>
{% elif test.avg_difficulty < 40.0 %} {% elif test.difficulty_label == 2 %}
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Trudny test, średni wynik użytkowników nie przekracza 40%"></span> <span class="fa-solid fa-fire-flame-curved fireChecked" title="Trudny test, średni wynik użytkowników nie przekracza 40%"></span>
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Trudny test, średni wynik użytkowników nie przekracza 40%"></span> <span class="fa-solid fa-fire-flame-curved fireChecked" title="Trudny test, średni wynik użytkowników nie przekracza 40%"></span>
<span class="fa-solid fa-fire-flame-curved" title="Trudny test, średni wynik użytkowników nie przekracza 40%"></span> <span class="fa-solid fa-fire-flame-curved" title="Trudny test, średni wynik użytkowników nie przekracza 40%"></span>
<span class="fa-solid fa-fire-flame-curved" title="Trudny test, średni wynik użytkowników nie przekracza 40%"></span> <span class="fa-solid fa-fire-flame-curved" title="Trudny test, średni wynik użytkowników nie przekracza 40%"></span>
<span class="fa-solid fa-fire-flame-curved" title="Trudny test, średni wynik użytkowników nie przekracza 40%"></span> <span class="fa-solid fa-fire-flame-curved" title="Trudny test, średni wynik użytkowników nie przekracza 40%"></span>
{% elif test.avg_difficulty < 60.0 %} {% elif test.difficulty_label == 3 %}
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Przeciętny test, średni wynik użytkowników nie przekracza 60%"></span> <span class="fa-solid fa-fire-flame-curved fireChecked" title="Przeciętny test, średni wynik użytkowników nie przekracza 60%"></span>
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Przeciętny test, średni wynik użytkowników nie przekracza 60%"></span> <span class="fa-solid fa-fire-flame-curved fireChecked" title="Przeciętny test, średni wynik użytkowników nie przekracza 60%"></span>
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Przeciętny test, średni wynik użytkowników nie przekracza 60%"></span> <span class="fa-solid fa-fire-flame-curved fireChecked" title="Przeciętny test, średni wynik użytkowników nie przekracza 60%"></span>
<span class="fa-solid fa-fire-flame-curved" title="Przeciętny test, średni wynik użytkowników nie przekracza 60%"></span> <span class="fa-solid fa-fire-flame-curved" title="Przeciętny test, średni wynik użytkowników nie przekracza 60%"></span>
<span class="fa-solid fa-fire-flame-curved" title="Przeciętny test, średni wynik użytkowników nie przekracza 60%"></span> <span class="fa-solid fa-fire-flame-curved" title="Przeciętny test, średni wynik użytkowników nie przekracza 60%"></span>
{% elif test.avg_difficulty < 80.0 %} {% elif test.difficulty_label == 4 %}
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Łatwy test, średni wynik użytkowników nie przekracza 80%"></span> <span class="fa-solid fa-fire-flame-curved fireChecked" title="Łatwy test, średni wynik użytkowników nie przekracza 80%"></span>
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Łatwy test, średni wynik użytkowników nie przekracza 80%"></span> <span class="fa-solid fa-fire-flame-curved fireChecked" title="Łatwy test, średni wynik użytkowników nie przekracza 80%"></span>
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Łatwy test, średni wynik użytkowników nie przekracza 80%"></span> <span class="fa-solid fa-fire-flame-curved fireChecked" title="Łatwy test, średni wynik użytkowników nie przekracza 80%"></span>

View File

@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>$Title$</title>
</head>
<body>
$END$
</body>
</html>

118
templates/hard.html Normal file
View File

@ -0,0 +1,118 @@
{% extends "base.html" %}
{% block title %}Główna{% endblock %}
{% block content %}
<h1>Najtrudniejsze testy:</h1>
{% for test in tests %}
<div class="mainTestContainer">
<div class="mainTestName">
{{test.name}}
{% if test.password != "" %}
<i class="fa-solid fa-lock locked" title="Test chroniony hasłem"></i>
{% endif %}
</div>
<div class="mainTestMeta">
<div class="mainTestMetaLine">
<div class="mainTestMetaInfoText">Kategoria: {{test.category}}</div>
<div class="mainTestMetaInfoText">Autor: {{test.get_author_name}}</div>
<div class="mainTestMetaInfoText">Rozwiązania: {{test.completions}}</div>
</div>
<div class="mainTestMetaLine">
<div class="mainTestMetaInfoText">Próg zaliczenia: {{test.passing_score}}</div>
<div class="mainTestMetaInfoText">Maksymalna ilość punktów: {{test.get_maxscore}}</div>
<div class="mainTestMetaInfoText">Ilość pytań: {{test.question_count}}</div>
</div>
<div class="mainTestMetaLineLabels">
<div class="mainTestMetaLabels">
Trudność:
{% if test.difficulty_label == 0 %}
<span class="fa-solid fa-fire-flame-curved" title="Brak - za mało osób rozwiązało ten test"></span>
<span class="fa-solid fa-fire-flame-curved" title="Brak - za mało osób rozwiązało ten test"></span>
<span class="fa-solid fa-fire-flame-curved" title="Brak - za mało osób rozwiązało ten test"></span>
<span class="fa-solid fa-fire-flame-curved" title="Brak - za mało osób rozwiązało ten test"></span>
<span class="fa-solid fa-fire-flame-curved" title="Brak - za mało osób rozwiązało ten test"></span>
{% elif test.difficulty_label == 1 %}
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Bardzo trudny test, średni wynik użytkowników poniżej 20%"></span>
<span class="fa-solid fa-fire-flame-curved" title="Bardzo trudny test, średni wynik użytkowników poniżej 20%">></span>
<span class="fa-solid fa-fire-flame-curved" title="Bardzo trudny test, średni wynik użytkowników poniżej 20%">></span>
<span class="fa-solid fa-fire-flame-curved" title="Bardzo trudny test, średni wynik użytkowników poniżej 20%">></span>
<span class="fa-solid fa-fire-flame-curved" title="Bardzo trudny test, średni wynik użytkowników poniżej 20%">></span>
{% elif test.difficulty_label == 2 %}
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Trudny test, średni wynik użytkowników nie przekracza 40%"></span>
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Trudny test, średni wynik użytkowników nie przekracza 40%"></span>
<span class="fa-solid fa-fire-flame-curved" title="Trudny test, średni wynik użytkowników nie przekracza 40%"></span>
<span class="fa-solid fa-fire-flame-curved" title="Trudny test, średni wynik użytkowników nie przekracza 40%"></span>
<span class="fa-solid fa-fire-flame-curved" title="Trudny test, średni wynik użytkowników nie przekracza 40%"></span>
{% elif test.difficulty_label == 3 %}
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Przeciętny test, średni wynik użytkowników nie przekracza 60%"></span>
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Przeciętny test, średni wynik użytkowników nie przekracza 60%"></span>
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Przeciętny test, średni wynik użytkowników nie przekracza 60%"></span>
<span class="fa-solid fa-fire-flame-curved" title="Przeciętny test, średni wynik użytkowników nie przekracza 60%"></span>
<span class="fa-solid fa-fire-flame-curved" title="Przeciętny test, średni wynik użytkowników nie przekracza 60%"></span>
{% elif test.difficulty_label == 4 %}
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Łatwy test, średni wynik użytkowników nie przekracza 80%"></span>
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Łatwy test, średni wynik użytkowników nie przekracza 80%"></span>
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Łatwy test, średni wynik użytkowników nie przekracza 80%"></span>
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Łatwy test, średni wynik użytkowników nie przekracza 80%"></span>
<span class="fa-solid fa-fire-flame-curved" title="Łatwy test, średni wynik użytkowników nie przekracza 80%"></span>
{% else %}
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Banalny test, średni wynik użytkowników powyżej 80%"></span>
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Banalny test, średni wynik użytkowników powyżej 80%"></span>
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Banalny test, średni wynik użytkowników powyżej 80%"></span>
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Banalny test, średni wynik użytkowników powyżej 80%"></span>
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Banalny test, średni wynik użytkowników powyżej 80%"></span>
{% endif %}
</div>
<div class="mainTestMetaLabels">
Ocena:
{% if test.avg_rating == 0 %}
<span class="fa fa-star" title="Użytkownicy jeszcze nie ocenili tego testu, bądź pierwszy"></span>
<span class="fa fa-star" title="Użytkownicy jeszcze nie ocenili tego testu, bądź pierwszy"></span>
<span class="fa fa-star" title="Użytkownicy jeszcze nie ocenili tego testu, bądź pierwszy"></span>
<span class="fa fa-star" title="Użytkownicy jeszcze nie ocenili tego testu, bądź pierwszy"></span>
<span class="fa fa-star" title="Użytkownicy jeszcze nie ocenili tego testu, bądź pierwszy"></span>
{% elif test.avg_rating == 1 %}
<span class="fa fa-star starChecked" title="Użytkownicy ocenili ten test jako tragiczny"></span>
<span class="fa fa-star" title="Użytkownicy ocenili ten test jako tragiczny"></span>
<span class="fa fa-star" title="Użytkownicy ocenili ten test jako tragiczny"></span>
<span class="fa fa-star" title="Użytkownicy ocenili ten test jako tragiczny"></span>
<span class="fa fa-star" title="Użytkownicy ocenili ten test jako tragiczny"></span>
{% elif test.avg_rating == 2 %}
<span class="fa fa-star starChecked" title="Użytkownicy ocenili ten test jako słaby"></span>
<span class="fa fa-star starChecked" title="Użytkownicy ocenili ten test jako słaby"></span>
<span class="fa fa-star" title="Użytkownicy ocenili ten test jako słaby"></span>
<span class="fa fa-star" title="Użytkownicy ocenili ten test jako słaby"></span>
<span class="fa fa-star" title="Użytkownicy ocenili ten test jako słaby"></span>
{% elif test.avg_rating == 3 %}
<span class="fa fa-star starChecked" title="Użytkownicy ocenili ten test jako przeciętny"></span>
<span class="fa fa-star starChecked" title="Użytkownicy ocenili ten test jako przeciętny"></span>
<span class="fa fa-star starChecked" title="Użytkownicy ocenili ten test jako przeciętny"></span>
<span class="fa fa-star" title="Użytkownicy ocenili ten test jako przeciętny"></span>
<span class="fa fa-star" title="Użytkownicy ocenili ten test jako przeciętny"></span>
{% elif test.avg_rating == 4 %}
<span class="fa fa-star starChecked" title="Użytkownicy ocenili ten test jako dobry"></span>
<span class="fa fa-star starChecked" title="Użytkownicy ocenili ten test jako dobry"></span>
<span class="fa fa-star starChecked" title="Użytkownicy ocenili ten test jako dobry"></span>
<span class="fa fa-star starChecked" title="Użytkownicy ocenili ten test jako dobry"></span>
<span class="fa fa-star"></span>
{% else %}
<span class="fa fa-star starChecked" title="Użytkownicy ocenili ten test jako genialny"></span>
<span class="fa fa-star starChecked" title="Użytkownicy ocenili ten test jako genialny"></span>
<span class="fa fa-star starChecked" title="Użytkownicy ocenili ten test jako genialny"></span>
<span class="fa fa-star starChecked" title="Użytkownicy ocenili ten test jako genialny"></span>
<span class="fa fa-star starChecked" title="Użytkownicy ocenili ten test jako genialny"></span>
{% endif %}
(Głosy: {{test.rates_amount}})
</div>
</div>
</div>
<!-- <div class="mainTestDesc">-->
<!-- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus volutpat scelerisque tortor, id sodales leo finibus id. Vivamus id viverra nunc, ac faucibus metus. Nulla a mauris imperdiet sapien lobortis dapibus. Quisque ornare posuere pulvinar.-->
<!-- </div>-->
<button><a href="/tests/{{test.id}}/password">Rozwiąż</a></button>
</div>
<br>
{% endfor %}
{% endblock %}

View File

@ -3,7 +3,7 @@
{% block title %}Główna{% endblock %} {% block title %}Główna{% endblock %}
{% block content %} {% block content %}
<h1>Rozwiąż jakiś test!</h1> <h1>Najnowsze testy:</h1>
{% for test in tests %} {% for test in tests %}
<div class="mainTestContainer"> <div class="mainTestContainer">
<div class="mainTestName"> <div class="mainTestName">
@ -26,31 +26,31 @@
<div class="mainTestMetaLineLabels"> <div class="mainTestMetaLineLabels">
<div class="mainTestMetaLabels"> <div class="mainTestMetaLabels">
Trudność: Trudność:
{% if test.avg_difficulty == 0.0 %} {% if test.difficulty_label == 0 %}
<span class="fa-solid fa-fire-flame-curved" title="Brak - za mało osób rozwiązało ten test"></span> <span class="fa-solid fa-fire-flame-curved" title="Brak - za mało osób rozwiązało ten test"></span>
<span class="fa-solid fa-fire-flame-curved" title="Brak - za mało osób rozwiązało ten test"></span> <span class="fa-solid fa-fire-flame-curved" title="Brak - za mało osób rozwiązało ten test"></span>
<span class="fa-solid fa-fire-flame-curved" title="Brak - za mało osób rozwiązało ten test"></span> <span class="fa-solid fa-fire-flame-curved" title="Brak - za mało osób rozwiązało ten test"></span>
<span class="fa-solid fa-fire-flame-curved" title="Brak - za mało osób rozwiązało ten test"></span> <span class="fa-solid fa-fire-flame-curved" title="Brak - za mało osób rozwiązało ten test"></span>
<span class="fa-solid fa-fire-flame-curved" title="Brak - za mało osób rozwiązało ten test"></span> <span class="fa-solid fa-fire-flame-curved" title="Brak - za mało osób rozwiązało ten test"></span>
{% elif test.avg_difficulty < 20.0 %} {% elif test.difficulty_label == 1 %}
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Bardzo trudny test, średni wynik użytkowników poniżej 20%"></span> <span class="fa-solid fa-fire-flame-curved fireChecked" title="Bardzo trudny test, średni wynik użytkowników poniżej 20%"></span>
<span class="fa-solid fa-fire-flame-curved" title="Bardzo trudny test, średni wynik użytkowników poniżej 20%">></span> <span class="fa-solid fa-fire-flame-curved" title="Bardzo trudny test, średni wynik użytkowników poniżej 20%">></span>
<span class="fa-solid fa-fire-flame-curved" title="Bardzo trudny test, średni wynik użytkowników poniżej 20%">></span> <span class="fa-solid fa-fire-flame-curved" title="Bardzo trudny test, średni wynik użytkowników poniżej 20%">></span>
<span class="fa-solid fa-fire-flame-curved" title="Bardzo trudny test, średni wynik użytkowników poniżej 20%">></span> <span class="fa-solid fa-fire-flame-curved" title="Bardzo trudny test, średni wynik użytkowników poniżej 20%">></span>
<span class="fa-solid fa-fire-flame-curved" title="Bardzo trudny test, średni wynik użytkowników poniżej 20%">></span> <span class="fa-solid fa-fire-flame-curved" title="Bardzo trudny test, średni wynik użytkowników poniżej 20%">></span>
{% elif test.avg_difficulty < 40.0 %} {% elif test.difficulty_label == 2 %}
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Trudny test, średni wynik użytkowników nie przekracza 40%"></span> <span class="fa-solid fa-fire-flame-curved fireChecked" title="Trudny test, średni wynik użytkowników nie przekracza 40%"></span>
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Trudny test, średni wynik użytkowników nie przekracza 40%"></span> <span class="fa-solid fa-fire-flame-curved fireChecked" title="Trudny test, średni wynik użytkowników nie przekracza 40%"></span>
<span class="fa-solid fa-fire-flame-curved" title="Trudny test, średni wynik użytkowników nie przekracza 40%"></span> <span class="fa-solid fa-fire-flame-curved" title="Trudny test, średni wynik użytkowników nie przekracza 40%"></span>
<span class="fa-solid fa-fire-flame-curved" title="Trudny test, średni wynik użytkowników nie przekracza 40%"></span> <span class="fa-solid fa-fire-flame-curved" title="Trudny test, średni wynik użytkowników nie przekracza 40%"></span>
<span class="fa-solid fa-fire-flame-curved" title="Trudny test, średni wynik użytkowników nie przekracza 40%"></span> <span class="fa-solid fa-fire-flame-curved" title="Trudny test, średni wynik użytkowników nie przekracza 40%"></span>
{% elif test.avg_difficulty < 60.0 %} {% elif test.difficulty_label == 3 %}
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Przeciętny test, średni wynik użytkowników nie przekracza 60%"></span> <span class="fa-solid fa-fire-flame-curved fireChecked" title="Przeciętny test, średni wynik użytkowników nie przekracza 60%"></span>
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Przeciętny test, średni wynik użytkowników nie przekracza 60%"></span> <span class="fa-solid fa-fire-flame-curved fireChecked" title="Przeciętny test, średni wynik użytkowników nie przekracza 60%"></span>
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Przeciętny test, średni wynik użytkowników nie przekracza 60%"></span> <span class="fa-solid fa-fire-flame-curved fireChecked" title="Przeciętny test, średni wynik użytkowników nie przekracza 60%"></span>
<span class="fa-solid fa-fire-flame-curved" title="Przeciętny test, średni wynik użytkowników nie przekracza 60%"></span> <span class="fa-solid fa-fire-flame-curved" title="Przeciętny test, średni wynik użytkowników nie przekracza 60%"></span>
<span class="fa-solid fa-fire-flame-curved" title="Przeciętny test, średni wynik użytkowników nie przekracza 60%"></span> <span class="fa-solid fa-fire-flame-curved" title="Przeciętny test, średni wynik użytkowników nie przekracza 60%"></span>
{% elif test.avg_difficulty < 80.0 %} {% elif test.difficulty_label == 4 %}
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Łatwy test, średni wynik użytkowników nie przekracza 80%"></span> <span class="fa-solid fa-fire-flame-curved fireChecked" title="Łatwy test, średni wynik użytkowników nie przekracza 80%"></span>
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Łatwy test, średni wynik użytkowników nie przekracza 80%"></span> <span class="fa-solid fa-fire-flame-curved fireChecked" title="Łatwy test, średni wynik użytkowników nie przekracza 80%"></span>
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Łatwy test, średni wynik użytkowników nie przekracza 80%"></span> <span class="fa-solid fa-fire-flame-curved fireChecked" title="Łatwy test, średni wynik użytkowników nie przekracza 80%"></span>

118
templates/popular.html Normal file
View File

@ -0,0 +1,118 @@
{% extends "base.html" %}
{% block title %}Główna{% endblock %}
{% block content %}
<h1>Najpopularniejsze testy:</h1>
{% for test in tests %}
<div class="mainTestContainer">
<div class="mainTestName">
{{test.name}}
{% if test.password != "" %}
<i class="fa-solid fa-lock locked" title="Test chroniony hasłem"></i>
{% endif %}
</div>
<div class="mainTestMeta">
<div class="mainTestMetaLine">
<div class="mainTestMetaInfoText">Kategoria: {{test.category}}</div>
<div class="mainTestMetaInfoText">Autor: {{test.get_author_name}}</div>
<div class="mainTestMetaInfoText">Rozwiązania: {{test.completions}}</div>
</div>
<div class="mainTestMetaLine">
<div class="mainTestMetaInfoText">Próg zaliczenia: {{test.passing_score}}</div>
<div class="mainTestMetaInfoText">Maksymalna ilość punktów: {{test.get_maxscore}}</div>
<div class="mainTestMetaInfoText">Ilość pytań: {{test.question_count}}</div>
</div>
<div class="mainTestMetaLineLabels">
<div class="mainTestMetaLabels">
Trudność:
{% if test.difficulty_label == 0 %}
<span class="fa-solid fa-fire-flame-curved" title="Brak - za mało osób rozwiązało ten test"></span>
<span class="fa-solid fa-fire-flame-curved" title="Brak - za mało osób rozwiązało ten test"></span>
<span class="fa-solid fa-fire-flame-curved" title="Brak - za mało osób rozwiązało ten test"></span>
<span class="fa-solid fa-fire-flame-curved" title="Brak - za mało osób rozwiązało ten test"></span>
<span class="fa-solid fa-fire-flame-curved" title="Brak - za mało osób rozwiązało ten test"></span>
{% elif test.difficulty_label == 1 %}
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Bardzo trudny test, średni wynik użytkowników poniżej 20%"></span>
<span class="fa-solid fa-fire-flame-curved" title="Bardzo trudny test, średni wynik użytkowników poniżej 20%">></span>
<span class="fa-solid fa-fire-flame-curved" title="Bardzo trudny test, średni wynik użytkowników poniżej 20%">></span>
<span class="fa-solid fa-fire-flame-curved" title="Bardzo trudny test, średni wynik użytkowników poniżej 20%">></span>
<span class="fa-solid fa-fire-flame-curved" title="Bardzo trudny test, średni wynik użytkowników poniżej 20%">></span>
{% elif test.difficulty_label == 2 %}
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Trudny test, średni wynik użytkowników nie przekracza 40%"></span>
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Trudny test, średni wynik użytkowników nie przekracza 40%"></span>
<span class="fa-solid fa-fire-flame-curved" title="Trudny test, średni wynik użytkowników nie przekracza 40%"></span>
<span class="fa-solid fa-fire-flame-curved" title="Trudny test, średni wynik użytkowników nie przekracza 40%"></span>
<span class="fa-solid fa-fire-flame-curved" title="Trudny test, średni wynik użytkowników nie przekracza 40%"></span>
{% elif test.difficulty_label == 3 %}
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Przeciętny test, średni wynik użytkowników nie przekracza 60%"></span>
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Przeciętny test, średni wynik użytkowników nie przekracza 60%"></span>
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Przeciętny test, średni wynik użytkowników nie przekracza 60%"></span>
<span class="fa-solid fa-fire-flame-curved" title="Przeciętny test, średni wynik użytkowników nie przekracza 60%"></span>
<span class="fa-solid fa-fire-flame-curved" title="Przeciętny test, średni wynik użytkowników nie przekracza 60%"></span>
{% elif test.difficulty_label == 4 %}
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Łatwy test, średni wynik użytkowników nie przekracza 80%"></span>
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Łatwy test, średni wynik użytkowników nie przekracza 80%"></span>
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Łatwy test, średni wynik użytkowników nie przekracza 80%"></span>
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Łatwy test, średni wynik użytkowników nie przekracza 80%"></span>
<span class="fa-solid fa-fire-flame-curved" title="Łatwy test, średni wynik użytkowników nie przekracza 80%"></span>
{% else %}
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Banalny test, średni wynik użytkowników powyżej 80%"></span>
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Banalny test, średni wynik użytkowników powyżej 80%"></span>
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Banalny test, średni wynik użytkowników powyżej 80%"></span>
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Banalny test, średni wynik użytkowników powyżej 80%"></span>
<span class="fa-solid fa-fire-flame-curved fireChecked" title="Banalny test, średni wynik użytkowników powyżej 80%"></span>
{% endif %}
</div>
<div class="mainTestMetaLabels">
Ocena:
{% if test.avg_rating == 0 %}
<span class="fa fa-star" title="Użytkownicy jeszcze nie ocenili tego testu, bądź pierwszy"></span>
<span class="fa fa-star" title="Użytkownicy jeszcze nie ocenili tego testu, bądź pierwszy"></span>
<span class="fa fa-star" title="Użytkownicy jeszcze nie ocenili tego testu, bądź pierwszy"></span>
<span class="fa fa-star" title="Użytkownicy jeszcze nie ocenili tego testu, bądź pierwszy"></span>
<span class="fa fa-star" title="Użytkownicy jeszcze nie ocenili tego testu, bądź pierwszy"></span>
{% elif test.avg_rating == 1 %}
<span class="fa fa-star starChecked" title="Użytkownicy ocenili ten test jako tragiczny"></span>
<span class="fa fa-star" title="Użytkownicy ocenili ten test jako tragiczny"></span>
<span class="fa fa-star" title="Użytkownicy ocenili ten test jako tragiczny"></span>
<span class="fa fa-star" title="Użytkownicy ocenili ten test jako tragiczny"></span>
<span class="fa fa-star" title="Użytkownicy ocenili ten test jako tragiczny"></span>
{% elif test.avg_rating == 2 %}
<span class="fa fa-star starChecked" title="Użytkownicy ocenili ten test jako słaby"></span>
<span class="fa fa-star starChecked" title="Użytkownicy ocenili ten test jako słaby"></span>
<span class="fa fa-star" title="Użytkownicy ocenili ten test jako słaby"></span>
<span class="fa fa-star" title="Użytkownicy ocenili ten test jako słaby"></span>
<span class="fa fa-star" title="Użytkownicy ocenili ten test jako słaby"></span>
{% elif test.avg_rating == 3 %}
<span class="fa fa-star starChecked" title="Użytkownicy ocenili ten test jako przeciętny"></span>
<span class="fa fa-star starChecked" title="Użytkownicy ocenili ten test jako przeciętny"></span>
<span class="fa fa-star starChecked" title="Użytkownicy ocenili ten test jako przeciętny"></span>
<span class="fa fa-star" title="Użytkownicy ocenili ten test jako przeciętny"></span>
<span class="fa fa-star" title="Użytkownicy ocenili ten test jako przeciętny"></span>
{% elif test.avg_rating == 4 %}
<span class="fa fa-star starChecked" title="Użytkownicy ocenili ten test jako dobry"></span>
<span class="fa fa-star starChecked" title="Użytkownicy ocenili ten test jako dobry"></span>
<span class="fa fa-star starChecked" title="Użytkownicy ocenili ten test jako dobry"></span>
<span class="fa fa-star starChecked" title="Użytkownicy ocenili ten test jako dobry"></span>
<span class="fa fa-star"></span>
{% else %}
<span class="fa fa-star starChecked" title="Użytkownicy ocenili ten test jako genialny"></span>
<span class="fa fa-star starChecked" title="Użytkownicy ocenili ten test jako genialny"></span>
<span class="fa fa-star starChecked" title="Użytkownicy ocenili ten test jako genialny"></span>
<span class="fa fa-star starChecked" title="Użytkownicy ocenili ten test jako genialny"></span>
<span class="fa fa-star starChecked" title="Użytkownicy ocenili ten test jako genialny"></span>
{% endif %}
(Głosy: {{test.rates_amount}})
</div>
</div>
</div>
<!-- <div class="mainTestDesc">-->
<!-- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus volutpat scelerisque tortor, id sodales leo finibus id. Vivamus id viverra nunc, ac faucibus metus. Nulla a mauris imperdiet sapien lobortis dapibus. Quisque ornare posuere pulvinar.-->
<!-- </div>-->
<button><a href="/tests/{{test.id}}/password">Rozwiąż</a></button>
</div>
<br>
{% endfor %}
{% endblock %}

View File

@ -28,6 +28,7 @@ class Test(models.Model):
total_rating = models.IntegerField(default=0) total_rating = models.IntegerField(default=0)
avg_rating = models.IntegerField(default=0) avg_rating = models.IntegerField(default=0)
rates_amount = models.IntegerField(default=0) rates_amount = models.IntegerField(default=0)
difficulty_label = models.IntegerField(default=0)
avg_difficulty = models.FloatField(default=0.0) avg_difficulty = models.FloatField(default=0.0)
objects = TestManager() objects = TestManager()

View File

@ -19,6 +19,14 @@ class TestSerializer(serializers.ModelSerializer):
"questions", "questions",
"visible", "visible",
"category", "category",
"created_by",
"completions",
"total_percentage_scored_by_users",
"total_rating",
"avg_rating",
"rates_amount",
"difficulty_label",
"avg_difficulty"
) )
def create(self, validated_data): def create(self, validated_data):

View File

@ -1,7 +1,7 @@
from django.urls import path from django.urls import path
from rest_framework.routers import DefaultRouter from rest_framework.routers import DefaultRouter
from trials.views import TestModelViewSet, TestTemplateView, TestValidateAPIView, TestResultView, rateTest, addTest, addQuestions, myTests, solvedTests, solvedTestsDetailed, EditTestTemplateView, deleteTest, AddQuestionToExistingTest, RemoveQuestionFromExistingTest, EditQuestionTemplateView, editName, editVisible, editPassword, TestPasswordTemplateView from trials.views import TestModelViewSet, TestTemplateView, TestValidateAPIView, TestResultView, rateTest, addTest, addTest2, addQuestions, myTests, solvedTests, solvedTestsDetailed, EditTestTemplateView, deleteTest, AddQuestionToExistingTest, RemoveQuestionFromExistingTest, EditQuestionTemplateView, editName, editVisible, editPassword, TestPasswordTemplateView
router = DefaultRouter(trailing_slash=False) router = DefaultRouter(trailing_slash=False)
router.register("items", TestModelViewSet) router.register("items", TestModelViewSet)

View File

@ -18,12 +18,12 @@ from django.template import loader
from django.template.loader import render_to_string, get_template from django.template.loader import render_to_string, get_template
from django.http import HttpRequest from django.http import HttpRequest
import requests import requests
from django.contrib.auth.decorators import login_required
@login_required
def addTest(request): def addTest(request):
return render(request, 'createTest.html') return render(request, 'createTest.html')
def is_visible(visible): def is_visible(visible):
if visible =="public": if visible =="public":
return True return True
@ -144,14 +144,14 @@ class RemoveQuestionFromExistingTest(TemplateView):
Question.objects.get(id=request.POST["id"]).delete() Question.objects.get(id=request.POST["id"]).delete()
return redirect(f'/tests/{kwargs["test_id"]}/edit') return redirect(f'/tests/{kwargs["test_id"]}/edit')
@login_required
def myTests(request): def myTests(request):
context = {} context = {}
user = request.user.id user = request.user.id
context['tests'] = Test.objects.filter(created_by=user) context['tests'] = Test.objects.filter(created_by=user)
return render(request, 'myTests.html', context) return render(request, 'myTests.html', context)
@login_required
def solvedTests(request): def solvedTests(request):
context = {} context = {}
user_id = request.user.id user_id = request.user.id
@ -180,7 +180,7 @@ def solvedTests(request):
context['tests_lists'] = dict_with_lists_of_test_results context['tests_lists'] = dict_with_lists_of_test_results
return render(request, 'solvedTests.html', context) return render(request, 'solvedTests.html', context)
@login_required
def solvedTestsDetailed(request, test_id): def solvedTestsDetailed(request, test_id):
context = {} context = {}
solved_tests = SolvedTest.objects.filter(test__id=test_id) solved_tests = SolvedTest.objects.filter(test__id=test_id)
@ -268,12 +268,12 @@ class EditQuestionTemplateView(TemplateView):
Question.objects.EditQuestion(question_id=question_id, name=description, answers=answers) Question.objects.EditQuestion(question_id=question_id, name=description, answers=answers)
return redirect(f'/tests/{test}/edit') return redirect(f'/tests/{test}/edit')
@login_required
def deleteTest(request, test_id): def deleteTest(request, test_id):
Test.objects.filter(id=test_id).delete() Test.objects.filter(id=test_id).delete()
return redirect('myTests') return redirect('myTests')
@login_required
def editVisible(request, test_id): def editVisible(request, test_id):
new_visible = request.GET["visible"] new_visible = request.GET["visible"]
if new_visible == "public": if new_visible == "public":
@ -285,6 +285,7 @@ def editVisible(request, test_id):
test.save() test.save()
return redirect(f'/tests/{test_id}/edit') return redirect(f'/tests/{test_id}/edit')
@login_required
def editName(request, test_id): def editName(request, test_id):
new_name = request.GET["name"] new_name = request.GET["name"]
test = Test.objects.get(id=test_id) test = Test.objects.get(id=test_id)
@ -292,7 +293,7 @@ def editName(request, test_id):
test.save() test.save()
return redirect(f'/tests/{test_id}/edit') return redirect(f'/tests/{test_id}/edit')
@login_required
def editPassword(request, test_id): def editPassword(request, test_id):
new_password = request.GET["password"] new_password = request.GET["password"]
test = Test.objects.get(id=test_id) test = Test.objects.get(id=test_id)
@ -300,7 +301,7 @@ def editPassword(request, test_id):
test.save() test.save()
return redirect(f'/tests/{test_id}/edit') return redirect(f'/tests/{test_id}/edit')
@login_required
def rateTest(request, test_id): def rateTest(request, test_id):
test = Test.objects.get(id=test_id) test = Test.objects.get(id=test_id)
rate = request.GET["rate"] rate = request.GET["rate"]
@ -401,6 +402,7 @@ class TestTemplateView(TemplateView):
return HttpResponseRedirect(f'result') return HttpResponseRedirect(f'result')
@login_required
def TestPasswordTemplateView(request, test_id): def TestPasswordTemplateView(request, test_id):
test = Test.objects.get(id=test_id) test = Test.objects.get(id=test_id)
if test.password == "": if test.password == "":
@ -411,6 +413,7 @@ def TestPasswordTemplateView(request, test_id):
return render(request, 'testPassword.html') return render(request, 'testPassword.html')
@login_required
def testView(request): def testView(request):
permission_classes = [] permission_classes = []
template_name = settings.BASE_DIR + f"/templates/generic_test.html" template_name = settings.BASE_DIR + f"/templates/generic_test.html"