Completed
Pull Request — master (#2)
by Tomáš
09:22
created

PasswordRequestSender::logError()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace SixtyEightPublishers\User\ForgotPassword\PasswordRequest;
6
7
use Nette;
8
use SixtyEightPublishers;
9
10
class PasswordRequestSender implements IPasswordRequestSender
11
{
12
	use Nette\SmartObject;
13
14
	/** @var \SixtyEightPublishers\User\ForgotPassword\PasswordRequest\IPasswordRequestFactory  */
15
	private $passwordRequestFactory;
16
17
	/** @var \SixtyEightPublishers\User\ForgotPassword\Mail\IForgotPasswordResetEmail  */
18
	private $forgotPasswordResetEmail;
19
20
	/** @var \SixtyEightPublishers\User\ForgotPassword\Mail\IForgotPasswordNotRegisteredEmail  */
21
	private $forgotPasswordNotRegisteredEmail;
22
23
	/** @var \SixtyEightPublishers\User\Common\Logger\ILogger  */
24
	protected $logger;
25
26
	/**
27
	 * @param \SixtyEightPublishers\User\ForgotPassword\PasswordRequest\IPasswordRequestFactory $passwordRequestFactory
28
	 * @param \SixtyEightPublishers\User\Common\Logger\ILogger                                  $logger
29
	 * @param \SixtyEightPublishers\User\ForgotPassword\Mail\IForgotPasswordResetEmail          $forgotPasswordResetEmail
30
	 * @param \SixtyEightPublishers\User\ForgotPassword\Mail\IForgotPasswordNotRegisteredEmail  $forgotPasswordNotRegisteredEmail
31
	 */
32
	public function __construct(
33
		IPasswordRequestFactory $passwordRequestFactory,
34
		SixtyEightPublishers\User\Common\Logger\ILogger $logger,
35
		SixtyEightPublishers\User\ForgotPassword\Mail\IForgotPasswordResetEmail $forgotPasswordResetEmail,
36
		SixtyEightPublishers\User\ForgotPassword\Mail\IForgotPasswordNotRegisteredEmail $forgotPasswordNotRegisteredEmail
37
	) {
38
		$this->passwordRequestFactory = $passwordRequestFactory;
39
		$this->logger = $logger;
40
		$this->forgotPasswordResetEmail = $forgotPasswordResetEmail;
41
		$this->forgotPasswordNotRegisteredEmail = $forgotPasswordNotRegisteredEmail;
42
	}
43
44
	/**
45
	 * @param string $email
46
	 * @param string $mailClassName
47
	 *
48
	 * @return void
49
	 */
50
	protected function logSentEmail(string $email, string $mailClassName): void
51
	{
52
		$this->logger->info(sprintf(
53
			'Mail %s was successfully sent to %s',
54
			$mailClassName,
55
			$email
56
		));
57
	}
58
59
	/**
60
	 * @param \Throwable $e
61
	 *
62
	 * @return void
63
	 */
64
	protected function logError(\Throwable $e): void
65
	{
66
		$this->logger->error((string) $e);
67
	}
68
69
	/**
70
	 * @param \SixtyEightPublishers\User\ForgotPassword\DoctrineEntity\IPasswordRequest $request
71
	 *
72
	 * @return void
73
	 */
74
	protected function sendForgotPasswordResetEmail(SixtyEightPublishers\User\ForgotPassword\DoctrineEntity\IPasswordRequest $request): void
75
	{
76
		$this->forgotPasswordResetEmail->send($request);
77
		$this->logSentEmail($request->getUser()->getEmail(), get_class($this->forgotPasswordResetEmail));
78
	}
79
80
	/**
81
	 * @param string $email
82
	 *
83
	 * @return void
84
	 */
85
	protected function sendForgotPasswordNotRegisteredEmail(string $email): void
86
	{
87
		$this->forgotPasswordNotRegisteredEmail->send($email);
88
		$this->logSentEmail($email, get_class($this->forgotPasswordNotRegisteredEmail));
89
	}
90
91
	/*********** interface \SixtyEightPublishers\User\ForgotPassword\IPasswordRequestSender ***********/
92
93
	/**
94
	 * @param string $email
95
	 *
96
	 * @return \SixtyEightPublishers\User\ForgotPassword\DoctrineEntity\IPasswordRequest
97
	 */
98
	public function send(string $email): ?SixtyEightPublishers\User\ForgotPassword\DoctrineEntity\IPasswordRequest
99
	{
100
		try {
101
			$this->forgotPasswordResetEmail->send(
102
				$request = $this->passwordRequestFactory->create($email)
103
			);
104
		} catch (SixtyEightPublishers\User\ForgotPassword\Exception\PasswordRequestCreationException $e) {
105
			if (!$e->isNotRegisteredEmail()) {
106
				$this->logError($e);
107
108
				throw $e;
109
			}
110
111
			try {
112
				$this->forgotPasswordNotRegisteredEmail->send($email);
113
			} catch (\Throwable $e) {
114
				$this->logError($e);
115
116
				throw SixtyEightPublishers\User\ForgotPassword\Exception\PasswordRequestCreationException::from($e);
117
			}
118
		} catch (\Throwable $e) {
119
			throw SixtyEightPublishers\User\ForgotPassword\Exception\PasswordRequestCreationException::from($e);
120
		}
121
122
		return $request ?? NULL;
123
	}
124
}
125