Completed
Pull Request — master (#18)
by Jesus
02:44 queued 27s
created

BigBlueButton::setConfigXMLUrl()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 0
1
<?php
2
/**
3
 * BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
4
 *
5
 * Copyright (c) 2016 BigBlueButton Inc. and by respective authors (see below).
6
 *
7
 * This program is free software; you can redistribute it and/or modify it under the
8
 * terms of the GNU Lesser General Public License as published by the Free Software
9
 * Foundation; either version 3.0 of the License, or (at your option) any later
10
 * version.
11
 *
12
 * BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
13
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14
 * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU Lesser General Public License along
17
 * with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
18
 */
19
namespace BigBlueButton;
20
21
use BigBlueButton\Core\ApiMethod;
22
use BigBlueButton\Parameters\CreateMeetingParameters;
23
use BigBlueButton\Parameters\DeleteRecordingsParameters;
24
use BigBlueButton\Parameters\EndMeetingParameters;
25
use BigBlueButton\Parameters\GetMeetingInfoParameters;
26
use BigBlueButton\Parameters\GetRecordingsParameters;
27
use BigBlueButton\Parameters\IsMeetingRunningParameters;
28
use BigBlueButton\Parameters\JoinMeetingParameters;
29
use BigBlueButton\Parameters\PublishRecordingsParameters;
30
use BigBlueButton\Parameters\UpdateRecordingsParameters;
31
use BigBlueButton\Responses\ApiVersionResponse;
32
use BigBlueButton\Responses\CreateMeetingResponse;
33
use BigBlueButton\Responses\DeleteRecordingsResponse;
34
use BigBlueButton\Responses\EndMeetingResponse;
35
use BigBlueButton\Responses\GetDefaultConfigXMLResponse;
36
use BigBlueButton\Responses\GetMeetingInfoResponse;
37
use BigBlueButton\Responses\GetMeetingsResponse;
38
use BigBlueButton\Responses\GetRecordingsResponse;
39
use BigBlueButton\Responses\IsMeetingRunningResponse;
40
use BigBlueButton\Responses\JoinMeetingResponse;
41
use BigBlueButton\Responses\PublishRecordingsResponse;
42
use BigBlueButton\Responses\SetConfigXMLResponse;
43
use BigBlueButton\Responses\UpdateRecordingsResponse;
44
use BigBlueButton\Util\UrlBuilder;
45
use SimpleXMLElement;
46
47
/**
48
 * Class BigBlueButton
49
 * @package BigBlueButton
50
 */
51
class BigBlueButton
52
{
53
    private $securitySalt;
54
    private $bbbServerBaseUrl;
55
    private $urlBuilder;
56
57
    public function __construct()
58
    {
59
        $this->securitySalt     = getenv('BBB_SECURITY_SALT');
60
        $this->bbbServerBaseUrl = getenv('BBB_SERVER_BASE_URL');
61
        $this->urlBuilder       = new UrlBuilder($this->securitySalt, $this->bbbServerBaseUrl);
62
    }
63
64
    /**
65
     * @return ApiVersionResponse
66
     *
67
     * @throws \RuntimeException
68
     */
69
    public function getApiVersion()
70
    {
71
        $xml = $this->processXmlResponse($this->urlBuilder->buildUrl());
72
73
        return new ApiVersionResponse($xml);
0 ignored issues
show
Bug introduced by
It seems like $xml defined by $this->processXmlRespons...urlBuilder->buildUrl()) on line 71 can be null; however, BigBlueButton\Responses\...Response::__construct() does not accept null, maybe add an additional type check?

Unless you are absolutely sure that the expression can never be null because of other conditions, we strongly recommend to add an additional type check to your code:

/** @return stdClass|null */
function mayReturnNull() { }

function doesNotAcceptNull(stdClass $x) { }

// With potential error.
function withoutCheck() {
    $x = mayReturnNull();
    doesNotAcceptNull($x); // Potential error here.
}

// Safe - Alternative 1
function withCheck1() {
    $x = mayReturnNull();
    if ( ! $x instanceof stdClass) {
        throw new \LogicException('$x must be defined.');
    }
    doesNotAcceptNull($x);
}

// Safe - Alternative 2
function withCheck2() {
    $x = mayReturnNull();
    if ($x instanceof stdClass) {
        doesNotAcceptNull($x);
    }
}
Loading history...
74
    }
75
76
    /* __________________ BBB ADMINISTRATION METHODS _________________ */
77
    /* The methods in the following section support the following categories of the BBB API:
78
    -- create
79
    -- getDefaultConfigXML
80
    -- join
81
    -- end
82
    */
83
84
    /**
85
     * @param  CreateMeetingParameters $createMeetingParams
86
     * @return string
87
     */
88
    public function getCreateMeetingUrl($createMeetingParams)
89
    {
90
        return $this->urlBuilder->buildUrl(ApiMethod::CREATE, $createMeetingParams->getHTTPQuery());
91
    }
92
93
    /**
94
     * @param  CreateMeetingParameters $createMeetingParams
95
     * @return CreateMeetingResponse
96
     * @throws \RuntimeException
97
     */
98
    public function createMeeting($createMeetingParams)
99
    {
100
        $xml = $this->processXmlResponse($this->getCreateMeetingUrl($createMeetingParams), $createMeetingParams->getPresentationsAsXML());
0 ignored issues
show
Security Bug introduced by
It seems like $createMeetingParams->getPresentationsAsXML() targeting BigBlueButton\Parameters...getPresentationsAsXML() can also be of type false; however, BigBlueButton\BigBlueButton::processXmlResponse() does only seem to accept string, did you maybe forget to handle an error condition?
Loading history...
101
102
        return new CreateMeetingResponse($xml);
0 ignored issues
show
Bug introduced by
It seems like $xml defined by $this->processXmlRespons...etPresentationsAsXML()) on line 100 can be null; however, BigBlueButton\Responses\...Response::__construct() does not accept null, maybe add an additional type check?

Unless you are absolutely sure that the expression can never be null because of other conditions, we strongly recommend to add an additional type check to your code:

/** @return stdClass|null */
function mayReturnNull() { }

function doesNotAcceptNull(stdClass $x) { }

// With potential error.
function withoutCheck() {
    $x = mayReturnNull();
    doesNotAcceptNull($x); // Potential error here.
}

// Safe - Alternative 1
function withCheck1() {
    $x = mayReturnNull();
    if ( ! $x instanceof stdClass) {
        throw new \LogicException('$x must be defined.');
    }
    doesNotAcceptNull($x);
}

// Safe - Alternative 2
function withCheck2() {
    $x = mayReturnNull();
    if ($x instanceof stdClass) {
        doesNotAcceptNull($x);
    }
}
Loading history...
103
    }
