2015-09-27 15:35:33 +00:00
< ? php
/* Copyright ( C ) 2015 Daniel Preussker , QuxLabs UG < preussker @ quxlabs . com >
* 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 , either version 3 of the License , or
* ( at your option ) any later version .
2017-08-26 15:35:39 -05:00
*
2015-09-27 15:35:33 +00:00
* This program is distributed in the hope that it will be useful ,
* 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 .
2017-08-26 15:35:39 -05:00
*
2015-09-27 15:35:33 +00:00
* You should have received a copy of the GNU General Public License
* along with this program . If not , see < http :// www . gnu . org / licenses />. */
/**
* Notification Page
* @ author Daniel Preussker
* @ copyright 2015 Daniel Preussker , QuxLabs UG
* @ license GPL
* @ package LibreNMS
* @ subpackage Notifications
*/
2018-09-11 07:51:35 -05:00
use LibreNMS\Authentication\LegacyAuth ;
2016-08-21 08:07:14 -05:00
use LibreNMS\ObjectCache ;
$notifications = new ObjectCache ( 'notifications' );
2015-09-27 15:35:33 +00:00
?>
< div class = " container " >
< div class = " row " >
< div class = " col-md-12 " >
< h1 >< a href = " /notifications " > Notifications </ a ></ h1 >
2017-11-29 04:22:53 +01:00
< h4 >
< ? php
echo '<strong class="count-notif">' . $notifications [ 'count' ] . '</strong> Unread Notifications ' ;
2018-09-11 07:51:35 -05:00
if ( LegacyAuth :: user () -> hasGlobalAdmin ()) {
2017-11-29 04:22:53 +01:00
echo '<button class="btn btn-success pull-right fa fa-plus new-notif" data-toggle="tooltip" data-placement="bottom" title="Create new notification" style="margin-top:-10px;"></button>' ;
}
if ( $notifications [ 'count' ] > 0 && ! isset ( $vars [ 'archive' ])) {
echo '<button class="btn btn-success pull-right fa fa-eye read-all-notif" data-toggle="tooltip" data-placement="bottom" title="Mark all as Read" style="margin-top:-10px;"></button>' ;
}
?>
</ h4 >
2015-09-27 15:35:33 +00:00
< hr />
</ div >
</ div >
</ div >
< div class = " container new-notif-collapse " >
< div class = " row " >
< div class = " col-md-12 " >
< form class = " form-horizontal new-notif-form " >
< div class = " form-group " >
< label for = " notif_title " class = " col-sm-2 control-label " > Title </ label >
< div class = " col-sm-10 " >
< input type = " text " class = " form-control " id = " notif_title " name = " notif_title " placeholder = " " >
</ div >
</ div >
< div class = " form-group " >
< label for = " notif_body " class = " col-sm-2 control-label " > Message </ label >
< div class = " col-sm-10 " >
< textarea class = " form-control " id = " notif_body " name = " notif_body " ></ textarea >
</ div >
</ div >
< div class = " form-group " >
< div class = " col-sm-offset-2 col-sm-10 " >
< button type = " submit " class = " btn btn-success " > Add Notification </ button >
</ div >
</ div >
</ form >
</ div >
</ div >
</ div >
< ? php if ( ! isset ( $vars [ 'archive' ])) { ?>
< div class = " container " >
< ? php
2016-08-18 20:28:22 -05:00
foreach ( $notifications [ 'sticky' ] as $notif ) {
if ( is_numeric ( $notif [ 'source' ])) {
$notif [ 'source' ] = dbFetchCell ( 'select username from users where user_id =?' , array ( $notif [ 'source' ]));
2017-08-26 15:35:39 -05:00
}
echo '<div class="well"><div class="row"> <div class="col-md-12">' ;
$class = $notif [ 'severity' ] == 2 ? 'text-danger' : 'text-warning' ;
echo " <h4 class=' $class ' id=' ${ notif['notifications_id'] } '> " ;
echo " <strong><i class='fa fa-bell-o'></i> ${ notif['title'] } </strong> " ;
echo " <span class='pull-right'> " ;
2018-09-11 07:51:35 -05:00
if ( $notif [ 'user_id' ] != LegacyAuth :: id ()) {
$sticky_user = LegacyAuth :: get () -> getUser ( $notif [ 'user_id' ]);
2017-08-26 15:35:39 -05:00
echo " <code>Sticky by ${ sticky_user['username'] } </code> " ;
} else {
echo '<button class="btn btn-primary fa fa-bell-slash-o unstick-notif" data-toggle="tooltip" data-placement="bottom" title="Remove Sticky" style="margin-top:-10px;"></button>' ;
}
echo '</span></h4>' ;
?>
2015-09-27 15:35:33 +00:00
</ div >
</ div >
< div class = " row " >
< div class = " col-md-12 " >
2017-08-26 15:35:39 -05:00
< blockquote < ? php echo $notif [ 'severity' ] == 2 ? ' style="border-color: darkred;"' : '' ?> >
2015-09-27 15:35:33 +00:00
< p >< ? php echo $notif [ 'body' ]; ?> </p>
2016-01-10 22:22:13 +00:00
< footer >< ? php echo $notif [ 'datetime' ]; ?> | Source: <code><?php echo $notif['source']; ?></code></footer>
2015-09-27 15:35:33 +00:00
</ blockquote >
</ div >
</ div >
</ div >
2016-08-18 20:28:22 -05:00
< ? php } ?>
2015-09-27 15:35:33 +00:00
< ? php if ( $notifications [ 'sticky_count' ] != 0 ) { ?>
< hr />
< ? php } ?>
< ? php
2016-08-18 20:28:22 -05:00
foreach ( $notifications [ 'unread' ] as $notif ) {
if ( is_numeric ( $notif [ 'source' ])) {
2018-09-11 07:51:35 -05:00
$source_user = LegacyAuth :: get () -> getUser ( $notif [ 'source' ]);
2017-08-26 15:35:39 -05:00
$notif [ 'source' ] = $source_user [ 'username' ];
}
echo '<div class="well"><div class="row"> <div class="col-md-12">' ;
d_echo ( $notif );
$class = 'text-success' ;
if ( $notif [ 'severity' ] == 1 ) {
$class = 'text-warning' ;
} elseif ( $notif [ 'severity' ] == 2 ) {
$class = 'text-danger' ;
}
echo " <h4 class=' $class ' id=' ${ notif['notifications_id']}'>${notif['title'] } <span class='pull-right'> " ;
2018-09-11 07:51:35 -05:00
if ( LegacyAuth :: user () -> hasGlobalAdmin ()) {
2017-08-26 15:35:39 -05:00
echo '<button class="btn btn-primary fa fa-bell-o stick-notif" data-toggle="tooltip" data-placement="bottom" title="Mark as Sticky" style="margin-top:-10px;"></button>' ;
}
?>
2015-09-28 07:04:01 +00:00
< button class = " btn btn-primary fa fa-eye read-notif " data - toggle = " tooltip " data - placement = " bottom " title = " Mark as Read " style = " margin-top:-10px; " ></ button >
2015-09-27 15:35:33 +00:00
</ span >
</ h4 >
</ div >
</ div >
< div class = " row " >
< div class = " col-md-12 " >
2017-08-26 15:35:39 -05:00
< blockquote < ? php echo $notif [ 'severity' ] == 2 ? ' style="border-color: darkred;"' : '' ?> >
2016-08-18 20:28:22 -05:00
< p >< ? php echo preg_replace ( '/\\\n/' , '<br />' , $notif [ 'body' ]); ?> </p>
2016-01-10 22:22:13 +00:00
< footer >< ? php echo $notif [ 'datetime' ]; ?> | Source: <code><?php echo $notif['source']; ?></code></footer>
2015-09-27 15:35:33 +00:00
</ blockquote >
</ div >
</ div >
</ div >
2016-08-18 20:28:22 -05:00
< ? php } ?>
2015-09-27 15:35:33 +00:00
< div class = " row " >
< div class = " col-md-12 " >
2016-01-23 23:45:34 +00:00
< h3 >< a class = " btn btn-default " href = " notifications/archive/ " > Show Archive </ a ></ h3 >
2015-09-27 15:35:33 +00:00
</ div >
</ div >
</ div >
2016-08-18 20:28:22 -05:00
< ? php } elseif ( isset ( $vars [ 'archive' ])) { ?>
2015-09-27 15:35:33 +00:00
< div class = " container " >
< div class = " row " >
< div class = " col-md-12 " >
< h2 > Archive </ h2 >
</ div >
</ div >
2017-08-26 15:35:39 -05:00
< ? php
2018-12-20 00:20:20 +01:00
foreach ( $notifications [ 'read' ] as $notif ) {
2017-08-26 15:35:39 -05:00
echo '<div class="well"><div class="row"> <div class="col-md-12"><h4' ;
if ( $notif [ 'severity' ] == 1 ) {
echo ' class="text-warning"' ;
} elseif ( $notif [ 'severity' ] == 2 ) {
echo ' class="text-danger"' ;
}
echo " id=' ${ notif['notifications_id']}'>${notif['title'] } " ;
2018-09-11 07:51:35 -05:00
if ( LegacyAuth :: user () -> isAdmin ()) {
2017-08-26 15:35:39 -05:00
echo '<span class="pull-right"><button class="btn btn-primary fa fa-bell-o stick-notif" data-toggle="tooltip" data-placement="bottom" title="Mark as Sticky" style="margin-top:-10px;"></button></span>' ;
}
?>
</ h4 >
2015-09-27 15:35:33 +00:00
</ div >
</ div >
< div class = " row " >
< div class = " col-md-12 " >
2017-08-26 15:35:39 -05:00
< blockquote < ? php echo $notif [ 'severity' ] == 2 ? ' style="border-color: darkred;"' : '' ?> >
2016-08-18 20:28:22 -05:00
< p >< ? php echo preg_replace ( '/\\\n/' , '<br />' , $notif [ 'body' ]); ?> </p>
2016-01-10 22:22:13 +00:00
< footer >< ? php echo $notif [ 'datetime' ]; ?> | Source: <code><?php echo $notif['source']; ?></code></footer>
2015-09-27 15:35:33 +00:00
</ blockquote >
</ div >
</ div >
</ div >
< ? php } ?>
</ div >
< ? php } ?>
< script >
$ ( function () {
2015-09-28 07:04:01 +00:00
$ ( '[data-toggle="tooltip"]' ) . tooltip ();
2015-09-27 15:35:33 +00:00
$ ( '.new-notif-collapse' ) . fadeOut ( 0 );
$ ( document ) . on ( " click " , " .new-notif " , function () {
$ ( '.new-notif-collapse' ) . fadeToggle ();
});
$ ( document ) . on ( " submit " , " .new-notif-form " , function () {
var notif = {};
data = $ ( this ) . serializeArray ();
for ( var field in data ) {
notif [ data [ field ] . name ] = data [ field ] . value ;
}
$ . ajax ({
type : 'POST' ,
url : 'ajax_form.php' ,
data : { type : 'notifications' , title : notif . notif_title , body : notif . notif_body , action : 'create' },
dataType : " json " ,
success : function ( data ) {
if ( data . status == " ok " ) {
2016-01-11 14:13:16 +01:00
window . location . href = " notifications " ;
2019-04-03 20:52:08 -05:00
} else {
toastr . error ( data . message );
2015-09-27 15:35:33 +00:00
}
}
});
return false ;
});
$ ( document ) . on ( " click " , " .read-notif " , function () {
2015-11-21 12:15:42 +00:00
$ ( this ) . attr ( " disabled " , true );
2015-09-27 15:35:33 +00:00
var notif = $ ( this ) . parent () . parent () . attr ( 'id' );
$ . ajax ({
type : 'POST' ,
url : 'ajax_form.php' ,
data : { type : 'notifications' , notification_id : notif , action : 'read' },
dataType : " json " ,
success : function ( data ) {
if ( data . status == " ok " ) {
$ ( " #message " ) . html ( '<div class="alert alert-info">' + data . message + '</div>' );
$ ( " # " + notif ) . parent () . parent () . parent () . fadeOut ();
$ ( " .count-notif " ) . each ( function (){
2017-11-16 20:10:20 -06:00
var new_count = this . innerHTML - 1 ;
this . innerHTML = new_count ;
if ( new_count == 0 ) {
$this = $ ( this );
if ( $this . hasClass ( 'badge-danger' )) {
$this . removeClass ( 'badge-danger' );
}
}
2015-09-27 15:35:33 +00:00
});
}
else {
2015-11-21 12:15:42 +00:00
$ ( this ) . attr ( " disabled " , false );
2015-09-27 15:35:33 +00:00
$ ( " #message " ) . html ( '<div class="alert alert-info">' + data . message + '</div>' );
}
}
});
});
2017-11-29 04:22:53 +01:00
$ ( document ) . on ( " click " , " .read-all-notif " , function () {
$ ( this ) . attr ( " disabled " , true );
$ . ajax ({
type : 'POST' ,
url : 'ajax_form.php' ,
data : { type : 'notifications' , action : 'read-all-notif' },
dataType : " json " ,
success : function ( data ) {
if ( data . status == " ok " ) {
window . location . reload ()
}
else {
$ ( this ) . attr ( " disabled " , false );
}
}
});
});
2015-09-27 15:35:33 +00:00
$ ( document ) . on ( " click " , " .stick-notif " , function () {
var notif = $ ( this ) . parent () . parent () . attr ( 'id' );
$ . ajax ({
type : 'POST' ,
url : 'ajax_form.php' ,
data : { type : 'notifications' , notification_id : notif , action : 'stick' },
dataType : " json " ,
success : function ( data ) {
if ( data . status == " ok " ) {
$ ( " #message " ) . html ( '<div class="alert alert-info">' + data . message + '</div>' );
2016-01-11 14:13:16 +01:00
window . location . href = " notifications " ;
2015-09-27 15:35:33 +00:00
}
else {
$ ( " #message " ) . html ( '<div class="alert alert-info">' + data . message + '</div>' );
}
}
});
});
$ ( document ) . on ( " click " , " .unstick-notif " , function () {
var notif = $ ( this ) . parent () . parent () . attr ( 'id' );
$ . ajax ({
type : 'POST' ,
url : 'ajax_form.php' ,
data : { type : 'notifications' , notification_id : notif , action : 'unstick' },
dataType : " json " ,
success : function ( data ) {
if ( data . status == " ok " ) {
$ ( " #message " ) . html ( '<div class="alert alert-info">' + data . message + '</div>' );
2016-01-11 14:13:16 +01:00
window . location . href = " notifications " ;
2015-09-27 15:35:33 +00:00
}
else {
$ ( " #message " ) . html ( '<div class="alert alert-info">' + data . message + '</div>' );
}
}
});
});
});
</ script >