From eb6e38401d22adf2c1a10139a010df47237b42d8 Mon Sep 17 00:00:00 2001 From: Damien <damien.burel@maarch.org> Date: Wed, 6 Mar 2019 15:42:49 +0100 Subject: [PATCH] FEAT #9514 Send email --- rest/index.php | 2 +- .../AcknowledgementReceiptTrait.php | 43 +++++++++++-- .../controllers/MergeController.php | 18 +++--- src/app/email/controllers/EmailController.php | 61 ++++++++++++------- src/app/email/models/EmailModel.php | 6 +- .../controllers/ResourceListController.php | 1 + 6 files changed, 93 insertions(+), 38 deletions(-) diff --git a/rest/index.php b/rest/index.php index a09636c7120..62e8483046d 100755 --- a/rest/index.php +++ b/rest/index.php @@ -153,7 +153,7 @@ $app->put('/doctypes/types/{id}/redirect', \Doctype\controllers\DoctypeControlle $app->get('/administration/doctypes/new', \Doctype\controllers\FirstLevelController::class . ':initDoctypes'); //Emails -$app->post('/emails', \Email\controllers\EmailController::class . ':create'); +$app->post('/emails', \Email\controllers\EmailController::class . ':send'); //Entities $app->get('/entities', \Entity\controllers\EntityController::class . ':get'); diff --git a/src/app/action/controllers/AcknowledgementReceiptTrait.php b/src/app/action/controllers/AcknowledgementReceiptTrait.php index 54d44eaa738..992258bd053 100644 --- a/src/app/action/controllers/AcknowledgementReceiptTrait.php +++ b/src/app/action/controllers/AcknowledgementReceiptTrait.php @@ -19,6 +19,8 @@ use Convert\controllers\ConvertPdfController; use Docserver\controllers\DocserverController; use Docserver\models\DocserverModel; use Doctype\models\DoctypeExtModel; +use Email\controllers\EmailController; +use Entity\models\EntityModel; use Resource\models\ResModel; use SrcCore\models\DatabaseModel; use SrcCore\models\ValidatorModel; @@ -59,7 +61,7 @@ trait AcknowledgementReceiptTrait } } - $resource = ResModel::getById(['select' => ['type_id', 'destination'], 'resId' => $aArgs['resId']]); + $resource = ResModel::getById(['select' => ['type_id', 'destination', 'subject'], 'resId' => $aArgs['resId']]); $doctype = DoctypeExtModel::getById(['id' => $resource['type_id'], 'select' => ['process_mode']]); if ($doctype['process_mode'] == 'SVA') { @@ -81,8 +83,10 @@ trait AcknowledgementReceiptTrait $docserver = DocserverModel::getByDocserverId(['docserverId' => 'TEMPLATES', 'select' => ['path_template']]); $pathToDocument = $docserver['path_template'] . str_replace('#', DIRECTORY_SEPARATOR, $template[0]['template_path']) . $template[0]['template_file_name']; - $currentUser = UserModel::getByLogin(['login' => $GLOBALS['userId'], 'select' => ['id']]); + $currentUser = UserModel::getByLogin(['login' => $GLOBALS['userId'], 'select' => ['id', 'mail']]); $ids = []; + $errors = []; + $emailsToSend = []; DatabaseModel::beginTransaction(); foreach ($contactsToProcess as $contactToProcess) { $contact = ContactModel::getByAddressId(['addressId' => $contactToProcess, 'select' => ['email', 'address_street', 'address_town', 'address_postal_code']]); @@ -103,7 +107,7 @@ trait AcknowledgementReceiptTrait ]); $format = 'html'; } else { - if (!file_exists($pathToDocument)) { + if (!file_exists($pathToDocument) || !is_file($pathToDocument)) { DatabaseModel::rollbackTransaction(); return []; } @@ -131,7 +135,7 @@ trait AcknowledgementReceiptTrait return ['errors' => '[storeResource] ' . $storeResult['errors']]; } - $ids[] = AcknowledgementReceiptModel::create([ + $id = AcknowledgementReceiptModel::create([ 'resId' => $aArgs['resId'], 'type' => $templateAttachmentType, 'format' => $format, @@ -142,9 +146,38 @@ trait AcknowledgementReceiptTrait 'filename' => $storeResult['file_destination_name'], 'fingerprint' => $storeResult['fingerPrint'] ]); + + if (!empty($contact['email'])) { + $emailsToSend[] = ['id' => $id, 'email' => $contact['email'], 'encodedHtml' => $mergedDocument['encodedDocument']]; + } + $ids[] = $id; } DatabaseModel::commitTransaction(); - return $ids; + if (!empty($emailsToSend)) { + $entity = EntityModel::getByEntityId(['entityId' => $resource['destination'], 'select' => ['email', 'id']]); + } + foreach ($emailsToSend as $email) { + $isSent = EmailController::createEmail([ + 'userId' => $currentUser['id'], + 'data' => [ + 'sender' => empty($entity['email']) ? ['email' => $currentUser['mail']] : ['email' => $entity['email'], 'entityId' => $entity['id']], + 'recipients' => [$email['email']], + 'object' => '[AR] ' . (empty($resource['subject']) ? '' : substr($resource['subject'], 0, 100)), + 'body' => base64_decode($email['encodedHtml']), + 'document' => ['id' => $aArgs['resId'], 'isLinked' => false, 'original' => true], + 'isHtml' => true, + 'status' => 'TO_SEND' + ] + ]); + + if (!empty($isSent['errors'])) { + $errors[] = "Send Email error AR {$email['id']}: {$isSent['errors']}"; + } else { + AcknowledgementReceiptModel::update(['set' => ['send_date' => 'CURRENT_TIMESTAMP'], 'where' => ['id = ?'], 'data' => [$email['id']]]); + } + } + + return ['ids' => $ids, 'errors' => $errors]; } } diff --git a/src/app/contentManagement/controllers/MergeController.php b/src/app/contentManagement/controllers/MergeController.php index ced1fad1dc8..81521f54fec 100644 --- a/src/app/contentManagement/controllers/MergeController.php +++ b/src/app/contentManagement/controllers/MergeController.php @@ -49,14 +49,16 @@ class MergeController $args['path'] = null; } - if ($extension == 'odt') { - $tbs->LoadTemplate($args['path'], OPENTBS_ALREADY_UTF8); -// $tbs->LoadTemplate("{$args['path']}#content.xml;styles.xml", OPENTBS_ALREADY_UTF8); - } elseif ($extension == 'docx') { - $tbs->LoadTemplate($args['path'], OPENTBS_ALREADY_UTF8); -// $tbs->LoadTemplate("{$args['path']}#word/header1.xml;word/footer1.xml", OPENTBS_ALREADY_UTF8); - } else { - $tbs->LoadTemplate($args['path'], OPENTBS_ALREADY_UTF8); + if (!empty($args['path'])) { + if ($extension == 'odt') { + $tbs->LoadTemplate($args['path'], OPENTBS_ALREADY_UTF8); + // $tbs->LoadTemplate("{$args['path']}#content.xml;styles.xml", OPENTBS_ALREADY_UTF8); + } elseif ($extension == 'docx') { + $tbs->LoadTemplate($args['path'], OPENTBS_ALREADY_UTF8); + // $tbs->LoadTemplate("{$args['path']}#word/header1.xml;word/footer1.xml", OPENTBS_ALREADY_UTF8); + } else { + $tbs->LoadTemplate($args['path'], OPENTBS_ALREADY_UTF8); + } } $dataToBeMerge = MergeController::getDataForMerge($args['data']); diff --git a/src/app/email/controllers/EmailController.php b/src/app/email/controllers/EmailController.php index 8f3e1b5bb86..cc21699e2c1 100644 --- a/src/app/email/controllers/EmailController.php +++ b/src/app/email/controllers/EmailController.php @@ -36,33 +36,49 @@ use User\models\UserModel; class EmailController { - public function create(Request $request, Response $response) + public function send(Request $request, Response $response) { if (!ServiceModel::hasService(['id' => 'sendmail', 'userId' => $GLOBALS['userId'], 'location' => 'sendmail', 'type' => 'use'])) { return $response->withStatus(403)->withJson(['errors' => 'Service forbidden']); } - $data = $request->getParams(); + $body = $request->getParsedBody(); - $check = EmailController::controlCreateEmail(['login' => $GLOBALS['userId'], 'data' => $data]); - if (!empty($check['errors'])) { - return $response->withStatus($check['code'])->withJson(['errors' => $check['errors']]); + $user = UserModel::getByLogin(['login' => $GLOBALS['userId'], 'select' => ['id']]); + $isSent = EmailController::createEmail(['userId' => $user['id'], 'data' => $body]); + + if (!empty($isSent['errors'])) { + return $response->withStatus($isSent['code'])->withJson(['errors' => $isSent['errors']]); } - $user = UserModel::getByLogin(['login' => $GLOBALS['userId'], 'select' => ['id']]); + return $response->withStatus(204); + } + + public static function createEmail(array $args) + { + ValidatorModel::notEmpty($args, ['userId', 'data']); + ValidatorModel::intVal($args, ['userId']); + ValidatorModel::arrayType($args, ['data']); + + $user = UserModel::getById(['id' => $args['userId'], 'select' => ['user_id']]); + + $check = EmailController::controlCreateEmail(['login' => $user['user_id'], 'data' => $args['data']]); + if (!empty($check['errors'])) { + return ['errors' => $check['errors'], 'code' => $check['code']]; + } $id = EmailModel::create([ - 'userId' => $user['id'], - 'sender' => json_encode($data['sender']), - 'recipients' => json_encode($data['recipients']), - 'cc' => empty($data['cc']) ? '[]' : json_encode($data['cc']), - 'cci' => empty($data['cci']) ? '[]' : json_encode($data['cci']), - 'object' => $data['object'], - 'body' => $data['body'], - 'document' => empty($data['document']) ? null : json_encode($data['document']), - 'isHtml' => $data['isHtml'] ? 'true' : 'false', - 'status' => $data['status'] == 'DRAFT' ? 'DRAFT' : 'WAITING', - 'messageExchangeId' => $data['messageExchangeId'] + 'userId' => $args['userId'], + 'sender' => json_encode($args['data']['sender']), + 'recipients' => json_encode($args['data']['recipients']), + 'cc' => empty($args['data']['cc']) ? '[]' : json_encode($args['data']['cc']), + 'cci' => empty($args['data']['cci']) ? '[]' : json_encode($args['data']['cci']), + 'object' => empty($args['data']['object']) ? null : $args['data']['object'], + 'body' => empty($args['data']['body']) ? null : $args['data']['body'], + 'document' => empty($args['data']['document']) ? null : json_encode($args['data']['document']), + 'isHtml' => $args['data']['isHtml'] ? 'true' : 'false', + 'status' => $args['data']['status'] == 'DRAFT' ? 'DRAFT' : 'WAITING', + 'messageExchangeId' => empty($args['data']['messageExchangeId']) ? null : $args['data']['messageExchangeId'] ]); HistoryController::add([ @@ -73,18 +89,18 @@ class EmailController 'info' => _EMAIL_ADDED ]); - if ($data['status'] != 'DRAFT') { - $isSent = EmailController::sendEmail(['emailId' => $id, 'userId' => $user['id']]); + if ($args['data']['status'] != 'DRAFT') { + $isSent = EmailController::sendEmail(['emailId' => $id, 'userId' => $args['userId']]); if (!empty($isSent['success'])) { EmailModel::update(['set' => ['status' => 'SENT', 'send_date' => 'CURRENT_TIMESTAMP'], 'where' => ['id = ?'], 'data' => [$id]]); } else { EmailModel::update(['set' => ['status' => 'ERROR'], 'where' => ['id = ?'], 'data' => [$id]]); - return $response->withStatus(502)->withJson(['errors' => $isSent['errors']]); + return ['errors' => $isSent['errors'], 'code' => 502]; } } - return $response->withStatus(204); + return true; } public static function sendEmail(array $args) @@ -167,6 +183,9 @@ class EmailController $phpmailer->Subject = $email['object']; $phpmailer->Body = $email['body']; + if (empty($email['body'])) { + $phpmailer->AllowEmpty = true; + } //TODO M2M diff --git a/src/app/email/models/EmailModel.php b/src/app/email/models/EmailModel.php index c86d2d07a6a..d3dedc6c06a 100644 --- a/src/app/email/models/EmailModel.php +++ b/src/app/email/models/EmailModel.php @@ -56,12 +56,12 @@ class EmailModel 'recipients' => $aArgs['recipients'], 'cc' => $aArgs['cc'], 'cci' => $aArgs['cci'], - 'object' => empty($aArgs['object']) ? null : $aArgs['object'], - 'body' => empty($aArgs['body']) ? null : $aArgs['body'], + 'object' => $aArgs['object'], + 'body' => $aArgs['body'], 'document' => $aArgs['document'], 'is_html' => $aArgs['isHtml'], 'status' => $aArgs['status'], - 'message_exchange_id' => empty($aArgs['messageExchangeId']) ? null : $aArgs['messageExchangeId'], + 'message_exchange_id' => $aArgs['messageExchangeId'], 'creation_date' => 'CURRENT_TIMESTAMP' ] ]); diff --git a/src/app/resource/controllers/ResourceListController.php b/src/app/resource/controllers/ResourceListController.php index 88ea5611569..01fb0513719 100644 --- a/src/app/resource/controllers/ResourceListController.php +++ b/src/app/resource/controllers/ResourceListController.php @@ -646,6 +646,7 @@ class ResourceListController return $response->withStatus(500)->withJson(['errors' => $methodResponse['errors']]); } if ($methodResponse !== true) { + //TODO array_merge keys avec errors $methodResponses = array_merge($methodResponses, $methodResponse); } } -- GitLab