Skip to content

Commit

Permalink
Merge pull request #4 from GuySartorelli/pulls/master/cms5-compat
Browse files Browse the repository at this point in the history
CMS 5 compatibility
  • Loading branch information
sig-steve authored Aug 8, 2023
2 parents c7086c7 + 775d8d5 commit c93a6e9
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 79 deletions.
16 changes: 8 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,26 +1,26 @@
# Mailblock

Adds email redirection options to the CMS.

## Requirements
* [SilverStripe CMS ^4](https://github.com/silverstripe/silverstripe-cms)

* [SilverStripe admin ^5](https://github.com/silverstripe/silverstripe-admin)

SilverStripe 4 support is available in the [2.0 branch](https://github.com/signify-nz/silverstripe-mailblock/tree/2.0)
SilverStripe 3 support is available in the [1.0 branch](https://github.com/signify-nz/silverstripe-mailblock/tree/1.0)

## Installation
__Composer (recommended):__

```
composer require signify-nz/silverstripe-mailblock
```

If you prefer you may also install manually:
* Download the module from here https://github.com/signify-nz/silverstripe-mailblock/archive/master.zip
* Extract the downloaded archive into your site root so that the destination folder is called silverstripe-mailblock.
* Run dev/build?flush to regenerate the manifest

## Usage

All options are in the Settings -> Mailblock section of the CMS. Only users with the "Access to 'Mailblock' settings" permission will be able to configure Mailblock.

## Limitations
This module works by adding an additional SwiftMailer (the Mailer included with SilverStripe) plugin. If you are using a custom mailer, no email recipient rewritting will take place.

This module works by adding an additional Symfony mailer (the Mailer included with SilverStripe) event subscriber. If you are using a custom mailer, no email recipient rewriting will take place.

[User Guide](/docs/en/user_guide.md)
11 changes: 7 additions & 4 deletions _config/config.yml
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
---
Name: mailblockconfig
After:
- '#emailconfig'
- '#mailer'
---
SilverStripe\SiteConfig\SiteConfig:
extensions:
- Mailblock\extensions\MailblockSiteConfig

SilverStripe\SiteConfig\SiteConfigLeftAndMain:
extensions:
- Mailblock\extensions\MailblockSiteConfigLeftAndMain
SilverStripe\Control\Email\SwiftMailer:
swift_plugins:
- Mailblock\Email\MailblockPlugin

SilverStripe\Core\Injector\Injector:
Symfony\Component\EventDispatcher\EventDispatcherInterface.mailer:
calls:
- [addSubscriber, ['%$Mailblock\Email\MailblockMailSubscriber']]
Original file line number Diff line number Diff line change
Expand Up @@ -2,65 +2,70 @@

namespace Mailblock\Email;

use SilverStripe\SiteConfig\SiteConfig;
use SilverStripe\Control\Email\Email;
use SilverStripe\Control\Email\SwiftPlugin;
use SilverStripe\Control\Director;
use SilverStripe\Control\Email\Email;
use SilverStripe\SiteConfig\SiteConfig;
use SilverStripe\Subsites\Model\Subsite;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Mailer\Event\MessageEvent;

/**
* Mail plugin to rewrite email recipients depending on Mailblock SiteConfig settings.
* See https://symfony.com/doc/current/mailer.html#mailer-events for further info
*/
class MailblockPlugin extends SwiftPlugin
class MailblockMailSubscriber implements EventSubscriberInterface
{
/**
* Before sending a message make sure all our overrides are taken into account
*
* @param \Swift_Events_SendEvent $evt
*/
public function beforeSendPerformed(\Swift_Events_SendEvent $evt)
public static function getSubscribedEvents()
{
return [
MessageEvent::class => 'onMessage',
];
}

public function onMessage(MessageEvent $event): void
{
/** @var \Swift_Message $message */
$message = $evt->getMessage();
/** @var Email $message */
$message = $event->getMessage();

// Get the correct siteconfig.
if (class_exists(Subsite::class)) {
$mainSiteConfig = SiteConfig::get()->filter('SubsiteID', 0)->first();
}
else {
} else {
$mainSiteConfig = SiteConfig::current_site_config();
}
if ($mainSiteConfig->getField('MailblockApplyPerSubsite')) {
$siteConfig = SiteConfig::current_site_config();
}
else {
} else {
$siteConfig = $mainSiteConfig;
}

// Get the mailblock configuration values.
$enabled = $siteConfig->getField('MailblockEnabled');
$enabledOnLive = $siteConfig->getField('MailblockEnabledOnLive');
$overrideConfiguration = $siteConfig
->getField('MailblockOverrideConfiguration');
$overrideConfiguration = $siteConfig->getField('MailblockOverrideConfiguration');
$sendAllTo = Email::getSendAllEmailsTo();

if($enabled && ($enabledOnLive || !Director::isLive())
if ($enabled
&& ($enabledOnLive || !Director::isLive())
&& (!$sendAllTo || $overrideConfiguration)
) {
$recipients = '';
$ccRecipients = '';
$bccRecipients = '';
$recipients = [];
$ccRecipients = [];
$bccRecipients = [];

$subject = $message->getSubject();
if (!empty($to = $message->getTo())) {
$recipients = implode(',', array_keys($to));
}
if (!empty($cc = $message->getCc())) {
$ccRecipients = implode(',', array_keys($cc));
}
if (!empty($bcc = $message->getBcc())) {
$bccRecipients = implode(',', array_keys($bcc));
}
foreach ($message->getTo() as $to) {
$recipients[] = $to->getAddress();
}
foreach ($message->getCc() as $cc) {
$ccRecipients[] = $cc->getAddress();
}
foreach ($message->getBcc() as $bcc) {
$bccRecipients[] = $bcc->getAddress();
}

$recipients = implode(',', $recipients);
$ccRecipients = implode(',', $ccRecipients);
$bccRecipients = implode(',', $bccRecipients);

$mailblockRecipients = $siteConfig->getField('MailblockRecipients');

Expand All @@ -74,8 +79,8 @@ public function beforeSendPerformed(\Swift_Events_SendEvent $evt)
// to the new recipients list.
$mailblockWhitelist = $siteConfig->getField('MailblockWhitelist');
$whitelist = !empty($mailblockWhitelist) ? preg_split("/\r\n|\n|\r/", $mailblockWhitelist) : [];
$cc = array();
$bcc = array();
$cc = [];
$bcc = [];
foreach ($whitelist as $whiteListed) {
if (!empty($whiteListed)) {
if (strpos($recipients, $whiteListed) !== false) {
Expand All @@ -94,29 +99,5 @@ public function beforeSendPerformed(\Swift_Events_SendEvent $evt)
$message->setBcc($bcc);
$message->setCc($cc);
}
else {
if (!empty($sendAllTo)) {
$this->setTo($message, $sendAllTo);
}

$ccAllTo = Email::getCCAllEmailsTo();
if (!empty($ccAllTo)) {
foreach ($ccAllTo as $address => $name) {
$message->addCc($address, $name);
}
}

$bccAllTo = Email::getBCCAllEmailsTo();
if (!empty($bccAllTo)) {
foreach ($bccAllTo as $address => $name) {
$message->addBcc($address, $name);
}
}
}

$sendAllFrom = Email::getSendAllEmailsFrom();
if (!empty($sendAllFrom)) {
$this->setFrom($message, $sendAllFrom);
}
}
}
14 changes: 7 additions & 7 deletions code/extensions/MailblockSiteConfigLeftAndMain.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,12 @@ public function mailblockTestEmail($data, $form){
$siteConfig = SiteConfig::current_site_config();
}

$to = $siteConfig->getField('MailblockTestTo');
$from = $siteConfig->getField('MailblockTestFrom');
$subject = $siteConfig->getField('MailblockTestSubject');
$body = $siteConfig->getField('MailblockTestBody');
$cc = $siteConfig->getField('MailblockTestCc');
$bcc = $siteConfig->getField('MailblockTestBcc');
$to = $siteConfig->getField('MailblockTestTo') ?? '';
$from = $siteConfig->getField('MailblockTestFrom') ?? '';
$subject = $siteConfig->getField('MailblockTestSubject') ?? '';
$body = $siteConfig->getField('MailblockTestBody') ?? '';
$cc = $siteConfig->getField('MailblockTestCc') ?? '';
$bcc = $siteConfig->getField('MailblockTestBcc') ?? '';
$email = new Email($from, $to, $subject, $body, $cc, $bcc);
$email->send();

Expand All @@ -48,4 +48,4 @@ public function mailblockTestEmail($data, $form){
return $this->owner->getResponseNegotiator()
->respond($this->owner->request);
}
}
}
4 changes: 2 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
"issues": "http://github.com/signify-nz/silverstripe-mailblock/issues"
},
"require": {
"silverstripe/framework": "^4",
"silverstripe/siteconfig": "^4"
"silverstripe/framework": "^5",
"silverstripe/siteconfig": "^5"
},
"extra": {
"expose": [
Expand Down

0 comments on commit c93a6e9

Please sign in to comment.