Skip to content

Commit f64ce87

Browse files
committed
Add parameters to CreateMeetingParameters for creating breakout rooms.
1 parent 8a8c3f5 commit f64ce87

File tree

4 files changed

+184
-33
lines changed

4 files changed

+184
-33
lines changed

src/Parameters/CreateMeetingParameters.php

Lines changed: 113 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,26 @@ class CreateMeetingParameters extends MetaParameters
123123
*/
124124
private $presentations = [];
125125

126+
/**
127+
* @var boolean
128+
*/
129+
private $isBreakout;
130+
131+
/**
132+
* @var string
133+
*/
134+
private $parentMeetingId;
135+
136+
/**
137+
* @var int
138+
*/
139+
private $sequence;
140+
141+
/**
142+
* @var boolean
143+
*/
144+
private $freeJoin;
145+
126146
/**
127147
* CreateMeetingParameters constructor.
128148
*
@@ -522,6 +542,82 @@ public function setEndCallbackUrl($endCallbackUrl)
522542
return $this;
523543
}
524544

545+
/**
546+
* @return bool
547+
*/
548+
public function isBreakout()
549+
{
550+
return $this->isBreakout;
551+
}
552+
553+
/**
554+
* @param bool $isBreakout
555+
* @return CreateMeetingParameters
556+
*/
557+
public function setBreakout($isBreakout)
558+
{
559+
$this->isBreakout = $isBreakout;
560+
561+
return $this;
562+
}
563+
564+
/**
565+
* @return string
566+
*/
567+
public function getParentMeetingId()
568+
{
569+
return $this->parentMeetingId;
570+
}
571+
572+
/**
573+
* @param string $parentMeetingId
574+
* @return CreateMeetingParameters
575+
*/
576+
public function setParentMeetingId($parentMeetingId)
577+
{
578+
$this->parentMeetingId = $parentMeetingId;
579+
580+
return $this;
581+
}
582+
583+
/**
584+
* @return int
585+
*/
586+
public function getSequence()
587+
{
588+
return $this->sequence;
589+
}
590+
591+
/**
592+
* @param int $sequence
593+
* @return CreateMeetingParameters
594+
*/
595+
public function setSequence($sequence)
596+
{
597+
$this->sequence = $sequence;
598+
599+
return $this;
600+
}
601+
602+
/**
603+
* @return bool
604+
*/
605+
public function isFreeJoin()
606+
{
607+
return $this->freeJoin;
608+
}
609+
610+
/**
611+
* @param bool $freeJoin
612+
* @return CreateMeetingParameters
613+
*/
614+
public function setFreeJoin($freeJoin)
615+
{
616+
$this->freeJoin = $freeJoin;
617+
618+
return $this;
619+
}
620+
525621
/**
526622
* @return array
527623
*/
@@ -533,20 +629,24 @@ public function getPresentations()
533629
/**
534630
* @param $nameOrUrl
535631
* @param null $content
632+
* @param null $filename
536633
*
537634
* @return CreateMeetingParameters
538635
*/
539-
public function addPresentation($nameOrUrl, $content = null, $filname = null)
636+
public function addPresentation($nameOrUrl, $content = null, $filename = null)
540637
{
541-
if (!$filname) {
638+
if (!$filename) {
542639
$this->presentations[$nameOrUrl] = !$content ?: base64_encode($content);
543640
} else {
544-
$this->presentations[$nameOrUrl] = $filname;
641+
$this->presentations[$nameOrUrl] = $filename;
545642
}
546643

547644
return $this;
548645
}
549646

647+
/**
648+
* @return mixed
649+
*/
550650
public function getPresentationsAsXML()
551651
{
552652
$result = '';
@@ -602,6 +702,16 @@ public function getHTTPQuery()
602702
'muteOnStart' => $this->muteOnStart,
603703
];
604704

705+
// Add breakout rooms parameters only if the meeting is a breakout room
706+
if ($this->isBreakout()) {
707+
$queries = array_merge($queries, [
708+
'isBreakout' => $this->isBreakout ? 'true' : 'false',
709+
'parentMeetingID' => $this->parentMeetingId,
710+
'sequence' => $this->sequence,
711+
'freeJoin' => $this->freeJoin ? 'true' : 'false'
712+
]);
713+
}
714+
605715
$this->buildMeta($queries);
606716

607717
return $this->buildHTTPQuery($queries);

tests/BigBlueButtonTest.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,14 +170,16 @@ public function testCreateJoinMeetingUrl()
170170
}
171171
}
172172

