diff options
| author | Greg Roach <fisharebest@webtrees.net> | 2019-09-13 15:19:58 +0100 |
|---|---|---|
| committer | Greg Roach <fisharebest@webtrees.net> | 2019-09-13 15:19:58 +0100 |
| commit | 0f97530b568da7b969b729d6803c91fba4652cde (patch) | |
| tree | 2c137dd9a519052e81348872b7ada6c9c2825f03 | |
| parent | ffc5b228971bb44f87e3f4470ea4100d62228a9a (diff) | |
| download | webtrees-0f97530b568da7b969b729d6803c91fba4652cde.tar.gz webtrees-0f97530b568da7b969b729d6803c91fba4652cde.tar.bz2 webtrees-0f97530b568da7b969b729d6803c91fba4652cde.zip | |
Refactor Mail into MailService
| -rw-r--r-- | app/Http/Controllers/Admin/UsersController.php | 13 | ||||
| -rw-r--r-- | app/Http/Controllers/Auth/ForgotPasswordController.php | 19 | ||||
| -rw-r--r-- | app/Http/Controllers/Auth/RegisterController.php | 14 | ||||
| -rw-r--r-- | app/Http/Controllers/Auth/VerifyEmailController.php | 19 | ||||
| -rw-r--r-- | app/Http/Controllers/MessageController.php | 13 | ||||
| -rw-r--r-- | app/Module/ReviewChangesModule.php | 13 | ||||
| -rw-r--r-- | app/Services/MailService.php (renamed from app/Mail.php) | 17 | ||||
| -rw-r--r-- | tests/app/Http/Controllers/Admin/UsersControllerTest.php | 17 | ||||
| -rw-r--r-- | tests/app/Services/MailServiceTest.php (renamed from tests/app/MailTest.php) | 8 | ||||
| -rw-r--r-- | tests/feature/UserAdminTest.php | 11 |
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()); |
