Merge branch 'thubrecht/raz' into 'master'

Thubrecht/raz

See merge request klub-dev-ens/annuaire!21
This commit is contained in:
Martin Pepin 2021-02-23 23:27:29 +01:00
commit ac89359368
12 changed files with 212 additions and 93 deletions

View file

@ -101,6 +101,7 @@ a:focus,
background-position: center;
border: none;
transition: 25ms ease-in-out;
cursor: pointer;
}
#search-area button:hover {
background-color: #FFDC00;
@ -187,6 +188,7 @@ a:focus,
color: #FFFFFF;
box-shadow: 2px 2px 0 rgba(31, 14, 25, 0.3);
transition: 25ms ease-in-out;
cursor: pointer;
}
.content button:hover,
@ -524,6 +526,7 @@ body {
background-color: #301827;
color: #FFFFFF;
font-family: "Fira Sans", "Roboto", sans-serif;
overflow-y: scroll;
border: none;
}
@ -545,7 +548,7 @@ body {
z-index: 5;
}
@media screen and (max-width: 900px), (orientation: portrait) {
@media screen and (max-width: 900px) {
body {
grid-template-rows: max-content auto;
grid-template-areas: "aside" "main";

View file

@ -8,6 +8,7 @@
color: colors.$page-button-text;
box-shadow: 2px 2px 0 colors.$shadow;
transition: 25ms ease-in-out;
cursor: pointer;
}
%button:hover {

View file

@ -21,6 +21,7 @@ body {
background-color: colors.$page-background;
color: colors.$page-text;
font-family: fonts.$regular-fonts;
overflow-y: scroll;
border:none;
}
@ -43,7 +44,7 @@ body {
}
// Pour les vues mobile
@media screen and (max-width: 900px), (orientation: portrait) {
@media screen and (max-width: 900px) {
body {
grid-template-rows: max-content auto;
grid-template-areas:

View file

@ -338,6 +338,7 @@
#free-text-edit-form {
textarea {
width: 100%;
height: 100px;
padding: 5px;
resize: none;
}

View file

@ -78,6 +78,7 @@ $account-area-height: 120px;
background-position: center;
border: none;
transition: 25ms ease-in-out;
cursor: pointer;
}
button:hover {

View file

@ -40,9 +40,10 @@
<div id="main-menu">
<nav>
<a href='{% url "home" %}'>{% trans "Accueil" %}</a>
<a href='{% url "fiche_modif" %}'>{% trans "Modifier sa fiche d'annuaire" %}</a>
{% if user.is_authenticated %}
<a href='{% url "fiche" request.user.profile.user %}'>{% trans "Consulter sa fiche d'annuaire" %}</a>
<a href='{% url "fiche_modif" %}'>{% trans "Modifier sa fiche d'annuaire" %}</a>
<a href='{% url "fiche_reset" %}'>{% trans "Réinitialiser sa fiche d'annuaire" %}</a>
{% endif %}
<a href='{% url "birthday" %}'>{% trans "Anniversaires à venir" %}</a>
</nav>

View file

@ -0,0 +1,19 @@
{% extends "fiches/base.html" %}
{% load i18n %}
{% block content %}
<div class="content" id="content-reset">
<h2>{% trans "Réinitialiser ma fiche annuaire" %}</h2>
<p id="warning">{% trans "Votre fiche annuaire sera réinitialisée. Votre nom, département et promotion seront récupérés de l'annuaire de l'administration." %}</p>
<form method="post" action="">
{% csrf_token %}
<input type="submit" name="reset" id="reset" value="{% trans "Réinitialiser" %}">
<input type="submit" name="abort" id="abort" value="{% trans "Annuler" %}">
</form>
</div>
{% endblock %}

View file

@ -4,6 +4,7 @@ from . import views
urlpatterns = [
path("", views.HomeView.as_view(), name="home"),
path("fiche/edit", views.EditView.as_view(), name="fiche_modif"),
path("fiche/reset", views.ResetView.as_view(), name="fiche_reset"),
path("fiche/<user>", views.FicheView.as_view(), name="fiche"),
path("birthday", views.BirthdayView.as_view(), name="birthday"),
]

23
fiches/utils.py Normal file
View file

@ -0,0 +1,23 @@
from .management.commands._ldap import ClipperLDAP
def get_ldap_infos(clipper_login):
ldap = ClipperLDAP()
try:
res = ldap.search("(uid={})".format(clipper_login))
except Exception:
return None
if not res:
return None
if len(res) != 1:
raise RuntimeError("LDAP returned too many results: {}".format(res))
(res,) = res
promo, dept = ldap.parse_dept(ldap.extract_ldap_info(res, "homeDirectory"))
return {
"name": ldap.extract_ldap_info(res, "cn"),
"promo": promo,
"dept": dept,
}

View file

@ -1,4 +1,4 @@
from datetime import date
from datetime import date, timedelta
from django.contrib.auth.decorators import login_required
from django.core.mail import send_mail
@ -8,7 +8,7 @@ from django.forms.models import model_to_dict
from django.http import HttpResponseRedirect
from django.shortcuts import get_object_or_404, redirect, render
from django.template.loader import render_to_string
from django.urls import reverse
from django.urls import reverse, reverse_lazy
from django.utils import timezone
from django.utils.decorators import method_decorator
from django.views.generic.detail import DetailView
@ -23,7 +23,8 @@ from fiches.forms import (
SearchForm,
SocialFormSet,
)
from fiches.models import Address, Mail, Phone, Profile, Social
from fiches.models import Address, Department, Mail, Phone, Profile, Social
from fiches.utils import get_ldap_infos
@method_decorator(login_required, name="dispatch")
@ -113,7 +114,9 @@ class EditView(UpdateView):
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
today = date.today()
context["default_birth_date"] = today.replace(year=(today.year - 20)).isoformat()
context["default_birth_date"] = today.replace(
year=(today.year - 20)
).isoformat()
return context
def get_object(self):
@ -158,3 +161,44 @@ class BirthdayView(ListView):
)
)
return context
@method_decorator(login_required, name="dispatch")
class ResetView(UpdateView):
model = Profile
template_name = "fiches/reset.html"
fields = []
success_url = reverse_lazy("fiche_modif")
def get_object(self):
return self.request.user.profile
def post(self, request, *args, **kwargs):
if "reset" in request.POST:
# On réinitialise le profil
profile = self.get_object()
base_infos = get_ldap_infos(profile.user.cas_account.cas_login)
# On supprime les trucs inutiles
profile.phone_set.all().delete()
profile.social_set.all().delete()
profile.mail_set.all().delete()
profile.address_set.all().delete()
profile.nickname = ""
profile.pronoun = ""
profile.birth_date = None
profile.past_studies = ""
profile.experiences = ""
profile.thurne = ""
profile.text_field = ""
profile.picture.delete()
# On réinitialise avec les infos du LDAP
if base_infos is not None:
profile.full_name = base_infos["name"]
profile.department.clear()
profile.department.add(Department.objects.get(name=base_infos["dept"]))
profile.promotion = base_infos["promo"]
profile.save()
return HttpResponseRedirect(self.success_url)

Binary file not shown.

View file

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-01-28 00:03+0000\n"
"PO-Revision-Date: 2021-02-04 23:49+0100\n"
"POT-Creation-Date: 2021-02-23 22:53+0100\n"
"PO-Revision-Date: 2021-02-23 22:53+0100\n"
"Last-Translator: Tom Hubrecht <tom.hubrecht@ens.fr>\n"
"Language-Team: \n"
"Language: en\n"
@ -18,15 +18,15 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 2.4.1\n"
#: fiches/forms.py:15
#: fiches/forms.py:20
msgid "Nom/Surnom"
msgstr "Name/Nickname"
#: fiches/forms.py:16
#: fiches/forms.py:21
msgid "Promotion"
msgstr "Entry year"
msgstr "Entrance year"
#: fiches/forms.py:28
#: fiches/forms.py:33
msgid "Tous les champs sont vides"
msgstr "All fields are empty"
@ -56,7 +56,7 @@ msgstr "department"
#: fiches/models.py:24
msgid "promotion"
msgstr "entry year"
msgstr "entrance year"
#: fiches/models.py:27
msgid "date de naissance"
@ -116,56 +116,60 @@ msgstr "e-mail"
msgid "adresse"
msgstr "address"
#: fiches/templates/fiches/base.html:10 fiches/templates/fiches/base.html:35
#: fiches/templates/fiches/base.html:10 fiches/templates/fiches/base.html:21
msgid "Annuaire des élèves de l'ENS"
msgstr "ENS student directory"
#: fiches/templates/fiches/base.html:30
#: fiches/templates/fiches/base.html:36
msgid "Recherche Rapide"
msgstr "Quick Search"
#: fiches/templates/fiches/base.html:31
#: fiches/templates/fiches/base.html:37
msgid "Rechercher"
msgstr "Search"
#: fiches/templates/fiches/base.html:41
#: fiches/templates/fiches/base.html:42
msgid "Accueil"
msgstr "Home"
#: fiches/templates/fiches/base.html:42
msgid "Modifier sa fiche d'annuaire"
msgstr "Edit your directory record"
#: fiches/templates/fiches/base.html:44
msgid "Consulter sa fiche d'annuaire"
msgstr "View your directory record"
#: fiches/templates/fiches/base.html:45
msgid "Modifier sa fiche d'annuaire"
msgstr "Edit your directory record"
#: fiches/templates/fiches/base.html:46
msgid "Réinitialiser sa fiche d'annuaire"
msgstr "Reset your directory record"
#: fiches/templates/fiches/base.html:48
msgid "Anniversaires à venir"
msgstr "Upcoming birthdays"
#: fiches/templates/fiches/base.html:52
#: fiches/templates/fiches/base.html:54
#, python-format
msgid "Connecté en tant que <span class=\"clipper\">%(user)s</span>"
msgstr "Connected as <span class=\"clipper\">%(user)s</span>"
#: fiches/templates/fiches/base.html:53
#: fiches/templates/fiches/base.html:55
msgid "Se déconnecter"
msgstr "Log out"
#: fiches/templates/fiches/base.html:55
#: fiches/templates/fiches/base.html:57
msgid "Se connecter"
msgstr "Log in"
#: fiches/templates/fiches/base.html:71
#: fiches/templates/fiches/base.html:73
msgid "Crée par KDENS &middot; Propulsé par Django"
msgstr "Created by KDENS &middot; Powered by Django"
#: fiches/templates/fiches/base.html:75
#: fiches/templates/fiches/base.html:77
msgid "Page des élèves"
msgstr "Students' page"
#: fiches/templates/fiches/base.html:76
#: fiches/templates/fiches/base.html:78
msgid "Contacter l'équipe annuaire"
msgstr "Contact the directory team"
@ -189,168 +193,168 @@ msgstr "Department"
msgid "Date de naissance"
msgstr "Birth date"
#: fiches/templates/fiches/fiche.html:49
#: fiches/templates/fiches/fiche.html:51
msgid "Thurne"
msgstr "Room"
#: fiches/templates/fiches/fiche.html:57
#: fiches/templates/fiches/fiche.html:59
msgid "Téléphone"
msgstr "Phone number"
#: fiches/templates/fiches/fiche.html:69
#: fiches/templates/fiches/fiche.html:71
msgid "Réseau social,Réseaux sociaux"
msgstr "Social network,Social networks"
#: fiches/templates/fiches/fiche.html:81
#: fiches/templates/fiches/fiche.html:83
msgid "Mail,Mails"
msgstr "E-mail,E-mails"
#: fiches/templates/fiches/fiche.html:93
#: fiches/templates/fiches/fiche.html:95
msgid "Adresse,Adresses"
msgstr "Address,Addresses"
#: fiches/templates/fiches/fiche.html:105
#: fiches/templates/fiches/fiche.html:107
msgid "Études passées"
msgstr "Past studies"
#: fiches/templates/fiches/fiche.html:113
#: fiches/templates/fiches/fiche.html:115
msgid "Expériences passées"
msgstr "Experiences"
#: fiches/templates/fiches/fiche.html:122
#: fiches/templates/fiches/fiche.html:124
msgid "Champ libre"
msgstr "Free space"
#: fiches/templates/fiches/fiches_modif.html:8
#: fiches/templates/fiches/fiches_modif.html:7
msgid "Modifier ma page d'annuaire"
msgstr "Edit my directory record"
#: fiches/templates/fiches/fiches_modif.html:13
#: fiches/templates/fiches/fiches_modif.html:12
msgid "Nom :"
msgstr "Name:"
#: fiches/templates/fiches/fiches_modif.html:17
#: fiches/templates/fiches/fiches_modif.html:16
msgid "Surnom :"
msgstr "Nickname:"
#: fiches/templates/fiches/fiches_modif.html:21
#: fiches/templates/fiches/fiches_modif.html:20
msgid "Pronom(s) utilisé(s) :"
msgstr "Pronoun(s):"
#: fiches/templates/fiches/fiches_modif.html:25
msgid "Photo :"
msgstr "Photo:"
#: fiches/templates/fiches/fiches_modif.html:39
msgid "Effacer (cochez la case) :"
msgstr "Delete (check the box):"
#: fiches/templates/fiches/fiches_modif.html:44
msgid "Nouvelle photo :"
msgstr "New photo:"
#: fiches/templates/fiches/fiches_modif.html:51
msgid "Département :"
msgstr "Department:"
#: fiches/templates/fiches/fiches_modif.html:55
#: fiches/templates/fiches/home.html:14
msgid "Promotion :"
msgstr "Entry year:"
#: fiches/templates/fiches/fiches_modif.html:59
msgid "Études passées :"
msgstr "Past studies:"
#: fiches/templates/fiches/fiches_modif.html:65
msgid "Expériences :"
msgstr "Experiences:"
#: fiches/templates/fiches/fiches_modif.html:71
#: fiches/templates/fiches/fiches_modif.html:24
msgid "Date de naissance :"
msgstr "Birth date:"
#: fiches/templates/fiches/fiches_modif.html:75
#: fiches/templates/fiches/fiches_modif.html:28
msgid "Photo :"
msgstr "Photo:"
#: fiches/templates/fiches/fiches_modif.html:40
msgid "Effacer (cochez la case) :"
msgstr "Delete (check the box):"
#: fiches/templates/fiches/fiches_modif.html:45
msgid "Nouvelle photo :"
msgstr "New photo:"
#: fiches/templates/fiches/fiches_modif.html:52
msgid "Département :"
msgstr "Department:"
#: fiches/templates/fiches/fiches_modif.html:56
#: fiches/templates/fiches/home.html:14
msgid "Promotion :"
msgstr "Entrance year:"
#: fiches/templates/fiches/fiches_modif.html:60
msgid "Études passées :"
msgstr "Past studies:"
#: fiches/templates/fiches/fiches_modif.html:66
msgid "Expériences :"
msgstr "Experiences:"
#: fiches/templates/fiches/fiches_modif.html:72
msgid "Thurne :"
msgstr "Room :"
#: fiches/templates/fiches/fiches_modif.html:78
#: fiches/templates/fiches/fiches_modif.html:75
msgid "Personnel"
msgstr "Private"
#: fiches/templates/fiches/fiches_modif.html:78
#: fiches/templates/fiches/fiches_modif.html:75
msgid "0612345678"
msgstr "0612345678"
#: fiches/templates/fiches/fiches_modif.html:79
#: fiches/templates/fiches/fiches_modif.html:76
msgid "Numéro(s) de téléphone :"
msgstr "Phone number(s):"
#: fiches/templates/fiches/fiches_modif.html:80
#: fiches/templates/fiches/fiches_modif.html:77
msgid "Ajouter un numéro"
msgstr "Add a phone number"
#: fiches/templates/fiches/fiches_modif.html:83
#: fiches/templates/fiches/fiches_modif.html:80
msgid "InstaTok"
msgstr "InstaTok"
#: fiches/templates/fiches/fiches_modif.html:83
#: fiches/templates/fiches/fiches_modif.html:80
msgid "mon_profil_instatok"
msgstr "my_instatok_profile"
#: fiches/templates/fiches/fiches_modif.html:84
#: fiches/templates/fiches/fiches_modif.html:81
msgid "Réseaux sociaux :"
msgstr "Social networks:"
#: fiches/templates/fiches/fiches_modif.html:85
#: fiches/templates/fiches/fiches_modif.html:82
msgid "Ajouter un réseau social"
msgstr "Add a social network"
#: fiches/templates/fiches/fiches_modif.html:88
#: fiches/templates/fiches/fiches_modif.html:85
msgid "Professionelle"
msgstr "Professional"
#: fiches/templates/fiches/fiches_modif.html:88
#: fiches/templates/fiches/fiches_modif.html:85
msgid "moi@ens.fr"
msgstr "me@ens.fr"
#: fiches/templates/fiches/fiches_modif.html:89
#: fiches/templates/fiches/fiches_modif.html:86
msgid "Mail(s) :"
msgstr "E-mail(s):"
#: fiches/templates/fiches/fiches_modif.html:90
#: fiches/templates/fiches/fiches_modif.html:87
msgid "Ajouter un email"
msgstr "Add an e-mail"
#: fiches/templates/fiches/fiches_modif.html:93
#: fiches/templates/fiches/fiches_modif.html:90
msgid "Bureau"
msgstr "Office"
#: fiches/templates/fiches/fiches_modif.html:93
#: fiches/templates/fiches/fiches_modif.html:90
msgid "45 rue d'Ulm"
msgstr "45 rue d'Ulm"
#: fiches/templates/fiches/fiches_modif.html:94
#: fiches/templates/fiches/fiches_modif.html:91
msgid "Adresse(s) :"
msgstr "Address(es):"
#: fiches/templates/fiches/fiches_modif.html:95
#: fiches/templates/fiches/fiches_modif.html:92
msgid "Ajouter une adresse"
msgstr "Add an address"
#: fiches/templates/fiches/fiches_modif.html:99
#: fiches/templates/fiches/fiches_modif.html:96
msgid "Champ libre :"
msgstr "Free space:"
#: fiches/templates/fiches/fiches_modif.html:105
#: fiches/templates/fiches/fiches_modif.html:102
msgid "Apparaître sur l'annuaire papier ?"
msgstr "Appear on the paper directory?"
#: fiches/templates/fiches/fiches_modif.html:109
#: fiches/templates/fiches/fiches_modif.html:106
msgid "Conserver la fiche annuaire ?"
msgstr "Keep the directory record?"
#: fiches/templates/fiches/fiches_modif.html:112
#: fiches/templates/fiches/fiches_modif.html:109
msgid "Enregistrer"
msgstr "Save"
@ -370,5 +374,25 @@ msgstr "Department:"
msgid "Recherche"
msgstr "Search"
#: fiches/templates/fiches/reset.html:8
msgid "Réinitialiser ma fiche annuaire"
msgstr "Reset your directory record"
#: fiches/templates/fiches/reset.html:9
msgid ""
"Votre fiche annuaire sera réinitialisée. Votre nom, département et promotion "
"seront récupérés de l'annuaire de l'administration."
msgstr ""
"Your directory record will be reset. Your name, department and promotion "
"will be copied from the administration directory."
#: fiches/templates/fiches/reset.html:13
msgid "Réinitialiser"
msgstr "Reset"
#: fiches/templates/fiches/reset.html:14
msgid "Annuler"
msgstr "Cancel"
#~ msgid "Department :"
#~ msgstr "Department:"