. */ namespace SP\Modules\Web\Controllers; use SP\Config\ConfigUtil; use SP\Core\Acl\Acl; use SP\Core\Acl\UnauthorizedPageException; use SP\Core\Events\Event; use SP\Core\Events\EventMessage; use SP\Http\JsonResponse; use SP\Modules\Web\Controllers\Traits\ConfigTrait; use SP\Providers\Mail\MailParams; use SP\Services\Mail\MailService; /** * Class ConfigMailController * * @package SP\Modules\Web\Controllers */ final class ConfigMailController extends SimpleControllerBase { use ConfigTrait; /** * saveAction */ public function saveAction() { $eventMessage = EventMessage::factory(); $configData = $this->config->getConfigData(); // Mail $mailEnabled = $this->request->analyzeBool('mail_enabled', false); $mailServer = $this->request->analyzeString('mail_server'); $mailPort = $this->request->analyzeInt('mail_port', 25); $mailUser = $this->request->analyzeString('mail_user'); $mailPass = $this->request->analyzeEncrypted('mail_pass'); $mailSecurity = $this->request->analyzeString('mail_security'); $mailFrom = $this->request->analyzeEmail('mail_from'); $mailRequests = $this->request->analyzeBool('mail_requests_enabled', false); $mailAuth = $this->request->analyzeBool('mail_auth_enabled', false); $mailRecipients = ConfigUtil::mailAddressesAdapter($this->request->analyzeString('mail_recipients')); // Valores para la configuración del Correo if ($mailEnabled && (!$mailServer || !$mailFrom || count($mailRecipients) === 0)) { return $this->returnJsonResponse(JsonResponse::JSON_ERROR, __u('Faltan parámetros de Correo')); } if ($mailEnabled) { $configData->setMailEnabled(true); $configData->setMailRequestsEnabled($mailRequests); $configData->setMailServer($mailServer); $configData->setMailPort($mailPort); $configData->setMailSecurity($mailSecurity); $configData->setMailFrom($mailFrom); $configData->setMailRecipients($mailRecipients); $configData->setMailEvents($this->request->analyzeArray('mail_events', function ($items) { return ConfigUtil::eventsAdapter($items); })); if ($mailAuth) { $configData->setMailAuthenabled($mailAuth); $configData->setMailUser($mailUser); if ($mailPass !== '***') { $configData->setMailPass($mailPass); } } if ($configData->isMailEnabled() === false) { $eventMessage->addDescription(__u('Correo habiltado')); } } elseif ($mailEnabled === false && $configData->isMailEnabled()) { $configData->setMailEnabled(false); $configData->setMailRequestsEnabled(false); $configData->setMailAuthenabled(false); $eventMessage->addDescription(__u('Correo deshabilitado')); } else { return $this->returnJsonResponse(JsonResponse::JSON_SUCCESS, __u('Sin cambios')); } return $this->saveConfig($configData, $this->config, function () use ($eventMessage) { $this->eventDispatcher->notifyEvent('save.config.mail', new Event($this, $eventMessage)); }); } /** * checkAction */ public function checkAction() { $mailParams = new MailParams(); $mailParams->server = $this->request->analyzeString('mail_server'); $mailParams->port = $this->request->analyzeInt('mail_port', 25); $mailParams->security = $this->request->analyzeString('mail_security'); $mailParams->from = $this->request->analyzeEmail('mail_from'); $mailParams->mailAuthenabled = $this->request->analyzeBool('mail_authenabled', false); $mailRecipients = ConfigUtil::mailAddressesAdapter($this->request->analyzeString('mail_recipients')); // Valores para la configuración del Correo if (!$mailParams->server || empty($mailParams->from) || empty($mailRecipients)) { return $this->returnJsonResponse(JsonResponse::JSON_ERROR, __u('Faltan parámetros de Correo')); } if ($mailParams->mailAuthenabled) { $mailParams->user = $this->request->analyzeString('mail_user'); $mailParams->pass = $this->request->analyzeEncrypted('mail_pass'); } 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])) ); return $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)); return $this->returnJsonResponseException($e); } } /** * @return bool */ protected function initialize() { try { $this->checks(); $this->checkAccess(Acl::CONFIG_MAIL); } catch (UnauthorizedPageException $e) { $this->eventDispatcher->notifyEvent('exception', new Event($e)); return $this->returnJsonResponseException($e); } } }