104
105
    /**
106
     * @return string
107
     */
108
    public function getDefaultConfigXMLUrl()
109
    {
110
        return $this->urlBuilder->buildUrl(ApiMethod::GET_DEFAULT_CONFIG_XML);
111
    }
112
113
    /**
114
     * @return GetDefaultConfigXMLResponse
115
     * @throws \RuntimeException
116
     */
117
    public function getDefaultConfigXML()
118
    {
119
        $xml = $this->processXmlResponse($this->getDefaultConfigXMLUrl());
120
121
        return new GetDefaultConfigXMLResponse($xml);
0 ignored issues
show
Bug introduced by
It seems like $xml defined by $this->processXmlRespons...tDefaultConfigXMLUrl()) on line 119 can be null; however, BigBlueButton\Responses\...Response::__construct() does not accept null, maybe add an additional type check?

Unless you are absolutely sure that the expression can never be null because of other conditions, we strongly recommend to add an additional type check to your code:

/** @return stdClass|null */
function mayReturnNull() { }

function doesNotAcceptNull(stdClass $x) { }

// With potential error.
function withoutCheck() {
    $x = mayReturnNull();
    doesNotAcceptNull($x); // Potential error here.
}

// Safe - Alternative 1
function withCheck1() {
    $x = mayReturnNull();
    if ( ! $x instanceof stdClass) {
        throw new \LogicException('$x must be defined.');
    }
    doesNotAcceptNull($x);
}

