Commit 72ddafc6 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Lors du dépôt d'une version corrigée, l'autorisation de diffusion est reprise...

Lors du dépôt d'une version corrigée, l'autorisation de diffusion est reprise texto (dupliquée) du 1er dépôt,
sauf si cela est désactivé dans la config, auquel cas elle doit être resaisie.
Idem pour les attestations.
parent a5892280
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -32,6 +32,13 @@ return [
            // Valeurs possibles: '30s', '1m', etc. (cf. "man timeout").
            'timeout' => '20s',
        ],
        // Options concernant le dépôt de la version corrigée
        'depot_version_corrigee' => [
            // Resaisir l'autorisation de diffusion ? Sinon celle saisie au 1er dépôt est reprise/dupliquée.
            'resaisir_autorisation_diffusion' => true,
            // Resaisir les attestations ? Sinon celles saisies au 1er dépôt sont reprises/dupliquées.
            'resaisir_attestations' => true,
        ],
    ],
    // Options pour le service de notification par mail
    'notification' => [
+2 −0
Original line number Diff line number Diff line
@@ -1209,6 +1209,7 @@ class TheseController extends AbstractController
            'form'                   => $this->getAttestationTheseForm($version), // les labels des cases à cocher sont affichés
            'modifierAttestationUrl' => $this->urlThese()->modifierAttestationUrl($these, $version),
            'hasFichierThese'        => $hasFichierThese,
            'resaisirAttestationsVersionCorrigee' => $this->theseService->getResaisirAttestationsVersionCorrigee(),
        ]);
        $view->setTemplate('application/these/attestation');

@@ -1332,6 +1333,7 @@ class TheseController extends AbstractController
            'modifierDiffusionUrl'         => $this->urlThese()->modifierDiffusionUrl($these, $version),
            'exporterConventionMelUrl'     => $this->urlThese()->exporterConventionMiseEnLigneUrl($these, $version),
            'hasFichierThese'              => $hasFichierThese,
            'resaisirAutorisationDiffusionVersionCorrigee' => $this->theseService->getResaisirAutorisationDiffusionVersionCorrigee(),
        ]);
        $view->setTemplate('application/these/diffusion');

+18 −1
Original line number Diff line number Diff line
@@ -10,8 +10,9 @@ use Application\Service\These\TheseService;
use Application\Service\UserContextService;
use Application\Service\Validation\ValidationService;
use Application\Service\Variable\VariableService;
use UnicaenAuth\Service\AuthorizeService;
use Interop\Container\ContainerInterface;
use UnicaenAuth\Service\AuthorizeService;
use Webmozart\Assert\Assert;

class TheseServiceFactory
{
@@ -54,6 +55,22 @@ class TheseServiceFactory
        $service->setFileService($fileService);
        $service->setAuthorizeService($authorizeService);

        $this->injectConfig($service, $container);

