mirror of
https://github.com/pandorafms/pandorafms.git
synced 2025-07-28 16:24:54 +02:00
wip messages
Former-commit-id: 7852ce90b3f2681a0134a651812341f7fac00c53
This commit is contained in:
parent
406c062a3c
commit
3f81e60df2
@ -73,7 +73,7 @@ function message_set_targets(
|
|||||||
if (is_array($groups)) {
|
if (is_array($groups)) {
|
||||||
$values = [];
|
$values = [];
|
||||||
foreach ($groups as $group) {
|
foreach ($groups as $group) {
|
||||||
if (empty($group)) {
|
if ($group != 0 && empty($group)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -162,8 +162,43 @@ function messages_create_message(
|
|||||||
*/
|
*/
|
||||||
function messages_delete_message(int $id_message)
|
function messages_delete_message(int $id_message)
|
||||||
{
|
{
|
||||||
$where = ['id_mensaje' => $id_message];
|
global $config;
|
||||||
return (bool) db_process_sql_delete('tmensajes', $where);
|
|
||||||
|
// Check if user has grants to access the message.
|
||||||
|
if (check_notification_readable($id_message) === false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$utimestamp = time();
|
||||||
|
|
||||||
|
$ret = db_process_sql_update(
|
||||||
|
'tnotification_user',
|
||||||
|
['utimestamp_erased' => $utimestamp],
|
||||||
|
[
|
||||||
|
'id_mensaje' => $id_message,
|
||||||
|
'id_user' => $config['id_user'],
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($ret === 0) {
|
||||||
|
// No previous updates.
|
||||||
|
// Message available to user due group assignment.
|
||||||
|
$ret = db_process_sql_insert(
|
||||||
|
'tnotification_user',
|
||||||
|
[
|
||||||
|
'id_mensaje' => $id_message,
|
||||||
|
'id_user' => $config['id_user'],
|
||||||
|
'utimestamp_erased' => $utimestamp,
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
// Quick fix. Insertions returns 0.
|
||||||
|
if ($ret !== false) {
|
||||||
|
$ret = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (bool) $ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -179,17 +214,45 @@ function messages_process_read(
|
|||||||
int $message_id,
|
int $message_id,
|
||||||
bool $read=true
|
bool $read=true
|
||||||
) {
|
) {
|
||||||
if (empty($read)) {
|
global $config;
|
||||||
$read = 0;
|
|
||||||
} else {
|
// Check if user has grants to read the message.
|
||||||
$read = 1;
|
if (check_notification_readable($message_id) === false) {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (bool) db_process_sql_update(
|
if (empty($read)) {
|
||||||
'tmensajes',
|
// Mark as unread.
|
||||||
['estado' => $read],
|
$utimestamp = null;
|
||||||
['id_mensaje' => $message_id]
|
} else {
|
||||||
|
// Mark as read.
|
||||||
|
$utimestamp = time();
|
||||||
|
}
|
||||||
|
|
||||||
|
$ret = db_process_sql_update(
|
||||||
|
'tnotification_user',
|
||||||
|
['utimestamp_read' => $utimestamp],
|
||||||
|
[
|
||||||
|
'id_mensaje' => $message_id,
|
||||||
|
'id_user' => $config['id_user'],
|
||||||
|
'utimestamp_read' => null,
|
||||||
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if ($ret === 0) {
|
||||||
|
// No previous updates.
|
||||||
|
// Message available to user due group assignment.
|
||||||
|
$ret = db_process_sql_insert(
|
||||||
|
'tnotification_user',
|
||||||
|
[
|
||||||
|
'id_mensaje' => $message_id,
|
||||||
|
'id_user' => $config['id_user'],
|
||||||
|
'utimestamp_read' => $utimestamp,
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (bool) $ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -207,10 +270,17 @@ function messages_get_message(int $message_id)
|
|||||||
{
|
{
|
||||||
global $config;
|
global $config;
|
||||||
|
|
||||||
|
// Check if user has grants to read the message.
|
||||||
|
if (check_notification_readable($message_id) === false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
$sql = sprintf(
|
$sql = sprintf(
|
||||||
'SELECT *
|
'SELECT *, nu.utimestamp_read > 0 as "read"
|
||||||
FROM tmensajes
|
FROM tmensajes tm
|
||||||
WHERE id_mensaje=%d',
|
LEFT JOIN tnotification_user nu
|
||||||
|
ON nu.id_mensaje = tm.id_mensaje
|
||||||
|
WHERE tm.id_mensaje=%d',
|
||||||
$message_id
|
$message_id
|
||||||
);
|
);
|
||||||
$row = db_get_row_sql($sql);
|
$row = db_get_row_sql($sql);
|
||||||
@ -219,6 +289,8 @@ function messages_get_message(int $message_id)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$row['id_usuario_destino'] = $config['id_user'];
|
||||||
|
|
||||||
return $row;
|
return $row;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -255,7 +327,7 @@ function messages_get_message_sent(int $message_id)
|
|||||||
$row['id_usuario_destino'] = implode(
|
$row['id_usuario_destino'] = implode(
|
||||||
',',
|
',',
|
||||||
$targets['users']
|
$targets['users']
|
||||||
).implode(
|
).','.implode(
|
||||||
',',
|
',',
|
||||||
$targets['groups']
|
$targets['groups']
|
||||||
);
|
);
|
||||||
@ -282,26 +354,30 @@ function messages_get_count(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($incl_read)) {
|
if (!empty($incl_read)) {
|
||||||
// Retrieve only unread messages.
|
|
||||||
$filter = 'AND nu.uptimestap_read == NULL';
|
|
||||||
} else {
|
|
||||||
// Do not filter.
|
// Do not filter.
|
||||||
$filter = '';
|
$read = '';
|
||||||
|
} else {
|
||||||
|
// Retrieve only unread messages.
|
||||||
|
$read = 'where t.read is null';
|
||||||
}
|
}
|
||||||
|
|
||||||
$sql = sprintf(
|
$sql = sprintf(
|
||||||
"SELECT count(tm.id_mensaje) FROM tmensajes tm
|
'SELECT count(*) FROM (
|
||||||
left join tnotification_user nu
|
SELECT tm.*, utimestamp_read > 0 as "read" FROM tmensajes tm
|
||||||
ON tm.id_mensaje=nu.id_mensaje
|
LEFT JOIN tnotification_user nu
|
||||||
AND nu.id_user='%s'
|
ON tm.id_mensaje=nu.id_mensaje
|
||||||
left join tnotification_group ng
|
LEFT JOIN (tnotification_group ng
|
||||||
ON tm.id_mensaje=ng.id_mensaje
|
INNER JOIN tusuario_perfil up
|
||||||
left join tusuario_perfil up
|
ON ng.id_group=up.id_grupo
|
||||||
ON ng.id_group=up.id_grupo
|
AND up.id_grupo=ng.id_group
|
||||||
AND (ng.id_group=0 OR up.id_grupo=ng.id_group)
|
) ON tm.id_mensaje=ng.id_mensaje
|
||||||
%s",
|
WHERE utimestamp_erased is null
|
||||||
$config['id_user'],
|
AND (up.id_usuario="%s" OR nu.id_user="%s" OR ng.id_group=0)
|
||||||
$filter
|
) t
|
||||||
|
%s',
|
||||||
|
$user,
|
||||||
|
$user,
|
||||||
|
$read
|
||||||
);
|
);
|
||||||
|
|
||||||
return (int) db_get_sql($sql);
|
return (int) db_get_sql($sql);
|
||||||
@ -335,16 +411,18 @@ function messages_get_count_sent(string $user='')
|
|||||||
/**
|
/**
|
||||||
* Get message overview in array
|
* Get message overview in array
|
||||||
*
|
*
|
||||||
* @param string $order How to order them valid:
|
* @param string $order How to order them valid:
|
||||||
* (status (default), subject, timestamp, sender).
|
* (status (default), subject, timestamp, sender).
|
||||||
* @param string $order_dir Direction of order
|
* @param string $order_dir Direction of order
|
||||||
* (ASC = Ascending, DESC = Descending).
|
* (ASC = Ascending, DESC = Descending).
|
||||||
|
* @param boolean $incl_read Include read messages in return.
|
||||||
*
|
*
|
||||||
* @return integer The number of messages this user has
|
* @return integer The number of messages this user has
|
||||||
*/
|
*/
|
||||||
function messages_get_overview(
|
function messages_get_overview(
|
||||||
string $order='status',
|
string $order='status',
|
||||||
string $order_dir='ASC'
|
string $order_dir='ASC',
|
||||||
|
bool $incl_read=true
|
||||||
) {
|
) {
|
||||||
global $config;
|
global $config;
|
||||||
|
|
||||||
@ -367,18 +445,32 @@ function messages_get_overview(
|
|||||||
$order .= ' DESC';
|
$order .= ' DESC';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!empty($incl_read)) {
|
||||||
|
// Do not filter.
|
||||||
|
$read = '';
|
||||||
|
} else {
|
||||||
|
// Retrieve only unread messages.
|
||||||
|
$read = 'where t.read is null';
|
||||||
|
}
|
||||||
|
|
||||||
$sql = sprintf(
|
$sql = sprintf(
|
||||||
"SELECT tm.* FROM tmensajes tm
|
'SELECT * FROM (
|
||||||
left join tnotification_user nu
|
SELECT tm.*, utimestamp_read > 0 as "read" FROM tmensajes tm
|
||||||
ON tm.id_mensaje=nu.id_mensaje
|
LEFT JOIN tnotification_user nu
|
||||||
AND nu.id_user='%s'
|
ON tm.id_mensaje=nu.id_mensaje
|
||||||
left join tnotification_group ng
|
LEFT JOIN (tnotification_group ng
|
||||||
ON tm.id_mensaje=ng.id_mensaje
|
INNER JOIN tusuario_perfil up
|
||||||
left join tusuario_perfil up
|
ON ng.id_group=up.id_grupo
|
||||||
ON ng.id_group=up.id_grupo
|
AND up.id_grupo=ng.id_group
|
||||||
AND (ng.id_group=0 OR up.id_grupo=ng.id_group)
|
) ON tm.id_mensaje=ng.id_mensaje
|
||||||
ORDER BY %s",
|
WHERE utimestamp_erased is null
|
||||||
|
AND (up.id_usuario="%s" OR nu.id_user="%s" OR ng.id_group=0)
|
||||||
|
) t
|
||||||
|
%s
|
||||||
|
ORDER BY %s',
|
||||||
$config['id_user'],
|
$config['id_user'],
|
||||||
|
$config['id_user'],
|
||||||
|
$read,
|
||||||
$order
|
$order
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -81,14 +81,19 @@ function get_notification_targets(int $id_message)
|
|||||||
|
|
||||||
if (is_array($ret)) {
|
if (is_array($ret)) {
|
||||||
foreach ($ret as $row) {
|
foreach ($ret as $row) {
|
||||||
array_push($targets['users'], $row['id_user']);
|
array_push(
|
||||||
|
$targets['users'],
|
||||||
|
get_user_fullname($row['id_user'])
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$ret = $targets['groups'] = db_get_all_rows_sql(
|
$ret = db_get_all_rows_sql(
|
||||||
sprintf(
|
sprintf(
|
||||||
'SELECT id_group
|
'SELECT COALESCE(tg.nombre,ng.id_group) as "id_group"
|
||||||
FROM tnotification_group ng
|
FROM tnotification_group ng
|
||||||
|
LEFT JOIN tgrupo tg
|
||||||
|
ON tg.id_grupo=ng.id_group
|
||||||
WHERE ng.id_mensaje = %d',
|
WHERE ng.id_mensaje = %d',
|
||||||
$id_message
|
$id_message
|
||||||
)
|
)
|
||||||
@ -96,9 +101,49 @@ function get_notification_targets(int $id_message)
|
|||||||
|
|
||||||
if (is_array($ret)) {
|
if (is_array($ret)) {
|
||||||
foreach ($ret as $row) {
|
foreach ($ret as $row) {
|
||||||
|
if ($row['id_group'] == '0') {
|
||||||
|
$row['id_group'] = '<b>'.__('All').'</b>';
|
||||||
|
}
|
||||||
|
|
||||||
array_push($targets['groups'], $row['id_group']);
|
array_push($targets['groups'], $row['id_group']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $targets;
|
return $targets;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if current user has grants to read this notification
|
||||||
|
*
|
||||||
|
* @param integer $id_message Target message.
|
||||||
|
*
|
||||||
|
* @return boolean true, read available. False if not.
|
||||||
|
*/
|
||||||
|
function check_notification_readable(int $id_message)
|
||||||
|
{
|
||||||
|
global $config;
|
||||||
|
|
||||||
|
if (empty($id_message)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql = sprintf(
|
||||||
|
'SELECT tm.*, utimestamp_read > 0 as "read" FROM tmensajes tm
|
||||||
|
LEFT JOIN tnotification_user nu
|
||||||
|
ON tm.id_mensaje=nu.id_mensaje
|
||||||
|
AND tm.id_mensaje=%d
|
||||||
|
LEFT JOIN (tnotification_group ng
|
||||||
|
INNER JOIN tusuario_perfil up
|
||||||
|
ON ng.id_group=up.id_grupo
|
||||||
|
AND up.id_grupo=ng.id_group
|
||||||
|
) ON tm.id_mensaje=ng.id_mensaje
|
||||||
|
WHERE utimestamp_erased is null
|
||||||
|
AND (up.id_usuario="%s" OR nu.id_user="%s" OR ng.id_group=0)',
|
||||||
|
$id_message,
|
||||||
|
$config['id_user'],
|
||||||
|
$config['id_user']
|
||||||
|
);
|
||||||
|
|
||||||
|
return (bool) db_get_value_sql($sql);
|
||||||
|
}
|
||||||
|
@ -90,7 +90,7 @@ if ($read_message) {
|
|||||||
messages_process_read($message_id);
|
messages_process_read($message_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($message == false) {
|
if ($message === false) {
|
||||||
echo '<div>'.__('This message does not exist in the system').'</div>';
|
echo '<div>'.__('This message does not exist in the system').'</div>';
|
||||||
return;
|
return;
|
||||||
// Move out of this page and go processing other pages.
|
// Move out of this page and go processing other pages.
|
||||||
|
@ -109,18 +109,20 @@ if ($show_sent) {
|
|||||||
// Sent view.
|
// Sent view.
|
||||||
$num_messages = messages_get_count_sent($config['id_user']);
|
$num_messages = messages_get_count_sent($config['id_user']);
|
||||||
if ($num_messages > 0 && !is_ajax()) {
|
if ($num_messages > 0 && !is_ajax()) {
|
||||||
echo '<p>'.__('You have').' <b>'.$num_messages.'</b>'.__('sent message(s)').'.</p>';
|
echo '<p>'.__('You have').' <b>'.$num_messages.'</b> '.__('sent message(s)').'.</p>';
|
||||||
}
|
}
|
||||||
|
|
||||||
$messages = messages_get_overview_sent('', 'DESC');
|
$messages = messages_get_overview_sent('', 'DESC');
|
||||||
} else {
|
} else {
|
||||||
// Messages received.
|
// Messages received.
|
||||||
$num_messages = messages_get_count($config['id_user']);
|
$num_messages = messages_get_count($config['id_user'], true);
|
||||||
if ($num_messages > 0 && !is_ajax()) {
|
if ($num_messages > 0 && !is_ajax()) {
|
||||||
echo '<p>'.__('You have').' <b>'.$num_messages.'</b>'.__('unread message(s)').'.</p>';
|
$unread_messages = messages_get_count($config['id_user']);
|
||||||
|
echo '<p>'.__('You have').' <b>'.$unread_messages.'</b> '.__('unread message(s)').'.</p>';
|
||||||
|
$messages = messages_get_overview();
|
||||||
|
} else {
|
||||||
|
$messages = messages_get_overview('status', 'ASC', false);
|
||||||
}
|
}
|
||||||
|
|
||||||
$messages = messages_get_overview();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (empty($messages)) {
|
if (empty($messages)) {
|
||||||
@ -168,7 +170,7 @@ if (empty($messages)) {
|
|||||||
$message_id = $message['id_mensaje'];
|
$message_id = $message['id_mensaje'];
|
||||||
$data = [];
|
$data = [];
|
||||||
$data[0] = '';
|
$data[0] = '';
|
||||||
if ($message['status'] == 1) {
|
if ($message['read'] == 1) {
|
||||||
if ($show_sent) {
|
if ($show_sent) {
|
||||||
$data[0] .= '<a href="index.php?sec=message_list&sec2=operation/messages/message_edit&read_message=1&show_sent=1&id_message='.$message_id.'">';
|
$data[0] .= '<a href="index.php?sec=message_list&sec2=operation/messages/message_edit&read_message=1&show_sent=1&id_message='.$message_id.'">';
|
||||||
$data[0] .= html_print_image('images/email_open.png', true, ['border' => 0, 'title' => __('Click to read')]);
|
$data[0] .= html_print_image('images/email_open.png', true, ['border' => 0, 'title' => __('Click to read')]);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user