diff --git a/rest/index.php b/rest/index.php index c53f550be39cddd657680c1dab7cf963a3722083..9e7848d7c2dfe6b12f4a89e5dc4942823e582471 100755 --- a/rest/index.php +++ b/rest/index.php @@ -372,6 +372,7 @@ $app->put('/resources/{resId}/unsign', \SignatureBook\controllers\SignatureBookC $app->get('/resources/{resId}/acknowledgementReceipts', \AcknowledgementReceipt\controllers\AcknowledgementReceiptController::class . ':getByResId'); $app->get('/resources/{resId}/shippings', \Shipping\controllers\ShippingController::class . ':getByResId'); $app->get('/resources/{resId}/messageExchanges', \MessageExchange\controllers\MessageExchangeController::class . ':getByResId'); +$app->get('/messageExchanges/{id}', \MessageExchange\controllers\MessageExchangeController::class . ':getById'); $app->put('/res/resource/status', \Resource\controllers\ResController::class . ':updateStatus'); $app->post('/res/list', \Resource\controllers\ResController::class . ':getList'); diff --git a/src/app/external/messageExchange/controllers/MessageExchangeController.php b/src/app/external/messageExchange/controllers/MessageExchangeController.php index e8660ec7580ed2846023dc1e4c4db74d69eb1e39..c6935ee7f1bf7126d86432276523375725d395ba 100644 --- a/src/app/external/messageExchange/controllers/MessageExchangeController.php +++ b/src/app/external/messageExchange/controllers/MessageExchangeController.php @@ -71,4 +71,122 @@ class MessageExchangeController return $response->withJson(['messageExchanges' => $messages]); } + + public static function getById(Request $request, Response $response, array $args) + { + if (!Validator::stringType()->validate($args['id'])) { + return $response->withStatus(400)->withJson(['errors' => 'Query param id is not a string']); + } + + $message = MessageExchangeModel::getMessageByIdentifier([ + 'select' => ['*'], + 'messageId' => $args['id'] + ]); + + if (empty($message[0])) { + return $response->withStatus(404)->withJson(['errors' => 'Message not found']); + } + $message = $message[0]; + + if (!ResController::hasRightByResId(['resId' => [$message['res_id_master']], 'userId' => $GLOBALS['id']])) { + return $response->withStatus(403)->withJson(['errors' => 'Document out of perimeter']); + } + + $type = $message['type']; + if (!empty($message['receptionDate'])) { + $reference = $message['reference'] . '_Reply'; + $type = 'ArchiveTransfer'; + } elseif ($type == 'ArchiveTransferReply') { + $reference = $message['reference']; + $type = 'ArchiveTransferReplySent'; + } + + $operationComments = null; + if (!empty($reference)) { + $reply = MessageExchangeModel::getMessageByReference(['reference' => $reference]); + $replyData = json_decode($reply['data'], true); + $operationComments = $replyData['Comment']; + } + + $messageData = json_decode($message['data'], true); + + $transferringAgencyMetaData = $messageData['TransferringAgency']['OrganizationDescriptiveMetadata']; + $from = $transferringAgencyMetaData['Contact'][0]['PersonName'] . ' (' . $transferringAgencyMetaData['Name'] . ')'; + + $archivalAgency = $messageData['ArchivalAgency']; + $archivalAgencyMetaData = $archivalAgency['OrganizationDescriptiveMetadata'] ?? null; + $communicationType = $archivalAgencyMetaData['Communication'][0]['value'] ?? null; + $contactInfo = $archivalAgencyMetaData['Name'] . ' - <b>' . $archivalAgency['Identifier']['value'] . '</b> - ' . $archivalAgencyMetaData['Contact'][0]['PersonName']; + + if (!empty($archivalAgencyMetaData['Contact'][0]['Address'][0])) { + $addressInfo = $archivalAgencyMetaData['Contact'][0]['Address'][0]['PostOfficeBox'] + . ' ' . $archivalAgencyMetaData['Contact'][0]['Address'][0]['StreetName'] + . ' ' . $archivalAgencyMetaData['Contact'][0]['Address'][0]['Postcode'] + . ' ' . $archivalAgencyMetaData['Contact'][0]['Address'][0]['CityName'] + . ' ' . $archivalAgencyMetaData['Contact'][0]['Address'][0]['Country']; + $contactInfo .= ', ' . $addressInfo; + } + + $body = $messageData['Comment'][0]['value'] ?? null; + $object = $messageData['DataObjectPackage']['DescriptiveMetadata']['ArchiveUnit'][0]['Content']['Title'][0] ?? null; + + $unitIdentifier = MessageExchangeModel::getUnitIdentifierByMessageId(['messageId' => $args['id']]); + + $notes = []; + $attachments = []; + $resMasterAttached = false; + $disposition = []; + foreach ($unitIdentifier as $unit) { + if ($unit['tablename'] == 'notes') { + $notes[] = $unit['res_id']; + } + if ($unit['tablename'] == 'res_attachments') { + $attachments[] = $unit['res_id']; + } + if ($unit['tablename'] == 'res_letterbox') { + $resMasterAttached = true; + } + if ($unit['disposition'] == 'body') { + $disposition = $unit; + } + } + + $messageType = 'm2m_' . strtoupper($type); + $user = UserModel::getLabelledUserById(['login' => $message['account_id']]); + $sender = $user . ' (' . $message['sender_org_name'] . ')'; + + $recipient = $message['recipient_org_name'] . ' (' . $message['recipient_org_identifier'] . ')'; + if ($message['status'] == 'S') { + $status = 'sent'; + } elseif ($message['status'] == 'E') { + $status = 'error'; + } elseif ($message['status'] == 'W') { + $status = 'wait'; + } else { + $status = 'draft'; + } + + $messageExchange = [ + 'messageId' => $message['message_id'], + 'creationDate' => $message['date'], + 'type' => $messageType, + 'sender' => $sender, + 'recipient' => $recipient, + 'receptionDate' => $message['reception_date'], + 'operationDate' => $message['operation_date'], + 'status' => $status, + 'operationComments' => $operationComments, + 'from' => $from, + 'communicationType' => $communicationType, + 'contactInfo' => $contactInfo, + 'body' => $body, + 'object' => $object, + 'notes' => $notes, + 'attachments' => $attachments, + 'resMasterAttached' => $resMasterAttached, + 'disposition' => $disposition + ]; + + return $response->withJson(['messageExchange' => $messageExchange]); + } } diff --git a/src/app/external/messageExchange/models/MessageExchangeModelAbstract.php b/src/app/external/messageExchange/models/MessageExchangeModelAbstract.php index 923db0f495dd3ceadd814eab9de7d231dd28d9f6..84046ddf7e17e230e37998d994ae7f89f32890f8 100755 --- a/src/app/external/messageExchange/models/MessageExchangeModelAbstract.php +++ b/src/app/external/messageExchange/models/MessageExchangeModelAbstract.php @@ -212,4 +212,20 @@ abstract class MessageExchangeModelAbstract return ['messageId' => $messageObject->messageId]; } + + public static function getUnitIdentifierByMessageId(array $args) + { + ValidatorModel::notEmpty($args, ['messageId']); + ValidatorModel::stringType($args, ['messageId']); + + $messages = DatabaseModel::select([ + 'select' => empty($aArgs['select']) ? ['*'] : $aArgs['select'], + 'table' => ['unit_identifier'], + 'where' => ['message_id = ?'], + 'data' => [$aArgs['message_id']] + ] + ); + + return $messages; + } }