General fixes and UM comm updates

Former-commit-id: b4c58f467f195627f96afe7f06b59004adeb83be
This commit is contained in:
fbsanchez 2019-05-14 23:49:01 +02:00
parent 8004e096fd
commit d871b599ef
11 changed files with 150 additions and 410 deletions

View File

@ -215,7 +215,19 @@ if (!empty($all_data)) {
// END OF NEWS BOARD. // END OF NEWS BOARD.
} }
$nots = messages_get_overview('utimestamp', 'DESC', false); $nots = messages_get_overview(
'utimestamp',
'DESC',
false,
true,
0,
[
'description' => [
'messages',
'System status',
],
]
);
if (!empty($nots)) { if (!empty($nots)) {
// Notifications board. // Notifications board.
echo '<div id="notifications_board">'; echo '<div id="notifications_board">';

View File

@ -128,12 +128,12 @@ ui_require_css_file('register');
$initial = isset($config['initial_wizard']) !== true $initial = isset($config['initial_wizard']) !== true
|| $config['initial_wizard'] != '1'; || $config['initial_wizard'] != '1';
$newsletter = !db_get_value( $newsletter = db_get_value(
'middlename', 'middlename',
'tusuario', 'tusuario',
'id_user', 'id_user',
$config['id_user'] $config['id_user']
); ) === null;
$registration = isset($config['pandora_uid']) !== true $registration = isset($config['pandora_uid']) !== true
|| $config['pandora_uid'] == ''; || $config['pandora_uid'] == '';

View File

@ -457,19 +457,6 @@ if (check_acl($config['id_user'], 0, 'PM') && $config['enable_update_manager'])
$sub['godmode/update_manager/update_manager&tab=setup']['text'] = __('Update Manager options'); $sub['godmode/update_manager/update_manager&tab=setup']['text'] = __('Update Manager options');
$sub['godmode/update_manager/update_manager&tab=setup']['id'] = 'Options'; $sub['godmode/update_manager/update_manager&tab=setup']['id'] = 'Options';
if (license_free() && is_user_admin($config['id_user'])) {
include_once 'include/functions_update_manager.php';
// If there are unread messages, display the notification icon
$number_total_messages;
$number_unread_messages = update_manager_get_unread_messages();
if ($number_unread_messages > 0) {
$menu_godmode['messages']['notification'] = $number_unread_messages;
}
$sub['godmode/update_manager/update_manager&tab=messages']['text'] = __('Messages');
$sub['godmode/update_manager/update_manager&tab=messages']['id'] = 'Messages';
}
$menu_godmode['messages']['sub'] = $sub; $menu_godmode['messages']['sub'] = $sub;
} }

View File

@ -160,6 +160,19 @@ if (get_parameter('get_notifications_dropdown', 0)) {
return; return;
} }
if (get_parameter('get_notification', 0)) {
$msg_id = get_parameter('id', 0);
if ($msg_id > 0) {
$msg = messages_get_message($msg_id);
$msg['mensaje'] = io_safe_output($msg['mensaje']);
echo json_encode($msg);
}
return;
}
// Notification table. It is just a wrapper. // Notification table. It is just a wrapper.
$table_content = new StdClass(); $table_content = new StdClass();
$table_content->data = []; $table_content->data = [];

View File

