Skip to content

Commit d9cf002

Browse files
committed
Implement breakout rooms groups in create API.
1 parent 335091e commit d9cf002

File tree

5 files changed

+56
-14
lines changed

5 files changed

+56
-14
lines changed

src/Parameters/CreateMeetingParameters.php

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -321,11 +321,9 @@ class CreateMeetingParameters extends MetaParameters
321321
private $disabledFeatures = [];
322322

323323
/**
324-
* @var
325-
*
326-
* @todo
324+
* @var array
327325
*/
328-
private $breakoutRoomsGroups;
326+
private $breakoutRoomsGroups = [];
329327

330328
/**
331329
* CreateMeetingParameters constructor.
@@ -1429,6 +1427,25 @@ public function setDisabledFeatures(array $disabledFeatures): CreateMeetingParam
14291427
return $this;
14301428
}
14311429

1430+
public function getBreakoutRoomsGroups(): array
1431+
{
1432+
return $this->breakoutRoomsGroups;
1433+
}
1434+
1435+
/**
1436+
* @param $id
1437+
* @param $name
1438+
* @param $roster
1439+
*
1440+
* @return $this
1441+
*/
1442+
public function addBreakoutRoomsGroup($id, $name, $roster)
1443+
{
1444+
$this->breakoutRoomsGroups[] = ['id' => $id, 'name' => $name, 'roster' => $roster];
1445+
1446+
return $this;
1447+
}
1448+
14321449
/**
14331450
* @return array
14341451
*/
@@ -1528,7 +1545,6 @@ public function getHTTPQuery()
15281545
'bannerColor' => trim($this->bannerColor),
15291546
'learningDashboardEnabled' => $this->learningDashboardEnabled ? 'true' : 'false',
15301547
'virtualBackgroundsDisabled' => $this->virtualBackgroundsDisabled ? 'true' : 'false',
1531-
'learningDashboardCleanupDelayInMinutes' => $this->learningDashboardCleanupDelayInMinutes,
15321548
'endWhenNoModeratorDelayInMinutes' => $this->endWhenNoModeratorDelayInMinutes,
15331549
'allowRequestsWithoutSession' => $this->allowRequestsWithoutSession ? 'true' : 'false',
15341550
'meetingEndedURL' => $this->meetingEndedURL,
@@ -1553,6 +1569,17 @@ public function getHTTPQuery()
15531569
'sequence' => $this->sequence,
15541570
'freeJoin' => $this->freeJoin ? 'true' : 'false',
15551571
]);
1572+
} else {
1573+
$queries = array_merge($queries, [
1574+
'learningDashboardCleanupDelayInMinutes' => $this->learningDashboardCleanupDelayInMinutes,
1575+
]);
1576+
1577+
// Pre-defined groups to automatically assign the students to a given breakout room
1578+
if (!empty($this->breakoutRoomsGroups)) {
1579+
$queries = array_merge($queries, [
1580+
'groups' => json_encode($this->breakoutRoomsGroups),
1581+
]);
1582+
}
15561583
}
15571584

15581585
$this->buildMeta($queries);

tests/BigBlueButtonTest.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -265,16 +265,15 @@ public function testGetMeetingInfoUrl()
265265
{
266266
$meeting = $this->createRealMeeting($this->bbb);
267267

268-
$url = $this->bbb->getMeetingInfoUrl(new GetMeetingInfoParameters($meeting->getMeetingId(), $meeting->getModeratorPassword()));
268+
$url = $this->bbb->getMeetingInfoUrl(new GetMeetingInfoParameters($meeting->getMeetingId()));
269269
$this->assertStringContainsString('=' . urlencode($meeting->getMeetingId()), $url);
270-
$this->assertStringContainsString('=' . urlencode($meeting->getModeratorPassword()), $url);
271270
}
272271

273272
public function testGetMeetingInfo()
274273
{
275274
$meeting = $this->createRealMeeting($this->bbb);
276275

277-
$result = $this->bbb->getMeetingInfo(new GetMeetingInfoParameters($meeting->getMeetingId(), $meeting->getModeratorPassword()));
276+
$result = $this->bbb->getMeetingInfo(new GetMeetingInfoParameters($meeting->getMeetingId()));
278277
$this->assertEquals('SUCCESS', $result->getReturnCode());
279278
$this->assertTrue($result->success());
280279
}

tests/Parameters/CreateMeetingParametersTest.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@ public function testCreateMeetingParameters()
8686
$this->assertEquals($params['meetingExpireIfNoUserJoinedInMinutes'], $createMeetingParams->getMeetingExpireIfNoUserJoinedInMinutes());
8787
$this->assertEquals($params['meetingExpireWhenLastUserLeftInMinutes'], $createMeetingParams->getMeetingExpireWhenLastUserLeftInMinutes());
8888
$this->assertEquals($params['preUploadedPresentationOverrideDefault'], $createMeetingParams->isPreUploadedPresentationOverrideDefault());
89+
$this->assertEquals($params['disabledFeatures'], $createMeetingParams->getDisabledFeatures());
90+
$this->assertEquals(json_encode($params['groups']), json_encode($createMeetingParams->getBreakoutRoomsGroups()));
8991
$this->assertEquals($params['meta_presenter'], $createMeetingParams->getMeta('presenter'));
9092
$this->assertEquals($params['meta_endCallbackUrl'], $createMeetingParams->getMeta('endCallbackUrl'));
9193
$this->assertEquals($params['meta_bbb-recording-ready-url'], $createMeetingParams->getMeta('bbb-recording-ready-url'));

