diff --git a/src/app/resource/controllers/ExportController.php b/src/app/resource/controllers/ExportController.php index 2b91e6e228d100d1e8cf48ea9b763d2cff338c95..cb79443789c0027908d8b5872d716e6209c3c704 100644 --- a/src/app/resource/controllers/ExportController.php +++ b/src/app/resource/controllers/ExportController.php @@ -317,6 +317,7 @@ class ExportController $content = []; foreach ($aArgs['data'] as $value) { if (empty($value['value'])) { + $content[] = ''; continue; } if ($value['isFunction']) { diff --git a/src/app/resource/controllers/ResController.php b/src/app/resource/controllers/ResController.php index d39585e5d7922a8ec1c5da5fbb392d61631d639a..be48cec20fa4e0373948544239eeac07b692d710 100755 --- a/src/app/resource/controllers/ResController.php +++ b/src/app/resource/controllers/ResController.php @@ -77,6 +77,15 @@ class ResController return $response->withStatus(500)->withJson(['errors' => '[ResController create] ' . $resId['errors']]); } + HistoryController::add([ + 'tableName' => 'res_letterbox', + 'recordId' => $resId, + 'eventType' => 'ADD', + 'info' => _DOC_ADDED, + 'moduleId' => 'res', + 'eventId' => 'resadd', + ]); + return $response->withJson(['resId' => $resId]); } diff --git a/src/app/user/controllers/UserController.php b/src/app/user/controllers/UserController.php index 3eceb38d854f88c345c46aece0d839b52fe60553..9d9bd2b2d00b5a4e229f4f3bd8f4a67692294b35 100755 --- a/src/app/user/controllers/UserController.php +++ b/src/app/user/controllers/UserController.php @@ -78,33 +78,6 @@ class UserController $usersIds[] = $value['user_id']; } - $listModels = ListTemplateModel::get(['select' => ['item_id'], 'where' => ['item_id in (?)', 'object_type = ?', 'item_mode = ?'], 'data' => [$usersIds, 'entity_id', 'dest']]); - $listInstances = ListInstanceModel::get(['select' => ['item_id'], 'where' => ['item_id in (?)', 'item_mode = ?'], 'data' => [$usersIds, 'dest'], 'groupBy' => ['item_id']]); - - $usersListModels = []; - foreach ($listModels as $value) { - $usersListModels[] = $value['item_id']; - } - - $usersListInstances = []; - foreach ($listInstances as $value) { - $usersListInstances[] = $value['item_id']; - } - - foreach ($users as $key => $value) { - if (in_array($value['user_id'], $usersListModels)) { - $users[$key]['inDiffListDest'] = true; - } else { - $users[$key]['inDiffListDest'] = false; - } - - if (in_array($value['user_id'], $usersListInstances)) { - $users[$key]['isResDestUser'] = true; - } else { - $users[$key]['isResDestUser'] = false; - } - } - $quota = []; $userQuota = ParameterModel::getById(['id' => 'user_quota', 'select' => ['param_value_int']]); if (!empty($userQuota['param_value_int'])) { @@ -169,8 +142,13 @@ class UserController if (!empty($existingUser) && $existingUser['status'] == 'DEL') { UserModel::updateStatus(['id' => $existingUser['id'], 'status' => 'OK']); - $data['enabled'] = 'Y'; - UserModel::update(['id' => $existingUser['id'], 'user' => $data]); + UserModel::update([ + 'set' => [ + 'enabled' => 'Y' + ], + 'where' => ['id = ?'], + 'data' => [$existingUser['id']] + ]); return $response->withJson(['user' => $existingUser]); } elseif (!empty($existingUser)) { @@ -217,8 +195,7 @@ class UserController $data = $request->getParams(); - $check = Validator::stringType()->notEmpty()->validate($data['user_id']); - $check = $check && Validator::stringType()->notEmpty()->validate($data['firstname']); + $check = Validator::stringType()->notEmpty()->validate($data['firstname']); $check = $check && Validator::stringType()->notEmpty()->validate($data['lastname']); $check = $check && (empty($data['mail']) || filter_var($data['mail'], FILTER_VALIDATE_EMAIL)); $check = $check && (empty($data['phone']) || preg_match("/\+?((|\ |\.|\(|\)|\-)?(\d)*)*\d$/", $data['phone'])); @@ -226,15 +203,32 @@ class UserController return $response->withStatus(400)->withJson(['errors' => 'Bad Request']); } - $user = UserModel::getById(['id' => $aArgs['id'], 'select' => ['enabled']]); + $set = [ + 'firstname' => $data['firstname'], + 'lastname' => $data['lastname'], + 'mail' => $data['mail'], + 'phone' => $data['phone'], + 'initials' => $data['initials'], + 'loginmode' => empty($data['loginmode']) ? 'standard' : $data['loginmode'], + ]; + if (!empty($data['enabled']) && $data['enabled'] == 'Y') { + $set['enabled'] = 'Y'; + } - UserModel::update(['id' => $aArgs['id'], 'user' => $data]); + 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['enabled'] == 'N' && $data['enabled'] == 'Y') { - $activeUser = UserModel::get(['select' => ['count(1)'], 'where' => ['enabled = ?', 'status = ?', 'user_id <> ?'], 'data' => ['Y', '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]); + 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 ($activeUser[0]['count'] > $userQuota['param_value_int']) { + NotificationsEventsController::fillEventStack(['eventId' => 'user_quota', 'tableName' => 'users', 'recordId' => 'quota_exceed', 'userId' => 'superadmin', 'info' => _QUOTA_EXCEEDED]); + } } } @@ -243,10 +237,10 @@ class UserController 'recordId' => $GLOBALS['userId'], 'eventType' => 'UP', 'eventId' => 'userModification', - 'info' => _USER_UPDATED . " {$data['user_id']}" + 'info' => _USER_UPDATED . " {$data['firstname']} {$data['lastname']}" ]); - return $response->withJson(['success' => 'success']); + return $response->withStatus(204); } public function isDeletable(Request $request, Response $response, array $aArgs) @@ -320,6 +314,65 @@ class UserController return $response->withJson(['isDeletable' => true, 'listTemplates' => $listTemplates, 'listInstances' => $listInstances]); } + public function suspend(Request $request, Response $response, array $aArgs) + { + $error = $this->hasUsersRights(['id' => $aArgs['id'], 'delete' => true, 'himself' => true]); + if (!empty($error['error'])) { + return $response->withStatus($error['status'])->withJson(['errors' => $error['error']]); + } + + $user = UserModel::getById(['id' => $aArgs['id'], 'select' => ['firstname', 'lastname', 'user_id']]); + + $listInstances = ListInstanceModel::get([ + 'select' => [1], + 'where' => ['item_id = ?', 'difflist_type = ?', 'item_type = ?', 'item_mode = ?'], + 'data' => [$user['user_id'], 'entity_id', 'user_id', 'dest'] + ]); + if (!empty($listInstances)) { + return $response->withStatus(403)->withJson(['errors' => 'User is still present in listInstances']); + } + + $listTemplates = ListTemplateModel::get([ + 'select' => [1], + 'where' => ['item_id = ?', 'object_type = ?', 'item_type = ?', 'item_mode = ?'], + 'data' => [$user['user_id'], 'entity_id', 'user_id', 'dest'] + ]); + if (!empty($listTemplates)) { + return $response->withStatus(403)->withJson(['errors' => 'User is still present in listTemplates']); + } + + ListInstanceModel::delete([ + 'where' => ['item_id = ?', 'difflist_type = ?', 'item_type = ?'], + 'data' => [$user['user_id'], 'entity_id', 'user_id'] + ]); + ListTemplateModel::delete([ + 'where' => ['item_id = ?', 'object_type = ?', 'item_type = ?'], + 'data' => [$user['user_id'], 'entity_id', 'user_id'] + ]); + RedirectBasketModel::delete([ + 'where' => ['owner_user_id = ? OR actual_user_id = ?'], + 'data' => [$aArgs['id'], $aArgs['id']] + ]); + + UserModel::update([ + 'set' => [ + 'enabled' => 'N' + ], + 'where' => ['id = ?'], + 'data' => [$aArgs['id']] + ]); + + HistoryController::add([ + 'tableName' => 'users', + 'recordId' => $GLOBALS['userId'], + 'eventType' => 'DEL', + 'eventId' => 'userSuppression', + 'info' => _USER_SUSPENDED . " {$user['firstname']} {$user['lastname']}" + ]); + + return $response->withStatus(204); + } + public function delete(Request $request, Response $response, array $aArgs) { $error = $this->hasUsersRights(['id' => $aArgs['id'], 'delete' => true, 'himself' => true]); @@ -370,7 +423,7 @@ class UserController 'info' => _USER_DELETED . " {$user['firstname']} {$user['lastname']}" ]); - return $response->withJson(['success' => 'success']); + return $response->withStatus(204); } public function getProfile(Request $request, Response $response) @@ -397,7 +450,7 @@ class UserController public function updateProfile(Request $request, Response $response) { - $user = UserModel::getByLogin(['login' => $GLOBALS['userId'], 'select' => ['id', 'enabled']]); + $user = UserModel::getByLogin(['login' => $GLOBALS['userId'], 'select' => ['id']]); $data = $request->getParams(); @@ -408,9 +461,18 @@ class UserController if (!$check) { return $response->withStatus(400)->withJson(['errors' => 'Bad Request']); } - $data['enabled'] = $user['enabled']; - UserModel::update(['id' => $user['id'], 'user' => $data]); + UserModel::update([ + 'set' => [ + 'firstname' => $data['firstname'], + 'lastname' => $data['lastname'], + 'mail' => $data['mail'], + 'phone' => $data['phone'], + 'initials' => $data['initials'] + ], + 'where' => ['id = ?'], + 'data' => [$user['id']] + ]); return $response->withJson(['success' => 'success']); } @@ -478,10 +540,11 @@ class UserController return $response->withStatus(400)->withJson(['errors' => 'User not found']); } - $check = RedirectBasketModel::get([ 'select' => [1], - 'where' => [ 'actual_user_id = ?', 'owner_user_id = ?', 'basket_id = ?', 'group_id = ?' ], - 'data' => [ $value['actual_user_id'], $aArgs['id'], $value['basket_id'], $value['group_id'] ] - ]); + $check = RedirectBasketModel::get([ + 'select' => [1], + 'where' => ['actual_user_id = ?', 'owner_user_id = ?', 'basket_id = ?', 'group_id = ?'], + 'data' => [$value['actual_user_id'], $aArgs['id'], $value['basket_id'], $value['group_id']] + ]); if (!empty($check)) { DatabaseModel::rollbackTransaction(); return $response->withStatus(400)->withJson(['errors' => 'Redirection already exist']); diff --git a/src/app/user/models/UserModelAbstract.php b/src/app/user/models/UserModelAbstract.php index bbe92ca6be8066b8450c2568fd4a491f37850466..79eb53f9ed056b9ceaa6502906fd5a84f407fd99 100755 --- a/src/app/user/models/UserModelAbstract.php +++ b/src/app/user/models/UserModelAbstract.php @@ -88,25 +88,14 @@ abstract class UserModelAbstract public static function update(array $aArgs) { - ValidatorModel::notEmpty($aArgs, ['id', 'user']); - ValidatorModel::notEmpty($aArgs['user'], ['firstname', 'lastname']); - ValidatorModel::intVal($aArgs, ['id']); - ValidatorModel::stringType($aArgs['user'], ['firstname', 'lastname', 'mail', 'initials', 'thumbprint', 'phone', 'enabled', 'loginmode']); + ValidatorModel::notEmpty($aArgs, ['set', 'where', 'data']); + ValidatorModel::arrayType($aArgs, ['set', 'where', 'data']); DatabaseModel::update([ - 'table' => 'users', - 'set' => [ - 'firstname' => $aArgs['user']['firstname'], - 'lastname' => $aArgs['user']['lastname'], - 'mail' => $aArgs['user']['mail'], - 'phone' => $aArgs['user']['phone'], - 'initials' => $aArgs['user']['initials'], - 'enabled' => $aArgs['user']['enabled'], - 'thumbprint' => $aArgs['user']['thumbprint'], - 'loginmode' => empty($aArgs['user']['loginmode']) ? 'standard' : $aArgs['user']['loginmode'], - ], - 'where' => ['id = ?'], - 'data' => [$aArgs['id']] + 'table' => 'users', + 'set' => $aArgs['set'], + 'where' => $aArgs['where'], + 'data' => $aArgs['data'] ]); return true; diff --git a/src/core/lang/lang-en.php b/src/core/lang/lang-en.php index 385f2bb553a30919e791cb37d3c0435242c0d69e..2afc27a87c6781f026a96c87df3576e987ef8beb 100755 --- a/src/core/lang/lang-en.php +++ b/src/core/lang/lang-en.php @@ -91,6 +91,7 @@ define('_UPDATE_STATUS', 'Status update'); define('_USER_ID_ALREADY_EXISTS', 'The user id already exists'); define('_USER_CREATED', 'User added'); define('_USER_UPDATED', 'User updated'); +define('_USER_SUSPENDED', 'User suspended'); define('_USER_DELETED', 'User deleted'); define('_USER_GROUP_CREATION', 'Group added for user'); define('_USER_GROUP_MODIFICATION', 'Group updated for user'); diff --git a/src/core/lang/lang-fr.php b/src/core/lang/lang-fr.php index 0616193db163ade71ef7b72fc1459534b6239441..1cea9bab0182fff63cce94ae88286fbb0e01a074 100755 --- a/src/core/lang/lang-fr.php +++ b/src/core/lang/lang-fr.php @@ -91,6 +91,7 @@ define('_UPDATE_STATUS', 'Modification du statut'); define('_USER_ID_ALREADY_EXISTS', 'L\'identifiant utilisateur existe déjà '); define('_USER_CREATED', 'Utilisateur ajouté'); define('_USER_UPDATED', 'Utilisateur modifié'); +define('_USER_SUSPENDED', 'Utilisateur suspendu'); define('_USER_DELETED', 'Utilisateur supprimé'); define('_USER_GROUP_CREATION', 'Groupe ajouté pour utilisateur'); define('_USER_GROUP_MODIFICATION', 'Groupe modifié pour utilisateur'); diff --git a/src/core/lang/lang-nl.php b/src/core/lang/lang-nl.php index 2be9be43468385d2626897e9bd30e26420706331..53513cf6d783b775d1d15b8a26238759f6c2e5a6 100644 --- a/src/core/lang/lang-nl.php +++ b/src/core/lang/lang-nl.php @@ -74,6 +74,7 @@ define('_UPDATE_STATUS', 'Wijziging van status'); define('_USER_ID_ALREADY_EXISTS', 'De gebruikersnaam van de gebruiker bestaat reeds'); define('_USER_CREATED', 'Toegevoegde gebruiker'); define('_USER_UPDATED', 'Gewijzigde gebruiker'); +define('_USER_SUSPENDED', 'Utilisateur suspendu TO TRANSLATE'); define('_USER_DELETED', 'Verwijderde gebruiker'); define('_USER_GROUP_CREATION', 'Toegevoegde groep voor gebruiker'); define('_USER_GROUP_MODIFICATION', 'Gewijzigde groep voor gebruiker');