Refactor message grid see BT#15983

pull/2981/head
Julio Montoya 6 years ago
parent 319bf79c87
commit d88e0b6367
  1. 489
      main/inc/lib/message.lib.php
  2. 4
      main/inc/lib/social.lib.php
  3. 1
      main/inc/lib/sortable_table.class.php
  4. 11
      main/messages/download.php
  5. 84
      main/messages/inbox.php
  6. 2
      main/messages/new_message.php
  7. 33
      main/messages/outbox.php
  8. 31
      main/messages/view_message.php

@ -15,6 +15,10 @@ use ChamiloSession as Session;
*/ */
class MessageManager 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. * Get count new messages for the current user from the database.
* *
@ -53,32 +57,16 @@ class MessageManager
* *
* @return int * @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); $table = Database::get_main_table(TABLE_MESSAGE);
$keyword = isset($params['keyword']) && !empty($params['keyword']) ? $params['keyword'] : ''; $conditions = self::getWhereConditions($params);
$keywordCondition = '';
if (!empty($keyword)) {
$keyword = Database::escape_string($keyword);
$keywordCondition = " AND (title like '%$keyword%' OR content LIKE '%$keyword%') ";
}
$sql = "SELECT COUNT(id) as number_messages $sql = "SELECT COUNT(id) as number_messages
FROM $table FROM $table
WHERE WHERE
msg_status IN ('$messageStatusCondition') AND $conditions
user_receiver_id = ".api_get_user_id()."
$keywordCondition
"; ";
$result = Database::query($sql); $result = Database::query($sql);
$result = Database::fetch_array($result); $result = Database::fetch_array($result);
@ -89,6 +77,53 @@ class MessageManager
return 0; 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. * Gets information about some messages, used for the inbox sortable table.
* *
@ -109,8 +144,6 @@ class MessageManager
) { ) {
$from = (int) $from; $from = (int) $from;
$numberOfItems = (int) $numberOfItems; $numberOfItems = (int) $numberOfItems;
$userId = api_get_user_id();
// Forcing this order. // Forcing this order.
if (!isset($direction)) { if (!isset($direction)) {
$column = 2; $column = 2;
@ -126,24 +159,29 @@ class MessageManager
$column = 2; $column = 2;
} }
$keyword = isset($extraParams['keyword']) && !empty($extraParams['keyword']) ? $extraParams['keyword'] : ''; $type = isset($extraParams['type']) && !empty($extraParams['type']) ? $extraParams['type'] : '';
$viewUrl = api_get_path(WEB_CODE_PATH).'messages/view_message.php';
if (isset($extraParams['view_url']) && !empty($extraParams['view_url'])) { if (empty($type)) {
$viewUrl = $extraParams['view_url']; return [];
} }
$keywordCondition = ''; $viewUrl = '';
if (!empty($keyword)) { switch ($type) {
$keyword = Database::escape_string($keyword); case self::MESSAGE_TYPE_OUTBOX:
$keywordCondition = " AND (title like '%$keyword%' OR content LIKE '%$keyword%') "; 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 (empty($whereConditions)) {
if (isset($extraParams['message_status']) && !empty($extraParams['message_status'])) { return [];
$messageStatus = $extraParams['message_status'];
} }
$messageStatus = array_map('intval', $messageStatus);
$messageStatusCondition = implode("','", $messageStatus);
$table = Database::get_main_table(TABLE_MESSAGE); $table = Database::get_main_table(TABLE_MESSAGE);
$sql = "SELECT $sql = "SELECT
@ -154,9 +192,7 @@ class MessageManager
user_sender_id user_sender_id
FROM $table FROM $table
WHERE WHERE
user_receiver_id = $userId AND $whereConditions
msg_status IN ('$messageStatusCondition')
$keywordCondition
ORDER BY col$column $direction ORDER BY col$column $direction
LIMIT $from, $numberOfItems"; LIMIT $from, $numberOfItems";
@ -184,7 +220,7 @@ class MessageManager
$userInfo = api_get_user_info($senderId); $userInfo = api_get_user_info($senderId);
$message[3] = ''; $message[3] = '';
if (!empty($senderId) && !empty($userInfo)) { 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']; $message[1] .= $userInfo['complete_name_with_username'];
if (in_array('reply', $actions)) { if (in_array('reply', $actions)) {
$message[3] = $message[3] =
@ -195,7 +231,7 @@ class MessageManager
); );
} }
} else { } 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'); $message[1] .= get_lang('UnknownUser');
if (in_array('reply', $actions)) { if (in_array('reply', $actions)) {
$message[3] = $message[3] =
@ -816,7 +852,10 @@ class MessageManager
} }
$sql = "SELECT * FROM $table $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); $rs = Database::query($sql);
if (Database::num_rows($rs) > 0) { if (Database::num_rows($rs) > 0) {
@ -851,9 +890,13 @@ class MessageManager
$user_sender_id = (int) $user_sender_id; $user_sender_id = (int) $user_sender_id;
$id = (int) $id; $id = (int) $id;
if (empty($id) || empty($user_sender_id)) {
return false;
}
$table = Database::get_main_table(TABLE_MESSAGE); $table = Database::get_main_table(TABLE_MESSAGE);
$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); $rs = Database::query($sql);
if (Database::num_rows($rs) > 0) { if (Database::num_rows($rs) > 0) {
@ -861,10 +904,9 @@ class MessageManager
self::delete_message_attachment_file($id, $user_sender_id); self::delete_message_attachment_file($id, $user_sender_id);
// delete message // delete message
$sql = "UPDATE $table $sql = "UPDATE $table
SET msg_status = ".MESSAGE_STATUS_DELETED." SET msg_status = '".MESSAGE_STATUS_DELETED."'
WHERE user_sender_id= $user_sender_id AND id= $id"; WHERE user_sender_id= $user_sender_id AND id= $id";
Database::query($sql); Database::query($sql);
return true; return true;
} }
@ -1263,30 +1305,34 @@ class MessageManager
/** /**
* display message box in the inbox. * display message box in the inbox.
* *
* @param int the message id * @param int $messageId
* @param string inbox or outbox strings are available * @param int $type
* *
* @todo replace numbers with letters in the $row array pff... * @todo replace numbers with letters in the $row array pff...
* *
* @return string html with the message content * @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; $messageId = (int) $messageId;
if (empty($messageId)) { if (empty($messageId) || empty($type)) {
return ''; return '';
} }
$currentUserId = api_get_user_id(); $currentUserId = api_get_user_id();
switch ($source) { $table = Database::get_main_table(TABLE_MESSAGE);
case 'outbox':
if (empty($type)) {
return '';
}
switch ($type) {
case self::MESSAGE_TYPE_OUTBOX:
$status = MESSAGE_STATUS_OUTBOX; $status = MESSAGE_STATUS_OUTBOX;
$userCondition = " user_sender_id = $currentUserId AND "; $userCondition = " user_sender_id = $currentUserId AND ";
break; break;
case 'inbox': case self::MESSAGE_TYPE_INBOX:
$status = MESSAGE_STATUS_NEW; $status = MESSAGE_STATUS_NEW;
$userCondition = " user_receiver_id = $currentUserId AND "; $userCondition = " user_receiver_id = $currentUserId AND ";
@ -1295,17 +1341,17 @@ class MessageManager
WHERE id = $messageId "; WHERE id = $messageId ";
Database::query($query); Database::query($query);
break; break;
case 'promoted_messages': case self::MESSAGE_TYPE_PROMOTED:
$status = MESSAGE_STATUS_PROMOTED; $status = MESSAGE_STATUS_PROMOTED;
$userCondition = " user_receiver_id = $currentUserId AND "; $userCondition = " user_receiver_id = $currentUserId AND ";
break; break;
} }
$query = "SELECT * FROM $table $query = "SELECT * FROM $table
WHERE WHERE
id = $messageId AND id = $messageId AND
$userCondition $userCondition
msg_status = $status"; msg_status = $status";
$result = Database::query($query); $result = Database::query($query);
$row = Database::fetch_array($result, 'ASSOC'); $row = Database::fetch_array($result, 'ASSOC');
@ -1316,10 +1362,7 @@ class MessageManager
$user_sender_id = $row['user_sender_id']; $user_sender_id = $row['user_sender_id'];
// get file attachments by message id // get file attachments by message id
$files_attachments = self::getAttachmentLinkList( $files_attachments = self::getAttachmentLinkList($messageId, $type);
$messageId,
$source
);
$row['content'] = str_replace('</br>', '<br />', $row['content']); $row['content'] = str_replace('</br>', '<br />', $row['content']);
$title = Security::remove_XSS($row['title'], STUDENT, true); $title = Security::remove_XSS($row['title'], STUDENT, true);
@ -1348,49 +1391,51 @@ class MessageManager
$message_content .= '<tr>'; $message_content .= '<tr>';
if (api_get_setting('allow_social_tool') === 'true') { if (api_get_setting('allow_social_tool') === 'true') {
$message_content .= '<div class="row">'; $message_content .= '<div class="row">';
if ($source === 'outbox') { $message_content .= '<div class="col-md-12">';
$message_content .= '<div class="col-md-12">'; $message_content .= '<ul class="list-message">';
$message_content .= '<ul class="list-message">';
$message_content .= '<li>'.$userImage.'</li>';
$message_content .= '<li>'.$name.'&nbsp;';
if (!empty($receiverUserInfo)) {
$message_content .= api_strtolower(
get_lang('To')
).'&nbsp;<b>'.$receiverUserInfo['complete_name_with_username'].'</b></li>';
} else {
$message_content .= api_strtolower(get_lang('To')).'&nbsp;<b>-</b></li>';
}
$message_content .= '<li>'.Display::dateToStringAgoAndLongDate($row['send_date']).'</li>'; if (!empty($user_sender_id)) {
$message_content .= '</ul>'; $message_content .= '<li>'.$userImage.'</li>';
$message_content .= '</div>'; $message_content .= '<li>';
$message_content .= Display::url(
$name,
api_get_path(WEB_PATH).'main/social/profile.php?u='.$user_sender_id
);
} else { } else {
$message_content .= '<div class="col-md-12">'; $message_content .= '<li>'.$name;
$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;
}
if ($source === 'inbox') { switch ($type) {
case self::MESSAGE_TYPE_INBOX:
//$message_content .= api_strtolower(get_lang('To')).'&nbsp;<b>-</b></li>';
$message_content .= '&nbsp;'.api_strtolower(get_lang('To')).'&nbsp;'.get_lang('Me'); $message_content .= '&nbsp;'.api_strtolower(get_lang('To')).'&nbsp;'.get_lang('Me');
} break;
$message_content .= '<li>'.Display::dateToStringAgoAndLongDate($row['send_date']).'</li>'; case self::MESSAGE_TYPE_OUTBOX:
$message_content .= '</ul>'; if (!empty($receiverUserInfo)) {
$message_content .= '</div>'; $message_content .= '&nbsp;'.api_strtolower(
get_lang('To')
).'&nbsp;<b>'.$receiverUserInfo['complete_name_with_username'].'</b></li>';
}
break;
case self::MESSAGE_TYPE_PROMOTED:
break;
} }
$message_content .= '&nbsp;<li>'.Display::dateToStringAgoAndLongDate($row['send_date']).'</li>';
$message_content .= '</ul>';
$message_content .= '</div>';
$message_content .= '</div>'; $message_content .= '</div>';
} else { } else {
if ($source === 'outbox') { switch ($type) {
$message_content .= get_lang('From').':&nbsp;'.$name.'</b> '.api_strtolower(get_lang('To')).' <b>'. case self::MESSAGE_TYPE_INBOX:
$receiverUserInfo['complete_name_with_username'].'</b>'; $message_content .= get_lang('From').':&nbsp;'.$name.'</b> '.api_strtolower(get_lang('To')).' <b>'.
} else { get_lang('Me').'</b>';
$message_content .= get_lang('From').':&nbsp;'.$name.'</b> '.api_strtolower(get_lang('To')).' <b>'. break;
get_lang('Me').'</b>'; case self::MESSAGE_TYPE_OUTBOX:
$message_content .= get_lang('From').':&nbsp;'.$name.'</b> '.api_strtolower(get_lang('To')).' <b>'.
$receiverUserInfo['complete_name_with_username'].'</b>';
break;
} }
} }
@ -1408,19 +1453,21 @@ class MessageManager
$social_link = 'f=social'; $social_link = 'f=social';
} }
if ($source == 'outbox') { switch ($type) {
$message_content .= '<a href="outbox.php?'.$social_link.'">'. case self::MESSAGE_TYPE_OUTBOX:
Display::return_icon('back.png', get_lang('ReturnToOutbox')).'</a> &nbsp'; $message_content .= '<a href="outbox.php?'.$social_link.'">'.
} elseif ($source === 'inbox') { Display::return_icon('back.png', get_lang('ReturnToOutbox')).'</a> &nbsp';
$message_content .= '<a href="inbox.php?'.$social_link.'">'. $message_content .= '<a href="outbox.php?action=deleteone&id='.$messageId.'&'.$social_link.'" >'.
Display::return_icon('back.png', get_lang('ReturnToInbox')).'</a> &nbsp'; Display::return_icon('delete.png', get_lang('DeleteMessage')).'</a>&nbsp';
$message_content .= '<a href="new_message.php?re_id='.$messageId.'&'.$social_link.'">'. break;
Display::return_icon('message_reply.png', get_lang('ReplyToMessage')).'</a> &nbsp'; case self::MESSAGE_TYPE_INBOX:
} $message_content .= '<a href="inbox.php?'.$social_link.'">'.
Display::return_icon('back.png', get_lang('ReturnToInbox')).'</a> &nbsp';
if (in_array($source, ['inbox', 'outbox'])) { $message_content .= '<a href="new_message.php?re_id='.$messageId.'&'.$social_link.'">'.
$message_content .= '<a href="inbox.php?action=deleteone&id='.$messageId.'&'.$social_link.'" >'. Display::return_icon('message_reply.png', get_lang('ReplyToMessage')).'</a> &nbsp';
Display::return_icon('delete.png', get_lang('DeleteMessage')).'</a>&nbsp'; $message_content .= '<a href="inbox.php?action=deleteone&id='.$messageId.'&'.$social_link.'" >'.
Display::return_icon('delete.png', get_lang('DeleteMessage')).'</a>&nbsp';
break;
} }
$message_content .= '</div></td> $message_content .= '</div></td>
@ -1621,7 +1668,7 @@ class MessageManager
$items_page_nr = null; $items_page_nr = null;
$user_sender_info = api_get_user_info($main_message['user_sender_id']); $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']; $name = $user_sender_info['complete_name'];
$topic_page_nr = isset($_GET['topics_page_nr']) ? (int) $_GET['topics_page_nr'] : null; $topic_page_nr = isset($_GET['topics_page_nr']) ? (int) $_GET['topics_page_nr'] : null;
@ -1763,7 +1810,7 @@ class MessageManager
$links .= '<div class="pull-right">'; $links .= '<div class="pull-right">';
$html_items = ''; $html_items = '';
$user_sender_info = api_get_user_info($topic['user_sender_id']); $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']; $name = $user_sender_info['complete_name'];
$links .= '<div class="btn-group btn-group-sm">'; $links .= '<div class="btn-group btn-group-sm">';
@ -1994,12 +2041,12 @@ class MessageManager
/** /**
* Get array of links (download) for message attachment files. * Get array of links (download) for message attachment files.
* *
* @param int $messageId * @param int $messageId
* @param string $type message list (inbox/outbox) * @param int $type
* *
* @return array * @return array
*/ */
public static function getAttachmentLinkList($messageId, $type = '') public static function getAttachmentLinkList($messageId, $type)
{ {
$files = self::getAttachmentList($messageId); $files = self::getAttachmentList($messageId);
// get file attachments by message id // get file attachments by message id
@ -2017,10 +2064,9 @@ class MessageManager
$comment = !empty($comment) ? '&nbsp;-&nbsp;<i>'.$comment.'</i>' : ''; $comment = !empty($comment) ? '&nbsp;-&nbsp;<i>'.$comment.'</i>' : '';
$attachmentLine = $attachIcon.'&nbsp;'.$link.'&nbsp;('.$size.')'.$comment; $attachmentLine = $attachIcon.'&nbsp;'.$link.'&nbsp;('.$size.')'.$comment;
if ($row_file['comment'] == 'audio_message') { if ($row_file['comment'] === 'audio_message') {
$attachmentLine = '<audio src="'.$archiveURL.$archiveFile.'"/>'; $attachmentLine = '<audio src="'.$archiveURL.$archiveFile.'"/>';
} }
$list[] = $attachmentLine; $list[] = $attachmentLine;
} }
} }
@ -2089,23 +2135,72 @@ class MessageManager
} }
/** /**
* @param string $statusList * @param string $type
* @param array $keyword * @param string $keyword
* @param array $actions * @param array $actions
* @param string $viewUrl
* *
* @return string * @return string
*/ */
public static function getMessageGrid($statusList, $keyword, $actions = [], $viewUrl = '') public static function getMessageGrid($type, $keyword, $actions = [])
{ {
if (empty($statusList)) { $html = '';
return ''; // 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 = get_lang('SelectedMessagesDeleted');
$success_read = get_lang('SelectedMessagesRead'); $success_read = get_lang('SelectedMessagesRead');
$success_unread = get_lang('SelectedMessagesUnRead'); $success_unread = get_lang('SelectedMessagesUnRead');
$currentUserId = api_get_user_id(); $currentUserId = api_get_user_id();
$html = '';
if (isset($_REQUEST['action'])) { if (isset($_REQUEST['action'])) {
switch ($_REQUEST['action']) { switch ($_REQUEST['action']) {
@ -2119,11 +2214,11 @@ class MessageManager
); );
} }
} }
$html .= Display::return_message( Display::addFlash(Display::return_message(
api_xml_http_response_encode($success_unread), $success_unread,
'normal', 'normal',
false false
); ));
break; break;
case 'mark_as_read': case 'mark_as_read':
if (is_array($_POST['id'])) { if (is_array($_POST['id'])) {
@ -2135,75 +2230,39 @@ class MessageManager
); );
} }
} }
$html .= Display::return_message( Display::addFlash(Display::return_message(
api_xml_http_response_encode($success_read), $success_read,
'normal', 'normal',
false false
); ));
break; break;
case 'delete': case 'delete':
foreach ($_POST['id'] as $index => $messageId) { foreach ($_POST['id'] as $index => $messageId) {
self::delete_message_by_user_receiver($currentUserId, $messageId); self::delete_message_by_user_receiver($currentUserId, $messageId);
} }
$html .= Display::return_message( Display::addFlash(Display::return_message(
api_xml_http_response_encode($success), $success,
'normal', 'normal',
false false
); ));
break; break;
case 'deleteone': case 'deleteone':
self::delete_message_by_user_receiver($currentUserId, $_GET['id']); $result = self::delete_message_by_user_receiver($currentUserId, $_GET['id']);
$html .= Display::return_message( if ($result) {
api_xml_http_response_encode($success), Display::addFlash(
'confirmation', Display::return_message(
false $success,
); 'confirmation',
false
)
);
}
break; break;
} }
} }
// display sortable table with messages of the current user $actions = ['reply', 'mark_as_unread', 'mark_as_read', 'forward', 'delete'];
$table = new SortableTable( $html = self::getMessageGrid(self::MESSAGE_TYPE_INBOX, $keyword, $actions);
'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();
return $html; return $html;
} }
@ -2213,10 +2272,36 @@ class MessageManager
* *
* @return string * @return string
*/ */
public static function inboxDisplay($keyword = '') public static function getPromotedMessagesGrid($keyword)
{ {
$actions = ['reply', 'mark_as_unread', 'mark_as_read', 'forward', 'delete']; $actions = ['delete'];
$html = self::getMessageGrid([MESSAGE_STATUS_NEW, MESSAGE_STATUS_UNREAD], $keyword, $actions); $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;
}
}
$html = self::getMessageGrid(self::MESSAGE_TYPE_PROMOTED, $keyword, $actions);
return $html; return $html;
} }
@ -2226,12 +2311,36 @@ class MessageManager
* *
* @return string * @return string
*/ */
public static function getPromotedMessagesGrid($keyword = '') public static function outBoxDisplay($keyword)
{ {
//$actions = ['edit', 'delete'];
$actions = ['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;
}
}
$html = self::getMessageGrid(self::MESSAGE_TYPE_OUTBOX, $keyword, $actions);
return $html; return $html;
} }
@ -2274,13 +2383,13 @@ class MessageManager
$table = new SortableTable( $table = new SortableTable(
'message_outbox', 'message_outbox',
['MessageManager', 'getNumberOfMessages'], ['MessageManager', 'getNumberOfMessages'],
['MessageManager', 'get_message_data_sent'], ['MessageManager', 'getMessageData'],
2, 2,
20, 20,
'DESC' 'DESC'
); );
$table->setDataFunctionParams( $table->setDataFunctionParams(
['keyword' => $keyword, 'message_status' => [MESSAGE_STATUS_OUTBOX]] ['keyword' => $keyword, 'type' => self::MESSAGE_TYPE_OUTBOX]
); );
$table->set_header(0, '', false, ['style' => 'width:15px;']); $table->set_header(0, '', false, ['style' => 'width:15px;']);

