UnlockBadgeListener::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 6
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 4
nc 1
nop 3
1
<?php
2
3
namespace Badger\Bundle\GameBundle\EventListener;
4
5
use Badger\Component\Game\Notifier\NotifierInterface;
6
use Badger\Bundle\GameBundle\Event\BadgeUnlockEvent;
7
use Symfony\Bridge\Monolog\Logger;
8
use Symfony\Bundle\FrameworkBundle\Routing\Router;
9
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
10
11
/**
12
 * Event Listener to handle BadgeUnlockEvent, dispatched when a User unlocked a Badge.
13
 *
14
 * @author  Adrien Pétremann <[email protected]>
15
 * @license http://opensource.org/licenses/MIT The MIT License (MIT)
16
 */
17
class UnlockBadgeListener
18
{
19
    /** @var Router */
20
    private $router;
21
22
    /** @var Logger */
23
    private $logger;
24
25
    /** @var NotifierInterface */
26
    private $notifier;
27
28
    /**
29
     * @param Router            $router
30
     * @param Logger            $logger
31
     * @param NotifierInterface $notifier
32
     */
33
    public function __construct(Router $router, Logger $logger, NotifierInterface $notifier)
34
    {
35
        $this->router   = $router;
36
        $this->logger   = $logger;
37
        $this->notifier = $notifier;
38
    }
39
40
    /**
41
     * @param BadgeUnlockEvent $event
42
     */
43
    public function onUnlockBadge(BadgeUnlockEvent $event)
44
    {
45
        $badgeCompletion = $event->getBadgeCompletion();
46
        $user = $badgeCompletion->getUser();
47
        $badge = $badgeCompletion->getBadge();
48
49
        $data = [
50
            'text' => sprintf(
51
                '<%s|%s> just unlocked the badge <%s|%s>!',
52
                $this->router->generate(
53
                    'userprofile',
54
                    ['username' => $user->getUsername()],
55
                    UrlGeneratorInterface::ABSOLUTE_URL
56
                ),
57
                $user->getUsername(),
58
                $this->router->generate(
59
                    'viewbadge',
60
                    ['id' => $badge->getId()],
61
                    UrlGeneratorInterface::ABSOLUTE_URL
62
                ),
63
                $badge->getTitle()
64
            ),
65
            'attachments' => [
66
                [
67
                    'color' => 'good',
68
                    'title' => $badge->getTitle(),
69
                    'text' => $badge->getDescription(),
70
                    'thumb_url' => $this->router->generate(
71
                        'homepage',
72
                        [],
73
                        UrlGeneratorInterface::ABSOLUTE_URL
74
                    ) . $badge->getImageWebPath()
75
                ]
76
            ]
77
        ];
78
79
        $this->notifier->notify($data);
80
    }
81
}
82