Passed
Pull Request — master (#26)
by Paweł
03:43
created

UserSubscriber   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 57
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
wmc 5
eloc 28
c 1
b 0
f 1
dl 0
loc 57
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A getSetting() 0 3 1
A __construct() 0 5 1
A renderTemplateFromString() 0 6 1
A onUserCreated() 0 22 1
A getSubscribedEvents() 0 4 1
1
<?php
2
3
namespace App\EventSubscriber;
4
5
use App\Event\UserCreateEvent;
6
use SWP\Bundle\SettingsBundle\Context\ScopeContext;
7
use SWP\Bundle\SettingsBundle\Manager\SettingsManagerInterface;
8
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
9
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
10
use Symfony\Component\Mailer\MailerInterface;
11
use Symfony\Component\Mime\NamedAddress;
12
use Twig\Environment;
13
use Twig\Loader\ArrayLoader;
14
15
class UserSubscriber implements EventSubscriberInterface
16
{
17
    private $mailer;
18
19
    private $settingsManager;
20
21
    private $cacheDir;
22
23
    public function __construct(MailerInterface $mailer, SettingsManagerInterface $settingsManager, string $cacheDir)
24
    {
25
        $this->mailer = $mailer;
26
        $this->settingsManager = $settingsManager;
27
        $this->cacheDir = $cacheDir;
28
    }
29
30
    public function onUserCreated(UserCreateEvent $event): void
31
    {
32
        $user = $event->getUser();
33
        $email = new TemplatedEmail();
34
        $email
35
            ->from(new NamedAddress(
36
                $this->getSetting('email_from_address', '[email protected]'),
37
                $this->getSetting('email_from_name', 'OwnCourses Team')
38
            ))
39
            ->to($user->getEmail())
40
            ->subject($this->getSetting('new_user_email_title', 'Welcome in OwnCourses'))
41
            ->html(
42
                $this->renderTemplateFromString($this->getSetting('new_user_email_template', 'CHANGE THIS EMAIL CONTENT IN OwnCourses SETTINGS! '), [
43
                    'firstName' => $user->getFirstName(),
44
                    'lastName' => $user->getLastName(),
45
                    'email' => $user->getEmail(),
46
                    'temporaryPassword' => $user->getPlainPassword(),
47
                ])
48
            )
49
        ;
50
51
        $this->mailer->send($email);
52
    }
53
54
    public static function getSubscribedEvents()
55
    {
56
        return [
57
           UserCreateEvent::class => 'onUserCreated',
58
        ];
59
    }
60
61
    private function getSetting(string $name, string $default)
62
    {
63
        return $this->settingsManager->get($name, ScopeContext::SCOPE_GLOBAL, null, $default);
64
    }
65
66
    private function renderTemplateFromString(string $template, array $context): string
67
    {
68
        $loader = new ArrayLoader(['template' => $template]);
69
        $twig = new Environment($loader, ['cache' => $this->cacheDir.DIRECTORY_SEPARATOR.'twig']);
70
71
        return $twig->render('template', $context);
72
    }
73
}
74