mirror of
https://github.com/ae-utbm/sith.git
synced 2026-09-18 02:04:20 +00:00
Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8dbb472865 | ||
|
|
246909376f |
@@ -18,7 +18,7 @@ class Migration(migrations.Migration):
|
|||||||
"Groups that are automatically given or removed "
|
"Groups that are automatically given or removed "
|
||||||
"to user receiving or losing this club role"
|
"to user receiving or losing this club role"
|
||||||
),
|
),
|
||||||
related_name="club_roles",
|
related_name="linked_roles",
|
||||||
to="core.group",
|
to="core.group",
|
||||||
verbose_name="Linked groups",
|
verbose_name="Linked groups",
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ from typing import ClassVar, NamedTuple
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth.models import Permission
|
from django.contrib.auth.models import Permission
|
||||||
from django.contrib.sites.models import Site
|
from django.contrib.sites.models import Site
|
||||||
|
from django.core.files.base import ContentFile
|
||||||
from django.core.management import call_command
|
from django.core.management import call_command
|
||||||
from django.core.management.base import BaseCommand
|
from django.core.management.base import BaseCommand
|
||||||
from django.db import connection
|
from django.db import connection
|
||||||
@@ -120,15 +121,21 @@ class Command(BaseCommand):
|
|||||||
)
|
)
|
||||||
self.profiles_root = SithFile.objects.create(name="profiles", owner=root)
|
self.profiles_root = SithFile.objects.create(name="profiles", owner=root)
|
||||||
home_root = SithFile.objects.create(name="users", owner=root)
|
home_root = SithFile.objects.create(name="users", owner=root)
|
||||||
|
|
||||||
# Page needed for club creation
|
|
||||||
p = Page(name=settings.SITH_CLUB_ROOT_PAGE)
|
|
||||||
p.save(force_lock=True)
|
|
||||||
|
|
||||||
club_root = SithFile.objects.create(name="clubs", owner=root)
|
club_root = SithFile.objects.create(name="clubs", owner=root)
|
||||||
sas = SithFile.objects.create(
|
sas = SithFile.objects.create(
|
||||||
name="SAS", owner=root, id=settings.SITH_SAS_ROOT_DIR_ID
|
name="SAS", owner=root, id=settings.SITH_SAS_ROOT_DIR_ID
|
||||||
)
|
)
|
||||||
|
SithFile.objects.create(
|
||||||
|
name="CGU",
|
||||||
|
is_folder=False,
|
||||||
|
file=ContentFile(
|
||||||
|
content="Conditions générales d'utilisation", name="cgu.txt"
|
||||||
|
),
|
||||||
|
owner=root,
|
||||||
|
)
|
||||||
|
# Page needed for club creation
|
||||||
|
p = Page(name=settings.SITH_CLUB_ROOT_PAGE)
|
||||||
|
p.save(force_lock=True)
|
||||||
clubs = self._create_clubs()
|
clubs = self._create_clubs()
|
||||||
|
|
||||||
self.reset_index("club")
|
self.reset_index("club")
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
# Generated by Django 5.2.17 on 2026-09-15 11:02
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
dependencies = [("core", "0050_alter_sithfile_moderator")]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="user",
|
||||||
|
name="cgu_approved",
|
||||||
|
field=models.BooleanField(default=False, verbose_name="EULA approved"),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -291,6 +291,7 @@ class User(AbstractUser):
|
|||||||
),
|
),
|
||||||
blank=True,
|
blank=True,
|
||||||
)
|
)
|
||||||
|
cgu_approved = models.BooleanField(_("EULA approved"), default=False)
|
||||||
godfathers = models.ManyToManyField("User", related_name="godchildren", blank=True)
|
godfathers = models.ManyToManyField("User", related_name="godchildren", blank=True)
|
||||||
|
|
||||||
objects = CustomUserManager()
|
objects = CustomUserManager()
|
||||||
|
|||||||
@@ -42,7 +42,6 @@ details.accordion>.accordion-content {
|
|||||||
background: #ffffff;
|
background: #ffffff;
|
||||||
color: #333333;
|
color: #333333;
|
||||||
padding: 1em 2.2em;
|
padding: 1em 2.2em;
|
||||||
margin-top: 0;
|
|
||||||
border: 1px solid #dddddd;
|
border: 1px solid #dddddd;
|
||||||
border-bottom-right-radius: 3px;
|
border-bottom-right-radius: 3px;
|
||||||
border-bottom-left-radius: 3px;
|
border-bottom-left-radius: 3px;
|
||||||
|
|||||||
@@ -49,67 +49,29 @@ body {
|
|||||||
max-width: 500px;
|
max-width: 500px;
|
||||||
margin-top: 20px;
|
margin-top: 20px;
|
||||||
|
|
||||||
>p,
|
input[type="submit"] {
|
||||||
>div {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin: 0;
|
|
||||||
|
|
||||||
>label {
|
|
||||||
width: 100%;
|
|
||||||
|
|
||||||
@media (min-width: 500px) {
|
|
||||||
width: 300px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
>input,
|
|
||||||
>p>input,
|
|
||||||
>div>input {
|
|
||||||
box-sizing: border-box;
|
|
||||||
width: 100%;
|
|
||||||
max-width: 500px;
|
|
||||||
|
|
||||||
@media (min-width: 500px) {
|
|
||||||
max-width: 300px;
|
max-width: 300px;
|
||||||
}
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
>.errorlist {
|
.errorlist {
|
||||||
color: red;
|
color: red;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin: 10px 0 0 0;
|
margin: 10px 0 0 0;
|
||||||
list-style-type: none;
|
list-style-type: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
>.required>.helptext {
|
div, fieldset {
|
||||||
text-align: center;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|
||||||
>.required:last-of-type {
|
|
||||||
box-sizing: border-box;
|
|
||||||
max-width: 300px;
|
max-width: 300px;
|
||||||
flex-direction: row;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
justify-content: space-between;
|
|
||||||
|
|
||||||
>label {
|
|
||||||
width: 100%;
|
|
||||||
}
|
}
|
||||||
|
.captcha {
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
>img {
|
>img {
|
||||||
width: 70px;
|
width: 70px;
|
||||||
object-fit: contain;
|
object-fit: contain;
|
||||||
}
|
}
|
||||||
|
|
||||||
>input {
|
|
||||||
width: 200px;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,13 +50,12 @@
|
|||||||
<input type="hidden" name="next" value="{{ next }}">
|
<input type="hidden" name="next" value="{{ next }}">
|
||||||
<input type="submit" value="{% trans %}Login{% endtrans %}">
|
<input type="submit" value="{% trans %}Login{% endtrans %}">
|
||||||
|
|
||||||
|
<div>
|
||||||
{# Assumes you setup the password_reset view in your URLconf #}
|
|
||||||
<p>
|
|
||||||
<a href="{{ url('core:password_reset') }}">{% trans %}Lost password?{% endtrans %}</a>
|
<a href="{{ url('core:password_reset') }}">{% trans %}Lost password?{% endtrans %}</a>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
<a href="{{ url('core:register') }}">{% trans %}Create account{% endtrans %}</a>
|
<a href="{{ url('core:register') }}">{% trans %}Create account{% endtrans %}</a>
|
||||||
</p>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,17 @@
|
|||||||
<form action="{{ url('core:register') }}" method="post">
|
<form action="{{ url('core:register') }}" method="post">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{% render_honeypot_field %}
|
{% render_honeypot_field %}
|
||||||
{{ form.as_p() }}
|
{% for field in form %}
|
||||||
<input type="submit" value="{% trans %}Register{% endtrans %}" />
|
{% if field.name not in ["cgu_approved", "captcha"] %}
|
||||||
|
<div>{{ field.as_field_group() }}</div>
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
<div class="captcha">{{ form.captcha.as_field_group() }}</div>
|
||||||
|
<fieldset>
|
||||||
|
{{ form.cgu_approved.errors }}
|
||||||
|
{{ form.cgu_approved }}
|
||||||
|
{{ form.cgu_approved.label_tag() }}
|
||||||
|
</fieldset>
|
||||||
|
<input type="submit" class="btn btn-blue" value="{% trans %}Register{% endtrans %}" />
|
||||||
</form>
|
</form>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ class TestUserRegistration:
|
|||||||
"password2": "plop",
|
"password2": "plop",
|
||||||
"captcha_0": "dummy-value",
|
"captcha_0": "dummy-value",
|
||||||
"captcha_1": "PASSED",
|
"captcha_1": "PASSED",
|
||||||
|
"cgu_approved": True,
|
||||||
}
|
}
|
||||||
|
|
||||||
@pytest.fixture()
|
@pytest.fixture()
|
||||||
@@ -92,6 +93,7 @@ class TestUserRegistration:
|
|||||||
({"first_name": ""}, "Ce champ est obligatoire."),
|
({"first_name": ""}, "Ce champ est obligatoire."),
|
||||||
({"last_name": ""}, "Ce champ est obligatoire."),
|
({"last_name": ""}, "Ce champ est obligatoire."),
|
||||||
({"captcha_1": "WRONG_CAPTCHA"}, "CAPTCHA invalide"),
|
({"captcha_1": "WRONG_CAPTCHA"}, "CAPTCHA invalide"),
|
||||||
|
({"cgu_approved": ""}, "Ce champ est obligatoire."),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
def test_register_user_form_fail(
|
def test_register_user_form_fail(
|
||||||
|
|||||||
+19
-1
@@ -42,6 +42,8 @@ from django.forms import (
|
|||||||
TextInput,
|
TextInput,
|
||||||
Widget,
|
Widget,
|
||||||
)
|
)
|
||||||
|
from django.urls import reverse
|
||||||
|
from django.utils.safestring import mark_safe
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from phonenumber_field.widgets import RegionalPhoneNumberWidget
|
from phonenumber_field.widgets import RegionalPhoneNumberWidget
|
||||||
@@ -146,9 +148,25 @@ class RegisteringForm(UserCreationForm):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = User
|
model = User
|
||||||
fields = ("first_name", "last_name", "email")
|
fields = ("first_name", "last_name", "email", "cgu_approved")
|
||||||
field_classes = {"email": AntiSpamEmailField}
|
field_classes = {"email": AntiSpamEmailField}
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
self.fields["cgu_approved"].required = True
|
||||||
|
self.fields["cgu_approved"].label_suffix = ""
|
||||||
|
self.fields["cgu_approved"].label = mark_safe(
|
||||||
|
_(
|
||||||
|
"I have read and I approve the "
|
||||||
|
'<a href="%(url)s" target="_blank">End User License Agreement</a>'
|
||||||
|
)
|
||||||
|
% {
|
||||||
|
"url": reverse(
|
||||||
|
"core:download", kwargs={"file_id": settings.SITH_CGU_FILE_ID}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class UserProfileForm(forms.ModelForm):
|
class UserProfileForm(forms.ModelForm):
|
||||||
"""Form handling the user profile, managing the files"""
|
"""Form handling the user profile, managing the files"""
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ class Migration(migrations.Migration):
|
|||||||
model_name="permanency",
|
model_name="permanency",
|
||||||
name="end",
|
name="end",
|
||||||
field=models.DateTimeField(
|
field=models.DateTimeField(
|
||||||
db_index=True, verbose_name="end date", null=True
|
db_index=True, verbose_name="end date", null=True, blank=True
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -6,9 +6,7 @@ from django.db import migrations, models
|
|||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
dependencies = [
|
dependencies = [("counter", "0018_producttype_priority")]
|
||||||
("counter", "0018_producttype_priority"),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
operations = [
|
||||||
migrations.AlterModelOptions(
|
migrations.AlterModelOptions(
|
||||||
|
|||||||
@@ -6,9 +6,7 @@ import counter.fields
|
|||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
dependencies = [
|
dependencies = [("counter", "0019_billinginfo")]
|
||||||
("counter", "0019_billinginfo"),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
operations = [
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-09-14 11:48+0200\n"
|
"POT-Creation-Date: 2026-09-15 23:49+0200\n"
|
||||||
"PO-Revision-Date: 2016-07-18\n"
|
"PO-Revision-Date: 2016-07-18\n"
|
||||||
"Last-Translator: Maréchal <thomas.girod@utbm.fr\n"
|
"Last-Translator: Maréchal <thomas.girod@utbm.fr\n"
|
||||||
"Language-Team: AE info <ae.info@utbm.fr>\n"
|
"Language-Team: AE info <ae.info@utbm.fr>\n"
|
||||||
@@ -736,9 +736,8 @@ msgstr "Méthode de paiement"
|
|||||||
#: counter/templates/counter/fragments/create_student_card.jinja
|
#: counter/templates/counter/fragments/create_student_card.jinja
|
||||||
#: counter/templates/counter/last_ops.jinja
|
#: counter/templates/counter/last_ops.jinja
|
||||||
#: election/templates/election/election_detail.jinja
|
#: election/templates/election/election_detail.jinja
|
||||||
#: forum/templates/forum/macros.jinja
|
#: forum/templates/forum/macros.jinja pedagogy/templates/pedagogy/guide.jinja
|
||||||
#: pedagogy/templates/pedagogy/fragments/ue_detail/comments.jinja
|
#: pedagogy/templates/pedagogy/ue_detail.jinja sas/templates/sas/album.jinja
|
||||||
#: pedagogy/templates/pedagogy/guide.jinja sas/templates/sas/album.jinja
|
|
||||||
#: sas/templates/sas/moderation.jinja sas/templates/sas/picture.jinja
|
#: sas/templates/sas/moderation.jinja sas/templates/sas/picture.jinja
|
||||||
#: trombi/templates/trombi/detail.jinja
|
#: trombi/templates/trombi/detail.jinja
|
||||||
#: trombi/templates/trombi/edit_profile.jinja
|
#: trombi/templates/trombi/edit_profile.jinja
|
||||||
@@ -932,9 +931,8 @@ msgstr "Outils"
|
|||||||
#: counter/templates/counter/cash_summary_list.jinja
|
#: counter/templates/counter/cash_summary_list.jinja
|
||||||
#: counter/templates/counter/counter_list.jinja
|
#: counter/templates/counter/counter_list.jinja
|
||||||
#: election/templates/election/election_detail.jinja
|
#: election/templates/election/election_detail.jinja
|
||||||
#: forum/templates/forum/macros.jinja
|
#: forum/templates/forum/macros.jinja pedagogy/templates/pedagogy/guide.jinja
|
||||||
#: pedagogy/templates/pedagogy/fragments/ue_detail/comments.jinja
|
#: pedagogy/templates/pedagogy/ue_detail.jinja sas/templates/sas/album.jinja
|
||||||
#: pedagogy/templates/pedagogy/guide.jinja sas/templates/sas/album.jinja
|
|
||||||
#: trombi/templates/trombi/detail.jinja
|
#: trombi/templates/trombi/detail.jinja
|
||||||
#: trombi/templates/trombi/edit_profile.jinja
|
#: trombi/templates/trombi/edit_profile.jinja
|
||||||
msgid "Edit"
|
msgid "Edit"
|
||||||
@@ -1190,9 +1188,8 @@ msgstr "Actions"
|
|||||||
|
|
||||||
#: com/templates/com/mailing_admin.jinja com/templates/com/poster_list.jinja
|
#: com/templates/com/mailing_admin.jinja com/templates/com/poster_list.jinja
|
||||||
#: core/templates/core/file_detail.jinja
|
#: core/templates/core/file_detail.jinja
|
||||||
#: core/templates/core/file_moderation.jinja
|
#: core/templates/core/file_moderation.jinja sas/templates/sas/moderation.jinja
|
||||||
#: pedagogy/templates/pedagogy/fragments/ue_detail/comments.jinja
|
#: sas/templates/sas/picture.jinja
|
||||||
#: sas/templates/sas/moderation.jinja sas/templates/sas/picture.jinja
|
|
||||||
msgid "Moderate"
|
msgid "Moderate"
|
||||||
msgstr "Modérer"
|
msgstr "Modérer"
|
||||||
|
|
||||||
@@ -1494,6 +1491,7 @@ msgstr "Descendre"
|
|||||||
|
|
||||||
#: com/templates/com/weekmail_preview.jinja
|
#: com/templates/com/weekmail_preview.jinja
|
||||||
#: core/templates/core/user_account_detail.jinja
|
#: core/templates/core/user_account_detail.jinja
|
||||||
|
#: pedagogy/templates/pedagogy/ue_detail.jinja
|
||||||
#: trombi/templates/trombi/comment_moderation.jinja
|
#: trombi/templates/trombi/comment_moderation.jinja
|
||||||
#: trombi/templates/trombi/export.jinja
|
#: trombi/templates/trombi/export.jinja
|
||||||
msgid "Back"
|
msgid "Back"
|
||||||
@@ -1837,6 +1835,10 @@ msgstr ""
|
|||||||
"Même si ce profil est caché, les utilisateurs sur cette liste pourront "
|
"Même si ce profil est caché, les utilisateurs sur cette liste pourront "
|
||||||
"toujours le voir."
|
"toujours le voir."
|
||||||
|
|
||||||
|
#: core/models.py
|
||||||
|
msgid "EULA approved"
|
||||||
|
msgstr "CGU approuvées"
|
||||||
|
|
||||||
#: core/models.py
|
#: core/models.py
|
||||||
msgid "A user with that username already exists"
|
msgid "A user with that username already exists"
|
||||||
msgstr "Un utilisateur de ce nom d'utilisateur existe déjà"
|
msgstr "Un utilisateur de ce nom d'utilisateur existe déjà"
|
||||||
@@ -1844,9 +1846,7 @@ msgstr "Un utilisateur de ce nom d'utilisateur existe déjà"
|
|||||||
#: core/models.py core/templates/core/macros.jinja
|
#: core/models.py core/templates/core/macros.jinja
|
||||||
#: core/templates/core/user_detail.jinja core/templates/core/user_edit.jinja
|
#: core/templates/core/user_detail.jinja core/templates/core/user_edit.jinja
|
||||||
#: election/templates/election/election_detail.jinja
|
#: election/templates/election/election_detail.jinja
|
||||||
#: forum/templates/forum/macros.jinja
|
#: forum/templates/forum/macros.jinja trombi/templates/trombi/user_tools.jinja
|
||||||
#: pedagogy/templates/pedagogy/fragments/ue_detail/comments.jinja
|
|
||||||
#: trombi/templates/trombi/user_tools.jinja
|
|
||||||
msgid "Profile"
|
msgid "Profile"
|
||||||
msgstr "Profil"
|
msgstr "Profil"
|
||||||
|
|
||||||
@@ -2237,7 +2237,6 @@ msgstr "Confirmation"
|
|||||||
#: core/templates/core/file_delete_confirm.jinja
|
#: core/templates/core/file_delete_confirm.jinja
|
||||||
#: counter/templates/counter/counter_click.jinja
|
#: counter/templates/counter/counter_click.jinja
|
||||||
#: counter/templates/counter/fragments/delete_student_card.jinja
|
#: counter/templates/counter/fragments/delete_student_card.jinja
|
||||||
#: pedagogy/templates/pedagogy/fragments/comment_report.jinja
|
|
||||||
#: sas/templates/sas/ask_picture_removal.jinja
|
#: sas/templates/sas/ask_picture_removal.jinja
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Annuler"
|
msgstr "Annuler"
|
||||||
@@ -3142,6 +3141,15 @@ msgstr "Assurez-vous que cet horodatage est dans le futur"
|
|||||||
msgid "Username, email, or account number"
|
msgid "Username, email, or account number"
|
||||||
msgstr "Nom d'utilisateur, email, ou numéro de compte AE"
|
msgstr "Nom d'utilisateur, email, ou numéro de compte AE"
|
||||||
|
|
||||||
|
#: core/views/forms.py
|
||||||
|
#, python-format
|
||||||
|
msgid ""
|
||||||
|
"I have read and I approve the <a href=\"%(url)s\" target=\"_blank\">End User "
|
||||||
|
"License Agreement</a>"
|
||||||
|
msgstr ""
|
||||||
|
"J'ai lu et j'approuve les <a href=\"%(url)s\" target=\"_blank\">Conditions "
|
||||||
|
"Générales d'utilisation</a>"
|
||||||
|
|
||||||
#: core/views/forms.py
|
#: core/views/forms.py
|
||||||
msgid ""
|
msgid ""
|
||||||
"Profile: you need to be visible on the picture, in order to be recognized "
|
"Profile: you need to be visible on the picture, in order to be recognized "
|
||||||
@@ -3783,6 +3791,7 @@ msgid "Emptied"
|
|||||||
msgstr "Coffre vidé"
|
msgstr "Coffre vidé"
|
||||||
|
|
||||||
#: counter/templates/counter/cash_summary_list.jinja counter/views/cash.py
|
#: counter/templates/counter/cash_summary_list.jinja counter/views/cash.py
|
||||||
|
#: pedagogy/templates/pedagogy/fragments/ue_comment_form.jinja
|
||||||
#: pedagogy/templates/pedagogy/moderation.jinja
|
#: pedagogy/templates/pedagogy/moderation.jinja
|
||||||
#: trombi/templates/trombi/comment.jinja
|
#: trombi/templates/trombi/comment.jinja
|
||||||
#: trombi/templates/trombi/user_tools.jinja
|
#: trombi/templates/trombi/user_tools.jinja
|
||||||
@@ -5113,62 +5122,6 @@ msgstr "signaler"
|
|||||||
msgid "reporter"
|
msgid "reporter"
|
||||||
msgstr "signalant"
|
msgstr "signalant"
|
||||||
|
|
||||||
#: pedagogy/templates/pedagogy/fragments/comment_report.jinja
|
|
||||||
#: pedagogy/templates/pedagogy/fragments/ue_detail/comments.jinja
|
|
||||||
msgid "Report"
|
|
||||||
msgstr "Signaler"
|
|
||||||
|
|
||||||
#: pedagogy/templates/pedagogy/fragments/ue_comment_form.jinja
|
|
||||||
msgid "Leave comment"
|
|
||||||
msgstr "Laisser un commentaire"
|
|
||||||
|
|
||||||
#: pedagogy/templates/pedagogy/fragments/ue_detail/comments.jinja
|
|
||||||
#: trombi/templates/trombi/export.jinja
|
|
||||||
msgid "Comments"
|
|
||||||
msgstr "Commentaires"
|
|
||||||
|
|
||||||
#: pedagogy/templates/pedagogy/fragments/ue_detail/comments.jinja
|
|
||||||
msgid "This comment has been reported"
|
|
||||||
msgstr "Ce commentaire a été signalé"
|
|
||||||
|
|
||||||
#: pedagogy/templates/pedagogy/fragments/ue_detail/comments.jinja
|
|
||||||
msgid "It will be hidden until moderated."
|
|
||||||
msgstr "Il sera caché tant qu'il ne sera pas modéré."
|
|
||||||
|
|
||||||
#: pedagogy/templates/pedagogy/fragments/ue_detail/comments.jinja
|
|
||||||
#: pedagogy/templates/pedagogy/fragments/ue_detail/grade.jinja
|
|
||||||
msgid "Global grade"
|
|
||||||
msgstr "Note globale"
|
|
||||||
|
|
||||||
#: pedagogy/templates/pedagogy/fragments/ue_detail/comments.jinja
|
|
||||||
#: pedagogy/templates/pedagogy/fragments/ue_detail/grade.jinja
|
|
||||||
msgid "Utility"
|
|
||||||
msgstr "Utilité"
|
|
||||||
|
|
||||||
#: pedagogy/templates/pedagogy/fragments/ue_detail/comments.jinja
|
|
||||||
#: pedagogy/templates/pedagogy/fragments/ue_detail/grade.jinja
|
|
||||||
msgid "Interest"
|
|
||||||
msgstr "Intérêt"
|
|
||||||
|
|
||||||
#: pedagogy/templates/pedagogy/fragments/ue_detail/comments.jinja
|
|
||||||
#: pedagogy/templates/pedagogy/fragments/ue_detail/grade.jinja
|
|
||||||
msgid "Teaching"
|
|
||||||
msgstr "Enseignement"
|
|
||||||
|
|
||||||
#: pedagogy/templates/pedagogy/fragments/ue_detail/comments.jinja
|
|
||||||
#: pedagogy/templates/pedagogy/fragments/ue_detail/grade.jinja
|
|
||||||
msgid "Workload"
|
|
||||||
msgstr "Charge de travail"
|
|
||||||
|
|
||||||
#: pedagogy/templates/pedagogy/fragments/ue_detail/ue_detail.jinja
|
|
||||||
#: pedagogy/templates/pedagogy/ue_detail.jinja
|
|
||||||
msgid ""
|
|
||||||
"You already posted a comment on this UE. If you want to comment again, "
|
|
||||||
"please modify or delete your previous comment."
|
|
||||||
msgstr ""
|
|
||||||
"Vous avez déjà commenté cette UE. Si vous voulez de nouveau commenter, "
|
|
||||||
"veuillez modifier ou supprimer votre commentaire précédent."
|
|
||||||
|
|
||||||
#: pedagogy/templates/pedagogy/guide.jinja
|
#: pedagogy/templates/pedagogy/guide.jinja
|
||||||
msgid "A guide of courses available at UTBM."
|
msgid "A guide of courses available at UTBM."
|
||||||
msgstr "Un guide de tous les cours disponibles à l'UTBM."
|
msgstr "Un guide de tous les cours disponibles à l'UTBM."
|
||||||
@@ -5177,10 +5130,6 @@ msgstr "Un guide de tous les cours disponibles à l'UTBM."
|
|||||||
msgid "Search UE"
|
msgid "Search UE"
|
||||||
msgstr "Recherche d'UE"
|
msgstr "Recherche d'UE"
|
||||||
|
|
||||||
#: pedagogy/templates/pedagogy/guide.jinja
|
|
||||||
msgid "Hide closed UEs"
|
|
||||||
msgstr "Cacher les UEs fermées"
|
|
||||||
|
|
||||||
#: pedagogy/templates/pedagogy/guide.jinja
|
#: pedagogy/templates/pedagogy/guide.jinja
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "%(display_name)s"
|
msgid "%(display_name)s"
|
||||||
@@ -5234,20 +5183,44 @@ msgid "UE Details"
|
|||||||
msgstr "Détails d'UE"
|
msgstr "Détails d'UE"
|
||||||
|
|
||||||
#: pedagogy/templates/pedagogy/ue_detail.jinja
|
#: pedagogy/templates/pedagogy/ue_detail.jinja
|
||||||
msgid "Category"
|
msgid "CM: "
|
||||||
msgstr "Catégorie"
|
msgstr "CM : "
|
||||||
|
|
||||||
#: pedagogy/templates/pedagogy/ue_detail.jinja
|
#: pedagogy/templates/pedagogy/ue_detail.jinja
|
||||||
msgid "Credits"
|
msgid "TD: "
|
||||||
msgstr "Crédits"
|
msgstr "TD : "
|
||||||
|
|
||||||
#: pedagogy/templates/pedagogy/ue_detail.jinja
|
#: pedagogy/templates/pedagogy/ue_detail.jinja
|
||||||
msgid "Availability"
|
msgid "TP: "
|
||||||
msgstr "Disponibilité"
|
msgstr "TP : "
|
||||||
|
|
||||||
#: pedagogy/templates/pedagogy/ue_detail.jinja
|
#: pedagogy/templates/pedagogy/ue_detail.jinja
|
||||||
msgid "Manager"
|
msgid "TE: "
|
||||||
msgstr "Responsable"
|
msgstr "TE : "
|
||||||
|
|
||||||
|
#: pedagogy/templates/pedagogy/ue_detail.jinja
|
||||||
|
msgid "THE: "
|
||||||
|
msgstr "THE : "
|
||||||
|
|
||||||
|
#: pedagogy/templates/pedagogy/ue_detail.jinja
|
||||||
|
msgid "Global grade"
|
||||||
|
msgstr "Note globale"
|
||||||
|
|
||||||
|
#: pedagogy/templates/pedagogy/ue_detail.jinja
|
||||||
|
msgid "Utility"
|
||||||
|
msgstr "Utilité"
|
||||||
|
|
||||||
|
#: pedagogy/templates/pedagogy/ue_detail.jinja
|
||||||
|
msgid "Interest"
|
||||||
|
msgstr "Intérêt"
|
||||||
|
|
||||||
|
#: pedagogy/templates/pedagogy/ue_detail.jinja
|
||||||
|
msgid "Teaching"
|
||||||
|
msgstr "Enseignement"
|
||||||
|
|
||||||
|
#: pedagogy/templates/pedagogy/ue_detail.jinja
|
||||||
|
msgid "Work load"
|
||||||
|
msgstr "Charge de travail"
|
||||||
|
|
||||||
#: pedagogy/templates/pedagogy/ue_detail.jinja
|
#: pedagogy/templates/pedagogy/ue_detail.jinja
|
||||||
msgid "Objectives"
|
msgid "Objectives"
|
||||||
@@ -5265,6 +5238,35 @@ msgstr "Compétences acquises"
|
|||||||
msgid "Key concepts"
|
msgid "Key concepts"
|
||||||
msgstr "Concepts clefs"
|
msgstr "Concepts clefs"
|
||||||
|
|
||||||
|
#: pedagogy/templates/pedagogy/ue_detail.jinja
|
||||||
|
msgid "UE manager: "
|
||||||
|
msgstr "Gestionnaire d'UE : "
|
||||||
|
|
||||||
|
#: pedagogy/templates/pedagogy/ue_detail.jinja pedagogy/tests/tests.py
|
||||||
|
msgid ""
|
||||||
|
"You already posted a comment on this UE. If you want to comment again, "
|
||||||
|
"please modify or delete your previous comment."
|
||||||
|
msgstr ""
|
||||||
|
"Vous avez déjà commenté cette UE. Si vous voulez de nouveau commenter, "
|
||||||
|
"veuillez modifier ou supprimer votre commentaire précédent."
|
||||||
|
|
||||||
|
#: pedagogy/templates/pedagogy/ue_detail.jinja
|
||||||
|
msgid "Leave comment"
|
||||||
|
msgstr "Laisser un commentaire"
|
||||||
|
|
||||||
|
#: pedagogy/templates/pedagogy/ue_detail.jinja
|
||||||
|
#: trombi/templates/trombi/export.jinja
|
||||||
|
msgid "Comments"
|
||||||
|
msgstr "Commentaires"
|
||||||
|
|
||||||
|
#: pedagogy/templates/pedagogy/ue_detail.jinja
|
||||||
|
msgid "This comment has been reported"
|
||||||
|
msgstr "Ce commentaire a été signalé"
|
||||||
|
|
||||||
|
#: pedagogy/templates/pedagogy/ue_detail.jinja
|
||||||
|
msgid "Report this comment"
|
||||||
|
msgstr "Signaler ce commentaire"
|
||||||
|
|
||||||
#: pedagogy/templates/pedagogy/ue_edit.jinja
|
#: pedagogy/templates/pedagogy/ue_edit.jinja
|
||||||
msgid "Edit UE"
|
msgid "Edit UE"
|
||||||
msgstr "Éditer l'UE"
|
msgstr "Éditer l'UE"
|
||||||
|
|||||||
@@ -1,22 +1,52 @@
|
|||||||
@import "core/static/core/devices";
|
@import "core/static/core/devices";
|
||||||
@import "core/static/core/colors";
|
@import "core/static/core/colors";
|
||||||
|
|
||||||
|
|
||||||
|
$pedagogy-blue: #1bb9ea;
|
||||||
$pedagogy-orange: #ea7900;
|
$pedagogy-orange: #ea7900;
|
||||||
|
$pedagogy-hover-blue: #0e97ce;
|
||||||
|
$pedagogy-light-blue: #caf0ff;
|
||||||
$pedagogy-white-text: #f0f0f0;
|
$pedagogy-white-text: #f0f0f0;
|
||||||
|
|
||||||
.pedagogy {
|
.pedagogy {
|
||||||
.star-not-checked {
|
&.star-not-checked {
|
||||||
color: lightgray;
|
color: #f7f7f7;
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.star-checked {
|
&.star-checked {
|
||||||
color: $pedagogy-orange;
|
color: $pedagogy-orange;
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.grade-without-star {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: $large-devices) {
|
||||||
|
&.star-not-checked {
|
||||||
|
margin-left: 5px;
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.star-checked {
|
||||||
|
margin-left: 5px;
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: $small-devices) {
|
||||||
|
&.grade-without-star {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.grade-with-star {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#ue-list {
|
#ue-list {
|
||||||
font-size: 1.1em;
|
font-size: 1.1em;
|
||||||
|
|
||||||
@@ -34,10 +64,12 @@ $pedagogy-white-text: #f0f0f0;
|
|||||||
}
|
}
|
||||||
|
|
||||||
#search_form {
|
#search_form {
|
||||||
|
|
||||||
.radio-guide fieldset {
|
.radio-guide fieldset {
|
||||||
input[type="checkbox"] {
|
input[type="checkbox"] {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
color: white;
|
color: white;
|
||||||
@@ -53,79 +85,80 @@ $pedagogy-white-text: #f0f0f0;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&#ue_detail {
|
#ue_detail {
|
||||||
.ue-infos {
|
color: #062f38;
|
||||||
display: flex;
|
|
||||||
gap: 2em;
|
.ue-quick-info-container {
|
||||||
flex-direction: row;
|
|
||||||
@media screen and (max-width: 700px) {
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.infos-column {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
gap: 1em;
|
|
||||||
min-width: 300px;
|
|
||||||
}
|
|
||||||
.info-container {
|
|
||||||
// Darken the background color just enough to make this part
|
|
||||||
// stand out a little, while not being too perceptible
|
|
||||||
background: darken($white-color, 1%);
|
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: 1fr 1fr;
|
grid-template-columns: 20% 20% 20% 20% auto;
|
||||||
border-radius: 5px;
|
grid-template-rows: auto auto;
|
||||||
padding: .75rem 1rem ;
|
grid-template-areas:
|
||||||
grid-gap: .5rem;
|
"hours-cm hours-td hours-tp hours-te hours-the"
|
||||||
@include shadow;
|
"department credit-type semester . .";
|
||||||
|
|
||||||
.info-container-item {
|
|
||||||
display: grid;
|
|
||||||
grid-column: span 2;
|
|
||||||
grid-template-rows: subgrid;
|
|
||||||
grid-template-columns: subgrid;
|
|
||||||
grid-column-gap: 1rem;
|
|
||||||
|
|
||||||
div {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
:first-child {
|
.department {
|
||||||
justify-content: right;
|
grid-area: department;
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
hr {
|
.credit-type {
|
||||||
grid-column: span 2;
|
grid-area: credit-type;
|
||||||
width: 50%;
|
}
|
||||||
margin: auto;
|
|
||||||
|
.semester {
|
||||||
|
grid-area: semester;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hours-cm {
|
||||||
|
grid-area: hours-cm;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hours-td {
|
||||||
|
grid-area: hours-td;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hours-tp {
|
||||||
|
grid-area: hours-tp;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hours-te {
|
||||||
|
grid-area: hours-te;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hours-the {
|
||||||
|
grid-area: hours-the;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leave-comment-not-allowed {
|
||||||
|
p {
|
||||||
|
text-align: center;
|
||||||
|
color: red;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.leave-comment {
|
.leave-comment {
|
||||||
.comment-form-content {
|
.leave-comment-grid-container {
|
||||||
display: flex;
|
display: grid;
|
||||||
gap: 2em;
|
grid-template-columns: 270px auto;
|
||||||
|
grid-template-rows: 100%;
|
||||||
|
grid-template-areas: "stars comment";
|
||||||
|
|
||||||
@media screen and (max-width: $large-devices) {
|
@media screen and (max-width: $large-devices) {
|
||||||
gap: 1em;
|
grid-template-columns: 100%;
|
||||||
flex-direction: column;
|
grid-template-rows: auto auto;
|
||||||
|
grid-template-areas:
|
||||||
|
"stars"
|
||||||
|
"comment";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.form-stars {
|
.form-stars {
|
||||||
flex: 0;
|
grid-area: stars;
|
||||||
min-width: 250px;
|
|
||||||
display: flex;
|
|
||||||
align-content: flex-start;
|
|
||||||
justify-content: center;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
gap: 1rem 2em;
|
|
||||||
height: unset;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.form-comment {
|
.form-comment {
|
||||||
flex: 2;
|
grid-area: comment;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ui-accordion-header-icon {
|
.ui-accordion-header-icon {
|
||||||
@@ -133,18 +166,45 @@ $pedagogy-white-text: #f0f0f0;
|
|||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type="submit"] {
|
.input-stars {
|
||||||
display: block;
|
margin-top: 20px;
|
||||||
margin-left: auto;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
summary {
|
.ue-details-container {
|
||||||
background: $pedagogy-orange;
|
display: grid;
|
||||||
|
grid-template-columns: 150px 130px auto;
|
||||||
|
grid-template-rows: 156px 1fr;
|
||||||
|
grid-template-areas:
|
||||||
|
"grade grade-stars ue-infos"
|
||||||
|
". . ue-infos";
|
||||||
|
|
||||||
|
@media screen and (max-width: $large-devices) {
|
||||||
|
grid-template-columns: 50% 50%;
|
||||||
|
grid-template-rows: auto auto;
|
||||||
|
grid-template-areas:
|
||||||
|
"grade grade-stars"
|
||||||
|
"ue-infos ue-infos";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.grade {
|
||||||
|
grid-area: grade;
|
||||||
color: $pedagogy-white-text;
|
color: $pedagogy-white-text;
|
||||||
@media screen and (min-width: $large-devices) {
|
background-color: $pedagogy-blue;
|
||||||
clip-path: polygon(0 0%, 0 100%, 30% 100%, 33% 0);
|
padding-right: 10px;
|
||||||
|
|
||||||
|
>p {
|
||||||
|
text-align: right;
|
||||||
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.grade-stars {
|
||||||
|
grid-area: grade-stars;
|
||||||
|
color: $pedagogy-white-text;
|
||||||
|
background-color: $pedagogy-blue;
|
||||||
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ue-infos {
|
.ue-infos {
|
||||||
@@ -152,61 +212,237 @@ $pedagogy-white-text: #f0f0f0;
|
|||||||
padding-left: 10px;
|
padding-left: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.comment-container {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 300px auto;
|
||||||
|
grid-template-rows: auto auto auto;
|
||||||
|
grid-template-areas:
|
||||||
|
"grade-block comment"
|
||||||
|
"grade-block info"
|
||||||
|
"comment-end-bar comment-end-bar";
|
||||||
|
margin-bottom: 30px;
|
||||||
|
margin-top: 10px;
|
||||||
|
|
||||||
|
@media screen and (max-width: $large-devices) {
|
||||||
|
grid-template-columns: auto;
|
||||||
|
grid-template-rows: auto auto auto auto;
|
||||||
|
grid-template-areas:
|
||||||
|
"grade-block"
|
||||||
|
"comment"
|
||||||
|
"info"
|
||||||
|
"comment-end-bar";
|
||||||
|
}
|
||||||
|
|
||||||
|
.grade-block {
|
||||||
|
grid-area: grade-block;
|
||||||
|
width: 300px;
|
||||||
|
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 150px 150px;
|
||||||
|
grid-template-rows: 156px auto;
|
||||||
|
grid-template-areas:
|
||||||
|
"grade-type grade-stars"
|
||||||
|
"grade-extension grade-extension";
|
||||||
|
grid-gap: 15px;
|
||||||
|
|
||||||
|
clip-path: polygon(0 0, 0 100%, 100% 100%, 100% 30px, 270px 0);
|
||||||
|
align-items: start;
|
||||||
|
|
||||||
|
background-color: $pedagogy-blue;
|
||||||
|
|
||||||
|
@media screen and (max-width: $large-devices) {
|
||||||
|
grid-template-columns: 50% auto;
|
||||||
|
grid-template-rows: auto;
|
||||||
|
grid-template-areas: "grade-type grade-stars";
|
||||||
|
width: auto;
|
||||||
|
clip-path: none;
|
||||||
|
align-content: space-evenly;
|
||||||
|
align-items: end;
|
||||||
|
}
|
||||||
|
|
||||||
|
.grade-extension {
|
||||||
|
grid-area: grade-extension;
|
||||||
|
background-color: $pedagogy-blue;
|
||||||
|
}
|
||||||
|
|
||||||
|
.grade-type {
|
||||||
|
grid-area: grade-type;
|
||||||
|
|
||||||
|
>p {
|
||||||
|
color: $pedagogy-white-text;
|
||||||
|
font-weight: bold;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.grade-stars {
|
||||||
|
grid-area: grade-stars;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.comment {
|
.comment {
|
||||||
padding: 15px;
|
grid-area: comment;
|
||||||
margin: 20px;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
gap: 10px;
|
|
||||||
background: $primary-neutral-light-color;
|
|
||||||
border-radius: 5px;
|
|
||||||
border: 1px darken($secondary-neutral-light-color, 10%) solid;
|
|
||||||
|
|
||||||
&.reported {
|
display: grid;
|
||||||
border: #fc8181 1px solid;
|
grid-template-columns: auto;
|
||||||
|
grid-template-rows: auto auto;
|
||||||
|
grid-template-areas:
|
||||||
|
"anchor"
|
||||||
|
"markdown";
|
||||||
|
|
||||||
|
@media screen and (max-width: $large-devices) {
|
||||||
|
border-left: solid;
|
||||||
|
border-right: solid;
|
||||||
|
border-color: $pedagogy-blue;
|
||||||
}
|
}
|
||||||
|
|
||||||
.comment-header {
|
.anchor {
|
||||||
display: flex;
|
grid-area: anchor;
|
||||||
gap: 20px;
|
text-align: right;
|
||||||
|
margin-right: 15px;
|
||||||
img {
|
|
||||||
width: 50px;
|
|
||||||
height: 50px;
|
|
||||||
border-radius: 50%;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.comment-metadata {
|
.markdown {
|
||||||
display: flex;
|
grid-area: markdown;
|
||||||
flex-direction: column;
|
|
||||||
justify-content: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.comment-options {
|
min-height: 139px;
|
||||||
flex: 2;
|
margin-top: 0;
|
||||||
display: flex;
|
margin-right: 0;
|
||||||
justify-content: right;
|
padding: 10px;
|
||||||
gap: 15px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.comment-stars {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-evenly;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
gap: 1em 2em;
|
|
||||||
padding: 1.5em;
|
|
||||||
border-top: 0.0625rem grey dotted;
|
|
||||||
border-bottom: 0.0625rem grey dotted;
|
|
||||||
}
|
|
||||||
|
|
||||||
.comment-content {
|
|
||||||
text-align: justify;
|
text-align: justify;
|
||||||
padding: .5em 20px 1em;
|
overflow: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.info {
|
||||||
|
grid-area: info;
|
||||||
|
padding-bottom: 10px;
|
||||||
|
|
||||||
|
@media screen and (max-width: $large-devices) {
|
||||||
|
border-left: solid;
|
||||||
|
border-right: solid;
|
||||||
|
border-color: $pedagogy-blue;
|
||||||
|
}
|
||||||
|
|
||||||
|
.status-reported {
|
||||||
|
color: red;
|
||||||
|
float: left;
|
||||||
|
padding-left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.action {
|
||||||
|
float: right;
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.comment-end-bar {
|
||||||
|
grid-area: comment-end-bar;
|
||||||
|
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 33% auto auto;
|
||||||
|
grid-template-rows: 2.5em;
|
||||||
|
grid-template-areas: "author date report";
|
||||||
|
|
||||||
|
background-color: $pedagogy-blue;
|
||||||
|
margin-top: -1px;
|
||||||
|
|
||||||
|
@media screen and (max-width: $large-devices) {
|
||||||
|
grid-template-columns: auto;
|
||||||
|
grid-template-rows: auto auto auto;
|
||||||
|
grid-template-areas:
|
||||||
|
"report"
|
||||||
|
"date"
|
||||||
|
"author";
|
||||||
|
margin-top: 0;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.author {
|
||||||
|
grid-area: author;
|
||||||
|
|
||||||
|
padding-top: 6px;
|
||||||
|
padding-left: 20px;
|
||||||
|
|
||||||
|
background-color: $pedagogy-orange;
|
||||||
|
clip-path: polygon(0 10px, 0 100%, 350px 200%, 300px 10px);
|
||||||
|
|
||||||
|
@media screen and (max-width: $large-devices) {
|
||||||
|
clip-path: none;
|
||||||
|
padding: 0;
|
||||||
|
padding-bottom: 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: $pedagogy-white-text;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: $pedagogy-hover-blue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.date {
|
||||||
|
grid-area: date;
|
||||||
|
color: $pedagogy-white-text;
|
||||||
|
|
||||||
|
@media screen and (max-width: $large-devices) {
|
||||||
|
padding-bottom: 7px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.report {
|
||||||
|
grid-area: report;
|
||||||
|
justify-self: right;
|
||||||
|
padding-right: 30px;
|
||||||
|
padding-left: 30px;
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: $pedagogy-white-text;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: $pedagogy-hover-blue;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: $large-devices) {
|
||||||
|
text-align: center;
|
||||||
|
justify-self: inherit;
|
||||||
|
padding-bottom: 7px;
|
||||||
|
background-color: $white-color;
|
||||||
|
|
||||||
|
border-left: solid;
|
||||||
|
border-right: solid;
|
||||||
|
border-color: $pedagogy-blue;
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: $black-color;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
details.accordion summary {
|
||||||
|
|
||||||
|
background: $pedagogy-orange !important;
|
||||||
|
color: $pedagogy-white-text !important;
|
||||||
|
clip-path: polygon(0 0%, 0 100%, 30% 100%, 33% 0);
|
||||||
|
|
||||||
|
@media screen and (max-width: $large-devices) {
|
||||||
|
clip-path: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
details.accordion>.accordion-content {
|
||||||
|
background-color: $white-color;
|
||||||
|
border-color: $pedagogy-orange;
|
||||||
|
border-right: none;
|
||||||
|
}
|
||||||
|
|
||||||
.buttons {
|
.buttons {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|||||||
@@ -11,39 +11,44 @@
|
|||||||
hx-disabled-elt="find input[type='submit']"
|
hx-disabled-elt="find input[type='submit']"
|
||||||
>
|
>
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
|
<div class="leave-comment-grid-container">
|
||||||
|
<div class="form-stars">
|
||||||
{{ form.non_field_errors() }}
|
{{ form.non_field_errors() }}
|
||||||
{{ form.author.errors }}
|
{{ form.author.errors }}
|
||||||
{{ form.ue.errors }}
|
{{ form.ue.errors }}
|
||||||
|
|
||||||
{{ form.author }}
|
{{ form.author }}
|
||||||
{{ form.ue }}
|
{{ form.ue }}
|
||||||
<div class="comment-form-content">
|
|
||||||
<div class="form-stars">
|
<div class="input-stars">
|
||||||
<fieldset>
|
<label for="{{ form.grade_global.id_for_label }}">{{ form.grade_global.label }} :</label>
|
||||||
<legend>{{ form.grade_global.label }} :</legend>
|
|
||||||
{{ form.grade_global.errors }}
|
{{ form.grade_global.errors }}
|
||||||
{{ form.grade_global }}
|
{{ form.grade_global }}
|
||||||
</fieldset>
|
</div>
|
||||||
<fieldset>
|
|
||||||
<legend>{{ form.grade_utility.label }} :</legend>
|
<div class="input-stars">
|
||||||
|
<label for="{{ form.grade_utility.id_for_label }}">{{ form.grade_utility.label }} :</label>
|
||||||
{{ form.grade_utility.errors }}
|
{{ form.grade_utility.errors }}
|
||||||
{{ form.grade_utility }}
|
{{ form.grade_utility }}
|
||||||
</fieldset>
|
</div>
|
||||||
<fieldset>
|
|
||||||
<legend>{{ form.grade_interest.label }} :</legend>
|
<div class="input-stars">
|
||||||
|
<label for="{{ form.grade_interest.id_for_label }}">{{ form.grade_interest.label }} :</label>
|
||||||
{{ form.grade_interest.errors }}
|
{{ form.grade_interest.errors }}
|
||||||
{{ form.grade_interest }}
|
{{ form.grade_interest }}
|
||||||
</fieldset>
|
</div>
|
||||||
<fieldset>
|
|
||||||
<legend>{{ form.grade_teaching.label }} :</legend>
|
<div class="input-stars">
|
||||||
|
<label for="{{ form.grade_teaching.id_for_label }}">{{ form.grade_teaching.label }} :</label>
|
||||||
{{ form.grade_teaching.errors }}
|
{{ form.grade_teaching.errors }}
|
||||||
{{ form.grade_teaching }}
|
{{ form.grade_teaching }}
|
||||||
</fieldset>
|
</div>
|
||||||
<fieldset>
|
|
||||||
<legend>{{ form.grade_work_load.label }} :</legend>
|
<div class="input-stars">
|
||||||
|
<label for="{{ form.grade_work_load.id_for_label }}">{{ form.grade_work_load.label }} :</label>
|
||||||
{{ form.grade_work_load.errors }}
|
{{ form.grade_work_load.errors }}
|
||||||
{{ form.grade_work_load }}
|
{{ form.grade_work_load }}
|
||||||
</fieldset>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-comment">
|
<div class="form-comment">
|
||||||
<label for="{{ form.comment.id_for_label }}">{{ form.comment.label }} :</label>
|
<label for="{{ form.comment.id_for_label }}">{{ form.comment.label }} :</label>
|
||||||
@@ -51,7 +56,9 @@
|
|||||||
{{ form.comment }}
|
{{ form.comment }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p><input type="submit" class="btn btn-blue"/></p>
|
<div class="buttons">
|
||||||
|
<input type="submit" value="{% trans %}Comment{% endtrans %}" />
|
||||||
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
{% if form.is_creation %}
|
{% if form.is_creation %}
|
||||||
|
|||||||
@@ -1,129 +0,0 @@
|
|||||||
{% from "pedagogy/macros.jinja" import display_star %}
|
|
||||||
{% from "core/macros.jinja" import user_profile_link %}
|
|
||||||
|
|
||||||
{% if comments %}
|
|
||||||
<h2>{% trans %}Comments{% endtrans %}</h2>
|
|
||||||
<br>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<section>
|
|
||||||
{%- for comment in comments -%}
|
|
||||||
<article
|
|
||||||
id="comment-{{ comment.id }}"
|
|
||||||
class="comment {% if comment.is_reported %}reported{% endif %}"
|
|
||||||
>
|
|
||||||
{% if comment.is_reported %}
|
|
||||||
<div class="alert alert-red">
|
|
||||||
<div class="alert-main">
|
|
||||||
<h5 class="alert-title margin-bottom">
|
|
||||||
{% trans %}This comment has been reported{% endtrans %}
|
|
||||||
</h5>
|
|
||||||
<p>{% trans %}It will be hidden until moderated.{% endtrans %}</p>
|
|
||||||
{% if user.has_perm("pedagogy.view_uecommentreport") %}
|
|
||||||
{% for report in comment.reports.all() %}
|
|
||||||
<div class="markdown margin-bottom">
|
|
||||||
<blockquote>
|
|
||||||
<em>{{ report.reporter.get_display_name() }}</em>
|
|
||||||
{{ report.reason|markdown }}
|
|
||||||
</blockquote>
|
|
||||||
</div>
|
|
||||||
{% endfor %}
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
{% if user.has_perm("pedagogy.delete_uecomment") %}
|
|
||||||
<div class="alert-aside">
|
|
||||||
<a
|
|
||||||
href="{{ url("pedagogy:comment_delete", comment_id=comment.id) }}"
|
|
||||||
class="btn btn-red"
|
|
||||||
>
|
|
||||||
<i class="fa fa-trash"></i>{% trans %}Delete{% endtrans %}
|
|
||||||
</a>
|
|
||||||
<a href="{{ url("pedagogy:moderation") }}" class="btn btn-green">
|
|
||||||
<i class="fa fa-check"></i>{% trans %}Moderate{% endtrans %}
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
<div class="comment-header">
|
|
||||||
<img
|
|
||||||
{% if comment.author.avatar_pict %}
|
|
||||||
src="{{ comment.author.avatar_pict.get_download_url() }}"
|
|
||||||
{% elif comment.author.profile_pict %}
|
|
||||||
src="{{ comment.author.profile_pict.get_download_url() }}"
|
|
||||||
{% else %}
|
|
||||||
src="{{ static("core/img/unknown.jpg") }}"
|
|
||||||
{% endif %}
|
|
||||||
alt="{% trans %}Profile{% endtrans %}"
|
|
||||||
/>
|
|
||||||
<div class="comment-metadata">
|
|
||||||
<a href="{{ comment.author.get_absolute_url() }}">
|
|
||||||
<strong>{{ comment.author.get_display_name() }}</strong>
|
|
||||||
</a>
|
|
||||||
<time datetime="{{ comment.publish_date.isoformat(timespec="seconds") }}">
|
|
||||||
{{ comment.publish_date|localtime|date(DATETIME_FORMAT) }}
|
|
||||||
{{ comment.publish_date|localtime|time(DATETIME_FORMAT) }}
|
|
||||||
</time>
|
|
||||||
</div>
|
|
||||||
<div class="comment-options">
|
|
||||||
{% if user.can_edit(comment) %}
|
|
||||||
<a
|
|
||||||
class="clickable"
|
|
||||||
hx-get="{{ url('pedagogy:comment_update', comment_id=comment.id) }}"
|
|
||||||
hx-swap="outerHTML"
|
|
||||||
hx-target="#comment-{{ comment.id }}"
|
|
||||||
tooltip="{% trans %}Edit{% endtrans %}"
|
|
||||||
>
|
|
||||||
<i class="fa fa-pencil edit-action"></i>
|
|
||||||
</a>
|
|
||||||
{% endif %}
|
|
||||||
{% if not comment.is_reported %}
|
|
||||||
<a
|
|
||||||
class="clickable"
|
|
||||||
hx-get="{{ url('pedagogy:comment_report', comment_id=comment.id) }}"
|
|
||||||
hx-swap="outerHTML"
|
|
||||||
hx-target="#comment-{{ comment.id }}"
|
|
||||||
tooltip="{% trans %}Report{% endtrans %}"
|
|
||||||
>
|
|
||||||
<i class="fa fa-exclamation delete-action"></i>
|
|
||||||
</a>
|
|
||||||
{% endif %}
|
|
||||||
{% if user.has_perm("pedagogy.delete_uecomment") %}
|
|
||||||
<a
|
|
||||||
href="{{ url("pedagogy:comment_delete", comment_id=comment.id) }}"
|
|
||||||
tooltip="{% trans %}Delete{% endtrans %}"
|
|
||||||
>
|
|
||||||
<i class="fa fa-trash-can delete-action"></i>
|
|
||||||
</a>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="comment-stars">
|
|
||||||
<div>
|
|
||||||
<span>{% trans %}Global grade{% endtrans %}</span>
|
|
||||||
<span>{{ display_star(comment.grade_global) }}</span>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<span>{% trans %}Utility{% endtrans %}</span>
|
|
||||||
<span>{{ display_star(comment.grade_utility) }}</span>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<span>{% trans %}Interest{% endtrans %}</span>
|
|
||||||
<span>{{ display_star(comment.grade_interest) }}</span>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<span>{% trans %}Teaching{% endtrans %}</span>
|
|
||||||
<span>{{ display_star(comment.grade_teaching) }}</span>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<span>{% trans %}Workload{% endtrans %}</span>
|
|
||||||
<span>{{ display_star(comment.grade_work_load) }}</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="comment-content">
|
|
||||||
{{ comment.comment|markdown }}
|
|
||||||
</div>
|
|
||||||
</article>
|
|
||||||
{%- endfor -%}
|
|
||||||
</section>
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
<div class="info-container-item">
|
|
||||||
<span>{% trans %}Global grade{% endtrans %}</span>
|
|
||||||
<span>{{ display_star(object.grade_global_average) }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="info-container-item">
|
|
||||||
<span>{% trans %}Utility{% endtrans %}</span>
|
|
||||||
<span>{{ display_star(object.grade_utility_average) }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="info-container-item">
|
|
||||||
<span>{% trans %}Interest{% endtrans %}</span>
|
|
||||||
<span>{{ display_star(object.grade_interest_average) }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="info-container-item">
|
|
||||||
<span>{% trans %}Teaching{% endtrans %}</span>
|
|
||||||
<span>{{ display_star(object.grade_teaching_average) }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="info-container-item">
|
|
||||||
<span>{% trans %}Workload{% endtrans %}</span>
|
|
||||||
<span>{{ display_star(object.grade_work_load_average) }}</span>
|
|
||||||
</div>
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
{# A few hx-partials for swapping a few parts of the main ue_detail.jinja #}
|
|
||||||
|
|
||||||
{% from "pedagogy/macros.jinja" import display_star %}
|
|
||||||
|
|
||||||
<hx-partial id="ue-grade">
|
|
||||||
{% include "pedagogy/fragments/ue_detail/grade.jinja" %}
|
|
||||||
</hx-partial>
|
|
||||||
|
|
||||||
<hx-partial id="comment-form">
|
|
||||||
{% if object.has_user_already_commented(user) %}
|
|
||||||
<em>
|
|
||||||
{% trans trimmed %}
|
|
||||||
You already posted a comment on this UE.
|
|
||||||
If you want to comment again, please modify or delete your previous comment.
|
|
||||||
{% endtrans %}
|
|
||||||
</em>
|
|
||||||
<br>
|
|
||||||
{% elif user.has_perm("pedagogy.add_uecomment") %}
|
|
||||||
{{ add_comment_form }}
|
|
||||||
{% endif %}
|
|
||||||
</hx-partial>
|
|
||||||
|
|
||||||
<hx-partial id="comments" hx-swap="innerMorph">
|
|
||||||
{% include "pedagogy/fragments/ue_detail/comments.jinja" %}
|
|
||||||
</hx-partial>
|
|
||||||
@@ -0,0 +1,91 @@
|
|||||||
|
{% from "pedagogy/macros.jinja" import display_star %}
|
||||||
|
{% from "core/macros.jinja" import user_profile_link %}
|
||||||
|
|
||||||
|
{% if comments %}
|
||||||
|
<h2>{% trans %}Comments{% endtrans %}</h2>
|
||||||
|
<br>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<section>
|
||||||
|
{% for comment in comments %}
|
||||||
|
|
||||||
|
<div id="comment-{{ comment.id }}" class="comment-container">
|
||||||
|
|
||||||
|
<div class="grade-block">
|
||||||
|
<div class="grade-type">
|
||||||
|
<p>{% trans %}Global grade{% endtrans %}</p>
|
||||||
|
<p>{% trans %}Utility{% endtrans %}</p>
|
||||||
|
<p>{% trans %}Interest{% endtrans %}</p>
|
||||||
|
<p>{% trans %}Teaching{% endtrans %}</p>
|
||||||
|
<p>{% trans %}Work load{% endtrans %}</p>
|
||||||
|
</div>
|
||||||
|
<div class="grade-stars">
|
||||||
|
<p>{{ display_star(comment.grade_global) }}</p>
|
||||||
|
<p>{{ display_star(comment.grade_utility) }}</p>
|
||||||
|
<p>{{ display_star(comment.grade_interest) }}</p>
|
||||||
|
<p>{{ display_star(comment.grade_teaching) }}</p>
|
||||||
|
<p>{{ display_star(comment.grade_work_load) }}</p>
|
||||||
|
</div>
|
||||||
|
<div class="grade-extension"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="comment">
|
||||||
|
<div class="anchor">
|
||||||
|
<a href="{{ url('pedagogy:ue_detail', ue_id=ue.id) }}#comment-{{ comment.id }}"><i class="fa fa-paragraph"></i></a>
|
||||||
|
</div>
|
||||||
|
{{ comment.comment|markdown }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="info">
|
||||||
|
{% if comment.is_reported %}
|
||||||
|
<p class="status-reported">
|
||||||
|
{% trans %}This comment has been reported{% endtrans %}
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if comment.author_id == user.id or user.has_perm("pedagogy.change_comment") %}
|
||||||
|
<button
|
||||||
|
class="btn btn-orange action"
|
||||||
|
hx-get="{{ url('pedagogy:comment_update', comment_id=comment.id) }}"
|
||||||
|
hx-swap="outerHTML"
|
||||||
|
hx-target="#comment-{{ comment.id }}"
|
||||||
|
>
|
||||||
|
<i class="fa fa-pencil"></i> {% trans %}Edit{% endtrans %}
|
||||||
|
</button>
|
||||||
|
{% endif %}
|
||||||
|
{% if comment.author_id == user.id or user.has_perm("pedagogy.delete_comment") %}
|
||||||
|
<form class="action"
|
||||||
|
hx-post="{{ url('pedagogy:comment_delete', comment_id=comment.id) }}"
|
||||||
|
hx-confirm='{% trans obj=object %}Are you sure you want to delete "{{ obj }}"?{% endtrans %}'
|
||||||
|
hx-swap="outerHTML"
|
||||||
|
hx-target="#comment-{{ comment.id }}"
|
||||||
|
>
|
||||||
|
{% csrf_token %}
|
||||||
|
<button class="btn btn-red action">
|
||||||
|
<i class="fa fa-trash-can"></i> {% trans %}Delete{% endtrans %}
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="comment-end-bar">
|
||||||
|
<div class="report">
|
||||||
|
<p>
|
||||||
|
<a
|
||||||
|
hx-get="{{ url('pedagogy:comment_report', comment_id=comment.id) }}"
|
||||||
|
hx-swap="outerHTML"
|
||||||
|
hx-target="#comment-{{ comment.id }}"
|
||||||
|
>
|
||||||
|
{% trans %}Report this comment{% endtrans %}
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="date"><p>{{ comment.publish_date.strftime('%d/%m/%Y') }}</p></div>
|
||||||
|
|
||||||
|
<div class="author"><p>{{ user_profile_link(comment.author) }}</p></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</section>
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
{% if object.has_user_already_commented(user) %}
|
||||||
|
<div class="leave-comment-not-allowed">
|
||||||
|
<p>{% trans %}You already posted a comment on this UE. If you want to comment again, please modify or delete your previous comment.{% endtrans %}</p>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if not object.has_user_already_commented(user) and user.has_perm("pedagogy.add_uecomment") %}
|
||||||
|
{{ add_comment_form }}
|
||||||
|
{% endif %}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
<div class="ue-details-container">
|
||||||
|
<div class="grade">
|
||||||
|
<p>{% trans %}Global grade{% endtrans %}</p>
|
||||||
|
<p>{% trans %}Utility{% endtrans %}</p>
|
||||||
|
<p>{% trans %}Interest{% endtrans %}</p>
|
||||||
|
<p>{% trans %}Teaching{% endtrans %}</p>
|
||||||
|
<p>{% trans %}Work load{% endtrans %}</p>
|
||||||
|
</div>
|
||||||
|
<div class="grade-stars">
|
||||||
|
<p>{{ display_star(object.grade_global_average) }}</p>
|
||||||
|
<p>{{ display_star(object.grade_utility_average) }}</p>
|
||||||
|
<p>{{ display_star(object.grade_interest_average) }}</p>
|
||||||
|
<p>{{ display_star(object.grade_teaching_average) }}</p>
|
||||||
|
<p>{{ display_star(object.grade_work_load_average) }}</p>
|
||||||
|
</div>
|
||||||
|
<div class="ue-infos">
|
||||||
|
<p><b>{% trans %}Objectives{% endtrans %}</b></p>
|
||||||
|
<p>{{ object.objectives|markdown }}</p>
|
||||||
|
<p><b>{% trans %}Program{% endtrans %}</b></p>
|
||||||
|
<p>{{ object.program|markdown }}</p>
|
||||||
|
<p><b>{% trans %}Earned skills{% endtrans %}</b></p>
|
||||||
|
<p>{{ object.skills|markdown }}</p>
|
||||||
|
<p><b>{% trans %}Key concepts{% endtrans %}</b></p>
|
||||||
|
<p>{{ object.key_concepts|markdown }}</p>
|
||||||
|
<p><b>{% trans %}UE manager: {% endtrans %}</b>{{ object.manager }}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
{% macro display_star(grade) -%}
|
{% macro display_star(grade) -%}
|
||||||
|
|
||||||
{% if grade >= 0 %}
|
{% if grade >= 0 %}
|
||||||
{% for i in range(5) %}
|
{% for i in range(5) %}
|
||||||
{% if i <= grade %}
|
{% if i <= grade %}
|
||||||
@@ -7,7 +8,9 @@
|
|||||||
<span class="fa-solid fa-star pedagogy star-not-checked grade-with-star"></span>
|
<span class="fa-solid fa-star pedagogy star-not-checked grade-with-star"></span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
<span class="pedagogy grade-without-star">{{ grade }}/5</span>
|
||||||
{% else %}
|
{% else %}
|
||||||
<span class="grade-text"> {% trans %} not rated {% endtrans %} </span>
|
<span class="grade-text"> {% trans %} not rated {% endtrans %} </span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{%- endmacro %}
|
{%- endmacro %}
|
||||||
|
|||||||
@@ -1,6 +1,21 @@
|
|||||||
{% extends "core/base.jinja" %}
|
|
||||||
{% from "pedagogy/macros.jinja" import display_star %}
|
{% from "pedagogy/macros.jinja" import display_star %}
|
||||||
|
|
||||||
|
{% if is_fragment %}
|
||||||
|
|
||||||
|
<hx-partial id="ue-grade">
|
||||||
|
{% include "pedagogy/fragments/ue_details/grade.jinja" %}
|
||||||
|
</hx-partial>
|
||||||
|
|
||||||
|
<hx-partial id="comment-form">
|
||||||
|
{% include "pedagogy/fragments/ue_details/form.jinja" %}
|
||||||
|
</hx-partial>
|
||||||
|
|
||||||
|
<hx-partial id="comments" hx-swap="innerMorph">
|
||||||
|
{% include "pedagogy/fragments/ue_details/comments.jinja" %}
|
||||||
|
</hx-partial>
|
||||||
|
|
||||||
|
{% else %}
|
||||||
|
{% extends "core/base.jinja" %}
|
||||||
|
|
||||||
{% block additional_css %}
|
{% block additional_css %}
|
||||||
<link rel="stylesheet" href="{{ static('pedagogy/css/pedagogy.scss') }}">
|
<link rel="stylesheet" href="{{ static('pedagogy/css/pedagogy.scss') }}">
|
||||||
@@ -11,86 +26,66 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<h1>{{ object.code }}</h1>
|
|
||||||
<h2 class="margin-bottom">{{ object.title }}</h2>
|
<div class="pedagogy">
|
||||||
<div class="pedagogy" id="ue_detail">
|
<div id="ue_detail">
|
||||||
<div class="ue-infos">
|
<button onclick='(function(){
|
||||||
<div class="infos-column">
|
// If comes from the guide page, go back with history
|
||||||
<aside class="info-container">
|
if (document.referrer.replace(/\?(.+)/gm,"").endsWith(`{{ url("pedagogy:guide") }}`)){
|
||||||
<div class="info-container-item">
|
window.history.back();
|
||||||
<div>{% trans %}Category{% endtrans %}</div>
|
return;
|
||||||
<div>{{ object.credit_type }}</div>
|
}
|
||||||
|
// Simply goes to the guide page
|
||||||
|
window.location.href = `{{ url("pedagogy:guide") }}`;
|
||||||
|
})()' hidden>{% trans %}Back{% endtrans %}</button>
|
||||||
|
|
||||||
|
<h1>{{ object.code }} - {{ object.title }}</h1>
|
||||||
|
<br>
|
||||||
|
<div class="ue-quick-info-container">
|
||||||
|
<div class="hours-cm">
|
||||||
|
<b>{% trans %}CM: {% endtrans %}</b>{{ object.hours_CM }}
|
||||||
</div>
|
</div>
|
||||||
<div class="info-container-item">
|
<div class="hours-td">
|
||||||
<div>{% trans %}Credits{% endtrans %}</div>
|
<b>{% trans %}TD: {% endtrans %}</b>{{ object.hours_TD }}
|
||||||
<div>{{ object.credits }}</div>
|
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
<div class="hours-tp">
|
||||||
<div class="info-container-item">
|
<b>{% trans %}TP: {% endtrans %}</b>{{ object.hours_TP }}
|
||||||
<div>Cours magistraux</div>
|
|
||||||
<div>{{ object.hours_CM }}h</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="info-container-item">
|
<div class="hours-te">
|
||||||
<div>Travaux dirigés</div>
|
<b>{% trans %}TE: {% endtrans %}</b>{{ object.hours_TE }}
|
||||||
<div>{{ object.hours_TD }}h</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="info-container-item">
|
<div class="hours-the">
|
||||||
<div>Travaux pratiques</div>
|
<b>{% trans %}THE: {% endtrans %}</b>{{ object.hours_THE }}
|
||||||
<div>{{ object.hours_TP }}h</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="info-container-item">
|
|
||||||
<div>Travail hors encadrement</div>
|
<div class="department">
|
||||||
<div>{{ object.hours_THE }}h</div>
|
{{ object.department }}
|
||||||
</div>
|
</div>
|
||||||
<div class="info-container-item">
|
<div class="credit-type">
|
||||||
<div>Cours magistraux</div>
|
{{ object.credit_type }}
|
||||||
<div>{{ object.hours_TE }}h</div>
|
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
<div class="semester">
|
||||||
<div class="info-container-item">
|
{{ object.get_semester_display() }}
|
||||||
<div>{% trans %}Availability{% endtrans %}</div>
|
|
||||||
<div>{{ object.get_semester_display() }}</div>
|
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
|
||||||
<div class="info-container-item">
|
|
||||||
<div>{% trans %}Manager{% endtrans %}</div>
|
|
||||||
<div>{{ object.manager }}</div>
|
|
||||||
</div>
|
</div>
|
||||||
</aside>
|
|
||||||
<aside class="info-container" id="ue-grade">
|
<br>
|
||||||
{% include "pedagogy/fragments/ue_detail/grade.jinja" %}
|
|
||||||
</aside>
|
<div id="ue-grade">
|
||||||
</div>
|
{% include "pedagogy/fragments/ue_details/grade.jinja" %}
|
||||||
<section class="ue-main-infos">
|
|
||||||
<h3>{% trans %}Objectives{% endtrans %}</h3>
|
|
||||||
<p>{{ object.objectives|markdown }}</p>
|
|
||||||
<h3>{% trans %}Program{% endtrans %}</h3>
|
|
||||||
<p>{{ object.program|markdown }}</p>
|
|
||||||
<h3>{% trans %}Earned skills{% endtrans %}</h3>
|
|
||||||
<p>{{ object.skills|markdown }}</p>
|
|
||||||
<h3>{% trans %}Key concepts{% endtrans %}</h3>
|
|
||||||
<p>{{ object.key_concepts|markdown }}</p>
|
|
||||||
</section>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
<div id="comment-form">
|
<div id="comment-form">
|
||||||
{% if object.has_user_already_commented(user) %}
|
{% include "pedagogy/fragments/ue_details/form.jinja" %}
|
||||||
<em>
|
|
||||||
{% trans trimmed %}
|
|
||||||
You already posted a comment on this UE.
|
|
||||||
If you want to comment again, please modify or delete your previous comment.
|
|
||||||
{% endtrans %}
|
|
||||||
</em>
|
|
||||||
<br>
|
|
||||||
{% elif user.has_perm("pedagogy.add_uecomment") %}
|
|
||||||
{{ add_comment_form }}
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="comments">
|
<div id="comments">
|
||||||
{% include "pedagogy/fragments/ue_detail/comments.jinja" %}
|
{% include "pedagogy/fragments/ue_details/comments.jinja" %}
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
{% endif %}
|
||||||
|
|||||||
+7
-10
@@ -88,19 +88,16 @@ class UEDetailView(
|
|||||||
|
|
||||||
model = UE
|
model = UE
|
||||||
pk_url_kwarg = "ue_id"
|
pk_url_kwarg = "ue_id"
|
||||||
|
template_name = "pedagogy/ue_detail.jinja"
|
||||||
permission_required = "pedagogy.view_ue"
|
permission_required = "pedagogy.view_ue"
|
||||||
fragments = {"add_comment_form": UECommentCreateView}
|
fragments = {
|
||||||
|
"add_comment_form": UECommentCreateView,
|
||||||
def get_template_names(self) -> list[str]:
|
}
|
||||||
is_fragment = self.request.headers.get("HX-Request", False)
|
|
||||||
return (
|
|
||||||
["pedagogy/fragments/ue_detail/ue_detail.jinja"]
|
|
||||||
if is_fragment
|
|
||||||
else ["pedagogy/ue_detail.jinja"]
|
|
||||||
)
|
|
||||||
|
|
||||||
def get_fragment_data(self):
|
def get_fragment_data(self):
|
||||||
return {"add_comment_form": {"ue_id": self.object.id}}
|
return {
|
||||||
|
"add_comment_form": {"ue_id": self.object.id},
|
||||||
|
}
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
return super().get_context_data(**kwargs) | {
|
return super().get_context_data(**kwargs) | {
|
||||||
|
|||||||
@@ -417,6 +417,8 @@ SITH_FORUM_PAGE_LENGTH = 30
|
|||||||
SITH_SAS_ROOT_DIR_ID = env.int("SITH_SAS_ROOT_DIR_ID", default=4)
|
SITH_SAS_ROOT_DIR_ID = env.int("SITH_SAS_ROOT_DIR_ID", default=4)
|
||||||
SITH_SAS_IMAGES_PER_PAGE = 60
|
SITH_SAS_IMAGES_PER_PAGE = 60
|
||||||
|
|
||||||
|
SITH_CGU_FILE_ID = env.int("SITH_CGU_FILE_ID", default=5)
|
||||||
|
|
||||||
SITH_PROFILE_DEPARTMENTS = [
|
SITH_PROFILE_DEPARTMENTS = [
|
||||||
("TC", _("TC")),
|
("TC", _("TC")),
|
||||||
("IMSI", _("IMSI")),
|
("IMSI", _("IMSI")),
|
||||||
|
|||||||
Reference in New Issue
Block a user