Merge with 1.11.x

pull/3006/head
Julio Montoya 6 years ago
parent 568d8b5eb5
commit 72684cd210
  1. 7
      main/exercise/overview.php
  2. 2
      main/inc/ajax/message.ajax.php
  3. 15
      main/inc/lib/banner.lib.php
  4. 587
      main/inc/lib/message.lib.php
  5. 12
      main/inc/lib/notification.lib.php
  6. 19
      main/inc/lib/social.lib.php
  7. 11
      main/messages/download.php
  8. 84
      main/messages/inbox.php
  9. 2
      main/messages/new_message.php
  10. 33
      main/messages/outbox.php
  11. 30
      main/messages/view_message.php
  12. 2
      main/mySpace/access_details_session.php
  13. 42
      main/social/promoted_messages.php
  14. 22
      main/social/view_promoted_message.php

@ -388,10 +388,11 @@ if (!empty($attempts)) {
$table_content = $table->toHtml();
}
if ($objExercise->selectAttempts()) {
$attempt_message = get_lang('Attempts').' '.$counter.' / '.$objExercise->selectAttempts();
$selectAttempts = $objExercise->selectAttempts();
if ($selectAttempts) {
$attempt_message = get_lang('Attempts').' '.$counter.' / '.$selectAttempts;
if ($counter == $objExercise->selectAttempts()) {
if ($counter == $selectAttempts) {
$attempt_message = Display::return_message($attempt_message, 'error');
} else {
$attempt_message = Display::return_message($attempt_message, 'info');

@ -62,7 +62,7 @@ switch ($action) {
$count_unread_message = 0;
if (api_get_setting('allow_message_tool') === 'true') {
// get count unread message and total invitations
$count_unread_message = MessageManager::getNumberOfMessages(['message_status' => [MESSAGE_STATUS_UNREAD]]);
$count_unread_message = MessageManager::getCountNewMessagesFromDB($userId);
}
if (api_get_setting('allow_social_tool') === 'true') {

@ -86,6 +86,21 @@ function accessToWhoIsOnline()
$access = true;
}
if ($access === true) {
$profileList = api_get_configuration_value('allow_online_users_by_status');
if (!empty($profileList) && isset($profileList['status'])) {
$userInfo = api_get_user_info();
if ($userInfo['is_admin']) {
$userInfo['status'] = PLATFORM_ADMIN;
}
$profileList = $profileList['status'];
$access = false;
if (in_array($userInfo['status'], $profileList)) {
$access = true;
}
}
}
return $access;
}

@ -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.'&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 .= '<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')).'&nbsp;<b>-</b></li>';
$message_content .= '&nbsp;'.api_strtolower(get_lang('To')).'&nbsp;'.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 .= '&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>';
} else {
if ($source === 'outbox') {
$message_content .= get_lang('From').':&nbsp;'.$name.'</b> '.api_strtolower(get_lang('To')).' <b>'.
$receiverUserInfo['complete_name_with_username'].'</b>';
} else {
$message_content .= get_lang('From').':&nbsp;'.$name.'</b> '.api_strtolower(get_lang('To')).' <b>'.
get_lang('Me').'</b>';
switch ($type) {
case self::MESSAGE_TYPE_INBOX:
$message_content .= get_lang('From').':&nbsp;'.$name.'</b> '.api_strtolower(get_lang('To')).' <b>'.
get_lang('Me').'</b>';
break;
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;
}
}
@ -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> &nbsp';
} elseif ($source === 'inbox') {
$message_content .= '<a href="inbox.php?'.$social_link.'">'.
Display::return_icon('back.png', get_lang('ReturnToInbox')).'</a> &nbsp';
$message_content .= '<a href="new_message.php?re_id='.$messageId.'&'.$social_link.'">'.
Display::return_icon('message_reply.png', get_lang('ReplyToMessage')).'</a> &nbsp';
}
$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>&nbsp';
switch ($type) {
case self::MESSAGE_TYPE_OUTBOX:
$message_content .= '<a href="outbox.php?'.$social_link.'">'.
Display::return_icon('back.png', get_lang('ReturnToOutbox')).'</a> &nbsp';
$message_content .= '<a href="outbox.php?action=deleteone&id='.$messageId.'&'.$social_link.'" >'.
Display::return_icon('delete.png', get_lang('DeleteMessage')).'</a>&nbsp';
break;
case self::MESSAGE_TYPE_INBOX:
$message_content .= '<a href="inbox.php?'.$social_link.'">'.
Display::return_icon('back.png', get_lang('ReturnToInbox')).'</a> &nbsp';
$message_content .= '<a href="new_message.php?re_id='.$messageId.'&'.$social_link.'">'.
Display::return_icon('message_reply.png', get_lang('ReplyToMessage')).'</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>
@ -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) ? '&nbsp;-&nbsp;<i>'.$comment.'</i>' : '';
$attachmentLine = $attachIcon.'&nbsp;'.$link.'&nbsp;('.$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'];
}
}

@ -489,9 +489,11 @@ class Notification extends Model
return false;
}
$content = str_replace(['<br>', '<br/>', '<br />'], "\n", $content);
$content = strip_tags($content);
$content = html_entity_decode($content, ENT_QUOTES);
$content = explode("\n", $content);
$content = array_map('trim', $content);
$content = array_filter($content);
$content = implode(PHP_EOL, $content);
$gcmRegistrationIds = [];
foreach ($userIds as $userId) {
@ -523,6 +525,12 @@ class Notification extends Model
'title' => $title,
'message' => $content,
],
'notification' => [
'title' => $title,
'body' => $content,
],
'collapse_key' => get_lang('Messages'),
'sound' => true,
]);
$ch = curl_init();

