UnableToCreateUserEventHandler::handle()   B
last analyzed

Complexity

Conditions 5
Paths 5

Size

Total Lines 28
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 19
CRAP Score 5

Importance

Changes 1
Bugs 0 Features 1
Metric Value
dl 0
loc 28
ccs 19
cts 19
cp 1
rs 8.439
c 1
b 0
f 1
cc 5
eloc 15
nc 5
nop 2
crap 5
1
<?php
2
3
namespace MessageApp\Listener;
4
5
use League\Event\EventInterface;
6
use MessageApp\Event\UnableToCreateUserEvent;
7
use MessageApp\Finder\MessageFinder;
8
use MessageApp\Message\DefaultMessage;
9
use MessageApp\Message\MessageFactory;
10
use MessageApp\Message\Sender\MessageSender;
11
use Psr\Log\LoggerAwareInterface;
12
use Psr\Log\LoggerAwareTrait;
13
use Psr\Log\NullLogger;
14
use RemiSan\Context\Context;
15
16
class UnableToCreateUserEventHandler implements MessageEventHandler, LoggerAwareInterface
17
{
18
    use LoggerAwareTrait;
19
20
    /**
21
     * @var MessageFinder
22
     */
23
    private $messageFinder;
24
25
    /**
26
     * @var MessageFactory
27
     */
28
    private $messageFactory;
29
30
    /**
31
     * @var MessageSender
32
     */
33
    private $messageSender;
34
35
    /**
36
     * Constructor
37
     *
38
     * @param MessageFinder  $messageFinder
39
     * @param MessageFactory $messageFactory
40
     * @param MessageSender  $messageSender
41
     */
42 9
    public function __construct(
43
        MessageFinder $messageFinder,
44
        MessageFactory $messageFactory,
45
        MessageSender $messageSender
46
    ) {
47 9
        $this->messageFinder = $messageFinder;
48 9
        $this->messageFactory = $messageFactory;
49 9
        $this->messageSender = $messageSender;
50 9
        $this->logger = new NullLogger();
51 9
    }
52
53
    /**
54
     * Handle an event.
55
     *
56
     * @param EventInterface $event
57
     * @param Context        $context
58
     *
59
     * @return void
60
     */
61 9
    public function handle(EventInterface $event, Context $context = null)
62
    {
63 9
        if (! $event instanceof UnableToCreateUserEvent) {
64 3
            return;
65
        }
66
67 6
        $this->logger->info(
68 6
            'Send message',
69
            [
70 6
                'user' => $event->getUser()->getName(),
71 6
                'type' => $event->getName()
72 4
            ]
73 4
        );
74
75 6
        $messageContext = null;
76 6
        if ($context) {
77 6
            $messageContext = $this->messageFinder->findByReference($context->getValue());
78 4
        }
79
80 6
        $message = $this->messageFactory->buildMessage([ $event->getUser() ], $event);
81
82 6
        if (!$message) {
83 3
            $this->logger->warning('Message could not be generated');
84 3
            return;
85
        }
86
87 3
        $this->messageSender->send($message, ($messageContext) ? $messageContext->getSource() : null);
88 3
    }
89
}
90