FAQ et biographie

This commit is contained in:
Evarin 2017-05-12 23:29:29 +02:00
parent cc47be491c
commit 0b94255062
8 changed files with 263 additions and 26 deletions

View file

@ -31,6 +31,9 @@ class Normalien(models.Model):
promotion = models.CharField(u"Promotion", max_length=40, blank=True)
mail = models.EmailField(u"Adresse e-mail permanente",
max_length=200, blank=True)
contactez_moi = models.BooleanField(u"Inviter les visiteurs à me contacter",
default=True)
bio = models.TextField(u"À propos de moi", blank=True, default="");
class Meta:
verbose_name = u"Profil élève"

View file

@ -800,4 +800,76 @@ article.promo {
}
}
// FAQ
.faq-toc {
display: block;
max-width: 700px;
margin: 0 auto;
ul {
margin: 20px;
li {
a {
color: #000;
display: block;
padding: 5px;
}
&.toc-h1 {
display:none;
}
&.toc-h2 a {
background: lighten($compl, 20%);
}
&.toc-h3 a {
padding-left: 10px;
background: #fff;
font-weight: normal;
}
a:hover {
color: #fff;
background: $compl !important;
}
}
}
}
.faq {
article {
background: #fff;
padding: 15px;
h2 {
background: lighten($compl, 20%);
margin: -15px;
padding: 15px;
}
h3 {
background: $vert;
color: #fff;
margin: 0 -15px;
margin-top: 30px;
padding: 10px 15px;
&:nth-child(2) {
margin-top: 0;
}
}
ul {
padding-left: 20px;
li {
list-style: initial;
}
}
p {
}
}
}
@import "_responsive.scss";

View file

