diff --git a/composer.json b/composer.json index 03fe4db02f21d970fb69d79fac655583ad10d886..fe825baf622c47d99d0fc4c4966db376ebe962d9 100755 --- a/composer.json +++ b/composer.json @@ -19,6 +19,7 @@ "Resource\\" : "src/app/resource/", "Status\\" : "src/app/status/", "Template\\" : "src/app/template/", + "User\\" : "src/app/user/", "Core\\" : "core/", "Attachments\\" : "modules/attachments/", diff --git a/core/Models/SecurityModelAbstract.php b/core/Models/SecurityModelAbstract.php index 450ab885157786471297b56d58b65f5677b44d41..a5271b6e6d13e636db0720848a494328221efbe1 100755 --- a/core/Models/SecurityModelAbstract.php +++ b/core/Models/SecurityModelAbstract.php @@ -64,7 +64,7 @@ class SecurityModelAbstract ValidatorModel::stringType($args, ['userId', 'cookieKey']); $aReturn = DatabaseModel::select([ - 'select' => ['password'], + 'select' => [1], 'table' => ['users'], 'where' => ['user_id = ?', 'cookie_key = ?', 'cookie_date > CURRENT_TIMESTAMP'], 'data' => [$args['userId'], $args['cookieKey']] diff --git a/core/Models/UserModelAbstract.php b/core/Models/UserModelAbstract.php index 68278b9364221e7f905117c6ed5bf0f981b92785..6e304aa88ff98a96729c0ec68d14742980372e4a 100755 --- a/core/Models/UserModelAbstract.php +++ b/core/Models/UserModelAbstract.php @@ -487,7 +487,7 @@ class UserModelAbstract ValidatorModel::stringType($aArgs, ['userId']); $aGroups = DatabaseModel::select([ - 'select' => ['usergroup_content.group_id', 'usergroups.group_desc', 'usergroup_content.primary_group', 'usergroup_content.role', 'security.maarch_comment', 'security.where_clause'], + 'select' => ['usergroups.id', 'usergroup_content.group_id', 'usergroups.group_desc', 'usergroup_content.primary_group', 'usergroup_content.role', 'security.maarch_comment', 'security.where_clause'], 'table' => ['usergroup_content, usergroups, security'], 'where' => ['usergroup_content.group_id = usergroups.group_id', 'usergroup_content.user_id = ?','usergroups.group_id = security.group_id'], 'data' => [$aArgs['userId']] diff --git a/modules/visa/Controllers/VisaController.php b/modules/visa/Controllers/VisaController.php index c612c041ade7d91c280329d0ded07906c53a3bc2..10486edfbbfc01608a2938f6ace0637fe52a95d6 100755 --- a/modules/visa/Controllers/VisaController.php +++ b/modules/visa/Controllers/VisaController.php @@ -17,12 +17,12 @@ use Attachments\Models\AttachmentsModel; use Basket\models\BasketModel; use Action\models\ActionModel; use Core\Models\ContactModel; -use SrcCore\models\LinkModel; use Core\Models\UserModel; use Core\Models\LangModel; use Docserver\models\DocserverModel; use Core\Models\ServiceModel; use Entity\models\ListInstanceModel; +use Link\models\LinkModel; use Notes\Models\NoteModel; use Psr\Http\Message\RequestInterface; use Psr\Http\Message\ResponseInterface; diff --git a/rest/index.php b/rest/index.php index 8e619d92d3ba4e85838ea5f79e0c1211d412d65d..9610937375061d85119a3e17626637248153c712 100755 --- a/rest/index.php +++ b/rest/index.php @@ -82,6 +82,7 @@ if (strpos(getcwd(), '/rest')) { chdir('..'); } +$userId = null; if (!empty($_SERVER['PHP_AUTH_USER']) && !empty($_SERVER['PHP_AUTH_PW'])) { if (\Core\Models\SecurityModel::authentication(['userId' => $_SERVER['PHP_AUTH_USER'], 'password' => $_SERVER['PHP_AUTH_PW']])) { $userId = $_SERVER['PHP_AUTH_USER']; @@ -111,9 +112,8 @@ $app->post('/initialize', \SrcCore\controllers\CoreController::class . ':initial //Administration $app->get('/administration', \SrcCore\controllers\CoreController::class . ':getAdministration'); -$app->get('/administration/users', \Core\Controllers\UserController::class . ':getUsersForAdministration'); -$app->get('/administration/users/new', \Core\Controllers\UserController::class . ':getNewUserForAdministration'); -$app->get('/administration/users/{id}', \Core\Controllers\UserController::class . ':getUserForAdministration'); +$app->get('/administration/users', \User\controllers\UserController::class . ':getUsersForAdministration'); +$app->get('/administration/users/{id}', \User\controllers\UserController::class . ':getUserForAdministration'); //Baskets $app->get('/baskets', \Basket\controllers\BasketController::class . ':get'); @@ -177,34 +177,35 @@ $app->get('/res/{resId}/lock', \Resource\controllers\ResController::class . ':is $app->get('/res/{resId}/notes/count', \Resource\controllers\ResController::class . ':getNotesCountForCurrentUserById'); //Users -$app->get('/users/autocompleter', \Core\Controllers\UserController::class . ':getUsersForAutocompletion'); -$app->post('/users', \Core\Controllers\UserController::class . ':create'); -$app->get('/users/{id}/details', \Core\Controllers\UserController::class . ':getDetailledById'); -$app->put('/users/{id}', \Core\Controllers\UserController::class . ':update'); -$app->put('/users/{id}/password', \Core\Controllers\UserController::class . ':resetPassword'); -$app->put('/users/{id}/status', \Core\Controllers\UserController::class . ':updateStatus'); -$app->delete('/users/{id}', \Core\Controllers\UserController::class . ':delete'); -$app->post('/users/{id}/groups', \Core\Controllers\UserController::class . ':addGroup'); -$app->put('/users/{id}/groups/{groupId}', \Core\Controllers\UserController::class . ':updateGroup'); -$app->delete('/users/{id}/groups/{groupId}', \Core\Controllers\UserController::class . ':deleteGroup'); -$app->post('/users/{id}/entities', \Core\Controllers\UserController::class . ':addEntity'); -$app->put('/users/{id}/entities/{entityId}', \Core\Controllers\UserController::class . ':updateEntity'); -$app->put('/users/{id}/entities/{entityId}/primaryEntity', \Core\Controllers\UserController::class . ':updatePrimaryEntity'); -$app->delete('/users/{id}/entities/{entityId}', \Core\Controllers\UserController::class . ':deleteEntity'); -$app->post('/users/{id}/signatures', \Core\Controllers\UserController::class . ':addSignature'); -$app->put('/users/{id}/signatures/{signatureId}', \Core\Controllers\UserController::class . ':updateSignature'); -$app->delete('/users/{id}/signatures/{signatureId}', \Core\Controllers\UserController::class . ':deleteSignature'); -$app->post('/users/{id}/redirectedBaskets', \Core\Controllers\UserController::class . ':setRedirectedBaskets'); -$app->delete('/users/{id}/redirectedBaskets/{basketId}', \Core\Controllers\UserController::class . ':deleteRedirectedBaskets'); +$app->get('/users/autocompleter', \User\controllers\UserController::class . ':getUsersForAutocompletion'); +$app->post('/users', \User\controllers\UserController::class . ':create'); +$app->get('/users/{id}/details', \User\controllers\UserController::class . ':getDetailledById'); +$app->put('/users/{id}', \User\controllers\UserController::class . ':update'); +$app->put('/users/{id}/password', \User\controllers\UserController::class . ':resetPassword'); +$app->put('/users/{id}/status', \User\controllers\UserController::class . ':updateStatus'); +$app->delete('/users/{id}', \User\controllers\UserController::class . ':delete'); +$app->post('/users/{id}/groups', \User\controllers\UserController::class . ':addGroup'); +$app->put('/users/{id}/groups/{groupId}', \User\controllers\UserController::class . ':updateGroup'); +$app->delete('/users/{id}/groups/{groupId}', \User\controllers\UserController::class . ':deleteGroup'); +$app->post('/users/{id}/entities', \User\controllers\UserController::class . ':addEntity'); +$app->put('/users/{id}/entities/{entityId}', \User\controllers\UserController::class . ':updateEntity'); +$app->put('/users/{id}/entities/{entityId}/primaryEntity', \User\controllers\UserController::class . ':updatePrimaryEntity'); +$app->delete('/users/{id}/entities/{entityId}', \User\controllers\UserController::class . ':deleteEntity'); +$app->post('/users/{id}/signatures', \User\controllers\UserController::class . ':addSignature'); +$app->put('/users/{id}/signatures/{signatureId}', \User\controllers\UserController::class . ':updateSignature'); +$app->delete('/users/{id}/signatures/{signatureId}', \User\controllers\UserController::class . ':deleteSignature'); +$app->post('/users/{id}/redirectedBaskets', \User\controllers\UserController::class . ':setRedirectedBaskets'); +$app->delete('/users/{id}/redirectedBaskets/{basketId}', \User\controllers\UserController::class . ':deleteRedirectedBaskets'); +$app->put('/users/{id}/baskets', \User\controllers\UserController::class . ':updateBasketsDisplay'); //CurrentUser -$app->get('/currentUser/profile', \Core\Controllers\UserController::class . ':getProfile'); -$app->put('/currentUser/profile', \Core\Controllers\UserController::class . ':updateProfile'); -$app->put('/currentUser/password', \Core\Controllers\UserController::class . ':updateCurrentUserPassword'); -$app->post('/currentUser/emailSignature', \Core\Controllers\UserController::class . ':createCurrentUserEmailSignature'); -$app->put('/currentUser/emailSignature/{id}', \Core\Controllers\UserController::class . ':updateCurrentUserEmailSignature'); -$app->delete('/currentUser/emailSignature/{id}', \Core\Controllers\UserController::class . ':deleteCurrentUserEmailSignature'); -$app->put('/currentUser/groups/{groupId}/baskets/{basketId}', \Core\Controllers\UserController::class . ':updateBasketPreference'); +$app->get('/currentUser/profile', \User\controllers\UserController::class . ':getProfile'); +$app->put('/currentUser/profile', \User\controllers\UserController::class . ':updateProfile'); +$app->put('/currentUser/password', \User\controllers\UserController::class . ':updateCurrentUserPassword'); +$app->post('/currentUser/emailSignature', \User\controllers\UserController::class . ':createCurrentUserEmailSignature'); +$app->put('/currentUser/emailSignature/{id}', \User\controllers\UserController::class . ':updateCurrentUserEmailSignature'); +$app->delete('/currentUser/emailSignature/{id}', \User\controllers\UserController::class . ':deleteCurrentUserEmailSignature'); +$app->put('/currentUser/groups/{groupId}/baskets/{basketId}', \User\controllers\UserController::class . ':updateBasketPreference'); //Entities $app->get('/entities', \Entity\controllers\EntityController::class . ':get'); diff --git a/sql/17_xx.sql b/sql/17_xx.sql index e435c75475d48a2148c3640022f0cda7bec07d59..c1716aabbe5e06739ffcba754008660e8483669d 100755 --- a/sql/17_xx.sql +++ b/sql/17_xx.sql @@ -609,3 +609,17 @@ UPDATE doctypes_second_level SET css_style = '#FF0000' WHERE css_style = 'red_st UPDATE doctypes_second_level SET css_style = '#008000' WHERE css_style = 'green_style'; UPDATE doctypes_second_level SET css_style = '#800080' WHERE css_style = 'violet_style'; UPDATE doctypes_second_level SET css_style = '#000000' WHERE css_style = 'default_style'; + +DROP TABLE IF EXISTS users_baskets_preferences; +CREATE TABLE users_baskets_preferences +( + id serial NOT NULL, + user_serial_id integer NOT NULL, + group_serial_id integer NOT NULL, + basket_id character varying(32) NOT NULL, + display boolean NOT NULL, + color character varying(16), + CONSTRAINT users_baskets_preferences_pkey PRIMARY KEY (id), + CONSTRAINT users_baskets_preferences_key UNIQUE (user_serial_id, group_serial_id, basket_id) +) +WITH (OIDS=FALSE); diff --git a/sql/structure.sql b/sql/structure.sql index 7b2f5df002b0aa423590ecc21382f6d92a939016..a41d5f698efcf7c2082de9fea173098c0ea9c052 100755 --- a/sql/structure.sql +++ b/sql/structure.sql @@ -2769,6 +2769,20 @@ CREATE TABLE users_baskets ) WITH (OIDS=FALSE); +DROP TABLE IF EXISTS users_baskets_preferences; +CREATE TABLE users_baskets_preferences +( + id serial NOT NULL, + user_serial_id integer NOT NULL, + group_serial_id integer NOT NULL, + basket_id character varying(32) NOT NULL, + display boolean NOT NULL, + color character varying(16), + CONSTRAINT users_baskets_preferences_pkey PRIMARY KEY (id), + CONSTRAINT users_baskets_preferences_key UNIQUE (user_serial_id, group_serial_id, basket_id) +) +WITH (OIDS=FALSE); + -- convert working table DROP TABLE IF EXISTS convert_stack; diff --git a/src/app/group/models/GroupModelAbstract.php b/src/app/group/models/GroupModelAbstract.php index 7d18f4e51eb8c0dedf1066027221b92665655ed4..80ff6611e7e90a2e9b249b45856fccf7b21cb53f 100644 --- a/src/app/group/models/GroupModelAbstract.php +++ b/src/app/group/models/GroupModelAbstract.php @@ -38,7 +38,7 @@ class GroupModelAbstract public static function getById(array $aArgs) { ValidatorModel::notEmpty($aArgs, ['id']); - ValidatorModel::stringType($aArgs, ['id']); + ValidatorModel::intVal($aArgs, ['id']); $aGroups = DatabaseModel::select([ 'select' => empty($aArgs['select']) ? ['*'] : $aArgs['select'], diff --git a/core/Controllers/UserController.php b/src/app/user/controllers/UserController.php old mode 100755 new mode 100644 similarity index 85% rename from core/Controllers/UserController.php rename to src/app/user/controllers/UserController.php index ef67171d1113ec54c1f1269258fad4657b84a10a..2d75a75131bb0c2c750d3627e3d44898d534b418 --- a/core/Controllers/UserController.php +++ b/src/app/user/controllers/UserController.php @@ -10,10 +10,9 @@ /** * @brief User Controller * @author dev@maarch.org -* @ingroup core */ -namespace Core\Controllers; +namespace User\controllers; use Basket\models\BasketModel; use Core\Models\SecurityModel; @@ -24,13 +23,12 @@ use Entity\models\EntityModel; use Group\models\GroupModel; use History\controllers\HistoryController; use History\models\HistoryModel; -use Psr\Http\Message\RequestInterface; -use Psr\Http\Message\ResponseInterface; use Respect\Validation\Validator; use Slim\Http\Request; use Slim\Http\Response; use SrcCore\models\CoreConfigModel; use SrcCore\controllers\StoreController; +use User\models\UserBasketPreferenceModel; class UserController { @@ -102,7 +100,7 @@ class UserController UserModel::delete(['id' => $aArgs['id']]); //get New User List - if ($_SESSION['user']['UserId'] == 'superadmin') { + if ($GLOBALS['userId'] == 'superadmin') { $users = UserModel::get( [ 'select' => ['id', 'user_id', 'firstname', 'lastname', 'status', 'enabled', 'mail'], @@ -111,7 +109,7 @@ class UserController ] ); } else { - $entities = EntityModel::getAllEntitiesByUserId(['userId' => $_SESSION['user']['UserId']]); + $entities = EntityModel::getAllEntitiesByUserId(['userId' => $GLOBALS['userId']]); $users = UserModel::getByEntities( [ 'select' => ['DISTINCT users.id', 'users.user_id', 'firstname', 'lastname', 'status', 'enabled', 'mail'], @@ -175,7 +173,7 @@ class UserController public function updateProfile(Request $request, Response $response) { - $user = UserModel::getByUserId(['userId' => $_SESSION['user']['UserId'], 'select' => ['id', 'enabled']]); + $user = UserModel::getByUserId(['userId' => $GLOBALS['userId'], 'select' => ['id', 'enabled']]); $data = $request->getParams(); @@ -193,7 +191,7 @@ class UserController return $response->withJson(['success' => _UPDATED_PROFILE]); } - public function resetPassword(RequestInterface $request, ResponseInterface $response, $aArgs) + public function resetPassword(Request $request, Response $response, array $aArgs) { $error = $this->hasUsersRights(['id' => $aArgs['id']]); if (!empty($error['error'])) { @@ -205,7 +203,7 @@ class UserController return $response->withJson(['success' => _RESET_PASSWORD]); } - public function updateCurrentUserPassword(RequestInterface $request, ResponseInterface $response) + public function updateCurrentUserPassword(Request $request, Response $response) { $data = $request->getParams(); @@ -215,11 +213,11 @@ class UserController if ($data['newPassword'] != $data['reNewPassword']) { return $response->withStatus(400)->withJson(['errors' => 'Bad Request']); - } elseif (!SecurityModel::authentication(['userId' => $_SESSION['user']['UserId'], 'password' => $data['currentPassword']])) { + } elseif (!SecurityModel::authentication(['userId' => $GLOBALS['userId'], 'password' => $data['currentPassword']])) { return $response->withStatus(401)->withJson(['errors' => _WRONG_PSW]); } - $user = UserModel::getByUserId(['userId' => $_SESSION['user']['UserId'], 'select' => ['id']]); + $user = UserModel::getByUserId(['userId' => $GLOBALS['userId'], 'select' => ['id']]); UserModel::updatePassword(['id' => $user['id'], 'password' => $data['newPassword']]); return $response->withJson(['success' => _UPDATED_PASSWORD]); @@ -312,12 +310,10 @@ class UserController 'info' => "{$user['firstname']} {$user['lastname']} " ._BACK_FROM_VACATION ]); - return $response->withJson([ - 'user' => UserModel::getById(['id' => $aArgs['id'], 'select' => ['status']]) - ]); + return $response->withJson(['user' => UserModel::getById(['id' => $aArgs['id'], 'select' => ['status']])]); } - public function addSignature(RequestInterface $request, ResponseInterface $response, $aArgs) + public function addSignature(Request $request, Response $response, array $aArgs) { $error = $this->hasUsersRights(['id' => $aArgs['id'], 'himself' => true]); if (!empty($error['error'])) { @@ -395,7 +391,7 @@ class UserController ]); } - public function updateSignature(RequestInterface $request, ResponseInterface $response, $aArgs) + public function updateSignature(Request $request, Response $response, array $aArgs) { $error = $this->hasUsersRights(['id' => $aArgs['id'], 'himself' => true]); if (!empty($error['error'])) { @@ -420,7 +416,7 @@ class UserController ]); } - public function deleteSignature(RequestInterface $request, ResponseInterface $response, $aArgs) + public function deleteSignature(Request $request, Response $response, array $aArgs) { $error = $this->hasUsersRights(['id' => $aArgs['id'], 'himself' => true]); if (!empty($error['error'])) { @@ -435,7 +431,7 @@ class UserController ]); } - public function createCurrentUserEmailSignature(RequestInterface $request, ResponseInterface $response) + public function createCurrentUserEmailSignature(Request $request, Response $response) { $data = $request->getParams(); @@ -444,7 +440,7 @@ class UserController } $r = UserModel::createEmailSignature([ - 'userId' => $_SESSION['user']['UserId'], + 'userId' => $GLOBALS['userId'], 'title' => $data['title'], 'htmlBody' => $data['htmlBody'] ]); @@ -455,11 +451,11 @@ class UserController return $response->withJson([ 'success' => _NEW_EMAIL_SIGNATURE, - 'emailSignatures' => UserModel::getEmailSignaturesById(['userId' => $_SESSION['user']['UserId']]) + 'emailSignatures' => UserModel::getEmailSignaturesById(['userId' => $GLOBALS['userId']]) ]); } - public function updateCurrentUserEmailSignature(RequestInterface $request, ResponseInterface $response, $aArgs) + public function updateCurrentUserEmailSignature(Request $request, Response $response, array $aArgs) { $data = $request->getParams(); @@ -469,7 +465,7 @@ class UserController $r = UserModel::updateEmailSignature([ 'id' => $aArgs['id'], - 'userId' => $_SESSION['user']['UserId'], + 'userId' => $GLOBALS['userId'], 'title' => $data['title'], 'htmlBody' => $data['htmlBody'] ]); @@ -480,15 +476,15 @@ class UserController return $response->withJson([ 'success' => _UPDATED_EMAIL_SIGNATURE, - 'emailSignature' => UserModel::getEmailSignatureWithSignatureIdById(['userId' => $_SESSION['user']['UserId'], 'signatureId' => $aArgs['id']]) + 'emailSignature' => UserModel::getEmailSignatureWithSignatureIdById(['userId' => $GLOBALS['userId'], 'signatureId' => $aArgs['id']]) ]); } - public function deleteCurrentUserEmailSignature(RequestInterface $request, ResponseInterface $response, $aArgs) + public function deleteCurrentUserEmailSignature(Request $request, Response $response, array $aArgs) { $r = UserModel::deleteEmailSignature([ 'id' => $aArgs['id'], - 'userId' => $_SESSION['user']['UserId'] + 'userId' => $GLOBALS['userId'] ]); if (!$r) { @@ -497,11 +493,11 @@ class UserController return $response->withJson([ 'success' => _DELETED_EMAIL_SIGNATURE, - 'emailSignatures' => UserModel::getEmailSignaturesById(['userId' => $_SESSION['user']['UserId']]) + 'emailSignatures' => UserModel::getEmailSignaturesById(['userId' => $GLOBALS['userId']]) ]); } - public function getUsersForAutocompletion(RequestInterface $request, ResponseInterface $response) + public function getUsersForAutocompletion(Request $request, Response $response) { $excludedUsers = ['superadmin']; @@ -518,20 +514,20 @@ class UserController return $response->withJson($users); } - public function getUsersForAdministration(RequestInterface $request, ResponseInterface $response) + public function getUsersForAdministration(Request $request, Response $response) { - if (!ServiceModel::hasService(['id' => 'admin_users', 'userId' => $_SESSION['user']['UserId'], 'location' => 'apps', 'type' => 'admin'])) { + if (!ServiceModel::hasService(['id' => 'admin_users', 'userId' => $GLOBALS['userId'], 'location' => 'apps', 'type' => 'admin'])) { return $response->withStatus(403)->withJson(['errors' => 'Service forbidden']); } - if ($_SESSION['user']['UserId'] == 'superadmin') { + if ($GLOBALS['userId'] == 'superadmin') { $users = UserModel::get([ 'select' => ['id', 'user_id', 'firstname', 'lastname', 'status', 'enabled', 'mail'], 'where' => ['user_id != ?', 'status != ?'], 'data' => ['superadmin', 'DEL'] ]); } else { - $entities = EntityModel::getAllEntitiesByUserId(['userId' => $_SESSION['user']['UserId']]); + $entities = EntityModel::getAllEntitiesByUserId(['userId' => $GLOBALS['userId']]); $users = UserModel::getByEntities([ 'select' => ['DISTINCT users.id', 'users.user_id', 'firstname', 'lastname', 'status', 'enabled', 'mail'], 'entities' => $entities @@ -558,12 +554,10 @@ class UserController } } - $return['users'] = $users; - - return $response->withJson($return); + return $response->withJson(['users' => $users]); } - public function getDetailledById(RequestInterface $request, ResponseInterface $response, $aArgs) + public function getDetailledById(Request $request, Response $response, array $aArgs) { $error = $this->hasUsersRights(['id' => $aArgs['id']]); if (!empty($error['error'])) { @@ -576,7 +570,7 @@ class UserController $user['groups'] = UserModel::getGroupsByUserId(['userId' => $user['user_id']]); $user['allGroups'] = GroupModel::getAvailableGroupsByUserId(['userId' => $user['user_id']]); $user['entities'] = UserModel::getEntitiesById(['userId' => $user['user_id']]); - $user['allEntities'] = EntityModel::getAvailableEntitiesForAdministratorByUserId(['userId' => $user['user_id'], 'administratorUserId' => $_SESSION['user']['UserId']]); + $user['allEntities'] = EntityModel::getAvailableEntitiesForAdministratorByUserId(['userId' => $user['user_id'], 'administratorUserId' => $GLOBALS['userId']]); $user['baskets'] = BasketModel::getBasketsByUserId(['userId' => $user['user_id']]); $user['history'] = HistoryModel::getByUserId(['userId' => $user['user_id']]); @@ -652,7 +646,7 @@ class UserController return $response->withJson(['success' => 'success']); } - public function deleteGroup(RequestInterface $request, ResponseInterface $response, $aArgs) + public function deleteGroup(Request $request, Response $response, array $aArgs) { $error = $this->hasUsersRights(['id' => $aArgs['id']]); if (!empty($error['error'])) { @@ -680,7 +674,7 @@ class UserController ]); } - public function addEntity(RequestInterface $request, ResponseInterface $response, $aArgs) + public function addEntity(Request $request, Response $response, array $aArgs) { $error = $this->hasUsersRights(['id' => $aArgs['id']]); if (!empty($error['error'])) { @@ -711,11 +705,11 @@ class UserController return $response->withJson([ 'success' => _ADDED_ENTITY, 'entities' => UserModel::getEntitiesById(['userId' => $user['user_id']]), - 'allEntities' => EntityModel::getAvailableEntitiesForAdministratorByUserId(['userId' => $user['user_id'], 'administratorUserId' => $_SESSION['user']['UserId']]) + 'allEntities' => EntityModel::getAvailableEntitiesForAdministratorByUserId(['userId' => $user['user_id'], 'administratorUserId' => $GLOBALS['userId']]) ]); } - public function updateEntity(RequestInterface $request, ResponseInterface $response, $aArgs) + public function updateEntity(Request $request, Response $response, array $aArgs) { $error = $this->hasUsersRights(['id' => $aArgs['id']]); if (!empty($error['error'])) { @@ -735,7 +729,7 @@ class UserController return $response->withJson(['success' => _UPDATED_ENTITY]); } - public function updatePrimaryEntity(RequestInterface $request, ResponseInterface $response, $aArgs) + public function updatePrimaryEntity(Request $request, Response $response, array $aArgs) { $error = $this->hasUsersRights(['id' => $aArgs['id']]); if (!empty($error['error'])) { @@ -751,7 +745,7 @@ class UserController return $response->withJson(['success' => _UPDATED_ENTITY, 'entities' => UserModel::getEntitiesById(['userId' => $user['user_id']])]); } - public function deleteEntity(RequestInterface $request, ResponseInterface $response, $aArgs) + public function deleteEntity(Request $request, Response $response, array $aArgs) { $error = $this->hasUsersRights(['id' => $aArgs['id']]); if (!empty($error['error'])) { @@ -772,15 +766,81 @@ class UserController return $response->withJson([ 'success' => _DELETED_ENTITY, 'entities' => UserModel::getEntitiesById(['userId' => $user['user_id']]), - 'allEntities' => EntityModel::getAvailableEntitiesForAdministratorByUserId(['userId' => $user['user_id'], 'administratorUserId' => $_SESSION['user']['UserId']]) + 'allEntities' => EntityModel::getAvailableEntitiesForAdministratorByUserId(['userId' => $user['user_id'], 'administratorUserId' => $GLOBALS['userId']]) + ]); + } + + public function updateBasketsDisplay(Request $request, Response $response, array $aArgs) + { + $error = $this->hasUsersRights(['id' => $aArgs['id']]); + if (!empty($error['error'])) { + return $response->withStatus($error['status'])->withJson(['errors' => $error['error']]); + } + + $data = $request->getParams(); + $check = Validator::stringType()->notEmpty()->validate($data['basketId']); + $check = $check && Validator::intVal()->notEmpty()->validate($data['groupSerialId']); + $check = $check && Validator::boolType()->validate($data['allowed']); + if (!$check) { + return $response->withStatus(400)->withJson(['errors' => 'Bad Request']); + } + + $group = GroupModel::getById(['id' => $data['groupSerialId'], 'select' => ['group_id']]); + $basket = BasketModel::getById(['id' => $data['basketId'], 'select' => [1]]); + if (empty($group) || empty($basket)) { + return $response->withStatus(400)->withJson(['errors' => 'Group or basket does not exist']); + } + + $user = UserModel::getById(['id' => $aArgs['id'], 'select' => ['user_id']]); + $groups = UserModel::getGroupsByUserId(['userId' => $user['user_id']]); + $groupFound = false; + foreach ($groups as $value) { + if ($value['id'] == $data['groupSerialId']) { + $groupFound = true; + } + } + if (!$groupFound) { + return $response->withStatus(400)->withJson(['errors' => 'Group is not linked to this user']); + } + $groups = BasketModel::getGroups(['id' => $data['basketId']]); + $groupFound = false; + foreach ($groups as $value) { + if ($value['group_id'] == $group['group_id']) { + $groupFound = true; + } + } + if (!$groupFound) { + return $response->withStatus(400)->withJson(['errors' => 'Group is not linked to this basket']); + } + + $preference = UserBasketPreferenceModel::get([ + 'select' => [1], + 'where' => ['user_serial_id = ?', 'group_serial_id = ?', 'basket_id = ?'], + 'data' => [$aArgs['id'], $data['groupSerialId'], $data['basketId']] ]); + if (!empty($preference)) { + return $response->withStatus(400)->withJson(['errors' => 'Preference already exists']); + } + + if ($data['allowed']) { + $data['userSerialId'] = $aArgs['id']; + $data['display'] = 'true'; + UserBasketPreferenceModel::create($data); + } else { + UserBasketPreferenceModel::delete([ + 'where' => ['user_serial_id = ?', 'group_serial_id = ?', 'basket_id = ?'], + 'data' => [$aArgs['id'], $data['groupSerialId'], $data['basketId']] + ]); + } + + return $response->withJson(['success' => 'success']); } - public function updateBasketPreference(RequestInterface $request, ResponseInterface $response, $aArgs) + public function updateBasketPreference(Request $request, Response $response, array $aArgs) { $data = $request->getParams(); - $user = UserModel::getByUserId(['userId' => $_SESSION['user']['UserId'], 'select' => ['id']]); + $user = UserModel::getByUserId(['userId' => $GLOBALS['userId'], 'select' => ['id']]); if(isset($data['color']) && $data['color'] == ''){ UserModel::eraseBasketColor(['id' => $user['id'], 'groupId' => $aArgs['groupId'], 'basketId' => $aArgs['basketId']]); @@ -789,9 +849,8 @@ class UserController } return $response->withJson([ - 'userBaskets' => BasketModel::getRegroupedBasketsByUserId(['userId' => $_SESSION['user']['UserId']]) + 'userBaskets' => BasketModel::getRegroupedBasketsByUserId(['userId' => $GLOBALS['userId']]) ]); - } private function hasUsersRights(array $aArgs) @@ -811,7 +870,7 @@ class UserController $error['status'] = 403; $error['error'] = 'Service forbidden'; } - if ($_SESSION['user']['UserId'] != 'superadmin') { + if ($GLOBALS['userId'] != 'superadmin') { $entities = EntityModel::getAllEntitiesByUserId(['userId' => $GLOBALS['userId']]); $users = UserModel::getByEntities([ 'select' => ['users.id'], diff --git a/src/app/user/models/UserBasketPreferenceModel.php b/src/app/user/models/UserBasketPreferenceModel.php new file mode 100644 index 0000000000000000000000000000000000000000..232c186ebc5bc1fa4b70601bf805676ba6f0e3e7 --- /dev/null +++ b/src/app/user/models/UserBasketPreferenceModel.php @@ -0,0 +1,19 @@ +<?php + +/** + * Copyright Maarch since 2008 under licence GPLv3. + * See LICENCE.txt file at the root folder for more details. + * This file is part of Maarch software. + * + */ + +/** + * @brief User Basket Preference Model + * @author dev@maarch.org + */ + +namespace User\models; + +class UserBasketPreferenceModel extends UserBasketPreferenceModelAbstract +{ +} diff --git a/src/app/user/models/UserBasketPreferenceModelAbstract.php b/src/app/user/models/UserBasketPreferenceModelAbstract.php new file mode 100644 index 0000000000000000000000000000000000000000..82081817e5e0a2cc4d46b4ed98b910a68c0ceb43 --- /dev/null +++ b/src/app/user/models/UserBasketPreferenceModelAbstract.php @@ -0,0 +1,69 @@ +<?php + +/** + * Copyright Maarch since 2008 under licence GPLv3. + * See LICENCE.txt file at the root folder for more details. + * This file is part of Maarch software. + * + */ + +/** + * @brief User Basket Preference Model Abstract + * @author dev@maarch.org + */ + +namespace User\models; + +use SrcCore\models\ValidatorModel; +use SrcCore\models\DatabaseModel; + +class UserBasketPreferenceModelAbstract +{ + public static function get(array $aArgs = []) + { + ValidatorModel::arrayType($aArgs, ['select', 'where', 'data']); + + $aBasketPreferences = DatabaseModel::select([ + 'select' => empty($aArgs['select']) ? ['*'] : $aArgs['select'], + 'table' => ['users_baskets_preferences'], + 'where' => $aArgs['where'], + 'data' => $aArgs['data'] + ]); + + return $aBasketPreferences; + } + + public static function create(array $aArgs) + { + ValidatorModel::notEmpty($aArgs, ['userSerialId', 'groupSerialId', 'basketId', 'display']); + ValidatorModel::stringType($aArgs, ['basketId', 'display', 'color']); + ValidatorModel::intVal($aArgs, ['userSerialId', 'groupSerialId']); + + DatabaseModel::insert([ + 'table' => 'users_baskets_preferences', + 'columnsValues' => [ + 'user_serial_id' => $aArgs['userSerialId'], + 'group_serial_id' => $aArgs['groupSerialId'], + 'basket_id' => $aArgs['basketId'], + 'display' => $aArgs['display'], + 'color' => $aArgs['color'] + ] + ]); + + return true; + } + + public static function delete(array $aArgs) + { + ValidatorModel::notEmpty($aArgs, ['where', 'data']); + ValidatorModel::arrayType($aArgs, ['where', 'data']); + + DatabaseModel::delete([ + 'table' => 'users_baskets_preferences', + 'where' => $aArgs['where'], + 'data' => $aArgs['data'] + ]); + + return true; + } +}