Passed
Push — master ( 042942...829dd4 )
by Thomas
13:31
created

SymfonyMailerCollector::formatTo()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 11
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
eloc 6
c 1
b 0
f 0
nc 3
nop 1
dl 0
loc 11
rs 10
1
<?php
2
3
namespace LeKoala\DebugBar\Bridge\SymfonyMailer;
4
5
use Symfony\Component\Mime\Address;
6
use SilverStripe\Control\Email\Email;
7
use DebugBar\DataCollector\Renderable;
8
use DebugBar\DataCollector\AssetProvider;
9
use DebugBar\DataCollector\DataCollector;
10
11
/**
12
 * Collects data about sent mails
13
 */
14
class SymfonyMailerCollector extends DataCollector implements Renderable, AssetProvider
15
{
16
    /**
17
     * @var Email[]
18
     */
19
    protected $emails;
20
21
    public function collect()
22
    {
23
        $mails = [];
24
25
        foreach ($this->emails as $msg) {
26
            $mails[] = [
27
                'to' => $this->formatTo($msg->getTo()),
28
                'subject' => $msg->getSubject(),
29
                'headers' => $msg->getHeaders()->toString()
30
            ];
31
        }
32
33
        return [
34
            'count' => count($mails),
35
            'mails' => $mails
36
        ];
37
    }
38
39
    public function add(Email $email)
40
    {
41
        $this->emails[] = $email;
42
    }
43
44
    /**
45
     * @param Address[] $to
46
     * @return string
47
     */
48
    protected function formatTo($to)
49
    {
50
        if (empty($to)) {
51
            return '';
52
        }
53
54
        $f = [];
55
        foreach ($to as $k => $v) {
56
            $f[] = $v->toString();
57
        }
58
        return implode(', ', $f);
59
    }
60
61
    public function getName()
62
    {
63
        return 'symfonymailer_mails';
64
    }
65
66
    public function getWidgets()
67
    {
68
        return [
69
            'emails' => [
70
                'icon' => 'inbox',
71
                'widget' => 'PhpDebugBar.Widgets.MailsWidget',
72
                'map' => 'symfonymailer_mails.mails',
73
                'default' => '[]',
74
                'title' => 'Mails'
75
            ],
76
            'emails:badge' => [
77
                'map' => 'symfonymailer_mails.count',
78
                'default' => 'null'
79
            ]
80
        ];
81
    }
82
83
    public function getAssets()
84
    {
85
        return [
86
            'css' => 'widgets/mails/widget.css',
87
            'js' => 'widgets/mails/widget.js'
88
        ];
89
    }
90
}
91