173+
/**
174+
* @expectedException \Exception
175+
* @expectedExceptionMessage String could not be parsed as XML
176+
*/
173177
public function testJoinMeeting()
174178
{
175179
$joinMeetingParams = $this->generateJoinMeetingParams();
176180
$joinMeetingMock = $this->getJoinMeetingMock($joinMeetingParams);
177181
$joinMeetingMock->setRedirect(false);
178182

179-
$exception = new \Exception;
180-
$this->expectException(get_class($exception));
181183
$joinMeeting = $this->bbb->joinMeeting($joinMeetingMock);
182184
$this->assertEquals('SUCCESS', $joinMeeting->getReturnCode());
183185
$this->assertNotEmpty($joinMeeting->getAuthToken());

tests/Parameters/CreateMeetingParametersTest.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,29 @@ public function testCreateMeetingParameters()
5353
$this->assertEquals($params['meta_presenter'], $createMeetingParams->getMeta('presenter'));
5454
$this->assertEquals($params['meta_endCallbackUrl'], $createMeetingParams->getMeta('endCallbackUrl'));
5555

56+
// Check values are empty of this is not a breakout room
57+
$this->assertNull($createMeetingParams->isBreakout());
58+
$this->assertNull($createMeetingParams->getParentMeetingId());
59+
$this->assertNull($createMeetingParams->getSequence());
60+
$this->assertNull($createMeetingParams->isFreeJoin());
61+
5662
// Test setters that are ignored by the constructor
5763
$createMeetingParams->setMeetingId($newId = $this->faker->uuid);
5864
$createMeetingParams->setMeetingName($newName = $this->faker->name);
5965
$this->assertEquals($newName, $createMeetingParams->getMeetingName());
6066
$this->assertEquals($newId, $createMeetingParams->getMeetingId());
6167
}
6268

