diff --git a/modules/export_seda/xml/config.xml.default b/modules/export_seda/xml/config.xml.default index b79bdff75ad8d18bb444e537c3efd8ea2580a70c..4e8acc1c528346c14d2442211f41e83bc18c21d7 100755 --- a/modules/export_seda/xml/config.xml.default +++ b/modules/export_seda/xml/config.xml.default @@ -14,7 +14,21 @@ <accessRuleCode>AR039</accessRuleCode> <deleteData>true</deleteData> <certificateSSL></certificateSSL> + <userAgent>service</userAgent> </CONFIG> + <externalSAE> + <id>otherSAE</id> + <retentionRules> + <retentionRule> + <id>id1</id> + <label>label1</label> + </retentionRule> + <retentionRule> + <id>id2</id> + <label>label2</label> + </retentionRule> + </retentionRules> + </externalSAE> <TABLENAME/> <HISTORY> <sedaup>true</sedaup> diff --git a/rest/index.php b/rest/index.php index 2bbadc31f4b114a34cb0283b19699d4f9f932e50..6e21142eb868995f51a3ba01e53ce1deeea0453f 100755 --- a/rest/index.php +++ b/rest/index.php @@ -625,6 +625,7 @@ $app->post('/collaboraOnline/encodedFile', \ContentManagement\controllers\Collab // Archival $app->post('/resourcesList/users/{userId}/groups/{groupId}/baskets/{basketId}/actions/{actionId}/checkSendToRecordManagement', \ExportSeda\controllers\SedaController::class . ':checkSendToRecordManagement'); +$app->get('/archival/retentionRules', \ExportSeda\controllers\SedaController::class . ':getRetentionRules'); // Registered mail $app->get('/registeredMail/sites', \RegisteredMail\controllers\IssuingSiteController::class . ':get'); diff --git a/src/app/external/exportSeda/controllers/SedaController.php b/src/app/external/exportSeda/controllers/SedaController.php index b03d993a9135a1fbae5c4a9f295b9b439bf8dc56..dfddc5fda43d142300ec69aa24f926590d74a20e 100755 --- a/src/app/external/exportSeda/controllers/SedaController.php +++ b/src/app/external/exportSeda/controllers/SedaController.php @@ -19,6 +19,7 @@ use Doctype\models\DoctypeModel; use Email\models\EmailModel; use Entity\models\EntityModel; use Folder\models\FolderModel; +use Group\controllers\PrivilegeController; use Note\models\NoteModel; use Resource\controllers\ResController; use Resource\controllers\ResourceListController; @@ -27,6 +28,7 @@ use Respect\Validation\Validator; use Slim\Http\Request; use Slim\Http\Response; use SrcCore\models\CoreConfigModel; +use SrcCore\models\CurlModel; use User\models\UserModel; class SedaController @@ -182,4 +184,59 @@ class SedaController return $response->withJson($return); } + + public function getRetentionRules(Request $request, Response $response) + { + if (!PrivilegeController::hasPrivilege(['privilegeId' => 'admin_architecture', 'userId' => $GLOBALS['id']])) { + return $response->withStatus(403)->withJson(['errors' => 'Service forbidden']); + } + + $sedaXml = CoreConfigModel::getXmlLoaded(['path' => 'modules/export_seda/xml/config.xml']); + if (empty($sedaXml->CONFIG->sae)) { + return $response->withStatus(400)->withJson(['errors' => 'No SAE found in config.xml (export_seda)']); + } + + $retentionRules = []; + if (strtolower((string)$sedaXml->CONFIG->sae) == 'maarchrm') { + $curlResponse = CurlModel::execSimple([ + 'url' => rtrim((string)$sedaXml->CONFIG->urlSAEService, '/') . '/recordsManagement/retentionRule/Index', + 'method' => 'GET', + 'cookie' => 'LAABS-AUTH=' . urlencode((string)$sedaXml->CONFIG->token), + 'headers' => [ + 'Accept: application/json', + 'Content-Type: application/json', + 'User-Agent: ' . (string)$sedaXml->CONFIG->userAgent + ] + ]); + + if (!empty($curlResponse['errors'])) { + return ['error' => 'Error during processing in getRetentionRules : ' . $curlResponse['errors']]; + } + + $retentionRules[] = [ + 'id' => "", + 'label' => null + ]; + foreach ($curlResponse['response'] as $retentionRule) { + $retentionRules[] = [ + 'id' => $retentionRule['code'], + 'label' => $retentionRule['label'] + ]; + } + } else { + foreach ($sedaXml->externalSAE as $value) { + if ((string)$value->id == (string)$sedaXml->CONFIG->sae) { + foreach ($value->retentionRules->retentionRule as $rule) { + $retentionRules[] = [ + 'id' => (string)$rule->id, + 'label' => (string)$rule->label + ]; + } + break; + } + } + } + + return $response->withJson(['retentionRules' => $retentionRules]); + } } diff --git a/src/core/models/CurlModel.php b/src/core/models/CurlModel.php index 703cd494fccdca9c8236d8abcc8438a5030ad5b6..a46aeb98d31db4562ac4f6c6343f46f3c0b4d2c8 100755 --- a/src/core/models/CurlModel.php +++ b/src/core/models/CurlModel.php @@ -195,7 +195,7 @@ class CurlModel public static function execSimple(array $args) { ValidatorModel::notEmpty($args, ['url', 'method']); - ValidatorModel::stringType($args, ['url', 'method']); + ValidatorModel::stringType($args, ['url', 'method', 'cookie']); ValidatorModel::arrayType($args, ['headers', 'queryParams', 'basicAuth', 'bearerAuth']); ValidatorModel::boolType($args, ['isXml']); @@ -214,6 +214,10 @@ class CurlModel if (!empty($args['bearerAuth'])) { $opts[CURLOPT_HTTPHEADER][] = 'Authorization: Bearer ' . $args['bearerAuth']['token']; } + //Cookie + if (!empty($args['cookie'])) { + $opts[CURLOPT_COOKIE] = $args['cookie']; + } //QueryParams if (!empty($args['queryParams'])) { diff --git a/src/frontend/app/administration/doctype/doctypes-administration.component.html b/src/frontend/app/administration/doctype/doctypes-administration.component.html index 3bd3f16e596d010a8920cfc8d5affb15b4263f95..04af0bec704c0eeee858a3d5afc26500d673fb10 100755 --- a/src/frontend/app/administration/doctype/doctypes-administration.component.html +++ b/src/frontend/app/administration/doctype/doctypes-administration.component.html @@ -272,15 +272,14 @@ <div class="col-sm-12"> <mat-form-field> <mat-label>{{'lang.retentionRule' | translate}}</mat-label> - <mat-select *ngIf = "state === true; else elseBlock" id="retention_retentionRule" name="retention_rule" title="{{'lang.retentionRule' | translate}}" maxlength="15" - [(ngModel)]="conservationRules.ruleSelected"> - <mat-option *ngFor="let item of conservationRules.listRules | sortBy: 'value'" [value]="item.value"> - {{ item.label }} + <mat-select *ngIf = "conservationRules.length>0; else elseBlock" name="retention_rule" title="{{'lang.retentionRule' | translate}}" [(ngModel)]="currentType.retention_rule"> + <mat-option *ngFor="let item of conservationRules | sortBy: 'label'" [value]="item.id"> + {{item.label}} </mat-option> </mat-select> <ng-template #elseBlock> - <input matInput [(ngModel)]="inputRule" name="retention_rule" id="retention_rule" title="{{'lang.retentionRule' | translate}}" - type="text" placeholder="{{'lang.retentionRule' | translate}}" maxlength="15"> + <input matInput [(ngModel)]="currentType.retention_rule" name="retention_rule" title="{{'lang.retentionRule' | translate}}" + type="text" placeholder="{{'lang.retentionRule' | translate}}" maxlength="15"> </ng-template> </mat-form-field> </div> diff --git a/src/frontend/app/administration/doctype/doctypes-administration.component.ts b/src/frontend/app/administration/doctype/doctypes-administration.component.ts index 7e55235ebf91fefd5877ddfb988d36c390535737..757e06677155e61bcb427426fb20ad66d4f44914 100755 --- a/src/frontend/app/administration/doctype/doctypes-administration.component.ts +++ b/src/frontend/app/administration/doctype/doctypes-administration.component.ts @@ -39,12 +39,7 @@ export class DoctypesAdministrationComponent implements OnInit { newSecondLevel: any = false; newFirstLevel: any = false; - conservationRules: any = { - listRules: [], - ruleSelected: null - }; - - inputRule: any; + conservationRules: any = []; displayedColumns = ['label', 'use', 'mandatory', 'column']; @ViewChild(MatPaginator, { static: false }) paginator: MatPaginator; @@ -62,7 +57,6 @@ export class DoctypesAdministrationComponent implements OnInit { ngOnInit(): void { this.headerService.setHeader(this.translate.instant('lang.administration') + ' ' + this.translate.instant('lang.documentTypes')); - this.getRules(); this.headerService.injectInSideBarLeft(this.adminMenuTemplate, this.viewContainerRef, 'adminMenu'); this.loading = true; @@ -153,15 +147,13 @@ export class DoctypesAdministrationComponent implements OnInit { } getRules() { - /* return new Promise((resolve, reject) => { - this.http.get('').pipe( + return new Promise((resolve, reject) => { + this.http.get('../rest/archival/retentionRules').pipe( tap((data: any) => { - if (Object.keys(this.conservationRules.listRules).length === 0) { - this.state = false; + if (data.retentionRules.length != 0) { + this.conservationRules = data.retentionRules; } else { - this.state = true; - // foreach + push - console.log(this.conservationRules); + this.conservationRules = []; } resolve(true); }), @@ -170,7 +162,7 @@ export class DoctypesAdministrationComponent implements OnInit { return of(false); }) ).subscribe(); - }); */ + }); } loadDoctype(data: any, move: boolean) { @@ -185,6 +177,7 @@ export class DoctypesAdministrationComponent implements OnInit { this.currentType = dataValue['doctype']; this.secondLevels = dataValue['secondLevel']; this.processModes = ['NORMAL', 'SVA', 'SVR']; + this.getRules(); if (move) { if (this.currentType) {