diff --git a/rest/index.php b/rest/index.php index d888c6b65d441edf122f04760733f34d1752e4bb..92e997d1a40f6d02a6c4dda8cac1fd8705d6e7b8 100755 --- a/rest/index.php +++ b/rest/index.php @@ -281,9 +281,6 @@ $app->get('/links/resId/{resId}', \Link\controllers\LinkController::class . ':ge //Listinstance $app->get('/listinstance/{id}', \Entity\controllers\ListInstanceController::class . ':getById'); -$app->get('/resources/{resId}/listInstance', \Entity\controllers\ListInstanceController::class . ':getByResId'); -$app->get('/res/{resId}/visaCircuit', \Entity\controllers\ListInstanceController::class . ':getVisaCircuitByResId'); -$app->get('/res/{resId}/avisCircuit', \Entity\controllers\ListInstanceController::class . ':getAvisCircuitByResId'); $app->put('/listinstances', \Entity\controllers\ListInstanceController::class . ':update'); //ListTemplates @@ -344,6 +341,9 @@ $app->get('/resources/{resId}/contacts', \Contact\controllers\ContactController: $app->get('/resources/{resId}/emails', \Email\controllers\EmailController::class . ':getByResId'); $app->get('/resources/{resId}/notes', \Note\controllers\NoteController::class . ':getByResId'); $app->get('/resources/{resId}/templates', \Template\controllers\TemplateController::class . ':getByResId'); +$app->get('/resources/{resId}/listInstance', \Entity\controllers\ListInstanceController::class . ':getByResId'); +$app->get('/resources/{resId}/visaCircuit', \Entity\controllers\ListInstanceController::class . ':getVisaCircuitByResId'); +$app->get('/resources/{resId}/opinionCircuit', \Entity\controllers\ListInstanceController::class . ':getOpinionCircuitByResId'); $app->get('/res/{resId}/acknowledgementReceipt/{id}', \AcknowledgementReceipt\controllers\AcknowledgementReceiptController::class . ':getAcknowledgementReceipt'); $app->put('/res/resource/status', \Resource\controllers\ResController::class . ':updateStatus'); $app->post('/res/list', \Resource\controllers\ResController::class . ':getList'); @@ -458,6 +458,7 @@ $app->put('/versionsUpdate', \VersionUpdate\controllers\VersionUpdateController: //CurrentUser $app->get('/currentUser/profile', \User\controllers\UserController::class . ':getProfile'); $app->put('/currentUser/profile', \User\controllers\UserController::class . ':updateProfile'); +$app->put('/currentUser/profile/preferences', \User\controllers\UserController::class . ':updateCurrentUserPreferences'); $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'); diff --git a/src/app/entity/controllers/ListInstanceController.php b/src/app/entity/controllers/ListInstanceController.php index 6c2610591ecdb06421debcfe8b29a4c6edaa406d..549e737a689eb74c31114f86dd8ff1a737e5ba17 100755 --- a/src/app/entity/controllers/ListInstanceController.php +++ b/src/app/entity/controllers/ListInstanceController.php @@ -62,6 +62,7 @@ class ListInstanceController if (!Validator::intVal()->validate($aArgs['resId']) || !ResController::hasRightByResId(['resId' => [$aArgs['resId']], 'userId' => $GLOBALS['id']])) { return $response->withStatus(403)->withJson(['errors' => 'Document out of perimeter']); } + $listInstances = ListInstanceModel::getVisaCircuitByResId(['select' => ['listinstance_id', 'sequence', 'item_id', 'item_type', 'firstname as item_firstname', 'lastname as item_lastname', 'entity_label as item_entity', 'viewed', 'process_date', 'process_comment', 'signatory', 'requested_signature'], 'id' => $aArgs['resId']]); foreach ($listInstances as $key => $value) { $listInstances[$key]['labelToDisplay'] = $listInstances[$key]['item_firstname'].' '.$listInstances[$key]['item_lastname']; @@ -70,11 +71,12 @@ class ListInstanceController return $response->withJson($listInstances); } - public function getAvisCircuitByResId(Request $request, Response $response, array $aArgs) + public function getOpinionCircuitByResId(Request $request, Response $response, array $aArgs) { if (!Validator::intVal()->validate($aArgs['resId']) || !ResController::hasRightByResId(['resId' => [$aArgs['resId']], 'userId' => $GLOBALS['id']])) { return $response->withStatus(403)->withJson(['errors' => 'Document out of perimeter']); } + $listInstances = ListInstanceModel::getAvisCircuitByResId(['select' => ['listinstance_id', 'sequence', 'item_id', 'item_type', 'firstname as item_firstname', 'lastname as item_lastname', 'entity_label as item_entity', 'viewed', 'process_date', 'process_comment'], 'id' => $aArgs['resId']]); foreach ($listInstances as $key => $value) { $listInstances[$key]['labelToDisplay'] = $listInstances[$key]['item_firstname'].' '.$listInstances[$key]['item_lastname']; diff --git a/src/app/home/controllers/HomeController.php b/src/app/home/controllers/HomeController.php index f3242a446b69323d2e2d1ab1cacb69bde27a68ad..3197de680d0d8fb0948b6e4f2f452ded9c4b3980 100755 --- a/src/app/home/controllers/HomeController.php +++ b/src/app/home/controllers/HomeController.php @@ -41,7 +41,11 @@ class HomeController $copyGroups = $groups; foreach ($copyGroups as $group) { $key = array_search($group['id'], $preferences['homeGroups']); - $groups[$key] = $group; + if ($key === false) { + $groups[] = $group; + } else { + $groups[$key] = $group; + } } $groups = array_values($groups); } diff --git a/src/app/user/controllers/UserController.php b/src/app/user/controllers/UserController.php index 785948a52ac8e188bab71f4a917b67a20816032f..fd7f420466efe60f39b23f20149943969e954fd7 100755 --- a/src/app/user/controllers/UserController.php +++ b/src/app/user/controllers/UserController.php @@ -540,13 +540,6 @@ class UserController if (!in_array($body['preferences']['documentEdition'], DocumentEditorController::DOCUMENT_EDITION_METHODS)) { return $response->withStatus(400)->withJson(['errors' => 'Body preferences[documentEdition] is not allowed']); } - if (!empty($body['preferences']['homeGroups'])) { - $groups = UserGroupModel::get(['select' => ['group_id'], 'where' => ['user_id = ?'], 'data' => [$GLOBALS['id']]]); - $groups = array_column($groups, 'group_id'); - if (!empty(array_diff($body['preferences']['homeGroups'], $groups))) { - return $response->withStatus(400)->withJson(['errors' => 'Body preferences[homeGroups] is not filled with all user\'s groups']); - } - } UserModel::update([ 'set' => [ @@ -564,6 +557,39 @@ class UserController return $response->withStatus(204); } + public function updateCurrentUserPreferences(Request $request, Response $response) + { + $body = $request->getParsedBody(); + + $user = UserModel::getById(['id' => $GLOBALS['id'], 'select' => ['preferences']]); + $preferences = json_decode($user['preferences'], true); + + if (!empty($body['documentEdition'])) { + if (!in_array($body['documentEdition'], DocumentEditorController::DOCUMENT_EDITION_METHODS)) { + return $response->withStatus(400)->withJson(['errors' => 'Body preferences[documentEdition] is not allowed']); + } + $preferences['documentEdition'] = $body['documentEdition']; + } + if (!empty($body['homeGroups'])) { + $groups = UserGroupModel::get(['select' => ['group_id'], 'where' => ['user_id = ?'], 'data' => [$GLOBALS['id']]]); + $groups = array_column($groups, 'group_id'); + if (!empty(array_diff($body['homeGroups'], $groups))) { + return $response->withStatus(400)->withJson(['errors' => 'Body homeGroups is not filled with all user\'s groups']); + } + $preferences['homeGroups'] = $body['homeGroups']; + } + + UserModel::update([ + 'set' => [ + 'preferences' => json_encode($preferences) + ], + 'where' => ['id = ?'], + 'data' => [$GLOBALS['id']] + ]); + + return $response->withStatus(204); + } + public function updatePassword(Request $request, Response $response, array $aArgs) { $error = $this->hasUsersRights(['id' => $aArgs['id'], 'himself' => true]); diff --git a/src/frontend/app/avis/avis-workflow.component.ts b/src/frontend/app/avis/avis-workflow.component.ts index 56651008c049298391fafb06af6421305a756db6..043b1566a1c3c46bba2cd97b0ab301e41e552781 100644 --- a/src/frontend/app/avis/avis-workflow.component.ts +++ b/src/frontend/app/avis/avis-workflow.component.ts @@ -88,7 +88,7 @@ export class AvisWorkflowComponent implements OnInit { loadWorkflow(resId: number) { this.loading = true; this.avisWorkflow.items = []; - this.http.get("../../rest/res/" + resId + "/avisCircuit") + this.http.get("../../rest/resources/" + resId + "/opinionCircuit") .subscribe((data: any) => { data.forEach((element:any) => { this.avisWorkflow.items.push(element); @@ -106,4 +106,4 @@ export class AvisWorkflowComponent implements OnInit { getAvisCount() { return this.avisWorkflow.items.length; } -} \ No newline at end of file +} diff --git a/src/frontend/app/visa/visa-workflow.component.ts b/src/frontend/app/visa/visa-workflow.component.ts index 87cfb52d698f58a906a0e0b1dca958fbda68f8e4..d77621146f8715b4af220ae6528d22c2410fc9d4 100644 --- a/src/frontend/app/visa/visa-workflow.component.ts +++ b/src/frontend/app/visa/visa-workflow.component.ts @@ -75,7 +75,7 @@ export class VisaWorkflowComponent implements OnInit { loadWorkflow(resId: number) { this.loading = true; this.visaWorkflow.items = []; - this.http.get("../../rest/res/" + resId + "/visaCircuit") + this.http.get("../../rest/resources/" + resId + "/visaCircuit") .subscribe((data: any) => { data.forEach((element: any) => { this.visaWorkflow.items.push(element); @@ -128,4 +128,4 @@ export class VisaWorkflowComponent implements OnInit { this.notify.handleErrors(err); }); } -} \ No newline at end of file +} diff --git a/test/unitTests/app/user/UserControllerTest.php b/test/unitTests/app/user/UserControllerTest.php index 4e45719c1e5b2c7b08c518f4d00d7c4846c25829..4afe896ed0ea34a6e1f166ef9c1d45b2d5cd42f1 100755 --- a/test/unitTests/app/user/UserControllerTest.php +++ b/test/unitTests/app/user/UserControllerTest.php @@ -629,7 +629,7 @@ class UserControllerTest extends TestCase $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'DELETE']); $request = \Slim\Http\Request::createFromEnvironment($environment); $response = $userController->delete($request, new \Slim\Http\Response(), ['id' => self::$id]); - $responseBody = json_decode((string)$response->getBody()); + $this->assertSame(204, $response->getStatusCode()); // READ $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']); @@ -781,7 +781,7 @@ class UserControllerTest extends TestCase $this->assertSame(400, $response->getStatusCode()); $responseBody = json_decode((string)$response->getBody(), true); - $this->assertSame('Body preferences[homeGroups] is not filled with all user\'s groups', $responseBody->errors); + $this->assertSame('Body preferences[homeGroups] is not filled with all user\'s groups', $responseBody['errors']); } public function testSetRedirectedBasket()