19
19
use Chamilo \PluginBundle \Zoom \Meeting ;
20
20
use Chamilo \PluginBundle \Zoom \MeetingActivity ;
21
21
use Chamilo \PluginBundle \Zoom \MeetingRepository ;
22
+ use Chamilo \PluginBundle \Zoom \Presenter ;
22
23
use Chamilo \PluginBundle \Zoom \Recording ;
23
24
use Chamilo \PluginBundle \Zoom \RecordingRepository ;
24
25
use Chamilo \PluginBundle \Zoom \Registrant ;
@@ -71,6 +72,7 @@ public function __construct()
71
72
self ::SETTING_CLIENT_SECRET => 'text ' ,
72
73
self ::SETTING_SECRET_TOKEN => 'text ' ,
73
74
'enableParticipantRegistration ' => 'boolean ' ,
75
+ 'enablePresenter ' => 'boolean ' ,
74
76
'enableCloudRecording ' => [
75
77
'type ' => 'select ' ,
76
78
'options ' => [
@@ -623,6 +625,60 @@ public function getRegisterParticipantForm($meeting)
623
625
return $ form ;
624
626
}
625
627
628
+ public function getRegisterPresenterForm (Meeting $ meeting ): FormValidator
629
+ {
630
+ $ form = new FormValidator ('register_presenter ' , 'post ' , $ _SERVER ['REQUEST_URI ' ]);
631
+
632
+ $ presenterIdSelect = $ form ->addSelect ('presenterIds ' , $ this ->get_lang ('RegisteredPresenters ' ));
633
+ $ presenterIdSelect ->setMultiple (true );
634
+
635
+ $ form ->addButtonSend ($ this ->get_lang ('UpdateRegisteredUserList ' ));
636
+
637
+ $ users = $ meeting ->getRegistrableUsers ();
638
+
639
+ foreach ($ users as $ user ) {
640
+ $ presenterIdSelect ->addOption (
641
+ api_get_person_name ($ user ->getFirstname (), $ user ->getLastname ()),
642
+ $ user ->getId ()
643
+ );
644
+ }
645
+
646
+ if ($ form ->validate ()) {
647
+ $ selectedPresenterIds = $ form ->getSubmitValue ('presenterIds ' ) ?: [];
648
+ $ selectedPresenters = [];
649
+
650
+ foreach ($ users as $ user ) {
651
+ if (in_array ($ user ->getId (), $ selectedPresenterIds )) {
652
+ $ selectedPresenters [] = $ user ;
653
+ }
654
+ }
655
+
656
+ try {
657
+ $ this ->updatePresenterList ($ meeting , $ selectedPresenters );
658
+
659
+ Display::addFlash (
660
+ Display::return_message ($ this ->get_lang ('RegisteredUserListWasUpdated ' ), 'confirm ' )
661
+ );
662
+ } catch (Exception $ exception ) {
663
+ Display::addFlash (
664
+ Display::return_message ($ exception ->getMessage (), 'error ' )
665
+ );
666
+ }
667
+ }
668
+
669
+ $ registeredPresenterIds = [];
670
+
671
+ foreach ($ meeting ->getPresenters () as $ registrant ) {
672
+ if ($ registrant instanceof Presenter) {
673
+ $ registeredPresenterIds [] = $ registrant ->getUser ()->getId ();
674
+ }
675
+ }
676
+
677
+ $ presenterIdSelect ->setSelected ($ registeredPresenterIds );
678
+
679
+ return $ form ;
680
+ }
681
+
626
682
/**
627
683
* Generates a meeting recording files management form.
628
684
* Takes action on validation.
@@ -1250,6 +1306,16 @@ public function userIsConferenceManager($meeting)
1250
1306
return true ;
1251
1307
}
1252
1308
1309
+ $ currentUser = api_get_user_entity (api_get_user_id ());
1310
+
1311
+ if ('true ' === $ this ->get ('enableParticipantRegistration ' )
1312
+ && 'true ' === $ this ->get ('enablePresenter ' )
1313
+ && $ currentUser
1314
+ && $ meeting ->hasUserAsPresenter ($ currentUser )
1315
+ ) {
1316
+ return true ;
1317
+ }
1318
+
1253
1319
return $ meeting ->isUserMeeting () && $ meeting ->getUser ()->getId () == api_get_user_id ();
1254
1320
}
1255
1321
@@ -1559,6 +1625,32 @@ public function registerUsers(Meeting $meeting, array $users)
1559
1625
return $ failedUsers ;
1560
1626
}
1561
1627
1628
+ /**
1629
+ * @param Meeting $meeting
1630
+ * @param array<User> $users
1631
+ *
1632
+ * @throws OptimisticLockException
1633
+ * @throws \Doctrine\ORM\ORMException
1634
+ *
1635
+ * @return array
1636
+ */
1637
+ public function registerPresenters (Meeting $ meeting , array $ users ): array
1638
+ {
1639
+ $ failedUsers = [];
1640
+
1641
+ foreach ($ users as $ user ) {
1642
+ try {
1643
+ $ this ->registerUser ($ meeting , $ user , false , true );
1644
+ } catch (Exception $ exception ) {
1645
+ $ failedUsers [$ user ->getId ()] = $ exception ->getMessage ();
1646
+ }
1647
+ }
1648
+
1649
+ Database::getManager ()->flush ();
1650
+
1651
+ return $ failedUsers ;
1652
+ }
1653
+
1562
1654
/**
1563
1655
* Removes registrants from a meeting.
1564
1656
*
@@ -1626,13 +1718,55 @@ private function updateRegistrantList($meeting, $users)
1626
1718
$ this ->unregister ($ meeting , $ registrantsToRemove );
1627
1719
}
1628
1720
1721
+ private function updatePresenterList ($ meeting , $ users )
1722
+ {
1723
+ /** @var array<Registrant> $presenters */
1724
+ $ presenters = $ meeting ->getPresenters ();
1725
+
1726
+ $ presenterToAdd = [];
1727
+
1728
+ foreach ($ users as $ user ) {
1729
+ $ foundPresenter = false ;
1730
+
1731
+ foreach ($ presenters as $ presenter ) {
1732
+ if ($ presenter ->getUser () === $ user ) {
1733
+ $ foundPresenter = true ;
1734
+
1735
+ break ;
1736
+ }
1737
+ }
1738
+
1739
+ if (!$ foundPresenter ) {
1740
+ $ presenterToAdd [] = $ user ;
1741
+ }
1742
+ }
1743
+
1744
+ $ registrantsToRemove = [];
1745
+
1746
+ foreach ($ presenters as $ registrant ) {
1747
+ $ found = false ;
1748
+ foreach ($ users as $ user ) {
1749
+ if ($ registrant ->getUser () === $ user ) {
1750
+ $ found = true ;
1751
+ break ;
1752
+ }
1753
+ }
1754
+ if (!$ found ) {
1755
+ $ registrantsToRemove [] = $ registrant ;
1756
+ }
1757
+ }
1758
+
1759
+ $ this ->registerPresenters ($ meeting , $ presenterToAdd );
1760
+ $ this ->unregister ($ meeting , $ registrantsToRemove );
1761
+ }
1762
+
1629
1763
/**
1630
1764
* @throws Exception
1631
1765
* @throws OptimisticLockException
1632
1766
*
1633
1767
* @return Registrant
1634
1768
*/
1635
- private function registerUser (Meeting $ meeting , User $ user , $ andFlush = true )
1769
+ private function registerUser (Meeting $ meeting , User $ user , $ andFlush = true , bool $ isPresenter = false )
1636
1770
{
1637
1771
if (empty ($ user ->getEmail ())) {
1638
1772
throw new Exception ($ this ->get_lang ('CannotRegisterWithoutEmailAddress ' ));
@@ -1652,7 +1786,13 @@ private function registerUser(Meeting $meeting, User $user, $andFlush = true)
1652
1786
);
1653
1787
}
1654
1788
1655
- $ registrantEntity = (new Registrant ())
1789
+ $ registrantEntity = new Registrant ();
1790
+
1791
+ if ($ isPresenter ) {
1792
+ $ registrantEntity = new Presenter ();
1793
+ }
1794
+
1795
+ $ registrantEntity
1656
1796
->setMeeting ($ meeting )
1657
1797
->setUser ($ user )
1658
1798
->setMeetingRegistrant ($ meetingRegistrant )
0 commit comments