Merge branch 'cyl' into 'master'

[COM] Make the news visible for non-authenticated user and birthday visible for subriber only

See merge request ae/Sith!225
This commit is contained in:
Antoine Bartuccio 2019-08-29 15:07:08 +02:00
commit d7b351a1aa
9 changed files with 112 additions and 94 deletions

View File

@ -0,0 +1,12 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.23 on 2019-08-18 17:00
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [("com", "0005_auto_20180318_2227")]
operations = [migrations.RemoveField(model_name="sith", name="index_page")]

View File

@ -45,7 +45,6 @@ class Sith(models.Model):
alert_msg = models.TextField(_("alert message"), default="", blank=True) alert_msg = models.TextField(_("alert message"), default="", blank=True)
info_msg = models.TextField(_("info message"), default="", blank=True) info_msg = models.TextField(_("info message"), default="", blank=True)
index_page = models.TextField(_("index page"), default="", blank=True)
weekmail_destinations = models.TextField(_("weekmail destinations"), default="") weekmail_destinations = models.TextField(_("weekmail destinations"), default="")
def is_owned_by(self, user): def is_owned_by(self, user):

View File

@ -40,22 +40,26 @@
<div id="birthdays"> <div id="birthdays">
<div id="birthdays_title">{% trans %}Birthdays{% endtrans %}</div> <div id="birthdays_title">{% trans %}Birthdays{% endtrans %}</div>
<div id="birthdays_content"> <div id="birthdays_content">
<ul class="birthdays_year"> {% if user.is_subscribed %}
{% for d in birthdays.dates('date_of_birth', 'year', 'DESC') %} <ul class="birthdays_year">
<li> {% for d in birthdays.dates('date_of_birth', 'year', 'DESC') %}
{% trans age=timezone.now().year - d.year %}{{ age }} year old{% endtrans %} <li>
<ul> {% trans age=timezone.now().year - d.year %}{{ age }} year old{% endtrans %}
{% for u in birthdays.filter(date_of_birth__year=d.year) %} <ul>
<li><a href="{{ u.get_absolute_url() }}">{{ u.get_short_name() }}</a></li> {% for u in birthdays.filter(date_of_birth__year=d.year) %}
{% endfor %} <li><a href="{{ u.get_absolute_url() }}">{{ u.get_short_name() }}</a></li>
{% endfor %}
</ul>
</li>
{% endfor %}
</ul> </ul>
</li> {% else %}
{% endfor %} <p>{% trans %}You need an up to date subscription to access this content{% endtrans %}</p>
</ul> {% endif %}
</div>
</div> </div>
</div> </div>
</div>
<div id="left_column" class="news_column"> <div id="left_column" class="news_column">

View File

@ -26,6 +26,9 @@ from django.test import TestCase
from django.conf import settings from django.conf import settings
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.core.management import call_command from django.core.management import call_command
from django.utils import html
from django.utils.translation import ugettext as _
from core.models import User, RealGroup from core.models import User, RealGroup
@ -74,3 +77,23 @@ class ComTest(TestCase):
"""<div id="info_box">\\n <div class="markdown"><h3>INFO: <strong>Caaaataaaapuuuulte!!!!</strong></h3>""" """<div id="info_box">\\n <div class="markdown"><h3>INFO: <strong>Caaaataaaapuuuulte!!!!</strong></h3>"""
in str(r.content) in str(r.content)
) )
def test_birthday_non_subscribed_user(self):
self.client.login(username="guy", password="plop")
response = self.client.get(reverse("core:index"))
self.assertContains(
response,
text=html.escape(
_("You need an up to date subscription to access this content")
),
)
def test_birthday_subscibed_user(self):
response = self.client.get(reverse("core:index"))
self.assertNotContains(
response,
text=html.escape(
_("You need an up to date subscription to access this content")
),
)

View File

