mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-11-07 08:34:42 +01:00
Popup notifications now go to all windows and are removed when user clicks OK. Or, close the popup with (X) to mark all as read.
This commit is contained in:
parent
056f61ef72
commit
babc62d9f1
@ -614,4 +614,19 @@ final class notifications {
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Actions to take when an account is deleted
|
||||
*
|
||||
* @param settings array with keys account_id and new_owner (new_owner is optional)
|
||||
*/
|
||||
public function deleteaccount($settings) {
|
||||
foreach($this->backends as $backend) {
|
||||
$notification_backend = self::_appname.'_'.$backend;
|
||||
$backend_obj = new $notification_backend();
|
||||
if(method_exists($backend_obj, 'deleteaccount')) {
|
||||
$backend_obj->deleteaccount($settings);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -118,6 +118,18 @@ class notifications_ajax {
|
||||
return $this->response->getXML();
|
||||
}
|
||||
|
||||
/**
|
||||
* Let the user confirm that they have seen the message.
|
||||
* After they've seen it, remove it from the database
|
||||
*/
|
||||
public function confirm_message($message) {
|
||||
error_log( html_entity_decode($message));
|
||||
$myval=$this->db->delete(self::_notification_table,array(
|
||||
'account_id' => $this->recipient->account_id,
|
||||
'message' => html_entity_decode($message)
|
||||
),__LINE__,__FILE__,self::_appname);
|
||||
}
|
||||
|
||||
/**
|
||||
* checks users mailbox and sends a notification if new mails have arrived
|
||||
*
|
||||
@ -211,22 +223,16 @@ class notifications_ajax {
|
||||
* @return boolean true or false
|
||||
*/
|
||||
private function get_egwpopup() {
|
||||
$session_id = $GLOBALS['egw_info']['user']['sessionid'];
|
||||
$message = '';
|
||||
$rs = $this->db->select(self::_notification_table,
|
||||
'*', array(
|
||||
'account_id' => $this->recipient->account_id,
|
||||
'session_id' => $session_id,
|
||||
),
|
||||
__LINE__,__FILE__,false,'',self::_appname);
|
||||
if ($rs->NumRows() > 0) {
|
||||
foreach ($rs as $notification) {
|
||||
$this->response->addScriptCall('append_notification_message',$notification['message']);
|
||||
}
|
||||
$myval=$this->db->delete(self::_notification_table,array(
|
||||
'account_id' => $this->recipient->account_id,
|
||||
'session_id' => $session_id,
|
||||
),__LINE__,__FILE__,self::_appname);
|
||||
|
||||
switch($this->preferences[self::_appname]['egwpopup_verbosity']) {
|
||||
case 'low':
|
||||
|
@ -104,21 +104,18 @@ class notifications_popup implements notifications_iface {
|
||||
* @param array $_attachments
|
||||
*/
|
||||
public function send(array $_messages, $_subject = false, $_links = false, $_attachments = false) {
|
||||
$sessions = egw_session::session_list(0, 'asc', 'session_dla', true);
|
||||
$user_sessions = array();
|
||||
foreach ($sessions as $session) {
|
||||
if ($session['session_lid'] == $this->recipient->account_lid. '@'. $GLOBALS['egw_info']['user']['domain']) {
|
||||
$user_sessions[] = $session['session_id'];
|
||||
// Check access log to see if user is still logged in
|
||||
if ( !egw_session::notifications_active($this->recipient->account_id) )
|
||||
{
|
||||
throw new Exception("User {$this->recipient->account_lid} isn't online. Can't send notification via popup");
|
||||
}
|
||||
}
|
||||
if ( empty($user_sessions) ) throw new Exception("User {$this->recipient->account_lid} isn't online. Can't send notification via popup");
|
||||
|
||||
$message = $this->render_infos($_subject)
|
||||
.html::hr()
|
||||
.$_messages['html']
|
||||
.$this->render_links($_links);
|
||||
|
||||
$this->save( $message, $user_sessions );
|
||||
$this->save( $message );
|
||||
}
|
||||
|
||||
/**
|
||||
@ -127,14 +124,11 @@ class notifications_popup implements notifications_iface {
|
||||
* @param string $_message
|
||||
* @param array $_user_sessions
|
||||
*/
|
||||
private function save( $_message, array $_user_sessions ) {
|
||||
foreach ($_user_sessions as $user_session) {
|
||||
private function save( $_message ) {
|
||||
$result = $this->db->insert( self::_notification_table, array(
|
||||
'account_id' => $this->recipient->account_id,
|
||||
'session_id' => $user_session,
|
||||
'message' => $_message
|
||||
), false,__LINE__,__FILE__,self::_appname);
|
||||
}
|
||||
if ($result === false) throw new Exception("Can't save notification into SQL table");
|
||||
}
|
||||
|
||||
@ -207,4 +201,23 @@ class notifications_popup implements notifications_iface {
|
||||
if(!empty($_subject)) { $infos[] = html::bold($_subject); }
|
||||
return implode($newline,$infos);
|
||||
}
|
||||
|
||||
/**
|
||||
* Actions to take when deleting an account
|
||||
*
|
||||
* @param settings array with keys account_id and new_owner (new_owner is optional)
|
||||
*/
|
||||
public function deleteaccount($settings) {
|
||||
if($settings['new_owner']) {
|
||||
$this->db->update( self::_notification_table, array(
|
||||
'account_id' => $settings['new_owner']
|
||||
), array(
|
||||
'account_id' => $settings['account_id']
|
||||
),__LINE__,__FILE__,self::_appname);
|
||||
} else {
|
||||
$this->db->delete( self::_notification_table, array(
|
||||
'account_id' => $settings['account_id']
|
||||
),__LINE__,__FILE__,self::_appname);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -22,7 +22,9 @@ if ($notification_config['popup_enable'] && $GLOBALS['egw_info']['user']['apps']
|
||||
echo '<script type="text/javascript">egwpopup_init("'.$popup_poll_interval.'");</script>';
|
||||
echo '
|
||||
<div id="egwpopup" style="display: none; z-index: 999;">
|
||||
<div id="egwpopup_header">'.lang('Notification').'</div>
|
||||
<div id="egwpopup_header">'.lang('Notification'). '<span style="float:right;">'.
|
||||
html::submit_button('egwpopup_close_button', 'X', 'egwpopup_button_close();',true,'', 'close.button') .
|
||||
'</span></div>
|
||||
<div id="egwpopup_message"></div>
|
||||
<div id="egwpopup_footer">
|
||||
<input id="egwpopup_ok_button" type="submit" value="'. lang('ok'). '" onClick="egwpopup_button_ok();">
|
||||
|
@ -64,6 +64,7 @@ function egwpopup_button_ok() {
|
||||
egwpopup = document.getElementById("egwpopup");
|
||||
egwpopup_message = document.getElementById("egwpopup_message");
|
||||
egwpopup_message.scrollTop = 0;
|
||||
xajax_doXMLHTTP("notifications.notifications_ajax.confirm_message", notifymessages[0]);
|
||||
notifymessages.shift();
|
||||
if(notifymessages.length > 0) {
|
||||
egwpopup_display();
|
||||
@ -74,6 +75,21 @@ function egwpopup_button_ok() {
|
||||
}
|
||||
}
|
||||
|
||||
// Close and mark all as read
|
||||
function egwpopup_button_close() {
|
||||
for(var i = 0; i < notifymessages.length; i++) {
|
||||
xajax_doXMLHTTP("notifications.notifications_ajax.confirm_message", notifymessages[i]);
|
||||
}
|
||||
var egwpopup = document.getElementById("egwpopup");
|
||||
var egwpopup_message = document.getElementById("egwpopup_message");
|
||||
egwpopup.style.display = "none";
|
||||
egwpopup_message.innerHTML = "";
|
||||
notificationbell_switch("inactive");
|
||||
}
|
||||
|
||||
function append_notification_message(_message) {
|
||||
// Check to prevent duplicates
|
||||
if(notifymessages.indexOf(_message) == -1) {
|
||||
notifymessages.push(_message);
|
||||
}
|
||||
}
|
||||
|
@ -15,7 +15,7 @@ if (!defined('NOTIFICATION_APP'))
|
||||
}
|
||||
|
||||
$setup_info[NOTIFICATION_APP]['name'] = NOTIFICATION_APP;
|
||||
$setup_info[NOTIFICATION_APP]['version'] = '1.8';
|
||||
$setup_info[NOTIFICATION_APP]['version'] = '1.9.001';
|
||||
$setup_info[NOTIFICATION_APP]['app_order'] = 1;
|
||||
$setup_info[NOTIFICATION_APP]['tables'] = array('egw_notificationpopup');
|
||||
$setup_info[NOTIFICATION_APP]['enable'] = 2;
|
||||
@ -34,6 +34,7 @@ $setup_info[NOTIFICATION_APP]['hooks'][] = 'after_navbar';
|
||||
$setup_info[NOTIFICATION_APP]['hooks'][] = 'preferences';
|
||||
$setup_info[NOTIFICATION_APP]['hooks'][] = 'settings';
|
||||
$setup_info[NOTIFICATION_APP]['hooks'][] = 'admin';
|
||||
$setup_info[NOTIFICATION_APP]['hooks']['deleteaccount'] = 'notifications.notifications.deleteaccount';
|
||||
//$setup_info[NOTIFICATION_APP]['hooks']['settings'] = NOTIFICATION_APP.'.ts_admin_prefs_sidebox_hooks.settings';
|
||||
//$setup_info[NOTIFICATION_APP]['hooks']['admin'] = NOTIFICATION_APP.'.ts_admin_prefs_sidebox_hooks.all_hooks';
|
||||
//$setup_info[NOTIFICATION_APP]['hooks']['sidebox_menu'] = NOTIFICATION_APP.'.ts_admin_prefs_sidebox_hooks.all_hooks';
|
||||
@ -49,3 +50,4 @@ $setup_info[NOTIFICATION_APP]['depends'][] = array(
|
||||
'versions' => Array('1.7','1.8','1.9')
|
||||
);
|
||||
|
||||
|
||||
|
@ -13,12 +13,11 @@
|
||||
'egw_notificationpopup' => array(
|
||||
'fd' => array(
|
||||
'account_id' => array('type' => 'int','precision' => '20','nullable' => False),
|
||||
'session_id' => array('type' => 'varchar','precision' => '255','nullable' => False),
|
||||
'message' => array('type' => 'longtext')
|
||||
),
|
||||
'pk' => array(),
|
||||
'fk' => array(),
|
||||
'ix' => array('account_id','session_id'),
|
||||
'ix' => array('account_id'),
|
||||
'uc' => array()
|
||||
)
|
||||
);
|
||||
|
@ -38,3 +38,30 @@ function notifications_upgrade1_6()
|
||||
{
|
||||
return $GLOBALS['setup_info']['notifications']['currentver'] = '1.8';
|
||||
}
|
||||
|
||||
function notifications_upgrade1_8()
|
||||
{
|
||||
$GLOBALS['egw_setup']->oProc->DropColumn('egw_notificationpopup',array(
|
||||
'fd' => array(
|
||||
'account_id' => array('type' => 'int','precision' => '20','nullable' => False),
|
||||
'message' => array('type' => 'longtext')
|
||||
),
|
||||
'pk' => array(),
|
||||
'fk' => array(),
|
||||
'ix' => array('account_id'),
|
||||
'uc' => array()
|
||||
),'session_id');
|
||||
$GLOBALS['egw_setup']->oProc->RefreshTable('egw_notificationpopup',array(
|
||||
'fd' => array(
|
||||
'account_id' => array('type' => 'int','precision' => '20','nullable' => False),
|
||||
'message' => array('type' => 'longtext')
|
||||
),
|
||||
'pk' => array(),
|
||||
'fk' => array(),
|
||||
'ix' => array('account_id'),
|
||||
'uc' => array()
|
||||
));
|
||||
|
||||
return $GLOBALS['setup_info']['notifications']['currentver'] = '1.9.001';
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user