|
|
|
@ -15,6 +15,10 @@ use ChamiloSession as Session; |
|
|
|
|
*/ |
|
|
|
|
class MessageManager |
|
|
|
|
{ |
|
|
|
|
const MESSAGE_TYPE_INBOX = 1; |
|
|
|
|
const MESSAGE_TYPE_OUTBOX = 2; |
|
|
|
|
const MESSAGE_TYPE_PROMOTED = 3; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Get count new messages for the current user from the database. |
|
|
|
|
* |
|
|
|
@ -53,30 +57,15 @@ class MessageManager |
|
|
|
|
* |
|
|
|
|
* @return int |
|
|
|
|
*/ |
|
|
|
|
public static function getNumberOfMessages($params = []) |
|
|
|
|
public static function getNumberOfMessages($params) |
|
|
|
|
{ |
|
|
|
|
$messageStatus = [MESSAGE_STATUS_NEW, MESSAGE_STATUS_UNREAD]; |
|
|
|
|
if (isset($params['message_status']) && !empty($params['message_status'])) { |
|
|
|
|
$messageStatus = $params['message_status']; |
|
|
|
|
} |
|
|
|
|
$messageStatus = array_map('intval', $messageStatus); |
|
|
|
|
$messageStatusCondition = implode("','", $messageStatus); |
|
|
|
|
|
|
|
|
|
$table = Database::get_main_table(TABLE_MESSAGE); |
|
|
|
|
$keyword = isset($params['keyword']) && !empty($params['keyword']) ? $params['keyword'] : ''; |
|
|
|
|
|
|
|
|
|
$keywordCondition = ''; |
|
|
|
|
if (!empty($keyword)) { |
|
|
|
|
$keyword = Database::escape_string($keyword); |
|
|
|
|
$keywordCondition = " AND (title like '%$keyword%' OR content LIKE '%$keyword%') "; |
|
|
|
|
} |
|
|
|
|
$conditions = self::getWhereConditions($params); |
|
|
|
|
|
|
|
|
|
$sql = "SELECT COUNT(id) as number_messages |
|
|
|
|
FROM $table |
|
|
|
|
WHERE |
|
|
|
|
msg_status IN ('$messageStatusCondition') AND |
|
|
|
|
user_receiver_id = ".api_get_user_id()." |
|
|
|
|
$keywordCondition |
|
|
|
|
$conditions |
|
|
|
|
"; |
|
|
|
|
$result = Database::query($sql); |
|
|
|
|
$result = Database::fetch_array($result); |
|
|
|
@ -88,6 +77,53 @@ class MessageManager |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @param array $extraParams |
|
|
|
|
* |
|
|
|
|
* @return string |
|
|
|
|
*/ |
|
|
|
|
public static function getWhereConditions($extraParams) |
|
|
|
|
{ |
|
|
|
|
$userId = api_get_user_id(); |
|
|
|
|
|
|
|
|
|
$keyword = isset($extraParams['keyword']) && !empty($extraParams['keyword']) ? $extraParams['keyword'] : ''; |
|
|
|
|
$type = isset($extraParams['type']) && !empty($extraParams['type']) ? $extraParams['type'] : ''; |
|
|
|
|
|
|
|
|
|
if (empty($type)) { |
|
|
|
|
return ''; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
switch ($type) { |
|
|
|
|
case self::MESSAGE_TYPE_INBOX: |
|
|
|
|
$statusList = [MESSAGE_STATUS_NEW, MESSAGE_STATUS_UNREAD]; |
|
|
|
|
$userCondition = " user_receiver_id = $userId AND"; |
|
|
|
|
break; |
|
|
|
|
case self::MESSAGE_TYPE_OUTBOX: |
|
|
|
|
$statusList = [MESSAGE_STATUS_OUTBOX]; |
|
|
|
|
$userCondition = " user_sender_id = $userId AND"; |
|
|
|
|
break; |
|
|
|
|
case self::MESSAGE_TYPE_PROMOTED: |
|
|
|
|
$statusList = [MESSAGE_STATUS_PROMOTED]; |
|
|
|
|
$userCondition = " user_receiver_id = $userId AND"; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (empty($statusList)) { |
|
|
|
|
return ''; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$keywordCondition = ''; |
|
|
|
|
if (!empty($keyword)) { |
|
|
|
|
$keyword = Database::escape_string($keyword); |
|
|
|
|
$keywordCondition = " AND (title like '%$keyword%' OR content LIKE '%$keyword%') "; |
|
|
|
|
} |
|
|
|
|
$messageStatusCondition = implode("','", $statusList); |
|
|
|
|
|
|
|
|
|
return " $userCondition |
|
|
|
|
msg_status IN ('$messageStatusCondition') |
|
|
|
|
$keywordCondition"; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Gets information about some messages, used for the inbox sortable table. |
|
|
|
|
* |
|
|
|
@ -108,8 +144,6 @@ class MessageManager |
|
|
|
|
) { |
|
|
|
|
$from = (int) $from; |
|
|
|
|
$numberOfItems = (int) $numberOfItems; |
|
|
|
|
$userId = api_get_user_id(); |
|
|
|
|
|
|
|
|
|
// Forcing this order. |
|
|
|
|
if (!isset($direction)) { |
|
|
|
|
$column = 2; |
|
|
|
@ -125,24 +159,29 @@ class MessageManager |
|
|
|
|
$column = 2; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$keyword = isset($extraParams['keyword']) && !empty($extraParams['keyword']) ? $extraParams['keyword'] : ''; |
|
|
|
|
$viewUrl = api_get_path(WEB_CODE_PATH).'messages/view_message.php'; |
|
|
|
|
if (isset($extraParams['view_url']) && !empty($extraParams['view_url'])) { |
|
|
|
|
$viewUrl = $extraParams['view_url']; |
|
|
|
|
$type = isset($extraParams['type']) && !empty($extraParams['type']) ? $extraParams['type'] : ''; |
|
|
|
|
|
|
|
|
|
if (empty($type)) { |
|
|
|
|
return []; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$keywordCondition = ''; |
|
|
|
|
if (!empty($keyword)) { |
|
|
|
|
$keyword = Database::escape_string($keyword); |
|
|
|
|
$keywordCondition = " AND (title like '%$keyword%' OR content LIKE '%$keyword%') "; |
|
|
|
|
$viewUrl = ''; |
|
|
|
|
switch ($type) { |
|
|
|
|
case self::MESSAGE_TYPE_OUTBOX: |
|
|
|
|
case self::MESSAGE_TYPE_INBOX: |
|
|
|
|
$viewUrl = api_get_path(WEB_CODE_PATH).'messages/view_message.php'; |
|
|
|
|
break; |
|
|
|
|
case self::MESSAGE_TYPE_PROMOTED: |
|
|
|
|
$viewUrl = api_get_path(WEB_CODE_PATH).'social/view_promoted_message.php'; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
$viewUrl .= '?type='.$type; |
|
|
|
|
|
|
|
|
|
$messageStatus = [MESSAGE_STATUS_NEW, MESSAGE_STATUS_UNREAD]; |
|
|
|
|
if (isset($extraParams['message_status']) && !empty($extraParams['message_status'])) { |
|
|
|
|
$messageStatus = $extraParams['message_status']; |
|
|
|
|
$whereConditions = self::getWhereConditions($extraParams); |
|
|
|
|
|
|
|
|
|
if (empty($whereConditions)) { |
|
|
|
|
return []; |
|
|
|
|
} |
|
|
|
|
$messageStatus = array_map('intval', $messageStatus); |
|
|
|
|
$messageStatusCondition = implode("','", $messageStatus); |
|
|
|
|
|
|
|
|
|
$table = Database::get_main_table(TABLE_MESSAGE); |
|
|
|
|
$sql = "SELECT |
|
|
|
@ -153,9 +192,7 @@ class MessageManager |
|
|
|
|
user_sender_id |
|
|
|
|
FROM $table |
|
|
|
|
WHERE |
|
|
|
|
user_receiver_id = $userId AND |
|
|
|
|
msg_status IN ('$messageStatusCondition') |
|
|
|
|
$keywordCondition |
|
|
|
|
$whereConditions |
|
|
|
|
ORDER BY col$column $direction |
|
|
|
|
LIMIT $from, $numberOfItems"; |
|
|
|
|
|
|
|
|
@ -183,7 +220,7 @@ class MessageManager |
|
|
|
|
$userInfo = api_get_user_info($senderId); |
|
|
|
|
$message[3] = ''; |
|
|
|
|
if (!empty($senderId) && !empty($userInfo)) { |
|
|
|
|
$message[1] = '<a '.$class.' href="'.$viewUrl.'?id='.$messageId.'">'.$title.'</a><br />'; |
|
|
|
|
$message[1] = '<a '.$class.' href="'.$viewUrl.'&id='.$messageId.'">'.$title.'</a><br />'; |
|
|
|
|
$message[1] .= $userInfo['complete_name_with_username']; |
|
|
|
|
if (in_array('reply', $actions)) { |
|
|
|
|
$message[3] = |
|
|
|
@ -194,7 +231,7 @@ class MessageManager |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
$message[1] = '<a '.$class.' href="'.$viewUrl.'?id='.$messageId.'">'.$title.'</a><br />'; |
|
|
|
|
$message[1] = '<a '.$class.' href="'.$viewUrl.'&id='.$messageId.'">'.$title.'</a><br />'; |
|
|
|
|
$message[1] .= get_lang('UnknownUser'); |
|
|
|
|
if (in_array('reply', $actions)) { |
|
|
|
|
$message[3] = |
|
|
|
@ -817,7 +854,10 @@ class MessageManager |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$sql = "SELECT * FROM $table |
|
|
|
|
WHERE id = $id AND msg_status <> ".MESSAGE_STATUS_OUTBOX; |
|
|
|
|
WHERE |
|
|
|
|
id = $id AND |
|
|
|
|
user_receiver_id = $user_receiver_id AND |
|
|
|
|
msg_status <> ".MESSAGE_STATUS_OUTBOX; |
|
|
|
|
$rs = Database::query($sql); |
|
|
|
|
|
|
|
|
|
if (Database::num_rows($rs) > 0) { |
|
|
|
@ -849,16 +889,16 @@ class MessageManager |
|
|
|
|
*/ |
|
|
|
|
public static function delete_message_by_user_sender($user_sender_id, $id) |
|
|
|
|
{ |
|
|
|
|
if ($id != strval(intval($id))) { |
|
|
|
|
$user_sender_id = (int) $user_sender_id; |
|
|
|
|
$id = (int) $id; |
|
|
|
|
|
|
|
|
|
if (empty($id) || empty($user_sender_id)) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$table = Database::get_main_table(TABLE_MESSAGE); |
|
|
|
|
|
|
|
|
|
$id = intval($id); |
|
|
|
|
$user_sender_id = intval($user_sender_id); |
|
|
|
|
|
|
|
|
|
$sql = "SELECT * FROM $table WHERE id='$id'"; |
|
|
|
|
$sql = "SELECT * FROM $table WHERE id = $id AND user_sender_id= $user_sender_id"; |
|
|
|
|
$rs = Database::query($sql); |
|
|
|
|
|
|
|
|
|
if (Database::num_rows($rs) > 0) { |
|
|
|
@ -866,8 +906,8 @@ class MessageManager |
|
|
|
|
self::delete_message_attachment_file($id, $user_sender_id); |
|
|
|
|
// delete message |
|
|
|
|
$sql = "UPDATE $table |
|
|
|
|
SET msg_status = ".MESSAGE_STATUS_DELETED." |
|
|
|
|
WHERE user_sender_id='$user_sender_id' AND id='$id'"; |
|
|
|
|
SET msg_status = '".MESSAGE_STATUS_DELETED."' |
|
|
|
|
WHERE user_sender_id= $user_sender_id AND id= $id"; |
|
|
|
|
Database::query($sql); |
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
@ -1268,30 +1308,34 @@ class MessageManager |
|
|
|
|
/** |
|
|
|
|
* display message box in the inbox. |
|
|
|
|
* |
|
|
|
|
* @param int the message id |
|
|
|
|
* @param string inbox or outbox strings are available |
|
|
|
|
* @param int $messageId |
|
|
|
|
* @param int $type |
|
|
|
|
* |
|
|
|
|
* @todo replace numbers with letters in the $row array pff... |
|
|
|
|
* |
|
|
|
|
* @return string html with the message content |
|
|
|
|
*/ |
|
|
|
|
public static function showMessageBox($messageId, $source) |
|
|
|
|
public static function showMessageBox($messageId, $type) |
|
|
|
|
{ |
|
|
|
|
$table = Database::get_main_table(TABLE_MESSAGE); |
|
|
|
|
$messageId = (int) $messageId; |
|
|
|
|
|
|
|
|
|
if (empty($messageId)) { |
|
|
|
|
if (empty($messageId) || empty($type)) { |
|
|
|
|
return ''; |
|
|
|
|
} |
|
|
|
|
$currentUserId = api_get_user_id(); |
|
|
|
|
|
|
|
|
|
switch ($source) { |
|
|
|
|
case 'outbox': |
|
|
|
|
$table = Database::get_main_table(TABLE_MESSAGE); |
|
|
|
|
|
|
|
|
|
if (empty($type)) { |
|
|
|
|
return ''; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
switch ($type) { |
|
|
|
|
case self::MESSAGE_TYPE_OUTBOX: |
|
|
|
|
$status = MESSAGE_STATUS_OUTBOX; |
|
|
|
|
$userCondition = " user_sender_id = $currentUserId AND "; |
|
|
|
|
|
|
|
|
|
break; |
|
|
|
|
case 'inbox': |
|
|
|
|
case self::MESSAGE_TYPE_INBOX: |
|
|
|
|
$status = MESSAGE_STATUS_NEW; |
|
|
|
|
$userCondition = " user_receiver_id = $currentUserId AND "; |
|
|
|
|
|
|
|
|
@ -1300,17 +1344,21 @@ class MessageManager |
|
|
|
|
WHERE id = $messageId "; |
|
|
|
|
Database::query($query); |
|
|
|
|
break; |
|
|
|
|
case 'promoted_messages': |
|
|
|
|
case self::MESSAGE_TYPE_PROMOTED: |
|
|
|
|
$status = MESSAGE_STATUS_PROMOTED; |
|
|
|
|
$userCondition = " user_receiver_id = $currentUserId AND "; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (empty($userCondition)) { |
|
|
|
|
return ''; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$query = "SELECT * FROM $table |
|
|
|
|
WHERE |
|
|
|
|
id = $messageId AND |
|
|
|
|
$userCondition |
|
|
|
|
msg_status = $status"; |
|
|
|
|
WHERE |
|
|
|
|
id = $messageId AND |
|
|
|
|
$userCondition |
|
|
|
|
msg_status = $status"; |
|
|
|
|
$result = Database::query($query); |
|
|
|
|
$row = Database::fetch_array($result, 'ASSOC'); |
|
|
|
|
|
|
|
|
@ -1321,10 +1369,7 @@ class MessageManager |
|
|
|
|
$user_sender_id = $row['user_sender_id']; |
|
|
|
|
|
|
|
|
|
// get file attachments by message id |
|
|
|
|
$files_attachments = self::getAttachmentLinkList( |
|
|
|
|
$messageId, |
|
|
|
|
$source |
|
|
|
|
); |
|
|
|
|
$files_attachments = self::getAttachmentLinkList($messageId, $type); |
|
|
|
|
|
|
|
|
|
$row['content'] = str_replace('</br>', '<br />', $row['content']); |
|
|
|
|
$title = Security::remove_XSS($row['title'], STUDENT, true); |
|
|
|
@ -1353,49 +1398,51 @@ class MessageManager |
|
|
|
|
$message_content .= '<tr>'; |
|
|
|
|
if (api_get_setting('allow_social_tool') === 'true') { |
|
|
|
|
$message_content .= '<div class="row">'; |
|
|
|
|
if ($source === 'outbox') { |
|
|
|
|
$message_content .= '<div class="col-md-12">'; |
|
|
|
|
$message_content .= '<ul class="list-message">'; |
|
|
|
|
$message_content .= '<li>'.$userImage.'</li>'; |
|
|
|
|
$message_content .= '<li>'.$name.' '; |
|
|
|
|
if (!empty($receiverUserInfo)) { |
|
|
|
|
$message_content .= api_strtolower( |
|
|
|
|
get_lang('To') |
|
|
|
|
).' <b>'.$receiverUserInfo['complete_name_with_username'].'</b></li>'; |
|
|
|
|
} else { |
|
|
|
|
$message_content .= api_strtolower(get_lang('To')).' <b>-</b></li>'; |
|
|
|
|
} |
|
|
|
|
$message_content .= '<div class="col-md-12">'; |
|
|
|
|
$message_content .= '<ul class="list-message">'; |
|
|
|
|
|
|
|
|
|
$message_content .= '<li>'.Display::dateToStringAgoAndLongDate($row['send_date']).'</li>'; |
|
|
|
|
$message_content .= '</ul>'; |
|
|
|
|
$message_content .= '</div>'; |
|
|
|
|
if (!empty($user_sender_id)) { |
|
|
|
|
$message_content .= '<li>'.$userImage.'</li>'; |
|
|
|
|
$message_content .= '<li>'; |
|
|
|
|
$message_content .= Display::url( |
|
|
|
|
$name, |
|
|
|
|
api_get_path(WEB_PATH).'main/social/profile.php?u='.$user_sender_id |
|
|
|
|
); |
|
|
|
|
} else { |
|
|
|
|
$message_content .= '<div class="col-md-12">'; |
|
|
|
|
$message_content .= '<ul class="list-message">'; |
|
|
|
|
if (!empty($user_sender_id)) { |
|
|
|
|
$message_content .= '<li>'.$userImage.'</li>'; |
|
|
|
|
$message_content .= '<li><a href="'.api_get_path( |
|
|
|
|
WEB_PATH |
|
|
|
|
).'main/social/profile.php?u='.$user_sender_id.'">'.$name.'</a>'; |
|
|
|
|
} else { |
|
|
|
|
$message_content .= '<li>'.$name; |
|
|
|
|
} |
|
|
|
|
$message_content .= '<li>'.$name; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if ($source === 'inbox') { |
|
|
|
|
switch ($type) { |
|
|
|
|
case self::MESSAGE_TYPE_INBOX: |
|
|
|
|
//$message_content .= api_strtolower(get_lang('To')).' <b>-</b></li>'; |
|
|
|
|
$message_content .= ' '.api_strtolower(get_lang('To')).' '.get_lang('Me'); |
|
|
|
|
} |
|
|
|
|
$message_content .= '<li>'.Display::dateToStringAgoAndLongDate($row['send_date']).'</li>'; |
|
|
|
|
$message_content .= '</ul>'; |
|
|
|
|
$message_content .= '</div>'; |
|
|
|
|
break; |
|
|
|
|
case self::MESSAGE_TYPE_OUTBOX: |
|
|
|
|
if (!empty($receiverUserInfo)) { |
|
|
|
|
$message_content .= ' '.api_strtolower( |
|
|
|
|
get_lang('To') |
|
|
|
|
).' <b>'.$receiverUserInfo['complete_name_with_username'].'</b></li>'; |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
case self::MESSAGE_TYPE_PROMOTED: |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$message_content .= ' <li>'.Display::dateToStringAgoAndLongDate($row['send_date']).'</li>'; |
|
|
|
|
$message_content .= '</ul>'; |
|
|
|
|
$message_content .= '</div>'; |
|
|
|
|
$message_content .= '</div>'; |
|
|
|
|
} else { |
|
|
|
|
if ($source === 'outbox') { |
|
|
|
|
$message_content .= get_lang('From').': '.$name.'</b> '.api_strtolower(get_lang('To')).' <b>'. |
|
|
|
|
$receiverUserInfo['complete_name_with_username'].'</b>'; |
|
|
|
|
} else { |
|
|
|
|
$message_content .= get_lang('From').': '.$name.'</b> '.api_strtolower(get_lang('To')).' <b>'. |
|
|
|
|
get_lang('Me').'</b>'; |
|
|
|
|
switch ($type) { |
|
|
|
|
case self::MESSAGE_TYPE_INBOX: |
|
|
|
|
$message_content .= get_lang('From').': '.$name.'</b> '.api_strtolower(get_lang('To')).' <b>'. |
|
|
|
|
get_lang('Me').'</b>'; |
|
|
|
|
break; |
|
|
|
|
case self::MESSAGE_TYPE_OUTBOX: |
|
|
|
|
|
|
|
|
|
$message_content .= get_lang('From').': '.$name.'</b> '.api_strtolower(get_lang('To')).' <b>'. |
|
|
|
|
$receiverUserInfo['complete_name_with_username'].'</b>'; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -1413,20 +1460,21 @@ class MessageManager |
|
|
|
|
$social_link = 'f=social'; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if ($source == 'outbox') { |
|
|
|
|
$message_content .= '<a href="outbox.php?'.$social_link.'">'. |
|
|
|
|
Display::return_icon('back.png', get_lang('ReturnToOutbox')).'</a>  '; |
|
|
|
|
} elseif ($source === 'inbox') { |
|
|
|
|
$message_content .= '<a href="inbox.php?'.$social_link.'">'. |
|
|
|
|
Display::return_icon('back.png', get_lang('ReturnToInbox')).'</a>  '; |
|
|
|
|
$message_content .= '<a href="new_message.php?re_id='.$messageId.'&'.$social_link.'">'. |
|
|
|
|
Display::return_icon('message_reply.png', get_lang('ReplyToMessage')).'</a>  '; |
|
|
|
|
} |
|
|
|
|
$urlMessage['delete'] = 'inbox.php?action=deleteone&id='.$messageId.'&'.$social_link; |
|
|
|
|
|
|
|
|
|
if (in_array($source, ['inbox', 'outbox'])) { |
|
|
|
|
$message_content .= '<a href="inbox.php?action=deleteone&id='.$messageId.'&'.$social_link.'" >'. |
|
|
|
|
Display::return_icon('delete.png', get_lang('DeleteMessage')).'</a> '; |
|
|
|
|
switch ($type) { |
|
|
|
|
case self::MESSAGE_TYPE_OUTBOX: |
|
|
|
|
$message_content .= '<a href="outbox.php?'.$social_link.'">'. |
|
|
|
|
Display::return_icon('back.png', get_lang('ReturnToOutbox')).'</a>  '; |
|
|
|
|
$message_content .= '<a href="outbox.php?action=deleteone&id='.$messageId.'&'.$social_link.'" >'. |
|
|
|
|
Display::return_icon('delete.png', get_lang('DeleteMessage')).'</a> '; |
|
|
|
|
break; |
|
|
|
|
case self::MESSAGE_TYPE_INBOX: |
|
|
|
|
$message_content .= '<a href="inbox.php?'.$social_link.'">'. |
|
|
|
|
Display::return_icon('back.png', get_lang('ReturnToInbox')).'</a>  '; |
|
|
|
|
$message_content .= '<a href="new_message.php?re_id='.$messageId.'&'.$social_link.'">'. |
|
|
|
|
Display::return_icon('message_reply.png', get_lang('ReplyToMessage')).'</a>  '; |
|
|
|
|
$message_content .= '<a href="inbox.php?action=deleteone&id='.$messageId.'&'.$social_link.'" >'. |
|
|
|
|
Display::return_icon('delete.png', get_lang('DeleteMessage')).'</a> '; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$message_content .= '</div></td> |
|
|
|
@ -1594,8 +1642,6 @@ class MessageManager |
|
|
|
|
* |
|
|
|
|
* @param $groupId |
|
|
|
|
* @param $topic_id |
|
|
|
|
* @param $is_member |
|
|
|
|
* @param $messageId |
|
|
|
|
* |
|
|
|
|
* @return string |
|
|
|
|
*/ |
|
|
|
@ -1629,7 +1675,7 @@ class MessageManager |
|
|
|
|
$items_page_nr = null; |
|
|
|
|
|
|
|
|
|
$user_sender_info = api_get_user_info($main_message['user_sender_id']); |
|
|
|
|
$files_attachments = self::getAttachmentLinkList($main_message['id']); |
|
|
|
|
$files_attachments = self::getAttachmentLinkList($main_message['id'], 0); |
|
|
|
|
$name = $user_sender_info['complete_name']; |
|
|
|
|
|
|
|
|
|
$topic_page_nr = isset($_GET['topics_page_nr']) ? (int) $_GET['topics_page_nr'] : null; |
|
|
|
@ -1771,7 +1817,7 @@ class MessageManager |
|
|
|
|
$links .= '<div class="pull-right">'; |
|
|
|
|
$html_items = ''; |
|
|
|
|
$user_sender_info = api_get_user_info($topic['user_sender_id']); |
|
|
|
|
$files_attachments = self::getAttachmentLinkList($topic['id']); |
|
|
|
|
$files_attachments = self::getAttachmentLinkList($topic['id'], 0); |
|
|
|
|
$name = $user_sender_info['complete_name']; |
|
|
|
|
|
|
|
|
|
$links .= '<div class="btn-group btn-group-sm">'; |
|
|
|
@ -2002,12 +2048,12 @@ class MessageManager |
|
|
|
|
/** |
|
|
|
|
* Get array of links (download) for message attachment files. |
|
|
|
|
* |
|
|
|
|
* @param int $messageId |
|
|
|
|
* @param string $type message list (inbox/outbox) |
|
|
|
|
* @param int $messageId |
|
|
|
|
* @param int $type |
|
|
|
|
* |
|
|
|
|
* @return array |
|
|
|
|
*/ |
|
|
|
|
public static function getAttachmentLinkList($messageId, $type = '') |
|
|
|
|
public static function getAttachmentLinkList($messageId, $type) |
|
|
|
|
{ |
|
|
|
|
$files = self::getAttachmentList($messageId); |
|
|
|
|
// get file attachments by message id |
|
|
|
@ -2025,10 +2071,9 @@ class MessageManager |
|
|
|
|
$comment = !empty($comment) ? ' - <i>'.$comment.'</i>' : ''; |
|
|
|
|
|
|
|
|
|
$attachmentLine = $attachIcon.' '.$link.' ('.$size.')'.$comment; |
|
|
|
|
if ($row_file['comment'] == 'audio_message') { |
|
|
|
|
if ($row_file['comment'] === 'audio_message') { |
|
|
|
|
$attachmentLine = '<audio src="'.$archiveURL.$archiveFile.'"/>'; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$list[] = $attachmentLine; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -2097,23 +2142,72 @@ class MessageManager |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @param string $statusList |
|
|
|
|
* @param array $keyword |
|
|
|
|
* @param string $type |
|
|
|
|
* @param string $keyword |
|
|
|
|
* @param array $actions |
|
|
|
|
* @param string $viewUrl |
|
|
|
|
* |
|
|
|
|
* @return string |
|
|
|
|
*/ |
|
|
|
|
public static function getMessageGrid($statusList, $keyword, $actions = [], $viewUrl = '') |
|
|
|
|
public static function getMessageGrid($type, $keyword, $actions = []) |
|
|
|
|
{ |
|
|
|
|
if (empty($statusList)) { |
|
|
|
|
return ''; |
|
|
|
|
$html = ''; |
|
|
|
|
// display sortable table with messages of the current user |
|
|
|
|
$table = new SortableTable( |
|
|
|
|
'message_inbox', |
|
|
|
|
['MessageManager', 'getNumberOfMessages'], |
|
|
|
|
['MessageManager', 'getMessageData'], |
|
|
|
|
2, |
|
|
|
|
20, |
|
|
|
|
'DESC' |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
$table->setDataFunctionParams( |
|
|
|
|
['keyword' => $keyword, 'type' => $type, 'actions' => $actions] |
|
|
|
|
); |
|
|
|
|
$table->set_header(0, '', false, ['style' => 'width:15px;']); |
|
|
|
|
$table->set_header(1, get_lang('Messages'), false); |
|
|
|
|
$table->set_header(2, get_lang('Date'), true, ['style' => 'width:180px;']); |
|
|
|
|
$table->set_header(3, get_lang('Modify'), false, ['style' => 'width:120px;']); |
|
|
|
|
|
|
|
|
|
if (isset($_REQUEST['f']) && $_REQUEST['f'] === 'social') { |
|
|
|
|
$parameters['f'] = 'social'; |
|
|
|
|
$table->set_additional_parameters($parameters); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$defaultActions = [ |
|
|
|
|
'delete' => get_lang('DeleteSelectedMessages'), |
|
|
|
|
'mark_as_unread' => get_lang('MailMarkSelectedAsUnread'), |
|
|
|
|
'mark_as_read' => get_lang('MailMarkSelectedAsRead'), |
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
if (!in_array('delete', $actions)) { |
|
|
|
|
unset($defaultActions['delete']); |
|
|
|
|
} |
|
|
|
|
if (!in_array('mark_as_unread', $actions)) { |
|
|
|
|
unset($defaultActions['mark_as_unread']); |
|
|
|
|
} |
|
|
|
|
if (!in_array('mark_as_read', $actions)) { |
|
|
|
|
unset($defaultActions['mark_as_read']); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$table->set_form_actions($defaultActions); |
|
|
|
|
|
|
|
|
|
$html .= $table->return_table(); |
|
|
|
|
|
|
|
|
|
return $html; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @param string $keyword |
|
|
|
|
* |
|
|
|
|
* @return string |
|
|
|
|
*/ |
|
|
|
|
public static function inboxDisplay($keyword = '') |
|
|
|
|
{ |
|
|
|
|
$success = get_lang('SelectedMessagesDeleted'); |
|
|
|
|
$success_read = get_lang('SelectedMessagesRead'); |
|
|
|
|
$success_unread = get_lang('SelectedMessagesUnRead'); |
|
|
|
|
$currentUserId = api_get_user_id(); |
|
|
|
|
$html = ''; |
|
|
|
|
|
|
|
|
|
if (isset($_REQUEST['action'])) { |
|
|
|
|
switch ($_REQUEST['action']) { |
|
|
|
@ -2127,11 +2221,11 @@ class MessageManager |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
$html .= Display::return_message( |
|
|
|
|
api_xml_http_response_encode($success_unread), |
|
|
|
|
Display::addFlash(Display::return_message( |
|
|
|
|
$success_unread, |
|
|
|
|
'normal', |
|
|
|
|
false |
|
|
|
|
); |
|
|
|
|
)); |
|
|
|
|
break; |
|
|
|
|
case 'mark_as_read': |
|
|
|
|
if (is_array($_POST['id'])) { |
|
|
|
@ -2143,75 +2237,41 @@ class MessageManager |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
$html .= Display::return_message( |
|
|
|
|
api_xml_http_response_encode($success_read), |
|
|
|
|
Display::addFlash(Display::return_message( |
|
|
|
|
$success_read, |
|
|
|
|
'normal', |
|
|
|
|
false |
|
|
|
|
); |
|
|
|
|
)); |
|
|
|
|
break; |
|
|
|
|
case 'delete': |
|
|
|
|
foreach ($_POST['id'] as $index => $messageId) { |
|
|
|
|
self::delete_message_by_user_receiver($currentUserId, $messageId); |
|
|
|
|
} |
|
|
|
|
$html .= Display::return_message( |
|
|
|
|
api_xml_http_response_encode($success), |
|
|
|
|
Display::addFlash(Display::return_message( |
|
|
|
|
$success, |
|
|
|
|
'normal', |
|
|
|
|
false |
|
|
|
|
); |
|
|
|
|
)); |
|
|
|
|
break; |
|
|
|
|
case 'deleteone': |
|
|
|
|
self::delete_message_by_user_receiver($currentUserId, $_GET['id']); |
|
|
|
|
$html .= Display::return_message( |
|
|
|
|
api_xml_http_response_encode($success), |
|
|
|
|
'confirmation', |
|
|
|
|
false |
|
|
|
|
); |
|
|
|
|
$result = self::delete_message_by_user_receiver($currentUserId, $_GET['id']); |
|
|
|
|
if ($result) { |
|
|
|
|
Display::addFlash( |
|
|
|
|
Display::return_message( |
|
|
|
|
$success, |
|
|
|
|
'confirmation', |
|
|
|
|
false |
|
|
|
|
) |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
header('Location: '.api_get_self()); |
|
|
|
|
exit; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// display sortable table with messages of the current user |
|
|
|
|
$table = new SortableTable( |
|
|
|
|
'message_inbox', |
|
|
|
|
['MessageManager', 'getNumberOfMessages'], |
|
|
|
|
['MessageManager', 'getMessageData'], |
|
|
|
|
2, |
|
|
|
|
20, |
|
|
|
|
'DESC' |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
$table->setDataFunctionParams( |
|
|
|
|
['keyword' => $keyword, 'message_status' => $statusList, 'actions' => $actions, 'view_url' => $viewUrl] |
|
|
|
|
); |
|
|
|
|
$table->set_header(0, '', false, ['style' => 'width:15px;']); |
|
|
|
|
$table->set_header(1, get_lang('Messages'), false); |
|
|
|
|
$table->set_header(2, get_lang('Date'), true, ['style' => 'width:180px;']); |
|
|
|
|
$table->set_header(3, get_lang('Modify'), false, ['style' => 'width:120px;']); |
|
|
|
|
|
|
|
|
|
if (isset($_REQUEST['f']) && $_REQUEST['f'] === 'social') { |
|
|
|
|
$parameters['f'] = 'social'; |
|
|
|
|
$table->set_additional_parameters($parameters); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$defaultActions = [ |
|
|
|
|
'delete' => get_lang('DeleteSelectedMessages'), |
|
|
|
|
'mark_as_unread' => get_lang('MailMarkSelectedAsUnread'), |
|
|
|
|
'mark_as_read' => get_lang('MailMarkSelectedAsRead'), |
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
if (!in_array('delete', $actions)) { |
|
|
|
|
unset($defaultActions['delete']); |
|
|
|
|
} |
|
|
|
|
if (!in_array('mark_as_unread', $actions)) { |
|
|
|
|
unset($defaultActions['mark_as_unread']); |
|
|
|
|
} |
|
|
|
|
if (!in_array('mark_as_read', $actions)) { |
|
|
|
|
unset($defaultActions['mark_as_read']); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$table->set_form_actions($defaultActions); |
|
|
|
|
|
|
|
|
|
$html .= $table->return_table(); |
|
|
|
|
$actions = ['reply', 'mark_as_unread', 'mark_as_read', 'forward', 'delete']; |
|
|
|
|
$html = self::getMessageGrid(self::MESSAGE_TYPE_INBOX, $keyword, $actions); |
|
|
|
|
|
|
|
|
|
return $html; |
|
|
|
|
} |
|
|
|
@ -2221,10 +2281,39 @@ class MessageManager |
|
|
|
|
* |
|
|
|
|
* @return string |
|
|
|
|
*/ |
|
|
|
|
public static function inboxDisplay($keyword = '') |
|
|
|
|
public static function getPromotedMessagesGrid($keyword) |
|
|
|
|
{ |
|
|
|
|
$actions = ['reply', 'mark_as_unread', 'mark_as_read', 'forward', 'delete']; |
|
|
|
|
$html = self::getMessageGrid([MESSAGE_STATUS_NEW, MESSAGE_STATUS_UNREAD], $keyword, $actions); |
|
|
|
|
$actions = ['delete']; |
|
|
|
|
$currentUserId = api_get_user_id(); |
|
|
|
|
|
|
|
|
|
$success = get_lang('SelectedMessagesDeleted'); |
|
|
|
|
if (isset($_REQUEST['action'])) { |
|
|
|
|
switch ($_REQUEST['action']) { |
|
|
|
|
case 'delete': |
|
|
|
|
foreach ($_POST['id'] as $index => $messageId) { |
|
|
|
|
self::delete_message_by_user_receiver($currentUserId, $messageId); |
|
|
|
|
} |
|
|
|
|
Display::addFlash(Display::return_message( |
|
|
|
|
$success, |
|
|
|
|
'normal', |
|
|
|
|
false |
|
|
|
|
)); |
|
|
|
|
break; |
|
|
|
|
case 'deleteone': |
|
|
|
|
self::delete_message_by_user_receiver($currentUserId, $_GET['id']); |
|
|
|
|
Display::addFlash(Display::return_message( |
|
|
|
|
$success, |
|
|
|
|
'confirmation', |
|
|
|
|
false |
|
|
|
|
)); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
header('Location: '.api_get_self()); |
|
|
|
|
exit; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$html = self::getMessageGrid(self::MESSAGE_TYPE_PROMOTED, $keyword, $actions); |
|
|
|
|
|
|
|
|
|
return $html; |
|
|
|
|
} |
|
|
|
@ -2234,12 +2323,40 @@ class MessageManager |
|
|
|
|
* |
|
|
|
|
* @return string |
|
|
|
|
*/ |
|
|
|
|
public static function getPromotedMessagesGrid($keyword = '') |
|
|
|
|
public static function outBoxDisplay($keyword) |
|
|
|
|
{ |
|
|
|
|
//$actions = ['edit', 'delete']; |
|
|
|
|
$actions = ['delete']; |
|
|
|
|
$url = api_get_path(WEB_CODE_PATH).'social/view_promoted_message.php'; |
|
|
|
|
$html = self::getMessageGrid([MESSAGE_STATUS_PROMOTED], $keyword, $actions, $url); |
|
|
|
|
|
|
|
|
|
$success = get_lang('SelectedMessagesDeleted'); |
|
|
|
|
$currentUserId = api_get_user_id(); |
|
|
|
|
if (isset($_REQUEST['action'])) { |
|
|
|
|
switch ($_REQUEST['action']) { |
|
|
|
|
case 'delete': |
|
|
|
|
foreach ($_POST['id'] as $index => $messageId) { |
|
|
|
|
self::delete_message_by_user_sender($currentUserId, $messageId); |
|
|
|
|
} |
|
|
|
|
Display::addFlash(Display::return_message( |
|
|
|
|
$success, |
|
|
|
|
'normal', |
|
|
|
|
false |
|
|
|
|
)); |
|
|
|
|
|
|
|
|
|
break; |
|
|
|
|
case 'deleteone': |
|
|
|
|
self::delete_message_by_user_sender($currentUserId, $_GET['id']); |
|
|
|
|
Display::addFlash(Display::return_message( |
|
|
|
|
$success, |
|
|
|
|
'confirmation', |
|
|
|
|
false |
|
|
|
|
)); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
header('Location: '.api_get_self()); |
|
|
|
|
exit; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$html = self::getMessageGrid(self::MESSAGE_TYPE_OUTBOX, $keyword, $actions); |
|
|
|
|
|
|
|
|
|
return $html; |
|
|
|
|
} |
|
|
|
@ -2282,13 +2399,13 @@ class MessageManager |
|
|
|
|
$table = new SortableTable( |
|
|
|
|
'message_outbox', |
|
|
|
|
['MessageManager', 'getNumberOfMessages'], |
|
|
|
|
['MessageManager', 'get_message_data_sent'], |
|
|
|
|
['MessageManager', 'getMessageData'], |
|
|
|
|
2, |
|
|
|
|
20, |
|
|
|
|
'DESC' |
|
|
|
|
); |
|
|
|
|
$table->setDataFunctionParams( |
|
|
|
|
['keyword' => $keyword, 'message_status' => [MESSAGE_STATUS_OUTBOX]] |
|
|
|
|
['keyword' => $keyword, 'type' => self::MESSAGE_TYPE_OUTBOX] |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
$table->set_header(0, '', false, ['style' => 'width:15px;']); |
|
|
|
@ -2302,49 +2419,9 @@ class MessageManager |
|
|
|
|
return $html; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Get the count of the last received messages for a user. |
|
|
|
|
* |
|
|
|
|
* @param int $userId The user id |
|
|
|
|
* @param int $lastId The id of the last received message |
|
|
|
|
* |
|
|
|
|
* @return int The count of new messages |
|
|
|
|
*/ |
|
|
|
|
public static function countMessagesFromLastReceivedMessage($userId, $lastId = 0) |
|
|
|
|
{ |
|
|
|
|
$userId = intval($userId); |
|
|
|
|
$lastId = intval($lastId); |
|
|
|
|
|
|
|
|
|
if (empty($userId)) { |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$messagesTable = Database::get_main_table(TABLE_MESSAGE); |
|
|
|
|
|
|
|
|
|
$conditions = [ |
|
|
|
|
'where' => [ |
|
|
|
|
'user_receiver_id = ?' => $userId, |
|
|
|
|
'AND msg_status = ?' => MESSAGE_STATUS_UNREAD, |
|
|
|
|
'AND id > ?' => $lastId, |
|
|
|
|
], |
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
$result = Database::select('COUNT(1) AS qty', $messagesTable, $conditions); |
|
|
|
|
|
|
|
|
|
if (!empty($result)) { |
|
|
|
|
$row = current($result); |
|
|
|
|
|
|
|
|
|
return $row['qty']; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Get the data of the last received messages for a user. |
|
|
|
|
* |
|
|
|
|
* @deprecated 2.0 Use Chamilo\CoreBundle\Repository\MessageRepository::getFromLastOneReceived |
|
|
|
|
* |
|
|
|
|
* @param int $userId The user id |
|
|
|
|
* @param int $lastId The id of the last received message |
|
|
|
|
* |
|
|
|
@ -2791,30 +2868,38 @@ class MessageManager |
|
|
|
|
|
|
|
|
|
$countLikes = self::countLikesAndDislikes($messageId, $userId); |
|
|
|
|
|
|
|
|
|
$class = $countLikes['user_liked'] ? 'btn-primary' : 'btn-default'; |
|
|
|
|
|
|
|
|
|
$btnLike = Display::button( |
|
|
|
|
'like', |
|
|
|
|
Display::returnFontAwesomeIcon('thumbs-up', '', true) |
|
|
|
|
.PHP_EOL.'<span>'.$countLikes['likes'].'</span>', |
|
|
|
|
[ |
|
|
|
|
'title' => get_lang('VoteLike'), |
|
|
|
|
'class' => 'btn btn-default social-like '.($countLikes['user_liked'] ? 'disabled' : ''), |
|
|
|
|
'class' => 'btn social-like '.$class, |
|
|
|
|
'data-status' => 'like', |
|
|
|
|
'data-message' => $messageId, |
|
|
|
|
'data-group' => $groupId, |
|
|
|
|
] |
|
|
|
|
); |
|
|
|
|
$btnDislike = Display::button( |
|
|
|
|
'like', |
|
|
|
|
Display::returnFontAwesomeIcon('thumbs-down', '', true) |
|
|
|
|
.PHP_EOL.'<span>'.$countLikes['dislikes'].'</span>', |
|
|
|
|
[ |
|
|
|
|
'title' => get_lang('VoteDislike'), |
|
|
|
|
'class' => 'btn btn-default social-like '.($countLikes['user_disliked'] ? 'disabled' : ''), |
|
|
|
|
'data-status' => 'dislike', |
|
|
|
|
'data-message' => $messageId, |
|
|
|
|
'data-group' => $groupId, |
|
|
|
|
] |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
$btnDislike = ''; |
|
|
|
|
if (api_get_configuration_value('disable_dislike_option') === false) { |
|
|
|
|
$disabled = $countLikes['user_disliked'] ? 'btn-danger' : 'btn-default'; |
|
|
|
|
|
|
|
|
|
$btnDislike = Display::button( |
|
|
|
|
'like', |
|
|
|
|
Display::returnFontAwesomeIcon('thumbs-down', '', true) |
|
|
|
|
.PHP_EOL.'<span>'.$countLikes['dislikes'].'</span>', |
|
|
|
|
[ |
|
|
|
|
'title' => get_lang('VoteDislike'), |
|
|
|
|
'class' => 'btn social-like '.$disabled, |
|
|
|
|
'data-status' => 'dislike', |
|
|
|
|
'data-message' => $messageId, |
|
|
|
|
'data-group' => $groupId, |
|
|
|
|
] |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return $btnLike.PHP_EOL.$btnDislike; |
|
|
|
|
} |
|
|
|
@ -2838,11 +2923,11 @@ class MessageManager |
|
|
|
|
$sql = "SELECT COUNT(id) as count |
|
|
|
|
FROM $table |
|
|
|
|
WHERE |
|
|
|
|
user_receiver_id=".$userId." AND |
|
|
|
|
user_receiver_id = $userId AND |
|
|
|
|
msg_status = ".MESSAGE_STATUS_UNREAD; |
|
|
|
|
$result = Database::query($sql); |
|
|
|
|
$row = Database::fetch_assoc($result); |
|
|
|
|
|
|
|
|
|
return $row['count']; |
|
|
|
|
return (int) $row['count']; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|