Announcement - Fix url portal using multiple urls in announcement mails - refs BT#20340

pull/4455/head
Christian 3 years ago
parent 40c9d3fca6
commit 17b46549df
  1. 4
      main/cron/course_announcement.php
  2. 21
      main/inc/lib/AnnouncementEmail.php
  3. 10
      main/inc/lib/AnnouncementManager.php
  4. 27
      main/inc/lib/api.lib.php

@ -85,7 +85,9 @@ foreach ($result as $announcement) {
$sendToUsersInSession,
false,
null,
$senderId
$senderId,
false,
true
);
}
}

@ -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 .= '<br />';
$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 .= '<br />';
@ -256,7 +266,7 @@ class AnnouncementEmail
}
}
$result .= '<a href="'.api_get_path(WEB_CODE_PATH).'announcements/announcements.php?'.$course_param.'">'.
$result .= '<a href="'.api_get_path(WEB_CODE_PATH, $accessConfig).'announcements/announcements.php?'.$course_param.'">'.
$course_name.'</a><br/>';
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)) {

@ -474,8 +474,8 @@ class AnnouncementManager
Display::return_icon($image_visibility.'.png', $alt_visibility, '', ICON_SIZE_SMALL)."</a>";
if (api_is_allowed_to_edit(false, true)) {
$modify_icons .= "<a
href=\"".api_get_self()."?".api_get_cidreq()."&action=delete&id=".$id."&sec_token=".$stok."\"
$modify_icons .= "<a
href=\"".api_get_self()."?".api_get_cidreq()."&action=delete&id=".$id."&sec_token=".$stok."\"
onclick=\"javascript:if(!confirm('".addslashes(api_htmlentities(get_lang('ConfirmYourChoice'), ENT_QUOTES, $charset))."')) return false;\">".
Display::return_icon('delete.png', get_lang('Delete'), '', ICON_SIZE_SMALL).
"</a>";
@ -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);
}
/**

@ -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 <gugli100@gmail.com>
*/
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')) {

Loading…
Cancel
Save