// Safe - Alternative 2
function withCheck2() {
    $x = mayReturnNull();
    if ($x instanceof stdClass) {
        doesNotAcceptNull($x);
    }
}
Loading history...
122
    }
123
124
    /**
125
     * @return string
126
     */
127
    public function setConfigXMLUrl()
128
    {
129
        return $this->urlBuilder->buildUrl(ApiMethod::SET_CONFIG_XML, '', false);
130
    }
131
132
    /**
133
     * @return SetConfigXMLResponse
134
     * @throws \RuntimeException
135
     */
136
    public function setConfigXML($setConfigXMLParams)
137
    {
138
        $setConfigXMLPayload = $this->urlBuilder->buildQs(ApiMethod::SET_CONFIG_XML, $setConfigXMLParams->getHTTPQuery());
139
140
        $xml = $this->processXmlResponse($this->setConfigXMLUrl(), $setConfigXMLPayload, 'application/x-www-form-urlencoded');
141
142
        return new SetConfigXMLResponse($xml);
0 ignored issues
show
Bug introduced by
It seems like $xml defined by $this->processXmlRespons...x-www-form-urlencoded') on line 140 can be null; however, BigBlueButton\Responses\...Response::__construct() does not accept null, maybe add an additional type check?

Unless you are absolutely sure that the expression can never be null because of other conditions, we strongly recommend to add an additional type check to your code:

/** @return stdClass|null */
function mayReturnNull() { }

function doesNotAcceptNull(stdClass $x) { }

// With potential error.
function withoutCheck() {
    $x = mayReturnNull();
    doesNotAcceptNull($x); // Potential error here.
}

// Safe - Alternative 1
function withCheck1() {
    $x = mayReturnNull();
    if ( ! $x instanceof stdClass) {
        throw new \LogicException('$x must be defined.');
    }
    doesNotAcceptNull($x);
}

// Safe - Alternative 2
function withCheck2() {
    $x = mayReturnNull();
    if ($x instanceof stdClass) {
        doesNotAcceptNull($x);
    }
}
Loading history...
143
    }
144
145
    /**
146
     * @param $joinMeetingParams JoinMeetingParameters
147
     *
148
     * @return string
149
     */
150
    public function getJoinMeetingURL($joinMeetingParams)
151
    {
152
        return $this->urlBuilder->buildUrl(ApiMethod::JOIN, $joinMeetingParams->getHTTPQuery());
153
    }
154
155
    /**
156
     * @param $joinMeetingParams JoinMeetingParameters
157
     *
158
     * @return JoinMeetingResponse
159
     * @throws \RuntimeException
160
     */
161
    public function joinMeeting($joinMeetingParams)
162
    {
163
        $xml = $this->processXmlResponse($this->getJoinMeetingURL($joinMeetingParams));
164
165
        return new JoinMeetingResponse($xml);
0 ignored issues
show
Bug introduced by
It seems like $xml defined by $this->processXmlRespons...RL($joinMeetingParams)) on line 163 can be null; however, BigBlueButton\Responses\...Response::__construct() does not accept null, maybe add an additional type check?

Unless you are absolutely sure that the expression can never be null because of other conditions, we strongly recommend to add an additional type check to your code:

/** @return stdClass|null */
function mayReturnNull() { }

function doesNotAcceptNull(stdClass $x) { }

// With potential error.
function withoutCheck() {
    $x = mayReturnNull();
    doesNotAcceptNull($x); // Potential error here.
}

// Safe - Alternative 1
function withCheck1() {
    $x = mayReturnNull();
    if ( ! $x instanceof stdClass) {
        throw new \LogicException('$x must be defined.');
    }
    doesNotAcceptNull($x);
}

// Safe - Alternative 2
function withCheck2() {
    $x = mayReturnNull();
    if ($x instanceof stdClass) {
        doesNotAcceptNull($x);
    }
}
Loading history...
166
    }
