Commit b53e21f8 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Module StepStar : ajout dans le TEF des IdRef de tous les acteurs de la thèse...

Module StepStar : ajout dans le TEF des IdRef de tous les acteurs de la thèse (doctorant, directeur, codirecteur, etc.)
parent 93826082
Loading
Loading
Loading
Loading
+1 −0
Changes for CHANGELOG.md: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ Journal des modifications
- Formulaire de création d'un individu à partir d'un utilisateur : initialisation manquante du nom patronymique.
- Module StepStar : mise à jour du script bash d'envoi quotidien des thèses vers STEP/STAR.
- Module StepStar : plus d'envoi de la date d'abandon (recommandation de l'ABES).
- Module StepStar : ajout dans le TEF des IdRef de tous les acteurs de la thèse (doctorant, directeur, codirecteur, etc.)
- Suppression du menu 'Administration > Compléments d'individu' devenu inutile.
- Amélioration visuelle des pages de création/modification de structure (Etab/ED/UR).
- Affichage des co-encadrants sur l'annuraire des thèses (au survol de la souris sur la direction de thèse)
+33 −16
Changes for module/StepStar/config/xml2tef.xsl.twig: 33 added lines, 16 removed lines.
Original line number Diff line number Diff line
@@ -193,7 +193,14 @@ que ces méta sont saisies dans les formulaires STAR. C'est au choix.
                                        <tef:autoriteExterne autoriteSource="INE">
                                            <xsl:value-of select="CODE_INE"/>
                                        </tef:autoriteExterne>

                                        <xsl:if test="PPN_DOCTORANT != ''">
                                            <tef:autoriteExterne autoriteSource="Sudoc">
                                                <xsl:value-of select="PPN_DOCTORANT"/>
                                            </tef:autoriteExterne>
                                        </xsl:if>
                                    </tef:auteur>

                                    <xsl:if test="NNT != ''">
                                        <dc:identifier xsi:type="tef:NNT">
                                            <xsl:value-of select="NNT"/>
@@ -304,29 +311,39 @@ que ces méta sont saisies dans les formulaires STAR. C'est au choix.

                                    <tef:avisJury>oui</tef:avisJury>

                                    <!-- Directeur -->
                                    <xsl:if test="NOM_DIRECTEUR != ''">
                                    <!-- Directeurs (1 seul théoriquement) -->
                                    <xsl:for-each select="DIRECTEUR">
                                        <tef:directeurThese>
                                            <tef:nom>
                                                <xsl:value-of select="NOM_DIRECTEUR"/>
                                                <xsl:value-of select="attribute::nom"/>
                                            </tef:nom>
                                            <tef:prenom>
                                                <xsl:value-of select="PRENOM_DIRECTEUR"/>
                                                <xsl:value-of select="attribute::prenom"/>
                                            </tef:prenom>
                                        </tef:directeurThese>
                                            <xsl:if test="attribute::ppn != ''">
                                                <tef:autoriteExterne autoriteSource="Sudoc">
                                                    <xsl:value-of select="attribute::ppn"/>
                                                </tef:autoriteExterne>
                                            </xsl:if>
                                        </tef:directeurThese>
                                    </xsl:for-each>

                                    <!-- Co-directeur -->
                                    <xsl:if test="NOM_CODIRECTEUR != ''">
                                    <!-- Co-directeurs -->
                                    <xsl:for-each select="CODIRECTEUR">
                                        <tef:directeurThese>
                                            <tef:nom>
                                                <xsl:value-of select="NOM_CODIRECTEUR"/>
                                                <xsl:value-of select="attribute::nom"/>
                                            </tef:nom>
                                            <tef:prenom>
                                                <xsl:value-of select="PRENOM_CODIRECTEUR"/>
                                                <xsl:value-of select="attribute::prenom"/>
                                            </tef:prenom>
                                        </tef:directeurThese>
                                            <xsl:if test="attribute::ppn != ''">
                                                <tef:autoriteExterne autoriteSource="Sudoc">
                                                    <xsl:value-of select="attribute::ppn"/>
                                                </tef:autoriteExterne>
                                            </xsl:if>
                                        </tef:directeurThese>
                                    </xsl:for-each>

                                    <!-- Président du jury -->
                                    <xsl:for-each select="PRESIDENT_JURY">
@@ -337,9 +354,9 @@ que ces méta sont saisies dans les formulaires STAR. C'est au choix.
                                            <tef:prenom>
                                                <xsl:value-of select="attribute::prenom"/>
                                            </tef:prenom>
                                            <xsl:if test="attribute::PPN != ''">
                                            <xsl:if test="attribute::ppn != ''">
                                                <tef:autoriteExterne autoriteSource="Sudoc">
                                                    <xsl:value-of select="attribute::PPN"/>
                                                    <xsl:value-of select="attribute::ppn"/>
                                                </tef:autoriteExterne>
                                            </xsl:if>
                                        </tef:presidentJury>
@@ -354,9 +371,9 @@ que ces méta sont saisies dans les formulaires STAR. C'est au choix.
                                            <tef:prenom>
                                                <xsl:value-of select="attribute::prenom"/>
                                            </tef:prenom>
                                            <xsl:if test="attribute::PPN != ''">
                                            <xsl:if test="attribute::ppn != ''">
                                                <tef:autoriteExterne autoriteSource="Sudoc">
                                                    <xsl:value-of select="attribute::PPN"/>
                                                    <xsl:value-of select="attribute::ppn"/>
                                                </tef:autoriteExterne>
                                            </xsl:if>
                                        </tef:membreJury>
@@ -371,9 +388,9 @@ que ces méta sont saisies dans les formulaires STAR. C'est au choix.
                                            <tef:prenom>
                                                <xsl:value-of select="attribute::prenom"/>
                                            </tef:prenom>
                                            <xsl:if test="attribute::PPN != ''">
                                            <xsl:if test="attribute::ppn != ''">
                                                <tef:autoriteExterne autoriteSource="Sudoc">
                                                    <xsl:value-of select="attribute::PPN"/>
                                                    <xsl:value-of select="attribute::ppn"/>
                                                </tef:autoriteExterne>
                                            </xsl:if>
                                        </tef:rapporteur>
+33 −51
Changes for module/StepStar/src/StepStar/Service/Xml/XmlService.php: 33 added lines, 51 removed lines.
Original line number Diff line number Diff line
@@ -2,12 +2,12 @@

namespace StepStar\Service\Xml;

use Depot\Entity\Db\Diffusion;
use Application\Entity\Db\MailConfirmation;
use Depot\Entity\Db\MetadonneeThese;
use Application\Entity\Db\Role;
use DateInterval;
use DateTime;
use Depot\Entity\Db\Diffusion;
use Depot\Entity\Db\MetadonneeThese;
use Individu\Entity\Db\Individu;
use InvalidArgumentException;
use StepStar\Exception\XmlServiceException;
@@ -19,6 +19,7 @@ class XmlService
    // doctorant
    const CODE_ETUDIANT = 'CODE_ETUDIANT';
    const CODE_INE = 'CODE_INE';
    const PPN_DOCTORANT = 'PPN_DOCTORANT';
    const NOM_ETUDIANT = 'NOM_ETUDIANT';
    const NOM_ETUDIANT_USUEL = 'NOM_ETUDIANT_USUEL';
    const PRENOM_ETUDIANT = 'PRENOM_ETUDIANT';
@@ -102,10 +103,8 @@ class XmlService
    const CONVENTION_CIFRE_ETAB = 'CONVENTION_CIFRE_ETAB';

    // direction
    const NOM_DIRECTEUR = 'NOM_DIRECTEUR';
    const PRENOM_DIRECTEUR = 'PRENOM_DIRECTEUR';
    const NOM_CODIRECTEUR = 'NOM_CODIRECTEUR';
    const PRENOM_CODIRECTEUR = 'PRENOM_CODIRECTEUR';
    const DIRECTEUR = 'DIRECTEUR';
    const CODIRECTEUR = 'CODIRECTEUR';

    // jury
    const MEMBRE_JURY = 'MEMBRE_JURY';
@@ -359,23 +358,23 @@ class XmlService
     */
    private function createTheseElementData(array $these): array
    {
        $directeur = null;
        $codirecteur = null;
        $presidentJury = null;
        $directeurs = [];
        $codirecteurs = [];
        $presidentJurys = [];
        $membresJury = [];
        $rapporteurs = [];
        foreach ($these['acteurs'] as $acteur) {
            if ($acteur['role']['code'] === Role::CODE_DIRECTEUR_THESE) {
                $directeur = $acteur['individu'];
                $directeurs[] = $acteur['individu'];
            }
            elseif ($acteur['role']['code'] === Role::CODE_CODIRECTEUR_THESE) {
                $codirecteur = $acteur['individu'];
                $codirecteurs[] = $acteur['individu'];
            }
            elseif ($acteur['role']['code'] === Role::CODE_MEMBRE_JURY) {
                $membresJury[] = $acteur['individu'];
            }
            elseif ($acteur['role']['code'] === Role::CODE_PRESIDENT_JURY) {
                $presidentJury = $acteur['individu'];
                $presidentJurys[] = $acteur['individu'];
            }
            elseif ($acteur['role']['code'] === Role::CODE_RAPPORTEUR_JURY) {
                $rapporteurs[] = $acteur['individu'];
@@ -430,6 +429,7 @@ class XmlService
            // doctorant
            self::CODE_ETUDIANT => $these['doctorant']['individu']['supannId'], // todo : ou l'id ?
            self::CODE_INE => $these['doctorant']['ine'],
            self::PPN_DOCTORANT => $these['doctorant']['individu']['idRef'] ?? null,
            self::NOM_ETUDIANT => $these['doctorant']['individu']['nomPatronymique'] ?: $these['doctorant']['individu']['nomUsuel'],
            self::NOM_ETUDIANT_USUEL => $these['doctorant']['individu']['nomUsuel'],
            self::PRENOM_ETUDIANT => $these['doctorant']['individu']['prenom1'],
@@ -532,50 +532,20 @@ class XmlService
            $data[self::MOTS_CLES_RAMEAU_ . $index] = $mot;
        }

        // direction
        if ($directeur !== null) {
            $data[self::NOM_DIRECTEUR] = $directeur['nomUsuel'];
            $data[self::PRENOM_DIRECTEUR] = $directeur['prenom1'];
        }
        if ($codirecteur !== null) {
            $data[self::NOM_CODIRECTEUR] = $codirecteur['nomUsuel'];
            $data[self::PRENOM_CODIRECTEUR] = $codirecteur['prenom1'];
        }
        // directeurs
        $data[self::DIRECTEUR] = $this->extractIndividus($directeurs) ?: null;

        // codirecteurs
        $data[self::CODIRECTEUR] = $this->extractIndividus($codirecteurs) ?: null;

        // jury
        if (!empty($membresJury)) {
            $jury = [];
            foreach ($membresJury as $individu) {
                $jury[] = [
                    'prenom' => $individu['prenom1'],
                    'nom' => $individu['nomUsuel'],
                ];
            }
            $data[self::MEMBRE_JURY] = $jury;
        }
        $data[self::MEMBRE_JURY] = $this->extractIndividus($membresJury) ?: null;

        // président de jury
        if ($presidentJury !== null) {
            $array = [
                [
                    'prenom' => $presidentJury['prenom1'],
                    'nom' => $presidentJury['nomUsuel'],
                ],
            ];
            $data[self::PRESIDENT_JURY] = $array;
        }
        // présidents du jury (1 seul théoriquement)
        $data[self::PRESIDENT_JURY] = $this->extractIndividus($presidentJurys) ?: null;

        // rapporteurs
        if (!empty($rapporteurs)) {
            $array = [];
            foreach ($rapporteurs as $individu) {
                $array[] = [
                    'prenom' => $individu['prenom1'],
                    'nom' => $individu['nomUsuel'],
                ];
            }
            $data[self::RAPPORTEUR_JURY] = $array;
        }
        $data[self::RAPPORTEUR_JURY] = $this->extractIndividus($rapporteurs) ?: null;

        return array_filter($data);
    }
@@ -604,6 +574,18 @@ class XmlService
        return array_map('trim', explode(MetadonneeThese::SEPARATEUR_MOTS_CLES, $motsClefs));
    }

    private function extractIndividus(array $individus): array
    {
        return array_map(
            fn(array $individu) => array_filter([
                'prenom' => $individu['prenom1'],
                'nom' => $individu['nomUsuel'],
                'ppn' => $individu['idRef'] ?? null,
            ]),
            $individus
        );
    }

    private function extractDomaineFromThese(array $these)
    {
        $codeSiseDiscipline = $these['codeSiseDiscipline'] ?? null;