diff --git a/apps/maarch_entreprise/Views/entities-administration.component.html b/apps/maarch_entreprise/Views/entities-administration.component.html index fb034eef5ece68af3739783237d3016828c3a8d4..ce288156312506c23a2a9d1a3a11547fecd35832 100644 --- a/apps/maarch_entreprise/Views/entities-administration.component.html +++ b/apps/maarch_entreprise/Views/entities-administration.component.html @@ -25,7 +25,7 @@ <mat-divider></mat-divider> <mat-nav-list> <h3 mat-subheader>Role(s) supplémentaire(s)</h3> - <ng-container *ngFor="let role of currentEntity.roles; let i = index"> + <ng-container *ngFor="let role of listTemplateRoles"> <a mat-list-item disableRipple="true" *ngIf="role.id != 'dest' && role.id != 'cc'"> <mat-icon color="primary" mat-list-icon style="margin-bottom: 20px;"> <mat-slide-toggle [(ngModel)]="role.available" [checked]="role.available" color="primary" [ngStyle]="{'opacity': role.available ? '' : '0.5'}" (change)="toggleRole(role)" [disabled]="role.id == 'dest'"></mat-slide-toggle> diff --git a/apps/maarch_entreprise/js/angular/app/administration/entities-administration.component.ts b/apps/maarch_entreprise/js/angular/app/administration/entities-administration.component.ts index 76d7f64b61030f235af55d61531c240ec53f30b2..06b49dc8c7120cfda09e1d65ad7e1d224c70e7e1 100644 --- a/apps/maarch_entreprise/js/angular/app/administration/entities-administration.component.ts +++ b/apps/maarch_entreprise/js/angular/app/administration/entities-administration.component.ts @@ -18,35 +18,37 @@ declare var angularGlobals: any; providers: [NotificationService] }) export class EntitiesAdministrationComponent extends AutoCompletePlugin implements OnInit { - mobileQuery: MediaQueryList; - private _mobileQueryListener: () => void; - dialogRef: MatDialogRef<any>; - coreUrl: string; - lang: any = LANG; - isDraggable: boolean = true; - entities: any[] = []; - entityTypeList: any[]; - currentEntity: any = {}; - config: any = {}; + private _mobileQueryListener : () => void; + mobileQuery : MediaQueryList; + dialogRef : MatDialogRef<any>; - loading: boolean = false; - creationMode: boolean = false; - idCircuitVisa: number; + coreUrl : string; + lang : any = LANG; + loading : boolean = false; + + entities : any[] = []; + listTemplateRoles : any[] = []; + entityTypeList : any[] = []; + currentEntity : any = {}; + isDraggable : boolean = true; + creationMode : boolean = false; + idCircuitVisa : number; + config : any = {}; + + dataSource = new MatTableDataSource(this.currentEntity.users); + displayedColumns = ['firstname', 'lastname']; - displayedColumns = ['firstname', 'lastname']; - dataSource = new MatTableDataSource(this.currentEntity.users); - @ViewChild('snav2') sidenav: MatSidenav; + @ViewChild('snav2') sidenav: MatSidenav; @ViewChild(MatPaginator) paginator: MatPaginator; @ViewChild(MatSort) sort: MatSort; applyFilter(filterValue: string) { - filterValue = filterValue.trim(); // Remove whitespace - filterValue = filterValue.toLowerCase(); // MatTableDataSource defaults to lowercase matches + filterValue = filterValue.trim(); + filterValue = filterValue.toLowerCase(); this.dataSource.filter = filterValue; } - constructor(changeDetectorRef: ChangeDetectorRef, media: MediaMatcher, public http: HttpClient, private notify: NotificationService, public dialog: MatDialog) { super(http, ['usersAndEntities', 'visaUsers']); $j("link[href='merged_css.php']").remove(); @@ -69,10 +71,18 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen }, (err) => { this.notify.error(err.error.errors); }); + this.http.get(this.coreUrl + "rest/listTemplates/types/entity_id/roles") + .subscribe((data: any) => { + this.listTemplateRoles = data['roles']; + }, (err) => { + this.notify.error(err.error.errors); + }); this.http.get(this.coreUrl + "rest/entities") .subscribe((data: any) => { this.entities = data['entities']; + this.loading = false; + setTimeout(() => { $j('#jstree').jstree({ "checkbox": { @@ -97,8 +107,8 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen }, "dnd": { is_draggable: function (nodes: any) { - var i = 0, - j = nodes.length; + var i = 0; + var j = nodes.length; for (; i < j; i++) { if (!nodes[i].original.allowed) { return false; @@ -150,7 +160,6 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen $j('#jstree').jstree('select_node', data.data.nodes[0]); }); }, 0); - this.loading = false; }, () => { location.href = "index.php"; }); @@ -179,7 +188,7 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen "title": this.currentEntity.entity_id, "description": this.currentEntity.entity_id, "items": Array() - } + }; var inListModel = false; var newElemListModel: any = {}; @@ -271,9 +280,7 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen "title": this.currentEntity.entity_id, "description": this.currentEntity.entity_id, "items": Array() - } - var itemMode = ''; - + }; var newElemListModel = { "id": '', "item_type": 'user_id', @@ -351,7 +358,7 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen moveEntity() { this.http.put(this.coreUrl + "rest/entities/" + this.currentEntity.entity_id, this.currentEntity) - .subscribe((data: any) => { + .subscribe(() => { this.notify.success(this.lang.entityUpdated); }, (err) => { this.notify.error(err.error.errors); @@ -422,7 +429,6 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen prepareEntityAdd() { this.creationMode = true; this.isDraggable = false; - console.log(this.currentEntity.entity_id); if (this.currentEntity.entity_id) { for (let i = 0; i < this.entities.length; i++) { if (this.entities[i].entity_id == this.currentEntity.entity_id) { @@ -441,10 +447,8 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen } } } - } - updateStatus(entity: any, method: string) { this.http.put(this.coreUrl + "rest/entities/" + entity['entity_id'] + "/status", { "method": method }) .subscribe((data: any) => { @@ -461,7 +465,7 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen "title": this.currentEntity.entity_id, "description": this.currentEntity.entity_id, "items": Array() - } + }; if (role == 'dest' && this.currentEntity.listTemplate.dest.length > 0) { this.currentEntity.listTemplate.dest.forEach((listModel: any) => { @@ -511,7 +515,7 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen "title": this.currentEntity.entity_id, "description": this.currentEntity.entity_id, "items": Array() - } + }; this.currentEntity.visaTemplate.forEach((listModel: any, i: number) => { listModel.sequence = i; if (i == (this.currentEntity.visaTemplate.length - 1)) { @@ -544,7 +548,7 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen "title": this.currentEntity.entity_id, "description": this.currentEntity.entity_id, "items": Array() - } + }; this.currentEntity.roles.forEach((role: any) => { if (role.available == true) { if (this.currentEntity.listTemplate[role.id]) { @@ -577,7 +581,7 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen "title": this.currentEntity.entity_id, "description": this.currentEntity.entity_id, "items": Array() - } + }; this.currentEntity.visaTemplate.forEach((listModel: any, i: number) => { listModel.sequence = i; @@ -603,7 +607,7 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen }); } else { this.http.delete(this.coreUrl + "rest/listTemplates/" + this.idCircuitVisa) - .subscribe((data: any) => { + .subscribe(() => { this.idCircuitVisa = null; this.notify.success(this.lang.entityUpdated); }, (err) => { @@ -613,9 +617,11 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen } toggleRole(role:any) { - this.http.put(this.coreUrl + "rest/listTemplates/types/roles",{"roles":this.currentEntity.roles,"typeId":"entity_id"}) - .subscribe((data: any) => { - this.currentEntity.listTemplate[role.id] = []; + this.http.put(this.coreUrl + "rest/listTemplates/types/entity_id/roles", {"roles" : this.listTemplateRoles}) + .subscribe(() => { + if (this.currentEntity.listTemplate) { + this.currentEntity.listTemplate[role.id] = []; + } this.notify.success(this.lang.entityUpdated); }, (err) => { this.notify.error(err.error.errors); diff --git a/package-lock.json b/package-lock.json index ce7bf8fce6ccf2a9a1e8b7c1bd97337ec5a0c441..920d06d1357dc46b16922a8ef8da7bb030cee3ce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2894,6 +2894,7 @@ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", "dev": true, + "optional": true, "requires": { "nan": "2.9.2", "node-pre-gyp": "0.6.39" @@ -2902,12 +2903,14 @@ "abbrev": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ajv": { "version": "4.11.8", "bundled": true, "dev": true, + "optional": true, "requires": { "co": "4.6.0", "json-stable-stringify": "1.0.1" @@ -2921,12 +2924,14 @@ "aproba": { "version": "1.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "are-we-there-yet": { "version": "1.1.4", "bundled": true, "dev": true, + "optional": true, "requires": { "delegates": "1.0.0", "readable-stream": "2.2.9" @@ -2935,27 +2940,32 @@ "asn1": { "version": "0.2.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "assert-plus": { "version": "0.2.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "asynckit": { "version": "0.4.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aws-sign2": { "version": "0.6.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aws4": { "version": "1.6.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "balanced-match": { "version": "0.4.2", @@ -3004,12 +3014,14 @@ "caseless": { "version": "0.12.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "co": { "version": "4.6.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "code-point-at": { "version": "1.1.0", @@ -3051,6 +3063,7 @@ "version": "1.14.1", "bundled": true, "dev": true, + "optional": true, "requires": { "assert-plus": "1.0.0" }, @@ -3058,7 +3071,8 @@ "assert-plus": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, @@ -3074,7 +3088,8 @@ "deep-extend": { "version": "0.4.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "delayed-stream": { "version": "1.0.0", @@ -3084,12 +3099,14 @@ "delegates": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "detect-libc": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ecc-jsbn": { "version": "0.1.1", @@ -3103,7 +3120,8 @@ "extend": { "version": "3.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "extsprintf": { "version": "1.0.2", @@ -3113,7 +3131,8 @@ "forever-agent": { "version": "0.6.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "form-data": { "version": "2.1.4", @@ -3146,6 +3165,7 @@ "version": "1.0.5", "bundled": true, "dev": true, + "optional": true, "requires": { "fstream": "1.0.11", "inherits": "2.0.3", @@ -3156,6 +3176,7 @@ "version": "2.7.4", "bundled": true, "dev": true, + "optional": true, "requires": { "aproba": "1.1.1", "console-control-strings": "1.1.0", @@ -3171,6 +3192,7 @@ "version": "0.1.7", "bundled": true, "dev": true, + "optional": true, "requires": { "assert-plus": "1.0.0" }, @@ -3178,7 +3200,8 @@ "assert-plus": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, @@ -3203,7 +3226,8 @@ "har-schema": { "version": "1.0.5", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "har-validator": { "version": "4.2.1", @@ -3218,7 +3242,8 @@ "has-unicode": { "version": "2.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "hawk": { "version": "3.1.3", @@ -3240,6 +3265,7 @@ "version": "1.1.1", "bundled": true, "dev": true, + "optional": true, "requires": { "assert-plus": "0.2.0", "jsprim": "1.4.0", @@ -3263,7 +3289,8 @@ "ini": { "version": "1.3.4", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "is-fullwidth-code-point": { "version": "1.0.0", @@ -3276,7 +3303,8 @@ "is-typedarray": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "isarray": { "version": "1.0.0", @@ -3286,7 +3314,8 @@ "isstream": { "version": "0.1.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "jodid25519": { "version": "1.0.2", @@ -3306,12 +3335,14 @@ "json-schema": { "version": "0.2.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "json-stable-stringify": { "version": "1.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "jsonify": "0.0.0" } @@ -3319,17 +3350,20 @@ "json-stringify-safe": { "version": "5.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "jsonify": { "version": "0.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "jsprim": { "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.0.2", @@ -3389,6 +3423,7 @@ "version": "0.6.39", "bundled": true, "dev": true, + "optional": true, "requires": { "detect-libc": "1.0.2", "hawk": "3.1.3", @@ -3417,6 +3452,7 @@ "version": "4.1.0", "bundled": true, "dev": true, + "optional": true, "requires": { "are-we-there-yet": "1.1.4", "console-control-strings": "1.1.0", @@ -3503,6 +3539,7 @@ "version": "1.2.1", "bundled": true, "dev": true, + "optional": true, "requires": { "deep-extend": "0.4.2", "ini": "1.3.4", @@ -3536,6 +3573,7 @@ "version": "2.81.0", "bundled": true, "dev": true, + "optional": true, "requires": { "aws-sign2": "0.6.0", "aws4": "1.6.0", @@ -3604,6 +3642,7 @@ "version": "1.13.0", "bundled": true, "dev": true, + "optional": true, "requires": { "asn1": "0.2.3", "assert-plus": "1.0.0", @@ -3645,7 +3684,8 @@ "stringstream": { "version": "0.0.5", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "strip-ansi": { "version": "3.0.1", @@ -3658,7 +3698,8 @@ "strip-json-comments": { "version": "2.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "tar": { "version": "2.2.1", @@ -3674,6 +3715,7 @@ "version": "3.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "debug": "2.6.8", "fstream": "1.0.11", @@ -3689,6 +3731,7 @@ "version": "2.3.2", "bundled": true, "dev": true, + "optional": true, "requires": { "punycode": "1.4.1" } @@ -3697,6 +3740,7 @@ "version": "0.6.0", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "5.0.1" } @@ -3710,7 +3754,8 @@ "uid-number": { "version": "0.0.6", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "util-deprecate": { "version": "1.0.2", @@ -3720,12 +3765,14 @@ "uuid": { "version": "3.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "verror": { "version": "1.3.6", "bundled": true, "dev": true, + "optional": true, "requires": { "extsprintf": "1.0.2" } @@ -3734,6 +3781,7 @@ "version": "1.1.2", "bundled": true, "dev": true, + "optional": true, "requires": { "string-width": "1.0.2" } diff --git a/rest/index.php b/rest/index.php index efac0cf9752a06fce78debb8ff3e23ffe5e906b3..bd8a2d55f3fcd35595c354dd05213757fe2238e1 100755 --- a/rest/index.php +++ b/rest/index.php @@ -212,7 +212,8 @@ $app->put('/listTemplates/{id}', \Entity\controllers\ListTemplateController::cla $app->delete('/listTemplates/{id}', \Entity\controllers\ListTemplateController::class . ':delete'); $app->get('/listTemplates/entityDest/itemId/{itemId}', \Entity\controllers\ListTemplateController::class . ':getByUserWithEntityDest'); $app->put('/listTemplates/entityDest/itemId/{itemId}', \Entity\controllers\ListTemplateController::class . ':updateByUserWithEntityDest'); -$app->put('/listTemplates/types/roles', \Entity\controllers\ListTemplateController::class . ':updateTypes'); +$app->get('/listTemplates/types/{typeId}/roles', \Entity\controllers\ListTemplateController::class . ':getTypeRoles'); +$app->put('/listTemplates/types/{typeId}/roles', \Entity\controllers\ListTemplateController::class . ':updateTypeRoles'); //Parameters $app->get('/parameters', \Parameter\controllers\ParameterController::class . ':get'); diff --git a/src/app/entity/controllers/ListTemplateController.php b/src/app/entity/controllers/ListTemplateController.php index b43183362be4652e004b3e8bd493fa20f1b59dc5..185e13c69b221f76c8d7b5e0d92dc00725e741ef 100644 --- a/src/app/entity/controllers/ListTemplateController.php +++ b/src/app/entity/controllers/ListTemplateController.php @@ -277,7 +277,44 @@ class ListTemplateController return $response->withJson(['success' => 'success']); } - public function updateTypes(Request $request, Response $response) + public function getTypeRoles(Request $request, Response $response, array $aArgs) + { + if (!ServiceModel::hasService(['id' => 'manage_entities', 'userId' => $GLOBALS['userId'], 'location' => 'entities', 'type' => 'admin'])) { + return $response->withStatus(403)->withJson(['errors' => 'Service forbidden']); + } + + $unneededRoles = []; + if ($aArgs['typeId'] == 'entity_id') { + $unneededRoles = ['visa', 'sign']; + } + $roles = EntityModel::getRoles(); + $listTemplateTypes = ListTemplateModel::getTypes(['select' => ['difflist_type_roles'], 'where' => ['difflist_type_id = ?'], 'data' => [$aArgs['typeId']]]); + $rolesForType = empty($listTemplateTypes[0]['difflist_type_roles']) ? [] : explode(' ', $listTemplateTypes[0]['difflist_type_roles']); + foreach ($roles as $key => $role) { + if (in_array($role['id'], $unneededRoles)) { + unset($roles[$key]); + continue; + } + if (in_array($role['id'], $rolesForType)) { + $roles[$key]['available'] = true; + } else { + $roles[$key]['available'] = false; + } + if ($role['id'] == 'copy') { + $roles[$key]['id'] = 'cc'; + } + + $roles[$key]['usedIn'] = []; + $listTemplates = ListTemplateModel::get(['select' => ['object_id'], 'where' => ['object_type = ?', 'item_mode = ?'], 'data' => [$aArgs['typeId'], $roles[$key]['id']]]); + foreach ($listTemplates as $listTemplate) { + $roles[$key]['usedIn'][] = $listTemplate['object_id']; + } + } + + return $response->withJson(['roles' => array_values($roles)]); + } + + public function updateTypeRoles(Request $request, Response $response, array $aArgs) { if (!ServiceModel::hasService(['id' => 'manage_entities', 'userId' => $GLOBALS['userId'], 'location' => 'entities', 'type' => 'admin'])) { return $response->withStatus(403)->withJson(['errors' => 'Service forbidden']); @@ -285,8 +322,7 @@ class ListTemplateController $data = $request->getParams(); - $check = Validator::stringType()->notEmpty()->validate($data['typeId']); - $check = $check && Validator::arrayType()->notEmpty()->validate($data['roles']); + $check = Validator::arrayType()->notEmpty()->validate($data['roles']); if (!$check) { return $response->withStatus(400)->withJson(['errors' => 'Bad Request']); } @@ -308,17 +344,17 @@ class ListTemplateController ListTemplateModel::updateTypes([ 'set' => ['difflist_type_roles' => $roles], 'where' => ['difflist_type_id = ?'], - 'data' => [$data['typeId']] + 'data' => [$aArgs['typeId']] ]); if (empty($roles)) { ListTemplateModel::delete([ 'where' => ['object_type = ?'], - 'data' => [$data['typeId']] + 'data' => [$aArgs['typeId']] ]); } else { ListTemplateModel::delete([ 'where' => ['object_type = ?', 'item_mode not in (?)'], - 'data' => [$data['typeId'], explode(' ', $roles)] + 'data' => [$aArgs['typeId'], explode(' ', $roles)] ]); }