ObserversPlugin   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 59
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 9
lcom 1
cbo 3
dl 0
loc 59
ccs 20
cts 20
cp 1
rs 10
c 0
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 6 2
A add() 0 4 1
A triggerEvent() 0 8 3
A beforeSendPerformed() 0 9 2
A sendPerformed() 0 4 1
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