Commit 3e08861a authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Extraction d'une classe UnicaenPegaseConfig pour les options de config de...

Extraction d'une classe UnicaenPegaseConfig pour les options de config de communication avec Pégase.
parent 7e758fe0
Loading
Loading
Loading
Loading
+1 −0
Changes for CHANGELOG.md: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@ Journal des modifications
- Import (réception) d'inscription administrative : spécification partielle dans un fichier de config (complétée dynamiquement) pour la visibilité et accéder aux logs.
- Inscription administrative : création de la thèse de manière plus complète à partir du dossier d'admission et de l'IA reçue.
- Doctorant : prise en compte du code apprenant Pégase (si disponible) comme valeur du 'numéro étudiant'.
- Extraction d'une classe UnicaenPegaseConfig pour les options de config de communication avec Pégase.
- [FIX] Autorisation de réinscription : calcul erroné de l'année universitaire suivante à partir de l'année du rapport CSI.
- [FIX] Admission : invisibilité des détails de la quesiton 'Avez-vous un contrat doctoral ?' au chargement de la page.
- [FIX] Saisie financement de thèse : invisibilité des listes déroulantes 'Année' et 'Origine' au chargement du formulaire.
+10 −0
Changes for config/autoload/secret.local.php.dist: 10 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -109,6 +109,16 @@ return [
        'codes_structures_etablissements' => [
            'UCN' => 'ETAB00',
        ],
        // codes des origines d'admission selon l'établissement d'inscription
        'codes_origines_admissions' => [
            'UCN' => 'ECOLEDOCTORALE',
            'INSA' => 'ECOLEDOCTORALE',
        ],
        // codes des régimes d'inscriptions selon l'établissement d'inscription
        'codes_regimes_inscriptions' => [
            'UCN' => 'XXXX',
            'INSA' => 'XXXX', // ?
        ],
        // codes des types de résultats (cf. API Pégase "REF-Référentiel", /parametrage/TypeResultat) selon l'établissement d'inscription
        'codes_types_resultats' => [
            'UCN' => [
+2 −0
Changes for module/Application/config/module.config.php: 2 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@ namespace Application;

use Application\Assertion\AssertionAbstractFactory;
use Application\Cache\MemcachedFactory;
use Application\Config\UnicaenPegaseConfig;
use Application\Controller\ConsoleController;
use Application\Controller\Factory\ConsoleControllerFactory;
use Application\Controller\Factory\IndexControllerFactory;
@@ -231,6 +232,7 @@ return array(
        ),
        'invokables' => array(
            'RouteMatchInjector' => RouteMatchInjector::class,
            UnicaenPegaseConfig::class => UnicaenPegaseConfig::class,
        ),
        'factories' => array(
            Navigation::class => NavigationFactoryFactory::class,
+166 −0
Changes for module/Application/src/Application/Config/UnicaenPegaseConfig.php: 166 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace Application\Config;

use Application\Attribute\InjectConfig;
use Webmozart\Assert\Assert;

//
// todo : trouver un meilleur emplacement pour cette config !
//

#[InjectConfig('unicaen_pegase > codes_structures_etablissements')] /** @see setCodesStructuresEtablissements() */
#[InjectConfig('unicaen_pegase > codes_origines_admissions')] /** @see setCodesOriginesAdmissions() */
#[InjectConfig('unicaen_pegase > codes_regimes_inscriptions')] /** @see setCodesRegimesInscriptions() */
#[InjectConfig('unicaen_pegase > codes_types_resultats')] /** @see setCodesTypesResultats() */
class UnicaenPegaseConfig
{
    public static function fromArray(array $config): static
    {
        $instance = new static();
        $instance->setCodesStructuresEtablissements($config['codes_structures_etablissements'] ?? []);
        $instance->setCodesOriginesAdmissions($config['codes_origines_admissions'] ?? []);
        $instance->setCodesRegimesInscriptions($config['codes_regimes_inscriptions'] ?? []);
        $instance->setCodesTypesResultats($config['codes_types_resultats'] ?? []);

        return $instance;
    }

    /**
     * Codes des établissements Pégase selon l'établissement d'inscription.
     *
     * Exemple :
     *
     *      [
     *           'UCN' => 'ETAB00',
     *           'INSA' => 'ETAB00',
     *      ],
     *
     * @var array<string, string>
     */
    private array $codesStructuresEtablissements;

    public function getCodesStructuresEtablissements(): array
    {
        return $this->codesStructuresEtablissements;
    }

    public function setCodesStructuresEtablissements(array $codesStructuresEtablissements): void
    {
        $this->codesStructuresEtablissements = $codesStructuresEtablissements;
    }

    public function getCodeStructureEtablissementForEtablissement(string $codeEtablissement): ?string
    {
        return $this->codesStructuresEtablissements[$codeEtablissement] ?? null;
    }

    /**
     * Codes des types de résultats Pégase selon l'établissement d'inscription.
     *
     * Exemple :
     *
     *      [
     *          'UCN' => [
     *              'VALIDE' => 'TRE009',
     *              'NON_VALIDE' => 'TRE010',
     *          ],
     *          'INSA' => [
     *              'VALIDE' => 'XXXX',
     *              'NON_VALIDE' => 'YYYY',
     *          ],
     *      ],
     *
     * @var array<string, array<string, string>>
     */
    private array $codesTypesResultats;

    public function setCodesTypesResultats(array $codesTypesResultats): void
    {
        $this->codesTypesResultats = $codesTypesResultats;
    }

    public function getCodesTypesResultats(): array
    {
        return $this->codesTypesResultats;
    }

    /**
     * @return array<string, string>
     */
    public function getCodesTypesResultatsForEtablissement(string $codeEtablissement): array
    {
        return $this->codesTypesResultats[$codeEtablissement] ?? [];
    }

    public function hasCodesTypesResultatsForEtablissement(string $codeEtablissement): bool
    {
        return isset($this->codesTypesResultats[$codeEtablissement]);
    }

    public function assertHasCodesTypesResultatsForEtablissement(string $codeEtablissement): void
    {
        Assert::true(
            $this->hasCodesTypesResultatsForEtablissement($codeEtablissement),
            "La config des types de résultats ne contient pas de clé correspondant au code de l'établissement %s"
        );
    }

    /**
     * Codes des origines d'admissions Pégase selon l'établissement d'inscription.
     *
     * Exemple :
     *
     *      [
     *          'UCN' => 'ECOLEDOCTORALE',
     *          'INSA' => 'ECOLEDOCTORALE',
     *      ],
     *
     * @var array<string, string>
     */
    private array $codesOriginesAdmissions;

    public function setCodesOriginesAdmissions(array $codesOriginesAdmissions): void
    {
        $this->codesOriginesAdmissions = $codesOriginesAdmissions;
    }

    public function getCodeOrigineAdmissionForEtablissement(string $codeEtablissement): ?string
    {
        return $this->codesOriginesAdmissions[$codeEtablissement] ?? null;
    }

    public function getCodesOriginesAdmissions(): array
    {
        return $this->codesOriginesAdmissions;
    }

    /**
     * Codes des réginmes d'inscriptions Pégase selon l'établissement d'inscription.
     *
     * Exemple :
     *
     *      [
     *          'UCN' => 'REG001',
     *          'INSA' => 'REG006',
     *      ],
     *
     * @var array<string, string>
     */
    private array $codesRegimesInscriptions;

    public function setCodesRegimesInscriptions(array $codesRegimesInscriptions): void
    {
        $this->codesRegimesInscriptions = $codesRegimesInscriptions;
    }

    public function getCodeRegimeInscriptionForEtablissement(string $codeEtablissement): ?string
    {
        return $this->codesRegimesInscriptions[$codeEtablissement] ?? null;
    }

    public function getCodesRegimesInscriptions(): array
    {
        return $this->codesRegimesInscriptions;
    }
}
 No newline at end of file
+13 −0
Changes for module/Application/src/Application/Config/UnicaenPegaseConfigAwareTrait.php: 13 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace Application\Config;

trait UnicaenPegaseConfigAwareTrait
{
    protected UnicaenPegaseConfig $unicaenPegaseConfig;

    public function setUnicaenPegaseConfig(UnicaenPegaseConfig $unicaenPegaseConfig): void
    {
        $this->unicaenPegaseConfig = $unicaenPegaseConfig;
    }
}
 No newline at end of file
Loading