@ -917,7 +917,7 @@ class SocialManager extends UserManager
]; ];
// get count unread message and total invitations // get count unread message and total invitations
$count_unread_message = MessageManager::getNumberOfMessages(['message_status' => [MESSAGE_STATUS_UNREAD]]); $count_unread_message = MessageManager::getCountNewMessagesFromDB(api_get_user_id());
$count_unread_message = !empty($count_unread_message) ? Display::badge($count_unread_message) : null; $count_unread_message = !empty($count_unread_message) ? Display::badge($count_unread_message) : null;
$number_of_new_messages_of_friend = self::get_message_number_invitation_by_user_id(api_get_user_id()); $number_of_new_messages_of_friend = self::get_message_number_invitation_by_user_id(api_get_user_id());
@ -1950,7 +1950,7 @@ class SocialManager extends UserManager
} }
} }
} else { } else {
$list = MessageManager::getAttachmentLinkList($messageId); $list = MessageManager::getAttachmentLinkList($messageId, 0);
} }
return $list; return $list;

@ -1012,7 +1012,6 @@ class SortableTable extends HTML_Table
$this->getDataFunctionParams() $this->getDataFunctionParams()
); );
} }
return $this->total_number_of_items; return $this->total_number_of_items;
} }

@ -14,6 +14,7 @@ session_cache_limiter('public');
require_once __DIR__.'/../inc/global.inc.php'; require_once __DIR__.'/../inc/global.inc.php';
$file_url = isset($_GET['file']) ? $_GET['file'] : ''; $file_url = isset($_GET['file']) ? $_GET['file'] : '';
$type = isset($_GET['type']) ? $_GET['type'] : '';
if (empty($file_url)) { if (empty($file_url)) {
api_not_allowed(); api_not_allowed();
@ -52,13 +53,13 @@ $current_uid = api_get_user_id();
// get message user id for inbox/outbox // get message user id for inbox/outbox
$message_uid = ''; $message_uid = '';
$message_type = ['inbox', 'outbox']; switch ($type) {
if (in_array($_GET['type'], $message_type)) { case MessageManager::MESSAGE_TYPE_INBOX:
if ($_GET['type'] == 'inbox') {
$message_uid = $row_users['user_receiver_id']; $message_uid = $row_users['user_receiver_id'];
} else { break;
case MessageManager::MESSAGE_TYPE_OUTBOX:
$message_uid = $row_users['user_sender_id']; $message_uid = $row_users['user_sender_id'];
} break;
} }
// allow to the correct user for download this file // allow to the correct user for download this file

@ -23,74 +23,6 @@ Event::registerLog($logInfo);
$allowSocial = api_get_setting('allow_social_tool') == 'true'; $allowSocial = api_get_setting('allow_social_tool') == 'true';
$allowMessage = api_get_setting('allow_message_tool') == 'true'; $allowMessage = api_get_setting('allow_message_tool') == 'true';
if (isset($_GET['messages_page_nr'])) {
if ($allowSocial && $allowMessage) {
header('Location:inbox.php');
exit;
}
}
$nameTools = get_lang('Messages');
$show_message = null;
if (isset($_GET['form_reply']) || isset($_GET['form_delete'])) {
$info_reply = [];
$info_delete = [];
if (isset($_GET['form_reply'])) {
//allow to insert messages
$info_reply = explode(base64_encode('&%ff..x'), $_GET['form_reply']);
$count_reply = count($info_reply);
$button_sent = urldecode($info_reply[4]);
}
if (isset($_GET['form_delete'])) {
//allow to delete messages
$info_delete = explode(',', $_GET['form_delete']);
$count_delete = (count($info_delete) - 1);
}
if (isset($button_sent)) {
$title = urldecode($info_reply[0]);
$content = str_replace("\\", '', urldecode($info_reply[1]));
$user_reply = $info_reply[2];
$user_email_base = str_replace(')', '(', $info_reply[5]);
$user_email_prepare = explode('(', $user_email_base);
if (count($user_email_prepare) == 1) {
$user_email = trim($user_email_prepare[0]);
} elseif (count($user_email_prepare) == 3) {
$user_email = trim($user_email_prepare[1]);
}
$user_id_by_email = MessageManager::get_user_id_by_email($user_email);
if ($info_reply[6] == 'save_form') {
$user_id_by_email = $info_reply[2];
}
if (isset($user_reply) && !is_null($user_id_by_email) && strlen($info_reply[0]) > 0) {
MessageManager::send_message($user_id_by_email, $title, $content);
$show_message .= MessageManager::return_message($user_id_by_email, 'confirmation');
$social_right_content .= MessageManager::inboxDisplay();
exit;
} elseif (is_null($user_id_by_email)) {
$message_box = get_lang('ErrorSendingMessage');
$show_message .= Display::return_message(api_xml_http_response_encode($message_box), 'error');
$social_right_content .= MessageManager::inboxDisplay();
exit;
}
} elseif (trim($info_delete[0]) == 'delete') {
for ($i = 1; $i <= $count_delete; $i++) {
MessageManager::delete_message_by_user_receiver(
api_get_user_id(),
$info_delete[$i]
);
}
$message_box = get_lang('SelectedMessagesDeleted');
$show_message .= Display::return_message(api_xml_http_response_encode($message_box));
$social_right_content .= MessageManager::inboxDisplay();
exit;
}
}
if ($allowSocial) { if ($allowSocial) {
$this_section = SECTION_SOCIAL; $this_section = SECTION_SOCIAL;
$interbreadcrumb[] = [ $interbreadcrumb[] = [
@ -147,21 +79,7 @@ if ($allowSocial) {
$social_right_content .= Display::toolbarAction('toolbar', [$actionsLeft, $actionsRight]); $social_right_content .= Display::toolbarAction('toolbar', [$actionsLeft, $actionsRight]);
} }
if (!isset($_GET['del_msg'])) { $social_right_content .= MessageManager::inboxDisplay($keyword);
$social_right_content .= MessageManager::inboxDisplay($keyword);
} else {
$num_msg = (int) $_POST['total'];
for ($i = 0; $i < $num_msg; $i++) {
if ($_POST[$i]) {
// The user_id was necessary to delete a message??
$show_message .= MessageManager::delete_message_by_user_receiver(
api_get_user_id(),
$_POST['_'.$i]
);
}
}
$social_right_content .= MessageManager::inboxDisplay();
}
$tpl = new Template(null); $tpl = new Template(null);

@ -197,7 +197,7 @@ function manageForm($default, $select_from_user_list = null, $sent_to = '', $tpl
if (isset($_GET['forward_id'])) { if (isset($_GET['forward_id'])) {
$forwardId = (int) $_GET['forward_id']; $forwardId = (int) $_GET['forward_id'];
$message_reply_info = MessageManager::get_message_by_id($forwardId); $message_reply_info = MessageManager::get_message_by_id($forwardId);
$attachments = MessageManager::getAttachmentLinkList($forwardId); $attachments = MessageManager::getAttachmentLinkList($forwardId, MessageManager::MESSAGE_TYPE_INBOX);
if (!empty($attachments)) { if (!empty($attachments)) {
$fileListToString = !empty($attachments) ? implode('<br />', $attachments) : ''; $fileListToString = !empty($attachments) ? implode('<br />', $attachments) : '';
$form->addLabel('', $fileListToString); $form->addLabel('', $fileListToString);

@ -55,11 +55,6 @@ if ($allowMessage) {
Display::return_icon('outbox.png', get_lang('Outbox')).'</a>'; Display::return_icon('outbox.png', get_lang('Outbox')).'</a>';
} }
$action = null;
if (isset($_REQUEST['action'])) {
$action = $_REQUEST['action'];
}
$keyword = ''; $keyword = '';
$social_right_content = ''; $social_right_content = '';
if ($allowSocial) { if ($allowSocial) {
@ -79,32 +74,8 @@ if ($allowSocial) {
[$actionsLeft, $actionsRight] [$actionsLeft, $actionsRight]
); );
} }
//MAIN CONTENT
if ($action == 'delete') { $social_right_content .= MessageManager::outBoxDisplay($keyword);
$delete_list_id = [];
if (isset($_POST['out'])) {
$delete_list_id = $_POST['out'];
}
if (isset($_POST['id'])) {
$delete_list_id = $_POST['id'];
}
for ($i = 0; $i < count($delete_list_id); $i++) {
MessageManager::delete_message_by_user_sender(
api_get_user_id(),
$delete_list_id[$i]
);
}
MessageManager::outbox_display($keyword);
header("Location: ".api_get_self());
exit;
} elseif ($action == 'deleteone') {
MessageManager::delete_message_by_user_sender(api_get_user_id(), $_GET['id']);
MessageManager::outbox_display($keyword);
header("Location: ".api_get_self());
exit;
} else {
$social_right_content = MessageManager::outbox_display($keyword);
}
$tpl = new Template(get_lang('Outbox')); $tpl = new Template(get_lang('Outbox'));
// Block Social Avatar // Block Social Avatar

@ -8,12 +8,19 @@ $cidReset = true;
require_once __DIR__.'/../inc/global.inc.php'; require_once __DIR__.'/../inc/global.inc.php';
api_block_anonymous_users(); api_block_anonymous_users();
if (api_get_setting('allow_message_tool') != 'true') { $allowSocial = api_get_setting('allow_social_tool') === 'true';
$allowMessage = api_get_setting('allow_message_tool') === 'true';
if (!$allowMessage) {
api_not_allowed(true);
}
$messageId = isset($_GET['id']) ? (int) $_GET['id'] : 0;
if (empty($messageId)) {
api_not_allowed(true); api_not_allowed(true);
} }
$allowSocial = api_get_setting('allow_social_tool') === 'true';
$allowMessage = api_get_setting('allow_message_tool') === 'true';
if ($allowSocial) { if ($allowSocial) {
$this_section = SECTION_SOCIAL; $this_section = SECTION_SOCIAL;
@ -25,7 +32,7 @@ if ($allowSocial) {
$interbreadcrumb[] = ['url' => 'inbox.php', 'name' => get_lang('Messages')]; $interbreadcrumb[] = ['url' => 'inbox.php', 'name' => get_lang('Messages')];
$social_right_content = '<div class="actions">'; $social_right_content = '<div class="actions">';
if (api_get_setting('allow_message_tool') === 'true') { if ($allowMessage === 'true') {
$social_right_content .= '<a href="'.api_get_path(WEB_PATH).'main/messages/new_message.php">'. $social_right_content .= '<a href="'.api_get_path(WEB_PATH).'main/messages/new_message.php">'.
Display::return_icon('new-message.png', get_lang('ComposeMessage')).'</a>'; Display::return_icon('new-message.png', get_lang('ComposeMessage')).'</a>';
$social_right_content .= '<a href="'.api_get_path(WEB_PATH).'main/messages/inbox.php">'. $social_right_content .= '<a href="'.api_get_path(WEB_PATH).'main/messages/inbox.php">'.
@ -34,22 +41,18 @@ if (api_get_setting('allow_message_tool') === 'true') {
Display::return_icon('outbox.png', get_lang('Outbox')).'</a>'; Display::return_icon('outbox.png', get_lang('Outbox')).'</a>';
} }
$social_right_content .= '</div>'; $social_right_content .= '</div>';
$type = isset($_GET['type']) ? (int) $_GET['type'] : MessageManager::MESSAGE_TYPE_INBOX;
if (empty($_GET['id'])) { $show_menu = 'messages_inbox';
$messageId = $_GET['id_send']; if ($type === MessageManager::MESSAGE_TYPE_OUTBOX) {
$source = 'outbox';
$show_menu = 'messages_outbox'; $show_menu = 'messages_outbox';
} else {
$messageId = $_GET['id'];
$source = 'inbox';
$show_menu = 'messages_inbox';
} }
$message = ''; $message = '';
$logInfo = [ $logInfo = [
'tool' => 'Messages', 'tool' => 'Messages',
'action' => $source, 'tool_id' => $messageId,
'action' => 'view-message',
'action_details' => 'view-message', 'action_details' => 'view-message',
]; ];
Event::registerLog($logInfo); Event::registerLog($logInfo);
@ -60,7 +63,7 @@ if (api_get_setting('allow_social_tool') === 'true') {
$social_menu_block = SocialManager::show_social_menu($show_menu); $social_menu_block = SocialManager::show_social_menu($show_menu);
} }
// MAIN CONTENT // MAIN CONTENT
$message .= MessageManager::showMessageBox($messageId, $source); $message .= MessageManager::showMessageBox($messageId, $type);
if (!empty($message)) { if (!empty($message)) {
$social_right_content .= $message; $social_right_content .= $message;

Loading…
Cancel
Save