From b223b4f66a174faaf8152287deb13c84586c39a2 Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Thu, 8 Mar 2018 15:55:49 +0100 Subject: [PATCH] * [ADD] Mail configuration check. Work in progress. --- .../ConfigEncryptionController.php | 4 +- .../web/Controllers/ConfigMailController.php | 38 +++- .../web/Controllers/UserController.php | 4 +- .../Controllers/UserPassResetController.php | 4 +- .../material-blue/views/config/mail.inc | 54 +++-- lib/SP/Config/ConfigData.php | 20 ++ lib/SP/Config/ConfigUtil.php | 13 ++ lib/SP/Providers/Mail/MailHandler.php | 11 +- lib/SP/Providers/Mail/MailProvider.php | 140 +++--------- lib/SP/Services/MailService.php | 202 ++++++++++++++++++ public/js/app-actions.js | 14 ++ public/js/app-actions.min.js | 24 +-- public/js/app-triggers.js | 14 ++ public/js/app-triggers.min.js | 27 +-- 14 files changed, 396 insertions(+), 173 deletions(-) create mode 100644 lib/SP/Services/MailService.php diff --git a/app/modules/web/Controllers/ConfigEncryptionController.php b/app/modules/web/Controllers/ConfigEncryptionController.php index 2075bac0..8130945e 100644 --- a/app/modules/web/Controllers/ConfigEncryptionController.php +++ b/app/modules/web/Controllers/ConfigEncryptionController.php @@ -37,11 +37,11 @@ use SP\Core\TaskFactory; use SP\Http\JsonResponse; use SP\Http\Request; use SP\Modules\Web\Controllers\Traits\JsonTrait; -use SP\Providers\Mail\MailProvider; use SP\Services\Config\ConfigService; use SP\Services\Crypt\MasterPassService; use SP\Services\Crypt\TemporaryMasterPassService; use SP\Services\Crypt\UpdateMasterPassRequest; +use SP\Services\MailService; use SP\Services\User\UserService; use SP\Util\Util; @@ -206,7 +206,7 @@ class ConfigEncryptionController extends SimpleControllerBase return $value->email; }, $this->dic->get(UserService::class)->getUserEmailForGroup($groupId)); - $this->dic->get(MailProvider::class)->sendBatch($mailMessage->getTitle(), $emails, $mailMessage); + $this->dic->get(MailService::class)->sendBatch($mailMessage->getTitle(), $emails, $mailMessage); $this->returnJsonResponse(JsonResponse::JSON_SUCCESS, __u('Clave Temporal Generada'), [__u('Email enviado')]); } catch (\Exception $e) { diff --git a/app/modules/web/Controllers/ConfigMailController.php b/app/modules/web/Controllers/ConfigMailController.php index 78923211..3b4485fd 100644 --- a/app/modules/web/Controllers/ConfigMailController.php +++ b/app/modules/web/Controllers/ConfigMailController.php @@ -24,6 +24,7 @@ namespace SP\Modules\Web\Controllers; +use SP\Config\ConfigUtil; use SP\Core\Acl\ActionsInterface; use SP\Core\Acl\UnauthorizedPageException; use SP\Core\Events\Event; @@ -32,7 +33,7 @@ use SP\Http\JsonResponse; use SP\Http\Request; use SP\Modules\Web\Controllers\Traits\ConfigTrait; use SP\Providers\Mail\MailParams; -use SP\Providers\Mail\MailProvider; +use SP\Services\MailService; /** * Class ConfigMailController @@ -61,9 +62,10 @@ class ConfigMailController extends SimpleControllerBase $mailFrom = Request::analyzeEmail('mail_from'); $mailRequests = Request::analyzeBool('mail_requestsenabled', false); $mailAuth = Request::analyzeBool('mail_authenabled', false); + $mailRecipients = ConfigUtil::mailAddressesAdapter(Request::analyzeString('mail_recipients')); // Valores para la configuración del Correo - if ($mailEnabled && (!$mailServer || !$mailFrom)) { + if ($mailEnabled && (!$mailServer || !$mailFrom || count($mailRecipients) === 0)) { $this->returnJsonResponse(JsonResponse::JSON_ERROR, __u('Faltan parámetros de Correo')); } @@ -74,6 +76,7 @@ class ConfigMailController extends SimpleControllerBase $configData->setMailPort($mailPort); $configData->setMailSecurity($mailSecurity); $configData->setMailFrom($mailFrom); + $configData->setMailRecipients($mailRecipients); if ($mailAuth) { $configData->setMailAuthenabled($mailAuth); @@ -97,29 +100,50 @@ class ConfigMailController extends SimpleControllerBase }); } + /** + * checkAction + */ public function checkAction() { $mailParams = new MailParams(); - - // Mail $mailParams->server = Request::analyzeString('mail_server'); $mailParams->port = Request::analyzeInt('mail_port', 25); $mailParams->security = Request::analyzeString('mail_security'); $mailParams->from = Request::analyzeEmail('mail_from'); $mailParams->mailAuthenabled = Request::analyzeBool('mail_authenabled', false); + $mailRecipients = ConfigUtil::mailAddressesAdapter(Request::analyzeString('mail_recipients')); // Valores para la configuración del Correo - if (!$mailParams->server || !$mailParams->from) { + if (!$mailParams->server || empty($mailParams->from) || empty($mailRecipients)) { $this->returnJsonResponse(JsonResponse::JSON_ERROR, __u('Faltan parámetros de Correo')); } - if ($mailParams->mailAuthenabled) { $mailParams->user = Request::analyzeString('mail_user'); $mailParams->pass = Request::analyzeEncrypted('mail_pass'); } - $mailProvider = $this->dic->get(MailProvider::class); + try { + $this->dic->get(MailService::class)->check($mailParams, $mailRecipients[0]); + + $this->eventDispatcher->notifyEvent('send.mail.check', + new Event($this, EventMessage::factory() + ->addDescription(__u('Correo enviado')) + ->addDetail(__u('Destinatario'), $mailRecipients[0])) + ); + + $this->returnJsonResponse( + JsonResponse::JSON_SUCCESS, + __u('Correo enviado'), + [__u('Compruebe su buzón de correo')] + ); + } catch (\Exception $e) { + processException($e); + + $this->eventDispatcher->notifyEvent('exception', new Event($e)); + + $this->returnJsonResponseException($e); + } } protected function initialize() diff --git a/app/modules/web/Controllers/UserController.php b/app/modules/web/Controllers/UserController.php index 252f4669..9c7b9d7f 100644 --- a/app/modules/web/Controllers/UserController.php +++ b/app/modules/web/Controllers/UserController.php @@ -38,7 +38,7 @@ use SP\Modules\Web\Controllers\Traits\JsonTrait; use SP\Modules\Web\Forms\UserForm; use SP\Mvc\Controller\CrudControllerInterface; use SP\Mvc\View\Components\SelectItemAdapter; -use SP\Providers\Mail\MailProvider; +use SP\Services\MailService; use SP\Services\User\UserService; use SP\Services\UserGroup\UserGroupService; use SP\Services\UserPassRecover\UserPassRecoverService; @@ -312,7 +312,7 @@ class UserController extends ControllerBase implements CrudControllerInterface { if ($userData->isChangePass()) { $hash = $this->dic->get(UserPassRecoverService::class)->requestForUserId($userData->getId()); - $this->dic->get(MailProvider::class)->send(__('Cambio de Clave'), $userData->getEmail(), UserPassRecoverService::getMailMessage($hash)); + $this->dic->get(MailService::class)->send(__('Cambio de Clave'), $userData->getEmail(), UserPassRecoverService::getMailMessage($hash)); // $this->returnJsonResponse( // JsonResponse::JSON_WARNING, diff --git a/app/modules/web/Controllers/UserPassResetController.php b/app/modules/web/Controllers/UserPassResetController.php index 675de258..30dbe3e8 100644 --- a/app/modules/web/Controllers/UserPassResetController.php +++ b/app/modules/web/Controllers/UserPassResetController.php @@ -32,8 +32,8 @@ use SP\Http\JsonResponse; use SP\Http\Request; use SP\Modules\Web\Controllers\Helpers\LayoutHelper; use SP\Modules\Web\Controllers\Traits\JsonTrait; -use SP\Providers\Mail\MailProvider; use SP\Repositories\Track\TrackRequest; +use SP\Services\MailService; use SP\Services\Track\TrackService; use SP\Services\User\UserService; use SP\Services\UserPassRecover\UserPassRecoverService; @@ -103,7 +103,7 @@ class UserPassResetController extends ControllerBase ->addDetail(__u('Solicitado para'), sprintf('%s (%s)', $login, $email))) ); - $this->dic->get(MailProvider::class)->send(__('Cambio de Clave'), $email, UserPassRecoverService::getMailMessage($hash)); + $this->dic->get(MailService::class)->send(__('Cambio de Clave'), $email, UserPassRecoverService::getMailMessage($hash)); $this->returnJsonResponse(JsonResponse::JSON_SUCCESS, __u('Solicitud enviada'), [__u('En breve recibirá un correo para completar la solicitud.')]); } catch (\Exception $e) { diff --git a/app/modules/web/themes/material-blue/views/config/mail.inc b/app/modules/web/themes/material-blue/views/config/mail.inc index 77b6515d..fd329fe4 100644 --- a/app/modules/web/themes/material-blue/views/config/mail.inc +++ b/app/modules/web/themes/material-blue/views/config/mail.inc @@ -1,4 +1,9 @@ - +
@@ -20,6 +25,25 @@ + + +
getIconHelp()->getIcon(); ?>
+
+

+ +

+
+ + + + + @@ -115,21 +139,13 @@ -
getIconHelp()->getIcon(); ?>
-
-

- -

-
+ - +
+ + @@ -140,6 +156,16 @@
    +
  • + +