summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Roach <fisharebest@webtrees.net>2019-09-13 15:19:58 +0100
committerGreg Roach <fisharebest@webtrees.net>2019-09-13 15:19:58 +0100
commit0f97530b568da7b969b729d6803c91fba4652cde (patch)
tree2c137dd9a519052e81348872b7ada6c9c2825f03
parentffc5b228971bb44f87e3f4470ea4100d62228a9a (diff)
downloadwebtrees-0f97530b568da7b969b729d6803c91fba4652cde.tar.gz
webtrees-0f97530b568da7b969b729d6803c91fba4652cde.tar.bz2
webtrees-0f97530b568da7b969b729d6803c91fba4652cde.zip
Refactor Mail into MailService
-rw-r--r--app/Http/Controllers/Admin/UsersController.php13
-rw-r--r--app/Http/Controllers/Auth/ForgotPasswordController.php19
-rw-r--r--app/Http/Controllers/Auth/RegisterController.php14
-rw-r--r--app/Http/Controllers/Auth/VerifyEmailController.php19
-rw-r--r--app/Http/Controllers/MessageController.php13
-rw-r--r--app/Module/ReviewChangesModule.php13
-rw-r--r--app/Services/MailService.php (renamed from app/Mail.php)17
-rw-r--r--tests/app/Http/Controllers/Admin/UsersControllerTest.php17
-rw-r--r--tests/app/Services/MailServiceTest.php (renamed from tests/app/MailTest.php)8
-rw-r--r--tests/feature/UserAdminTest.php11
10 files changed, 105 insertions, 39 deletions
diff --git a/app/Http/Controllers/Admin/UsersController.php b/app/Http/Controllers/Admin/UsersController.php
index 0b935581b9..6e02a41054 100644
--- a/app/Http/Controllers/Admin/UsersController.php
+++ b/app/Http/Controllers/Admin/UsersController.php
@@ -24,9 +24,9 @@ use Fisharebest\Webtrees\FlashMessages;
use Fisharebest\Webtrees\Functions\FunctionsEdit;
use Fisharebest\Webtrees\I18N;
use Fisharebest\Webtrees\Log;
-use Fisharebest\Webtrees\Mail;
use Fisharebest\Webtrees\Module\ModuleThemeInterface;
use Fisharebest\Webtrees\Services\DatatablesService;
+use Fisharebest\Webtrees\Services\MailService;
use Fisharebest\Webtrees\Services\ModuleService;
use Fisharebest\Webtrees\Services\UserService;
use Fisharebest\Webtrees\Site;
@@ -48,6 +48,11 @@ class UsersController extends AbstractAdminController
private const SECONDS_PER_DAY = 24 * 60 * 60;
/**
+ * @var MailService
+ */
+ private $mail_service;
+
+ /**
* @var ModuleService
*/
private $module_service;
@@ -60,11 +65,13 @@ class UsersController extends AbstractAdminController
/**
* UsersController constructor.
*
+ * @param MailService $mail_service
* @param ModuleService $module_service
* @param UserService $user_service
*/
- public function __construct(ModuleService $module_service, UserService $user_service)
+ public function __construct(MailService $mail_service, ModuleService $module_service, UserService $user_service)
{
+ $this->mail_service = $mail_service;
$this->module_service = $module_service;
$this->user_service = $user_service;
}
@@ -392,7 +399,7 @@ class UsersController extends AbstractAdminController
$base_url = $request->getAttribute('base_url');
- Mail::send(
+ $this->mail_service->send(
Auth::user(),
$edit_user,
Auth::user(),
diff --git a/app/Http/Controllers/Auth/ForgotPasswordController.php b/app/Http/Controllers/Auth/ForgotPasswordController.php
index 566b16af57..c53467711f 100644
--- a/app/Http/Controllers/Auth/ForgotPasswordController.php
+++ b/app/Http/Controllers/Auth/ForgotPasswordController.php
@@ -21,7 +21,7 @@ use Fisharebest\Webtrees\FlashMessages;
use Fisharebest\Webtrees\Http\Controllers\AbstractBaseController;
use Fisharebest\Webtrees\I18N;
use Fisharebest\Webtrees\Log;
-use Fisharebest\Webtrees\Mail;
+use Fisharebest\Webtrees\Services\MailService;
use Fisharebest\Webtrees\Services\UserService;
use Fisharebest\Webtrees\Tree;
use Fisharebest\Webtrees\TreeUser;
@@ -36,6 +36,21 @@ use Psr\Http\Message\ServerRequestInterface;
class ForgotPasswordController extends AbstractBaseController
{
/**
+ * @var MailService
+ */
+ private $mail_service;
+
+ /**
+ * MessageController constructor.
+ *
+ * @param MailService $mail_service
+ */
+ public function __construct(MailService $mail_service)
+ {
+ $this->mail_service = $mail_service;
+ }
+
+ /**
* Show a password reset page.
*
* @return ResponseInterface
@@ -70,7 +85,7 @@ class ForgotPasswordController extends AbstractBaseController
Log::addAuthenticationLog('Password request was sent to user: ' . $user->userName());
- Mail::send(
+ $this->mail_service->send(
new TreeUser($tree),
$user,
new TreeUser($tree),
diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php
index f7e97b0a6a..e90ed03556 100644
--- a/app/Http/Controllers/Auth/RegisterController.php
+++ b/app/Http/Controllers/Auth/RegisterController.php
@@ -23,6 +23,7 @@ use Fisharebest\Webtrees\Http\Controllers\AbstractBaseController;
use Fisharebest\Webtrees\I18N;
use Fisharebest\Webtrees\Log;
use Fisharebest\Webtrees\Mail;
+use Fisharebest\Webtrees\Services\MailService;
use Fisharebest\Webtrees\Services\UserService;
use Fisharebest\Webtrees\Site;
use Fisharebest\Webtrees\Tree;
@@ -39,6 +40,11 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class RegisterController extends AbstractBaseController
{
/**
+ * @var MailService
+ */
+ private $mail_service;
+
+ /**
* @var UserService
*/
private $user_service;
@@ -46,10 +52,12 @@ class RegisterController extends AbstractBaseController
/**
* RegisterController constructor.
*
+ * @param MailService $mail_service
* @param UserService $user_service
*/
- public function __construct(UserService $user_service)
+ public function __construct(MailService $mail_service, UserService $user_service)
{
+ $this->mail_service = $mail_service;
$this->user_service = $user_service;
}
@@ -134,7 +142,7 @@ class RegisterController extends AbstractBaseController
// Send a verification message to the user.
/* I18N: %s is a server name/URL */
- Mail::send(
+ $this->mail_service->send(
new TreeUser($tree),
$user,
new TreeUser($tree),
@@ -153,7 +161,7 @@ class RegisterController extends AbstractBaseController
$subject = I18N::translate('New registration at %s', $tree->title());
/* I18N: %s is a server name/URL */
- Mail::send(
+ $this->mail_service->send(
new TreeUser($tree),
$webmaster,
$user,
diff --git a/app/Http/Controllers/Auth/VerifyEmailController.php b/app/Http/Controllers/Auth/VerifyEmailController.php
index c8a8094ee3..a78c0485a2 100644
--- a/app/Http/Controllers/Auth/VerifyEmailController.php
+++ b/app/Http/Controllers/Auth/VerifyEmailController.php
@@ -20,7 +20,7 @@ namespace Fisharebest\Webtrees\Http\Controllers\Auth;
use Fisharebest\Webtrees\Http\Controllers\AbstractBaseController;
use Fisharebest\Webtrees\I18N;
use Fisharebest\Webtrees\Log;
-use Fisharebest\Webtrees\Mail;
+use Fisharebest\Webtrees\Services\MailService;
use Fisharebest\Webtrees\Services\UserService;
use Fisharebest\Webtrees\Tree;
use Fisharebest\Webtrees\TreeUser;
@@ -35,6 +35,21 @@ use Psr\Http\Message\ServerRequestInterface;
class VerifyEmailController extends AbstractBaseController
{
/**
+ * @var MailService
+ */
+ private $mail_service;
+
+ /**
+ * MessageController constructor.
+ *
+ * @param MailService $mail_service
+ */
+ public function __construct(MailService $mail_service)
+ {
+ $this->mail_service = $mail_service;
+ }
+
+ /**
* Respond to a verification link that was emailed to a user.
*
* @param ServerRequestInterface $request
@@ -64,7 +79,7 @@ class VerifyEmailController extends AbstractBaseController
/* I18N: %s is a server name/URL */
$subject = I18N::translate('New user at %s', $base_url . ' ' . $tree->title());
- Mail::send(
+ $this->mail_service->send(
new TreeUser($tree),
$webmaster,
new TreeUser($tree),
diff --git a/app/Http/Controllers/MessageController.php b/app/Http/Controllers/MessageController.php
index e275128f91..d0dbc2389f 100644
--- a/app/Http/Controllers/MessageController.php
+++ b/app/Http/Controllers/MessageController.php
@@ -23,7 +23,7 @@ use Fisharebest\Webtrees\Contracts\UserInterface;
use Fisharebest\Webtrees\FlashMessages;
use Fisharebest\Webtrees\GuestUser;
use Fisharebest\Webtrees\I18N;
-use Fisharebest\Webtrees\Mail;
+use Fisharebest\Webtrees\Services\MailService;
use Fisharebest\Webtrees\Services\UserService;
use Fisharebest\Webtrees\Tree;
use Fisharebest\Webtrees\TreeUser;
@@ -40,6 +40,11 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class MessageController extends AbstractBaseController
{
/**
+ * @var MailService
+ */
+ private $mail_service;
+
+ /**
* @var UserService
*/
private $user_service;
@@ -47,10 +52,12 @@ class MessageController extends AbstractBaseController
/**
* MessageController constructor.
*
+ * @param MailService $mail_service
* @param UserService $user_service
*/
- public function __construct(UserService $user_service)
+ public function __construct(MailService $mail_service, UserService $user_service)
{
+ $this->mail_service = $mail_service;
$this->user_service = $user_service;
}
@@ -410,7 +417,7 @@ class MessageController extends AbstractBaseController
// Send via email
if ($this->sendEmail($recipient)) {
- $success = Mail::send(
+ $success = $this->mail_service->send(
new TreeUser($tree),
$recipient,
$sender,
diff --git a/app/Module/ReviewChangesModule.php b/app/Module/ReviewChangesModule.php
index 30483f7a35..58ab5a5ac2 100644
--- a/app/Module/ReviewChangesModule.php
+++ b/app/Module/ReviewChangesModule.php
@@ -21,7 +21,7 @@ use Fisharebest\Webtrees\Auth;
use Fisharebest\Webtrees\Carbon;
use Fisharebest\Webtrees\GedcomRecord;
use Fisharebest\Webtrees\I18N;
-use Fisharebest\Webtrees\Mail;
+use Fisharebest\Webtrees\Services\MailService;
use Fisharebest\Webtrees\Services\UserService;
use Fisharebest\Webtrees\Site;
use Fisharebest\Webtrees\Tree;
@@ -38,6 +38,11 @@ class ReviewChangesModule extends AbstractModule implements ModuleBlockInterface
use ModuleBlockTrait;
/**
+ * @var MailService
+ */
+ private $mail_service;
+
+ /**
* @var UserService
*/
private $user_service;
@@ -45,10 +50,12 @@ class ReviewChangesModule extends AbstractModule implements ModuleBlockInterface
/**
* ReviewChangesModule constructor.
*
+ * @param MailService $mail_service
* @param UserService $user_service
*/
- public function __construct(UserService $user_service)
+ public function __construct(MailService $mail_service, UserService $user_service)
{
+ $this->mail_service = $mail_service;
$this->user_service = $user_service;
}
@@ -108,7 +115,7 @@ class ReviewChangesModule extends AbstractModule implements ModuleBlockInterface
if ($tmp_tree->hasPendingEdit() && Auth::isManager($tmp_tree, $user)) {
I18N::init($user->getPreference('language'));
- Mail::send(
+ $this->mail_service->send(
new TreeUser($tmp_tree),
$user,
new TreeUser($tmp_tree),
diff --git a/app/Mail.php b/app/Services/MailService.php
index 0ac32b7166..c2b96267ec 100644
--- a/app/Mail.php
+++ b/app/Services/MailService.php
@@ -15,10 +15,12 @@
*/
declare(strict_types=1);
-namespace Fisharebest\Webtrees;
+namespace Fisharebest\Webtrees\Services;
use Exception;
use Fisharebest\Webtrees\Contracts\UserInterface;
+use Fisharebest\Webtrees\Log;
+use Fisharebest\Webtrees\Site;
use Swift_Mailer;
use Swift_Message;
use Swift_NullTransport;
@@ -29,7 +31,7 @@ use Swift_Transport;
/**
* Send mail messages.
*/
-class Mail
+class MailService
{
/**
* Send an external email message
@@ -44,23 +46,24 @@ class Mail
*
* @return bool
*/
- public static function send(UserInterface $from, UserInterface $to, UserInterface $reply_to, $subject, $message_text, $message_html): bool
+ public function send(UserInterface $from, UserInterface $to, UserInterface $reply_to, string $subject, string $message_text, string $message_html): bool
{
try {
$message_text = preg_replace('/\r?\n/', "\r\n", $message_text);
$message_html = preg_replace('/\r?\n/', "\r\n", $message_html);
- $message = (new Swift_Message($subject))
+ $message = (new Swift_Message())
+ ->setSubject($subject)
->setFrom($from->email(), $from->realName())
->setTo($to->email(), $to->realName())
->setReplyTo($reply_to->email(), $reply_to->realName())
->setBody($message_html, 'text/html')
->addPart($message_text, 'text/plain');
- $mailer = new Swift_Mailer(self::transport());
+ $mailer = new Swift_Mailer($this->transport());
$mailer->send($message);
} catch (Exception $ex) {
- Log::addErrorLog('Mail: ' . $ex->getMessage());
+ Log::addErrorLog('MailService: ' . $ex->getMessage());
return false;
}
@@ -73,7 +76,7 @@ class Mail
*
* @return Swift_Transport
*/
- public static function transport(): Swift_Transport
+ private function transport(): Swift_Transport
{
switch (Site::getPreference('SMTP_ACTIVE')) {
case 'sendmail':
diff --git a/tests/app/Http/Controllers/Admin/UsersControllerTest.php b/tests/app/Http/Controllers/Admin/UsersControllerTest.php
index 6e557e3980..62239a9c2c 100644
--- a/tests/app/Http/Controllers/Admin/UsersControllerTest.php
+++ b/tests/app/Http/Controllers/Admin/UsersControllerTest.php
@@ -19,6 +19,7 @@ namespace Fisharebest\Webtrees\Http\Controllers\Admin;
use Fisharebest\Webtrees\Auth;
use Fisharebest\Webtrees\Services\DatatablesService;
+use Fisharebest\Webtrees\Services\MailService;
use Fisharebest\Webtrees\Services\ModuleService;
use Fisharebest\Webtrees\Services\UserService;
use Fisharebest\Webtrees\TestCase;
@@ -38,7 +39,7 @@ class UsersControllerTest extends TestCase
*/
public function testIndex(): void
{
- $controller = new UsersController(new ModuleService(), new UserService());
+ $controller = new UsersController(new MailService(), new ModuleService(), new UserService());
$request = self::createRequest('GET', ['route' => 'admin-users']);
$response = $controller->index($request, Auth::user());
@@ -50,7 +51,7 @@ class UsersControllerTest extends TestCase
*/
public function testData(): void
{
- $controller = new UsersController(new ModuleService(), new UserService());
+ $controller = new UsersController(new MailService(), new ModuleService(), new UserService());
$request = self::createRequest('GET', ['route' => 'admin-users-data']);
$response = $controller->data(new DatatablesService(), $request, Auth::User());
@@ -62,7 +63,7 @@ class UsersControllerTest extends TestCase
*/
public function testCreate(): void
{
- $controller = new UsersController(new ModuleService(), new UserService());
+ $controller = new UsersController(new MailService(), new ModuleService(), new UserService());
$request = self::createRequest('GET', ['route' => 'admin-users-create']);
$response = $controller->create($request);
@@ -74,7 +75,7 @@ class UsersControllerTest extends TestCase
*/
public function testSave(): void
{
- $controller = new UsersController(new ModuleService(), new UserService());
+ $controller = new UsersController(new MailService(), new ModuleService(), new UserService());
$request = self::createRequest('POST', ['route' => 'admin-users-create'], [
'username' => 'User name',
'email' => 'email@example.com',
@@ -92,7 +93,7 @@ class UsersControllerTest extends TestCase
public function testEdit(): void
{
$user = (new UserService())->create('user', 'real', 'email', 'pass');
- $controller = new UsersController(new ModuleService(), new UserService());
+ $controller = new UsersController(new MailService(), new ModuleService(), new UserService());
$request = self::createRequest('GET', ['route' => 'admin-users-edit', 'user_id' => (string) $user->id()]);
$response = $controller->edit($request);
@@ -106,7 +107,7 @@ class UsersControllerTest extends TestCase
{
/** @var User $user */
$user = (new UserService())->create('user', 'real', 'email', 'pass');
- $controller = new UsersController(new ModuleService(), new UserService());
+ $controller = new UsersController(new MailService(), new ModuleService(), new UserService());
$request = self::createRequest('POST', ['route' => 'admin-users-edit'], [
'user_id' => $user->id(),
'username' => '',
@@ -134,7 +135,7 @@ class UsersControllerTest extends TestCase
*/
public function testCleanup(): void
{
- $controller = new UsersController(new ModuleService(), new UserService());
+ $controller = new UsersController(new MailService(), new ModuleService(), new UserService());
$request = self::createRequest('GET', ['route' => 'admin-users-cleanup']);
$response = $controller->cleanup($request);
@@ -146,7 +147,7 @@ class UsersControllerTest extends TestCase
*/
public function testCleanupAction(): void
{
- $controller = new UsersController(new ModuleService(), new UserService());
+ $controller = new UsersController(new MailService(), new ModuleService(), new UserService());
$request = self::createRequest('POST', ['route' => 'admin-users-cleanup']);
$response = $controller->cleanupAction($request);
diff --git a/tests/app/MailTest.php b/tests/app/Services/MailServiceTest.php
index 5793c7edb6..46f9ebf47c 100644
--- a/tests/app/MailTest.php
+++ b/tests/app/Services/MailServiceTest.php
@@ -17,10 +17,12 @@ declare(strict_types=1);
namespace Fisharebest\Webtrees;
+use Fisharebest\Webtrees\Services\MailService;
+
/**
- * Test harness for the class Mail
+ * Test harness for the class MailService
*/
-class MailTest extends TestCase
+class MailServiceTest extends TestCase
{
/**
* Test that the class exists
@@ -29,6 +31,6 @@ class MailTest extends TestCase
*/
public function testClassExists(): void
{
- $this->assertTrue(class_exists(\Fisharebest\Webtrees\Mail::class));
+ $this->assertTrue(class_exists(MailService::class));
}
}
diff --git a/tests/feature/UserAdminTest.php b/tests/feature/UserAdminTest.php
index 628d4e8138..ff23a380a8 100644
--- a/tests/feature/UserAdminTest.php
+++ b/tests/feature/UserAdminTest.php
@@ -19,6 +19,7 @@ namespace Fisharebest\Webtrees;
use Fisharebest\Webtrees\Http\Controllers\Admin\UsersController;
use Fisharebest\Webtrees\Services\DatatablesService;
+use Fisharebest\Webtrees\Services\MailService;
use Fisharebest\Webtrees\Services\ModuleService;
use Fisharebest\Webtrees\Services\UserService;
use Nyholm\Psr7\ServerRequest;
@@ -46,7 +47,7 @@ class UserAdminTest extends TestCase
'length' => '10',
]);
- $controller = new UsersController(new ModuleService(), new UserService());
+ $controller = new UsersController(new MailService(), new ModuleService(), new UserService());
$response = $controller->data(new DatatablesService(), $request, $admin);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
$this->assertSame('application/json', $response->getHeaderLine('Content-Type'));
@@ -75,7 +76,7 @@ class UserAdminTest extends TestCase
$request = $request->withQueryParams(['search' => ['value' => 'admin']]);
app()->instance(ServerRequestInterface::class, $request);
- $controller = new UsersController(new ModuleService(), new UserService());
+ $controller = new UsersController(new MailService(), new ModuleService(), new UserService());
$response = $controller->data(new DatatablesService(), $request, $admin);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -105,7 +106,7 @@ class UserAdminTest extends TestCase
$request = $request->withQueryParams(['length' => 1]);
app()->instance(ServerRequestInterface::class, $request);
- $controller = new UsersController(new ModuleService(), new UserService());
+ $controller = new UsersController(new MailService(), new ModuleService(), new UserService());
$response = $controller->data(new DatatablesService(), $request, $admin);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -131,7 +132,7 @@ class UserAdminTest extends TestCase
$request = $request->withQueryParams(['column' => 2, 'dir' => 'asc']);
app()->instance(ServerRequestInterface::class, $request);
- $controller = new UsersController(new ModuleService(), new UserService());
+ $controller = new UsersController(new MailService(), new ModuleService(), new UserService());
$response = $controller->data(new DatatablesService(), $request, $admin);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -146,7 +147,7 @@ class UserAdminTest extends TestCase
$request = $request->withQueryParams(['order' => [['column' => 2, 'dir' => 'desc']]]);
app()->instance(ServerRequestInterface::class, $request);
- $controller = new UsersController(new ModuleService(), new UserService());
+ $controller = new UsersController(new MailService(), new ModuleService(), new UserService());
$response = $controller->data(new DatatablesService(), $request, $admin);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());