167
168
    /**
169
     * @param $endParams EndMeetingParameters
170
     *
171
     * @return string
172
     */
173
    public function getEndMeetingURL($endParams)
174
    {
175
        return $this->urlBuilder->buildUrl(ApiMethod::END, $endParams->getHTTPQuery());
176
    }
177
178
    /**
179
     * @param $endParams EndMeetingParameters
180
     *
181
     * @return EndMeetingResponse
182
     * @throws \RuntimeException
183
     * */
184
    public function endMeeting($endParams)
185
    {
186
        $xml = $this->processXmlResponse($this->getEndMeetingURL($endParams));
187
188
        return new EndMeetingResponse($xml);
0 ignored issues
show
Bug introduced by
It seems like $xml defined by $this->processXmlRespons...MeetingURL($endParams)) on line 186 can be null; however, BigBlueButton\Responses\...Response::__construct() does not accept null, maybe add an additional type check?

Unless you are absolutely sure that the expression can never be null because of other conditions, we strongly recommend to add an additional type check to your code:

/** @return stdClass|null */
function mayReturnNull() { }

function doesNotAcceptNull(stdClass $x) { }

// With potential error.
function withoutCheck() {
    $x = mayReturnNull();
    doesNotAcceptNull($x); // Potential error here.
}

// Safe - Alternative 1
function withCheck1() {
    $x = mayReturnNull();
    if ( ! $x instanceof stdClass) {
        throw new \LogicException('$x must be defined.');
    }
    doesNotAcceptNull($x);
}

// Safe - Alternative 2
function withCheck2() {
    $x = mayReturnNull();
    if ($x instanceof stdClass) {
        doesNotAcceptNull($x);
    }
}
Loading history...
189
    }
190
191
    /* __________________ BBB MONITORING METHODS _________________ */
192
    /* The methods in the following section support the following categories of the BBB API:
193
    -- isMeetingRunning
194
    -- getMeetings
195
    -- getMeetingInfo
196
    */
197
198
    /**
199
     * @param $meetingParams IsMeetingRunningParameters
200
     * @return string
201
     */
202
    public function getIsMeetingRunningUrl($meetingParams)
203
    {
204
        return $this->urlBuilder->buildUrl(ApiMethod::IS_MEETING_RUNNING, $meetingParams->getHTTPQuery());
205
    }
206
207
    /**
208
     * @param $meetingParams
209
     * @return IsMeetingRunningResponse
210
     * @throws \RuntimeException
211
     */
212
    public function isMeetingRunning($meetingParams)
213
    {
214
        $xml = $this->processXmlResponse($this->getIsMeetingRunningUrl($meetingParams));
215
216
        return new IsMeetingRunningResponse($xml);
0 ignored issues
show
Bug introduced by
It seems like $xml defined by $this->processXmlRespons...ingUrl($meetingParams)) on line 214 can be null; however, BigBlueButton\Responses\...Response::__construct() does not accept null, maybe add an additional type check?

Unless you are absolutely sure that the expression can never be null because of other conditions, we strongly recommend to add an additional type check to your code:

/** @return stdClass|null */
function mayReturnNull() { }

function doesNotAcceptNull(stdClass $x) { }

// With potential error.
function withoutCheck() {
    $x = mayReturnNull();
    doesNotAcceptNull($x); // Potential error here.
}

// Safe - Alternative 1
function withCheck1() {
    $x = mayReturnNull();
    if ( ! $x instanceof stdClass) {
        throw new \LogicException('$x must be defined.');
    }
    doesNotAcceptNull($x);
}

// Safe - Alternative 2
function withCheck2() {
    $x = mayReturnNull();
    if ($x instanceof stdClass) {
        doesNotAcceptNull($x);
    }
}
Loading history...
217
    }
218
219
    /**
220
     * @return string
221
     */
222
    public function getMeetingsUrl()
223
    {
224
        return $this->urlBuilder->buildUrl(ApiMethod::GET_MEETINGS);
225
    }
226
227
    /**
228
     * @return GetMeetingsResponse
229
     * @throws \RuntimeException
230
     */
