Merge branch 'merge-18956' of https://github.com/tonyidbeeznest/chamilo-lms into 18956

pull/3944/head
Yannick Warnier 4 years ago
commit 042cab416c
  1. 171
      main/announcements/announcements.php
  2. 69
      main/cron/course_announcement.php
  3. 4
      main/inc/lib/extra_field.lib.php
  4. 10
      main/install/configuration.dist.php
  5. 1
      src/Chamilo/CoreBundle/Entity/ExtraField.php

@ -317,6 +317,10 @@ switch ($action) {
}
if ($delete) {
if (api_get_configuration_value('course_announcement_scheduled_by_date')) {
$extraFieldValue = new ExtraFieldValue('course_announcement');
$extraFieldValue->deleteValuesByItem($id);
}
AnnouncementManager::delete_announcement($_course, $id);
Display::addFlash(Display::return_message(get_lang('AnnouncementDeleted')));
}
@ -617,8 +621,26 @@ switch ($action) {
$form->addHidden('sec_token', $token);
$announcementScheduledByDate = api_get_configuration_value('course_announcement_scheduled_by_date');
if (empty($sessionId)) {
$form->addCheckBox('send_to_users_in_session', null, get_lang('SendToUsersInSessions'));
if ($announcementScheduledByDate) {
$extraField = new ExtraField('course_announcement');
$extra = $extraField->addElements(
$form,
$id ? $id : 0,
[],
false,
false,
['send_to_users_in_session'],
[],
[],
false,
true
);
} else {
$form->addCheckBox('send_to_users_in_session', null, get_lang('SendToUsersInSessions'));
}
}
$config = api_get_configuration_value('announcements_hide_send_to_hrm_users');
@ -635,6 +657,75 @@ switch ($action) {
$form->addCheckBox('send_me_a_copy_by_email', null, get_lang('SendAnnouncementCopyToMyself'));
$defaults['send_me_a_copy_by_email'] = true;
if ($announcementScheduledByDate) {
$extraField = new ExtraField('course_announcement');
$extraFieldValue = new ExtraFieldValue('course_announcement');
$valueCheckbox = $extraFieldValue->get_values_by_handler_and_field_variable($id, 'send_notification_at_a_specific_date');
$form->addElement('html', '<div id="email_ann_date">');
if (!$id) {
$defaults['extra_date_to_send_notification'] = date('Y-m-d', strtotime('+1 day'));
}
$extra = $extraField->addElements(
$form,
$id ? $id : 0,
[],
false,
false,
['send_notification_at_a_specific_date'],
[],
[],
false,
true
);
$elementConditional = $valueCheckbox['value'] == 0 ? '<div id="course_announcement_date" style="display:none">' : '<div id="course_announcement_date">';
$form->addElement('html', $elementConditional);
$extra = $extraField->addElements(
$form,
$id ? $id : 0,
[],
false,
false,
['date_to_send_notification'],
[],
[],
false,
true
);
$form->addElement('html', '</div>');
$form->addElement('html', '</div>');
$form->addHtml('<script>
$(function() {
$(\'input[name="extra_send_notification_at_a_specific_date[extra_send_notification_at_a_specific_date]"]\').click(function() {
var checked = $(this).is(\':checked\');
if (checked){
$("#extra_date_to_send_notification").val("'.date('Y-m-d', strtotime('+1 day')).'");
$("#course_announcement_date").css("display", "block");
} else {
$("#course_announcement_date").css("display", "none");
}
});
$(\'input[name="email_ann"]\').click(function() {
var checked = $(this).is(\':checked\');
if (checked){
$("#email_ann_date").css("display", "block");
} else {
$(\'input[name="extra_send_notification_at_a_specific_date[extra_send_notification_at_a_specific_date]"]\').prop("checked", false);
$("#email_ann_date").css("display", "none");
$("#course_announcement_date").css("display", "none");
}
});
});
</script>');
}
if ($showSubmitButton) {
$form->addLabel('',
Display::url(
@ -652,7 +743,11 @@ switch ($action) {
if ($form->validate()) {
$data = $form->getSubmitValues();
$data['users'] = isset($data['users']) ? $data['users'] : [];
$sendToUsersInSession = isset($data['send_to_users_in_session']) ? true : false;
if ($announcementScheduledByDate) {
$sendToUsersInSession = isset($data['extra_send_to_users_in_session']) ? true : false;
} else {
$sendToUsersInSession = isset($data['send_to_users_in_session']) ? true : false;
}
$sendMeCopy = isset($data['send_me_a_copy_by_email']) ? true : false;
if (isset($id) && $id) {
@ -673,14 +768,35 @@ switch ($action) {
// Send mail
$messageSentTo = [];
if (isset($_POST['email_ann']) && empty($_POST['onlyThoseMails'])) {
$messageSentTo = AnnouncementManager::sendEmail(
api_get_course_info(),
api_get_session_id(),
$id,
$sendToUsersInSession,
isset($data['send_to_hrm_users'])
);
if ($announcementScheduledByDate) {
if (isset($_POST['email_ann']) && empty($_POST['onlyThoseMails'])) {
if ($data['extra_send_notification_at_a_specific_date']['extra_send_notification_at_a_specific_date'] == 0) {
$messageSentTo = AnnouncementManager::sendEmail(
api_get_course_info(),
api_get_session_id(),
$id,
$sendToUsersInSession,
isset($data['send_to_hrm_users'])
);
} else {
$extraFieldValue = new ExtraFieldValue('course_announcement');
$extraFieldValue->saveFieldValues($data);
}
} else {
$extraFieldValue = new ExtraFieldValue('course_announcement');
$extraFieldValue->deleteValuesByItem($id);
}
} else {
if (isset($_POST['email_ann']) && empty($_POST['onlyThoseMails'])) {
$messageSentTo = AnnouncementManager::sendEmail(
api_get_course_info(),
api_get_session_id(),
$id,
$sendToUsersInSession,
isset($data['send_to_hrm_users'])
);
}
}
if ($sendMeCopy && !in_array(api_get_user_id(), $messageSentTo)) {
@ -738,14 +854,33 @@ switch ($action) {
// Send mail
$messageSentTo = [];
if (isset($data['email_ann']) && $data['email_ann']) {
$messageSentTo = AnnouncementManager::sendEmail(
api_get_course_info(),
api_get_session_id(),
$insert_id,
$sendToUsersInSession,
isset($data['send_to_hrm_users'])
);
if ($announcementScheduledByDate) {
if (isset($data['email_ann']) && $data['email_ann']) {
if ($data['extra_send_notification_at_a_specific_date']['extra_send_notification_at_a_specific_date'] == 0) {
$messageSentTo = AnnouncementManager::sendEmail(
api_get_course_info(),
api_get_session_id(),
$insert_id,
$sendToUsersInSession,
isset($data['send_to_hrm_users'])
);
} else {
$extraFieldValues = new ExtraFieldValue('course_announcement');
$data['item_id'] = $insert_id;
$extraFieldValues->saveFieldValues($data);
}
}
} else {
if (isset($data['email_ann']) && $data['email_ann']) {
$messageSentTo = AnnouncementManager::sendEmail(
api_get_course_info(),
api_get_session_id(),
$insert_id,
$sendToUsersInSession,
isset($data['send_to_hrm_users'])
);
}
}
if ($sendMeCopy && !in_array(api_get_user_id(), $messageSentTo)) {

@ -0,0 +1,69 @@
<?php
/* For licensing terms, see /license.txt */
require __DIR__.'/../inc/global.inc.php';
if (php_sapi_name() != 'cli') {
exit; //do not run from browser
}
if (!api_get_configuration_value('course_announcement_scheduled_by_date')) {
exit;
}
$dql = "SELECT a
FROM ChamiloCourseBundle:CAnnouncement a
JOIN ChamiloCourseBundle:CItemProperty ip
WITH a.id = ip.ref AND a.cId = ip.course
WHERE
(a.emailSent != 1 OR
a.emailSent IS NULL) AND
ip.tool = 'announcement' AND
ip.visibility = 1
ORDER BY a.displayOrder DESC";
$qb = Database::getManager()->createQuery($dql);
$result = $qb->execute();
if (!$result) {
exit;
}
$extraFieldValue = new ExtraFieldValue('course_announcement');
$today = date('Y-m-d');
foreach ($result as $announcement) {
$sendNotification = $extraFieldValue->get_values_by_handler_and_field_variable($announcement->getId(), 'send_notification_at_a_specific_date');
if ($sendNotification['value'] == 1) {
$dateToSend = $extraFieldValue->get_values_by_handler_and_field_variable($announcement->getId(), 'date_to_send_notification');
if ($today >= $dateToSend['value']) {
$query = "SELECT ip FROM ChamiloCourseBundle:CItemProperty ip
WHERE ip.ref = :announcementId AND ip.course = :courseId
AND ip.tool = 'announcement'";
$sql = Database::getManager()->createQuery($query);
$itemProperty = $sql->execute(['announcementId' => $announcement->getId(), 'courseId' => $announcement->getCId()]);
$sessionName = $itemProperty[0]->getSession();
$courseInfo = api_get_course_info_by_id($announcement->getCId());
$sessionId = (int) SessionManager::get_session_by_name($sessionName)['id'];
$senderId = $itemProperty[0]->getInsertUser()->getId();
$sendToUsersInSession = (int) $extraFieldValue->get_values_by_handler_and_field_variable($announcement->getId(), 'send_to_users_in_session')['value'];
$messageSentTo = AnnouncementManager::sendEmail(
$courseInfo,
$sessionId,
$announcement->getId(),
$sendToUsersInSession,
false,
null,
$senderId
);
}
}
}

@ -164,6 +164,9 @@ class ExtraField extends Model
break;
case 'lp_view':
$this->extraFieldType = EntityExtraField::LP_VIEW_TYPE;
break;
case 'course_announcement':
$this->extraFieldType = EntityExtraField::COURSE_ANNOUNCEMENT;
}
$this->pageUrl = 'extra_fields.php?type='.$this->type;
@ -195,6 +198,7 @@ class ExtraField extends Model
'exercise',
'track_exercise',
'lp_view',
'course_announcement',
];
if (api_get_configuration_value('allow_scheduled_announcements')) {

@ -1970,6 +1970,16 @@ ALTER TABLE gradebook_comment ADD CONSTRAINT FK_C3B70763AD3ED51C FOREIGN KEY (gr
// Configuration setting to make required course category in course creation form.
//$_configuration['course_creation_form_set_course_category_mandatory'] = false;
// Show option to set course announcement date
// Allow send notification at a especific Date. Require DB changes:
/*
INSERT INTO extra_field (extra_field_type, field_type, variable, display_text, field_order, visible_to_self, visible_to_others, changeable, filter, created_at)
VALUES (21, 13, 'send_notification_at_a_specific_date', 'Send notification at a specific date', 0, 1, 0, 0, 0, NOW()),
(21, 6, 'date_to_send_notification', 'Date to send notification', 0, 1, 0, 0, 0, NOW()),
(21, 13, 'send_to_users_in_session', 'Send to users in session', 0, 1, 0, 0, 0, NOW());
*/
//$_configuration['course_announcement_scheduled_by_date'] = false;
// Enable upload of large SCORM files from FTP by uploading them to app/cache/
// and showing them in the SCORM upload form
//$_configuration['scorm_upload_from_cache'] = false;

@ -39,6 +39,7 @@ class ExtraField extends BaseAttribute
public const TRACK_EXERCISE_FIELD_TYPE = 18;
public const PORTFOLIO_TYPE = 19;
public const LP_VIEW_TYPE = 20;
public const COURSE_ANNOUNCEMENT = 21;
/**
* @var int

Loading…
Cancel
Save