From f1bd181b9a3bd20da6179af34b6edd93d3e37fd5 Mon Sep 17 00:00:00 2001
From: Damien <damien.burel@maarch.org>
Date: Mon, 19 Mar 2018 16:49:02 +0100
Subject: [PATCH] [MIGRATION] #130 Priority migration

---
 .../priorities/class_priorities_Abstract.php  |  2 +
 .../class_business_app_tools_Abstract.php     |  2 +
 migration/18.04/migrate.sh                    |  3 +
 migration/18.04/migratePriorities.php         | 56 +++++++++++++++++++
 sql/data_fr.sql                               |  6 ++
 sql/develop.sql                               |  4 ++
 src/app/user/controllers/UserController.php   |  2 +-
 7 files changed, 74 insertions(+), 1 deletion(-)
 create mode 100644 migration/18.04/migrate.sh
 create mode 100644 migration/18.04/migratePriorities.php

diff --git a/apps/maarch_entreprise/admin/priorities/class_priorities_Abstract.php b/apps/maarch_entreprise/admin/priorities/class_priorities_Abstract.php
index d7d71027c5d..e9e911f47fd 100755
--- a/apps/maarch_entreprise/admin/priorities/class_priorities_Abstract.php
+++ b/apps/maarch_entreprise/admin/priorities/class_priorities_Abstract.php
@@ -77,6 +77,7 @@ abstract class PrioritiesAbstract extends Database
 
     protected function  updateSession() {
         $_SESSION['mail_priorities']            = [];
+        $_SESSION['mail_priorities_id']         = [];
         $_SESSION['mail_priorities_attribute']  = [];
         $_SESSION['mail_priorities_wdays']      = [];
         $_SESSION['mail_priorities_color']      = [];
@@ -86,6 +87,7 @@ abstract class PrioritiesAbstract extends Database
         $i = 0;
         foreach ($priorities as $priority) {
             $_SESSION['mail_priorities'][$i] = $priority['label'];
+            $_SESSION['mail_priorities_id'][$i] = $priority['id'];
             $_SESSION['mail_priorities_attribute'][$i] = ($priority['delays'] == null ? 'false' : $priority['delays']);
             $_SESSION['mail_priorities_wdays'][$i] = ($priority['working_days'] ? 'true' : 'false');
             $_SESSION['mail_priorities_color'][$i] = $priority['color'];
diff --git a/apps/maarch_entreprise/class/class_business_app_tools_Abstract.php b/apps/maarch_entreprise/class/class_business_app_tools_Abstract.php
index 7177d2ecdb7..9aee01393f9 100755
--- a/apps/maarch_entreprise/class/class_business_app_tools_Abstract.php
+++ b/apps/maarch_entreprise/class/class_business_app_tools_Abstract.php
@@ -555,6 +555,7 @@ abstract class business_app_tools_Abstract extends Database
         }
 
         $_SESSION['mail_priorities']            = [];
+        $_SESSION['mail_priorities_id']         = [];
         $_SESSION['mail_priorities_attribute']  = [];
         $_SESSION['mail_priorities_wdays']      = [];
         $_SESSION['mail_priorities_color']      = [];
@@ -564,6 +565,7 @@ abstract class business_app_tools_Abstract extends Database
         $i = 0;
         foreach ($priorities as $priority) {
             $_SESSION['mail_priorities'][$i] = $priority['label'];
+            $_SESSION['mail_priorities_id'][$i] = $priority['id'];
             $_SESSION['mail_priorities_attribute'][$i] = ($priority['delays'] == null ? 'false' : $priority['delays']);
             $_SESSION['mail_priorities_wdays'][$i] = ($priority['working_days'] ? 'true' : 'false');
             $_SESSION['mail_priorities_color'][$i] = $priority['color'];
diff --git a/migration/18.04/migrate.sh b/migration/18.04/migrate.sh
new file mode 100644
index 00000000000..02da4b77b95
--- /dev/null
+++ b/migration/18.04/migrate.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+php ./migratePriorities.php
+
diff --git a/migration/18.04/migratePriorities.php b/migration/18.04/migratePriorities.php
new file mode 100644
index 00000000000..a42f30b1cc7
--- /dev/null
+++ b/migration/18.04/migratePriorities.php
@@ -0,0 +1,56 @@
+<?php
+
+require '../../vendor/autoload.php';
+
+chdir('../..');
+
+$customId = \SrcCore\models\CoreConfigModel::getCustomId();
+
+if (file_exists("custom/{$customId}/apps/maarch_entreprise/xml/entreprise.xml")) {
+    $path = "custom/{$customId}/apps/maarch_entreprise/xml/entreprise.xml";
+} else {
+    $path = 'apps/maarch_entreprise/xml/entreprise.xml';
+}
+
+$priorities = [];
+if (file_exists($path)) {
+    $loadedXml = simplexml_load_file($path);
+    if ($loadedXml) {
+        $i = 0;
+        foreach ($loadedXml->priorities->priority as $value) {
+            if (isset($loadedXml->priorities->default_priority) && $loadedXml->priorities->default_priority == $i) {
+                $priorities[] = [
+                    'id'                => $i,
+                    'label'             => (string)$value,
+                    'color'             => (string)$value['color'],
+                    'working_days'      => (string)$value['working_days'],
+                    'delays'            => (string)$value['with_delay'] == 'false' ? null : (int)$value['with_delay'],
+                    'default_priority'  => 'true'
+                ];
+            } else {
+                $priorities[] = [
+                    'id'                => $i,
+                    'label'             => (string)$value,
+                    'color'             => (string)$value['color'],
+                    'working_days'      => (string)$value['working_days'],
+                    'delays'            => (string)$value['with_delay'] == 'false' ? null : (int)$value['with_delay'],
+                    'default_priority'  => 'false'
+                ];
+            }
+            ++$i;
+        }
+    }
+}
+
+foreach ($priorities as $priority) {
+    if ($priority['default_priority'] == 'true') {
+        \Priority\models\PriorityModel::resetDefaultPriority();
+    }
+    $id = \Priority\models\PriorityModel::create($priority);
+
+    \Resource\models\ResModel::update([
+        'set'   => ['priority' => $id],
+        'where' => ['priority = ?'],
+        'data'  => [$priority['id']]
+    ]);
+}
diff --git a/sql/data_fr.sql b/sql/data_fr.sql
index 0aacb7a0492..5018f050674 100755
--- a/sql/data_fr.sql
+++ b/sql/data_fr.sql
@@ -1695,6 +1695,12 @@ INSERT INTO templates (template_label, template_comment, template_content, templ
 ------------
 Select setval('templates_seq', (select max(template_id)+1 from templates), false);
 
+/* PRIORITIES */
+TRUNCATE TABLE priorities;
+INSERT INTO priorities (id, label, color, working_days, delays, default_priority) VALUES ('prio11111', 'Normal', '#009dc5', TRUE, null, TRUE);
+INSERT INTO priorities (id, label, color, working_days, delays, default_priority) VALUES ('prio22222', 'Urgent', '#ffa500', TRUE, 8, FALSE);
+INSERT INTO priorities (id, label, color, working_days, delays, default_priority) VALUES ('prio33333', 'Très urgent', '#ff0000', TRUE, 4, FALSE);
+
 ------------
 --NOTIFICATIONS
 ------------
diff --git a/sql/develop.sql b/sql/develop.sql
index 2e8ab7fde32..1e8addec11d 100755
--- a/sql/develop.sql
+++ b/sql/develop.sql
@@ -134,6 +134,10 @@ ALTER TABLE entities ADD COLUMN archival_agency character varying(255) DEFAULT '
 
 /*PERFS ON VIEW*/
 DROP VIEW IF EXISTS res_view_letterbox;
+
+/* Alter table here because view depends on it*/
+ALTER TABLE res_letterbox ALTER COLUMN priority TYPE character varying(16);
+
 CREATE OR REPLACE VIEW res_view_letterbox AS 
  SELECT r.tablename,
     r.is_multi_docservers,
diff --git a/src/app/user/controllers/UserController.php b/src/app/user/controllers/UserController.php
index d296577a56d..064f2486b41 100644
--- a/src/app/user/controllers/UserController.php
+++ b/src/app/user/controllers/UserController.php
@@ -107,7 +107,7 @@ class UserController
         $user['entities'] = UserModel::getEntitiesById(['userId' => $user['user_id']]);
         $user['allEntities'] = EntityModel::getAvailableEntitiesForAdministratorByUserId(['userId' => $user['user_id'], 'administratorUserId' => $GLOBALS['userId']]);
         $user['baskets'] = BasketModel::getBasketsByUserId(['userId' => $user['user_id'], 'unneededBasketId' => ['IndexingBasket']]);
-        $user['history'] = HistoryModel::getByUserId(['userId' => $user['user_id']]);
+        $user['history'] = HistoryModel::getByUserId(['userId' => $user['user_id'], 'select' => ['event_type', 'event_date', 'info', 'remote_ip']]);
 
         return $response->withJson($user);
     }
-- 
GitLab