231
    public function getMeetings()
232
    {
233
        $xml = $this->processXmlResponse($this->getMeetingsUrl());
234
235
        return new GetMeetingsResponse($xml);
0 ignored issues
show
Bug introduced by
It seems like $xml defined by $this->processXmlRespons...this->getMeetingsUrl()) on line 233 can be null; however, BigBlueButton\Responses\...Response::__construct() does not accept null, maybe add an additional type check?

Unless you are absolutely sure that the expression can never be null because of other conditions, we strongly recommend to add an additional type check to your code:

/** @return stdClass|null */
function mayReturnNull() { }

function doesNotAcceptNull(stdClass $x) { }

// With potential error.
function withoutCheck() {
    $x = mayReturnNull();
    doesNotAcceptNull($x); // Potential error here.
}

// Safe - Alternative 1
function withCheck1() {
    $x = mayReturnNull();
    if ( ! $x instanceof stdClass) {
        throw new \LogicException('$x must be defined.');
    }
    doesNotAcceptNull($x);
}

// Safe - Alternative 2
function withCheck2() {
    $x = mayReturnNull();
    if ($x instanceof stdClass) {
        doesNotAcceptNull($x);
    }
}
Loading history...
236
    }
237
238
    /**
239
     * @param $meetingParams GetMeetingInfoParameters
240
     * @return string
241
     */
242
    public function getMeetingInfoUrl($meetingParams)
243
    {
244
        return $this->urlBuilder->buildUrl(ApiMethod::GET_MEETING_INFO, $meetingParams->getHTTPQuery());
245
    }
246
247
    /**
248
     * @param $meetingParams GetMeetingInfoParameters
249
     * @return GetMeetingInfoResponse
250
     * @throws \RuntimeException
251
     */
252
    public function getMeetingInfo($meetingParams)
253
    {
254
        $xml = $this->processXmlResponse($this->getMeetingInfoUrl($meetingParams));
255
256
        return new GetMeetingInfoResponse($xml);
0 ignored issues
show
Bug introduced by
It seems like $xml defined by $this->processXmlRespons...nfoUrl($meetingParams)) on line 254 can be null; however, BigBlueButton\Responses\...Response::__construct() does not accept null, maybe add an additional type check?

Unless you are absolutely sure that the expression can never be null because of other conditions, we strongly recommend to add an additional type check to your code:

/** @return stdClass|null */
function mayReturnNull() { }

function doesNotAcceptNull(stdClass $x) { }

// With potential error.
function withoutCheck() {
    $x = mayReturnNull();
    doesNotAcceptNull($x); // Potential error here.
}

// Safe - Alternative 1
function withCheck1() {
    $x = mayReturnNull();
    if ( ! $x instanceof stdClass) {
        throw new \LogicException('$x must be defined.');
    }
    doesNotAcceptNull($x);
}

// Safe - Alternative 2
function withCheck2() {
    $x = mayReturnNull();
    if ($x instanceof stdClass) {
        doesNotAcceptNull($x);
    }
}
Loading history...
257
    }
258
259
    /* __________________ BBB RECORDING METHODS _________________ */
260
    /* The methods in the following section support the following categories of the BBB API:
261
    -- getRecordings
262
    -- publishRecordings
263
    -- deleteRecordings
264
    */
265
266
    /**
267
     * @param $recordingsParams GetRecordingsParameters
268
     * @return string
269
     */
270
    public function getRecordingsUrl($recordingsParams)
271
    {
272
        return $this->urlBuilder->buildUrl(ApiMethod::GET_RECORDINGS, $recordingsParams->getHTTPQuery());
273
    }
274
275
    /**
276
     * @param $recordingParams
277
     * @return GetRecordingsResponse
278
     * @throws \RuntimeException
279
     */
280
    public function getRecordings($recordingParams)
281
    {
282
        $xml = $this->processXmlResponse($this->getRecordingsUrl($recordingParams));
283
284
        return new GetRecordingsResponse($xml);
0 ignored issues
show
Bug introduced by
It seems like $xml defined by $this->processXmlRespons...sUrl($recordingParams)) on line 282 can be null; however, BigBlueButton\Responses\...Response::__construct() does not accept null, maybe add an additional type check?

