diff --git a/main/cron/course_announcement.php b/main/cron/course_announcement.php
index df6e662af0..68e8516b08 100644
--- a/main/cron/course_announcement.php
+++ b/main/cron/course_announcement.php
@@ -85,7 +85,9 @@ foreach ($result as $announcement) {
$sendToUsersInSession,
false,
null,
- $senderId
+ $senderId,
+ false,
+ true
);
}
}
diff --git a/main/inc/lib/AnnouncementEmail.php b/main/inc/lib/AnnouncementEmail.php
index 2c7ecdefbf..0f745c7161 100644
--- a/main/inc/lib/AnnouncementEmail.php
+++ b/main/inc/lib/AnnouncementEmail.php
@@ -212,10 +212,11 @@ class AnnouncementEmail
* Email message.
*
* @param int $receiverUserId
+ * @param bool $checkUrls
*
* @return string
*/
- public function message($receiverUserId)
+ public function message($receiverUserId, $checkUrls = false)
{
$content = $this->announcement('content');
$session_id = $this->session_id;
@@ -228,6 +229,15 @@ class AnnouncementEmail
$session_id
);
+ $accessConfig = [];
+ $useMultipleUrl = api_get_configuration_value('multiple_access_urls');
+ if ($useMultipleUrl && $checkUrls) {
+ $accessUrls = api_get_access_url_from_user($receiverUserId, $courseCode);
+ if (!empty($accessUrls)) {
+ $accessConfig['multiple_access_urls'] = true;
+ $accessConfig['access_url'] = (int) $accessUrls[0];
+ }
+ }
// Build the link by hand because api_get_cidreq() doesn't accept course params
$course_param = 'cidReq='.$courseCode.'&id_session='.$session_id.'&gidReq='.api_get_group_id();
$course_name = $this->course('title');
@@ -239,7 +249,7 @@ class AnnouncementEmail
$result .= '
';
$result .= Display::url(
$attachment['filename'],
- api_get_path(WEB_CODE_PATH).
+ api_get_path(WEB_CODE_PATH, $accessConfig).
'announcements/download.php?file='.basename($attachment['path']).'&'.$course_param
);
$result .= '
';
@@ -256,7 +266,7 @@ class AnnouncementEmail
}
}
- $result .= ''.
+ $result .= ''.
$course_name.'
';
return $result;
@@ -313,10 +323,11 @@ class AnnouncementEmail
* @param bool $sendToDrhUsers send a copy of the message to the DRH users
* @param int $senderId related to the main user
* @param bool $directMessage
+ * @param bool $checkUrls
*
* @return array
*/
- public function send($sendToUsersInSession = false, $sendToDrhUsers = false, $senderId = 0, $directMessage = false)
+ public function send($sendToUsersInSession = false, $sendToDrhUsers = false, $senderId = 0, $directMessage = false, $checkUrls = false)
{
$senderId = empty($senderId) ? api_get_user_id() : (int) $senderId;
$subject = $this->subject($directMessage);
@@ -333,7 +344,7 @@ class AnnouncementEmail
}
$messageSentTo = [];
foreach ($users as $user) {
- $message = $this->message($user['user_id']);
+ $message = $this->message($user['user_id'], $checkUrls);
$wasSent = MessageManager::messageWasAlreadySent($senderId, $user['user_id'], $subject, $message);
if ($wasSent === false) {
if (!empty($this->logger)) {
diff --git a/main/inc/lib/AnnouncementManager.php b/main/inc/lib/AnnouncementManager.php
index 9f28af2af6..1df6baea2f 100755
--- a/main/inc/lib/AnnouncementManager.php
+++ b/main/inc/lib/AnnouncementManager.php
@@ -474,8 +474,8 @@ class AnnouncementManager
Display::return_icon($image_visibility.'.png', $alt_visibility, '', ICON_SIZE_SMALL)."";
if (api_is_allowed_to_edit(false, true)) {
- $modify_icons .= "".
Display::return_icon('delete.png', get_lang('Delete'), '', ICON_SIZE_SMALL).
"";
@@ -1536,6 +1536,7 @@ class AnnouncementManager
* @param Monolog\Handler\HandlerInterface logger
* @param int $senderId
* @param bool $directMessage
+ * @param bool $checkUrls
*
* @return array
*/
@@ -1547,11 +1548,12 @@ class AnnouncementManager
$sendToDrhUsers = false,
$logger = null,
$senderId = 0,
- $directMessage = false
+ $directMessage = false,
+ $checkUrls = false
) {
$email = new AnnouncementEmail($courseInfo, $sessionId, $announcementId, $logger);
- return $email->send($sendToUsersInSession, $sendToDrhUsers, $senderId, $directMessage);
+ return $email->send($sendToUsersInSession, $sendToDrhUsers, $senderId, $directMessage, $checkUrls);
}
/**
diff --git a/main/inc/lib/api.lib.php b/main/inc/lib/api.lib.php
index a8a2ad04df..88676f80d5 100755
--- a/main/inc/lib/api.lib.php
+++ b/main/inc/lib/api.lib.php
@@ -6837,21 +6837,44 @@ function api_get_current_access_url_id()
* Gets the registered urls from a given user id.
*
* @param int $user_id
+ * @param int $checkCourseId the course id to check url access
*
* @return array
*
* @author Julio Montoya
*/
-function api_get_access_url_from_user($user_id)
+function api_get_access_url_from_user($user_id, $checkCourseId = null)
{
$user_id = (int) $user_id;
$table_url_rel_user = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$table_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL);
+ $includeIds = "";
+ if (isset($checkCourseId)) {
+ $cid = (int) $checkCourseId;
+ $tblUrlCourse = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
+ $sql = "SELECT access_url_id
+ FROM $tblUrlCourse url_rel_course
+ INNER JOIN $table_url u
+ ON (url_rel_course.access_url_id = u.id)
+ WHERE c_id = $cid";
+ $rs = Database::query($sql);
+ $courseUrlIds = [];
+ if (Database::num_rows($rs) > 0) {
+ while ($rowC = Database::fetch_array($rs, 'ASSOC')) {
+ $courseUrlIds[] = $rowC['access_url_id'];
+ }
+ }
+ if (!empty($courseUrlIds)) {
+ $includeIds = " AND access_url_id IN (".implode(',', $courseUrlIds).")";
+ }
+ }
+
$sql = "SELECT access_url_id
FROM $table_url_rel_user url_rel_user
INNER JOIN $table_url u
ON (url_rel_user.access_url_id = u.id)
- WHERE user_id = ".intval($user_id);
+ WHERE user_id = $user_id $includeIds
+ ORDER BY access_url_id";
$result = Database::query($sql);
$list = [];
while ($row = Database::fetch_array($result, 'ASSOC')) {