From b719dbab050ceb9c848cfe58206bff5b4aabc897 Mon Sep 17 00:00:00 2001 From: "florian.azizian" <florian.azizian@maarch.org> Date: Wed, 22 Jan 2020 15:18:14 +0100 Subject: [PATCH] FEAT #12135 TIME 1:30 Add filter button for webservice accounts --- src/app/user/controllers/UserController.php | 12 ++--- .../user/users-administration.component.html | 4 ++ .../user/users-administration.component.scss | 15 +++++- .../user/users-administration.component.ts | 53 ++++++++++++------- src/frontend/lang/lang-en.ts | 1 + src/frontend/lang/lang-fr.ts | 1 + src/frontend/lang/lang-nl.ts | 1 + .../unitTests/app/user/UserControllerTest.php | 12 ++++- 8 files changed, 69 insertions(+), 30 deletions(-) diff --git a/src/app/user/controllers/UserController.php b/src/app/user/controllers/UserController.php index 0023fdb9be8..0585f9c5046 100755 --- a/src/app/user/controllers/UserController.php +++ b/src/app/user/controllers/UserController.php @@ -65,7 +65,7 @@ class UserController if ($GLOBALS['userId'] == 'superadmin') { $users = UserModel::get([ - 'select' => ['id', 'user_id', 'firstname', 'lastname', 'status', 'mail'], + 'select' => ['id', 'user_id', 'firstname', 'lastname', 'status', 'mail', 'loginmode'], 'where' => ['user_id != ?', 'status != ?'], 'data' => ['superadmin', 'DEL'] ]); @@ -74,20 +74,15 @@ class UserController $users = []; if (!empty($entities)) { $users = UserEntityModel::getWithUsers([ - 'select' => ['DISTINCT users.id', 'users.user_id', 'firstname', 'lastname', 'status', 'mail'], + 'select' => ['DISTINCT users.id', 'users.user_id', 'firstname', 'lastname', 'status', 'mail', 'loginmode'], 'where' => ['users_entities.entity_id in (?)', 'status != ?'], 'data' => [$entities, 'DEL'] ]); } - $usersNoEntities = UserEntityModel::getUsersWithoutEntities(['select' => ['id', 'users.user_id', 'firstname', 'lastname', 'status', 'mail']]); + $usersNoEntities = UserEntityModel::getUsersWithoutEntities(['select' => ['id', 'users.user_id', 'firstname', 'lastname', 'status', 'mail', 'loginmode']]); $users = array_merge($users, $usersNoEntities); } - $usersIds = []; - foreach ($users as $value) { - $usersIds[] = $value['user_id']; - } - $quota = []; $userQuota = ParameterModel::getById(['id' => 'user_quota', 'select' => ['param_value_int']]); if (!empty($userQuota['param_value_int'])) { @@ -1310,7 +1305,6 @@ class UserController } if ($data['mode'] == 'reaffect') { - $listInstances = ListInstanceModel::getWithConfidentiality(['select' => ['listinstance.res_id'], 'entityId' => $aArgs['entityId'], 'userId' => $user['user_id']]); $resIdsToReplace = []; foreach ($listInstances as $listInstance) { diff --git a/src/frontend/app/administration/user/users-administration.component.html b/src/frontend/app/administration/user/users-administration.component.html index 74f04928485..6fbcd7b8d52 100755 --- a/src/frontend/app/administration/user/users-administration.component.html +++ b/src/frontend/app/administration/user/users-administration.component.html @@ -31,6 +31,10 @@ <div class="col-md-6 col-xs-6"> <mat-form-field> <input matInput (keyup)="applyFilter($event.target.value)" placeholder="{{lang.filterBy}}"> + <mat-button-toggle class="webserviceAccount" matSuffix (click)="$event.stopPropagation();toggleWebserviceAccount()" + [checked]="this.withWebserviceAccount" title="{{lang.displayWebserviceAccount}}" > + <mat-icon fontSet="fas" fontIcon="fa-user-shield fa-2x" style="margin-left: -2px; margin-top: -4px;"></mat-icon> + </mat-button-toggle> </mat-form-field> </div> <div class="col-md-6 col-xs-6"> diff --git a/src/frontend/app/administration/user/users-administration.component.scss b/src/frontend/app/administration/user/users-administration.component.scss index 03c8894cde0..fe089dd18f6 100644 --- a/src/frontend/app/administration/user/users-administration.component.scss +++ b/src/frontend/app/administration/user/users-administration.component.scss @@ -11,4 +11,17 @@ button:disabled{ .statusUserLabelPrimary { color : $primary; -} \ No newline at end of file +} + +.webserviceAccount { + color: #666; + width: 37px; + height: 37px; + font-size: x-small; + border-radius: 18px !important; +} + +.mat-button-toggle-checked { + background-color: #F99830 !important; + color: white; +} diff --git a/src/frontend/app/administration/user/users-administration.component.ts b/src/frontend/app/administration/user/users-administration.component.ts index 557946e2e4c..6da9821f8e1 100755 --- a/src/frontend/app/administration/user/users-administration.component.ts +++ b/src/frontend/app/administration/user/users-administration.component.ts @@ -38,6 +38,9 @@ export class UsersAdministrationComponent implements OnInit { listinstances : any[] = []; quota : any = {}; user : any = {}; + withWebserviceAccount : boolean = false; + webserviceAccounts : any[] = []; + noWebserviceAccounts : any[] = []; dataSource = new MatTableDataSource(this.data); displayedColumns = ['id', 'user_id', 'lastname', 'firstname', 'status', 'mail', 'actions']; @@ -72,25 +75,35 @@ export class UsersAdministrationComponent implements OnInit { this.http.get('../../rest/users') .subscribe((data: any) => { this.data = data['users']; - this.data.forEach(element => { - element.statusLabel = this.lang['user'+element.status] + this.data.forEach(element => { + element.statusLabel = this.lang['user'+element.status]; + if (element.loginmode == 'restMode') { + this.webserviceAccounts.push(element); + } else { + this.noWebserviceAccounts.push(element); + } }); + this.data = this.noWebserviceAccounts; this.quota = data['quota']; if (this.quota.actives > this.quota.userQuota) { this.notify.error(this.lang.quotaExceeded); } this.loading = false; - setTimeout(() => { - this.dataSource = new MatTableDataSource(this.data); - this.dataSource.paginator = this.paginator; - this.dataSource.sort = this.sort; - }, 0); + this.setDatasource(); }, () => { location.href = "index.php"; }); } + setDatasource() { + setTimeout(() => { + this.dataSource = new MatTableDataSource(this.data); + this.dataSource.paginator = this.paginator; + this.dataSource.sort = this.sort; + }, 0); + } + activateUser(user: any) { let r = confirm(this.lang.confirmAction + ' ' + this.lang.authorize + ' « ' + user.user_id + ' »'); @@ -190,9 +203,7 @@ export class UsersAdministrationComponent implements OnInit { this.data.splice(Number(i), 1); } } - this.dataSource = new MatTableDataSource(this.data); - this.dataSource.paginator = this.paginator; - this.dataSource.sort = this.sort; + this.setDatasource(); if (this.quota.userQuota && user.status != 'SPD') { this.quota.actives--; @@ -244,9 +255,7 @@ export class UsersAdministrationComponent implements OnInit { this.data.splice(Number(i), 1); } } - this.dataSource = new MatTableDataSource(this.data); - this.dataSource.paginator = this.paginator; - this.dataSource.sort = this.sort; + this.setDatasource(); if (this.quota.userQuota && user.status == 'OK') { this.quota.actives--; @@ -297,9 +306,7 @@ export class UsersAdministrationComponent implements OnInit { this.data.splice(Number(i), 1); } } - this.dataSource = new MatTableDataSource(this.data); - this.dataSource.paginator = this.paginator; - this.dataSource.sort = this.sort; + this.setDatasource(); if (this.quota.userQuota && user.status == 'OK') { this.quota.actives--; @@ -346,9 +353,7 @@ export class UsersAdministrationComponent implements OnInit { this.data.splice(Number(i), 1); } } - this.dataSource = new MatTableDataSource(this.data); - this.dataSource.paginator = this.paginator; - this.dataSource.sort = this.sort; + this.setDatasource(); if (this.quota.userQuota && user.status == 'OK') { this.quota.actives--; @@ -390,6 +395,16 @@ export class UsersAdministrationComponent implements OnInit { }); } + toggleWebserviceAccount () { + this.withWebserviceAccount = !this.withWebserviceAccount; + if (this.withWebserviceAccount) { + this.data = this.webserviceAccounts; + } else { + this.data = this.noWebserviceAccounts; + } + this.setDatasource(); + } + } @Component({ templateUrl: "users-administration-redirect-modal.component.html", diff --git a/src/frontend/lang/lang-en.ts b/src/frontend/lang/lang-en.ts index c4721ddfdff..514869bfe42 100755 --- a/src/frontend/lang/lang-en.ts +++ b/src/frontend/lang/lang-en.ts @@ -1435,4 +1435,5 @@ export const LANG_EN = { "validateBy": "Validate by", "validateAvisParallel": "Your are validating an opinion request", "validateAvisParallelSingle": "Your are validating an opinion request of", + "displayWebserviceAccount": "Display webservice account", }; diff --git a/src/frontend/lang/lang-fr.ts b/src/frontend/lang/lang-fr.ts index 11006596cb7..79d0f0d6d3c 100755 --- a/src/frontend/lang/lang-fr.ts +++ b/src/frontend/lang/lang-fr.ts @@ -1475,4 +1475,5 @@ export const LANG_FR = { "validateBy": "Validé par", "validateAvisParallel": "Vous allez valider des demandes d'avis", "validateAvisParallelSingle": "Vous allez valider la demande d'avis de", + "displayWebserviceAccount": "Afficher les comptes de webservice", }; diff --git a/src/frontend/lang/lang-nl.ts b/src/frontend/lang/lang-nl.ts index f2907e0ca60..f2ccb637f88 100755 --- a/src/frontend/lang/lang-nl.ts +++ b/src/frontend/lang/lang-nl.ts @@ -1460,4 +1460,5 @@ export const LANG_NL = { "validateBy": "Validate by", //_TO_TRANSLATE "validateAvisParallel": "Your are validating an opinion request", //_TO_TRANSLATE "validateAvisParallelSingle": "Your are validating an opinion request of", //_TO_TRANSLATE + "displayWebserviceAccount": "Display webservice account", //_TO_TRANSLATE }; diff --git a/test/unitTests/app/user/UserControllerTest.php b/test/unitTests/app/user/UserControllerTest.php index bf70378369d..0e85091ef2a 100755 --- a/test/unitTests/app/user/UserControllerTest.php +++ b/test/unitTests/app/user/UserControllerTest.php @@ -27,9 +27,19 @@ class UserControllerTest extends TestCase $response = $userController->get($request, new \Slim\Http\Response()); $responseBody = json_decode((string)$response->getBody()); - $this->assertInternalType('array', $responseBody->users); $this->assertNotEmpty($responseBody->users); + + foreach ($responseBody->users as $value) { + $this->assertNotNull($value->id); + $this->assertInternalType('integer', $value->id); + $this->assertNotNull($value->user_id); + $this->assertNotNull($value->firstname); + $this->assertNotNull($value->lastname); + $this->assertNotNull($value->status); + $this->assertNotNull($value->mail); + $this->assertNotNull($value->loginmode); + } } public function testCreate() -- GitLab