Skip to content

Commit e71c778

Browse files
committed
Add support for clientSettingsOverride
1 parent 232213d commit e71c778

6 files changed

Lines changed: 71 additions & 12 deletions

File tree

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()
@@ -157,6 +158,10 @@
157158
* @method $this setPluginManifestsFetchUrl(string $pluginManifestsFetchUrl)
158159
* @method bool|null isPresentationConversionCacheEnabled()
159160
* @method $this setPresentationConversionCacheEnabled(bool $presentationConversionCacheEnabled)
161+
* @method bool|null isAllowOverrideClientSettingsOnCreateCall()
162+
* @method $this setAllowOverrideClientSettingsOnCreateCall(bool $allowOverrideClientSettingsOnCreateCall)
163+
* @method string getClientSettingsOverride()
164+
* @method $this setClientSettingsOverride(string $clientSettingsOverride)
160165
*/
161166
class CreateMeetingParameters extends MetaParameters
162167
{
@@ -239,6 +244,8 @@ class CreateMeetingParameters extends MetaParameters
239244
protected ?string $pluginManifests = null;
240245
protected ?string $pluginManifestsFetchUrl = null;
241246
protected ?bool $presentationConversionCacheEnabled = null;
247+
protected ?bool $allowOverrideClientSettingsOnCreateCall = null;
248+
protected ?string $clientSettingsOverride = null;
242249

243250
/**
244251
* @var array<string,string>
@@ -249,7 +256,7 @@ public function __construct(protected string $meetingID, protected string $name)
249256
{
250257
$this->guestPolicy = GuestPolicy::ALWAYS_ACCEPT;
251258

252-
$this->ignoreProperties = ['disabledFeatures', 'disabledFeaturesExclude'];
259+
$this->ignoreProperties = ['disabledFeatures', 'disabledFeaturesExclude', 'clientSettingsOverride'];
253260
}
254261

255262
public function setEndCallbackUrl(string $endCallbackUrl): self
@@ -381,12 +388,26 @@ public function getPresentations(): array
381388
return $this->presentations;
382389
}
383390

384-
public function getPresentationsAsXML(): string|false
391+
public function getModules(): string
385392
{
386-
$result = '';
393+
$xml = new SimpleXMLElementExtended('<?xml version="1.0" encoding="UTF-8"?><modules/>');
394+
$this->addPresentationsModule($xml);
395+
$this->addClientSettingsOverrideModule($xml);
387396

397+
return $xml->asXML();
398+
}
399+
400+
public function addClientSettingsOverrideModule(SimpleXMLElementExtended $xml): void
401+
{
402+
if (!empty($this->clientSettingsOverride)) {
403+
$module = $xml->addChildWithCData('module', $this->clientSettingsOverride);
404+
$module->addAttribute('name', 'clientSettingsOverride');
405+
}
406+
}
407+
408+
public function addPresentationsModule(SimpleXMLElementExtended $xml): void
409+
{
388410
if (!empty($this->presentations)) {
389-
$xml = new \SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><modules/>');
390411
$module = $xml->addChild('module');
391412
$module->addAttribute('name', 'presentation');
392413

@@ -404,10 +425,7 @@ public function getPresentationsAsXML(): string|false
404425
$document[0] = $content;
405426
}
406427
}
407-
$result = $xml->asXML();
408428
}
409-
410-
return $result;
411429
}
412430

413431
public function getHTTPQuery(): string
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
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+
*
12+
* @param string $name the name of the child element
13+
* @param string $value the value to be wrapped in CDATA
14+
*/
15+
public function addChildWithCData(string $name, string $value): self
16+
{
17+
$child = parent::addChild($name);
18+
$element = dom_import_simplexml($child);
19+
$docOwner = $element->ownerDocument;
20+
$element->appendChild($docOwner->createCDATASection($value));
21+
22+
return $child;
23+
}
24+
}

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)