From 349bb96f8f99c43011eb563dce8134552491a23d Mon Sep 17 00:00:00 2001
From: Damien <damien.burel@maarch.org>
Date: Mon, 13 May 2019 18:15:15 +0200
Subject: [PATCH] FEAT #10311 TIME 3:00 Remove users enabled column

---
 .../users_autocomplete_list.php               |  6 ----
 core/class/class_security.php                 |  2 +-
 .../class/class_manage_listdiff_Abstract.php  |  2 +-
 modules/entities/manage_listinstance.php      |  4 +--
 modules/entities/redirect.php                 |  2 +-
 .../batch/process_event_stack.php             |  2 +-
 .../class/class_admin_reports_Abstract.php    |  4 ++-
 modules/sendmail/address_autocompletion.php   |  2 +-
 .../class/class_modules_tools_Abstract.php    |  4 +--
 sql/develop.sql                               |  3 ++
 src/app/user/controllers/UserController.php   | 35 ++++++++++---------
 src/app/user/models/UserModelAbstract.php     |  1 -
 .../controllers/AutoCompleteController.php    | 27 +++++++-------
 13 files changed, 46 insertions(+), 48 deletions(-)

diff --git a/apps/maarch_entreprise/users_autocomplete_list.php b/apps/maarch_entreprise/users_autocomplete_list.php
index 1291b685a6e..01ebd719771 100755
--- a/apps/maarch_entreprise/users_autocomplete_list.php
+++ b/apps/maarch_entreprise/users_autocomplete_list.php
@@ -25,12 +25,6 @@ $req = new request();
 $select = array();
 $select[$_SESSION['tablename']['users']]= array('lastname', 'firstname', 'user_id');
 
-if(isset($_GET['getDisableUser'])){
-    $enabledUser = "";
-} else {
-    $enabledUser = "and enabled = 'Y'";
-}
-
 $where = " (lower(lastname) like lower(:input) "
 	."or lower(firstname) like lower(:input) "
 	."or user_id like :input) and (status = 'OK' or status = 'ABS') " . $enabledUser;
