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

Merge branch 'release-1.4.3'

parents cc184bce 3022cac5
Loading
Loading
Loading
Loading
Loading
+6 −0
Changes for CHANGELOG.md: 6 added lines, 0 removed lines.
Original line number Diff line number Diff line
Journal des modifications
=========================

1.4.3 (11/03/2020)
------------------

- Import des types de financement de thèse.


1.4.2 (14/02/2020)
------------------

+0 −652

File deleted.

Preview size limit exceeded, changes collapsed.

code/update-nommage.php

deleted100644 → 0
+0 −185
Changes for code/update-nommage.php: 0 added lines, 185 removed lines.
Original line number Diff line number Diff line
<?php
/**
 * @var $this \Zend\View\Renderer\PhpRenderer
 * @var $controller \UnicaenCode\Controller\Controller
 * @var $viewName string
 */

use Application\Entity\Db\Fichier;
use Application\Entity\Db\NatureFichier;
use Application\Filter\NomFichierTheseFormatter;
use Application\Service\Fichier\FichierService;
use Application\Service\FichierThese\FichierTheseService;
use Application\Service\File\FileService;
use UnicaenApp\Util;

$REAL_APP_PATH = '/var/www/sygal';

$CSV_OUTPUT_FILE_PATH = '/tmp/' . uniqid('fichiers-divers-etat-') . '.csv';

/** @var FichierService $fichierService */
$fichierService = $controller->getServiceLocator()->get(FichierService::class);
/** @var FichierTheseService $fichierTheseService */
$fichierTheseService = $controller->getServiceLocator()->get('FichierTheseService');
/** @var FileService $fileService */
$fileService = $controller->getServiceLocator()->get(FileService::class);

$repo = $fichierTheseService->getEntityManager()->getRepository(Fichier::class);
$qb = $repo->createQueryBuilder('f');
$qb
    ->addSelect('nf, t, d, i')
    ->join('f.nature', 'nf')
    ->join('f.these', 't')
    ->join('t.doctorant', 'd')
    ->join('d.individu', 'i')
    ->where('1 = pasHistorise(f)')
    ->andWhere($qb->expr()->notIn('nf.code', [NatureFichier::CODE_THESE_PDF, NatureFichier::CODE_FICHIER_NON_PDF]))
    ->addOrderBy('nf.code')
    ->addOrderBy('f.nom')
    ->addOrderBy('f.histoModification', 'desc');
/** @var Fichier[] $fichiers */
$fichiers = $qb/*->setMaxResults(50)*/->getQuery()->getResult();

$nomFichierFormatter = new NomFichierTheseFormatter();

$updatedFichiers = [];
foreach ($fichiers as $fichier) {
    $newNom = $nomFichierFormatter->filter($fichier);
    $updateRequired = $newNom !== $fichier->getNom();

    if ($updateRequired) {
        $fichier->setNom($newNom);
        $updatedFichiers[] = $fichier;
    }
}
?>


<?php
$shellTemplate = 'mv "%s" "%s"';
$shells = [];
$shellUndos = [];

$sqlTemplate = "update fichier set NOM = '%s' where ID = '%s' ;";
$sqls = [];
$sqlUndos = [];

$precName = null;
$i = 1;

$data = [];
$header = [
    'n'        => "#",
    'nature'   => "Nature",
    'nom'      => "Nom à corriger",
    'date'     => "Date dépôt",
    'perdu'    => "Perdu",
    'these'    => "Thèse",
    'doct'     => "Doctorant",
    'nomc'     => "Nom corrigé",
    'shell'    => "Shell",
    'shellu'   => "Shell undo",
    'sql'      => "SQL",
    'sqlu'     => "SQL undo",
];
foreach ($updatedFichiers as $fichier) {

    $no = $fichier->getNomOriginal();
    $nc = $fichier->getNom();

    $isLast = $precName !== $fichier->getNomOriginal();

    if ($isLast) {
        // shell
        $srcPath = $fichierService->computeDestinationDirectoryPathForFichier($fichier) . '/' . $no;
        $destPath = $fichierService->computeDestinationDirectoryPathForFichier($fichier) . '/' . $nc;
        $shell = sprintf($shellTemplate, $srcPath, $destPath);
        $shells[] = $shell;
        // shell undo
        $shellUndo = sprintf($shellTemplate, $destPath, $srcPath);
        $shellUndos[] = $shellUndo;

        // SQL
        $sql = sprintf($sqlTemplate, $nc, $fichier->getId());
        $sqls[] = $sql;
        // SQL undo
        $sqlUndo = sprintf($sqlTemplate, $no, $fichier->getId());
        $sqlUndos[] = $sqlUndo;
    } else {
        $shell = '';
        $shellUndo = '';
        $sql = '';
        $sqlUndo = '';
    }

    $row = [
        'n'        => $i++,
        'nature'   => $fichier->getNature()->getCode(),
        'nom'      => $no,
        'date'     => $fichier->getHistoModification()->format('d/m/Y H:i:s'),
        'perdu'    => $isLast ? 'N' : 'O',
        'these'    => $fichier->getThese()->getId(),
        'doct'     => $fichier->getThese()->getDoctorant(),
        'nomc'     => $nc,
        'shell'    => $shell,
        'shellu'   => $shellUndo,
        'sql'      => $sql,
        'sqlu'     => $sqlUndo,
        'last'     => $isLast,
    ];
    $data[] = $row;

    $precName = $no;
}
?>

