Moved code from global scope to plugin class methods - refs BT#17288

pull/3274/head
Sébastien Ducoulombier 5 years ago
parent a7c9b71df9
commit 9bffc0b673
  1. 34
      plugin/zoom/admin.php
  2. 451
      plugin/zoom/lib/zoom_plugin.class.php
  3. 191
      plugin/zoom/meeting.php
  4. 110
      plugin/zoom/start.php

@ -18,36 +18,10 @@ $plugin = ZoomPlugin::create();
// the section (for the tabs)
$this_section = SECTION_PLATFORM_ADMIN;
$form = new FormValidator(get_lang('Search'));
$startDatePicker = $form->addDatePicker('search_meeting_start', get_lang('StartDate'));
$endDatePicker = $form->addDatePicker('search_meeting_end', get_lang('EndDate'));
$typeSelect = $form->addRadio(
'type',
get_lang('Type'),
[
CourseMeetingList::TYPE_SCHEDULED => get_lang('ScheduledMeetings'),
CourseMeetingList::TYPE_LIVE => get_lang('LiveMeetings'),
CourseMeetingList::TYPE_UPCOMING => get_lang('UpcomingMeetings'),
]
);
$form->addButtonSearch(get_lang('Search'));
if ($form->validate()) {
$startDate = new DateTime($startDatePicker->getValue());
$endDate = new DateTime($endDatePicker->getValue());
$type = $typeSelect->getValue();
} else {
$oneMonth = new DateInterval('P1M');
$startDate = new DateTime();
$startDate->sub($oneMonth);
$endDate = new DateTime();
$endDate->add($oneMonth);
$type = CourseMeetingList::TYPE_SCHEDULED;
}
$form->setDefaults([
'search_meeting_start' => $startDate->format('Y-m-d'),
'search_meeting_end' => $endDate->format('Y-m-d'),
'type' => $type,
]);
$form = $plugin->getAdminSearchForm();
$startDate = new DateTime($form->getElement('start')->getValue());
$endDate = new DateTime($form->getElement('end')->getValue());
$type = $form->getElement('type')->getValue();
$tpl = new Template($tool_name);
$tpl->assign('meetings', $plugin->getPeriodMeetings($type, $startDate, $endDate));

