Skip to content

Commit ebcddeb

Browse files
committed
Add support for clientSettingsOverride
1 parent 58f3d5e commit ebcddeb

File tree

6 files changed

+70
-12
lines changed

6 files changed

+70
-12
lines changed

composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@
6262
"ext-curl": "*",
6363
"ext-simplexml": "*",
6464
"ext-mbstring": "*",
65-
"ext-json": "*"
65+
"ext-json": "*",
66+
"ext-dom": "*"
6667
},
6768
"suggest": {
6869
"psr/http-client-implementation": "To use the PsrHttpClientTransport.",

src/BigBlueButton.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ public function getCreateMeetingUrl(CreateMeetingParameters $createMeetingParams
222222
*/
223223
public function createMeeting(CreateMeetingParameters $createMeetingParams): CreateMeetingResponse
224224
{
225-
$xml = $this->processXmlResponse($this->getCreateMeetingUrl($createMeetingParams), $createMeetingParams->getPresentationsAsXML());
225+
$xml = $this->processXmlResponse($this->getCreateMeetingUrl($createMeetingParams), $createMeetingParams->getModules());
226226

227227
return new CreateMeetingResponse($xml);
228228
}

src/Parameters/CreateMeetingParameters.php

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
use BigBlueButton\Enum\Feature;
2626
use BigBlueButton\Enum\GuestPolicy;
2727
use BigBlueButton\Enum\MeetingLayout;
28+
use BigBlueButton\Util\SimpleXMLElementExtended;
2829

2930
/**
3031
* @method string getName()
@@ -147,6 +148,10 @@
147148
* @method $this setPreUploadedPresentation(string $preUploadedPresentation)
148149
* @method string getPreUploadedPresentationName()
149150
* @method $this setPreUploadedPresentationName(string $preUploadedPresentationName)
151+
* @method bool|null isAllowOverrideClientSettingsOnCreateCall()
152+
* @method $this setAllowOverrideClientSettingsOnCreateCall(bool $allowOverrideClientSettingsOnCreateCall)
153+
* @method string getClientSettingsOverride()
154+
* @method $this setClientSettingsOverride(string $clientSettingsOverride)
150155
*/
151156
class CreateMeetingParameters extends MetaParameters
152157
{
@@ -224,6 +229,8 @@ class CreateMeetingParameters extends MetaParameters
224229
protected ?bool $recordFullDurationMedia = null;
225230
protected ?string $presentationUploadExternalUrl = null;
226231
protected ?string $presentationUploadExternalDescription = null;
232+
protected ?bool $allowOverrideClientSettingsOnCreateCall = null;
233+
protected ?string $clientSettingsOverride = null;
227234

228235
/**
229236
* @var array<string,string>
@@ -234,7 +241,7 @@ public function __construct(protected string $meetingID, protected string $name)
234241
{
235242
$this->guestPolicy = GuestPolicy::ALWAYS_ACCEPT;
236243

237-
$this->ignoreProperties = ['disabledFeatures', 'disabledFeaturesExclude'];
244+
$this->ignoreProperties = ['disabledFeatures', 'disabledFeaturesExclude', 'clientSettingsOverride'];
238245
}
239246

240247
public function setEndCallbackUrl(string $endCallbackUrl): self
@@ -366,12 +373,26 @@ public function getPresentations(): array
366373
return $this->presentations;
367374
}
368375

369-
public function getPresentationsAsXML(): string|false
376+
public function getModules(): string
370377
{
371-
$result = '';
378+
$xml = new SimpleXMLElementExtended('<?xml version="1.0" encoding="UTF-8"?><modules/>');
379+
$this->addPresentationsModule($xml);
380+
$this->addClientSettingsOverrideModule($xml);
372381

382+
return $xml->asXML();
383+
}
384+
385+
public function addClientSettingsOverrideModule(SimpleXMLElementExtended $xml): void
386+
{
387+
if (!empty($this->clientSettingsOverride)) {
388+
$module = $xml->addChildWithCData('module', $this->clientSettingsOverride);
389+
$module->addAttribute('name', 'clientSettingsOverride');
390+
}
391+
}
392+
393+
public function addPresentationsModule(SimpleXMLElementExtended $xml): void
394+
{
373395
if (!empty($this->presentations)) {
374-
$xml = new \SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><modules/>');
375396
$module = $xml->addChild('module');
376397
$module->addAttribute('name', 'presentation');
377398

@@ -389,10 +410,7 @@ public function getPresentationsAsXML(): string|false
389410
$document[0] = $content;
390411
}
391412
}
392-
$result = $xml->asXML();
393413
}
394-
395-
return $result;
396414
}
397415

398416
public function getHTTPQuery(): string
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace BigBlueButton\Util;
6+
7+
class SimpleXMLElementExtended extends \SimpleXMLElement
8+
{
9+
/**
10+
* Adds a child with $value inside CDATA.
11+
* @param string $name The name of the child element.
12+
* @param string $value The value to be wrapped in CDATA.
13+
*/
14+
public function addChildWithCData(string $name, string $value): self
15+
{
16+
$child = parent::addChild($name);
17+
$element = dom_import_simplexml($child);
18+
$docOwner = $element->ownerDocument;
19+
$element->appendChild($docOwner->createCDATASection($value));
20+
21+
return $child;
22+
}
23+
}

tests/fixtures/client_settings.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<modules>
3+
<module name="clientSettingsOverride">
4+
<![CDATA[{ "public": { "app": { "appName": "Test" } } }]]>
5+
</module>
6+
</modules>

tests/unit/Parameters/CreateMeetingParametersTest.php

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -202,23 +202,23 @@ public function testGetPresentationsAsXMLWithUrl(): void
202202
$params = $this->generateCreateParams();
203203
$createMeetingParams = $this->getCreateMock($params);
204204
$createMeetingParams->addPresentation('http://test-install.blindsidenetworks.com/default.pdf');
205-
$this->assertXmlStringEqualsXmlFile(__DIR__.\DIRECTORY_SEPARATOR.'..'.\DIRECTORY_SEPARATOR.'..'.\DIRECTORY_SEPARATOR.'fixtures'.\DIRECTORY_SEPARATOR.'presentation_with_url.xml', $createMeetingParams->getPresentationsAsXML());
205+
$this->assertXmlStringEqualsXmlFile(__DIR__.\DIRECTORY_SEPARATOR.'..'.\DIRECTORY_SEPARATOR.'..'.\DIRECTORY_SEPARATOR.'fixtures'.\DIRECTORY_SEPARATOR.'presentation_with_url.xml', $createMeetingParams->getModules());
206206
}
207207

208208
public function testGetPresentationsAsXMLWithUrlAndFilename(): void
209209
{
210210
$params = $this->generateCreateParams();
211211
$createMeetingParams = $this->getCreateMock($params);
212212
$createMeetingParams->addPresentation('http://test-install.blindsidenetworks.com/default.pdf', null, 'presentation.pdf');
213-
$this->assertXmlStringEqualsXmlFile(__DIR__.\DIRECTORY_SEPARATOR.'..'.\DIRECTORY_SEPARATOR.'..'.\DIRECTORY_SEPARATOR.'fixtures'.\DIRECTORY_SEPARATOR.'presentation_with_filename.xml', $createMeetingParams->getPresentationsAsXML());
213+
$this->assertXmlStringEqualsXmlFile(__DIR__.\DIRECTORY_SEPARATOR.'..'.\DIRECTORY_SEPARATOR.'..'.\DIRECTORY_SEPARATOR.'fixtures'.\DIRECTORY_SEPARATOR.'presentation_with_filename.xml', $createMeetingParams->getModules());
214214
}
215215

216216
public function testGetPresentationsAsXMLWithFile(): void
217217
{
218218
$params = $this->generateCreateParams();
219219
$createMeetingParams = $this->getCreateMock($params);
220220
$createMeetingParams->addPresentation('bbb_logo.png', file_get_contents(__DIR__.\DIRECTORY_SEPARATOR.'..'.\DIRECTORY_SEPARATOR.'..'.\DIRECTORY_SEPARATOR.'fixtures'.\DIRECTORY_SEPARATOR.'bbb_logo.png'));
221-
$this->assertXmlStringEqualsXmlFile(__DIR__.\DIRECTORY_SEPARATOR.'..'.\DIRECTORY_SEPARATOR.'..'.\DIRECTORY_SEPARATOR.'fixtures'.\DIRECTORY_SEPARATOR.'presentation_with_embedded_file.xml', $createMeetingParams->getPresentationsAsXML());
221+
$this->assertXmlStringEqualsXmlFile(__DIR__.\DIRECTORY_SEPARATOR.'..'.\DIRECTORY_SEPARATOR.'..'.\DIRECTORY_SEPARATOR.'fixtures'.\DIRECTORY_SEPARATOR.'presentation_with_embedded_file.xml', $createMeetingParams->getModules());
222222
}
223223

224224
public function testUserCameraCap(): void
@@ -272,4 +272,14 @@ public function testGuestPolicyAskModerator(): void
272272
$this->assertSame(GuestPolicy::ASK_MODERATOR, $createMeetingParams->getGuestPolicy());
273273
$this->assertTrue($createMeetingParams->isGuestPolicyAskModerator());
274274
}
275+
276+
public function testClientSettingsOverride(): void
277+
{
278+
$params = $this->generateCreateParams();
279+
$createMeetingParams = $this->getCreateMock($params);
280+
281+
$createMeetingParams->setClientSettingsOverride('{ "public": { "app": { "appName": "Test" } } }');
282+
283+
$this->assertXmlStringEqualsXmlFile(__DIR__.\DIRECTORY_SEPARATOR.'..'.\DIRECTORY_SEPARATOR.'..'.\DIRECTORY_SEPARATOR.'fixtures'.\DIRECTORY_SEPARATOR.'client_settings.xml', $createMeetingParams->getModules());
284+
}
275285
}

0 commit comments

Comments
 (0)