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, $sendToUsersInSession,
false, false,
null, null,
$senderId $senderId,
false,
true
); );
} }
} }

@ -212,10 +212,11 @@ class AnnouncementEmail
* Email message. * Email message.
* *
* @param int $receiverUserId * @param int $receiverUserId
* @param bool $checkUrls
* *
* @return string * @return string
*/ */
public function message($receiverUserId) public function message($receiverUserId, $checkUrls = false)
{ {
$content = $this->announcement('content'); $content = $this->announcement('content');
$session_id = $this->session_id; $session_id = $this->session_id;
@ -228,6 +229,15 @@ class AnnouncementEmail
$session_id $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 // 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_param = 'cidReq='.$courseCode.'&id_session='.$session_id.'&gidReq='.api_get_group_id();
$course_name = $this->course('title'); $course_name = $this->course('title');
@ -239,7 +249,7 @@ class AnnouncementEmail
$result .= '<br />'; $result .= '<br />';
$result .= Display::url( $result .= Display::url(
$attachment['filename'], $attachment['filename'],
api_get_path(WEB_CODE_PATH). api_get_path(WEB_CODE_PATH, $accessConfig).
'announcements/download.php?file='.basename($attachment['path']).'&'.$course_param 'announcements/download.php?file='.basename($attachment['path']).'&'.$course_param
); );
$result .= '<br />'; $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/>'; $course_name.'</a><br/>';
return $result; return $result;
@ -313,10 +323,11 @@ class AnnouncementEmail
* @param bool $sendToDrhUsers send a copy of the message to the DRH users * @param bool $sendToDrhUsers send a copy of the message to the DRH users
* @param int $senderId related to the main user * @param int $senderId related to the main user
* @param bool $directMessage * @param bool $directMessage
* @param bool $checkUrls
* *
* @return array * @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; $senderId = empty($senderId) ? api_get_user_id() : (int) $senderId;
$subject = $this->subject($directMessage); $subject = $this->subject($directMessage);
@ -333,7 +344,7 @@ class AnnouncementEmail
} }
$messageSentTo = []; $messageSentTo = [];
foreach ($users as $user) { 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); $wasSent = MessageManager::messageWasAlreadySent($senderId, $user['user_id'], $subject, $message);
if ($wasSent === false) { if ($wasSent === false) {
if (!empty($this->logger)) { if (!empty($this->logger)) {

@ -474,8 +474,8 @@ class AnnouncementManager
Display::return_icon($image_visibility.'.png', $alt_visibility, '', ICON_SIZE_SMALL)."</a>"; Display::return_icon($image_visibility.'.png', $alt_visibility, '', ICON_SIZE_SMALL)."</a>";
if (api_is_allowed_to_edit(false, true)) { if (api_is_allowed_to_edit(false, true)) {
$modify_icons .= "<a $modify_icons .= "<a
href=\"".api_get_self()."?".api_get_cidreq()."&action=delete&id=".$id."&sec_token=".$stok."\" 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;\">". 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). Display::return_icon('delete.png', get_lang('Delete'), '', ICON_SIZE_SMALL).
"</a>"; "</a>";
@ -1536,6 +1536,7 @@ class AnnouncementManager
* @param Monolog\Handler\HandlerInterface logger * @param Monolog\Handler\HandlerInterface logger
* @param int $senderId * @param int $senderId
* @param bool $directMessage * @param bool $directMessage
* @param bool $checkUrls
* *
* @return array * @return array
*/ */
@ -1547,11 +1548,12 @@ class AnnouncementManager
$sendToDrhUsers = false, $sendToDrhUsers = false,
$logger = null, $logger = null,
$senderId = 0, $senderId = 0,
$directMessage = false $directMessage = false,
$checkUrls = false
) { ) {
$email = new AnnouncementEmail($courseInfo, $sessionId, $announcementId, $logger); $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. * Gets the registered urls from a given user id.
* *
* @param int $user_id * @param int $user_id
* @param int $checkCourseId the course id to check url access
* *
* @return array * @return array
* *
* @author Julio Montoya <gugli100@gmail.com> * @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; $user_id = (int) $user_id;
$table_url_rel_user = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); $table_url_rel_user = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$table_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL); $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 $sql = "SELECT access_url_id
FROM $table_url_rel_user url_rel_user FROM $table_url_rel_user url_rel_user
INNER JOIN $table_url u INNER JOIN $table_url u
ON (url_rel_user.access_url_id = u.id) 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); $result = Database::query($sql);
$list = []; $list = [];
while ($row = Database::fetch_array($result, 'ASSOC')) { while ($row = Database::fetch_array($result, 'ASSOC')) {

Loading…
Cancel
Save