Unless you are absolutely sure that the expression can never be null because of other conditions, we strongly recommend to add an additional type check to your code:

/** @return stdClass|null */
function mayReturnNull() { }

function doesNotAcceptNull(stdClass $x) { }

// With potential error.
function withoutCheck() {
    $x = mayReturnNull();
    doesNotAcceptNull($x); // Potential error here.
}

// Safe - Alternative 1
function withCheck1() {
    $x = mayReturnNull();
    if ( ! $x instanceof stdClass) {
        throw new \LogicException('$x must be defined.');
    }
    doesNotAcceptNull($x);
}

// Safe - Alternative 2
function withCheck2() {
    $x = mayReturnNull();
    if ($x instanceof stdClass) {
        doesNotAcceptNull($x);
    }
}
Loading history...
285
    }
286
287
    /**
288
     * @param $recordingParams PublishRecordingsParameters
289
     * @return string
290
     */
291
    public function getPublishRecordingsUrl($recordingParams)
292
    {
293
        return $this->urlBuilder->buildUrl(ApiMethod::PUBLISH_RECORDINGS, $recordingParams->getHTTPQuery());
294
    }
295
296
    /**
297
     * @param $recordingParams PublishRecordingsParameters
298
     * @return PublishRecordingsResponse
299
     * @throws \RuntimeException
300
     */
301
    public function publishRecordings($recordingParams)
302
    {
303
        $xml = $this->processXmlResponse($this->getPublishRecordingsUrl($recordingParams));
304
305
        return new PublishRecordingsResponse($xml);
0 ignored issues
show
Bug introduced by
It seems like $xml defined by $this->processXmlRespons...sUrl($recordingParams)) on line 303 can be null; however, BigBlueButton\Responses\...Response::__construct() does not accept null, maybe add an additional type check?

Unless you are absolutely sure that the expression can never be null because of other conditions, we strongly recommend to add an additional type check to your code:

/** @return stdClass|null */
function mayReturnNull() { }

function doesNotAcceptNull(stdClass $x) { }

// With potential error.
function withoutCheck() {
    $x = mayReturnNull();
    doesNotAcceptNull($x); // Potential error here.
}

// Safe - Alternative 1
function withCheck1() {
    $x = mayReturnNull();
    if ( ! $x instanceof stdClass) {
        throw new \LogicException('$x must be defined.');
    }
    doesNotAcceptNull($x);
}

// Safe - Alternative 2
function withCheck2() {
    $x = mayReturnNull();
    if ($x instanceof stdClass) {
        doesNotAcceptNull($x);
    }
}
Loading history...
306
    }
307
308
    /**
309
     * @param $recordingParams DeleteRecordingsParameters
310
     * @return string
311
     */
312
    public function getDeleteRecordingsUrl($recordingParams)
313
    {
314
        return $this->urlBuilder->buildUrl(ApiMethod::DELETE_RECORDINGS, $recordingParams->getHTTPQuery());
315
    }
316
317
    /**
318
     * @param $recordingParams DeleteRecordingsParameters
319
     * @return DeleteRecordingsResponse
320
     * @throws \RuntimeException
321
     */
322
    public function deleteRecordings($recordingParams)
323
    {
324
        $xml = $this->processXmlResponse($this->getDeleteRecordingsUrl($recordingParams));
325
326
        return new DeleteRecordingsResponse($xml);
0 ignored issues
show
Bug introduced by
It seems like $xml defined by $this->processXmlRespons...sUrl($recordingParams)) on line 324 can be null; however, BigBlueButton\Responses\...Response::__construct() does not accept null, maybe add an additional type check?

Unless you are absolutely sure that the expression can never be null because of other conditions, we strongly recommend to add an additional type check to your code:

/** @return stdClass|null */
function mayReturnNull() { }

function doesNotAcceptNull(stdClass $x) { }

