Completed
Push — master ( bd16f4...0028da )
by Milan
02:56
created

MailManagerExtension::buildLayoutFactory()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 6
nc 1
nop 3
dl 0
loc 8
rs 10
c 0
b 0
f 0
1
<?php declare(strict_types=1);
2
3
namespace h4kuna\MailManager\DI;
4
5
use h4kuna\MailManager;
6
use Nette\DI as NDI;
7
8
class MailManagerExtension extends NDI\CompilerExtension
9
{
10
11
	private $defaults = [
12
		// mail manager
13
		'assetsDir' => '',
14
		// layout
15
		'templateDir' => '',
16
		'plainMacro' => '{file}-plain', // plain/%file% or plain-%file%
17
		// template factory
18
		'globalVars' => [],
19
		// message
20
		'from' => '',
21
		'returnPath' => '',
22
		// file mailer
23
		'debugMode' => false,
24
		'tempDir' => '/tmp',
25
		'live' => '1 minute',
26
	];
27
28
	public function loadConfiguration()
29
	{
30
		$builder = $this->getContainerBuilder();
31
		$config = $this->validateConfig($this->defaults);
32
33
		$this->buildMessageFactory($builder, (string) $config['from'], (string) $config['returnPath']);
34
35
		$this->buildTemplateFactory($builder, $config['globalVars']);
36
37
		$mailer = $this->buildMailer($builder, $config['debugMode'], $config['tempDir'], $config['live']);
38
39
		$this->buildLayoutFactory($builder, (string) $config['templateDir'], $config['plainMacro']);
40
41
		$this->buildMailManager($builder, $mailer, (string) $config['assetsDir']);
42
	}
43
44
45
	private function buildMessageFactory(NDI\ContainerBuilder $builder, string $from, string $returnPath): void
46
	{
47
		$builder->addDefinition($this->prefix('messageFactory'))
48
			->setFactory(MailManager\Message\MessageFactory::class)
49
			->setArguments([$from, $returnPath])
50
			->setAutowired(false);
51
	}
52
53
54
	private function buildTemplateFactory(NDI\ContainerBuilder $builder, array $globalVars): void
55
	{
56
		$builder->addDefinition($this->prefix('templateFactory'))
57
			->setFactory(MailManager\Template\TemplateFactory::class)
58
			->addSetup('setVariables', [$globalVars])
59
			->setAutowired(false);
60
	}
61
62
63
	private function buildLayoutFactory(NDI\ContainerBuilder $builder, $templateDir, $plainMacro): void
64
	{
65
		$builder->addDefinition($this->prefix('layoutFactory'))
66
			->setFactory(MailManager\Template\LayoutFactory::class)
67
			->setArguments([$this->prefix('@templateFactory')])
68
			->addSetup('setTemplateDir', [$templateDir])
69
			->addSetup('setPlainMacro', [$plainMacro])
70
			->setAutowired(false);
71
	}
72
73
74
	/**
75
	 * @param NDI\ContainerBuilder $builder
76
	 * @param bool $debugMode
77
	 * @param string $tempDir
78
	 * @param string|null $live
79
	 * @return string
80
	 */
81
	private function buildMailer(NDI\ContainerBuilder $builder, bool $debugMode, string $tempDir, ?string $live): string
82
	{
83
		if (!$debugMode) {
84
			return '@nette.mailer';
85
		}
86
		$mailerBuilder = $builder->addDefinition($this->prefix('fileMailer'))
87
			->setFactory(MailManager\Mailer\FileMailer::class)
88
			->setArguments([$tempDir])
89
			->setAutowired(false);
90
91
		if ($live !== null) {
92
			$mailerBuilder->addSetup('setLive', [$live]);
93
		}
94
		return $this->prefix('@fileMailer');
95
	}
96
97
98
	private function buildMailManager(NDI\ContainerBuilder $builder, string $mailer, string $assetsDir): void
99
	{
100
		$mailManager = $builder->addDefinition($this->prefix('mailManager'))
101
			->setFactory(MailManager\MailManager::class)
102
			->setArguments([$mailer, $this->prefix('@messageFactory'), $this->prefix('@layoutFactory')]);
103
104
		if ($assetsDir !== '') {
105
			$mailManager->addSetup('setAssetsDir', [$assetsDir]);
106
		}
107
	}
108
109
}
110