diff --git a/CHANGELOG.md b/CHANGELOG.md
index dacd3734a1bb08129eb3b04bc87b04480857976c..62513250d748d50e2a2c493a166997a73149ff82 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,11 @@
Journal des modifications
=========================
+5.3.1
+-----
+- [FIX] Donnée : ajout de garde lorsque le mail fourni par les données sources est " "
+- [FIX] hydration des justificatifs
+
5.3.0
-----
- Nouvelle version du module Rapports d'activité.
diff --git a/doc/release-notes/v5.3.1.md b/doc/release-notes/v5.3.1.md
new file mode 100644
index 0000000000000000000000000000000000000000..88d7bf56be1c1f98ff7f1cadd652f21722400486
--- /dev/null
+++ b/doc/release-notes/v5.3.1.md
@@ -0,0 +1,18 @@
+# Version 5.3.1
+
+## 1. Sur le serveur d'application
+
+- Placez-vous dans le répertoire de l'application puis lancez la commande suivante
+ pour installer la nouvelle version :
+
+```bash
+git fetch --tags && git checkout --force 5.3.1 && bash ./install.sh
+```
+
+- Selon le moteur PHP que vous avez installé, rechargez le service, exemple :
+ - php7.4-fpm : `service php7.4-fpm reload`
+ - apache2-mod-php7.4 : `service apache2 reload`
+
+## 2. Dans la base de données
+
+RAS
\ No newline at end of file
diff --git a/module/Fichier/src/Fichier/Entity/Db/NatureFichier.php b/module/Fichier/src/Fichier/Entity/Db/NatureFichier.php
index bb73f28e41e3042bee008acdbc6db7002bc9f57a..f2966508234af9ea560497db8df8b9b3d8c146b1 100644
--- a/module/Fichier/src/Fichier/Entity/Db/NatureFichier.php
+++ b/module/Fichier/src/Fichier/Entity/Db/NatureFichier.php
@@ -56,7 +56,7 @@ class NatureFichier
const CODE_LANGUE_ANGLAISE = 'DEMANDE_LANGUE_ANGLAISE';
const CODE_AUTRES_JUSTIFICATIFS = 'AUTRES_JUSTIFICATIFS';
- const LABEL_FORMATION_INTEGRITE_SCIENTIFIQUE = 'Justificatif de suivi de la formation "Intégrité scientifique"';
+ const LABEL_FORMATION_INTEGRITE_SCIENTIFIQUE = 'Justificatif de suivi de la formation Intégrité scientifique';
const LABEL_JUSTIFICATIF_HDR = "Justificatif d'habilitation à diriger des recherches";
const LABEL_JUSTIFICATIF_EMERITAT = "Justificatif d'émeritat";
const LABEL_JUSTIFICATIF_ETRANGER = "Justificatif dans le cas d'un membre du jury étranger";
diff --git a/module/Individu/src/Individu/Entity/Db/Individu.php b/module/Individu/src/Individu/Entity/Db/Individu.php
index c0934c9010d876c6c4c15732411c30d39c436843..9204ec8c43f0a00dce53de0b68ef2c3f89c0d746 100644
--- a/module/Individu/src/Individu/Entity/Db/Individu.php
+++ b/module/Individu/src/Individu/Entity/Db/Individu.php
@@ -266,11 +266,14 @@ class Individu implements HistoriqueAwareInterface, SourceAwareInterface, Resour
public function getEmailPro(): ?string
{
$complement = $this->getComplement();
- if ($complement AND !$complement->estHistorise() AND $complement->getEmailPro() !== null) {
+ if ($complement AND !$complement->estHistorise()
+ AND $complement->getEmailPro() !== null) {
return $complement->getEmailPro();
}
- return $this->email;
+ $email = $this->email;
+ if ($email === null or trim($this->email) === '') return null;
+ return $email;
}
/**
diff --git a/module/Soutenance/src/Soutenance/Controller/JustificatifController.php b/module/Soutenance/src/Soutenance/Controller/JustificatifController.php
index 82eeba355b2be21e618e9bd465453570a12a6d61..b1a011df8bd4739e92f2f1fc4205aceab20b5d9f 100644
--- a/module/Soutenance/src/Soutenance/Controller/JustificatifController.php
+++ b/module/Soutenance/src/Soutenance/Controller/JustificatifController.php
@@ -88,10 +88,15 @@ class JustificatifController extends AbstractController {
$files = ['files' => $request->getFiles()->toArray()];
if ($nature) $data['nature'] = $nature->getCode();
- $form->setData($data);
- if ($form->isValid()) {
- var_dump("After form");
+// $form->setData($data);
+// if ($form->isValid()) {
+ // <!> Attention : L'hydration echoue ...
+ if ($data['nature'] !== null AND !empty($files)) {
if ($nature === null) $nature = $this->fichierTheseService->fetchNatureFichier($data['nature']);
+ if ($data['membre']) {
+ $membre = $this->getMembreService()->find($data['membre']);
+ $justificatif->setMembre($membre);
+ }
$version = $this->fichierTheseService->fetchVersionFichier(VersionFichier::CODE_ORIG);
$fichiers = $this->fichierTheseService->createFichierThesesFromUpload($these, $files, $nature, $version);
$justificatif->setFichier($fichiers[0]);
diff --git a/module/Soutenance/src/Soutenance/Controller/PresoutenanceController.php b/module/Soutenance/src/Soutenance/Controller/PresoutenanceController.php
index e253e74fb0cefd07b32fb7dd4cdce93539bd4afd..feb2a04cc4c1ea499d42e5c87c441675cbec27e2 100644
--- a/module/Soutenance/src/Soutenance/Controller/PresoutenanceController.php
+++ b/module/Soutenance/src/Soutenance/Controller/PresoutenanceController.php
@@ -692,7 +692,9 @@ class PresoutenanceController extends AbstractController
/** @var Membre $membre */
foreach ($proposition->getMembres() as $membre) {
if ($membre->estMembre()) {
- $email = ($membre->getIndividu() and $membre->getIndividu()->getEmailPro()) ? $membre->getIndividu()->getEmailPro() : $membre->getEmail();
+ $email = null;
+ if ($membre->getIndividu() and $membre->getIndividu()->getEmailPro()) $email = $membre->getIndividu()->getEmailPro();
+ if ($email === null or trim($email) === '') $email = $membre->getEmail();
/** @see PresoutenanceController::convocationMembreAction() */
$url = $this->url()->fromRoute('soutenance/presoutenance/convocation-membre', ['proposition' => $proposition->getId(), 'membre' => $membre->getId()], ['force_canonical' => true], true);
try {
diff --git a/module/Soutenance/src/Soutenance/Form/Justificatif/JusticatifHydrator.php b/module/Soutenance/src/Soutenance/Form/Justificatif/JusticatifHydrator.php
index 55ddf51056784f0c9d93cb3f372637674c239d7e..efd25f5d1b6cf39731f5db7d2babde21fb9ffca1 100644
--- a/module/Soutenance/src/Soutenance/Form/Justificatif/JusticatifHydrator.php
+++ b/module/Soutenance/src/Soutenance/Form/Justificatif/JusticatifHydrator.php
@@ -40,6 +40,7 @@ class JusticatifHydrator implements HydratorInterface {
{
/** @var Membre $membre */
$membre = $this->getMembreService()->find($data['membre']);
+
$object->setMembre($membre);
return $object;
}
diff --git a/module/Soutenance/src/Soutenance/Form/Justificatif/JustificatifForm.php b/module/Soutenance/src/Soutenance/Form/Justificatif/JustificatifForm.php
index 4143d938388f2464f51aa344841169653ab8477f..abd017a2ca8364f628317c8121ee6b00cad2502d 100644
--- a/module/Soutenance/src/Soutenance/Form/Justificatif/JustificatifForm.php
+++ b/module/Soutenance/src/Soutenance/Form/Justificatif/JustificatifForm.php
@@ -83,7 +83,7 @@ class JustificatifForm extends Form {
$this->setInputFilter((new Factory())->createInputFilter([
'nature' => [
'name' => 'nature',
- 'required' => true,
+ 'required' => false,
],
'fichier' => [
'name' => 'fichier',
diff --git a/module/Soutenance/src/Soutenance/Service/Notification/SoutenanceNotificationFactory.php b/module/Soutenance/src/Soutenance/Service/Notification/SoutenanceNotificationFactory.php
index 0cdde9f0d724df26245746f3838faf390257029b..fe0c839a1da2652b3a8d09a5f75095dca19d88eb 100644
--- a/module/Soutenance/src/Soutenance/Service/Notification/SoutenanceNotificationFactory.php
+++ b/module/Soutenance/src/Soutenance/Service/Notification/SoutenanceNotificationFactory.php
@@ -674,6 +674,13 @@ class SoutenanceNotificationFactory extends NotificationFactory
$these = $proposition->getThese();
$pdcData = $this->getTheseService()->fetchInformationsPageDeCouverture($these);
+ if ($email === null or $email === '') {
+ throw new RuntimeException("Aucune adresse électronique pour le doctorant [".$doctorant->getIndividu()->getNomComplet()."]");
+ }
+ if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
+ throw new RuntimeException("L'adresse électronique est mal formée pour le doctorant [".$doctorant->getIndividu()->getNomComplet()."]");
+ }
+
$notif = new Notification();
$notif
->setSubject("Convocation pour la soutenance de thèse de " . $doctorant->getNomComplet())
@@ -709,6 +716,13 @@ class SoutenanceNotificationFactory extends NotificationFactory
$these = $proposition->getThese();
$pdcData = $this->getTheseService()->fetchInformationsPageDeCouverture($these);
+ if ($email === null or $email === '') {
+ throw new RuntimeException("Aucune adresse électronique pour le membre [".$membre->getDenomination()."]");
+ }
+ if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
+ throw new RuntimeException("L'adresse électronique est mal formée pour le membre [".$membre->getDenomination()."]");
+ }
+
$notif = new Notification();
$notif
->setSubject("Convocation pour la soutenance de thèse de " . $doctorant->getNomComplet())