diff --git a/src/frontend/app/actions/send-alfresco-action/send-alfresco-action.component.ts b/src/frontend/app/actions/send-alfresco-action/send-alfresco-action.component.ts index 7936f4d9eebf2042437d42ba69abe003ffc53c6d..46867214acbeada22038af9c572aec4ab340aa3a 100644 --- a/src/frontend/app/actions/send-alfresco-action/send-alfresco-action.component.ts +++ b/src/frontend/app/actions/send-alfresco-action/send-alfresco-action.component.ts @@ -46,7 +46,7 @@ export class SendAlfrescoActionComponent implements OnInit { async ngOnInit(): Promise<void> { this.loading = true; - // await this.checkAlfresco(); + await this.checkAlfresco(); this.loading = false; this.getRootFolders(); diff --git a/src/frontend/app/administration/alfresco/alfresco-administration.component.html b/src/frontend/app/administration/alfresco/alfresco-administration.component.html index 3ab2ba461b14fec72c1727044dceb8b0cdce667f..e291d463bb0dfcc3da22704f5163b1394b66fd84 100644 --- a/src/frontend/app/administration/alfresco/alfresco-administration.component.html +++ b/src/frontend/app/administration/alfresco/alfresco-administration.component.html @@ -35,8 +35,11 @@ </mat-form-field> <mat-form-field> <input matInput [(ngModel)]="alfresco.account.password" [required]="creationMode" name="password" - id="password" [title]="creationMode ? lang.password : lang.changePassword" type="password" + id="password" [title]="creationMode ? lang.password : lang.changePassword" [type]="hidePassword ? 'password' : 'text'" [placeholder]="creationMode ? lang.password : lang.changePassword"> + <mat-icon color="primary" style="cursor: pointer;" matSuffix + (click)="hidePassword = !hidePassword" class="fa fa-2x" + [ngClass]="[hidePassword ? 'fa-eye-slash' : 'fa-eye']"></mat-icon> </mat-form-field> </div> </div> @@ -44,7 +47,7 @@ <div class="formType-title"> {{lang.rootFolder}} </div> - <div *ngIf="alfresco.account.id !== '' && alfresco.account.password !== '' && functionsService.empty(alfresco.rootFolder) && !alfrescoTreeLoaded" + <!--<div *ngIf="alfresco.account.id !== '' && alfresco.account.password !== '' && functionsService.empty(alfresco.rootFolder) && !alfrescoTreeLoaded" (click)="getAlfrescoFolders()" style="text-align: center;font-weight: bold;opacity: 0.5;width: 100%;"> <div>{{lang.showTreeMsg}}</div> @@ -58,24 +61,23 @@ </div> <div *ngIf="alfrescoTreeLoaded && functionsService.empty(alfresco.rootFolder)" style="width: 100%;"> <app-maaarch-tree *ngIf="entities.length > 0" (afterSelectNode)="alfresco.rootFolder=$event.id" [rawData]="entities"></app-maaarch-tree> - <!--<div id="jstreeAlfresco"></div>--> - </div> - <div *ngIf="!functionsService.empty(alfresco.rootFolder)" style="width: 100%;"> + </div>--> + <!--<div *ngIf="!functionsService.empty(alfresco.rootFolder)" style="width: 100%;"> --> <mat-form-field> <input matInput [(ngModel)]="alfresco.rootFolder" required name="rootFolder" - id="rootFolder" title="Dépôt racine" type="text" placeholder="Dépôt racine" + id="rootFolder" [title]="lang.id" type="text" placeholder="Dépôt racine" > - <button mat-icon-button matSuffix color="warn" + <!--<button mat-icon-button matSuffix color="warn" (click)="alfresco.rootFolder=null"> <mat-icon class="fa fa-trash"></mat-icon> - </button> + </button>--> </mat-form-field> - </div> + <!--</div> --> </div> </div> <div class="col-sm-12 text-center" style="padding:10px;"> <button mat-raised-button type="submit" color="primary" - [disabled]="!alfrescoForm.valid">{{lang.validate}}</button> + [disabled]="!alfrescoForm.valid || !validAccount()">{{lang.validate}}</button> </div> </form> </mat-card> diff --git a/src/frontend/app/administration/alfresco/alfresco-administration.component.ts b/src/frontend/app/administration/alfresco/alfresco-administration.component.ts index 7390831d3d8dc4c180db406453c020c085074f4d..70969bb4fa786bd146575bd0d7616d78969bb466 100644 --- a/src/frontend/app/administration/alfresco/alfresco-administration.component.ts +++ b/src/frontend/app/administration/alfresco/alfresco-administration.component.ts @@ -25,6 +25,7 @@ export class AlfrescoAdministrationComponent implements OnInit { creationMode: boolean = true; entities: any[] = []; + availableEntities: any[] = []; alfresco: any = { id: 0, @@ -37,6 +38,7 @@ export class AlfrescoAdministrationComponent implements OnInit { linkedEntities: [] }; + hidePassword: boolean = true; alfrescoTreeLoaded: boolean = false; constructor( @@ -62,6 +64,7 @@ export class AlfrescoAdministrationComponent implements OnInit { this.creationMode = false; } await this.getEntities(); + await this.getAvailableEntities(); await this.initAccount(); this.loading = false; }); @@ -116,6 +119,21 @@ export class AlfrescoAdministrationComponent implements OnInit { return alfresco; } + getAvailableEntities() { + return new Promise((resolve, reject) => { + this.http.get(`../rest/alfresco/availableEntities`).pipe( + tap((data: any) => { + this.availableEntities = data['availableEntities']; + resolve(true); + }), + catchError((err: any) => { + this.notify.handleSoftErrors(err); + return of(false); + }) + ).subscribe(); + }); + } + getEntities() { return new Promise((resolve, reject) => { this.http.get(`../rest/administration/shippings/new`).pipe( @@ -138,11 +156,10 @@ export class AlfrescoAdministrationComponent implements OnInit { tap((data: any) => { this.entities = data['entities']; - // TO DO : WAIT BACK - const allowedEntities = ['12', '19', '16']; - this.entities.forEach(element => { - if (allowedEntities.indexOf(element.id) === -1) { + if (this.availableEntities.indexOf(+element.id) > -1) { + element.state.disabled = false; + } else { element.state.disabled = true; } }); @@ -171,18 +188,14 @@ export class AlfrescoAdministrationComponent implements OnInit { linkedEntities: data.entities }; - // TO DO : WAIT BACK - const allowedEntities = ['12', '19', '16']; - this.entities.forEach(element => { - element.state.disabled = false; - /*if (allowedEntities.indexOf(element.id) === -1) { + if (this.availableEntities.indexOf(+element.id) > -1) { + element.state.disabled = false; + } else { element.state.disabled = true; - }*/ - console.log(this.alfresco.linkedEntities[0]); - console.log(element.id); - + } if (this.alfresco.linkedEntities.indexOf(+element.id) > -1) { + element.state.disabled = false; element.state.selected = true; } }); @@ -227,42 +240,11 @@ export class AlfrescoAdministrationComponent implements OnInit { }); } - getAlfrescoFolders() { - - // TODO : ROUTE GET FOLDERS ARBO - const folders: any = [{ 'id': '1', 'entity_id': 'VILLE', 'entity_label': 'Ville de Maarch-les-bains', 'parent_id': null, 'parent': '#', 'icon': 'fa fa-building', 'allowed': true, 'state': { 'opened': true }, 'text': 'Ville de Maarch-les-bains' }, { 'id': '2', 'entity_id': 'CAB', 'entity_label': 'Cabinet du Maire', 'parent_id': 1, 'parent': '1', 'icon': 'fa fa-sitemap', 'allowed': true, 'state': { 'opened': true }, 'text': 'Cabinet du Maire' }, { 'id': '3', 'entity_id': 'DGS', 'entity_label': 'Direction Générale des Services', 'parent_id': 1, 'parent': '1', 'icon': 'fa fa-sitemap', 'allowed': true, 'state': { 'opened': true }, 'text': 'Direction Générale des Services' }, { 'id': '4', 'entity_id': 'DGA', 'entity_label': 'Direction Générale Adjointe', 'parent_id': 3, 'parent': '3', 'icon': 'fa fa-sitemap', 'allowed': true, 'state': { 'opened': true }, 'text': 'Direction Générale Adjointe' }, { 'id': '5', 'entity_id': 'PCU', 'entity_label': 'Pôle Culturel', 'parent_id': 4, 'parent': '4', 'icon': 'fa fa-sitemap', 'allowed': true, 'state': { 'opened': true }, 'text': 'Pôle Culturel' }, { 'id': '6', 'entity_id': 'PJS', 'entity_label': 'Pôle Jeunesse et Sport', 'parent_id': 4, 'parent': '4', 'icon': 'fa fa-sitemap', 'allowed': true, 'state': { 'opened': true }, 'text': 'Pôle Jeunesse et Sport' }, { 'id': '7', 'entity_id': 'PE', 'entity_label': 'Petite enfance', 'parent_id': 6, 'parent': '6', 'icon': 'fa fa-sitemap', 'allowed': true, 'state': { 'opened': true }, 'text': 'Petite enfance' }, { 'id': '8', 'entity_id': 'SP', 'entity_label': 'Sport', 'parent_id': 6, 'parent': '6', 'icon': 'fa fa-sitemap', 'allowed': true, 'state': { 'opened': true }, 'text': 'Sport' }, { 'id': '9', 'entity_id': 'PSO', 'entity_label': 'Pôle Social', 'parent_id': 4, 'parent': '4', 'icon': 'fa fa-sitemap', 'allowed': true, 'state': { 'opened': true }, 'text': 'Pôle Social' }, { 'id': '10', 'entity_id': 'PTE', 'entity_label': 'Pôle Technique', 'parent_id': 4, 'parent': '4', 'icon': 'fa fa-sitemap', 'allowed': true, 'state': { 'opened': true }, 'text': 'Pôle Technique' }, { 'id': '11', 'entity_id': 'DRH', 'entity_label': 'Direction des Ressources Humaines', 'parent_id': 3, 'parent': '3', 'icon': 'fa fa-sitemap', 'allowed': true, 'state': { 'opened': true }, 'text': 'Direction des Ressources Humaines' }, { 'id': '12', 'entity_id': 'DSG', 'entity_label': 'Secrétariat Général', 'parent_id': 3, 'parent': '3', 'icon': 'fa fa-sitemap', 'allowed': true, 'state': { 'opened': true }, 'text': 'Secrétariat Général' }, { 'id': '14', 'entity_id': 'COR', 'entity_label': 'Correspondants Archive', 'parent_id': 13, 'parent': '13', 'icon': 'fa fa-sitemap', 'allowed': true, 'state': { 'opened': true }, 'text': 'Correspondants Archive' }, { 'id': '13', 'entity_id': 'COU', 'entity_label': 'Service Courrier', 'parent_id': 12, 'parent': '12', 'icon': 'fa fa-sitemap', 'allowed': true, 'state': { 'opened': true }, 'text': 'Service Courrier' }, { 'id': '15', 'entity_id': 'PSF', 'entity_label': 'Pôle des Services Fonctionnels', 'parent_id': 12, 'parent': '12', 'icon': 'fa fa-sitemap', 'allowed': true, 'state': { 'opened': true }, 'text': 'Pôle des Services Fonctionnels' }, { 'id': '16', 'entity_id': 'DSI', 'entity_label': 'Direction des Systèmes d\'Information', 'parent_id': 3, 'parent': '3', 'icon': 'fa fa-sitemap', 'allowed': true, 'state': { 'opened': true }, 'text': 'Direction des Systèmes d\'Information' }, { 'id': '17', 'entity_id': 'FIN', 'entity_label': 'Direction des Finances', 'parent_id': 3, 'parent': '3', 'icon': 'fa fa-sitemap', 'allowed': true, 'state': { 'opened': true }, 'text': 'Direction des Finances' }, { 'id': '18', 'entity_id': 'PJU', 'entity_label': 'Pôle Juridique', 'parent_id': 17, 'parent': '17', 'icon': 'fa fa-sitemap', 'allowed': true, 'state': { 'opened': true }, 'text': 'Pôle Juridique' }, { 'id': '19', 'entity_id': 'ELUS', 'entity_label': 'Ensemble des élus', 'parent_id': 1, 'parent': '1', 'icon': 'fa fa-sitemap', 'allowed': true, 'state': { 'opened': true }, 'text': 'Ensemble des élus' }, { 'id': '20', 'entity_id': 'CCAS', 'entity_label': 'Centre Communal d\'Action Sociale', 'parent_id': null, 'parent': '#', 'icon': 'fa fa-building', 'allowed': true, 'state': { 'opened': true }, 'text': 'Centre Communal d\'Action Sociale' }]; - - this.alfrescoTreeLoaded = true; - setTimeout(() => { - this.initAlfrescoTree(folders); - }, 0); - - } - - initAlfrescoTree(folders: any) { - $('#jstreeAlfresco') - .on('select_node.jstree', (e: any, data: any) => { - this.alfresco.rootFolder = data.node.id; - this.alfrescoTreeLoaded = false; - }).on('deselect_node.jstree', (e: any, data: any) => { - // this.shipping.entities = data.selected; - }) - .jstree({ - 'checkbox': { - 'deselect_all': true, - 'three_state': false // no cascade selection - }, - 'core': { - force_text: true, - 'themes': { - 'name': 'proton', - 'responsive': true - }, - 'multiple': false, - 'data': folders - }, - 'plugins': ['checkbox', 'search', 'sort'] - }); + validAccount() { + if (this.functionsService.empty(this.alfresco.rootFolder) || this.alfresco.linkedEntities.length === 0) { + return false; + } else { + return true; + } } - } diff --git a/src/frontend/app/administration/alfresco/alfresco-list-administration.component.html b/src/frontend/app/administration/alfresco/alfresco-list-administration.component.html index c2c267e4bfb3b8399b7eda7d9e74a149f8500206..57f8c2fed3a09d7e30437eedaa2df4b4d5d02d01 100644 --- a/src/frontend/app/administration/alfresco/alfresco-list-administration.component.html +++ b/src/frontend/app/administration/alfresco/alfresco-list-administration.component.html @@ -1,14 +1,5 @@ <mat-sidenav-container autosize class="maarch-container"> <ng-template #adminMenuTemplate> - <mat-list> - <a mat-list-item> - <mat-form-field style="padding-top: 10px;"> - <mat-label>Url API Alfresco</mat-label> - <input matInput required name="accountId" [(ngModel)]="alfrescoUrl" - id="accountId" [title]="alfrescoUrl" type="text" placeholder="https://alfresco/api/" (blur)="saveUrl()"> - </mat-form-field> - </a> - </mat-list> <mat-nav-list> <h3 mat-subheader>{{lang.actions}}</h3> <a mat-list-item routerLink="/administration/alfresco/new"> @@ -39,6 +30,13 @@ </div> <mat-card *ngIf="!loading" class="card-app-content"> <div class="row"> + <div class="col-md-12"> + <mat-form-field appearance="outline"> + <mat-label>{{lang.alfrescoAPI}}</mat-label> + <input matInput required name="accountId" [(ngModel)]="alfrescoUrl" + id="accountId" [title]="alfrescoUrl" type="text" placeholder="https://alfresco/api/" (blur)="saveUrl()"> + </mat-form-field> + </div> <div class="col-md-6 col-xs-6"> <mat-form-field> <input matInput (keyup)="applyFilter($event.target.value)" @@ -58,14 +56,16 @@ {{element.label}} </mat-cell> </ng-container> <ng-container matColumnDef="entitiesLabel"> - <mat-header-cell *matHeaderCellDef mat-sort-header>{{lang.linkedEntities}}</mat-header-cell> - <mat-cell *matCellDef="let element"> - <span class="label" *ngFor="let entity of element.entitiesLabel">{{entity}}</span> + <mat-header-cell *matHeaderCellDef mat-sort-header style="flex: 2">{{lang.linkedEntities}}</mat-header-cell> + <mat-cell *matCellDef="let element" style="flex: 2"> + <div> + <span class="label" *ngFor="let entity of element.entitiesLabel">{{entity}}</span> + </div> </mat-cell> </ng-container> <ng-container matColumnDef="actions"> - <mat-header-cell *matHeaderCellDef></mat-header-cell> - <mat-cell *matCellDef="let element" style="justify-content: flex-end;"> + <mat-header-cell *matHeaderCellDef style="flex:none"></mat-header-cell> + <mat-cell *matCellDef="let element" style="flex:none;justify-content: flex-end;"> <button mat-icon-button color="warn" matTooltip="{{lang.delete}}" (click)="$event.stopPropagation();deleteAccount(element.id)"> <mat-icon class="fa fa-trash-alt fa-2x" aria-hidden="true"></mat-icon> diff --git a/src/frontend/app/administration/alfresco/alfresco-list-administration.component.scss b/src/frontend/app/administration/alfresco/alfresco-list-administration.component.scss index 09e356bf6ca11e0667611f024807f67df16c48a3..a4cc81132b2e94eaa0fa52207e172c40e084cefb 100644 --- a/src/frontend/app/administration/alfresco/alfresco-list-administration.component.scss +++ b/src/frontend/app/administration/alfresco/alfresco-list-administration.component.scss @@ -1,6 +1,7 @@ @import '../../../css/vars.scss'; .label { + white-space: break-spaces; background: $primary; margin: 5px; } \ No newline at end of file diff --git a/src/frontend/lang/lang-en.ts b/src/frontend/lang/lang-en.ts index 54d16c36215e6c4c4d9660ad449f7cdf9c6f0dfa..425426a464f21bac554c038400653d3d776a0a7c 100755 --- a/src/frontend/lang/lang-en.ts +++ b/src/frontend/lang/lang-en.ts @@ -1688,4 +1688,5 @@ export const LANG_EN = { "alfrescoAccount": "Alfresco account", "rootFolder": "Dossier racine", "chooseEntityAssociationAccount": "Choose entities who will be able to use this account", + "alfrescoAPI": "API Alfresco address", }; diff --git a/src/frontend/lang/lang-fr.ts b/src/frontend/lang/lang-fr.ts index 43cb79faaeadda806b884f75dd767dcc66910bda..34b7cb375be107e8f3943cb6324e6ecf90ac8a5b 100755 --- a/src/frontend/lang/lang-fr.ts +++ b/src/frontend/lang/lang-fr.ts @@ -1690,4 +1690,5 @@ export const LANG_FR = { "alfrescoAccount": "Compte Alfresco", "rootFolder": "Dépôt racine", "chooseEntityAssociationAccount": "Attribuer le compte au(x) service(s)", + "alfrescoAPI": "Adresse de l'API Alfresco", }; diff --git a/src/frontend/lang/lang-nl.ts b/src/frontend/lang/lang-nl.ts index 1f1505bfc50d28c23b9c2bd393f03a786df4bb8a..ac4dd4f8932877b47b5dc646aeb9cbbda0976c86 100755 --- a/src/frontend/lang/lang-nl.ts +++ b/src/frontend/lang/lang-nl.ts @@ -1672,4 +1672,5 @@ export const LANG_NL = { "alfrescoAccount": "Alfresco account", //_TO_TRANSLATE "rootFolder": "Dossier racine", //_TO_TRANSLATE "chooseEntityAssociationAccount": "Choose entities who will be able to use this account", //_TO_TRANSLATE + "alfrescoAPI": "API Alfresco address", //_TO_TRANSLATE };