@ -45,12 +45,6 @@ $buttons = [
], ],
]; ];
if (license_free()) {
$buttons['messages'] = [
'active' => ($tab == 'messages') ? true : false,
'text' => '<a href="index.php?sec=gsetup&sec2=godmode/update_manager/update_manager&tab=messages">'.html_print_image('images/email_mc.png', true, ['title' => __('Update manager messages')]).'</a>',
];
}
switch ($tab) { switch ($tab) {
case 'setup': case 'setup':
@ -64,10 +58,6 @@ switch ($tab) {
case 'online': case 'online':
$title = __('Update manager » Online'); $title = __('Update manager » Online');
break; break;
case 'messages':
$title = __('Update manager » Messages');
break;
} }
ui_print_page_header( ui_print_page_header(
@ -88,10 +78,6 @@ switch ($tab) {
include $config['homedir'].'/godmode/update_manager/update_manager.offline.php'; include $config['homedir'].'/godmode/update_manager/update_manager.offline.php';
break; break;
case 'messages':
include $config['homedir'].'/godmode/update_manager/update_manager.messages.php';
break;
case 'online': case 'online':
default: default:
include $config['homedir'].'/godmode/update_manager/update_manager.online.php'; include $config['homedir'].'/godmode/update_manager/update_manager.online.php';

View File

@ -206,9 +206,7 @@ class ConsoleSupervisor
* NOTIF.UPDATEMANAGER.MESSAGES * NOTIF.UPDATEMANAGER.MESSAGES
*/ */
if (update_manager_verify_registration()) { $this->getUMMessages();
$this->getUMMessages();
}
} }
@ -434,9 +432,8 @@ class ConsoleSupervisor
* NOTIF.UPDATEMANAGER.MESSAGES * NOTIF.UPDATEMANAGER.MESSAGES
*/ */
if (update_manager_verify_registration()) { $this->getUMMessages();
$this->getUMMessages();
}
} }
@ -2248,6 +2245,22 @@ class ConsoleSupervisor
{ {
global $config; global $config;
if (update_manager_verify_registration() === false) {
// Console not subscribed.
return;
}
// Avoid contact for messages too much often.
if (isset($config['last_um_check'])
&& time() < $config['last_um_check']
) {
return;
}
// Only ask for messages once a day.
$future = (time() + 24 * SECONDS_1HOUR);
config_update_value('last_um_check', $future);
include_once $config['homedir'].'/include/functions_update_manager.php'; include_once $config['homedir'].'/include/functions_update_manager.php';
$params = [ $params = [
@ -2272,13 +2285,12 @@ class ConsoleSupervisor
); );
foreach ($messages as $message) { foreach ($messages as $message) {
if (!isset($message['url'])) { if (!isset($message['url'])) {
// Avoid log messges. $message['url'] = '#';
$message['url'] = null;
} }
$this->notify( $this->notify(
[ [
'type' => 'NOTIF.UPDATEMANAGER.MESSAGES', 'type' => 'NOTIF.UPDATEMANAGER.MESSAGES.'.$message['id'],
'title' => $message['subject'], 'title' => $message['subject'],
'message' => base64_decode($message['message_html']), 'message' => base64_decode($message['message_html']),
'url' => $message['url'], 'url' => $message['url'],

View File

@ -442,14 +442,15 @@ 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. * @param boolean $incl_read Include read messages in return.
* @param boolean $incl_source_info Include source info. * @param boolean $incl_source_info Include source info.
* @param integer $limit Maximum number of result in the query. * @param integer $limit Maximum number of result in the query.
* @param array $other_filter Add a filter on main query. * @param array $other_filter Add a filter on main query.
* @param string $join_other_filter How to join filter on main query.
* *
* @return integer The number of messages this user has * @return integer The number of messages this user has
*/ */
@ -459,7 +460,8 @@ function messages_get_overview(
bool $incl_read=true, bool $incl_read=true,
bool $incl_source_info=false, bool $incl_source_info=false,
int $limit=0, int $limit=0,
array $other_filter=[] array $other_filter=[],
string $join_other_filter='AND'
) { ) {
global $config; global $config;
@ -529,7 +531,11 @@ function messages_get_overview(
$config['id_user'], $config['id_user'],
$config['id_user'], $config['id_user'],
$read, $read,
db_format_array_where_clause_sql($other_filter, 'AND', ' AND '), db_format_array_where_clause_sql(
$other_filter,
$join_other_filter,
' AND '
),
$order, $order,
($limit !== 0) ? ' LIMIT '.$limit : '' ($limit !== 0) ? ' LIMIT '.$limit : ''
); );

View File

@ -972,13 +972,32 @@ function notifications_print_dropdown()
*/ */
function notifications_print_dropdown_element($message_info) function notifications_print_dropdown_element($message_info)
{ {
$action = '';
switch ($message_info['description']) {
case 'Official&#x20;communication':
$action = 'show_modal(this.id);';
$target = '';
$body_preview = io_safe_output($message_info['mensaje']);
break;
default:
$action = '';
$target = '_blank';
$body_preview = strip_tags(
io_safe_output($message_info['mensaje']),
'<br><pre>'
);
break;
}
return sprintf( return sprintf(
"<a "<a
class='notification-item' class='notification-item'
onclick='click_on_notification_toast(event)' onclick='%s'
id='notification-item-id-%s' id='notification-item-id-%s'
href='%s' href='%s'
target='_blank' target='%s'
> >
%s %s
<div class='notification-info'> <div class='notification-info'>
@ -990,10 +1009,12 @@ function notifications_print_dropdown_element($message_info)
</p> </p>
</div> </div>
</a>", </a>",
$action.';click_on_notification_toast(event)',
$message_info['id_mensaje'], $message_info['id_mensaje'],
messages_get_url($message_info['id_mensaje']), messages_get_url($message_info['id_mensaje']),
$target,
html_print_image('images/'.$message_info['icon'], true), html_print_image('images/'.$message_info['icon'], true),
io_safe_output($message_info['subject']), io_safe_output($message_info['subject']),
strip_tags(io_safe_output($message_info['mensaje']), '<br><pre>') $body_preview
); );
} }

View File

@ -1627,112 +1627,6 @@ function update_manager_register_instance()
} }
/**
* Deprecated? study.
*
* @return void
*/
function update_manager_download_messages()
{
include_once 'include/functions_io.php';
global $config;
if (!isset($config['pandora_uid'])) {
return;
}
// Do not ask in next 2 hours.
$future = (time() + 2 * SECONDS_1HOUR);
config_update_value('last_um_check', $future);
/*
* Delete old messages
* db_get_sql('DELETE FROM tupdate WHERE UNIX_TIMESTAMP(filename) < UNIX_TIMESTAMP(NOW())');
* Build the curl request
*/
$params = [
'pandora_uid' => $config['pandora_uid'],
'timezone' => $config['timezone'],
'language' => $config['language'],
];
$result = update_manager_curl_request('get_messages', $params);
if (!$result['success']) {
return ($result['update_message']);
}
switch ($result['http_status']) {
case 200:
$message = json_decode($result['update_message'], true);
if ($message['success'] == 1) {
foreach ($message['messages'] as $single_message) {
// Convert subject -> db_field_value;.
// message_html -> data;
// expiration -> filename;
// message_id -> svn_version;.
$single_message['db_field_value'] = io_safe_input(
$single_message['subject']
);
unset($single_message['subject']);
$single_message['data'] = io_safe_input_html(
$single_message['message_html']
);
// It is mandatory to prepend a backslash to all
// single quotes.
$single_message['data'] = preg_replace(
'/\'/',
'\\\'',
$single_message['data']
);
unset($single_message['message_html']);
$single_message['filename'] = $single_message['expiration'];
unset($single_message['expiration']);
$single_message['svn_version'] = $single_message['message_id'];
unset($single_message['message_id']);
// Add common tconfig id_update_package.
$single_message['id_update_package'] = $config['id_um_package_messages'];
$result = db_process_sql_insert(
'tupdate',
$single_message
);
}
}
break;
default:
// Ignore.
break;
}
}
/**
* Deprecated? review.
*
* @param integer $id_message Message id.
*
* @return boolean Result.
*/
function update_manager_remote_read_messages($id_message)
{
global $config;
$params = [
'pandora_uid' => $config['pandora_uid'],
'message_id' => $id_message,
];
$result = update_manager_curl_request('mark_as_read', $params);
return $result['success'];
}
/** /**
* Extracts OUM package. * Extracts OUM package.
* *
@ -1999,195 +1893,6 @@ function update_manager_get_current_package()
} }
/**
* Deprecated? verify.
* Set the read or not read status message of current user.
*
* @param integer $message_id Message id.
* @param string $status Status.
*
* @return void
*/
function update_manger_set_read_message($message_id, $status)
{
global $config;
$rollback = db_get_value(
'data_rollback',
'tupdate',
'svn_version',
$message_id
);
$users_read = json_decode($rollback, true);
$users_read[$config['id_user']] = $status;
$rollback = json_encode($users_read);
db_process_sql_update(
'tupdate',
['data_rollback' => $rollback],
['svn_version' => $message_id]
);
}
/**
* Deprecated? verify.
* Get the read or not read status message
*
* @param integer $message_id Message id.
* @param boolean $rollback Rollback or not.
*
* @return boolean Success or not.
*/
function update_manger_get_read_message($message_id, $rollback=false)
{
global $config;
if ($rollback === false) {
$rollback = db_get_value(
'data_rollback',
'tupdate',
'svn_version',
$message_id
);
}
$users_read = json_decode($rollback, true);
if (isset($users_read[$config['id_user']])
&& ($users_read[$config['id_user']] == 1)
) {
return true;
}
return false;
}
/**
* Deprecated? verify.
* Get the last message.
*
* @return array Latest message.
*/
function update_manger_get_last_message()
{
global $config;
$sql = 'SELECT data, svn_version, db_field_value FROM tupdate ';
$sql .= 'WHERE data_rollback NOT LIKE \'%"'.$config['id_user'].'":1%\' ';
$sql .= 'OR data_rollback IS NULL ';
$sql .= 'ORDER BY svn_version DESC ';
$message = db_get_row_sql($sql);
return $message;
}
/**
* Deprecated? verify.
* Get the a single message message.
*
* @param integer $message_id Message id.
*
* @return array Target message.
*/
function update_manger_get_single_message($message_id)
{
global $config;
$sql = 'SELECT data, svn_version, db_field_value FROM tupdate ';
$sql .= 'WHERE svn_version='.$message_id;
$message = db_get_row_sql($sql);
return $message;
}
/**
* Deprecated? verify.
* Count messages (local).
*
* @return integer Count.
*/
function update_manager_get_total_messages()
{
global $config;
$sql = 'SELECT COUNT(*) FROM tupdate';
return (int) db_get_sql($sql);
}
/**
* Deprecated? verify.
* Retrieves unread messages count.
*
* @return integer Pending read messages.
*/
function update_manager_get_unread_messages()
{
global $config;
$total = update_manager_get_total_messages();
$sql = 'SELECT COUNT(*) FROM tupdate WHERE data_rollback LIKE \'%"'.$config['id_user'].'":1%\'';
$read = (int) db_get_sql($sql);
return ($total - $read);
}
/**
* Deprecated? verify.
* Retrieves some messages count.
*
* @return integer Pending read messages.
*/
function update_manager_get_not_deleted_messages()
{
global $config;
$total = update_manager_get_total_messages();
$sql = 'SELECT COUNT(*) FROM tupdate WHERE description LIKE \'%"'.$config['id_user'].'":1%\'';
$read = (int) db_get_sql($sql);
return ($total - $read);
}
/**
* Deprecated? verify.
* Deletes message.
*
* @param integer $message_id Message id.
*
* @return void
*/
function update_manger_set_deleted_message($message_id)
{
global $config;
$rollback = db_get_value(
'description',
'tupdate',
'svn_version',
$message_id
);
$users_read = json_decode($rollback, true);
$users_read[$config['id_user']] = 1;
$rollback = json_encode($users_read);
db_process_sql_update(
'tupdate',
['description' => $rollback ],
['svn_version' => $message_id]
);
// Mark as read too.
update_manger_set_read_message($message_id, 1);
}
/** /**
* Function recursive delete directory. * Function recursive delete directory.
* *

View File

@ -4586,14 +4586,14 @@ div#dialog_messages table th:last-child {
} }
.notification-item:hover { .notification-item:hover {
border: #ccc solid 1px; border: #ccc solid 1px;
text-decoration: none;
} }
.notification-item > * { .notification-item > * {
padding-left: 15px; padding-left: 15px;
pointer-events: none; pointer-events: none;
} }
.notification-item > img {
.notification-item:hover { width: 75px;
text-decoration: none;
} }
.notification-info { .notification-info {

View File

@ -902,15 +902,6 @@ clear_pandora_error_for_header();
$config['logged'] = false; $config['logged'] = false;
extensions_load_extensions($process_login); extensions_load_extensions($process_login);
// Check for update manager messages
if (license_free() && is_user_admin($config['id_user'])
&& (($config['last_um_check'] < time())
|| (!isset($config['last_um_check'])))
) {
include_once 'include/functions_update_manager.php';
update_manager_download_messages();
}
if ($process_login) { if ($process_login) {
// Call all extensions login function // Call all extensions login function
extensions_call_login_function(); extensions_call_login_function();
@ -1204,6 +1195,8 @@ if ($config['pure'] == 0) {
echo '<div id="wiz_container">'; echo '<div id="wiz_container">';
echo '</div>'; echo '</div>';
echo '<div id="um_msg_receiver">';
echo '</div>';
if ($config['pure'] == 0) { if ($config['pure'] == 0) {
echo '</div>'; echo '</div>';
@ -1258,8 +1251,6 @@ require 'include/php_to_js_values.php';
$("HTML, BODY").animate({ scrollTop: 0 }, 500); $("HTML, BODY").animate({ scrollTop: 0 }, 500);
} }
//Initial load of page //Initial load of page
$(document).ready(adjustFooter); $(document).ready(adjustFooter);
@ -1329,57 +1320,64 @@ require 'include/php_to_js_values.php';
} }
var times_fired_register_wizard = 0; function show_modal(id) {
var match = /notification-(.*)-id-([0-9]+)/.exec(id);
function run_identification_wizard (register, newsletter , return_button) { if (!match) {
if (times_fired_register_wizard) { console.error(
$(".ui-dialog-titlebar-close").show(); "Cannot handle toast click event. Id not valid: ",
event.target.id
//Reset some values
$("#label-email-newsletter").hide();
$("#text-email-newsletter").hide();
$("#required-email-newsletter").hide();
$("#checkbox-register").removeAttr('checked');
$("#checkbox-newsletter").removeAttr('checked');
// Hide or show parts
if (register == 1) {
$("#checkbox-register").show();
$("#label-register").show ();
}
if (register == 0) {
$("#checkbox-register").attr ('style', 'display: none !important');
$("#label-register").hide ();
}
if (newsletter == 1) {
$("#checkbox-newsletter").show();
$("#label-newsletter").show ();
}
if (newsletter == 0) {
$("#checkbox-newsletter").attr ('style', 'display: none !important');
$("#label-newsletter").hide ();
}
$("#login_accept_register").dialog('open');
}
else {
$(".ui-dialog-titlebar-close").show();
$("#container").append('<div class="id_wizard"></div>');
jQuery.post ("ajax.php",
{"page": "general/login_identification_wizard",
"not_return": 1,
"force_register": register,
"force_newsletter": newsletter,
"return_button": return_button},
function (data) {
$(".id_wizard").hide ()
.empty ()
.append (data);
},
"html"
); );
return;
} }
times_fired_register_wizard++; jQuery.post ("ajax.php",
return false; {
"page": "godmode/setup/setup_notifications",
"get_notification": 1,
"id": match[2]
},
function (data) {
notifications_hide();
try {
var json = JSON.parse(data);
$('#um_msg_receiver')
.empty ()
.html (json.mensaje);
$('#um_msg_receiver').prop('title', json.subject);
// Launch modal.
$("#um_msg_receiver").dialog({
resizable: true,
draggable: true,
modal: true,
width: 800,
buttons: [
{
text: "OK",
click: function() {
$( this ).dialog( "close" );
}
}
],
overlay: {
opacity: 0.5,
background: "black"
},
closeOnEscape: false,
open: function(event, ui) { $(".ui-dialog-titlebar-close").hide(); }
});
$(".ui-widget-overlay").css("background", "#000");
$(".ui-widget-overlay").css("opacity", 0.6);
$(".ui-draggable").css("cursor", "inherit");
} catch (error) {
console.log(error);
}
},
"html"
);
} }
//Dynamically assign footer position and width. //Dynamically assign footer position and width.