forked from extern/egroupware
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) {
|
||||
$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);
|
||||
}
|
||||
private function save( $_message ) {
|
||||
$result = $this->db->insert( self::_notification_table, array(
|
||||
'account_id' => $this->recipient->account_id,
|
||||
'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();">
|
||||
@ -30,4 +32,4 @@ if ($notification_config['popup_enable'] && $GLOBALS['egw_info']['user']['apps']
|
||||
</div>
|
||||
';
|
||||
}
|
||||
unset($notification_config);
|
||||
unset($notification_config);
|
||||
|
@ -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) {
|
||||
notifymessages.push(_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')
|
||||
);
|
||||
|
||||
|
||||
|
@ -9,16 +9,15 @@
|
||||
* @version $Id$
|
||||
*/
|
||||
|
||||
$phpgw_baseline = array(
|
||||
'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'),
|
||||
'uc' => array()
|
||||
)
|
||||
);
|
||||
$phpgw_baseline = array(
|
||||
'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()
|
||||
)
|
||||
);
|
||||
|
@ -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