Added AJAX to user notification config window
Former-commit-id: 9ca09ae777d699588a76dfb619156d800a95895b
This commit is contained in:
parent
6dbeaf6307
commit
d5fb9f1051
|
@ -168,9 +168,9 @@ function check_notification_readable(int $id_message)
|
|||
*
|
||||
* @return array with sources info
|
||||
*/
|
||||
function notifications_get_all_sources()
|
||||
function notifications_get_all_sources($filter=[])
|
||||
{
|
||||
return db_get_all_rows_in_table('tnotification_source');
|
||||
return db_get_all_rows_filter('tnotification_source', $filter);
|
||||
}
|
||||
|
||||
|
||||
|
@ -478,6 +478,27 @@ function notifications_get_user_label_status($source, $user, $label)
|
|||
return notifications_build_user_enable_return($value, false);
|
||||
}
|
||||
|
||||
function notifications_set_user_label_status($source, $user, $label, $value) {
|
||||
$source_info = notifications_get_all_sources(['id' => $source]);
|
||||
if (!isset($source_info[0])
|
||||
|| !$source_info[0]['enabled']
|
||||
|| !$source_info[0][$label]
|
||||
|| !$source_info[0]['user_editable']
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return (bool) db_process_sql_update(
|
||||
'tnotification_source_user',
|
||||
[$label => $value],
|
||||
[
|
||||
'id_user' => $user,
|
||||
'id_source' => $source,
|
||||
]
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Print the notification ball to see unread messages
|
||||
|
@ -634,6 +655,8 @@ function notifications_print_user_switch($source, $user, $label)
|
|||
'name' => $label,
|
||||
'value' => $status['status'],
|
||||
'disabled' => !$status['enabled'],
|
||||
'class' => 'notifications-user-label_individual',
|
||||
'id' => 'notifications-user-'.$source['id'].'-label-'.$label,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
// ==================================================
|
||||
// Copyright (c) 2005-2010 Artica Soluciones Tecnologicas
|
||||
// Please see http://pandorafms.org for full contribution list
|
||||
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation for version 2.
|
||||
|
@ -12,19 +11,39 @@
|
|||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// Load global vars
|
||||
global $config;
|
||||
|
||||
// Includes.
|
||||
include_once ($config['homedir'] . '/include/functions_notifications.php');
|
||||
require_once $config['homedir'].'/include/functions_notifications.php';
|
||||
|
||||
// Load the header
|
||||
require($config['homedir'] . "/operation/users/user_edit_header.php");
|
||||
require $config['homedir'].'/operation/users/user_edit_header.php';
|
||||
|
||||
if (get_parameter('change_label', 0)) {
|
||||
$label = get_parameter('label', '');
|
||||
$source = get_parameter('source', 0);
|
||||
$user = get_parameter('user', '');
|
||||
$value = get_parameter('value', 0) ? 1 : 0;
|
||||
|
||||
// Update the label value.
|
||||
ob_clean();
|
||||
echo json_encode(
|
||||
[
|
||||
'result' => notifications_set_user_label_status(
|
||||
$source,
|
||||
$user,
|
||||
$label,
|
||||
$value
|
||||
),
|
||||
]
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
// User notification table. It is just a wrapper.
|
||||
$table_content = new StdClass();
|
||||
$table_content->data = array();
|
||||
$table_content->data = [];
|
||||
$table_content->width = '100%';
|
||||
$table_content->id = 'user-notifications-wrapper';
|
||||
$table_content->class = 'databox filters';
|
||||
|
@ -33,20 +52,71 @@ $table_content->size[1] = '33%';
|
|||
$table_content->size[2] = '33%';
|
||||
|
||||
// Print the header.
|
||||
$table_content->data[] = array (
|
||||
$table_content->data[] = [
|
||||
'',
|
||||
__('Enable'),
|
||||
__('Also receive an email')
|
||||
);
|
||||
__('Also receive an email'),
|
||||
];
|
||||
|
||||
$sources = notifications_get_all_sources();
|
||||
foreach ($sources as $source) {
|
||||
$table_content->data[] = array(
|
||||
$table_content->data[] = [
|
||||
$source['description'],
|
||||
notifications_print_user_switch($source, $id, 'enabled'),
|
||||
notifications_print_user_switch($source, $id, 'also_mail'),
|
||||
);
|
||||
];
|
||||
}
|
||||
|
||||
html_print_table($table_content);
|
||||
|
||||
?>
|
||||
// Print id user to handle it on js.
|
||||
html_print_input_hidden('id_user', $id);
|
||||
|
||||
?>
|
||||
<script>
|
||||
// Encapsulate the code
|
||||
(function() {
|
||||
function notifications_change_label(event) {
|
||||
event.preventDefault();
|
||||
var check = document.getElementById(event.target.id);
|
||||
if (check === null) return;
|
||||
|
||||
var match = /notifications-user-([0-9]+)-label-(.*)/
|
||||
.exec(event.target.id);
|
||||
|
||||
jQuery.post ("ajax.php",
|
||||
{
|
||||
"page" : "operation/users/user_edit_notifications",
|
||||
"change_label" : 1,
|
||||
"label" : match[2],
|
||||
"source" : match[1],
|
||||
"user" : document.getElementById('hidden-id_user').value,
|
||||
"value": check.checked ? 1 : 0
|
||||
},
|
||||
function (data, status) {
|
||||
if (!data.result) {
|
||||
console.error("Error changing configuration in database.");
|
||||
} else {
|
||||
check.checked = !check.checked;
|
||||
}
|
||||
},
|
||||
"json"
|
||||
).done(function(m){})
|
||||
.fail(function(xhr, textStatus, errorThrown){
|
||||
console.error(
|
||||
"Cannot change configuration in database. Server error.",
|
||||
xhr.responseText
|
||||
);
|
||||
});
|
||||
|
||||
}
|
||||
var all_labels = document.getElementsByClassName(
|
||||
'notifications-user-label_individual'
|
||||
);
|
||||
for (var i = 0; i < all_labels.length; i++) {
|
||||
all_labels[i].addEventListener(
|
||||
'click', notifications_change_label, false
|
||||
);
|
||||
}
|
||||
}());
|
||||
</script>
|
||||
|
|
Loading…
Reference in New Issue