<?php
$s = Util::arrayToCsv($data, $header);
file_put_contents($CSV_OUTPUT_FILE_PATH, $s);
?>
<div>
    <strong>Obtention du fichier CSV créé :</strong> <pre>cp <?php echo $CSV_OUTPUT_FILE_PATH ?> ./code/</pre>
</div>

<hr>

<table class="table table-hover">
    <thead>
    <tr>
        <?php foreach ($header as $col): ?>
        <th><?php echo $col ?></th>
        <?php endforeach ?>
    </tr>
    </thead>
    <tbody>
    <?php foreach ($data as $row): ?>
        <?php
        $isLast = $row['last'];
        $color = $isLast ? 'inherit' : 'red';

        $no = $row['nom'];
        $nc = $row['nomc'];
        ?>
        <tr style="color:<?php echo $color ?>">
            <td><?php echo $row['n'] ?></td>
            <td><?php echo $row['nature'] ?></td>
            <td><?php echo $no ?></td>
            <td><?php echo $row['date'] ?></td>
            <td><?php echo $row['perdu'] ?></td>
            <td><a href="https://sygal.normandie-univ.fr/these/identite/<?php echo $row['these'] ?>"><?php echo $row['these'] ?></a></td>
            <td><?php echo $row['doct'] ?></td>
            <td><?php echo $nc ?></td>

            <?php if ($isLast): ?>
            <td><?php echo $row['shell']; ?></td>
            <td><?php echo $row['shellu']; ?></td>
            <td><?php echo $row['sql']; ?></td>
            <td><?php echo $row['sqlu']; ?></td>
            <?php endif ?>
        </tr>
    <?php endforeach ?>
    </tbody>
</table>

<pre><?php echo implode(PHP_EOL, str_replace('/app', $REAL_APP_PATH, $shells)) ?></pre>
<pre><?php echo implode(PHP_EOL, $sqls) ?></pre>
+3 −3
Changes for config/autoload/version.global.php: 3 added lines, 3 removed lines.
Original line number Diff line number Diff line
@@ -2,9 +2,9 @@
return [
    'unicaen-app' => [
        'app_infos' => [
            'version' => '1.4.2',
            'date' => '14/02/2020',
            'version' => '1.4.3',
            'date' => '11/03/2020',
        ],
    ],
    'comment' => 'Fichier généré le 14/02/2020 à 13:53:04 avec /home/gauthierb/workspace/sygal/bump-version',
    'comment' => 'Fichier généré le 10/03/2020 à 16:27:19 avec /home/gauthierb/workspace/sygal/bump-version',
];
+24 −3
Changes for doc/developpement.md: 24 added lines, 3 removed lines.
Original line number Diff line number Diff line
@@ -8,7 +8,14 @@ Prise en compte d'un nouveau champ provenant du web service

Ex: un nouveau champ `ine` apparaît dans le service Doctorant.

Marche à suivre :

- Désactivez l'exécution périodique (cron) du script de remplissage des tables `SYGAL_*` 
  à partir des vues `V_SYGAL_*`.  
  Normalement, ça se joue sur le serveur où est installé le web service dans le fichier 
  `/etc/cron.d/sygal-import-ws-cron`.

- Désactivez si besoin l'import périodique *qui impacterait la base de données sur laquelle vous allez intervenir*.
  Normalement, ça se passe sur le serveur de l'application dans le fichier `/etc/cron.d/sygal`.

- En base de données :

@@ -19,10 +26,22 @@ Marche à suivre :
    - Corriger la vue `SRC_DOCTORANT` pour prendre en compte la nouvelle colonne `TMP_DOCTORANT.INE` et ainsi
      permettre la mise à jour de cette colonne dans la table finale `DOCTORANT`.
  
- Dans les sources PHP :

    - Mettre à jour le mapping `TmpDoctorant` dans le fichier  
      `module/Import/src/Import/Model/Mapping/Import.Model.TmpDoctorant.dcm.xml` 
      Puis ajouter la nouvelle propriété `$ine` dans la classe d'entité   
      `module/Import/src/Import/Model/TmpDoctorant.php`
      
    - Mettre à jour le mapping `Doctorant` dans le fichier  
      `module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.Doctorant.dcm.xml` 
      Puis ajouter la nouvelle propriété `$ine` ainsi que ses getter et setter associés dans la classe d'entité   
      `module/Application/src/Application/Entity/Db/Doctorant.php`
       
- Dans l'interface graphique de l'application :

    - Vérifier la version du web service (API) installé au sein de l'établissement de test en allant 
      dans le menu "Import".
    - Aller dans le menu "Import" pour vérifier la version du web service (API) interrogé par l'application
      pour l'établissement concerné.
  
    - Aller dans le menu "Synchro" puis cliquer sur 
      "Mise à jour des vues différentielles et des procédures de mise à jour".
@@ -48,3 +67,5 @@ Marche à suivre :
      `docker-compose exec sygal php public/index.php synchronize --service=doctorant`
      
    - Vérifier que la colonne `INE` a bien été peuplée dans la table finale `DOCTORANT`.

- Réactivez si besoin l'import périodique.
Loading