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')) {