From 5b14029dd3699c41b83d2e68b5dd51751f0bd3e9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Laurent=20L=C3=A9cluse?= <laurent.lecluse@unicaen.fr>
Date: Thu, 5 May 2022 09:17:17 +0200
Subject: [PATCH] renforcement des scripts de migration & nouvelle note de MAJ
 dans le CHL

---
 CHANGELOG.md                      |  1 +
 admin/migration/v18Plafonds.php   | 12 ------
 admin/migration/v18Privileges.php | 67 +++++++++++++++++++++++++++++++
 3 files changed, 68 insertions(+), 12 deletions(-)
 create mode 100644 admin/migration/v18Privileges.php

diff --git a/CHANGELOG.md b/CHANGELOG.md
index d7e562d9fe..7264619af1 100755
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -95,6 +95,7 @@ Objectif : Plafonds personnalisables & refonte gestion des statuts
 
 * **ATTENTION : OSE 18** ne pourra être mis à jour **qu'à partir de OSE 17.x**. Si vous utilisez une version plus ancienne de OSE, veuillez **d'abord** mettre à jour en version 17.
 * **ATTENTION : PHP 8.0** est requis
+* **IMPORTANT** AVANT de démarrer la mise à jour, dans le répertoire de OSE, lancez la commande `php composer.phar self-update --2` à partir du répertoire de l'application.
 * La mise à jour des vues matérialisées MV_EXT_* ne se fait plus à la mise à jour. Il faut maintenant lancer la commande `./bin/ose maj-exports` tous les jours et donc ajouter une ligne à votre _CronTab_ (cf. [Doc INSTALL mise à jour](install.md))
 * Pour bénéficier de la ventilation des heures par types d'intervention vous pouvez vous inspirer du [modèle de contrat de Caen](https://git.unicaen.fr/open-source/OSE/-/blob/master/data/modele_contrat_ventile.odt) pour adapter votre propre modèle de contrat.
 * Au niveau du fichier de configuration [config.local.php](config.local.php.default), vous pouvez remplir le paramètre (facultatif) ldap>systemeInformationUrl.
diff --git a/admin/migration/v18Plafonds.php b/admin/migration/v18Plafonds.php
index 633ac46b12..3679480757 100644
--- a/admin/migration/v18Plafonds.php
+++ b/admin/migration/v18Plafonds.php
@@ -58,18 +58,6 @@ class v18Plafonds extends AbstractMigration
 
 
 
-    public function preMigrationIndicateurs()
-    {
-        $bdd = $this->manager->getBdd();
-        $c   = $this->manager->getOseAdmin()->getConsole();
-
-        $c->begin('Préparation à la mise à jour des indicateurs');
-
-        $c->end('Préparation à la migration des indicateurs terminée');
-    }
-
-
-
     public function migrationParamsStructure()
     {
         $bdd = $this->manager->getBdd();
diff --git a/admin/migration/v18Privileges.php b/admin/migration/v18Privileges.php
new file mode 100644
index 0000000000..73c6f19801
--- /dev/null
+++ b/admin/migration/v18Privileges.php
@@ -0,0 +1,67 @@
+<?php
+
+
+
+
+
+class v18Privileges extends AbstractMigration
+{
+
+    public function description(): string
+    {
+        return "Migration des privilèges de OSE 17 vers OSE 18";
+    }
+
+
+
+    public function utile(): bool
+    {
+        if (!$this->manager->hasTable('SAVE_V18_PRIVILEGE')) {
+            return false;
+        }
+
+        $sql = "
+        SELECT 
+          count(*) c
+        FROM 
+          privilege p
+          JOIN categorie_privilege cp ON cp.id = p.categorie_id
+        WHERE 
+          cp.code = 'enseignement'
+          AND p.code = 'visualisation'
+          ";
+
+        return $this->manager->getBdd()->select($sql)[0]['C'] == '1';
+    }
+
+
+
+    public function after()
+    {
+        $c   = $this->manager->getOseAdmin()->getConsole();
+        $bdd = $this->manager->getBdd();
+
+        $sql = "
+        INSERT INTO ROLE_PRIVILEGE (privilege_id,role_id)
+SELECT 
+  np.id privilege_id, r.id role_id
+FROM 
+  save_v18_privilege p
+  JOIN categorie_privilege cp ON cp.id = p.categorie_id
+  JOIN save_v18_role_privilege rp ON rp.privilege_id = p.id
+  JOIN role r ON r.id = rp.role_id AND r.code <> 'administrateur'
+  JOIN (SELECT 'prevu' code FROM dual UNION ALL SELECT 'realise' code FROM dual) tvh ON 1=1
+  
+  JOIN privilege np ON np.categorie_id = cp.id AND np.code = tvh.code || '-' || p.code
+  LEFT JOIN role_privilege nrp ON nrp.privilege_id = np.id AND nrp.role_id = r.id
+WHERE 
+  cp.code IN ('enseignement','referentiel')
+  AND p.code IN ('visualisation','edition', 'validation', 'autovalidation')
+  AND rp.role_id <> COALESCE(nrp.role_id,0)
+        ";
+
+        $bdd->exec($sql);
+        $c->msg('Transfert d\'anciens privilèges vers le nouveau système');
+    }
+
+}
\ No newline at end of file
-- 
GitLab