Sender::send()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 11
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 10
CRAP Score 1

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 11
ccs 10
cts 10
cp 1
rs 9.4285
cc 1
eloc 9
nc 1
nop 1
crap 1
1
<?php
2
/**
3
 * MtMail - e-mail module for Zend Framework
4
 *
5
 * @link      http://github.com/mtymek/MtMail
6
 * @copyright Copyright (c) 2013-2017 Mateusz Tymek
7
 * @license   BSD 2-Clause
8
 */
9
10
namespace MtMail\Service;
11
12
use MtMail\Event\SenderEvent;
13
use Zend\EventManager\EventManager;
14
use Zend\EventManager\EventManagerAwareInterface;
15
use Zend\EventManager\EventManagerInterface;
16
use Zend\Mail\Message;
17
use Zend\Mail\Transport\TransportInterface;
18
19
class Sender implements EventManagerAwareInterface
20
{
21
22
    /**
23
     * @var TransportInterface
24
     */
25
    protected $transport;
26
27
    /**
28
     * @var EventManagerInterface
29
     */
30
    protected $eventManager;
31
32
    /**
33
     * Class constructor
34
     *
35
     * @param TransportInterface $transport
36
     */
37 5
    public function __construct(TransportInterface $transport)
38
    {
39 5
        $this->transport = $transport;
40 5
    }
41
42
    /**
43
     * Inject an EventManager instance
44
     *
45
     * @param  EventManagerInterface $eventManager
46
     * @return self
47
     */
48 3
    public function setEventManager(EventManagerInterface $eventManager)
49
    {
50 3
        $this->eventManager = $eventManager;
51
52 3
        return $this;
53
    }
54
55
    /**
56
     * Retrieve the event manager
57
     *
58
     * Lazy-loads an EventManager instance if none registered.
59
     *
60
     * @return EventManagerInterface
61
     */
62 5
    public function getEventManager()
63
    {
64 5
        if (null === $this->eventManager) {
65 3
            $this->eventManager = new EventManager();
66
        }
67
68 5
        return $this->eventManager;
69
    }
70
71
    /**
72
     * Create and return event used by compose and send methods
73
     *
74
     * @return SenderEvent
75
     */
76 2
    protected function getEvent()
77
    {
78 2
        $event = new SenderEvent();
79 2
        $event->setTarget($this);
80
81 2
        return $event;
82
    }
83
84
    /**
85
     * Send message
86
     *
87
     * @param  Message $message
88
     * @return void
89
     */
90 2
    public function send(Message $message)
91
    {
92 2
        $em = $this->getEventManager();
93 2
        $event = $this->getEvent();
94 2
        $event->setMessage($message);
95 2
        $event->setName(SenderEvent::EVENT_SEND_PRE);
96 2
        $em->triggerEvent($event);
97 2
        $this->transport->send($message);
98 2
        $event->setName(SenderEvent::EVENT_SEND_POST);
99 2
        $em->triggerEvent($event);
100 2
    }
101
}
102