diff --git a/code/web/interface/themes/responsive/DataObjectUtil/property.tpl b/code/web/interface/themes/responsive/DataObjectUtil/property.tpl index 9ff3938f71..7fd26bc4a4 100644 --- a/code/web/interface/themes/responsive/DataObjectUtil/property.tpl +++ b/code/web/interface/themes/responsive/DataObjectUtil/property.tpl @@ -569,6 +569,8 @@ {/if} {/foreach} + {elseif $property.type == 'sortableList'} + {include file="DataObjectUtil/sortableList.tpl"} {/if} diff --git a/code/web/interface/themes/responsive/DataObjectUtil/sortableList.tpl b/code/web/interface/themes/responsive/DataObjectUtil/sortableList.tpl new file mode 100644 index 0000000000..5a9d50fd92 --- /dev/null +++ b/code/web/interface/themes/responsive/DataObjectUtil/sortableList.tpl @@ -0,0 +1,111 @@ +{strip} +
    + {foreach from=$property.values item=propertyName key=propertyValue} +
  1. {$propertyName|escape}
  2. + {/foreach} +
+ + + \ No newline at end of file diff --git a/code/web/release_notes/24.07.00.MD b/code/web/release_notes/24.07.00.MD index d68f76c8be..83926fbc8a 100644 --- a/code/web/release_notes/24.07.00.MD +++ b/code/web/release_notes/24.07.00.MD @@ -18,6 +18,7 @@ // pedro - Added a new feature: SMTP setting. This allows for SMTP configuration to be utilized when sending e-mails from Aspen. +- Added a new feature: System variable 'preferredMailSender'. This allows for ordering the different mail senders (SMTP, SendGrid, AmazonSES) to set the priority order in which they should be used. // other diff --git a/code/web/sys/DBMaintenance/version_updates/24.07.00.php b/code/web/sys/DBMaintenance/version_updates/24.07.00.php index ad9bbd9cbb..050d4100d3 100644 --- a/code/web/sys/DBMaintenance/version_updates/24.07.00.php +++ b/code/web/sys/DBMaintenance/version_updates/24.07.00.php @@ -50,6 +50,15 @@ function getUpdates24_07_00(): array { ], ], //permissions_create_administer_smtp + 'systemVariables_preferredMailSender' => [ + 'title' => 'System Variables - Preferred Mail Sender', + 'description' => 'Allow sortable configuration of which mail sender to use by order of priority.', + 'sql' => [ + "alter table system_variables ADD COLUMN preferredMailSender varchar(128) DEFAULT 'SMTP|AmazonSES|SendGrid'", + ], + ], + //systemVariables_preferredMailSender + //other diff --git a/code/web/sys/DataObjectUtil.php b/code/web/sys/DataObjectUtil.php index 8b907e2b90..7c34222c3f 100644 --- a/code/web/sys/DataObjectUtil.php +++ b/code/web/sys/DataObjectUtil.php @@ -575,6 +575,8 @@ static function processProperty(DataObject $object, $property) { } $object->$propertyName = $values; + } elseif ($property['type'] == 'sortableList') { + $object->setProperty($propertyName, $_REQUEST[$propertyName], $property); } } } \ No newline at end of file diff --git a/code/web/sys/Email/Mailer.php b/code/web/sys/Email/Mailer.php index e4fbd2e53b..fe2c12cfa9 100644 --- a/code/web/sys/Email/Mailer.php +++ b/code/web/sys/Email/Mailer.php @@ -22,20 +22,17 @@ public function send($to, $subject, $body, $replyTo = null, $htmlBody = null, $a require_once ROOT_DIR . '/sys/Email/AmazonSesSetting.php'; require_once ROOT_DIR . '/sys/Email/SMTPSetting.php'; require_once ROOT_DIR . '/sys/CurlWrapper.php'; + require_once ROOT_DIR . '/sys/SystemVariables.php'; //TODO: Do validation of the address - $amazonSesSettings = new AmazonSesSetting(); - $smtpServerSettings = new SMTPSetting(); - if($smtpServerSettings->find(true)) { - $result = $this->sendViaSMTP($smtpServerSettings, $to, $replyTo, $subject, $body, $htmlBody, $attachments); - }elseif ($amazonSesSettings->find(true)) { - $result = $this->sendViaAmazonSes($amazonSesSettings, $to, $replyTo, $subject, $body, $htmlBody, $attachments); - } else { - $sendGridSettings = new SendGridSetting(); - if ($sendGridSettings->find(true)) { - $result = $this->sendViaSendGrid($sendGridSettings, $to, $replyTo, $subject, $body, $htmlBody); - } else { - $result = false; + $systemVariables = new SystemVariables(); + if ($systemVariables->find(true) && !empty($systemVariables->preferredMailSender)) { + $mailSenders = explode("|", $systemVariables->preferredMailSender); + foreach ($mailSenders as $mailSender){ + $result = $this->sendViaAbstractSender($mailSender, $to, $replyTo, $subject, $body, $htmlBody, $attachments); + if ($result) { + break; + } } } @@ -145,4 +142,25 @@ private function sendViaAmazonSes(AmazonSesSetting $amazonSesSettings, string $t private function sendViaSMTP(SMTPSetting $smtpSettings, string $to, ?string $replyTo, string $subject, ?string $body, ?string $htmlBody, ?array $attachments): bool { return $smtpSettings->sendEmail($to, $replyTo, $subject, $body, $htmlBody, $attachments); } + + private function sendViaAbstractSender($mailSender, $to, $replyTo, $subject, $body, $htmlBody, $attachments) { + $result = false; + if($mailSender == 'AmazonSES') { + $amazonSesSettings = new AmazonSesSetting(); + if($amazonSesSettings->find(true)){ + $result = $this->sendViaAmazonSes($amazonSesSettings, $to, $replyTo, $subject, $body, $htmlBody, $attachments); + } + } else if($mailSender == 'SendGrid') { + $sendGridSettings = new SendGridSetting(); + if($sendGridSettings->find(true)){ + $result = $this->sendViaSendGrid($sendGridSettings, $to, $replyTo, $subject, $body, $htmlBody); + } + } else if($mailSender == 'SMTP') { + $smtpSettings = new SMTPSetting(); + if($smtpSettings->find(true)){ + $result = $this->sendViaSMTP($smtpSettings, $to, $replyTo, $subject, $body, $htmlBody, $attachments); + } + } + return $result; + } } \ No newline at end of file diff --git a/code/web/sys/SystemVariables.php b/code/web/sys/SystemVariables.php index 8c0542e5bc..82ab838db9 100644 --- a/code/web/sys/SystemVariables.php +++ b/code/web/sys/SystemVariables.php @@ -7,6 +7,7 @@ class SystemVariables extends DataObject { public $errorEmail; public $ticketEmail; public $searchErrorEmail; + public $preferredMailSender; public $loadCoversFrom020z; public $currencyCode; public $runNightlyFullIndex; @@ -59,26 +60,46 @@ static function getObjectStructure($context = ''): array { 'description' => 'URL of the community content server', 'maxLength' => 128, ], - 'errorEmail' => [ - 'property' => 'errorEmail', - 'type' => 'text', - 'label' => 'Error Email Address', - 'description' => 'Email Address to send errors to', - 'maxLength' => 128, - ], - 'ticketEmail' => [ - 'property' => 'ticketEmail', - 'type' => 'text', - 'label' => 'Ticket Email Address', - 'description' => 'Email Address to send tickets from administrators to', - 'maxLength' => 128, - ], - 'searchErrorEmail' => [ - 'property' => 'searchErrorEmail', - 'type' => 'text', - 'label' => 'Search Error Email Address', - 'description' => 'Email Address to send errors to', - 'maxLength' => 128, + 'emailSection' => [ + 'property' => 'emailSection', + 'type' => 'section', + 'label' => 'Email Settings', + 'hideInLists' => true, + 'expandByDefault' => true, + 'properties' => [ + 'errorEmail' => [ + 'property' => 'errorEmail', + 'type' => 'text', + 'label' => 'Error Email Address', + 'description' => 'Email Address to send errors to', + 'maxLength' => 128, + ], + 'ticketEmail' => [ + 'property' => 'ticketEmail', + 'type' => 'text', + 'label' => 'Ticket Email Address', + 'description' => 'Email Address to send tickets from administrators to', + 'maxLength' => 128, + ], + 'searchErrorEmail' => [ + 'property' => 'searchErrorEmail', + 'type' => 'text', + 'label' => 'Search Error Email Address', + 'description' => 'Email Address to send errors to', + 'maxLength' => 128, + ], + 'preferredMailSender' => [ + 'property' => 'preferredMailSender', + 'type' => 'sortableList', + 'values' => [ + 'AmazonSES' => 'AmazonSES', + 'SendGrid' => 'SendGrid', + 'SMTP' => 'SMTP', + ], + 'label' => 'Preferred Mail Sender Order', + 'description' => 'Sort order of preferred mail sender', + ], + ] ], 'googleBucket' => [ 'property' => 'googleBucket', diff --git a/install/aspen.sql b/install/aspen.sql index b96acb6881..98f86fd97f 100644 --- a/install/aspen.sql +++ b/install/aspen.sql @@ -4949,6 +4949,7 @@ CREATE TABLE `system_variables` ( `errorEmail` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `ticketEmail` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `searchErrorEmail` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `preferredMailSender` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'SMTP|AmazonSES|SendGrid', `loadCoversFrom020z` tinyint(1) DEFAULT '0', `runNightlyFullIndex` tinyint(1) DEFAULT '0', `currencyCode` char(3) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'USD',