@ -881,6 +881,74 @@ article.promo .explications > div p {
margin: 15px 15px;
}
/* line 804, ../../sass/screen.scss */
.faq-toc {
display: block;
max-width: 700px;
margin: 0 auto;
}
/* line 808, ../../sass/screen.scss */
.faq-toc ul {
margin: 20px;
}
/* line 812, ../../sass/screen.scss */
.faq-toc ul li a {
color: #000;
display: block;
padding: 5px;
}
/* line 818, ../../sass/screen.scss */
.faq-toc ul li.toc-h1 {
display: none;
}
/* line 822, ../../sass/screen.scss */
.faq-toc ul li.toc-h2 a {
background: #fcc883;
}
/* line 826, ../../sass/screen.scss */
.faq-toc ul li.toc-h3 a {
padding-left: 10px;
background: #fff;
font-weight: normal;
}
/* line 832, ../../sass/screen.scss */
.faq-toc ul li a:hover {
color: #fff;
background: #f99b20 !important;
}
/* line 841, ../../sass/screen.scss */
.faq article {
background: #fff;
padding: 15px;
}
/* line 844, ../../sass/screen.scss */
.faq article h2 {
background: #fcc883;
margin: -15px;
padding: 15px;
}
/* line 850, ../../sass/screen.scss */
.faq article h3 {
background: #1a82dd;
color: #fff;
margin: 0 -15px;
margin-top: 30px;
padding: 10px 15px;
}
/* line 857, ../../sass/screen.scss */
.faq article h3:nth-child(2) {
margin-top: 0;
}
/* line 862, ../../sass/screen.scss */
.faq article ul {
padding-left: 20px;
}
/* line 864, ../../sass/screen.scss */
.faq article ul li {
list-style: initial;
}
@media screen and (max-width: 850px) {
/* line 2, ../../sass/_responsive.scss */
header {

View file

@ -25,11 +25,11 @@
<nav>
<a id="showmenu" href="#" onclick="$('header').toggleClass('expanded');return false;"><img src="{% static "images/minimenu.svg" %}" width="50px"></a>
<ul id="menu">
<li><a href="{% url 'avisstage:index' %}">Accueil</a></li>
{% if user.is_authenticated %}
<li><a href="{% url 'avisstage:perso' %}">Mon expérience</a></li>
<li><a href="{% url 'avisstage:recherche' %}">Recherche</a></li>
{% endif %}
<li><a href="{% url 'avisstage:faq' %}">FAQ</a></li>
{% if user.is_staff %}
<li><a href="{% url 'admin:index' %}">Admin</a></li>
{% endif %}

View file

@ -10,30 +10,39 @@
{% endif %}
</h1>
<p><b>Promotion :</b> {{ object.promotion }}</p>
<p>Adresse de contact : <a href="mailto:{{ object.mail }}">{{ object.mail }}</a></p>
{% if object.contactez_moi %}
<p><b>Adresse de contact :</b> <a href="mailto:{{ object.mail }}">{{ object.mail }}</a></p>
{% endif %}
{% if object.bio %}
<p>{{ object.bio|linebreaks }}</p>
{% endif %}
<article>
<h2>Ses stages</h2>
<ul class="stage-liste">
{% for stage in object.stages_publics %}
{% ifchanged stage.date_maj.date %}<li class="date-maj">Mis à jour le {{ stage.date_maj.date }}</li>{% endifchanged %}
<li class="stage"><h3><a href="{% url "avisstage:stage" stage.id %}">{{ stage.sujet }}</a></h3>
<div>
<ul class="infos">
<li class="dates">Du {{ stage.date_debut }} au {{ stage.date_fin }}</li>
<li class="type">{{ stage.get_type_stage_display }}</li>
<li class="structure">{{ stage.structure }}</li>
{% for lieu in stage.lieux.all %}<li class="lieu">{{ lieu.nom }}</li>{% endfor %}
{% for matiere in stage.matieres.all %}
<li class="matiere">{{ matiere.nom }}</li>
{% endfor %}
{% for thematique in stage.thematiques.all %}
<li class="thematique">{{ thematique.name }}</li>
{% endfor %}
</ul>
</div>
</li>
{% endfor %}
</ul>
<h2>Son expérience</h2>
{% if object.stages_publics %}
<ul class="stage-liste">
{% for stage in object.stages_publics %}
{% ifchanged stage.date_maj.date %}<li class="date-maj">Mis à jour le {{ stage.date_maj.date }}</li>{% endifchanged %}
<li class="stage"><h3><a href="{% url "avisstage:stage" stage.id %}">{{ stage.sujet }}</a></h3>
<div>
<ul class="infos">
<li class="dates">Du {{ stage.date_debut }} au {{ stage.date_fin }}</li>
<li class="type">{{ stage.get_type_stage_display }}</li>
<li class="structure">{{ stage.structure }}</li>
{% for lieu in stage.lieux.all %}<li class="lieu">{{ lieu.nom }}</li>{% endfor %}
{% for matiere in stage.matieres.all %}
<li class="matiere">{{ matiere.nom }}</li>
{% endfor %}
{% for thematique in stage.thematiques.all %}
<li class="thematique">{{ thematique.name }}</li>
{% endfor %}
</ul>
</div>
</li>
{% endfor %}
</ul>
{% else %}
<p>{{ object.nom }} n'a publié aucune expérience pour le moment !</p>
{% endif %}
</article>
{% endblock %}

View file

@ -0,0 +1,80 @@
{% extends "avisstage/base.html" %}
{% load staticfiles %}
{% block title %}Foire aux questions | ExperiENS{% endblock %}
{% block extra_head %}
<script src="{% static 'js/toc.min.js' %}" type="text/javascript"></script>
<script type="text/javascript">
$(function(){$(".faq-toc").toc({container:'.faq'});});
</script>
{% endblock %}
{% block content %}
<h1>Foire aux questions</h1>
<div class="faq-toc"></div>
<section class="faq">
<article>
<h2>Rédaction</h2>
<h3>Qui peut voir ce que j'écris&nbsp;?</h3>
<p>L'accès à ce site est restreint aux personnes possédant un compte clipper, c'est à dire : les normalien⋅ne⋅s en scolarité (ou l'ayant terminée il y a moins d'un an), une partie des mastérien⋅ne⋅s, et certain⋅e⋅s pensionnaires étrangèr⋅e⋅s.</p>
<p>Bien que l'accès soit restreint, <b>considérez ce que vous écrivez comme public</b>&nbsp;: rien ne garantit qu'une des personnes ayant accès à ce site ne transmette pas ce qu'il peut lire à d'autres personnes extérieures à l'École.</p>
<h3>Est-ce que je peux écrire ce que je veux&nbsp;?</h3>
<p>Un tel site n'a d'intérêt que si les avis sont les plus sincères possibles, que l'expérience se soit bien passée, ou pas. Pour autant, quelques règles de bon sens sont à respecter :</p>
<ul>
<li>Les propos insultants, racistes, lgbt-phobes, misogynes... sont bien sûr proscrits et seront retirés du site.</li>
<li>Pas d'attaques personnelles.
Si vous avez eu des difficultés à travailler avec quelqu'un, préférez une description de votre relation avec cette personne à une critique directement.</li>
<li>Des avis précis, argumentés, sont préférables à des phrases vagues. Gardez à l'esprit que tout le monde ne fonctionne pas comme vous, et que ce qui ne vous a pas convenu peut très bien être exactement ce qu'une autre personne recherche - et réciproquement !</li>
</ul>
<p>Dans tous les cas, vous êtes responsables de ce que vous écrivez.</p>
<h3>Ça s'est mal passé mais je ne me sens pas de le dire ici, comment faire&nbsp;?</h3>
<p>Il n'est jamais évident d'exprimer publiquement ses réserves, en particulier quand il est possible d'être amené à travailler de nouveau avec les mêmes personnes ou dans la même structure. C'est pourtant important de pouvoir les partager.</p>
<p>S'il y a des choses dont vous ne souhaitez pas parler explicitement, évoquez brièvement leur existence, et invitez les lecteurs à vous contacter pour plus d'informations. Vérifiez que l'adresse de contact de votre profil est à jour, et que la case "permettre aux visiteur de me contacter" est bien cochée.</p>
<h3>Et si pour moi tout s'est bien passé, est-ce que c'est vraiment nécessaire que j'écrive ici&nbsp;?</h3>
<p>Bien sûr ! Ce n'est pas parce que les questions ici évoquent plutôt comment gérer les <i>mauvaises</i> expériences qu'il n'est pas tout autant - voire plus - intéressant de partager les <i>bonnes</i> !</p>
<h3>Dois-je vraiment laisser une adresse de contact visible&nbsp;?</h3>
<p>C'est (beaucoup) mieux ! Si un de vos stages attire l'attention d'un visiteur, il pourra éventuellement vous contacter pour plus de détails ou être mis en contact.</p>
<p>Il est fortement conseillé de renseigner une adresse autre que celle de l'ENS, pour que vous puissiez être contacté aussi après la fin de votre scolarité.</p>
<p>Si vous voulez laisser des consignes aux personnes qui vous contacteraient (ex: "Je ne réponds pas aux questions sur..."), précisez-le dans votre profil.</p>
<h3>Que mettre dans mon profil&nbsp;?</h3>
<p>Vos centres d'intérêt, un peu de votre personnalité, pour que les lecteurs puissent savoir à quel point vos avis leur correspondent.</p>
<p>Également, vous pouvez y mettre des consignes quant à comment vous contacter, si vous n'avez pas envie de répondre à n'importe quelle demande.</p>
</article>
<article>
<h2>Recherche et lecture</h2>
<h3>Je cherche des stages dans un domaine précis, comment faire&nbsp;?</h3>
<p>La page de recherche est destinée à ça, mais n'est pas encore totalement prête. Quand il y aura suffisamment d'avis rédigée, elle sera implémentée</p>
<h3>J'aimerais en savoir plus sur un stage</h3>
<p>Si la personne qui l'a rédigée a laissé son adresse visible, n'hésitez pas à la contacter ! Elle pourra peut-être vous en dire plus, ou vous mettre en relation avec des chercheurs du domaine.</p>
<p>Consultez son profil avant d'envoyer le mail, elle aura peut-être laissé des consignes à ce propos.</p>
<h3>Cet avis est très intéressant, j'aimerais le partager en-dehors de l'ENS !</h3>
<p>Ne le faites pas ! Leur auteur⋅e ne l'a rédigé que pour audience normalienne, ce ne serait pas respectueux de le faire suivre à d'autres qui n'y ont pas accès.</p>
<p>Si vraiment vous pensez qu'une fiche bénéficierait à un⋅e de vos connaissances, demandez ! La plupart des utilisateurs ont laissé une adresse de contact, qui peut aussi servir à ce but.</p>
</article>
<article>
<h2>Le site</h2>
<h3>Pourquoi ce site&nbsp;?</h3>
<p>Tous les ans, la communauté normalienne réalise des centaines de stages et autres expériences professionnelles, aux quatre coins du monde. Certains se passent très bien, d'autres moins, pour des raisons qui ont souvent été rencontrées par d'autres avant. D'une promotion à une autre, les conseils passent, un peu, mais bien vite se perdent. C'est dommage.</p>
<p>Ce projet vise donc à garder une trace de tout cela. Des thèmes de recherches de l'Université de Montréal aux formalités administratives de la Papouasie Nouvelle-Guinée ; de la possibilité de faire du kitesurf à Malmö aux musées à visiter à Buenos Aires - tant de morceaux de savoir qui peuvent guider les choix d'un⋅e futur⋅e normalien⋅ne.</p>
<h3>J'ai repéré un bug / J'ai une idée pour améliorer ce site !</h3>
<p>Faites-en part en cliquant sur le bouton feedback, on est preneur !</p>
<h3>Qui est derrière&nbsp;?</h3>
<p>L'idée originale appartient à Damien Moulin (Physique 2013). Le site internet a été réalisé par <a href="http://www.robin-champenois.fr">Robin Champenois</a> (Info 2012) avec django. Le code source est disponible <a href="https://git.eleves.ens.fr/champeno/experiENS">ici</a>. Le site est hébergé sur le serveur des élèves.</p>
</article>
</section>
{% endblock %}

View file

@ -10,6 +10,7 @@ v1_api.register(api.AuteurResource())
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^perso/$', views.perso, name='perso'),
url(r'^faq/$', views.faq, name='faq'),
url(r'^stage/nouveau/$', views.manage_stage, name='stage_ajout'),
url(r'^stage/(?P<pk>\w+)/$', views.StageView.as_view(), name='stage'),
url(r'^stage/(?P<pk>\w+)/edit/$', views.manage_stage, name='stage_edit'),

View file

@ -63,6 +63,10 @@ class StageListe(ListView, LoginRequiredMixin):
def recherche(request):
return render(request, 'avisstage/recherche.html')
# FAQ
def faq(request):
return render(request, 'avisstage/faq.html')
#
# EDITION
#
@ -71,7 +75,7 @@ def recherche(request):
#login_required
class ProfilEdit(UpdateView, LoginRequiredMixin):
model = Normalien
fields = ['nom', 'promotion', 'mail']
fields = ['nom', 'promotion', 'mail', 'contactez_moi', 'bio']
template_name = 'avisstage/formulaires/profil.html'
# Limitation à son propre profil