tests/Parameters/GetMeetingInfoParametersTest.php

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,9 @@ public function testGetMeetingInfoParameters()
3333
$getMeetingInfoParams = new GetMeetingInfoParameters($meetingId = $this->faker->uuid, $password = $this->faker->password());
3434

3535
$this->assertEquals($meetingId, $getMeetingInfoParams->getMeetingId());
36-
$this->assertEquals($password, $getMeetingInfoParams->getPassword());
3736

3837
// Test setters that are ignored by the constructor
39-
$getMeetingInfoParams->setMeetingId($newId = $this->faker->uuid);
40-
$getMeetingInfoParams->setPassword($newPassword = $this->faker->password);
38+
$getMeetingInfoParams->setMeetingId($newId = $this->faker->uuid);
4139
$this->assertEquals($newId, $getMeetingInfoParams->getMeetingId());
42-
$this->assertEquals($newPassword, $getMeetingInfoParams->getPassword());
4340
}
4441
}

tests/TestCase.php

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,16 +176,29 @@ protected function generateCreateParams()
176176
'breakoutRoomsPrivateChatEnabled' => $this->faker->boolean(50),
177177
'meetingEndedURL' => $this->faker->url,
178178
'meetingLayout' => $this->faker->randomElement(MeetingLayout::getValues()),
179+
'meetingCameraCap' => $this->faker->numberBetween(1, 3),
179180
'meetingExpireIfNoUserJoinedInMinutes' => $this->faker->numberBetween(1, 10),
180181
'meetingExpireWhenLastUserLeftInMinutes' => $this->faker->numberBetween(5, 15),
181182
'preUploadedPresentationOverrideDefault' => $this->faker->boolean,
183+
'groups' => $this->generateBreakoutRoomsGroups(),
182184
'disabledFeatures' => $this->faker->randomElements(Feature::getValues()),
183185
'meta_presenter' => $this->faker->name,
184186
'meta_endCallbackUrl' => $this->faker->url,
185187
'meta_bbb-recording-ready-url' => $this->faker->url,
186188
];
187189
}
188190

191+
protected function generateBreakoutRoomsGroups()
192+
{
193+
$br = $this->faker->numberBetween(0, 8);
194+
$groups = [];
195+
for ($i = 0; $i <= $br; ++$i) {
196+
$groups[] = ['id' => $this->faker->uuid, 'name' => $this->faker->name, 'roster' => $this->faker->randomElements];
197+
}
198+
199+
return $groups;
200+
}
201+
189202
/**
190203
* @param $createParams
191204
*
@@ -210,6 +223,10 @@ protected function getCreateMock($params)
210223
{
211224
$createMeetingParams = new CreateMeetingParameters($params['meetingId'], $params['meetingName']);
212225

226+
foreach ($params['groups'] as $group) {
227+
$createMeetingParams->addBreakoutRoomsGroup($group['id'], $group['name'], $group['roster']);
228+
}
229+
213230
return $createMeetingParams
214231
->setAttendeePassword($params['attendeePassword'])
215232
->setModeratorPassword($params['moderatorPassword'])
@@ -262,7 +279,7 @@ protected function getCreateMock($params)
262279
->setMeetingExpireIfNoUserJoinedInMinutes($params['meetingExpireIfNoUserJoinedInMinutes'])
263280
->setMeetingExpireWhenLastUserLeftInMinutes($params['meetingExpireWhenLastUserLeftInMinutes'])
264281
->setPreUploadedPresentationOverrideDefault($params['preUploadedPresentationOverrideDefault'])
265-
->disabledFeatures($params['disabledFeatures'])
282+
->setDisabledFeatures($params['disabledFeatures'])
266283
->addMeta('presenter', $params['meta_presenter'])
267284
->addMeta('bbb-recording-ready-url', $params['meta_bbb-recording-ready-url'])
268285
;
@@ -311,7 +328,7 @@ protected function getJoinMeetingMock($params)
311328

312329
return $joinMeetingParams->setUserId($params['userId'])->setWebVoiceConf($params['webVoiceConf'])
313330
->setCreationTime($params['creationTime'])->addUserData('countrycode', $params['userdata_countrycode'])
314-
->addUserData('email', $params['userdata_email'])->addUserData('commercial', $params['userdata_commercial']);
331+
->setRole($params['role'])->addUserData('email', $params['userdata_email'])->addUserData('commercial', $params['userdata_commercial']);
315332
}
316333

317334
/**

0 commit comments

Comments
 (0)