// With potential error.
function withoutCheck() {
    $x = mayReturnNull();
    doesNotAcceptNull($x); // Potential error here.
}

// Safe - Alternative 1
function withCheck1() {
    $x = mayReturnNull();
    if ( ! $x instanceof stdClass) {
        throw new \LogicException('$x must be defined.');
    }
    doesNotAcceptNull($x);
}

// Safe - Alternative 2
function withCheck2() {
    $x = mayReturnNull();
    if ($x instanceof stdClass) {
        doesNotAcceptNull($x);
    }
}
Loading history...
327
    }
328
329
    /**
330
     * @param $recordingParams UpdateRecordingsParameters
331
     * @return string
332
     */
333
    public function getUpdateRecordingsUrl($recordingParams)
334
    {
335
        return $this->urlBuilder->buildUrl(ApiMethod::UPDATE_RECORDINGS, $recordingParams->getHTTPQuery());
336
    }
337
338
    /**
339
     * @param $recordingParams UpdateRecordingsParameters
340
     * @return UpdateRecordingsResponse
341
     * @throws \RuntimeException
342
     */
343
    public function updateRecordings($recordingParams)
344
    {
345
        $xml = $this->processXmlResponse($this->getUpdateRecordingsUrl($recordingParams));
346
347
        return new UpdateRecordingsResponse($xml);
0 ignored issues
show
Bug introduced by
It seems like $xml defined by $this->processXmlRespons...sUrl($recordingParams)) on line 345 can be null; however, BigBlueButton\Responses\...Response::__construct() does not accept null, maybe add an additional type check?

Unless you are absolutely sure that the expression can never be null because of other conditions, we strongly recommend to add an additional type check to your code:

/** @return stdClass|null */
function mayReturnNull() { }

function doesNotAcceptNull(stdClass $x) { }

// With potential error.
function withoutCheck() {
    $x = mayReturnNull();
    doesNotAcceptNull($x); // Potential error here.
}

// Safe - Alternative 1
function withCheck1() {
    $x = mayReturnNull();
    if ( ! $x instanceof stdClass) {
        throw new \LogicException('$x must be defined.');
    }
    doesNotAcceptNull($x);
}

// Safe - Alternative 2
function withCheck2() {
    $x = mayReturnNull();
    if ($x instanceof stdClass) {
        doesNotAcceptNull($x);
    }
}
Loading history...
348
    }
349
350
    /* ____________________ INTERNAL CLASS METHODS ___________________ */
351
352
    /**
353
     * A private utility method used by other public methods to process XML responses.
354
     *
355
     * @param  string            $url
356
     * @param  string            $xml
357
     * @return SimpleXMLElement
358
     * @throws \RuntimeException
359
     */
360
    private function processXmlResponse($url, $xml = '', $contentType = 'application/xml')
361
    {
362
        if (extension_loaded('curl')) {
363
            $ch = curl_init();
364
            if (!$ch) {
365
                throw new \RuntimeException('Unhandled curl error: ' . curl_error($ch));
366
            }
367
            $timeout = 10;
368
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
369
            curl_setopt($ch, CURLOPT_ENCODING, 'UTF-8');
370
            curl_setopt($ch, CURLOPT_URL, $url);
371
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
372
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
373
            if ($xml != '') {
374
                curl_setopt($ch, CURLOPT_HEADER, 0);
375
                curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
376
                curl_setopt($ch, CURLOPT_POST, 1);
377
                curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
378
                curl_setopt($ch, CURLOPT_HTTPHEADER, [
379
                    'Content-type: ' . $contentType,
380
                    'Content-length: ' . strlen($xml),
381
                ]);
382
            }
383
            $data = curl_exec($ch);
384
            if ($data === false) {
385
                throw new \RuntimeException('Unhandled curl error: ' . curl_error($ch));
386
            }
387
            curl_close($ch);
388
389
            return new SimpleXMLElement($data);
390
        }
391
        if (count($xml) !== 0) {
392
            throw new \RuntimeException('Post XML data set but curl PHP module is not installed or not enabled.');
393
        }
394
    }
395
}
396