From d9aeadf7fd9151e6b2f1295c964a01c80338048b Mon Sep 17 00:00:00 2001
From: Damien <damien.burel@maarch.org>
Date: Thu, 2 Apr 2020 17:41:37 +0200
Subject: [PATCH] FEAT #13678 TIME 0:25 Refactoring basket_persistent user_id

---
 migration/20.10/2010.sql                           | 14 ++++++++++++--
 sql/structure.sql                                  |  2 +-
 .../action/controllers/ActionMethodController.php  |  8 ++++----
 3 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/migration/20.10/2010.sql b/migration/20.10/2010.sql
index 326530cbcf3..384c6ed7c69 100755
--- a/migration/20.10/2010.sql
+++ b/migration/20.10/2010.sql
@@ -43,10 +43,20 @@ DO $$ BEGIN
         UPDATE res_letterbox set dest_user_tmp = (select id FROM users where users.user_id = res_letterbox.dest_user);
         ALTER TABLE res_letterbox DROP COLUMN IF EXISTS dest_user;
         ALTER TABLE res_letterbox RENAME COLUMN dest_user_tmp TO dest_user;
+        UPDATE baskets SET basket_clause = REGEXP_REPLACE(basket_clause, 'dest_user(\s*)=(\s*)@user', 'dest_user = @user_id', 'gmi');
+        UPDATE security SET where_clause = REGEXP_REPLACE(where_clause, 'dest_user(\s*)=(\s*)@user', 'dest_user = @user_id', 'gmi');
+    END IF;
+END$$;
+DO $$ BEGIN
+    IF (SELECT count(column_name) from information_schema.columns where table_name = 'basket_persistent_mode' and column_name = 'user_id' and data_type != 'integer') THEN
+        ALTER TABLE basket_persistent_mode ADD COLUMN user_id_tmp INTEGER;
+        UPDATE basket_persistent_mode set user_id_tmp = (select id FROM users where users.user_id = basket_persistent_mode.user_id);
+        DELETE FROM basket_persistent_mode WHERE user_id_tmp IS NULL;
+        ALTER TABLE basket_persistent_mode ALTER COLUMN user_id_tmp set not null;
+        ALTER TABLE basket_persistent_mode DROP COLUMN IF EXISTS user_id;
+        ALTER TABLE basket_persistent_mode RENAME COLUMN user_id_tmp TO user_id;
     END IF;
 END$$;
-UPDATE baskets SET basket_clause = REGEXP_REPLACE(basket_clause, 'dest_user(\s*)=(\s*)@user', 'dest_user = @user_id', 'gmi');
-UPDATE security SET where_clause = REGEXP_REPLACE(where_clause, 'dest_user(\s*)=(\s*)@user', 'dest_user = @user_id', 'gmi');
 
 
 /* RE CREATE VIEWS */
diff --git a/sql/structure.sql b/sql/structure.sql
index 0a80a3fdd55..33f447a99f8 100755
--- a/sql/structure.sql
+++ b/sql/structure.sql
@@ -330,7 +330,7 @@ WITH (OIDS=FALSE);
 CREATE TABLE basket_persistent_mode
 (
   res_id bigint,
-  user_id character varying(128),
+  user_id INTEGER not null,
   is_persistent character varying(1)
 )
 WITH (
diff --git a/src/app/action/controllers/ActionMethodController.php b/src/app/action/controllers/ActionMethodController.php
index 25ecd1bd08c..8c3400d4288 100644
--- a/src/app/action/controllers/ActionMethodController.php
+++ b/src/app/action/controllers/ActionMethodController.php
@@ -193,12 +193,12 @@ class ActionMethodController
 
         BasketPersistenceModel::delete([
             'where' => ['res_id = ?',  'user_id = ?'],
-            'data'  => [$aArgs['resId'], $GLOBALS['userId']]
+            'data'  => [$aArgs['resId'], $GLOBALS['id']]
         ]);
 
         BasketPersistenceModel::create([
             'res_id'        => $aArgs['resId'],
-            'user_id'       => $GLOBALS['userId'],
+            'user_id'       => $GLOBALS['id'],
             'is_persistent' => 'N'
         ]);
 
@@ -212,12 +212,12 @@ class ActionMethodController
 
         BasketPersistenceModel::delete([
             'where' => ['res_id = ?', 'user_id = ?'],
-            'data'  => [$aArgs['resId'], $GLOBALS['userId']]
+            'data'  => [$aArgs['resId'], $GLOBALS['id']]
         ]);
 
         BasketPersistenceModel::create([
             'res_id'        => $aArgs['resId'],
-            'user_id'       => $GLOBALS['userId'],
+            'user_id'       => $GLOBALS['id'],
             'is_persistent' => 'Y'
         ]);
 
-- 
GitLab