|
|
|
|
@ -19,6 +19,7 @@ use Chamilo\PluginBundle\Zoom\API\WebinarSettings; |
|
|
|
|
use Chamilo\PluginBundle\Zoom\Meeting; |
|
|
|
|
use Chamilo\PluginBundle\Zoom\MeetingActivity; |
|
|
|
|
use Chamilo\PluginBundle\Zoom\MeetingRepository; |
|
|
|
|
use Chamilo\PluginBundle\Zoom\Presenter; |
|
|
|
|
use Chamilo\PluginBundle\Zoom\Recording; |
|
|
|
|
use Chamilo\PluginBundle\Zoom\RecordingRepository; |
|
|
|
|
use Chamilo\PluginBundle\Zoom\Registrant; |
|
|
|
|
@ -71,6 +72,7 @@ class ZoomPlugin extends Plugin |
|
|
|
|
self::SETTING_CLIENT_SECRET => 'text', |
|
|
|
|
self::SETTING_SECRET_TOKEN => 'text', |
|
|
|
|
'enableParticipantRegistration' => 'boolean', |
|
|
|
|
'enablePresenter' => 'boolean', |
|
|
|
|
'enableCloudRecording' => [ |
|
|
|
|
'type' => 'select', |
|
|
|
|
'options' => [ |
|
|
|
|
@ -623,6 +625,60 @@ class ZoomPlugin extends Plugin |
|
|
|
|
return $form; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function getRegisterPresenterForm(Meeting $meeting): FormValidator |
|
|
|
|
{ |
|
|
|
|
$form = new FormValidator('register_presenter', 'post', $_SERVER['REQUEST_URI']); |
|
|
|
|
|
|
|
|
|
$presenterIdSelect = $form->addSelect('presenterIds', $this->get_lang('RegisteredPresenters')); |
|
|
|
|
$presenterIdSelect->setMultiple(true); |
|
|
|
|
|
|
|
|
|
$form->addButtonSend($this->get_lang('UpdateRegisteredUserList')); |
|
|
|
|
|
|
|
|
|
$users = $meeting->getRegistrableUsers(); |
|
|
|
|
|
|
|
|
|
foreach ($users as $user) { |
|
|
|
|
$presenterIdSelect->addOption( |
|
|
|
|
api_get_person_name($user->getFirstname(), $user->getLastname()), |
|
|
|
|
$user->getId() |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if ($form->validate()) { |
|
|
|
|
$selectedPresenterIds = $form->getSubmitValue('presenterIds') ?: []; |
|
|
|
|
$selectedPresenters = []; |
|
|
|
|
|
|
|
|
|
foreach ($users as $user) { |
|
|
|
|
if (in_array($user->getId(), $selectedPresenterIds)) { |
|
|
|
|
$selectedPresenters[] = $user; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
$this->updatePresenterList($meeting, $selectedPresenters); |
|
|
|
|
|
|
|
|
|
Display::addFlash( |
|
|
|
|
Display::return_message($this->get_lang('RegisteredUserListWasUpdated'), 'confirm') |
|
|
|
|
); |
|
|
|
|
} catch (Exception $exception) { |
|
|
|
|
Display::addFlash( |
|
|
|
|
Display::return_message($exception->getMessage(), 'error') |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$registeredPresenterIds = []; |
|
|
|
|
|
|
|
|
|
foreach ($meeting->getPresenters() as $registrant) { |
|
|
|
|
if ($registrant instanceof Presenter) { |
|
|
|
|
$registeredPresenterIds[] = $registrant->getUser()->getId(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$presenterIdSelect->setSelected($registeredPresenterIds); |
|
|
|
|
|
|
|
|
|
return $form; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Generates a meeting recording files management form. |
|
|
|
|
* Takes action on validation. |
|
|
|
|
@ -1250,6 +1306,16 @@ class ZoomPlugin extends Plugin |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$currentUser = api_get_user_entity(api_get_user_id()); |
|
|
|
|
|
|
|
|
|
if ('true' === $this->get('enableParticipantRegistration') |
|
|
|
|
&& 'true' === $this->get('enablePresenter') |
|
|
|
|
&& $currentUser |
|
|
|
|
&& $meeting->hasUserAsPresenter($currentUser) |
|
|
|
|
) { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return $meeting->isUserMeeting() && $meeting->getUser()->getId() == api_get_user_id(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -1559,6 +1625,32 @@ class ZoomPlugin extends Plugin |
|
|
|
|
return $failedUsers; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @param Meeting $meeting |
|
|
|
|
* @param array<User> $users |
|
|
|
|
* |
|
|
|
|
* @throws OptimisticLockException |
|
|
|
|
* @throws \Doctrine\ORM\ORMException |
|
|
|
|
* |
|
|
|
|
* @return array |
|
|
|
|
*/ |
|
|
|
|
public function registerPresenters(Meeting $meeting, array $users): array |
|
|
|
|
{ |
|
|
|
|
$failedUsers = []; |
|
|
|
|
|
|
|
|
|
foreach ($users as $user) { |
|
|
|
|
try { |
|
|
|
|
$this->registerUser($meeting, $user, false, true); |
|
|
|
|
} catch (Exception $exception) { |
|
|
|
|
$failedUsers[$user->getId()] = $exception->getMessage(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Database::getManager()->flush(); |
|
|
|
|
|
|
|
|
|
return $failedUsers; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Removes registrants from a meeting. |
|
|
|
|
* |
|
|
|
|
@ -1626,13 +1718,55 @@ class ZoomPlugin extends Plugin |
|
|
|
|
$this->unregister($meeting, $registrantsToRemove); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private function updatePresenterList($meeting, $users) |
|
|
|
|
{ |
|
|
|
|
/** @var array<Registrant> $presenters */ |
|
|
|
|
$presenters = $meeting->getPresenters(); |
|
|
|
|
|
|
|
|
|
$presenterToAdd = []; |
|
|
|
|
|
|
|
|
|
foreach ($users as $user) { |
|
|
|
|
$foundPresenter = false; |
|
|
|
|
|
|
|
|
|
foreach ($presenters as $presenter) { |
|
|
|
|
if ($presenter->getUser() === $user) { |
|
|
|
|
$foundPresenter = true; |
|
|
|
|
|
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!$foundPresenter) { |
|
|
|
|
$presenterToAdd[] = $user; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$registrantsToRemove = []; |
|
|
|
|
|
|
|
|
|
foreach ($presenters as $registrant) { |
|
|
|
|
$found = false; |
|
|
|
|
foreach ($users as $user) { |
|
|
|
|
if ($registrant->getUser() === $user) { |
|
|
|
|
$found = true; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (!$found) { |
|
|
|
|
$registrantsToRemove[] = $registrant; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$this->registerPresenters($meeting, $presenterToAdd); |
|
|
|
|
$this->unregister($meeting, $registrantsToRemove); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @throws Exception |
|
|
|
|
* @throws OptimisticLockException |
|
|
|
|
* |
|
|
|
|
* @return Registrant |
|
|
|
|
*/ |
|
|
|
|
private function registerUser(Meeting $meeting, User $user, $andFlush = true) |
|
|
|
|
private function registerUser(Meeting $meeting, User $user, $andFlush = true, bool $isPresenter = false) |
|
|
|
|
{ |
|
|
|
|
if (empty($user->getEmail())) { |
|
|
|
|
throw new Exception($this->get_lang('CannotRegisterWithoutEmailAddress')); |
|
|
|
|
@ -1652,7 +1786,13 @@ class ZoomPlugin extends Plugin |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$registrantEntity = (new Registrant()) |
|
|
|
|
$registrantEntity = new Registrant(); |
|
|
|
|
|
|
|
|
|
if ($isPresenter) { |
|
|
|
|
$registrantEntity = new Presenter(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$registrantEntity |
|
|
|
|
->setMeeting($meeting) |
|
|
|
|
->setUser($user) |
|
|
|
|
->setMeetingRegistrant($meetingRegistrant) |
|
|
|
|
|