Passed
Pull Request — master (#26)
by Paweł
04:18
created

UserSubscriber::onUserCreated()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 22
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
eloc 15
c 1
b 0
f 1
dl 0
loc 22
rs 9.7666
cc 1
nc 1
nop 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