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

DefaultMailSender   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 65
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Importance

Changes 0
Metric Value
wmc 4
lcom 1
cbo 5
dl 0
loc 65
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 11 1
A send() 0 25 3
1
<?php
2
3
declare(strict_types=1);
4
5
namespace SixtyEightPublishers\User\Common\Mail;
6
7
use Nette;
8
use Contributte;
9
use SixtyEightPublishers;
10
11
final class DefaultMailSender implements IMailSender
12
{
13
	use Nette\SmartObject;
14
15
	/** @var string  */
16
	private $templatesDir;
17
18
	/** @var \SixtyEightPublishers\User\Common\Mail\Address  */
19
	private $from;
20
21
	/** @var array  */
22
	private $subjects;
23
24
	/** @var \Contributte\Mailing\IMailBuilderFactory  */
25
	private $mailBuilderFactory;
26
27
	/**
28
	 * @param string                                         $templatesDir
29
	 * @param \SixtyEightPublishers\User\Common\Mail\Address $from
30
	 * @param array                                          $subjects
31
	 * @param \Contributte\Mailing\IMailBuilderFactory       $mailBuilderFactory
32
	 */
33
	public function __construct(
34
		string $templatesDir,
35
		Address $from,
36
		array $subjects = [],
37
		Contributte\Mailing\IMailBuilderFactory $mailBuilderFactory
38
	) {
39
		$this->templatesDir = rtrim($templatesDir, '\\/');
40
		$this->from = $from;
41
		$this->subjects = $subjects;
42
		$this->mailBuilderFactory = $mailBuilderFactory;
43
	}
44
45
	/*********** interface \SixtyEightPublishers\User\Common\Mail\IMailSender ***********/
46
47
	/**
48
	 * {@inheritdoc}
49
	 */
50
	public function send(string $mailName, array $to, array $args): void
51
	{
52
		$file = $this->templatesDir . '/' . $mailName . '.latte';
53
54
		if (!file_exists($file)) {
55
			throw new SixtyEightPublishers\User\Common\Exception\MailSendingException(sprintf(
56
				'Missing template for mail "%s"',
57
				$mailName
58
			));
59
		}
60
61
		$builder = $this->mailBuilderFactory->create();
62
63
		$builder->getTemplate()->setFile($file);
64
		$builder->setParameters($args);
65
		$builder->setSubject($this->subjects[$mailName] ?? '');
66
		$builder->setFrom($this->from->getEmail(), $this->from->getName());
67
68
		/** @var \SixtyEightPublishers\User\Common\Mail\Address $address */
69
		foreach ($to as $address) {
70
			$builder->addTo($address->getEmail(), $address->getName());
71
		}
72
73
		$builder->send();
74
	}
75
}
76