mirror of
https://github.com/jokob-sk/NetAlertX.git
synced 2025-12-07 09:36:05 -08:00
🔔 User Notifications v0.6
This commit is contained in:
@@ -144,6 +144,16 @@
|
|||||||
{
|
{
|
||||||
background-color: rgba(0, 0, 0, 0);
|
background-color: rgba(0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.unread-notifications-bell
|
||||||
|
{
|
||||||
|
opacity: 70%;
|
||||||
|
color: red;
|
||||||
|
position: absolute;
|
||||||
|
top: 3px;
|
||||||
|
/* display: none; */
|
||||||
|
}
|
||||||
|
|
||||||
.header-status-locked-db
|
.header-status-locked-db
|
||||||
{
|
{
|
||||||
width: 25px;
|
width: 25px;
|
||||||
|
|||||||
@@ -261,6 +261,7 @@ function checkNotification() {
|
|||||||
|
|
||||||
// Find the oldest unread notification with level "interrupt"
|
// Find the oldest unread notification with level "interrupt"
|
||||||
const oldestInterruptNotification = response.find(notification => notification.read === 0 && notification.level === "interrupt");
|
const oldestInterruptNotification = response.find(notification => notification.read === 0 && notification.level === "interrupt");
|
||||||
|
const allUnreadNotification = response.filter(notification => notification.read === 0);
|
||||||
|
|
||||||
if (oldestInterruptNotification) {
|
if (oldestInterruptNotification) {
|
||||||
// Show modal dialog with the oldest unread notification
|
// Show modal dialog with the oldest unread notification
|
||||||
@@ -290,6 +291,9 @@ function checkNotification() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$('#unread-notifications-bell-count').html(allUnreadNotification.length);
|
||||||
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
error: function() {
|
error: function() {
|
||||||
|
|||||||
@@ -31,6 +31,10 @@ if (isset($_GET['action'])) {
|
|||||||
// Call the notifications_clear function
|
// Call the notifications_clear function
|
||||||
notifications_clear();
|
notifications_clear();
|
||||||
break;
|
break;
|
||||||
|
case 'notifications_mark_all_read':
|
||||||
|
// Call the notifications_mark_all_read function
|
||||||
|
notifications_mark_all_read();
|
||||||
|
break;
|
||||||
case 'get_unread_notifications':
|
case 'get_unread_notifications':
|
||||||
// Call the get_unread_notifications function
|
// Call the get_unread_notifications function
|
||||||
get_unread_notifications();
|
get_unread_notifications();
|
||||||
@@ -120,6 +124,9 @@ function mark_notification_as_read($guid) {
|
|||||||
// Mark the notification as read
|
// Mark the notification as read
|
||||||
$notification['read'] = 1;
|
$notification['read'] = 1;
|
||||||
break;
|
break;
|
||||||
|
} elseif ($guid == null) // no guid given, mark all read
|
||||||
|
{
|
||||||
|
$notification['read'] = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -141,6 +148,10 @@ function mark_notification_as_read($guid) {
|
|||||||
echo "Failed to read notification file after $max_attempts attempts.";
|
echo "Failed to read notification file after $max_attempts attempts.";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function notifications_mark_all_read() {
|
||||||
|
mark_notification_as_read(null);
|
||||||
|
}
|
||||||
|
|
||||||
function get_unread_notifications() {
|
function get_unread_notifications() {
|
||||||
$NOTIFICATION_API_FILE = '/app/front/api/user_notifications.json';
|
$NOTIFICATION_API_FILE = '/app/front/api/user_notifications.json';
|
||||||
|
|
||||||
|
|||||||
@@ -148,19 +148,24 @@ if ($ENABLED_DARKMODE === True) {
|
|||||||
<ul class="nav navbar-nav">
|
<ul class="nav navbar-nav">
|
||||||
<!-- Back Button -->
|
<!-- Back Button -->
|
||||||
<li>
|
<li>
|
||||||
<a id="back-button" href="javascript:history.go(-1);" role="button" span class='of-bt-icon'><i class='fa fa-arrow-left'></i></a>
|
<a id="back-button" href="javascript:history.go(-1);" role="button" span class='fa fa-arrow-left'></a>
|
||||||
</li>
|
</li>
|
||||||
<!-- Next Button -->
|
<!-- Next Button -->
|
||||||
<li>
|
<li>
|
||||||
<a id="next-button" href="javascript:history.go(1);" role="button" span class='of-bt-icon'><i class='fa fa-arrow-right'></i></a>
|
<a id="next-button" href="javascript:history.go(1);" role="button" span class='fa fa-arrow-right'></a>
|
||||||
</li>
|
</li>
|
||||||
<!-- Clear cache & Reload -->
|
<!-- Clear cache & Reload -->
|
||||||
<li>
|
<li>
|
||||||
<a id="reload-button" href='#' role="button" span class='of-bt-icon' onclick='clearCache()'><i class='fa fa-repeat'></i></a>
|
<a id="reload-button" href='#' role="button" span class='fa fa-repeat' onclick='clearCache()'></a>
|
||||||
</li>
|
</li>
|
||||||
<!-- Full Screen -->
|
<!-- Full Screen -->
|
||||||
<li>
|
<li>
|
||||||
<a id="fullscreen-button" href='#' role="button" span class='of-bt-icon' onclick='toggleFullscreen()'><i class='fa fa-arrows-alt'></i></a>
|
<a id="fullscreen-button" href='#' role="button" span class='fa fa-arrows-alt' onclick='toggleFullscreen()'></a>
|
||||||
|
</li>
|
||||||
|
<!-- Full Screen -->
|
||||||
|
<li>
|
||||||
|
<a id="notifications-button" href='userNotifications.php' role="button" span class='fa-solid fa-bell'></a>
|
||||||
|
<span id="unread-notifications-bell-count" title="" class="badge bg-red unread-notifications-bell" >0</span>
|
||||||
</li>
|
</li>
|
||||||
<!-- Server Status -->
|
<!-- Server Status -->
|
||||||
<li>
|
<li>
|
||||||
@@ -183,11 +188,11 @@ if ($ENABLED_DARKMODE === True) {
|
|||||||
<!-- Header right info -->
|
<!-- Header right info -->
|
||||||
<li class="dropdown user user-menu">
|
<li class="dropdown user user-menu">
|
||||||
<!-- Menu Toggle Button -->
|
<!-- Menu Toggle Button -->
|
||||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
|
<a href="#" class="dropdown-toggle" style=" height: 50px;" data-toggle="dropdown">
|
||||||
<!-- The user image in the navbar-->
|
|
||||||
|
<span class="hidden-xs" ><!-- The user image in the navbar-->
|
||||||
<img src="img/NetAlertX_logo.png" class="user-image" style="border-radius: initial" alt="NetAlertX Logo">
|
<img src="img/NetAlertX_logo.png" class="user-image" style="border-radius: initial" alt="NetAlertX Logo">
|
||||||
<!-- hidden-xs hides the username on small devices so only the image appears. -->
|
<!-- hidden-xs hides the username on small devices so only the image appears. --></span>
|
||||||
<span class="hidden-xs">Net <b>Alert</b><sup>x</sup></span>
|
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
<!-- The user image in the menu -->
|
<!-- The user image in the menu -->
|
||||||
|
|||||||
@@ -92,7 +92,7 @@
|
|||||||
// Function to update the displayed data and timestamp based on the selected format and index
|
// Function to update the displayed data and timestamp based on the selected format and index
|
||||||
function updateData(format, index) {
|
function updateData(format, index) {
|
||||||
// Fetch data from the API endpoint
|
// Fetch data from the API endpoint
|
||||||
fetch('/api/table_notifications.json')
|
fetch('/api/table_notifications.json?nocache=' + Date.now())
|
||||||
.then(response => response.json())
|
.then(response => response.json())
|
||||||
.then(data => {
|
.then(data => {
|
||||||
if (index < 0) {
|
if (index < 0) {
|
||||||
|
|||||||
@@ -25,8 +25,12 @@ require 'php/templates/header.php';
|
|||||||
<!-- Data will be inserted here by DataTables -->
|
<!-- Data will be inserted here by DataTables -->
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
<button id="clearNotificationsBtn" class="btn btn-danger">Clear All Notifications</button>
|
||||||
|
<button id="notificationsMarkAllRead" class="btn btn-default">Mark All Read</button>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<button id="clearNotificationsBtn" class="btn btn-danger">Clear All Notifications</button>
|
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
function fetchData(callback) {
|
function fetchData(callback) {
|
||||||
@@ -75,10 +79,10 @@ require 'php/templates/header.php';
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"columnDefs": [
|
"columnDefs": [
|
||||||
{ "width": "10%", "targets": [0] }, // Set width of the first four columns to 10%
|
{ "width": "15%", "targets": [0] }, // Set width of the first four columns to 10%
|
||||||
{ "width": "20%", "targets": [1] }, // Set width of the first four columns to 10%
|
{ "width": "20%", "targets": [1] }, // Set width of the first four columns to 10%
|
||||||
{ "width": "5%", "targets": [2, 3] }, // Set width of the first four columns to 10%
|
{ "width": "5%", "targets": [2, 3] }, // Set width of the first four columns to 10%
|
||||||
{ "width": "60%", "targets": 4 } // Set width of the "Content" column to 60%
|
{ "width": "50%", "targets": 4 } // Set width of the "Content" column to 60%
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -107,6 +111,25 @@ require 'php/templates/header.php';
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Function to clear all notifications
|
||||||
|
$('#notificationsMarkAllRead').click(function() {
|
||||||
|
$.ajax({
|
||||||
|
url: phpEndpoint,
|
||||||
|
type: 'GET',
|
||||||
|
data: {
|
||||||
|
action: 'notifications_mark_all_read'
|
||||||
|
},
|
||||||
|
success: function(response) {
|
||||||
|
// Clear the table and reload data
|
||||||
|
table.clear().draw();
|
||||||
|
},
|
||||||
|
error: function(xhr, status, error) {
|
||||||
|
console.log("An error occurred while clearing notifications: " + error);
|
||||||
|
// You can display an error message here if needed
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user