69+
public function testCreateBreakoutMeeting()
70+
{
71+
$params = $this->generateBreakoutCreateParams($this->generateCreateParams());
72+
$createBreakoutMeetingParams = $this->getBreakoutCreateMock($params);
73+
$this->assertEquals($params['isBreakout'], $createBreakoutMeetingParams->isBreakout());
74+
$this->assertEquals($params['parentMeetingId'], $createBreakoutMeetingParams->getParentMeetingId());
75+
$this->assertEquals($params['sequence'], $createBreakoutMeetingParams->getSequence());
76+
$this->assertEquals($params['freeJoin'], $createBreakoutMeetingParams->isFreeJoin());
77+
}
78+
6379
public function testGetPresentationsAsXMLWithUrl()
6480
{
6581
$params = $this->generateCreateParams();

tests/TestCase.php

Lines changed: 51 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -67,30 +67,44 @@ protected function createRealMeeting($bbb)
6767
protected function generateCreateParams()
6868
{
6969
return [
70-
'meetingName' => $this->faker->name,
71-
'meetingId' => $this->faker->uuid,
72-
'attendeePassword' => $this->faker->password,
73-
'moderatorPassword' => $this->faker->password,
74-
'autoStartRecording' => $this->faker->boolean(50),
75-
'dialNumber' => $this->faker->phoneNumber,
76-
'voiceBridge' => $this->faker->randomNumber(5),
77-
'webVoice' => $this->faker->word,
78-
'logoutUrl' => $this->faker->url,
79-
'maxParticipants' => $this->faker->numberBetween(2, 100),
80-
'record' => $this->faker->boolean(50),
81-
'duration' => $this->faker->numberBetween(0, 6000),
82-
'welcomeMessage' => $this->faker->sentence,
83-
'allowStartStopRecording' => $this->faker->boolean(50),
84-
'moderatorOnlyMessage' => $this->faker->sentence,
85-
'webcamsOnlyForModerator' => $this->faker->boolean(50),
86-
'logo' => $this->faker->imageUrl(330, 70),
87-
'copyright' => $this->faker->text,
88-
'muteOnStart' => $this->faker->boolean(50),
89-
'meta_presenter' => $this->faker->name,
90-
'meta_endCallbackUrl' => $this->faker->url
70+
'meetingName' => $this->faker->name,
71+
'meetingId' => $this->faker->uuid,
72+
'attendeePassword' => $this->faker->password,
73+
'moderatorPassword' => $this->faker->password,
74+
'autoStartRecording' => $this->faker->boolean(50),
75+
'dialNumber' => $this->faker->phoneNumber,
76+
'voiceBridge' => $this->faker->randomNumber(5),
77+
'webVoice' => $this->faker->word,
78+
'logoutUrl' => $this->faker->url,
79+
'maxParticipants' => $this->faker->numberBetween(2, 100),
80+
'record' => $this->faker->boolean(50),
81+
'duration' => $this->faker->numberBetween(0, 6000),
82+
'welcomeMessage' => $this->faker->sentence,
83+
'allowStartStopRecording' => $this->faker->boolean(50),
84+
'moderatorOnlyMessage' => $this->faker->sentence,
85+
'webcamsOnlyForModerator' => $this->faker->boolean(50),
86+
'logo' => $this->faker->imageUrl(330, 70),
87+
'copyright' => $this->faker->text,
88+
'muteOnStart' => $this->faker->boolean(50),
89+
'meta_presenter' => $this->faker->name,
90+
'meta_endCallbackUrl' => $this->faker->url
9191
];
9292
}
9393

94+
/**
95+
* @param $createParams
96+
* @return array
97+
*/
98+
protected function generateBreakoutCreateParams($createParams)
99+
{
100+
return array_merge($createParams, [
101+
'isBreakout' => true,
102+
'parentMeetingId' => $this->faker->uuid,
103+
'sequence' => $this->faker->numberBetween(1, 8),
104+
'freeJoin' => $this->faker->boolean(50)
105+
]);
106+
}
107+
94108
/**
95109
* @param $params array
96110
*
@@ -99,15 +113,27 @@ protected function generateCreateParams()
99113
protected function getCreateMock($params)
100114
{
101115
$createMeetingParams = new CreateMeetingParameters($params['meetingId'], $params['meetingName']);
102-
$createMeetingParams->setAttendeePassword($params['attendeePassword'])->setModeratorPassword($params['moderatorPassword'])->
116+
117+
return $createMeetingParams->setAttendeePassword($params['attendeePassword'])->setModeratorPassword($params['moderatorPassword'])->
103118
setDialNumber($params['dialNumber'])->setVoiceBridge($params['voiceBridge'])->setWebVoice($params['webVoice'])->
104119
setLogoutUrl($params['logoutUrl'])->setMaxParticipants($params['maxParticipants'])->setRecord($params['record'])->
105120
setDuration($params['duration'])->setWelcomeMessage($params['welcomeMessage'])->setAutoStartRecording($params['autoStartRecording'])->
106121
setAllowStartStopRecording($params['allowStartStopRecording'])->setModeratorOnlyMessage($params['moderatorOnlyMessage'])->
107122
setWebcamsOnlyForModerator($params['webcamsOnlyForModerator'])->setLogo($params['logo'])->setCopyright($params['copyright'])->
108123
setEndCallbackUrl($params['meta_endCallbackUrl'])->setMuteOnStart($params['muteOnStart'])->addMeta('presenter', $params['meta_presenter']);
124+
}
109125

110-
return $createMeetingParams;
126+
/**
127+
* @param $params
128+
*
129+
* @return CreateMeetingParameters
130+
*/
131+
protected function getBreakoutCreateMock($params)
132+
{
133+
$createMeetingParams = $this->getCreateMock($params);
134+
135+
return $createMeetingParams->setBreakout($params['isBreakout'])->setParentMeetingId($params['parentMeetingId'])->
136+
setSequence($params['sequence'])->setFreeJoin($params['freeJoin']);
111137
}
112138

113139
/**
@@ -185,9 +211,8 @@ protected function generateUpdateRecordingsParams()
185211
protected function getUpdateRecordingsParamsMock($params)
186212
{
187213
$updateRecordingsParams = new UpdateRecordingsParameters($params['recordingId']);
188-
$updateRecordingsParams->addMeta('presenter', $params['meta_presenter']);
189214

190-
return $updateRecordingsParams;
215+
return $updateRecordingsParams->addMeta('presenter', $params['meta_presenter']);
191216
}
192217

193218
/**
@@ -207,9 +232,7 @@ protected function generateSetConfigXMLParams()
207232
*/
208233
protected function getSetConfigXMLMock($params)
209234
{
210-
$setConfigXMLParams = new SetConfigXMLParameters($params['meetingId']);
211-
212-
return $setConfigXMLParams;
235+
return new SetConfigXMLParameters($params['meetingId']);
213236
}
214237

215238
// Load fixtures

0 commit comments

Comments
 (0)