        return $service;
    }

    private function injectConfig(TheseService $service, ContainerInterface $container)
    {
        $config = $container->get('Config');
        Assert::keyExists($config, 'sygal');
        Assert::keyExists($config['sygal'], 'depot_version_corrigee');

        $configDepotVersionCorrigee = $config['sygal']['depot_version_corrigee'];
        Assert::keyExists($configDepotVersionCorrigee, 'resaisir_autorisation_diffusion');
        Assert::keyExists($configDepotVersionCorrigee, 'resaisir_attestations');

        $service->setResaisirAutorisationDiffusionVersionCorrigee($configDepotVersionCorrigee['resaisir_autorisation_diffusion']);
        $service->setResaisirAttestationsVersionCorrigee($configDepotVersionCorrigee['resaisir_attestations']);
    }
}
+52 −7
Original line number Diff line number Diff line
@@ -51,6 +51,54 @@ class TheseService extends BaseService implements ListenerAggregateInterface
    use FileServiceAwareTrait;
    use AuthorizeServiceAwareTrait;

    /**
     * Resaisir l'autorisation de diffusion ? Sinon celle saisie au 1er dépôt est reprise/dupliquée.
     * @var bool
     */
    private $resaisirAutorisationDiffusionVersionCorrigee = false;

    /**
     * Resaisir les attestations ? Sinon celles saisies au 1er dépôt sont reprises/dupliquées.
     * @var bool
     */
    private $resaisirAttestationsVersionCorrigee = false;

    /**
     * @param bool $resaisirAutorisationDiffusionVersionCorrigee
     * @return TheseService
     */
    public function setResaisirAutorisationDiffusionVersionCorrigee(bool $resaisirAutorisationDiffusionVersionCorrigee): TheseService
    {
        $this->resaisirAutorisationDiffusionVersionCorrigee = $resaisirAutorisationDiffusionVersionCorrigee;
        return $this;
    }

    /**
     * @param bool $resaisirAttestationsVersionCorrigee
     * @return TheseService
     */
    public function setResaisirAttestationsVersionCorrigee(bool $resaisirAttestationsVersionCorrigee): TheseService
    {
        $this->resaisirAttestationsVersionCorrigee = $resaisirAttestationsVersionCorrigee;
        return $this;
    }

    /**
     * @return bool
     */
    public function getResaisirAutorisationDiffusionVersionCorrigee(): bool
    {
        return $this->resaisirAutorisationDiffusionVersionCorrigee;
    }

    /**
     * @return bool
     */
    public function getResaisirAttestationsVersionCorrigee(): bool
    {
        return $this->resaisirAttestationsVersionCorrigee;
    }

    /**
     * @inheritDoc
     */
@@ -133,22 +181,19 @@ class TheseService extends BaseService implements ListenerAggregateInterface
    }

    /**
     * Lors du dépôt d'une version originale corrigée, il peut être nécessaire de créer automatiquement Diffusion et Attestation,
     * selon les privilèges accordés au rôle de l'utilisateur.
     * Lors du dépôt d'une version originale corrigée, selon la config de l'appli, il peut être nécessaire de créer
     * automatiquement Diffusion et Attestation.
     *
     * @param These $these
     */
    private function onFichierTheseTeleverseVersionCorrigee(These $these)
    {
        $versionCorr = $this->fichierTheseService->fetchVersionFichier(VersionFichier::CODE_ORIG_CORR);
        // Création automatique d'une Diffusion pour la version corrigée si l'utilisateur n'a pas le privilège d'en saisir une.
        $privilege = ThesePrivileges::THESE_SAISIE_AUTORISATION_DIFFUSION_($versionCorr);
        if (! $this->authorizeService->isAllowed($these, $privilege)) {
        if (! $this->resaisirAutorisationDiffusionVersionCorrigee) {
            $this->createDiffusionVersionCorrigee($these);
        }
        // Création automatique d'une Attestation pour la version corrigée si l'utilisateur n'a pas le privilège d'en saisir une.
        $privilege = ThesePrivileges::THESE_SAISIE_ATTESTATIONS_($versionCorr);
        if (! $this->authorizeService->isAllowed($these, $privilege)) {
        if (! $this->resaisirAttestationsVersionCorrigee) {
            $this->createAttestationVersionCorrigee($these);
        }
    }
+4 −0
Original line number Diff line number Diff line
@@ -15,12 +15,16 @@ use Application\View\Renderer\PhpRenderer;
 * @var Attestation          $attestation
 * @var AttestationTheseForm $form
 * @var string               $modifierAttestationUrl
 * @var bool                 $resaisirAttestationsVersionCorrigee
 *
 * @see TheseController::attestationAction()
 */

$privilege = ThesePrivileges::THESE_SAISIE_ATTESTATIONS_($version);
$canEdit = $this->isAllowed($these, $privilege);
if ($version->estVersionCorrigee() && ! $resaisirAttestationsVersionCorrigee) {
    $canEdit = false;
}
?>

<div class="box panel panel-info">
Loading