Passed
Pull Request — master (#91)
by Alexander
15:01
created

MailerFactory::__invoke()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 18
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 12
c 1
b 0
f 0
dl 0
loc 18
rs 9.8666
nc 2
nop 1
cc 2
1
<?php
2
3
namespace App\Factory;
4
5
use Psr\Container\ContainerInterface;
6
use Psr\EventDispatcher\EventDispatcherInterface;
7
use Psr\Log\LoggerInterface;
8
use Yiisoft\Aliases\Aliases;
9
use Yiisoft\Mailer\Composer;
10
use Yiisoft\Mailer\FileMailer;
11
use Yiisoft\Mailer\MessageFactory;
12
use Yiisoft\Mailer\SwiftMailer\Logger;
13
use Yiisoft\Mailer\SwiftMailer\Mailer;
14
use Yiisoft\Mailer\SwiftMailer\Message;
15
use Yiisoft\View\Theme;
16
use Yiisoft\View\View;
17
18
class MailerFactory
19
{
20
    private bool $writeToFiles;
21
22
    public function __construct(bool $writeToFiles = false)
23
    {
24
        $this->writeToFiles = $writeToFiles;
25
    }
26
27
    public function __invoke(ContainerInterface $container)
28
    {
29
        $aliases = $container->get(Aliases::class);
30
        $logger = $container->get(LoggerInterface::class);
31
        $eventDispatcher = $container->get(EventDispatcherInterface::class);
32
        $messageFactory = new MessageFactory(Message::class);
33
        $view = new View('', new Theme(), $eventDispatcher, $logger);
34
        $composer = new Composer($view, $aliases->get('@resources/mail'));
35
36
        if ($this->writeToFiles) {
37
            return new FileMailer($messageFactory, $composer, $eventDispatcher, $logger, $aliases->get('@runtime/mail'));
38
        }
39
40
        $transport = $container->get(\Swift_Transport::class);
41
        $mailer = new Mailer($messageFactory, $composer, $eventDispatcher, $logger, $transport);
42
        $mailer->registerPlugin(new \Swift_Plugins_LoggerPlugin(new Logger($logger)));
43
44
        return $mailer;
45
    }
46
}
47