Commit 06278f9b authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Module StepStar : possibilité de spécifier un tag de log et une contrainte sur...

Module StepStar : possibilité de spécifier un tag de log et une contrainte sur l'ancienneté de la date de soutenance.
parent 477999b0
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -65,12 +65,17 @@ class Module implements ConsoleBannerProviderInterface, ConsoleUsageProviderInte
            /**
             * @see EnvoiConsoleController::envoyerThesesAction()
             */
            self::STEP_STAR__CONSOLE_ROUTE__ENVOYER_THESES . ' [--these=<id>] [--etat=<etat>] [--etablissement=<etab>] [--force]' =>
            self::STEP_STAR__CONSOLE_ROUTE__ENVOYER_THESES . ' [--these=<id>] [--etat=<etat>] [--date-soutenance-min=<date-soutenance-min>] [--etablissement=<etablissement>] [--tag=<tag>] [--force]' =>
                "Pour chaque thèse spécifiée, génère le fichier XML intermédiaire puis le fichier TEF puis envoie ce dernier vers STEP/STAR.",
            [ '<id>', "Ids des thèses concernées, séparées par une virgule.", "Facultatif"],
            [ '<etat>', "États des thèses, séparés par une virgule, ex : 'E,S'.", "Facultatif"],
            [ '<etab>', "Codes des établissements d'inscription, séparés par une virgule, ex : 'UCN,URN'.", "Facultatif"],
            [ '<date-soutenance-min>',
                "Si la valeur spécifiée est de la forme 'AAAA-MM-DD' : les thèses dont la date réelle de soutenance se situe avant cette date seront écartées, ex : '2022-03-11'. " .
                "Si elle est de la forme 'Nm' : les thèses dont la date réelle de soutenance est passée de plus de N mois seront écartées, ex : '6m'.",
                "Facultatif"],
            [ '<etablissement>', "Codes des établissements d'inscription, séparés par une virgule, ex : 'UCN,URN'.", "Facultatif"],
            [ '--force', "Réalise l'envoi même si le contenu du fichier TEF est le même qu'au dernier envoi.", "Facultatif"],
            [ '<tag>', "Tag éventuel permettant de retrouver facilement un ensemble de logs, ex : 'cron-2022-03-11'.", "Facultatif"],
        ];
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -304,7 +304,7 @@ return [
                'envoyer-theses' => [
                    'type' => Simple::class,
                    'options' => [
                        'route' => Module::STEP_STAR__CONSOLE_ROUTE__ENVOYER_THESES . ' [--these=] [--etat=] [--etablissement=] [--force]',
                        'route' => Module::STEP_STAR__CONSOLE_ROUTE__ENVOYER_THESES . ' [--these=] [--etat=] [--date-soutenance-min=] [--etablissement=] [--tag=] [--force]',
                        'defaults' => [
                            /**
                             * @see EnvoiConsoleController::envoyerThesesAction()
+4 −2
Original line number Diff line number Diff line
@@ -22,10 +22,12 @@ class EnvoiConsoleController extends AbstractConsoleController

        $these = $this->params()->fromRoute('these'); // ex : '12345' ou '12345,12346'
        $etat = $this->params()->fromRoute('etat'); // ex : 'E' ou 'E,S'
        $dateSoutenanceMin = $this->params()->fromRoute('date-soutenance-min'); // ex : '2022-03-11' ou '6m'
        $etablissement = $this->params()->fromRoute('etablissement'); // ex : 'UCN' ou 'UCN,URN'
        $force = (bool) $this->params()->fromRoute('force');
        $logTag = $this->params()->fromRoute('tag');

        $criteria = array_filter(compact('these', 'etat', 'etablissement'));
        $criteria = array_filter(compact('these', 'etat', 'dateSoutenanceMin', 'etablissement'));

        $theses = $this->fetchService->fetchThesesByCriteria($criteria);
        if (empty($theses)) {
@@ -33,7 +35,7 @@ class EnvoiConsoleController extends AbstractConsoleController
        }

        $this->envoiFacade->setSaveLogs(true);
        $logs = $this->envoiFacade->envoyerTheses($theses, $force, $command);
        $logs = $this->envoiFacade->envoyerTheses($theses, $force, $command, $logTag);

        /** @var \StepStar\Entity\Db\Log $log */
        foreach ($logs as $log) {
+2 −1
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ class EnvoiController extends AbstractController

                $these = $this->envoiForm->getData()['these']; // ex : '12345' ou '12345,12346'
                $force = (bool) $this->envoiForm->getData()['force'];
                $tag = $this->envoiForm->getData()['tag'] ?? null;

                $criteria = array_filter(compact('these'));

@@ -46,7 +47,7 @@ class EnvoiController extends AbstractController
                }

                $this->envoiFacade->setSaveLogs(true);
                $logs = $this->envoiFacade->envoyerTheses($theses, $force, $command);
                $logs = $this->envoiFacade->envoyerTheses($theses, $force, $command, $tag);

                /** @var \StepStar\Entity\Db\Log $log */
                foreach ($logs as $log) {
+7 −8
Original line number Diff line number Diff line
@@ -45,24 +45,23 @@ class EnvoiFacade
    }

    /**
     * @param array $theses
     * @param bool $force
     * @param string $command
     * @param array $theses Thèses à envoyer
     * @param bool $force Forcer l'envoi même si le contenu du TEF est identique au précédent envoi ?
     * @param string $command Commande ayant déclenché l'envoi, inscrite dans les logs
     * @param string|null $tag Eventuel tag commun à l'ensemble des logs qui seront produits
     * @return \Generator
     */
    public function envoyerTheses(array $theses, bool $force, string $command): Generator
    public function envoyerTheses(array $theses, bool $force, string $command, ?string $tag = null): Generator
    {
        $inputDir = sys_get_temp_dir() . '/' . uniqid('sygal_xml_input_');
        $outputDir = sys_get_temp_dir() . '/' . uniqid('sygal_xml_output_');

        $logTag = uniqid(); // tag commun à l'ensemble des logs produits ici

        /**
         * Generation du fichier XML intermediaire (1 pour N theses) & des fichiers TEF (1 par these).
         * (Un Log unique est créé pour cette opération.)
         */
        $operation = Log::OPERATION__GENERATION_XML;
        $this->newLog($operation, $command, $logTag);
        $this->newLog($operation, $command, $tag);
        $success = true;
        try {
            $this->genererXmlForThesesInDir($theses, $inputDir);
@@ -89,7 +88,7 @@ class EnvoiFacade
            $theseId = $this->extractTheseIdFromTefFilePath($tefFilePath);
            $these = $theses[$theseId];
            $lastLog = $this->findLastLogForTheseAndOperation($theseId, $operation);
            $this->newLogForThese($theseId, $operation, $command, $logTag);
            $this->newLogForThese($theseId, $operation, $command, $tag);
            $this->log->setTefFileContentHash(md5_file($tefFilePath));
            $success = true;
            $doctorantIdentite = $these['doctorant']['individu']['nomUsuel'] . ' ' . $these['doctorant']['individu']['prenom1'];
Loading