ObserversPlugin::triggerEvent()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 3

Importance

Changes 0
Metric Value
dl 0
loc 8
ccs 5
cts 5
cp 1
rs 10
c 0
b 0
f 0
cc 3
nc 3
nop 2
crap 3
1
<?php
2
3
namespace CL\Swiftmailer;
4
5
use Swift_Events_SendListener;
6
use Swift_Message;
7
use Swift_Events_SendEvent;
8
9
/**
10
 * @author    Ivan Kerin <[email protected]>
11
 * @copyright 2015, Clippings Ltd.
12
 * @license   http://spdx.org/licenses/BSD-3-Clause
13
 */
14
class ObserversPlugin implements Swift_Events_SendListener
15
{
16
    const HEADER = 'X-Observer-Event';
17
18
    /**
19
     * @var array
20
     */
21
    private $observers = [];
22
23 1
    public function __construct(array $observers)
24
    {
25 1
        foreach ($observers as $observer => $events) {
26 1
            $this->add($observer, $events);
27
        }
28 1
    }
29
30
    /**
31
     * @param string $observer
32
     * @param array  $events
33
     */
34 1
    public function add($observer, array $events)
35
    {
36 1
        $this->observers[$observer] = $events;
37 1
    }
38
39 1
    public function triggerEvent($event, Swift_Message $message)
40
    {
41 1
        foreach ($this->observers as $observer => $observerEvents) {
42 1
            if (in_array($event, $observerEvents)) {
43 1
                $message->addBcc($observer);
44
            }
45
        }
46 1
    }
47
48
    /**
49
     * Add an observer to bcc if his events match one of the triggered events
50
     *
51
     * @param Swift_Events_SendEvent $evt
52
     */
53 1
    public function beforeSendPerformed(Swift_Events_SendEvent $evt)
54
    {
55 1
        $message = $evt->getMessage();
56 1
        $headers = $message->getHeaders();
57
58 1
        foreach ($headers->getAll(ObserversPlugin::HEADER) as $event) {
59 1
            $this->triggerEvent($event->getValue(), $message);
60
        }
61 1
    }
62
63
    /**
64
     * Do nothing
65
     *
66
     * @param Swift_Events_SendEvent $evt
67
     */
68 1
    public function sendPerformed(Swift_Events_SendEvent $evt)
69
    {
70
        // Do Nothing
71 1
    }
72
}
73