From 7628eea086cff6d0424c9e0f2efa4cd320784f1b Mon Sep 17 00:00:00 2001 From: "florian.azizian" <florian.azizian@maarch.org> Date: Thu, 8 Oct 2020 23:58:27 +0200 Subject: [PATCH] FEAT #15047 TIME 1:20 Begin initSeda --- rest/index.php | 3 + .../exportSeda/controllers/SedaController.php | 104 ++++++++++++++++++ 2 files changed, 107 insertions(+) create mode 100755 src/app/external/exportSeda/controllers/SedaController.php diff --git a/rest/index.php b/rest/index.php index c923adf70db..2f737938fb7 100755 --- a/rest/index.php +++ b/rest/index.php @@ -623,6 +623,9 @@ $app->post('/collaboraOnline/file', \ContentManagement\controllers\CollaboraOnli $app->delete('/collaboraOnline/file', \ContentManagement\controllers\CollaboraOnlineController::class . ':deleteTmpFile'); $app->post('/collaboraOnline/encodedFile', \ContentManagement\controllers\CollaboraOnlineController::class . ':saveTmpEncodedDocument'); +// Archival +$app->get('/resources/{resId}/initSeda', \ExportSeda\controllers\SedaController::class . ':initSeda'); + // Registered mail $app->get('/registeredMail/sites', \RegisteredMail\controllers\IssuingSiteController::class . ':get'); $app->get('/registeredMail/sites/{id}', \RegisteredMail\controllers\IssuingSiteController::class . ':getById'); diff --git a/src/app/external/exportSeda/controllers/SedaController.php b/src/app/external/exportSeda/controllers/SedaController.php new file mode 100755 index 00000000000..7dfd2fbd854 --- /dev/null +++ b/src/app/external/exportSeda/controllers/SedaController.php @@ -0,0 +1,104 @@ +<?php + +/** +* Copyright Maarch since 2008 under licence GPLv3. +* See LICENCE.txt file at the root folder for more details. +* This file is part of Maarch software. +* +*/ + +/** +* @brief Seda Controller +* @author dev@maarch.org +*/ + +namespace ExportSeda\controllers; + +use Attachment\models\AttachmentModel; +use Doctype\models\DoctypeModel; +use Email\models\EmailModel; +use Entity\models\EntityModel; +use Note\models\NoteModel; +use Resource\models\ResModel; +use Respect\Validation\Validator; +use Slim\Http\Request; +use Slim\Http\Response; +use SrcCore\models\CoreConfigModel; + +class SedaController +{ + public function initSeda(Request $request, Response $response, array $aArgs) + { + if (!Validator::intVal()->validate($aArgs['resId'])) { + return $response->withStatus(400)->withJson(['errors' => 'Route resId is not an integer']); + } + + $resource = ResModel::getById(['resId' => $aArgs['resId'], 'select' => ['destination', 'type_id', 'subject']]); + if (empty($resource)) { + return $response->withStatus(400)->withJson(['errors' => 'resource does not exists']); + } elseif (empty($resource['destination'])) { + return $response->withStatus(400)->withJson(['errors' => 'resource has no destination', 'lang' => 'noDestination']); + } + + $doctype = DoctypeModel::getById(['id' => $resource['type_id'], 'select' => ['description', 'retention_rule', 'retention_final_disposition']]); + if (empty($doctype['retention_rule']) || empty($doctype['retention_final_disposition'])) { + return $response->withStatus(400)->withJson(['errors' => 'retention_rule or retention_final_disposition is empty for doctype', 'lang' => 'noRetentionInfo']); + } + $entity = EntityModel::getByEntityId(['entityId' => $resource['destination'], 'select' => ['producer_service', 'entity_label', 'business_id']]); + if (empty($entity['producer_service'])) { + return $response->withStatus(400)->withJson(['errors' => 'producer_service is empty for this entity', 'lang' => 'noProducerService']); + } + + $sedaXml = CoreConfigModel::getXmlLoaded(['path' => 'modules/export_seda/xml/config.xml']); + if (empty($sedaXml->CONFIG->senderOrgRegNumber)) { + return $response->withStatus(400)->withJson(['errors' => 'No senderOrgRegNumber found in config.xml (export_seda)']); + } + + $return = [ + 'data' => [ + 'entity' => [ + 'label' => $entity['entity_label'], + 'siren' => $entity['business_id'], + 'archiveEntitySiren' => $sedaXml->CONFIG->senderOrgRegNumber + ], + 'doctype' => [ + 'label' => $doctype['description'], + 'retentionRule' => $doctype['retention_rule'], + 'retentionFinalDisposition' => $doctype['retention_final_disposition'] + ] + ], + 'archiveUnit' => [ + [ + 'id' => 'letterbox_' . $aArgs['resId'], + 'label' => $resource['subject'], + 'type' => 'mainDocument' + ] + ] + ]; + + $notes = NoteModel::get(['select' => ['note_text', 'id'], 'where' => ['identifier = ?'], 'data' => [$aArgs['resId']]]); + foreach ($notes as $note) { + $return['archiveUnit'][] = [ + 'id' => 'note_' . $note['id'], + 'label' => $note['note_text'], + 'type' => 'note' + ]; + } + + $emails = EmailModel::get([ + 'select' => ['object', 'id'], + 'where' => ['document->>\'id\' = ?', 'status = ?'], + 'data' => [$aArgs['resId'], 'SENT'], + 'orderBy' => ['send_date desc'] + ]); + foreach ($emails as $email) { + $return['archiveUnit'][] = [ + 'id' => 'note_' . $email['id'], + 'label' => $email['object'], + 'type' => 'email' + ]; + } + + return $response->withJson($return); + } +} -- GitLab