|
@@ -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;
|
|
|
+
|
|
|
+ $whereConditions = self::getWhereConditions($extraParams);
|
|
|
|
|
|
- $messageStatus = [MESSAGE_STATUS_NEW, MESSAGE_STATUS_UNREAD];
|
|
|
- if (isset($extraParams['message_status']) && !empty($extraParams['message_status'])) {
|
|
|
- $messageStatus = $extraParams['message_status'];
|
|
|
+ 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] =
|
|
@@ -815,7 +852,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) {
|
|
@@ -847,16 +887,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) {
|
|
@@ -864,8 +904,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;
|
|
@@ -1266,30 +1306,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 ";
|
|
|
|
|
@@ -1298,17 +1342,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');
|
|
|
|
|
@@ -1319,10 +1367,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);
|
|
@@ -1341,7 +1386,7 @@ class MessageManager
|
|
|
);
|
|
|
}
|
|
|
|
|
|
- $message_content = Display::page_subheader(str_replace("\\", "", $title));
|
|
|
+ $message_content = Display::page_subheader(str_replace("\\", '', $title));
|
|
|
|
|
|
$receiverUserInfo = [];
|
|
|
if (!empty($row['user_receiver_id'])) {
|
|
@@ -1351,49 +1396,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;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1411,19 +1458,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>  ';
|
|
|
- }
|
|
|
-
|
|
|
- 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>
|
|
@@ -1624,7 +1673,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;
|
|
@@ -1766,7 +1815,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">';
|
|
@@ -1997,12 +2046,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
|
|
@@ -2020,10 +2069,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;
|
|
|
}
|
|
|
}
|
|
@@ -2092,23 +2140,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']) {
|
|
@@ -2122,11 +2219,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'])) {
|
|
@@ -2138,75 +2235,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;
|
|
|
}
|
|
@@ -2216,10 +2279,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;
|
|
|
}
|
|
@@ -2229,12 +2321,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;
|
|
|
}
|
|
@@ -2277,13 +2397,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;']);
|
|
@@ -2746,13 +2866,15 @@ 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,
|
|
@@ -2761,13 +2883,15 @@ class MessageManager
|
|
|
|
|
|
$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 btn-default social-like '.($countLikes['user_disliked'] ? 'disabled' : ''),
|
|
|
+ 'class' => 'btn social-like '.$disabled,
|
|
|
'data-status' => 'dislike',
|
|
|
'data-message' => $messageId,
|
|
|
'data-group' => $groupId,
|
|
@@ -2797,11 +2921,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'];
|
|
|
}
|
|
|
}
|