@ -1,6 +1,8 @@
<?php
/* For licensing terms, see /license.txt */
use Chamilo\CourseBundle\Entity\CForumPost;
use Chamilo\CourseBundle\Entity\CForumThread;
use ChamiloSession as Session;
use Zend\Feed\Reader\Entry\Rss;
use Zend\Feed\Reader\Reader;
@ -915,7 +917,7 @@ class SocialManager extends UserManager
];
// 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;
$number_of_new_messages_of_friend = self::get_message_number_invitation_by_user_id(api_get_user_id());
@ -1834,14 +1836,14 @@ class SocialManager extends UserManager
}
$formattedList .= '</div>';
$formattedList .= '<div class="mediapost-form">';
$formattedList .= '<div class="mediapost-form row">';
$formattedList .= '<form class="form-horizontal" id="form_comment_'.$messageId.'" name="post_comment" method="POST">
<div class="col-sm-9">
<label for="comment" class="hide">'.get_lang('SocialWriteNewComment').'</label>
<input type="hidden" name = "messageId" value="'.$messageId.'" />
<textarea rows="3" class="form-control" placeholder="'.get_lang('SocialWriteNewComment').'" name="comment" rows="1" ></textarea>
</div>
<div class="col-sm-3">
<div class="col-sm-3 pull-right">
<a onclick="submitComment('.$messageId.');" href="javascript:void(0);" name="social_wall_new_msg_submit" class="btn btn-default btn-post">
<em class="fa fa-pencil"></em> '.get_lang('Post').'
</a>
@ -1948,7 +1950,7 @@ class SocialManager extends UserManager
}
}
} else {
$list = MessageManager::getAttachmentLinkList($messageId);
$list = MessageManager::getAttachmentLinkList($messageId, 0);
}
return $list;
@ -2448,15 +2450,15 @@ class SocialManager extends UserManager
null,
[
'placeholder' => $socialWallPlaceholder,
'cols-size' => [1, 10, 1],
'cols-size' => [1, 12, 1],
'aria-label' => $socialWallPlaceholder,
]
);
$form->addHtml('<div class="form-group">');
$form->addHtml('<div class="col-sm-4 col-md-offset-1">');
$form->addHtml('<div class="col-sm-6">');
$form->addFile('picture', get_lang('UploadFile'), ['custom' => true]);
$form->addHtml('</div>');
$form->addHtml('<div class="col-sm-6">');
$form->addHtml('<div class="col-sm-6 "><div class="pull-right">');
$form->addButtonSend(
get_lang('Post'),
'wall_post_button',
@ -2466,9 +2468,8 @@ class SocialManager extends UserManager
'custom' => true,
]
);
$form->addHtml('</div></div>');
$form->addHtml('</div>');
$form->addHtml('</div>');
$form->addHidden('url_content', '');
$html = Display::panel($form->returnForm(), get_lang('SocialWall'));

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

