upgrade
This commit is contained in:
94
main/cron/course_announcement.php
Normal file
94
main/cron/course_announcement.php
Normal file
@@ -0,0 +1,94 @@
|
||||
<?php
|
||||
/* For licensing terms, see /license.txt */
|
||||
|
||||
use Chamilo\CoreBundle\Entity\Session;
|
||||
use Chamilo\CourseBundle\Entity\CItemProperty;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
// Get all pending (visible) announcements where e-mail sent is empty
|
||||
$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 = '".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');
|
||||
|
||||
// For each announcement, check rules about sending the notification at a
|
||||
// specific date
|
||||
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 = '".TOOL_ANNOUNCEMENT."'
|
||||
ORDER BY ip.iid DESC";
|
||||
|
||||
$sql = Database::getManager()->createQuery($query);
|
||||
$itemProperty = $sql->execute(['announcementId' => $announcement->getId(), 'courseId' => $announcement->getCId()]);
|
||||
if (empty($itemProperty) or !isset($itemProperty[0])) {
|
||||
continue;
|
||||
}
|
||||
/* @var CItemProperty $itemPropertyObject */
|
||||
$itemPropertyObject = $itemProperty[0];
|
||||
// Check if the last record for this announcement was not a removal
|
||||
if ($itemPropertyObject->getLastEditType() == 'AnnouncementDeleted' or $itemPropertyObject->getVisibility() == 2) {
|
||||
continue;
|
||||
}
|
||||
/* @var Session $sessionObject */
|
||||
$sessionObject = $itemPropertyObject->getSession();
|
||||
if (!empty($sessionObject)) {
|
||||
$sessionId = $sessionObject->getId();
|
||||
} else {
|
||||
$sessionId = null;
|
||||
}
|
||||
$courseInfo = api_get_course_info_by_id($announcement->getCId());
|
||||
$senderId = $itemPropertyObject->getInsertUser()->getId();
|
||||
// Check if we need to send it to all users of all sessions that
|
||||
// include this course.
|
||||
$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,
|
||||
false,
|
||||
true
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user