Plugin: Zoom: Allow create system announcement - refs BT#19479

Require DB changes

```sql
ALTER TABLE plugin_zoom_meeting
   ADD sys_announcement_id INT DEFAULT NULL;
ALTER TABLE plugin_zoom_meeting
   ADD CONSTRAINT FK_3448092778FB10C FOREIGN KEY (sys_announcement_id) REFERENCES sys_announcement (id) ON DELETE SET NULL;
CREATE INDEX IDX_3448092778FB10C ON plugin_zoom_meeting (sys_announcement_id);
```
pull/4363/head
Angel Fernando Quiroz Campos 3 years ago
parent 17a963fcee
commit c0f1dd2a27
  1. 37
      main/admin/system_announcements.php
  2. 22
      plugin/zoom/Entity/Meeting.php
  3. 2
      plugin/zoom/calendar.ajax.php
  4. 31
      plugin/zoom/join_meeting.php
  5. 4
      plugin/zoom/view/join.tpl

@ -7,6 +7,9 @@
*/
// Resetting the course id.
use Chamilo\CoreBundle\Entity\SysAnnouncement;
use Chamilo\PluginBundle\Zoom\Meeting;
$cidReset = true;
// Including the global initialization file.
@ -67,6 +70,7 @@ if ($action != 'add' && $action != 'edit') {
/* MAIN CODE */
$show_announcement_list = true;
$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : null;
$type = $_REQUEST['type'] ?? null;
// Form was posted?
if (isset($_POST['action'])) {
@ -153,6 +157,32 @@ if ($action_todo) {
$url = api_get_self().'?id='.intval($_GET['id']);
}
$form = new FormValidator('system_announcement', 'post', $url);
if ('add' === $action && 'zoom_conference' == $type && $meetingId = $_REQUEST['meeting'] ?? 0) {
$plugin = ZoomPlugin::create();
if ($plugin->isEnabled(true)) {
/** @var Meeting $meeting */
$meeting = ZoomPlugin::getMeetingRepository()->findOneBy(['meetingId' => $meetingId]);
$meetingUrl = api_get_path(WEB_PLUGIN_PATH).'zoom/subscription.php?meetingId='.$meeting->getMeetingId();
$endDate = new DateTime($meeting->formattedStartTime);
$endDate->add($meeting->durationInterval);
$values['title'] = $meeting->getTopic();
$values['content'] = '<p>'.$meeting->getAgenda().'</p>'
.'<p>'.$plugin->get_lang('UrlForSelfRegistration').'<br>'.Display::url($meetingUrl, $meetingUrl).'</p>';
$values['range_start'] = $meeting->formattedStartTime;
$values['range_end'] = $endDate->format('Y-m-d H:i');
$values['range'] = "{$values['range_start']} / {$values['range_end']}";
$values['send_mail'] = true;
$values['add_to_calendar'] = true;
$form->addHidden('type', 'zoom_conference');
$form->addHidden('meeting', $meeting->getMeetingId());
}
}
$form->addHeader($form_title);
$form->addText('title', get_lang('Title'), true);
@ -269,6 +299,13 @@ if ($action_todo) {
SystemAnnouncementManager::announcement_for_groups($announcement_id, $groupsToSend);
}
if (isset($meeting)) {
$em = Database::getManager();
$sysAnnouncement = $em->find(SysAnnouncement::class, $announcement_id);
$meeting->setSysAnnouncement($sysAnnouncement);
$em->flush();
}
echo Display::return_message(get_lang('AnnouncementAdded'), 'confirmation');
} else {
$show_announcement_list = false;

@ -8,6 +8,7 @@ use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\CourseRelUser;
use Chamilo\CoreBundle\Entity\Session;
use Chamilo\CoreBundle\Entity\SessionRelCourseRelUser;
use Chamilo\CoreBundle\Entity\SysAnnouncement;
use Chamilo\CourseBundle\Entity\CGroupInfo;
use Chamilo\PluginBundle\Zoom\API\BaseMeetingTrait;
use Chamilo\PluginBundle\Zoom\API\MeetingInfoGet;
@ -162,12 +163,21 @@ class Meeting
*/
protected $accountEmail;
/**
* @var SysAnnouncement|null
*
* @ORM\OneToOne(targetEntity="Chamilo\CoreBundle\Entity\SysAnnouncement")
* @ORM\JoinColumn(name="sys_announcement_id", referencedColumnName="id", onDelete="SET NULL")
*/
protected $sysAnnouncement;
public function __construct()
{
$this->registrants = new ArrayCollection();
$this->recordings = new ArrayCollection();
$this->activities = new ArrayCollection();
$this->signAttendance = false;
$this->sysAnnouncement = null;
}
/**
@ -616,6 +626,18 @@ class Meeting
return $this->meetingInfoGet->agenda;
}
public function getSysAnnouncement(): ?SysAnnouncement
{
return $this->sysAnnouncement;
}
public function setSysAnnouncement(?SysAnnouncement $sysAnnouncement): Meeting
{
$this->sysAnnouncement = $sysAnnouncement;
return $this;
}
/**
* @throws Exception on unexpected start_time or duration
*/

@ -41,7 +41,7 @@ if ($action == 'get_events') {
$schema = $isWebinar ? $conference->getWebinarSchema() : $conference->getMeetingInfoGet();
$endDate = new DateTime($conference->formattedStartTime);
$endDate->sub($conference->durationInterval);
$endDate->add($conference->durationInterval);
return [
'id' => 'meeting_'.$conference->getId(),

@ -38,6 +38,7 @@ if ($meeting->isCourseMeeting()) {
$startJoinURL = '';
$detailsURL = '';
$signature = '';
$btnAnnouncement = '';
$currentUser = api_get_user_entity(api_get_user_id());
$isConferenceManager = $plugin->userIsConferenceManager($meeting);
@ -60,6 +61,35 @@ try {
if ($isConferenceManager) {
$detailsURL = api_get_path(WEB_PLUGIN_PATH).'zoom/meeting.php?meetingId='.$meeting->getMeetingId();
}
if (api_is_platform_admin()) {
$announcementUrl = '';
if ($announcement = $meeting->getSysAnnouncement()) {
$announcementUrl = api_get_path(WEB_CODE_PATH).'admin/system_announcements.php?'
.http_build_query(
[
'action' => 'edit',
'id' => $announcement->getId(),
]
);
} else {
$announcementUrl = api_get_path(WEB_CODE_PATH).'admin/system_announcements.php?'
.http_build_query(
[
'action' => 'add',
'type' => 'zoom_conference',
'meeting' => $meeting->getMeetingId(),
]
);
}
$btnAnnouncement = Display::toolbarButton(
$announcement ? get_lang('EditSystemAnnouncement') : get_lang('AddSystemAnnouncement'),
$announcementUrl,
'bullhorn'
);
}
} catch (Exception $exception) {
Display::addFlash(
Display::return_message($exception->getMessage(), 'warning')
@ -72,6 +102,7 @@ $tpl = new Template($meeting->getMeetingId());
$tpl->assign('meeting', $meeting);
$tpl->assign('start_url', $startJoinURL);
$tpl->assign('details_url', $detailsURL);
$tpl->assign('btn_announcement', $btnAnnouncement);
$tpl->assign('is_conference_manager', $isConferenceManager);
$tpl->assign('signature', $signature);
$content = $tpl->fetch('zoom/view/join.tpl');

@ -190,3 +190,7 @@
{{ 'Details'|get_lang }}
</a>
{% endif %}
{% if btn_announcement %}
{{ btn_announcement }}
{% endif %}

Loading…
Cancel
Save