@ -30,7 +30,6 @@ from club.views import MailingDeleteView
urlpatterns = [ urlpatterns = [
url(r"^sith/edit/alert$", AlertMsgEditView.as_view(), name="alert_edit"), url(r"^sith/edit/alert$", AlertMsgEditView.as_view(), name="alert_edit"),
url(r"^sith/edit/info$", InfoMsgEditView.as_view(), name="info_edit"), url(r"^sith/edit/info$", InfoMsgEditView.as_view(), name="info_edit"),
url(r"^sith/edit/index$", IndexEditView.as_view(), name="index_edit"),
url( url(
r"^sith/edit/weekmail_destinations$", r"^sith/edit/weekmail_destinations$",
WeekmailDestinationEditView.as_view(), WeekmailDestinationEditView.as_view(),

View File

@ -182,14 +182,6 @@ class InfoMsgEditView(ComEditView):
success_url = reverse_lazy("com:info_edit") success_url = reverse_lazy("com:info_edit")
class IndexEditView(ComEditView):
form_class = modelform_factory(
Sith, fields=["index_page"], widgets={"index_page": MarkdownInput}
)
current_tab = "index"
success_url = reverse_lazy("com:index_edit")
class WeekmailDestinationEditView(ComEditView): class WeekmailDestinationEditView(ComEditView):
fields = ["weekmail_destinations"] fields = ["weekmail_destinations"]
current_tab = "weekmail_destinations" current_tab = "weekmail_destinations"

View File

@ -1,9 +0,0 @@
{% extends "core/base.jinja" %}
{% block title %}
{% trans %}Welcome!{% endtrans %}
{% endblock %}
{% block content %}
{{ get_sith().index_page|markdown }}
{% endblock %}

View File

@ -40,11 +40,9 @@ from club.models import Club
def index(request, context=None): def index(request, context=None):
if request.user.is_authenticated(): from com.views import NewsListView
from com.views import NewsListView
return NewsListView.as_view()(request) return NewsListView.as_view()(request)
return render(request, "core/index.jinja")
class NotificationList(ListView): class NotificationList(ListView):

View File

@ -6,7 +6,7 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-07-08 22:46+0200\n" "POT-Creation-Date: 2019-08-17 18:22+0200\n"
"PO-Revision-Date: 2016-07-18\n" "PO-Revision-Date: 2016-07-18\n"
"Last-Translator: Skia <skia@libskia.so>\n" "Last-Translator: Skia <skia@libskia.so>\n"
"Language-Team: AE info <ae.info@utbm.fr>\n" "Language-Team: AE info <ae.info@utbm.fr>\n"
@ -136,7 +136,7 @@ msgid "date"
msgstr "date" msgstr "date"
#: accounting/models.py:270 counter/models.py:123 counter/models.py:616 #: accounting/models.py:270 counter/models.py:123 counter/models.py:616
#: pedagogy/models.py:220 stock/models.py:102 #: pedagogy/models.py:204 stock/models.py:102
msgid "comment" msgid "comment"
msgstr "commentaire" msgstr "commentaire"
@ -210,7 +210,7 @@ msgstr "Utilisateur"
msgid "Club" msgid "Club"
msgstr "Club" msgstr "Club"
#: accounting/models.py:315 core/views/user.py:296 #: accounting/models.py:315 core/views/user.py:297
msgid "Account" msgid "Account"
msgstr "Compte" msgstr "Compte"
@ -265,7 +265,7 @@ msgstr ""
"Vous devez fournir soit un type comptable simplifié ou un type comptable " "Vous devez fournir soit un type comptable simplifié ou un type comptable "
"standard" "standard"
#: accounting/models.py:442 counter/models.py:159 pedagogy/models.py:91 #: accounting/models.py:442 counter/models.py:159 pedagogy/models.py:46
msgid "code" msgid "code"
msgstr "code" msgstr "code"
@ -380,7 +380,7 @@ msgstr "Compte en banque : "
#: launderette/views.py:226 pedagogy/templates/pedagogy/guide.jinja:51 #: launderette/views.py:226 pedagogy/templates/pedagogy/guide.jinja:51
#: pedagogy/templates/pedagogy/guide.jinja:74 #: pedagogy/templates/pedagogy/guide.jinja:74
#: pedagogy/templates/pedagogy/guide.jinja:110 #: pedagogy/templates/pedagogy/guide.jinja:110
#: pedagogy/templates/pedagogy/uv_detail.jinja:178 #: pedagogy/templates/pedagogy/uv_detail.jinja:179
#: sas/templates/sas/album.jinja:26 sas/templates/sas/moderation.jinja:18 #: sas/templates/sas/album.jinja:26 sas/templates/sas/moderation.jinja:18
#: sas/templates/sas/picture.jinja:74 sas/templates/sas/picture.jinja:124 #: sas/templates/sas/picture.jinja:74 sas/templates/sas/picture.jinja:124
#: stock/templates/stock/stock_shopping_list.jinja:43 #: stock/templates/stock/stock_shopping_list.jinja:43
@ -391,7 +391,7 @@ msgid "Delete"
msgstr "Supprimer" msgstr "Supprimer"
#: accounting/templates/accounting/bank_account_details.jinja:18 #: accounting/templates/accounting/bank_account_details.jinja:18
#: club/views.py:78 core/views/user.py:206 sas/templates/sas/picture.jinja:86 #: club/views.py:78 core/views/user.py:207 sas/templates/sas/picture.jinja:86
msgid "Infos" msgid "Infos"
msgstr "Infos" msgstr "Infos"
@ -425,7 +425,7 @@ msgstr "Nouveau compte club"
#: com/templates/com/weekmail.jinja:61 core/templates/core/file.jinja:38 #: com/templates/com/weekmail.jinja:61 core/templates/core/file.jinja:38
#: core/templates/core/group_list.jinja:24 core/templates/core/page.jinja:35 #: core/templates/core/group_list.jinja:24 core/templates/core/page.jinja:35
#: core/templates/core/poster_list.jinja:40 #: core/templates/core/poster_list.jinja:40
#: core/templates/core/user_tools.jinja:42 core/views/user.py:238 #: core/templates/core/user_tools.jinja:42 core/views/user.py:239
#: counter/templates/counter/cash_summary_list.jinja:53 #: counter/templates/counter/cash_summary_list.jinja:53
#: counter/templates/counter/counter_list.jinja:17 #: counter/templates/counter/counter_list.jinja:17
#: counter/templates/counter/counter_list.jinja:33 #: counter/templates/counter/counter_list.jinja:33
@ -439,7 +439,7 @@ msgstr "Nouveau compte club"
#: pedagogy/templates/pedagogy/guide.jinja:50 #: pedagogy/templates/pedagogy/guide.jinja:50
#: pedagogy/templates/pedagogy/guide.jinja:73 #: pedagogy/templates/pedagogy/guide.jinja:73
#: pedagogy/templates/pedagogy/guide.jinja:109 #: pedagogy/templates/pedagogy/guide.jinja:109
#: pedagogy/templates/pedagogy/uv_detail.jinja:177 #: pedagogy/templates/pedagogy/uv_detail.jinja:178
#: sas/templates/sas/album.jinja:18 sas/templates/sas/picture.jinja:100 #: sas/templates/sas/album.jinja:18 sas/templates/sas/picture.jinja:100
#: trombi/templates/trombi/detail.jinja:9 #: trombi/templates/trombi/detail.jinja:9
#: trombi/templates/trombi/edit_profile.jinja:34 #: trombi/templates/trombi/edit_profile.jinja:34
@ -1363,7 +1363,7 @@ msgstr "Anciens membres"
msgid "History" msgid "History"
msgstr "Historique" msgstr "Historique"
#: club/views.py:115 core/templates/core/base.jinja:117 core/views/user.py:229 #: club/views.py:115 core/templates/core/base.jinja:117 core/views/user.py:230
#: sas/templates/sas/picture.jinja:95 trombi/views.py:60 #: sas/templates/sas/picture.jinja:95 trombi/views.py:60
msgid "Tools" msgid "Tools"
msgstr "Outils" msgstr "Outils"
@ -1425,7 +1425,7 @@ msgstr "Appel"
#: com/models.py:69 com/models.py:155 com/models.py:213 election/models.py:14 #: com/models.py:69 com/models.py:155 com/models.py:213 election/models.py:14
#: election/models.py:116 election/models.py:156 forum/models.py:242 #: election/models.py:116 election/models.py:156 forum/models.py:242
#: forum/models.py:296 pedagogy/models.py:145 #: forum/models.py:296 pedagogy/models.py:100
msgid "title" msgid "title"
msgstr "titre" msgstr "titre"
@ -1443,8 +1443,8 @@ msgstr "contenu"
msgid "type" msgid "type"
msgstr "type" msgstr "type"
#: com/models.py:77 com/models.py:216 pedagogy/models.py:106 #: com/models.py:77 com/models.py:216 pedagogy/models.py:61
#: pedagogy/models.py:215 trombi/models.py:183 #: pedagogy/models.py:199 trombi/models.py:183
msgid "author" msgid "author"
msgstr "auteur" msgstr "auteur"
@ -1726,20 +1726,24 @@ msgstr "Agenda"
msgid "Birthdays" msgid "Birthdays"
msgstr "Anniversaires" msgstr "Anniversaires"
#: com/templates/com/news_list.jinja:47 #: com/templates/com/news_list.jinja:49
#, python-format #, python-format
msgid "%(age)s year old" msgid "%(age)s year old"
msgstr "%(age)s ans" msgstr "%(age)s ans"
#: com/templates/com/news_list.jinja:86 #: com/templates/com/news_list.jinja:59 com/tests.py:92 com/tests.py:102
msgid "You need an up to date subscription to access this content"
msgstr "Votre cotisation doit être à jour pour accéder à cette section"
#: com/templates/com/news_list.jinja:92
msgid "Events today and the next few days" msgid "Events today and the next few days"
msgstr "Événements aujourd'hui et dans les prochains jours" msgstr "Événements aujourd'hui et dans les prochains jours"
#: com/templates/com/news_list.jinja:129 #: com/templates/com/news_list.jinja:135
msgid "Nothing to come..." msgid "Nothing to come..."
msgstr "Rien à venir..." msgstr "Rien à venir..."
#: com/templates/com/news_list.jinja:136 #: com/templates/com/news_list.jinja:142
msgid "Coming soon... don't miss!" msgid "Coming soon... don't miss!"
msgstr "Prochainement... à ne pas rater!" msgstr "Prochainement... à ne pas rater!"
@ -2144,7 +2148,7 @@ msgstr "département"
msgid "dpt option" msgid "dpt option"
msgstr "Filière" msgstr "Filière"
#: core/models.py:248 pedagogy/models.py:118 pedagogy/models.py:284 #: core/models.py:248 pedagogy/models.py:73 pedagogy/models.py:284
msgid "semester" msgid "semester"
msgstr "semestre" msgstr "semestre"
@ -2372,10 +2376,6 @@ msgstr "404. Non trouvé"
msgid "500, Server Error" msgid "500, Server Error"
msgstr "500, Erreur Serveur" msgstr "500, Erreur Serveur"
#: core/templates/core/base.jinja:5 core/templates/core/index.jinja:4
msgid "Welcome!"
msgstr "Bienvenue!"
#: core/templates/core/base.jinja:49 #: core/templates/core/base.jinja:49
msgid "Username" msgid "Username"
msgstr "Nom d'utilisateur" msgstr "Nom d'utilisateur"
@ -2984,7 +2984,7 @@ msgstr "Résultat de la recherche"
msgid "Users" msgid "Users"
msgstr "Utilisateurs" msgstr "Utilisateurs"
#: core/templates/core/search.jinja:18 core/views/user.py:257 #: core/templates/core/search.jinja:18 core/views/user.py:258
#: counter/templates/counter/stats.jinja:17 #: counter/templates/counter/stats.jinja:17
msgid "Clubs" msgid "Clubs"
msgstr "Clubs" msgstr "Clubs"
@ -3215,8 +3215,8 @@ msgstr "Parrains de %(user_name)s"
msgid "Show family picture" msgid "Show family picture"
msgstr "Voir une image de la famille" msgstr "Voir une image de la famille"
#: core/templates/core/user_godfathers.jinja:12 core/views/user.py:215 #: core/templates/core/user_godfathers.jinja:12 core/views/user.py:216
#: core/views/user.py:487 #: core/views/user.py:488
msgid "Godfathers" msgid "Godfathers"
msgstr "Parrains" msgstr "Parrains"
@ -3229,7 +3229,7 @@ msgstr "Voir l'arbre des ancêtres"
msgid "No godfathers" msgid "No godfathers"
msgstr "Pas de parrains" msgstr "Pas de parrains"
#: core/templates/core/user_godfathers.jinja:25 core/views/user.py:485 #: core/templates/core/user_godfathers.jinja:25 core/views/user.py:486
msgid "Godchildren" msgid "Godchildren"
msgstr "Fillots" msgstr "Fillots"
@ -3285,7 +3285,7 @@ msgid "%(user_name)s's pictures"
msgstr "Photos de %(user_name)s" msgstr "Photos de %(user_name)s"
#: core/templates/core/user_preferences.jinja:4 #: core/templates/core/user_preferences.jinja:4
#: core/templates/core/user_preferences.jinja:8 core/views/user.py:247 #: core/templates/core/user_preferences.jinja:8 core/views/user.py:248
msgid "Preferences" msgid "Preferences"
msgstr "Préférences" msgstr "Préférences"
@ -3351,7 +3351,7 @@ msgstr "Outils utilisateurs"
msgid "Sith management" msgid "Sith management"
msgstr "Gestion de Sith" msgstr "Gestion de Sith"
#: core/templates/core/user_tools.jinja:14 core/views/user.py:267 #: core/templates/core/user_tools.jinja:14 core/views/user.py:268
msgid "Groups" msgid "Groups"
msgstr "Groupes" msgstr "Groupes"
@ -3401,7 +3401,7 @@ msgstr "Relevés de caisse"
msgid "Invoices call" msgid "Invoices call"
msgstr "Appels à facture" msgstr "Appels à facture"
#: core/templates/core/user_tools.jinja:43 core/views/user.py:287 #: core/templates/core/user_tools.jinja:43 core/views/user.py:288
#: counter/templates/counter/counter_list.jinja:18 #: counter/templates/counter/counter_list.jinja:18
#: counter/templates/counter/counter_list.jinja:34 #: counter/templates/counter/counter_list.jinja:34
#: counter/templates/counter/counter_list.jinja:56 #: counter/templates/counter/counter_list.jinja:56
@ -3656,16 +3656,16 @@ msgstr "Utilisateurs à retirer du groupe"
msgid "Users to add to group" msgid "Users to add to group"
msgstr "Utilisateurs à ajouter au groupe" msgstr "Utilisateurs à ajouter au groupe"
#: core/views/user.py:224 trombi/templates/trombi/export.jinja:25 #: core/views/user.py:225 trombi/templates/trombi/export.jinja:25
#: trombi/templates/trombi/user_profile.jinja:11 #: trombi/templates/trombi/user_profile.jinja:11
msgid "Pictures" msgid "Pictures"
msgstr "Photos" msgstr "Photos"
#: core/views/user.py:489 #: core/views/user.py:490
msgid "Family" msgid "Family"
msgstr "Famille" msgstr "Famille"
#: core/views/user.py:631 #: core/views/user.py:632
msgid "User already has a profile picture" msgid "User already has a profile picture"
msgstr "L'utilisateur a déjà une photo de profil" msgstr "L'utilisateur a déjà une photo de profil"
@ -4811,7 +4811,7 @@ msgstr "Signalements acceptés"
msgid "Denied reports" msgid "Denied reports"
msgstr "Signalements refusés" msgstr "Signalements refusés"
#: pedagogy/models.py:98 #: pedagogy/models.py:53
msgid "" msgid ""
"The code of an UV must only contains uppercase characters without accent and " "The code of an UV must only contains uppercase characters without accent and "
"numbers" "numbers"
@ -4819,87 +4819,87 @@ msgstr ""
"Le code d'une UV doit seulement contenire des caractères majuscule sans " "Le code d'une UV doit seulement contenire des caractères majuscule sans "
"accents et nombres" "accents et nombres"
#: pedagogy/models.py:111 #: pedagogy/models.py:66
msgid "credit type" msgid "credit type"
msgstr "type de crédit" msgstr "type de crédit"
#: pedagogy/models.py:116 pedagogy/models.py:146 #: pedagogy/models.py:71 pedagogy/models.py:101
msgid "uv manager" msgid "uv manager"
msgstr "gestionnaire d'uv" msgstr "gestionnaire d'uv"
#: pedagogy/models.py:124 #: pedagogy/models.py:79
msgid "language" msgid "language"
msgstr "langue" msgstr "langue"
#: pedagogy/models.py:130 #: pedagogy/models.py:85
msgid "credits" msgid "credits"
msgstr "crédits" msgstr "crédits"
#: pedagogy/models.py:138 #: pedagogy/models.py:93
msgid "departmenmt" msgid "departmenmt"
msgstr "département" msgstr "département"
#: pedagogy/models.py:147 #: pedagogy/models.py:102
msgid "objectives" msgid "objectives"
msgstr "objecifs" msgstr "objecifs"
#: pedagogy/models.py:148 #: pedagogy/models.py:103
msgid "program" msgid "program"
msgstr "programme" msgstr "programme"
#: pedagogy/models.py:149 #: pedagogy/models.py:104
msgid "skills" msgid "skills"
msgstr "compétences" msgstr "compétences"
#: pedagogy/models.py:150 #: pedagogy/models.py:105
msgid "key concepts" msgid "key concepts"
msgstr "concepts clefs" msgstr "concepts clefs"
#: pedagogy/models.py:155 #: pedagogy/models.py:110
msgid "hours CM" msgid "hours CM"
msgstr "heures CM" msgstr "heures CM"
#: pedagogy/models.py:162 #: pedagogy/models.py:117
msgid "hours TD" msgid "hours TD"
msgstr "heures TD" msgstr "heures TD"
#: pedagogy/models.py:169 #: pedagogy/models.py:124
msgid "hours TP" msgid "hours TP"
msgstr "heures TP" msgstr "heures TP"
#: pedagogy/models.py:176 #: pedagogy/models.py:131
msgid "hours THE" msgid "hours THE"
msgstr "heures THE" msgstr "heures THE"
#: pedagogy/models.py:183 #: pedagogy/models.py:138
msgid "hours TE" msgid "hours TE"
msgstr "heures TE" msgstr "heures TE"
#: pedagogy/models.py:219 pedagogy/models.py:275 #: pedagogy/models.py:203 pedagogy/models.py:275
msgid "uv" msgid "uv"
msgstr "uv" msgstr "uv"
#: pedagogy/models.py:222 #: pedagogy/models.py:206
msgid "global grade" msgid "global grade"
msgstr "note globale" msgstr "note globale"
#: pedagogy/models.py:229 #: pedagogy/models.py:213
msgid "utility grade" msgid "utility grade"
msgstr "note d'utilité" msgstr "note d'utilité"
#: pedagogy/models.py:236 #: pedagogy/models.py:220
msgid "interest grade" msgid "interest grade"
msgstr "note d'intérêt" msgstr "note d'intérêt"
#: pedagogy/models.py:243 #: pedagogy/models.py:227
msgid "teaching grade" msgid "teaching grade"
msgstr "note d'enseignement" msgstr "note d'enseignement"
#: pedagogy/models.py:250 #: pedagogy/models.py:234
msgid "work load grade" msgid "work load grade"
msgstr "note de charge de travail" msgstr "note de charge de travail"
#: pedagogy/models.py:256 #: pedagogy/models.py:240
msgid "publish date" msgid "publish date"
msgstr "date de publication" msgstr "date de publication"
@ -4907,15 +4907,15 @@ msgstr "date de publication"
msgid "grade" msgid "grade"
msgstr "note" msgstr "note"
#: pedagogy/models.py:304 #: pedagogy/models.py:298
msgid "report" msgid "report"
msgstr "signaler" msgstr "signaler"
#: pedagogy/models.py:308 #: pedagogy/models.py:302
msgid "reporter" msgid "reporter"
msgstr "signalant" msgstr "signalant"
#: pedagogy/models.py:310 #: pedagogy/models.py:304
msgid "reason" msgid "reason"
msgstr "raison" msgstr "raison"
@ -5051,11 +5051,11 @@ msgstr "Laisser un commentaire"
msgid "Comments" msgid "Comments"
msgstr "Commentaires" msgstr "Commentaires"
#: pedagogy/templates/pedagogy/uv_detail.jinja:171 #: pedagogy/templates/pedagogy/uv_detail.jinja:172
msgid "This comment has been reported" msgid "This comment has been reported"
msgstr "Ce commentaire a été signalé" msgstr "Ce commentaire a été signalé"
#: pedagogy/templates/pedagogy/uv_detail.jinja:184 #: pedagogy/templates/pedagogy/uv_detail.jinja:185
msgid "Report this comment" msgid "Report this comment"
msgstr "Signaler ce commentaire" msgstr "Signaler ce commentaire"