Commit 20006b5d authored by Thomas Hamel's avatar Thomas Hamel
Browse files

Module HDR : uniquement des membres extérieurs à la COMUE pour les rapporteurs

parent d650b7fa
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ Journal des modifications
- Bandeau et pied de page de couleur rouge sur la version de test/démo et verte sur la version de dev.
- Module Dépôt de thèse : diminution du temps d'affichage initial des pages (en supprimant le chargement asynchrone par bloc).
- Module Admission : Ajout d'un privilège pour permettre de modifier un dossier lorsque le circuit de validations est commencé
- Module HDR : uniquement des membres extérieurs à la COMUE pour les rapporteurs
- Module Doctorant :
  - Recherche des doctorants, avec possibilité de filtrage par ED/UR/Étab (en fonction de l'utilisateur connecté)
  - Tableau de bord visible par le doctorant (dès la page d'accueil), ainsi que par la Maison du doctorat/Gestionnaire d'ED/UR/Responsable d'ED/UR
+9 −0
Original line number Diff line number Diff line
@@ -393,4 +393,13 @@ return [
            __DIR__ . '/../view',
        ],
    ],
    'public_files' => [
        'inline_scripts' => [
        ],
        'stylesheets' => [
        ],
        'head_scripts' => [
            '081_hdr' => "/js/hdr.js",
        ],
    ],
];
 No newline at end of file
+20 −11
Original line number Diff line number Diff line
<?php

use Laminas\Form\Element;
use Soutenance\Entity\Membre;
use Soutenance\Entity\Proposition;
use Soutenance\Form\Membre\MembreForm;
use These\Entity\Db\These;
@@ -13,10 +14,7 @@ use These\Entity\Db\These;
 */

$object = $proposition->getObject();
?>


<?php
if(isset($validationsDejaEffectuees) && $validationsDejaEffectuees): ?>
    <div class="alert alert-warning">
        <span class="icon icon-attention"></span>
@@ -46,21 +44,32 @@ if ($object->getEtablissement()->estComue()) {
}

echo $this->formControlGroup($form->get('exterieur'));
echo $this->formControlGroup($form->get('visio'));
echo $this->formControlGroup($form->get('role'));

echo $this->formControlGroup($form->get('submit'));
echo $this->form()->closeTag();
?>
echo $this->formControlGroup($form->get('visio')); ?>
<div id="form-role-wrapper"
     data-hdr-roles-to-disable='<?= json_encode([
         Membre::RAPPORTEUR_JURY,
         Membre::RAPPORTEUR_VISIO,
         Membre::RAPPORTEUR_ABSENT
     ]) ?>'>
    <?= $this->formControlGroup($form->get('role')); ?>
</div>

<div id="role-warning" class="mt-2" style="display: none;">
    <div class="alert alert-warning">
        <span class="icon icon-info"></span>
        Seuls des <strong>membres extérieurs à la COMUE</strong> peuvent être rapporteurs.
    </div>
</div>

<?php
//echo $this->form($form);
    echo $this->formControlGroup($form->get('submit'));
    echo $this->form()->closeTag();
?>

<script>
    $('select').selectpicker();
    document.addEventListener('DOMContentLoaded', initMembreForm);
    $(function () {
        $('select').selectpicker();
        $('[data-bs-toggle="tooltip"]').tooltip({});
    });
</script>

public/js/hdr.js

0 → 100644
+59 −0
Original line number Diff line number Diff line
//Préparation de la soutenance
//MembreForm HDR

function initMembreForm() {
    const pathname = window.location.pathname;
    const regex1 = /^\/soutenance\/hdr\/[^\/]+\/proposition\/modifier-membre\/?$/;
    const regex2 = /^\/soutenance\/hdr\/[^\/]+\/proposition\/?$/;

    if (!regex1.test(pathname) && !regex2.test(pathname)) {
        return;
    }

    const exterieurRadios = document.querySelectorAll('input[name="exterieur"]');
    const roleRadios = document.querySelectorAll('input[name="role"]');
    const warningBox = document.getElementById('role-warning');
    const wrapper = document.getElementById('form-role-wrapper');

    //Lecture de l'attribut data-hdr-roles-to-disable
    let rolesToDisable = [];
    try {
        const data = wrapper.getAttribute('data-hdr-roles-to-disable');
        rolesToDisable = JSON.parse(data);
    } catch (e) {
        console.error('Impossible de lire data-hdr-roles-to-disable :', e);
    }

    function toggleRoleOptions() {
        const selected = document.querySelector('input[name="exterieur"]:checked');
        const isExterieurOui = selected && selected.value === 'non';

        roleRadios.forEach(function (radio) {
            if (rolesToDisable.includes(radio.value)) {
                // Décocher la case si elle doit être désactivée et qu'elle était déjà cochée
                if (radio.checked) {
                    radio.checked = false;
                }

                radio.disabled = isExterieurOui;
                if (isExterieurOui) {
                    radio.closest('label').classList.add('text-muted');
                } else {
                    radio.closest('label').classList.remove('text-muted');
                }
            }
        });
        if (warningBox) {
            warningBox.style.display = isExterieurOui ? 'block' : 'none';
        }
    }

    toggleRoleOptions();

    exterieurRadios.forEach(function (radio) {
        radio.addEventListener('change', toggleRoleOptions);
    });
}
document.addEventListener('DOMContentLoaded', function () {

});
 No newline at end of file