Completed
Push — master ( a9e5ec...494846 )
by Milan
03:51
created

MailManagerExtension::loadConfiguration()   B

Complexity

Conditions 3
Paths 3

Size

Total Lines 46
Code Lines 30

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 30
nc 3
nop 0
dl 0
loc 46
rs 8.9411
c 0
b 0
f 0
1
<?php
2
3
namespace h4kuna\MailManager\DI;
4
5
use h4kuna\MailManager,
6
	Nette\DI\CompilerExtension;
7
8
class MailManagerExtension extends CompilerExtension
9
{
10
11
	private $defaults = [
12
		// mail manager
13
		'assetsDir' => null,
14
		// layout
15
		'templateDir' => null,
16
		'plainMacro' => '%file%-plain', // plain/%file% or plain-%file%
17
		// template factory
18
		'globalVars' => [],
19
		// message
20
		'from' => null,
21
		'returnPath' => null,
22
		// file mailer
23
		'development' => null,
24
		'tempDir' => null,
25
		'live' => '1 minute',
26
	];
27
28
29
	public function __construct($debugMode = false, $tempDir = null)
30
	{
31
		$this->defaults['development'] = $debugMode;
32
		$this->defaults['tempDir'] = $tempDir . '/mails';
33
	}
34
35
36
	public function loadConfiguration()
37
	{
38
		$builder = $this->getContainerBuilder();
39
		$config = $this->config + $this->defaults;
40
41
		// message factory
42
		$builder->addDefinition($this->prefix('messageFactory'))
43
			->setFactory(MailManager\Message\MessageFactory::class)
44
			->setArguments([$config['from'], $config['returnPath']])
45
			->setAutowired(false);
46
47
		// template factory
48
		$templateFactory = $builder->addDefinition($this->prefix('templateFactory'));
49
		$templateFactory->setFactory(MailManager\Template\TemplateFactory::class)
50
			->addSetup('setVariables', [$config['globalVars']])
51
			->setAutowired(false);
52
53
		// mailer
54
		$mailer = '@nette.mailer';
55
		if ($config['development']) {
56
			$mailerBuilder = $builder->addDefinition($this->prefix('fileMailer'))
57
				->setFactory(MailManager\Mailer\FileMailer::class)
58
				->setArguments([$config['tempDir']])
59
				->setAutowired(false);
60
61
			if ($config['live'] !== null) {
62
				$mailerBuilder->addSetup('setLive', [$config['live']]);
63
			}
64
			$mailer = $this->prefix('@fileMailer');
65
		}
66
67
		// layout factory
68
		$builder->addDefinition($this->prefix('layoutFactory'))
69
			->setFactory(MailManager\Template\LayoutFactory::class)
70
			->setArguments([$this->prefix('@templateFactory')])
71
			->addSetup('setTemplateDir', [$config['templateDir']])
72
			->addSetup('setPlainMacro', [$config['plainMacro']])
73
			->setAutowired(false);
74
75
		// MailManager
76
		$builder->addDefinition($this->prefix('mailManager'))
77
			->setFactory(MailManager\MailManager::class)
78
			->setArguments([$mailer, $this->prefix('@messageFactory'), $this->prefix('@layoutFactory')])
79
			->addSetup('setAssetsDir', [$config['assetsDir']]);
80
81
		return $builder;
82
	}
83
84
}
85