Completed
Push — master ( 18c6d9...b08f1e )
by Rémi
03:05
created

UnableToCreateUserEventHandler   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 61
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 10

Importance

Changes 4
Bugs 1 Features 1
Metric Value
wmc 5
c 4
b 1
f 1
lcom 1
cbo 10
dl 0
loc 61
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 8 1
B handle() 0 23 4
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\Sender\MessageSender;
10
use Psr\Log\LoggerAwareInterface;
11
use Psr\Log\LoggerAwareTrait;
12
use Psr\Log\NullLogger;
13
use RemiSan\Context\Context;
14
15
class UnableToCreateUserEventHandler implements MessageEventHandler, LoggerAwareInterface
16
{
17
    use LoggerAwareTrait;
18
19
    /**
20
     * @var MessageFinder
21
     */
22
    private $messageFinder;
23
24
    /**
25
     * @var MessageSender
26
     */
27
    private $messageSender;
28
29
    /**
30
     * Constructor
31
     *
32
     * @param MessageFinder $messageFinder
33
     * @param MessageSender $messageSender
34
     */
35
    public function __construct(
36
        MessageFinder $messageFinder,
37
        MessageSender $messageSender
38
    ) {
39
        $this->messageFinder = $messageFinder;
40
        $this->messageSender = $messageSender;
41
        $this->logger = new NullLogger();
42
    }
43
44
    /**
45
     * Handle an event.
46
     *
47
     * @param EventInterface $event
48
     * @param Context        $context
49
     *
50
     * @return void
51
     */
52
    public function handle(EventInterface $event, Context $context = null)
53
    {
54
        if (! $event instanceof UnableToCreateUserEvent) {
55
            return;
56
        }
57
58
        $this->logger->info(
59
            'Send message',
60
            [
61
                'user' => $event->getUser()->getName(),
62
                'message' => $event->getReason(),
63
                'type' => $event->getName()
64
            ]
65
        );
66
67
        $messageContext = null;
68
        if ($context) {
69
            $messageContext = $this->messageFinder->findByReference($context->getValue());
70
        }
71
72
        $message = new DefaultMessage($event->getUser(), $event->getReason());
73
        $this->messageSender->send($message, ($messageContext)?$messageContext->getSource():null);
74
    }
75
}
76