@ -23,74 +23,6 @@ Event::registerLog($logInfo);
$allowSocial = api_get_setting('allow_social_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) {
$this_section = SECTION_SOCIAL;
$interbreadcrumb[] = [
@ -147,21 +79,7 @@ if ($allowSocial) {
$social_right_content .= Display::toolbarAction('toolbar', [$actionsLeft, $actionsRight]);
}
if (!isset($_GET['del_msg'])) {
$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();
}
$social_right_content .= MessageManager::inboxDisplay($keyword);
$tpl = new Template(null);

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

@ -55,11 +55,6 @@ if ($allowMessage) {
Display::return_icon('outbox.png', get_lang('Outbox')).'</a>';
}
$action = null;
if (isset($_REQUEST['action'])) {
$action = $_REQUEST['action'];
}
$keyword = '';
$social_right_content = '';
if ($allowSocial) {
@ -79,32 +74,8 @@ if ($allowSocial) {
[$actionsLeft, $actionsRight]
);
}
//MAIN CONTENT
if ($action == 'delete') {
$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]
);
}
$delete_list_id = [];
$social_right_content .= MessageManager::outbox_display($keyword);
} elseif ($action == 'deleteone') {
$delete_list_id = [];
$id = Security::remove_XSS($_GET['id']);
MessageManager::delete_message_by_user_sender(api_get_user_id(), $id);
$delete_list_id = [];
$social_right_content .= MessageManager::outbox_display($keyword);
} else {
$social_right_content .= MessageManager::outbox_display($keyword);
}
$social_right_content .= MessageManager::outBoxDisplay($keyword);
$tpl = new Template(get_lang('Outbox'));
// Block Social Avatar

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

@ -244,7 +244,7 @@ if ($form->validate()) {
}
}
$table = new HTML_Table(['class' => 'data_table']);
$table = new HTML_Table(['class' => 'data_table_pdf']);
$headers = [
get_lang('MinStartDate'),
get_lang('MaxEndDate'),

@ -17,31 +17,6 @@ $logInfo = [
];
Event::registerLog($logInfo);
$nameTools = get_lang('Messages');
$show_message = null;
if (isset($_GET['form_reply']) || isset($_GET['form_delete'])) {
$info_reply = [];
$info_delete = [];
if (isset($_GET['form_delete'])) {
//allow to delete messages
$info_delete = explode(',', $_GET['form_delete']);
$count_delete = (count($info_delete) - 1);
}
if (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;
}
}
$this_section = SECTION_SOCIAL;
$interbreadcrumb[] = [
'url' => api_get_path(WEB_CODE_PATH).'social/home.php',
@ -68,22 +43,7 @@ if ($form->validate()) {
}
$actionsRight = $form->returnForm();
$social_right_content .= Display::toolbarAction('toolbar', [$actionsLeft, $actionsRight]);
if (!isset($_GET['del_msg'])) {
$social_right_content .= MessageManager::getPromotedMessagesGrid($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::getPromotedMessagesGrid();
}
$social_right_content .= MessageManager::getPromotedMessagesGrid($keyword);
$tpl = new Template(null);
// Block Social Avatar

@ -1,9 +1,6 @@
<?php
/* For licensing terms, see /license.txt */
/**
* @package chamilo.messages
*/
$cidReset = true;
require_once __DIR__.'/../inc/global.inc.php';
api_block_anonymous_users();
@ -17,26 +14,17 @@ $interbreadcrumb[] = ['url' => api_get_path(WEB_PATH).'main/social/home.php', 'n
$interbreadcrumb[] = ['url' => 'promoted_messages.php', 'name' => get_lang('PromotedMessages')];
$social_right_content = '';
if (empty($_GET['id'])) {
$messageId = $_GET['id_send'];
$source = 'outbox';
$show_menu = 'messages_outbox';
} else {
$messageId = $_GET['id'];
$source = 'inbox';
$show_menu = 'messages_inbox';
}
$messageId = $_GET['id'];
$message = '';
$logInfo = [
'tool' => 'Messages',
'action' => $source,
'action' => 'promoted_messages',
'action_details' => 'view-message',
];
Event::registerLog($logInfo);
$social_menu_block = SocialManager::show_social_menu($show_menu);
$message .= MessageManager::showMessageBox($messageId, 'promoted_messages');
$social_menu_block = SocialManager::show_social_menu('inbox');
$message .= MessageManager::showMessageBox($messageId, MessageManager::MESSAGE_TYPE_PROMOTED);
if (!empty($message)) {
$social_right_content .= $message;
@ -45,7 +33,7 @@ if (!empty($message)) {
}
$tpl = new Template(get_lang('View'));
// Block Social Avatar
SocialManager::setSocialUserBlock($tpl, api_get_user_id(), $show_menu);
SocialManager::setSocialUserBlock($tpl, api_get_user_id(), 'promoted_messages');
$tpl->assign('social_menu_block', $social_menu_block);
$tpl->assign('social_right_content', $social_right_content);

Loading…
Cancel
Save