From b87f31a599ee83ac1801ab9ebedc230ab59d4cb5 Mon Sep 17 00:00:00 2001 From: Damien <damien.burel@maarch.org> Date: Fri, 8 Mar 2019 11:56:45 +0100 Subject: [PATCH] FEAT #9514 Email sript --- .angulardoc.json | 4 -- .../AcknowledgementReceiptController.php | 4 -- .../AcknowledgementReceiptTrait.php | 9 +-- .../controllers/ActionMethodController.php | 2 +- .../controllers/MergeController.php | 2 +- src/app/email/controllers/EmailController.php | 16 +++--- src/app/email/scripts/sendEmail.php | 57 +++++++++++++++++++ src/core/models/PasswordModel.php | 6 +- 8 files changed, 76 insertions(+), 24 deletions(-) delete mode 100644 .angulardoc.json create mode 100644 src/app/email/scripts/sendEmail.php diff --git a/.angulardoc.json b/.angulardoc.json deleted file mode 100644 index cd6626264d7..00000000000 --- a/.angulardoc.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "repoId": "a053e6e9-56d8-4b38-8e27-a5308c01a2d9", - "lastSync": 0 -} \ No newline at end of file diff --git a/src/app/acknowledgementReceipt/controllers/AcknowledgementReceiptController.php b/src/app/acknowledgementReceipt/controllers/AcknowledgementReceiptController.php index 2ac14e64c22..c6277bd8f85 100644 --- a/src/app/acknowledgementReceipt/controllers/AcknowledgementReceiptController.php +++ b/src/app/acknowledgementReceipt/controllers/AcknowledgementReceiptController.php @@ -28,7 +28,6 @@ use Template\models\TemplateModel; use Doctype\models\DoctypeExtModel; use Docserver\models\DocserverModel; use Resource\controllers\ResController; -use Docserver\models\DocserverTypeModel; use Resource\controllers\StoreController; use History\controllers\HistoryController; use Resource\controllers\ResourceListController; @@ -134,7 +133,6 @@ class AcknowledgementReceiptController } $data = $request->getParsedBody(); - //$data = $request->getParams(); if (!Validator::arrayType()->notEmpty()->validate($data['resources'])) { return $response->withStatus(400)->withJson(['errors' => 'Data resources is empty or not an array']); @@ -268,8 +266,6 @@ class AcknowledgementReceiptController $paper = 0; foreach ($contactsToProcess as $contactToProcess) { if (empty($contactToProcess)) { - $email = 0; - $paper = 0; $noSendAR['number'] += 1; $noSendAR['list'][] = ['resId' => $resId, 'alt_identifier' => $ext['alt_identifier'], 'info' => _NO_CONTACT ]; continue 2; diff --git a/src/app/action/controllers/AcknowledgementReceiptTrait.php b/src/app/action/controllers/AcknowledgementReceiptTrait.php index 992258bd053..2919314fcd5 100644 --- a/src/app/action/controllers/AcknowledgementReceiptTrait.php +++ b/src/app/action/controllers/AcknowledgementReceiptTrait.php @@ -159,8 +159,8 @@ trait AcknowledgementReceiptTrait } foreach ($emailsToSend as $email) { $isSent = EmailController::createEmail([ - 'userId' => $currentUser['id'], - 'data' => [ + '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)), @@ -168,13 +168,14 @@ trait AcknowledgementReceiptTrait 'document' => ['id' => $aArgs['resId'], 'isLinked' => false, 'original' => true], 'isHtml' => true, 'status' => 'TO_SEND' + ], + 'options' => [ + 'acknowledgementReceiptId' => $email['id'] ] ]); 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']]]); } } diff --git a/src/app/action/controllers/ActionMethodController.php b/src/app/action/controllers/ActionMethodController.php index fbf2772cb3b..88b158fff28 100644 --- a/src/app/action/controllers/ActionMethodController.php +++ b/src/app/action/controllers/ActionMethodController.php @@ -28,7 +28,7 @@ class ActionMethodController use AcknowledgementReceiptTrait; const COMPONENTS_ACTIONS = [ - 'confirmAction' => null, + 'confirmAction' => 'createAcknowledgementReceipts', 'closeMailAction' => 'closeMailAction', 'closeAndIndexAction' => 'closeAndIndexAction', 'updateDepartureDateAction' => 'updateDepartureDateAction', diff --git a/src/app/contentManagement/controllers/MergeController.php b/src/app/contentManagement/controllers/MergeController.php index 81521f54fec..f83ba6deb95 100644 --- a/src/app/contentManagement/controllers/MergeController.php +++ b/src/app/contentManagement/controllers/MergeController.php @@ -103,7 +103,7 @@ class MergeController } //User - $currentUser = UserModel::getById(['id' => $args['userId'], 'select' => ['firstname', 'lastname']]); + $currentUser = UserModel::getById(['id' => $args['userId'], 'select' => ['firstname', 'lastname', 'phone', 'mail', 'initials']]); //Contact $contact = ContactModel::getOnView(['select' => ['*'], 'where' => ['ca_id = ?'], 'data' => [$args['contactAddressId']]])[0]; diff --git a/src/app/email/controllers/EmailController.php b/src/app/email/controllers/EmailController.php index cc21699e2c1..0d8fae5ccf6 100644 --- a/src/app/email/controllers/EmailController.php +++ b/src/app/email/controllers/EmailController.php @@ -30,6 +30,7 @@ use Resource\controllers\ResController; use Respect\Validation\Validator; use Slim\Http\Request; use Slim\Http\Response; +use SrcCore\models\CoreConfigModel; use SrcCore\models\PasswordModel; use SrcCore\models\ValidatorModel; use User\models\UserModel; @@ -58,7 +59,7 @@ class EmailController { ValidatorModel::notEmpty($args, ['userId', 'data']); ValidatorModel::intVal($args, ['userId']); - ValidatorModel::arrayType($args, ['data']); + ValidatorModel::arrayType($args, ['data', 'options']); $user = UserModel::getById(['id' => $args['userId'], 'select' => ['user_id']]); @@ -90,14 +91,13 @@ class EmailController ]); 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 ['errors' => $isSent['errors'], 'code' => 502]; + $customId = CoreConfigModel::getCustomId(); + if (empty($customId)) { + $customId = 'null'; } + $encryptKey = CoreConfigModel::getEncryptKey(); + $options = empty($args['options']) ? '' : serialize($args['options']); + exec("/usr/bin/php src/app/email/scripts/sendEmail.php {$customId} {$id} {$args['userId']} '{$encryptKey}' '{$options}' > /dev/null &"); } return true; diff --git a/src/app/email/scripts/sendEmail.php b/src/app/email/scripts/sendEmail.php new file mode 100644 index 00000000000..17870fcdaf4 --- /dev/null +++ b/src/app/email/scripts/sendEmail.php @@ -0,0 +1,57 @@ +<?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 Email Script + * @author dev@maarch.org + */ + +namespace Email\scripts; + +require 'vendor/autoload.php'; + +use AcknowledgementReceipt\models\AcknowledgementReceiptModel; +use Email\controllers\EmailController; +use Email\models\EmailModel; +use SrcCore\models\DatabasePDO; +use User\models\UserModel; + +//customId = $argv[1]; +//emailId = $argv[2]; +//userId = $argv[3]; +//encryptKey = $argv[4]; +//options = $argv[5]; + +$options = empty($argv[5]) ? null : unserialize($argv[5]); +EmailScript::send(['customId' => $argv[1], 'emailId' => $argv[2], 'userId' => $argv[3], 'encryptKey' => $argv[4], 'options' => $options]); + +class EmailScript +{ + public static function send(array $args) + { + DatabasePDO::reset(); + new DatabasePDO(['customId' => $args['customId']]); + + $currentUser = UserModel::getById(['id' => $args['userId'], 'select' => ['user_id']]); + $GLOBALS['userId'] = $currentUser['user_id']; + $_SERVER['MAARCH_ENCRYPT_KEY'] = $args['encryptKey']; + + $isSent = EmailController::sendEmail(['emailId' => $args['emailId'], 'userId' => $args['userId']]); + if (!empty($isSent['success'])) { + EmailModel::update(['set' => ['status' => 'SENT', 'send_date' => 'CURRENT_TIMESTAMP'], 'where' => ['id = ?'], 'data' => [$args['emailId']]]); + } else { + EmailModel::update(['set' => ['status' => 'ERROR'], 'where' => ['id = ?'], 'data' => [$args['emailId']]]); + } + + //Options + if (!empty($args['options']['acknowledgementReceiptId']) && !empty($isSent['success'])) { + AcknowledgementReceiptModel::update(['set' => ['send_date' => 'CURRENT_TIMESTAMP'], 'where' => ['id = ?'], 'data' => [$args['options']['acknowledgementReceiptId']]]); + } + } +} diff --git a/src/core/models/PasswordModel.php b/src/core/models/PasswordModel.php index 60a821813aa..0ac6b83040a 100755 --- a/src/core/models/PasswordModel.php +++ b/src/core/models/PasswordModel.php @@ -155,7 +155,8 @@ class PasswordModel public static function encrypt(array $aArgs) { ValidatorModel::notEmpty($aArgs, ['password']); - + ValidatorModel::stringType($aArgs, ['password']); + $enc_key = CoreConfigModel::getEncryptKey(); $cipher_method = 'AES-128-CTR'; @@ -168,7 +169,8 @@ class PasswordModel public static function decrypt(array $aArgs) { ValidatorModel::notEmpty($aArgs, ['cryptedPassword']); - + ValidatorModel::stringType($aArgs, ['cryptedPassword']); + $enc_key = CoreConfigModel::getEncryptKey(); $cipher_method = 'AES-128-CTR'; -- GitLab