GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Push — develop ( bc6f06...6b0db3 )
by Jasper
02:14
created

Transport::isStarted()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
c 0
b 0
f 0
ccs 2
cts 2
cp 1
rs 10
cc 1
eloc 2
nc 1
nop 0
crap 1
1
<?php
2
3
/**
4
 * @license https://github.com/f500/swiftmailer-sparkpost/blob/master/LICENSE MIT
5
 */
6
7
namespace SwiftSparkPost;
8
9
use Exception as AnyException;
10
use GuzzleHttp\Client as GuzzleClient;
11
use Http\Adapter\Guzzle6\Client as GuzzleAdapter;
12
use SparkPost\SparkPost;
13
use SparkPost\SparkPostResponse;
14
use Swift_DependencyContainer;
15
use Swift_Events_EventDispatcher;
16
use Swift_Events_EventListener;
17
use Swift_Events_SendEvent;
18
use Swift_Mime_Message;
19
use Swift_Transport;
20
use Swift_TransportException;
21
22
/**
23
 * @copyright Future500 B.V.
24
 * @author    Jasper N. Brouwer <[email protected]>
25
 */
26
final class Transport implements Swift_Transport
27
{
28
    /**
29
     * @var Swift_Events_EventDispatcher
30
     */
31
    private $eventDispatcher;
32
33
    /**
34
     * @var SparkPost
35
     */
36
    private $sparkpost;
37
38
    /**
39
     * @var PayloadBuilderInterface
40
     */
41
    private $payloadBuilder;
42
43
    /**
44
     * @param string $apiKey
45
     *
46
     * @return Transport
47
     */
48 3
    public static function newInstance($apiKey)
49
    {
50 3
        $eventDispatcher = Swift_DependencyContainer::getInstance()->lookup('transport.eventdispatcher');
51 3
        $sparkpost       = new SparkPost(new GuzzleAdapter(new GuzzleClient()), ['key' => $apiKey]);
52 3
        $payloadBuilder  = new PayloadBuilder();
53
54 3
        return new self($eventDispatcher, $sparkpost, $payloadBuilder);
55
    }
56
57
    /**
58
     * @param Swift_Events_EventDispatcher $eventDispatcher
59
     * @param SparkPost                    $sparkpost
60
     * @param PayloadBuilderInterface      $payloadBuilder
61
     */
62 36
    public function __construct(
63
        Swift_Events_EventDispatcher $eventDispatcher,
64
        SparkPost $sparkpost,
65 1
        PayloadBuilderInterface $payloadBuilder
66
    ) {
67 36
        $this->eventDispatcher = $eventDispatcher;
68 36
        $this->sparkpost       = $sparkpost;
69 36
        $this->payloadBuilder  = $payloadBuilder;
70 36
    }
71
72
    /**
73
     * {@inheritdoc}
74
     */
75 3
    public function isStarted()
76
    {
77 3
        return true;
78
    }
79
80
    /**
81
     * {@inheritdoc}
82
     */
83 3
    public function start()
84
    {
85 3
    }
86
87
    /**
88
     * {@inheritdoc}
89
     */
90 3
    public function stop()
91
    {
92 3
    }
93
94
    /**
95
     * {@inheritdoc}
96
     */
97 27
    public function send(Swift_Mime_Message $message, &$failedRecipients = null)
98
    {
99 27
        $failedRecipients = (array) $failedRecipients;
100
101 27
        if ($event = $this->eventDispatcher->createSendEvent($this, $message)) {
102 27
            $this->eventDispatcher->dispatchEvent($event, 'beforeSendPerformed');
103
104 27
            if ($event->bubbleCancelled()) {
105 3
                return 0;
106
            }
107 8
        }
108
109 24
        $payload  = $this->buildPayload($message);
110 21
        $response = $this->sendTransmission($payload);
111 18
        $body     = $response->getBody();
112
113 18
        $sent = isset($body['results']['total_accepted_recipients'])
114 16
            ? (int) $body['results']['total_accepted_recipients']
115 18
            : 0;
116
117 18
        if ($event) {
118 18
            if ($response->getStatusCode() !== 200) {
119 3
                $event->setResult(Swift_Events_SendEvent::RESULT_FAILED);
120 16
            } elseif ($response->getBody()['results']['total_accepted_recipients'] == 0) {
121 3
                $event->setResult(Swift_Events_SendEvent::RESULT_FAILED);
122 13
            } elseif ($response->getBody()['results']['total_rejected_recipients'] > 0) {
123 3
                $event->setResult(Swift_Events_SendEvent::RESULT_TENTATIVE);
124 1
            } else {
125 9
                $event->setResult(Swift_Events_SendEvent::RESULT_SUCCESS);
126
            }
127
128 18
            $event->setFailedRecipients($failedRecipients);
129 18
            $this->eventDispatcher->dispatchEvent($event, 'sendPerformed');
130 6
        }
131
132 18
        return (int) $sent;
133
    }
134
135
    /**
136
     * {@inheritdoc}
137
     */
138 3
    public function registerPlugin(Swift_Events_EventListener $plugin)
139
    {
140 3
        $this->eventDispatcher->bindEventListener($plugin);
141 3
    }
142
143
    /**
144
     * @param Swift_Mime_Message $message
145
     *
146
     * @return array
147
     * @throws Swift_TransportException
148
     */
149 24
    private function buildPayload(Swift_Mime_Message $message)
150
    {
151
        try {
152 24
            return $this->payloadBuilder->buildPayload($message);
153 3
        } catch (AnyException $exception) {
154 3
            throw $this->createAndDispatchTransportException(
155 3
                'Failed to build payload for a SparkPost transmission',
156
                $exception
157 1
            );
158
        }
159
    }
160
161
    /**
162
     * @param array $payload
163
     *
164
     * @return SparkPostResponse
165
     * @throws Swift_TransportException
166
     */
167 21
    private function sendTransmission(array $payload)
168
    {
169
        try {
170
            /** @noinspection PhpUndefinedVariableInspection */
171 21
            $promise = $this->sparkpost->transmissions->post($payload);
172
173 18
            if ($promise instanceof SparkPostResponse) {
174 15
                return $promise;
175
            }
176
177 3
            return $promise->wait();
178 3
        } catch (AnyException $exception) {
179 3
            throw $this->createAndDispatchTransportException(
180 3
                'Failed to send transmission to SparkPost',
181
                $exception
182 1
            );
183
        }
184
    }
185
186
    /**
187
     * @param string       $message
188
     * @param AnyException $exception
189
     *
190
     * @return Swift_TransportException
191
     */
192 6
    private function createAndDispatchTransportException($message, AnyException $exception)
193
    {
194 6
        $transportException = new Swift_TransportException($message, 0, $exception);
195
196 6
        if ($event = $this->eventDispatcher->createTransportExceptionEvent($this, $transportException)) {
197 6
            $this->eventDispatcher->dispatchEvent($event, 'exceptionThrown');
198 2
        }
199
200 6
        return $transportException;
201
    }
202
}
203