diff --git a/avisstage/forms.py b/avisstage/forms.py index 1fb670e..8af5c57 100644 --- a/avisstage/forms.py +++ b/avisstage/forms.py @@ -56,6 +56,8 @@ class StageForm(forms.ModelForm): # Date de modification self.instance.date_maj = timezone.now() + + self.instance.update_stats(False) stage = super(StageForm, self).save(commit=commit) return stage @@ -64,12 +66,13 @@ class StageForm(forms.ModelForm): class AvisStageForm(HTMLTrimmerForm): class Meta: model = AvisStage - fields = ['chapo', 'avis_sujet', 'avis_ambiance', 'avis_admin', 'les_plus', 'les_moins'] + fields = ['chapo', 'avis_sujet', 'avis_ambiance', 'avis_admin', 'avis_prestage', 'les_plus', 'les_moins'] help_texts = { "chapo": u"\"Trop long, pas lu\" : une accroche résumant ce que vous avez pensé de ce séjour", "avis_ambiance": u"Avez-vous passé un bon moment à ce travail ? Étiez-vous assez guidé⋅e ? Aviez-vous un bon contact avec vos encadrant⋅e⋅s ? Y avait-il une bonne ambiance dans l'équipe ?", "avis_sujet": u"Quelle était votre mission ? Qu'en avez-vous retiré ? Le travail correspondait-il à vos attentes ? Était-ce à votre niveau, trop dur, trop facile ?", "avis_admin": u"Avez-vous commencé votre travail à la date prévue ? Était-ce compliqué d'obtenir les documents nécessaires (visa, contrats, etc) ? L'administration de l'établissement vous a-t-elle aidé⋅e ? Étiez-vous rémunéré⋅e ?", + "avis_prestage": u"Comment avez-vous trouvé où aller pour cette expérience ? À quel moment avez-vous commencé à chercher ? Avez-vous eu des entretiens pour obtenir votre place ? Avez-vous eu d'autres pistes, pourquoi avez-vous choisi cette option ?", "les_plus": u"Les principaux points positifs de cette expérience", "les_moins": u"Ce qui aurait pu être mieux", } diff --git a/avisstage/migrations/0002_auto_20171002_2243.py b/avisstage/migrations/0002_auto_20171002_2243.py new file mode 100644 index 0000000..59c0ea4 --- /dev/null +++ b/avisstage/migrations/0002_auto_20171002_2243.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.2 on 2017-10-02 20:43 +from __future__ import unicode_literals + +from django.db import migrations, models +import tinymce.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('avisstage', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='avisstage', + name='avis_prestage', + field=tinymce.models.HTMLField(blank=True, default='', verbose_name='Avant le stage'), + ), + migrations.AddField( + model_name='stage', + name='len_avis_lieux', + field=models.IntegerField(default=0, verbose_name='Longueur des avis de lieu'), + ), + migrations.AddField( + model_name='stage', + name='len_avis_stage', + field=models.IntegerField(default=0, verbose_name='Longueur des avis de stage'), + ), + ] diff --git a/avisstage/models.py b/avisstage/models.py index 15d0001..f13b8b0 100644 --- a/avisstage/models.py +++ b/avisstage/models.py @@ -10,6 +10,7 @@ from django.template.defaultfilters import slugify from django.forms.widgets import DateInput from django.urls import reverse from django.utils import timezone +from django.utils.html import strip_tags from taggit_autosuggest.managers import TaggableManager from tinymce.models import HTMLField as RichTextField @@ -162,6 +163,8 @@ class Stage(models.Model): public = models.BooleanField(u"Visible publiquement", default=False) date_creation = models.DateTimeField(u"Créé le", default=timezone.now) date_maj = models.DateTimeField(u"Mis à jour le", default=timezone.now) + len_avis_stage = models.IntegerField(u"Longueur des avis de stage", default=0) + len_avis_lieux = models.IntegerField(u"Longueur des avis de lieu", default=0) # Caractéristiques du stage sujet = models.CharField(u"Sujet", max_length=500) @@ -221,6 +224,26 @@ class Stage(models.Model): def __unicode__(self): return u"%s (par %s)" % (self.sujet, self.auteur.user.username) + def update_stats(self, save=True): + def get_len(obj): + length = 0 + avis = obj.avis_all + for k, av in avis: + length += len(av.split()) + length += len(obj.chapo.split()) + length += len(obj.les_plus.split()) + length += len(obj.les_moins.split()) + return length + + if self.avis_stage: + self.len_avis_stage = get_len(self.avis_stage) + self.len_avis_lieux = 0 + for avis in self.avislieu_set.all(): + self.len_avis_lieux += get_len(avis) + + if save: + self.save() + class Meta: verbose_name = "Stage" @@ -235,6 +258,7 @@ class AvisStage(models.Model): avis_ambiance = RichTextField(u"L'ambiance de travail", blank=True) avis_sujet = RichTextField(u"La mission", blank=True) avis_admin = RichTextField(u"Formalités et administration", blank=True) + avis_prestage = RichTextField(u"Avant le stage", blank=True, default="") les_plus = models.TextField(u"Les plus de cette expérience", blank=True) les_moins = models.TextField(u"Les moins de cette expérience", blank=True) @@ -245,7 +269,7 @@ class AvisStage(models.Model): # Liste des champs d'avis, couplés à leur nom (pour l'affichage) @property def avis_all(self): - fields = ['avis_sujet', 'avis_ambiance', 'avis_admin'] + fields = ['avis_sujet', 'avis_ambiance', 'avis_admin', 'avis_prestage'] return [(AvisStage._meta.get_field(field).verbose_name, getattr(self, field, '')) for field in fields] diff --git a/avisstage/sass/_stage_detail.scss b/avisstage/sass/_stage_detail.scss index 78c7cc4..3f9fed4 100644 --- a/avisstage/sass/_stage_detail.scss +++ b/avisstage/sass/_stage_detail.scss @@ -158,6 +158,11 @@ article.stage { } } } + .avis-vides { + font-style: italic; + font-size: 0.9em; + text-align: center; + } } // Sommaire sur le côté diff --git a/avisstage/static/css/screen.css b/avisstage/static/css/screen.css index 1faebbc..f9f9fa4 100644 --- a/avisstage/static/css/screen.css +++ b/avisstage/static/css/screen.css @@ -542,25 +542,31 @@ article.stage section .plusmoins .moins:before { vertical-align: top; color: #c70660; } -/* line 165, ../../sass/_stage_detail.scss */ +/* line 161, ../../sass/_stage_detail.scss */ +article.stage section .avis-vides { + font-style: italic; + font-size: 0.9em; + text-align: center; +} +/* line 170, ../../sass/_stage_detail.scss */ article.stage .section-wrapper { display: table; margin-left: -15px; width: 100%; } -/* line 170, ../../sass/_stage_detail.scss */ +/* line 175, ../../sass/_stage_detail.scss */ article.stage .section-wrapper .toc-wrapper, article.stage .section-wrapper > section { display: table-cell; vertical-align: top; } -/* line 174, ../../sass/_stage_detail.scss */ +/* line 179, ../../sass/_stage_detail.scss */ article.stage .section-wrapper .toc-wrapper { max-width: 230px; width: 25%; padding: 5px; padding-right: 25px; } -/* line 180, ../../sass/_stage_detail.scss */ +/* line 185, ../../sass/_stage_detail.scss */ article.stage .section-wrapper .toc { font-family: "Dosis", sans-serif; position: -webkit-sticky; @@ -571,12 +577,12 @@ article.stage .section-wrapper .toc { padding: 5px; box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.2); } -/* line 190, ../../sass/_stage_detail.scss */ +/* line 195, ../../sass/_stage_detail.scss */ article.stage .section-wrapper .toc ul { list-style: none; padding: 0; } -/* line 195, ../../sass/_stage_detail.scss */ +/* line 200, ../../sass/_stage_detail.scss */ article.stage .section-wrapper .toc a { display: block; color: inherit; @@ -585,45 +591,45 @@ article.stage .section-wrapper .toc a { padding: 5px; line-height: 1; } -/* line 203, ../../sass/_stage_detail.scss */ +/* line 208, ../../sass/_stage_detail.scss */ article.stage .section-wrapper .toc a:hover { color: #8fcc33; } -/* line 207, ../../sass/_stage_detail.scss */ +/* line 212, ../../sass/_stage_detail.scss */ article.stage .section-wrapper .toc .toc-h1 a { font-weight: 900; } -/* line 210, ../../sass/_stage_detail.scss */ +/* line 215, ../../sass/_stage_detail.scss */ article.stage .section-wrapper .toc .toc-h2 { margin-top: 10px; font-weight: 400; } -/* line 214, ../../sass/_stage_detail.scss */ +/* line 219, ../../sass/_stage_detail.scss */ article.stage .section-wrapper .toc .toc-h3 a { font-weight: 300; } -/* line 217, ../../sass/_stage_detail.scss */ +/* line 222, ../../sass/_stage_detail.scss */ article.stage .section-wrapper .toc .toc-active a { color: #0f4c82; } -/* line 224, ../../sass/_stage_detail.scss */ +/* line 229, ../../sass/_stage_detail.scss */ .misc-hdr { display: table; width: 100%; border-bottom: 1px solid #ccc; } -/* line 229, ../../sass/_stage_detail.scss */ +/* line 234, ../../sass/_stage_detail.scss */ .misc-hdr > * { display: table-cell; vertical-align: bottom; } -/* line 234, ../../sass/_stage_detail.scss */ +/* line 239, ../../sass/_stage_detail.scss */ .misc-hdr h1, .misc-hdr h3 { width: 100%; padding-right: 5px; } -/* line 238, ../../sass/_stage_detail.scss */ +/* line 243, ../../sass/_stage_detail.scss */ .misc-hdr .dates { width: 50px; background-color: #950548; @@ -634,28 +640,28 @@ article.stage .section-wrapper .toc .toc-active a { font-size: 0.8em; text-align: center; } -/* line 248, ../../sass/_stage_detail.scss */ +/* line 253, ../../sass/_stage_detail.scss */ .misc-hdr .dates span { display: block; } -/* line 251, ../../sass/_stage_detail.scss */ +/* line 256, ../../sass/_stage_detail.scss */ .misc-hdr .dates .year { font-size: 1.8em; } -/* line 259, ../../sass/_stage_detail.scss */ +/* line 264, ../../sass/_stage_detail.scss */ .edit-box { background: #eee; margin: 10px; padding: 10px 20px; text-align: center; } -/* line 265, ../../sass/_stage_detail.scss */ +/* line 270, ../../sass/_stage_detail.scss */ .edit-box.public { background: #cae3f9; border: 1px solid #125b9b; } -/* line 270, ../../sass/_stage_detail.scss */ +/* line 275, ../../sass/_stage_detail.scss */ .edit-box.prive { background: #fdcfe4; border: 1px solid #ad0654; diff --git a/avisstage/templates/avisstage/detail/avis.html b/avisstage/templates/avisstage/detail/avis.html index 1723210..2d62809 100644 --- a/avisstage/templates/avisstage/detail/avis.html +++ b/avisstage/templates/avisstage/detail/avis.html @@ -34,4 +34,7 @@ {% endif %} + {% if longueur < 15 %} +
Pas grand-chose par ici. Peut-être aurez-vous plus d'informations en contactant directement l'auteur⋅e ?
+ {% endif %} diff --git a/avisstage/templates/avisstage/detail/stage.html b/avisstage/templates/avisstage/detail/stage.html index 7d7e118..ec399ae 100644 --- a/avisstage/templates/avisstage/detail/stage.html +++ b/avisstage/templates/avisstage/detail/stage.html @@ -109,10 +109,10 @@Afficher la carte de tous les stages
-Afficher les dernières mises à jour
+Afficher la carte de tous les stages, triés par dernière mise à jour
+{#Afficher les dernières mises à jour
#} {% endblock %} diff --git a/avisstage/templates/avisstage/recherche/resultats.html b/avisstage/templates/avisstage/recherche/resultats.html index 00e79e3..435c79e 100644 --- a/avisstage/templates/avisstage/recherche/resultats.html +++ b/avisstage/templates/avisstage/recherche/resultats.html @@ -1,5 +1,5 @@ {% extends "avisstage/base.html" %} -{% load staticfiles %} +{% load staticfiles avisstage_tags %} {% block title %}Chercher un stage - ExperiENS{% endblock %} @@ -54,6 +54,8 @@