@ -17,6 +17,7 @@ use Chamilo\PluginBundle\Zoom\Recording;
use Chamilo\PluginBundle\Zoom\RecordingList;
use Chamilo\PluginBundle\Zoom\UserMeetingRegistrant;
use Chamilo\PluginBundle\Zoom\UserMeetingRegistrantListItem;
use Doctrine\Common\Collections\Criteria;
/**
* Class ZoomPlugin. Integrates Zoom meetings in courses.
@ -82,6 +83,456 @@ class ZoomPlugin extends Plugin
$this->uninstall_course_fields_in_all_courses();
}
/**
* Generates the search form to include in the meeting list administration page.
* The form has DatePickers 'start' and 'end' and a Radio 'type'.
*
* @return FormValidator
*/
public function getAdminSearchForm()
{
$form = new FormValidator('search');
$startDatePicker = $form->addDatePicker('start', get_lang('StartDate'));
$endDatePicker = $form->addDatePicker('end', get_lang('EndDate'));
$typeSelect = $form->addRadio(
'type',
get_lang('Type'),
[
CourseMeetingList::TYPE_SCHEDULED => get_lang('ScheduledMeetings'),
CourseMeetingList::TYPE_LIVE => get_lang('LiveMeetings'),
CourseMeetingList::TYPE_UPCOMING => get_lang('UpcomingMeetings'),
]
);
$form->addButtonSearch(get_lang('Search'));
$oneMonth = new DateInterval('P1M');
if ($form->validate()) {
try {
$start = new DateTime($startDatePicker->getValue());
} catch (Exception $exception) {
$start = new DateTime();
$start->sub($oneMonth);
}
try {
$end = new DateTime($endDatePicker->getValue());
} catch (Exception $exception) {
$end = new DateTime();
$end->add($oneMonth);
}
$type = $typeSelect->getValue();
} else {
$start = new DateTime();
$start->sub($oneMonth);
$end = new DateTime();
$end->add($oneMonth);
$type = CourseMeetingList::TYPE_SCHEDULED;
}
try {
$form->setDefaults([
'start' => $start->format('Y-m-d'),
'end' => $end->format('Y-m-d'),
'type' => $type,
]);
} catch (Exception $exception) {
error_log(join(':', [__FILE__, __LINE__, $exception]));
}
return $form;
}
/**
* Generates a meeting edit form and updates the meeting on validation.
*
* @param CourseMeetingInfoGet $meeting the meeting
*
* @return FormValidator
*/
public function getEditMeetingForm(&$meeting)
{
$form = new FormValidator('edit', 'post', $_SERVER['REQUEST_URI']);
$withTimeAndDuration = $meeting::TYPE_SCHEDULED === $meeting->type
|| $meeting::TYPE_RECURRING_WITH_FIXED_TIME === $meeting->type;
if ($withTimeAndDuration) {
$startTimeDatePicker = $form->addDateTimePicker('start_time', get_lang('StartTime'));
$form->setRequired($startTimeDatePicker);
$durationNumeric = $form->addNumeric('duration', get_lang('DurationInMinutes'));
$form->setRequired($durationNumeric);
}
$topicText = $form->addText('topic', get_lang('Topic'));
$agendaTextArea = $form->addTextarea('agenda', get_lang('Agenda'), ['maxlength' => 2000]);
// $passwordText = $form->addText('password', get_lang('Password'), false, ['maxlength' => '10']);
$form->addButtonUpdate(get_lang('UpdateMeeting'));
if ($form->validate()) {
if ($withTimeAndDuration) {
$meeting->start_time = $startTimeDatePicker->getValue();
$meeting->timezone = date_default_timezone_get();
$meeting->duration = $durationNumeric->getValue();
}
$meeting->topic = $topicText->getValue();
$meeting->agenda = $agendaTextArea->getValue();
try {
$this->updateMeeting($meeting);
Display::addFlash(
Display::return_message(get_lang('MeetingUpdated'), 'confirm')
);
} catch (Exception $exception) {
Display::addFlash(
Display::return_message($exception->getMessage(), 'error')
);
}
$meeting = $this->getMeeting($meeting->id);
}
$defaults = [
'topic' => $meeting->topic,
'agenda' => $meeting->agenda,
];
if ($withTimeAndDuration) {
$defaults['start_time'] = $meeting->startDateTime->format('c');
$defaults['duration'] = $meeting->duration;
}
$form->setDefaults($defaults);
return $form;
}
/**
* Generates a meeting delete form and deletes the meeting on validation.
*
* @param CourseMeetingInfoGet $meeting
* @param string $returnURL where to redirect to on successful deletion
*
* @return FormValidator
*/
public function getDeleteMeetingForm($meeting, $returnURL)
{
$form = new FormValidator('delete', 'post', $_SERVER['REQUEST_URI']);
$form->addButtonDelete(get_lang('DeleteMeeting'));
if ($form->validate()) {
try {
$this->deleteMeeting($meeting);
Display::addFlash(
Display::return_message(get_lang('MeetingDeleted'), 'confirm')
);
location($returnURL);
} catch (Exception $exception) {
Display::addFlash(
Display::return_message($exception->getMessage(), 'error')
);
}
}
return $form;
}
/**
* Generates a registrant list update form listing course and session users.
* Updates the list on validation.
*
* @param CourseMeetingInfoGet $meeting
*
* @return array a list of two elements:
* FormValidator the form
* UserMeetingRegistrantListItem[] the up-to-date list of registrants
*/
public function getRegisterParticipantForm($meeting)
{
$form = new FormValidator('register', 'post', $_SERVER['REQUEST_URI']);
$userIdSelect = $form->addSelect('userIds', get_lang('RegisteredUsers'));
$userIdSelect->setMultiple(true);
$form->addButtonSend(get_lang('UpdateRegisteredUserList'));
$users = $meeting->getCourseAndSessionUsers();
foreach ($users as $user) {
$userIdSelect->addOption(api_get_person_name($user->getFirstname(), $user->getLastname()), $user->getId());
}
try {
$registrants = $this->getRegistrants($meeting);
} catch (Exception $exception) {
Display::addFlash(
Display::return_message($exception->getMessage(), 'error')
);
$registrants = [];
}
if ($form->validate()) {
$selectedUserIds = $userIdSelect->getValue();
$selectedUsers = [];
foreach ($users as $user) {
if (in_array($user->getId(), $selectedUserIds)) {
$selectedUsers[] = $user;
}
}
try {
$this->updateRegistrantList($meeting, $selectedUsers);
Display::addFlash(
Display::return_message(get_lang('RegisteredUserListWasUpdated'), 'confirm')
);
} catch (Exception $exception) {
Display::addFlash(
Display::return_message($exception->getMessage(), 'error')
);
}
try {
$registrants = $this->getRegistrants($meeting);
} catch (Exception $exception) {
Display::addFlash(
Display::return_message($exception->getMessage(), 'error')
);
$registrants = [];
}
}
$registeredUserIds = [];
foreach ($registrants as $registrant) {
$registeredUserIds[] = $registrant->userId;
}
$userIdSelect->setSelected($registeredUserIds);
return [ $form, $registrants ];
}
/**
* Generates a meeting recording files management form.
* Takes action on validation.
*
* @param CourseMeetingInfoGet $meeting
*
* @return array a list of two elements:
* FormValidator the form
* Recording[] the up-to-date list of recordings
*/
public function getFileForm($meeting)
{
$form = new FormValidator('fileForm', 'post', $_SERVER['REQUEST_URI']);
try {
$recordings = $this->getMeetingRecordings($meeting);
} catch (Exception $exception) {
Display::addFlash(
Display::return_message($exception->getMessage(), 'error')
);
$recordings = [];
}
if (!empty($recordings)) {
$fileIdSelect = $form->addSelect('fileIds', get_lang('Files'));
$fileIdSelect->setMultiple(true);
foreach ($recordings as &$recording) {
// $recording->instanceDetails = $plugin->getPastMeetingInstanceDetails($instance->uuid);
$options = [];
foreach ($recording->recording_files as $file) {
$options[] = [
'text' => sprintf(
'%s.%s (%s)',
$file->recording_type,
$file->file_type,
$file->formattedFileSize
),
'value' => $file->id,
];
}
$fileIdSelect->addOptGroup(
$options,
sprintf("%s (%s)", $recording->formattedStartTime, $recording->formattedDuration)
);
}
$actionRadio = $form->addRadio(
'action',
get_lang('Action'),
[
'CreateLinkInCourse' => get_lang('CreateLinkInCourse'),
'CopyToCourse' => get_lang('CopyToCourse'),
'DeleteFile' => get_lang('DeleteFile'),
]
);
$form->addButtonUpdate(get_lang('DoIt'));
if ($form->validate()) {
foreach ($recordings as $recording) {
foreach ($recording->recording_files as $file) {
if (in_array($file->id, $fileIdSelect->getValue())) {
$name = sprintf(
get_lang('XRecordingOfMeetingXFromXDurationXDotX'),
$file->recording_type,
$meeting->id,
$recording->formattedStartTime,
$recording->formattedDuration,
$file->file_type
);
if ('CreateLinkInCourse' === $actionRadio->getValue()) {
try {
$this->createLinkToFileInCourse($meeting, $file, $name);
Display::addFlash(
Display::return_message(get_lang('LinkToFileWasCreatedInCourse'), 'success')
);
} catch (Exception $exception) {
Display::addFlash(
Display::return_message($exception->getMessage(), 'error')
);
}
} elseif ('CopyToCourse' === $actionRadio->getValue()) {
try {
$this->copyFileToCourse($meeting, $file, $name);
Display::addFlash(
Display::return_message(get_lang('FileWasCopiedToCourse'), 'confirm')
);
} catch (Exception $exception) {
Display::addFlash(
Display::return_message($exception->getMessage(), 'error')
);
}
} elseif ('DeleteFile' === $actionRadio->getValue()) {
try {
$this->deleteFile($file);
Display::addFlash(
Display::return_message(get_lang('FileWasDeleted'), 'confirm')
);
} catch (Exception $exception) {
Display::addFlash(
Display::return_message($exception->getMessage(), 'error')
);
}
}
}
}
}
try {
$recordings = $this->getMeetingRecordings($meeting);
} catch (Exception $exception) {
Display::addFlash(
Display::return_message($exception->getMessage(), 'error')
);
$recordings = [];
}
}
}
return [$form, $recordings];
}
/**
* Generates a form to fast and easily create and start an instant meeting.
* On validation, create it then redirect to it and exit.
*
* @return FormValidator
*/
public function getCreateInstantMeetingForm()
{
$form = new FormValidator('createInstantMeetingForm', 'post', '', '_blank');
$form->addButton('startButton', get_lang('StartInstantMeeting'));
if ($form->validate()) {
try {
$newInstantMeeting = $this->createInstantMeeting();
location($newInstantMeeting->start_url);
} catch (Exception $exception) {
Display::addFlash(
Display::return_message($exception->getMessage(), 'error')
);
}
}
return $form;
}
/**
* Generates a form to schedule a meeting.
* On validation, creates it.
*
* @throws Exception
*
* @return FormValidator
*/
public function getScheduleMeetingForm()
{
$form = new FormValidator('scheduleMeetingForm');
$startTimeDatePicker = $form->addDateTimePicker('start_time', get_lang('StartTime'));
$form->setRequired($startTimeDatePicker);
$durationNumeric = $form->addNumeric('duration', get_lang('DurationInMinutes'));
$form->setRequired($durationNumeric);
$topicText = $form->addText('topic', get_lang('Topic'), true);
$agendaTextArea = $form->addTextarea('agenda', get_lang('Agenda'), ['maxlength' => 2000]);
// $passwordText = $form->addText('password', get_lang('Password'), false, ['maxlength' => '10']);
$registrationOptions = [
'RegisterAllCourseUsers' => get_lang('RegisterAllCourseUsers'),
];
$groups = GroupManager::get_groups();
if (!empty($groups)) {
$registrationOptions['RegisterTheseGroupMembers'] = get_lang('RegisterTheseGroupMembers');
}
$registrationOptions['RegisterNoUser'] = get_lang('RegisterNoUser');
$userRegistrationRadio = $form->addRadio(
'userRegistration',
get_lang('UserRegistration'),
$registrationOptions
);
$groupOptions = [];
foreach ($groups as $group) {
$groupOptions[$group['id']] = $group['name'];
}
$groupIdsSelect = $form->addSelect(
'groupIds',
get_lang('RegisterTheseGroupMembers'),
$groupOptions
);
$groupIdsSelect->setMultiple(true);
if (!empty($groups)) {
$jsCode = sprintf(
<<<EOF
getElementById('%s').parentNode.parentNode.parentNode.style.display = getElementById('%s').checked ? 'block' : 'none'
EOF,
$groupIdsSelect->getAttribute('id'),
$userRegistrationRadio->getelements()[1]->getAttribute('id')
);
$form->setAttribute('onchange', $jsCode);
}
$form->addButtonCreate(get_lang('ScheduleTheMeeting'));
// meeting scheduling
if ($form->validate()) {
try {
$newMeeting = $this->createScheduledMeeting(
new DateTime($startTimeDatePicker->getValue()),
$durationNumeric->getValue(),
$topicText->getValue(),
$agendaTextArea->getValue(),
'' // $passwordText->getValue()
);
Display::addFlash(
Display::return_message(get_lang('NewMeetingCreated'))
);
if ('RegisterAllCourseUsers' == $userRegistrationRadio->getValue()) {
$this->addRegistrants($newMeeting, $newMeeting->getCourseAndSessionUsers());
Display::addFlash(
Display::return_message(get_lang('AllCourseUsersWereRegistered'))
);
} elseif ('RegisterTheseGroupMembers' == $userRegistrationRadio->getValue()) {
$userIds = [];
foreach ($groupIdsSelect->getValue() as $groupId) {
$userIds = array_unique(array_merge($userIds, GroupManager::get_users($groupId)));
}
$users = Database::getManager()->getRepository(
'ChamiloUserBundle:User'
)->matching(Criteria::create()->where(Criteria::expr()->in('id', $userIds)))->getValues();
$this->addRegistrants($newMeeting, $users);
}
location('meeting_from_start.php?meetingId='.$newMeeting->id);
} catch (Exception $exception) {
Display::addFlash(
Display::return_message($exception->getMessage(), 'error')
);
}
} else {
$form->setDefaults(
[
'duration' => 60,
'topic' => api_get_course_info()['title'],
'userRegistration' => 'RegisterAllCourseUsers',
]
);
}
return $form;
}
/**
* Retrieves information about meetings having a start_time between two dates.
*

@ -32,200 +32,21 @@ $tpl = new Template($meeting->id);
if ($plugin->userIsConferenceManager()) {
// user can edit, start and delete meeting
$tpl->assign('isConferenceManager', true);
$editMeetingForm = new FormValidator('editMeetingForm', 'post', $_SERVER['REQUEST_URI']);
if ($meeting::TYPE_SCHEDULED === $meeting->type
||
$meeting::TYPE_RECURRING_WITH_FIXED_TIME === $meeting->type
) {
$startTimeDatePicker = $editMeetingForm->addDateTimePicker('start_time', get_lang('StartTime'));
$editMeetingForm->setRequired($startTimeDatePicker);
$durationNumeric = $editMeetingForm->addNumeric('duration', get_lang('DurationInMinutes'));
$editMeetingForm->setRequired($durationNumeric);
}
$topicText = $editMeetingForm->addText('topic', get_lang('Topic'));
$agendaTextArea = $editMeetingForm->addTextarea('agenda', get_lang('Agenda'), ['maxlength' => 2000]);
// $passwordText = $editMeetingForm->addText('password', get_lang('Password'), false, ['maxlength' => '10']);
$editMeetingForm->addButtonUpdate(get_lang('UpdateMeeting'));
if ($editMeetingForm->validate()) {
$meeting->start_time = $editMeetingForm->getSubmitValue('start_time');
$meeting->timezone = date_default_timezone_get();
$meeting->duration = $editMeetingForm->getSubmitValue('duration');
$meeting->topic = $editMeetingForm->getSubmitValue('topic');
$meeting->agenda = $editMeetingForm->getSubmitValue('agenda');
try {
$plugin->updateMeeting($meeting);
Display::addFlash(
Display::return_message(get_lang('MeetingUpdated'), 'confirm')
);
} catch (Exception $exception) {
Display::addFlash(
Display::return_message($exception->getMessage(), 'error')
);
}
}
try {
$editMeetingForm->setDefaults(
[
'start_time' => $meeting->startDateTime->format('c'),
'duration' => $meeting->duration,
'topic' => $meeting->topic,
'agenda' => $meeting->agenda,
]
);
} catch (Exception $exception) {
Display::addFlash(
Display::return_message($exception->getMessage(), 'error')
);
}
$tpl->assign('editMeetingForm', $editMeetingForm->returnForm());
$deleteMeetingForm = new FormValidator('deleteMeetingForm', 'post', $_SERVER['REQUEST_URI']);
$deleteMeetingForm->addButtonDelete(get_lang('DeleteMeeting'));
$tpl->assign('deleteMeetingForm', $deleteMeetingForm->returnForm());
if ($deleteMeetingForm->validate()) {
try {
$plugin->deleteMeeting($meeting);
Display::addFlash(
Display::return_message(get_lang('MeetingDeleted'), 'confirm')
);
location($returnURL);
} catch (Exception $exception) {
Display::addFlash(
Display::return_message($exception->getMessage(), 'error')
);
}
}
$tpl->assign('editMeetingForm', $plugin->getEditMeetingForm($meeting)->returnForm());
$tpl->assign('deleteMeetingForm', $plugin->getDeleteMeetingForm($meeting, $returnURL)->returnForm());
if ($plugin->get('enableParticipantRegistration')
&& MeetingSettings::APPROVAL_TYPE_NO_REGISTRATION_REQUIRED != $meeting->settings->approval_type) {
$registerParticipantForm = new FormValidator('registerParticipantForm', 'post', $_SERVER['REQUEST_URI']);
$userIdSelect = $registerParticipantForm->addSelect('userIds', get_lang('RegisteredUsers'));
$userIdSelect->setMultiple(true);
$registerParticipantForm->addButtonSend(get_lang('UpdateRegisteredUserList'));
$users = $meeting->getCourseAndSessionUsers();
foreach ($users as $user) {
$userIdSelect->addOption(api_get_person_name($user->getFirstname(), $user->getLastname()), $user->getId());
}
if ($registerParticipantForm->validate()) {
$selectedUserIds = $userIdSelect->getValue();
$selectedUsers = [];
foreach ($users as $user) {
if (in_array($user->getId(), $selectedUserIds)) {
$selectedUsers[] = $user;
}
}
try {
$plugin->updateRegistrantList($meeting, $selectedUsers);
Display::addFlash(
Display::return_message(get_lang('RegisteredUserListWasUpdated'), 'confirm')
);
} catch (Exception $exception) {
Display::addFlash(
Display::return_message($exception->getMessage(), 'error')
);
}
}
$registrants = $plugin->getRegistrants($meeting);
$tpl->assign('registrants', $registrants);
$registeredUserIds = [];
foreach ($registrants as $registrant) {
$registeredUserIds[] = $registrant->userId;
}
$userIdSelect->setSelected($registeredUserIds);
list($registerParticipantForm, $registrants) = $plugin->getRegisterParticipantForm($meeting);
$tpl->assign('registerParticipantForm', $registerParticipantForm->returnForm());
$tpl->assign('registrants', $registrants); // FIXME cache
}
if ($plugin->get('enableCloudRecording')
&& 'cloud' === $meeting->settings->auto_recording
// && 'finished' === $meeting->status
) {
$recordings = $plugin->getMeetingRecordings($meeting);
$fileForm = new FormValidator('fileForm', 'post', $_SERVER['REQUEST_URI']);
$fileIdSelect = $fileForm->addSelect('fileIds', get_lang('Files'));
$fileIdSelect->setMultiple(true);
foreach ($recordings as &$recording) {
// $recording->instanceDetails = $plugin->getPastMeetingInstanceDetails($instance->uuid);
$options = [];
foreach ($recording->recording_files as $file) {
$options[] = [
'text' => sprintf("%s.%s (%s)", $file->recording_type, $file->file_type, $file->formattedFileSize),
'value' => $file->id,
];
}
$fileIdSelect->addOptGroup(
$options,
sprintf("%s (%s)", $recording->formattedStartTime, $recording->formattedDuration)
);
}
$actionRadio = $fileForm->addRadio(
'action',
get_lang('Action'),
[
'CreateLinkInCourse' => get_lang('CreateLinkInCourse'),
'CopyToCourse' => get_lang('CopyToCourse'),
'DeleteFile' => get_lang('DeleteFile'),
]
);
$fileForm->addButtonUpdate(get_lang('DoIt'));
if ($fileForm->validate()) {
foreach ($recordings as $recording) {
foreach ($recording->recording_files as $file) {
if (in_array($file->id, $fileIdSelect->getValue())) {
$name = sprintf(
get_lang('XRecordingOfMeetingXFromXDurationXDotX'),
$file->recording_type,
$meeting->id,
$recording->formattedStartTime,
$recording->formattedDuration,
$file->file_type
);
if ('CreateLinkInCourse' === $actionRadio->getValue()) {
try {
$plugin->createLinkToFileInCourse($meeting, $file, $name);
Display::addFlash(
Display::return_message(get_lang('LinkToFileWasCreatedInCourse'), 'success')
);
} catch (Exception $exception) {
Display::addFlash(
Display::return_message($exception->getMessage(), 'error')
);
}
} elseif ('CopyToCourse' === $actionRadio->getValue()) {
try {
$plugin->copyFileToCourse($meeting, $file, $name);
Display::addFlash(
Display::return_message(get_lang('FileWasCopiedToCourse'), 'confirm')
);
} catch (Exception $exception) {
Display::addFlash(
Display::return_message($exception->getMessage(), 'error')
);
}
} elseif ('DeleteFile' === $actionRadio->getValue()) {
try {
$plugin->deleteFile($file);
Display::addFlash(
Display::return_message(get_lang('FileWasDeleted'), 'confirm')
);
} catch (Exception $exception) {
Display::addFlash(
Display::return_message($exception->getMessage(), 'error')
);
}
}
}
}
}
}
$tpl->assign('recordings', $recordings);
list($fileForm, $recordings) = $plugin->getFileForm($meeting);
$tpl->assign('fileForm', $fileForm->returnForm());
$tpl->assign('recordings', $recordings);
}
} elseif (MeetingSettings::APPROVAL_TYPE_NO_REGISTRATION_REQUIRED != $meeting->settings->approval_type) {
$userId = api_get_user_id();

@ -25,114 +25,8 @@ $plugin = ZoomPlugin::create();
if ($plugin->userIsConferenceManager()) {
// user can create a new meeting
// one form to fast and easily create and start an instant meeting
$createInstantMeetingForm = new FormValidator('createInstantMeetingForm', 'post', '', '_blank');
$createInstantMeetingForm->addButton('startButton', get_lang('StartInstantMeeting'));
$tpl->assign('createInstantMeetingForm', $createInstantMeetingForm->returnForm());
// instant meeting creation
if ($createInstantMeetingForm->validate()) {
try {
$newInstantMeeting = $plugin->createInstantMeeting();
header('Location: '.$newInstantMeeting->start_url);
exit;
} catch (Exception $exception) {
Display::addFlash(
Display::return_message($exception->getMessage(), 'error')
);
}
}
// another form to schedule a meeting
$scheduleMeetingForm = new FormValidator('scheduleMeetingForm');
$startTimeDatePicker = $scheduleMeetingForm->addDateTimePicker('start_time', get_lang('StartTime'));
$scheduleMeetingForm->setRequired($startTimeDatePicker);
$durationNumeric = $scheduleMeetingForm->addNumeric('duration', get_lang('DurationInMinutes'));
$scheduleMeetingForm->setRequired($durationNumeric);
$topicText = $scheduleMeetingForm->addText('topic', get_lang('Topic'), true);
$agendaTextArea = $scheduleMeetingForm->addTextarea('agenda', get_lang('Agenda'), ['maxlength' => 2000]);
// $passwordText = $scheduleMeetingForm->addText('password', get_lang('Password'), false, ['maxlength' => '10']);
$registrationOptions = [
'RegisterAllCourseUsers' => get_lang('RegisterAllCourseUsers'),
];
$groups = GroupManager::get_groups();
if (!empty($groups)) {
$registrationOptions['RegisterTheseGroupMembers'] = get_lang('RegisterTheseGroupMembers');
}
$registrationOptions['RegisterNoUser'] = get_lang('RegisterNoUser');
$userRegistrationRadio = $scheduleMeetingForm->addRadio(
'userRegistration',
get_lang('UserRegistration'),
$registrationOptions
);
$groupOptions = [];
foreach ($groups as $group) {
$groupOptions[$group['id']] = $group['name'];
}
$groupIdsSelect = $scheduleMeetingForm->addSelect(
'groupIds',
get_lang('RegisterTheseGroupMembers'),
$groupOptions
);
$groupIdsSelect->setMultiple(true);
if (!empty($groups)) {
$jsCode = sprintf(
<<<EOF
getElementById('%s').parentNode.parentNode.parentNode.style.display = getElementById('%s').checked ? 'block' : 'none'
EOF,
$groupIdsSelect->getAttribute('id'),
$userRegistrationRadio->getelements()[1]->getAttribute('id')
);
$scheduleMeetingForm->setAttribute('onchange', $jsCode);
}
$scheduleMeetingForm->addButtonCreate(get_lang('ScheduleTheMeeting'));
// meeting scheduling
if ($scheduleMeetingForm->validate()) {
try {
$newMeeting = $plugin->createScheduledMeeting(
new DateTime($startTimeDatePicker->getValue()),
$durationNumeric->getValue(),
$topicText->getValue(),
$agendaTextArea->getValue(),
'' // $passwordText->getValue()
);
Display::addFlash(
Display::return_message($plugin->get_lang('NewMeetingCreated'))
);
if ('RegisterAllCourseUsers' == $userRegistrationRadio->getValue()) {
$plugin->addRegistrants($newMeeting, $newMeeting->getCourseAndSessionUsers());
Display::addFlash(
Display::return_message($plugin->get_lang('AllCourseUsersWereRegistered'))
);
} elseif ('RegisterTheseGroupMembers' == $userRegistrationRadio->getValue()) {
$userIds = [];
foreach ($groupIdsSelect->getValue() as $groupId) {
$userIds = array_unique(array_merge($userIds, GroupManager::get_users($groupId)));
}
$users = Database::getManager()->getRepository(
'ChamiloUserBundle:User'
)->matching(Criteria::create()->where(Criteria::expr()->in('id', $userIds)))->getValues();
$plugin->addRegistrants($newMeeting, $users);
}
location('meeting_from_start.php?meetingId='.$newMeeting->id);
} catch (Exception $exception) {
Display::addFlash(
Display::return_message($exception->getMessage(), 'error')
);
}
} else {
$scheduleMeetingForm->setDefaults(
[
'duration' => 60,
'topic' => api_get_course_info()['title'],
'userRegistration' => 'RegisterAllCourseUsers',
]
);
}
$tpl->assign('scheduleMeetingForm', $scheduleMeetingForm->returnForm());
$tpl->assign('createInstantMeetingForm', $plugin->getCreateInstantMeetingForm()->returnForm());
$tpl->assign('scheduleMeetingForm', $plugin->getScheduleMeetingForm()->returnForm());
}
try {

Loading…
Cancel
Save