From 1699febab8b0b32a1692fd97ae315ce0f66347cd Mon Sep 17 00:00:00 2001
From: Emmanuel Viennet <emmanuel.viennet@gmail.com>
Date: Sat, 16 Dec 2023 22:53:02 +0100
Subject: [PATCH] ajout_justificatif_etud: upload fichiers + corrige
 permissions

---
 README.md                                            |  2 +-
 app/api/justificatifs.py                             | 12 ++++++++++--
 app/models/assiduites.py                             |  2 +-
 app/pe/README.md                                     |  5 +----
 app/tables/visu_assiduites.py                        |  4 ++--
 .../assiduites/pages/ajout_justificatif_etud.j2      |  8 ++++----
 6 files changed, 19 insertions(+), 14 deletions(-)

diff --git a/README.md b/README.md
index d0194b45e..b17799fee 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
 # ScoDoc - Gestion de la scolarité - Version ScoDoc 9
 
-(c) Emmanuel Viennet 1999 - 2022 (voir LICENCE.txt).
+(c) Emmanuel Viennet 1999 - 2024 (voir LICENCE.txt).
 
 Installation: voir instructions à jour sur <https://scodoc.org/GuideInstallDebian11>
 
diff --git a/app/api/justificatifs.py b/app/api/justificatifs.py
index d0b10ec46..fd71effbd 100644
--- a/app/api/justificatifs.py
+++ b/app/api/justificatifs.py
@@ -651,10 +651,11 @@ def justif_import(justif_id: int = None):
 )
 @scodoc
 @login_required
-@permission_required(Permission.AbsJustifView)
+@permission_required(Permission.ScoView)
 def justif_export(justif_id: int | None = None, filename: str | None = None):
     """
-    Retourne un fichier d'une archive d'un justificatif
+    Retourne un fichier d'une archive d'un justificatif.
+    La permission est ScoView + (AbsJustifView ou être l'auteur du justifcatif)
     """
     # On récupère le justificatif concerné
     query: Query = Justificatif.query.filter_by(id=justif_id)
@@ -662,6 +663,13 @@ def justif_export(justif_id: int | None = None, filename: str | None = None):
         query = query.join(Identite).filter_by(dept_id=g.scodoc_dept_id)
     justificatif_unique: Justificatif = query.first_or_404()
 
+    # Vérification des permissions
+    if not (
+        current_user.has_permission(Permission.AbsJustifView)
+        or justificatif_unique.user_id == current_user.id
+    ):
+        return json_error(401, "non autorisé à voir ce fichier")
+
     # On récupère l'archive concernée
     archive_name: str = justificatif_unique.fichier
     if archive_name is None:
diff --git a/app/models/assiduites.py b/app/models/assiduites.py
index 85b0fe335..7e9ab274c 100644
--- a/app/models/assiduites.py
+++ b/app/models/assiduites.py
@@ -423,7 +423,7 @@ class Justificatif(db.Model):
         )
 
         db.session.add(nouv_justificatif)
-
+        db.session.commit()
         log(f"create_justificatif: etudid={etud.id} {nouv_justificatif}")
         Scolog.logdb(
             method="create_justificatif",
diff --git a/app/pe/README.md b/app/pe/README.md
index bace3081b..b71bc863a 100644
--- a/app/pe/README.md
+++ b/app/pe/README.md
@@ -1,8 +1,5 @@
-#  Module "Avis de poursuite d'étude"
+# Module "Avis de poursuite d'étude"
 
 Conçu et développé sur ScoDoc 7 par Cléo Baras (IUT de Grenoble) pour le DUT.
 
 Actuellement non opérationnel dans ScoDoc 9.
-
-
-
diff --git a/app/tables/visu_assiduites.py b/app/tables/visu_assiduites.py
index 07fb7dec7..304ab405e 100644
--- a/app/tables/visu_assiduites.py
+++ b/app/tables/visu_assiduites.py
@@ -131,9 +131,9 @@ class RowAssi(tb.Row):
     def _get_etud_stats(self, etud: Identite) -> dict[str, list[str, float, float]]:
         # XXX TODO @iziram commentaire sur la fonction et la var. retour
         retour: dict[str, tuple[str, float, float]] = {
-            "present": ["Présences", 0.0, 0.0],
-            "retard": ["Retards", 0.0, 0.0],
             "absent": ["Absences", 0.0, 0.0],
+            "retard": ["Retards", 0.0, 0.0],
+            "present": ["Présences", 0.0, 0.0],
         }
 
         assi_metric = scu.translate_assiduites_metric(
diff --git a/app/templates/assiduites/pages/ajout_justificatif_etud.j2 b/app/templates/assiduites/pages/ajout_justificatif_etud.j2
index 007ded7ca..4d28e6287 100644
--- a/app/templates/assiduites/pages/ajout_justificatif_etud.j2
+++ b/app/templates/assiduites/pages/ajout_justificatif_etud.j2
@@ -34,7 +34,7 @@ div.submit > input {
         </div>
     {% endfor %}
 
-    <form id="ajout-justificatif-etud" method="post">
+    <form id="ajout-justificatif-etud" method="post" enctype="multipart/form-data">
     <fieldset>
         {{ form.hidden_tag() }}
         {# Dates et heures #}
@@ -66,10 +66,10 @@ div.submit > input {
             {{ render_field_errors(form, 'assi_raison') }}
         </div>
         {# Fichier(s) justificatif(s) #}
-        <div><em>chargement fichier désactivé (travaux en cours), passer ensuite par "modifier le justificatif"</em>
-            {# <div>{{ form.fichiers.label }}</div>
+        <div>
+            <div>{{ form.fichiers.label }}</div>
             {{ form.fichiers() }}
-            {{ render_field_errors(form, 'fichiers') }} #}
+            {{ render_field_errors(form, 'fichiers') }}
         </div>
         {# Date dépot #}
         {{ form.entry_date.label }}&nbsp;: {{ form.entry_date }}
-- 
GitLab