diff --git a/core/class/class_security.php b/core/class/class_security.php
index 9bad78ed25b..f7cae1b71cc 100755
--- a/core/class/class_security.php
+++ b/core/class/class_security.php
@@ -130,7 +130,7 @@ class security extends Database
         }
 
         if (isset($user)) {
-            if ($user->__get('enabled') == 'Y') {
+            if ($user->__get('status') != 'SPD') {
                 $ugc = new usergroups_controler();
                 $sec_controler = new SecurityControler();
                 $serv_controler = new ServiceControler();
diff --git a/modules/entities/class/class_manage_listdiff_Abstract.php b/modules/entities/class/class_manage_listdiff_Abstract.php
index ffb1c3dda18..d6ccfad3cfb 100755
--- a/modules/entities/class/class_manage_listdiff_Abstract.php
+++ b/modules/entities/class/class_manage_listdiff_Abstract.php
@@ -114,7 +114,7 @@ abstract class diffusion_list_Abstract extends functions
                     ."and l.item_type = 'user_id' "
                     .'and l.object_type = ? '
                     .'and l.object_id = ? '
-                    ."and u.enabled = 'Y' "
+                    ."and u.status != 'SPD' "
                     ."and u.status != 'DEL' "
                 .'ORDER BY l.sequence',
                 array($item_mode, $objectType, $objectId)
diff --git a/modules/entities/manage_listinstance.php b/modules/entities/manage_listinstance.php
index 5bd788f8c5e..169506ce38f 100755
--- a/modules/entities/manage_listinstance.php
+++ b/modules/entities/manage_listinstance.php
@@ -229,7 +229,7 @@ if (isset($_GET['what_services'])
     . " e.enabled = 'Y' and ue.primary_entity='Y' " . $user_expr . $entity_expr
     . " order by u.lastname asc, u.firstname asc, u.user_id asc, e.entity_label asc limit 50";*/
 
-$where = "u.status <> 'DEL' and u.enabled = 'Y' and"
+$where = "u.status <> 'DEL' and u.status != 'SPD' and"
     .' e.entity_id = ue.entity_id and u.user_id = ue.user_id and'
     ." e.enabled = 'Y' and ue.primary_entity='Y' ".$user_expr.$entity_expr;
 $order = 'order by u.lastname asc, u.firstname asc, u.user_id asc, e.entity_label asc';
@@ -272,7 +272,7 @@ $entity_query =
         ."e.enabled = 'Y' ".$user_expr.$entity_expr
         .' group by e.entity_id, e.entity_label order by e.entity_label asc limit 50';
 
-$where = "u.status <> 'DEL' and u.enabled = 'Y'".'and  e.entity_id = ue.entity_id and u.user_id = ue.user_id and '
+$where = "u.status <> 'DEL' and u.status != 'SPD'".'and  e.entity_id = ue.entity_id and u.user_id = ue.user_id and '
         ."e.enabled = 'Y' ".$user_expr.$entity_expr;
 $order = 'ORDER by entity_label ASC';
 $entity_query = $db->limit_select(
diff --git a/modules/entities/redirect.php b/modules/entities/redirect.php
index aa852a29e39..22fd398dea5 100755
--- a/modules/entities/redirect.php
+++ b/modules/entities/redirect.php
@@ -51,7 +51,7 @@ function get_form_txt($values, $path_manage_action, $id_action, $table, $module,
     }
     $users = array();
     if (!empty($_SESSION['user']['redirect_groupbasket_by_group'][$_SESSION['current_basket']['id']][$_SESSION['current_basket']['group_id']][$id_action]['users_entities'])) {
-        $stmt = $db->query("select distinct ue.user_id, u.lastname, u.firstname from ".ENT_USERS_ENTITIES." ue, ".$_SESSION['tablename']['users']." u where ue.entity_id in (".$_SESSION['user']['redirect_groupbasket_by_group'][$_SESSION['current_basket']['id']][$_SESSION['current_basket']['group_id']][$id_action]['users_entities'].") and u.user_id = ue.user_id and (u.status = 'OK' or u.status = 'ABS') and enabled = 'Y' order by u.lastname asc");
+        $stmt = $db->query("select distinct ue.user_id, u.lastname, u.firstname from ".ENT_USERS_ENTITIES." ue, ".$_SESSION['tablename']['users']." u where ue.entity_id in (".$_SESSION['user']['redirect_groupbasket_by_group'][$_SESSION['current_basket']['id']][$_SESSION['current_basket']['group_id']][$id_action]['users_entities'].") and u.user_id = ue.user_id and (u.status = 'OK' or u.status = 'ABS') order by u.lastname asc");
         while ($res = $stmt->fetchObject()) {
             array_push($users, array( 'ID' => $res->user_id, 'NOM' => functions::show_string($res->lastname), "PRENOM" => functions::show_string($res->firstname)));
         }
diff --git a/modules/notifications/batch/process_event_stack.php b/modules/notifications/batch/process_event_stack.php
index 9276d286bdd..ef984e777fb 100755
--- a/modules/notifications/batch/process_event_stack.php
+++ b/modules/notifications/batch/process_event_stack.php
@@ -117,7 +117,7 @@ while ($state != 'END') {
                         $db = new Database();
                         $query = 'SELECT param_value_int FROM parameters WHERE id = ?';
                         $stmt = $db -> query($query, array('user_quota'));
-                        if (($recipient->enabled == 'N' AND $stmt -> fetchColumn() == 0) || $recipient->status == 'DEL') {
+                        if (($recipient->status == 'SPD' AND $stmt -> fetchColumn() == 0) || $recipient->status == 'DEL') {
                             $logger->write($user_id.' is disabled or deleted, this notification will not be send', 'INFO');
                             unset($recipients[$i]);
                             continue;
diff --git a/modules/reports/class/class_admin_reports_Abstract.php b/modules/reports/class/class_admin_reports_Abstract.php
index f96ceb38a2c..67305584908 100755
--- a/modules/reports/class/class_admin_reports_Abstract.php
+++ b/modules/reports/class/class_admin_reports_Abstract.php
@@ -126,6 +126,8 @@ abstract class admin_reports_Abstract extends Database
             //$_SESSION['user']['reports'] = array();
             require_once("core".DIRECTORY_SEPARATOR."class".DIRECTORY_SEPARATOR."usergroups_controler.php");
 
+            $usergroups_controler = new usergroups_controler();
+
             foreach(array_keys($enabled_reports)as $key)
             {
                 $stmt = $db->query("select group_id from ".$_SESSION['tablename']['usergroups_reports']." where report_id = ? ", array($key));
@@ -133,7 +135,7 @@ abstract class admin_reports_Abstract extends Database
                 $res = false;
                 while($res=$stmt->fetchObject())
                 {
-                    if(usergroups_controler::inGroup($user_id, $res->group_id) == true)
+                    if($usergroups_controler->inGroup($user_id, $res->group_id) == true)
                     {
                         $find = true;
                         break;
diff --git a/modules/sendmail/address_autocompletion.php b/modules/sendmail/address_autocompletion.php
index 9c9cd1526cc..f3a2d304ee4 100644
--- a/modules/sendmail/address_autocompletion.php
+++ b/modules/sendmail/address_autocompletion.php
@@ -27,7 +27,7 @@ $subQuery = array();
 $subQuery[1] = "SELECT UPPER(lastname) || ' ' || firstname || ' (' || mail || ')' AS result, "
             . ' %d AS confidence, mail AS email '
             . "FROM users"
-            . " WHERE enabled ='Y' AND "
+            . " WHERE status != 'SPD' AND "
     . "(LOWER(lastname) LIKE LOWER('%s') OR LOWER(firstname) LIKE LOWER('%s') OR LOWER(user_id) LIKE LOWER('%s') OR LOWER(user_id) LIKE LOWER('%s') OR LOWER(user_id) LIKE LOWER('%s') OR LOWER(user_id) LIKE LOWER('%s') OR LOWER(mail) LIKE LOWER('%s'))";
 
 $subQuery[2]=
diff --git a/modules/visa/class/class_modules_tools_Abstract.php b/modules/visa/class/class_modules_tools_Abstract.php
index b2eb4459667..7dfa9f5e840 100755
--- a/modules/visa/class/class_modules_tools_Abstract.php
+++ b/modules/visa/class/class_modules_tools_Abstract.php
@@ -516,7 +516,7 @@ abstract class visa_Abstract extends Database
 				users_entities.primary_entity = 'Y' and users.user_id = usergroup_content.user_id AND entities.entity_id = users_entities.entity_id AND group_id IN 
 				(SELECT group_id FROM usergroups_services WHERE service_id = ? AND group_id = ?)  order by users.lastname", array('visa_documents', $group_id));
         } else {
-            $stmt = $db->query("SELECT distinct on(users.user_id) users.user_id, users.firstname, users.lastname, usergroup_content.group_id,entities.entity_id, users.enabled from users, usergroup_content, users_entities,entities WHERE users_entities.user_id = users.user_id and users.status <> 'DEL' and 
+            $stmt = $db->query("SELECT distinct on(users.user_id) users.user_id, users.firstname, users.lastname, usergroup_content.group_id,entities.entity_id from users, usergroup_content, users_entities,entities WHERE users_entities.user_id = users.user_id and users.status <> 'DEL' and 
 				users_entities.primary_entity = 'Y' and users.user_id = usergroup_content.user_id AND entities.entity_id = users_entities.entity_id AND group_id IN 
 				(SELECT group_id FROM usergroups_services WHERE service_id = ?)  
 				order by users.user_id,users.lastname", array('visa_documents'));
@@ -525,7 +525,7 @@ abstract class visa_Abstract extends Database
         $tab_users = array();
 
         while ($res = $stmt->fetchObject()) {
-            array_push($tab_users, array('id' => $res->user_id, 'firstname' => $res->firstname, 'lastname' => $res->lastname, 'group_id' => $res->group_id, 'entity_id' => $res->entity_id, 'enabled' => $res->enabled));
+            array_push($tab_users, array('id' => $res->user_id, 'firstname' => $res->firstname, 'lastname' => $res->lastname, 'group_id' => $res->group_id, 'entity_id' => $res->entity_id));
         }
 
         return $tab_users;
diff --git a/sql/develop.sql b/sql/develop.sql
index c23cd56866e..05ad18e9d76 100755
--- a/sql/develop.sql
+++ b/sql/develop.sql
@@ -6,3 +6,6 @@
 --                                                                          --
 -- *************************************************************************--
 UPDATE parameters SET param_value_string = '19.10.1' WHERE id = 'database_version';
+
+UPDATE users SET status = 'SPD' WHERE enabled = 'N' and status = 'OK';
+ALTER TABLE users DROP COLUMN IF EXISTS enabled;
diff --git a/src/app/user/controllers/UserController.php b/src/app/user/controllers/UserController.php
index aea57adcaa7..29ac34dbe2e 100755
--- a/src/app/user/controllers/UserController.php
+++ b/src/app/user/controllers/UserController.php
@@ -56,7 +56,7 @@ class UserController
 
         if ($GLOBALS['userId'] == 'superadmin') {
             $users = UserModel::get([
-                'select'    => ['id', 'user_id', 'firstname', 'lastname', 'status', 'enabled', 'mail'],
+                'select'    => ['id', 'user_id', 'firstname', 'lastname', 'status', 'mail'],
                 'where'     => ['user_id != ?', 'status != ?'],
                 'data'      => ['superadmin', 'DEL']
             ]);
@@ -65,12 +65,12 @@ class UserController
             $users = [];
             if (!empty($entities)) {
                 $users = UserEntityModel::getWithUsers([
-                    'select'    => ['DISTINCT users.id', 'users.user_id', 'firstname', 'lastname', 'status', 'enabled', 'mail'],
+                    'select'    => ['DISTINCT users.id', 'users.user_id', 'firstname', 'lastname', 'status', 'mail'],
                     'where'     => ['users_entities.entity_id in (?)', 'status != ?'],
                     'data'      => [$entities, 'DEL']
                 ]);
             }
-            $usersNoEntities = UserEntityModel::getUsersWithoutEntities(['select' => ['id', 'users.user_id', 'firstname', 'lastname', 'status', 'enabled', 'mail']]);
+            $usersNoEntities = UserEntityModel::getUsersWithoutEntities(['select' => ['id', 'users.user_id', 'firstname', 'lastname', 'status', 'mail']]);
             $users = array_merge($users, $usersNoEntities);
         }
 
@@ -82,8 +82,8 @@ class UserController
         $quota = [];
         $userQuota = ParameterModel::getById(['id' => 'user_quota', 'select' => ['param_value_int']]);
         if (!empty($userQuota['param_value_int'])) {
-            $activeUser = UserModel::get(['select' => ['count(1)'], 'where' => ['enabled = ?', 'status = ?', 'user_id <> ?'], 'data' => ['Y', 'OK','superadmin']]);
-            $inactiveUser = UserModel::get(['select' => ['count(1)'], 'where' => ['enabled = ?', 'status = ?', 'user_id <> ?'], 'data' => ['N', 'OK','superadmin']]);
+            $activeUser = UserModel::get(['select' => ['count(1)'], 'where' => ['status = ?', 'user_id <> ?'], 'data' => ['OK','superadmin']]);
+            $inactiveUser = UserModel::get(['select' => ['count(1)'], 'where' => ['status = ?', 'user_id <> ?'], 'data' => ['SPD','superadmin']]);
             $quota = ['actives' => $activeUser[0]['count'], 'inactives' => $inactiveUser[0]['count'], 'userQuota' => $userQuota['param_value_int']];
         }
 
@@ -97,7 +97,7 @@ class UserController
             return $response->withStatus($error['status'])->withJson(['errors' => $error['error']]);
         }
 
-        $user = UserModel::getById(['id' => $aArgs['id'], 'select' => ['id', 'user_id', 'firstname', 'lastname', 'status', 'enabled', 'phone', 'mail', 'initials', 'loginmode', 'external_id']]);
+        $user = UserModel::getById(['id' => $aArgs['id'], 'select' => ['id', 'user_id', 'firstname', 'lastname', 'status', 'phone', 'mail', 'initials', 'loginmode', 'external_id']]);
         $user['external_id']        = json_decode($user['external_id'], true);
         $user['signatures']         = UserSignatureModel::getByUserSerialId(['userSerialid' => $aArgs['id']]);
         $user['emailSignatures']    = UserModel::getEmailSignaturesById(['userId' => $user['user_id']]);
@@ -148,10 +148,9 @@ class UserController
         $existingUser = UserModel::getByLowerLogin(['login' => $data['userId'], 'select' => ['id', 'status']]);
 
         if (!empty($existingUser) && $existingUser['status'] == 'DEL') {
-            UserModel::updateStatus(['id' => $existingUser['id'], 'status' => 'OK']);
             UserModel::update([
                 'set'   => [
-                    'enabled'   => 'Y'
+                    'status'   => 'OK'
                 ],
                 'where' => ['id = ?'],
                 'data'  => [$existingUser['id']]
@@ -180,7 +179,7 @@ class UserController
 
         $userQuota = ParameterModel::getById(['id' => 'user_quota', 'select' => ['param_value_int']]);
         if (!empty($userQuota['param_value_int'])) {
-            $activeUser = UserModel::get(['select' => ['count(1)'], 'where' => ['enabled = ?', 'status = ?', 'user_id <> ?'], 'data' => ['Y', 'OK','superadmin']]);
+            $activeUser = UserModel::get(['select' => ['count(1)'], 'where' => ['status = ?', 'user_id <> ?'], 'data' => ['OK', 'superadmin']]);
             if ($activeUser[0]['count'] > $userQuota['param_value_int']) {
                 NotificationsEventsController::fillEventStack(['eventId' => 'user_quota', 'tableName' => 'users', 'recordId' => 'quota_exceed', 'userId' => 'superadmin', 'info' => _QUOTA_EXCEEDED]);
             }
@@ -222,25 +221,29 @@ class UserController
             'initials'  => $data['initials'],
             'loginmode' => empty($data['loginmode']) ? 'standard' : $data['loginmode'],
         ];
-        if (!empty($data['enabled']) && $data['enabled'] == 'Y') {
-            $set['enabled'] = 'Y';
+        if (!empty($data['status']) && $data['status'] == 'OK') {
+            $set['status'] = 'OK';
         }
 
         if ($set['loginmode'] == 'restMode') {
             $set['change_password']= 'N';
         }
 
+        $userQuota = ParameterModel::getById(['id' => 'user_quota', 'select' => ['param_value_int']]);
+        $user = [];
+        if (!empty($userQuota['param_value_int'])) {
+            $user = UserModel::getById(['id' => $aArgs['id'], 'select' => ['status']]);
+        }
+
         UserModel::update([
             'set'   => $set,
             'where' => ['id = ?'],
             'data'  => [$aArgs['id']]
         ]);
 
-        $userQuota = ParameterModel::getById(['id' => 'user_quota', 'select' => ['param_value_int']]);
         if (!empty($userQuota['param_value_int'])) {
-            $user = UserModel::getById(['id' => $aArgs['id'], 'select' => ['enabled']]);
-            if ($user['enabled'] == 'N' && $data['enabled'] == 'Y') {
-                $activeUser = UserModel::get(['select' => ['count(1)'], 'where' => ['enabled = ?', 'status = ?', 'user_id != ?'], 'data' => ['Y', 'OK', 'superadmin']]);
+            if ($user['status'] == 'SPD' && $data['status'] == 'OK') {
+                $activeUser = UserModel::get(['select' => ['count(1)'], 'where' => ['status = ?', 'user_id != ?'], 'data' => ['OK', 'superadmin']]);
                 if ($activeUser[0]['count'] > $userQuota['param_value_int']) {
                     NotificationsEventsController::fillEventStack(['eventId' => 'user_quota', 'tableName' => 'users', 'recordId' => 'quota_exceed', 'userId' => 'superadmin', 'info' => _QUOTA_EXCEEDED]);
                 }
@@ -369,7 +372,7 @@ class UserController
 
         UserModel::update([
             'set'   => [
-                'enabled'   => 'N'
+                'status'   => 'SPD'
             ],
             'where' => ['id = ?'],
             'data'  => [$aArgs['id']]
diff --git a/src/app/user/models/UserModelAbstract.php b/src/app/user/models/UserModelAbstract.php
index 4cfbc8dcd13..f3d625666f9 100755
--- a/src/app/user/models/UserModelAbstract.php
+++ b/src/app/user/models/UserModelAbstract.php
@@ -73,7 +73,6 @@ abstract class UserModelAbstract
                 'mail'                          => $aArgs['user']['mail'],
                 'phone'                         => $aArgs['user']['phone'],
                 'initials'                      => $aArgs['user']['initials'],
-                'enabled'                       => 'Y',
                 'status'                        => 'OK',
                 'change_password'               => empty($aArgs['user']['changePassword']) ? 'Y' : $aArgs['user']['changePassword'],
                 'loginmode'                     => empty($aArgs['user']['loginmode']) ? 'standard' : $aArgs['user']['loginmode'],
diff --git a/src/core/controllers/AutoCompleteController.php b/src/core/controllers/AutoCompleteController.php
index 6dc62a847e8..1534b574e31 100755
--- a/src/core/controllers/AutoCompleteController.php
+++ b/src/core/controllers/AutoCompleteController.php
@@ -86,8 +86,8 @@ class AutoCompleteController
         $requestData = AutoCompleteController::getDataForRequest([
             'search'        => $data['search'],
             'fields'        => '(firstname ilike ? OR lastname ilike ?)',
-            'where'         => ['enabled = ?', 'status != ?', 'user_id not in (?)'],
-            'data'          => ['Y', 'DEL', $excludedUsers],
+            'where'         => ['status not in (?)', 'user_id not in (?)'],
+            'data'          => [['DEL', 'SPD'], $excludedUsers],
             'fieldsNumber'  => 2,
         ]);
 
@@ -163,8 +163,8 @@ class AutoCompleteController
         $requestData = AutoCompleteController::getDataForRequest([
             'search'        => $data['search'],
             'fields'        => '(firstname ilike ? OR lastname ilike ?)',
-            'where'         => ['enabled = ?', 'status != ?', 'user_id not in (?)'],
-            'data'          => ['Y', 'DEL', $excludedUsers],
+            'where'         => ['status not in (?)', 'user_id not in (?)'],
+            'data'          => [['DEL', 'SPD'], $excludedUsers],
             'fieldsNumber'  => 2,
         ]);
 
@@ -207,10 +207,9 @@ class AutoCompleteController
                 'where'         => [
                     'users.user_id = users_entities.user_id',
                     'users_entities.entity_id in (?)',
-                    'users.status != ?',
-                    'users.enabled = ?'
+                    'users.status not in (?)'
                 ],
-                'data'          => [$entities, 'DEL', 'Y'],
+                'data'          => [$entities, ['DEL', 'SPD']],
                 'fieldsNumber'  => 2,
             ]);
 
@@ -229,10 +228,9 @@ class AutoCompleteController
                     'where'         => [
                         'users_entities IS NULL',
                         'users.user_id not in (?)',
-                        'users.status != ?',
-                        'users.enabled = ?'
+                        'users.status not in (?)'
                     ],
-                    'data'          => [$excludedUsers, 'DEL', 'Y'],
+                    'data'          => [$excludedUsers, ['DEL', 'SPD']],
                     'fieldsNumber'  => 2,
                 ]);
 
@@ -251,8 +249,8 @@ class AutoCompleteController
             $requestData = AutoCompleteController::getDataForRequest([
                 'search'        => $data['search'],
                 'fields'        => '(firstname ilike ? OR lastname ilike ?)',
-                'where'         => ['enabled = ?', 'status != ?', 'user_id not in (?)'],
-                'data'          => ['Y', 'DEL', $excludedUsers],
+                'where'         => ['status not in (?)', 'user_id not in (?)'],
+                'data'          => [['DEL', 'SPD'], $excludedUsers],
                 'fieldsNumber'  => 2,
             ]);
 
@@ -296,10 +294,9 @@ class AutoCompleteController
                 'usergroup_content.user_id = users.user_id',
                 'usergroups_services.service_id in (?)',
                 'users.user_id not in (?)',
-                'users.enabled = ?',
-                'users.status != ?'
+                'users.status not in (?)'
             ],
-            'data'          => [['visa_documents', 'sign_document'], $excludedUsers, 'Y', 'DEL'],
+            'data'          => [['visa_documents', 'sign_document'], $excludedUsers, ['DEL', 'SPD']],
             'fieldsNumber'  => 2,
         ]);
 
-- 
GitLab