. */ namespace SP\Modules\Web\Controllers\ConfigMail; use JsonException; use SP\Core\Events\Event; use SP\Core\Events\EventMessage; use SP\Domain\Config\Services\ConfigUtil; use SP\Domain\Core\Acl\AclActionsInterface; use SP\Domain\Core\Acl\UnauthorizedPageException; use SP\Domain\Core\Exceptions\SessionTimeout; use SP\Domain\Http\Dtos\JsonMessage; use SP\Modules\Web\Controllers\SimpleControllerBase; use SP\Modules\Web\Controllers\Traits\ConfigTrait; /** * Class SaveController * * @package SP\Modules\Web\Controllers */ final class SaveController extends SimpleControllerBase { use ConfigTrait; /** * @return bool * @throws JsonException */ public function saveAction(): bool { $eventMessage = EventMessage::build(); $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')); if ($mailEnabled && (empty($mailServer) || empty($mailFrom)) ) { return $this->returnJsonResponse(JsonMessage::JSON_ERROR, __u('Missing Mail parameters')); } if ($mailEnabled) { $configData->setMailRequestsEnabled($mailRequests); $configData->setMailServer($mailServer); $configData->setMailPort($mailPort); $configData->setMailSecurity($mailSecurity); $configData->setMailFrom($mailFrom); $configData->setMailRecipients($mailRecipients); $configData->setMailAuthenabled($mailAuth); $configData->setMailEvents( $this->request->analyzeArray('mail_events', fn($items) => ConfigUtil::eventsAdapter($items), []) ); if ($mailAuth) { $configData->setMailUser($mailUser); if ($mailPass !== '***') { $configData->setMailPass($mailPass); } } if ($configData->isMailEnabled() === false) { $configData->setMailEnabled(true); $eventMessage->addDescription(__u('Mail enabled')); } } elseif ($configData->isMailEnabled()) { $configData->setMailEnabled(false); $configData->setMailRequestsEnabled(false); $configData->setMailAuthenabled(false); $eventMessage->addDescription(__u('Mail disabled')); } else { return $this->returnJsonResponse(JsonMessage::JSON_SUCCESS, __u('No changes')); } return $this->saveConfig( $configData, $this->config, function () use ($eventMessage) { $this->eventDispatcher->notify('save.config.mail', new Event($this, $eventMessage)); } ); } /** * @return void * @throws JsonException * @throws SessionTimeout */ protected function initialize(): void { try { $this->checks(); $this->checkAccess(AclActionsInterface::CONFIG_MAIL); } catch (UnauthorizedPageException $e) { $this->eventDispatcher->notify('exception', new Event($e)); $this->returnJsonResponseException($e); } } }