use new API for notifiations

This commit is contained in:
Ralf Becker 2016-05-06 09:19:36 +00:00
parent 8a24a16cb1
commit c088495708
15 changed files with 112 additions and 110 deletions

View File

@ -10,6 +10,8 @@
* @version $Id$ * @version $Id$
*/ */
use EGroupware\Api;
$GLOBALS['egw_info'] = array( $GLOBALS['egw_info'] = array(
'flags' => array( 'flags' => array(
'currentapp' => 'notifications', 'currentapp' => 'notifications',
@ -31,8 +33,8 @@ $ret=copy($document, $archive);
error_log("copy('$document', '$archive' returned ".array2string($ret)); error_log("copy('$document', '$archive' returned ".array2string($ret));
$document = 'zip://'.$archive.'#'.($config_file = 'lib/conf/egwnotifier.const.xml'); $document = 'zip://'.$archive.'#'.($config_file = 'lib/conf/egwnotifier.const.xml');
$xml = file_get_contents($document); $xml_in = file_get_contents($document);
//html::content_header('egwnotifier.const.xml', 'application/xml', bytes($xml)); echo $xml; exit; //Api\Header\Content::type('egwnotifier.const.xml', 'application/xml', bytes($xml_in)); echo $xml_in; exit;
function replace_callback($matches) function replace_callback($matches)
{ {
@ -90,11 +92,11 @@ function replace_callback($matches)
$htmlscflags = 16; // #define ENT_XML1 16 $htmlscflags = 16; // #define ENT_XML1 16
} }
return '<'.$matches[1].'>'.htmlspecialchars($replacement, $htmlscflags, translation::charset()).'</'.$matches[1].'>'; return '<'.$matches[1].'>'.htmlspecialchars($replacement, $htmlscflags, Api\Translation::charset()).'</'.$matches[1].'>';
} }
$xml = preg_replace_callback('/<((egw_|MI_)[^>]+)>(.*)<\/[a-z0-9_-]+>/iU', 'replace_callback', $xml); $xml = preg_replace_callback('/<((egw_|MI_)[^>]+)>(.*)<\/[a-z0-9_-]+>/iU', 'replace_callback', $xml_in);
//html::content_header('egwnotifier.replace.xml', 'application/xml', bytes($xml)); echo $xml; exit; //Api\Header\Content::type('egwnotifier.const.xml', 'application/xml', bytes($xml)); echo $xml; exit;
/* does NOT work, fails in addFromString :-( /* does NOT work, fails in addFromString :-(
$zip = new ZipArchive; $zip = new ZipArchive;
@ -115,7 +117,7 @@ unset($zip);
clearstatcache(); clearstatcache();
ob_end_clean(); ob_end_clean();
html::content_header('egroupware-notifier-'.$GLOBALS['egw_info']['user']['account_lid'].'.jar', 'application/x-java-archive', filesize($archive)); Api\Header\Content::type('egroupware-notifier-'.$GLOBALS['egw_info']['user']['account_lid'].'.jar', 'application/x-java-archive', filesize($archive));
readfile($archive,'rb'); readfile($archive,'rb');
@unlink($archive); @unlink($archive);

View File

@ -9,7 +9,7 @@
* @version $Id$ * @version $Id$
*/ */
if (!defined('SEP')) define('SEP','/'); use EGroupware\Api;
/** /**
* Notifies users according to their preferences. * Notifies users according to their preferences.
@ -179,13 +179,13 @@ final class notifications {
* *
*/ */
public function __construct() { public function __construct() {
$this->config = (object) config::read(self::_appname); $this->config = (object) Api\Config::read(self::_appname);
} }
/** /**
* Return notification errors * Return notification errors
* *
* @param boolean $reset=false true: reset all errors * @param boolean $reset =false true: reset all errors
* @return array * @return array
*/ */
public static function errors($reset=false) public static function errors($reset=false)
@ -480,9 +480,9 @@ final class notifications {
$ids[] = $receiver->account_id; $ids[] = $receiver->account_id;
if ($GLOBALS['egw']->acl->get_specific_rights_for_account($ids,'run','notifications')) { if ($GLOBALS['egw']->acl->get_specific_rights_for_account($ids,'run','notifications')) {
// read the users notification chain // read the users notification chain
$prefs = new preferences($receiver->account_id); $prefs = new Api\Preferences($receiver->account_id);
$preferences = $prefs->read(); $preferences_all = $prefs->read();
$preferences = (object)$preferences[self::_appname]; $preferences = (object)$preferences_all[self::_appname];
if($preferences->notification_chain) { if($preferences->notification_chain) {
// fallback: admin disabled user-chosen chain // fallback: admin disabled user-chosen chain
if(!$notification_chain = $available_chains[$preferences->notification_chain]) { if(!$notification_chain = $available_chains[$preferences->notification_chain]) {
@ -508,6 +508,7 @@ final class notifications {
} }
foreach($notification_chain as $backend => $action) { foreach($notification_chain as $backend => $action) {
$notification_backend = null;
try { try {
// check if backend should be skipped // check if backend should be skipped
if( in_array($backend, $this->skip_backends) ) { if( in_array($backend, $this->skip_backends) ) {
@ -517,7 +518,7 @@ final class notifications {
} }
$notification_backend = self::_appname.'_'.$backend; $notification_backend = self::_appname.'_'.$backend;
if(!file_exists(EGW_INCLUDE_ROOT. SEP. self::_appname. SEP. 'inc'. SEP. 'class.'. $notification_backend. '.inc.php')) { if(!file_exists(EGW_INCLUDE_ROOT.'/'. self::_appname.'/inc/class.'. $notification_backend. '.inc.php')) {
throw new Exception('file for '.$notification_backend. ' does not exist'); throw new Exception('file for '.$notification_backend. ' does not exist');
} }
$obj = new $notification_backend( $this->sender, $receiver, $this->config, $preferences ); $obj = new $notification_backend( $this->sender, $receiver, $this->config, $preferences );
@ -581,7 +582,7 @@ final class notifications {
if(!empty($_message_plain)) { if(!empty($_message_plain)) {
$messages['plain'] = $_message_plain; $messages['plain'] = $_message_plain;
} else { } else {
$messages['plain'] = translation::convertHTMLToText($_message_html, false, true); $messages['plain'] = Api\Mail\Html::convertHTMLToText($_message_html, false, true);
} }
if(!empty($_message_html)) { if(!empty($_message_html)) {
@ -601,7 +602,7 @@ final class notifications {
*/ */
public static function plain2html($_plain) public static function plain2html($_plain)
{ {
return html::activate_links(nl2br(html::htmlspecialchars($_plain, true))); return Api\Html::activate_links(nl2br(Api\Html::htmlspecialchars($_plain, true)));
} }
/** /**
@ -638,7 +639,9 @@ final class notifications {
* @param string $_part * @param string $_part
* @return string chosen part of the address * @return string chosen part of the address
*/ */
private function get_addresspart($_address, $_part='email') { private function get_addresspart($_address, $_part='email')
{
$parts = null;
if(strpos($_address,'<') && preg_match('/^(.*)\S?\<(.*)\>/',$_address, $parts)) { // _address contains a fullname part if(strpos($_address,'<') && preg_match('/^(.*)\S?\<(.*)\>/',$_address, $parts)) { // _address contains a fullname part
$fullname = trim(trim($parts[1]),'\"'); $fullname = trim(trim($parts[1]),'\"');
$email = $parts[2]; $email = $parts[2];
@ -649,11 +652,9 @@ final class notifications {
switch($_part) { switch($_part) {
case 'fullname': case 'fullname':
return $fullname; return $fullname;
break;
case 'email': case 'email':
default: default:
return $email; return $email;
break;
} }
return false; return false;
} }
@ -668,9 +669,9 @@ final class notifications {
* @return array containing notification chains, output like given in $_output * @return array containing notification chains, output like given in $_output
*/ */
public function get_available_chains($_output = 'routing') { public function get_available_chains($_output = 'routing') {
// determine enabled backends from config // determine enabled backends from Api\Config
$enabled_backends = array(); $enabled_backends = array();
foreach($this->backends as $id => $backend) { foreach($this->backends as $backend) {
switch($backend) { switch($backend) {
case 'email': case 'email':
case 'popup': case 'popup':
@ -689,7 +690,7 @@ final class notifications {
foreach($this->notification_chains as $key => $chain) { foreach($this->notification_chains as $key => $chain) {
$allow_chain = true; $allow_chain = true;
if(is_array($chain)) { if(is_array($chain)) {
foreach($chain as $name => $action) { foreach(array_keys($chain) as $name) {
if(!$enabled_backends[$name]) { if(!$enabled_backends[$name]) {
$allow_chain = false; // disable whole chain if one backend is disabled $allow_chain = false; // disable whole chain if one backend is disabled
} }
@ -728,7 +729,7 @@ final class notifications {
// create descriptions for each chain key in each group // create descriptions for each chain key in each group
foreach($chain_groups as $name => $arr_name) { foreach($chain_groups as $name => $arr_name) {
${$arr_name.$suffix} = array(); ${$arr_name.$suffix} = array();
foreach(${$arr_name} as $key => $value) { foreach(array_keys(${$arr_name}) as $key) {
if($arr_name == 'disabled_chains') { if($arr_name == 'disabled_chains') {
${$arr_name.$suffix}[$key] = '('.lang('Disabled').') '.lang($this->chains_descriptions[$key]); ${$arr_name.$suffix}[$key] = '('.lang('Disabled').') '.lang($this->chains_descriptions[$key]);
} else { } else {
@ -744,12 +745,10 @@ final class notifications {
} }
} }
return $chains_final; return $chains_final;
break;
case 'routing': case 'routing':
default: default:
return array_merge($common_chains, $enabled_chains); return array_merge($common_chains, $enabled_chains);
break;
} }
return false; return false;

View File

@ -10,6 +10,8 @@
* @version $Id$ * @version $Id$
*/ */
use EGroupware\Api;
/** /**
* Ajax methods for notifications * Ajax methods for notifications
*/ */
@ -58,7 +60,7 @@ class notifications_ajax {
/** /**
* reference to global db object * reference to global db object
* *
* @var egw_db * @var Api\Db
*/ */
private $db; private $db;
@ -81,7 +83,7 @@ class notifications_ajax {
/** /**
* the xml response object * the xml response object
* *
* @var egw_json_response * @var Api\Json\Response
*/ */
private $response; private $response;
@ -90,12 +92,12 @@ class notifications_ajax {
* *
*/ */
public function __construct() { public function __construct() {
$this->response = egw_json_response::get(); $this->response = Api\Json\Response::get();
$this->recipient = (object)$GLOBALS['egw']->accounts->read($GLOBALS['egw_info']['user']['account_id']); $this->recipient = (object)$GLOBALS['egw']->accounts->read($GLOBALS['egw_info']['user']['account_id']);
$this->config = (object)config::read(self::_appname); $this->config = (object)Api\Config::read(self::_appname);
$prefs = new preferences($this->recipient->account_id); $prefs = new Api\Preferences($this->recipient->account_id);
$this->preferences = $prefs->read(); $this->preferences = $prefs->read();
$this->db = $GLOBALS['egw']->db; $this->db = $GLOBALS['egw']->db;
@ -116,7 +118,7 @@ class notifications_ajax {
// call a hook for notifications on new mail // call a hook for notifications on new mail
//if ($GLOBALS['egw_info']['user']['apps']['mail']) $this->check_mailbox(); //if ($GLOBALS['egw_info']['user']['apps']['mail']) $this->check_mailbox();
$GLOBALS['egw']->hooks->process('check_notify'); Api\Hooks::process('check_notify');
// update currentusers // update currentusers
if ($GLOBALS['egw_info']['user']['apps']['admin'] && if ($GLOBALS['egw_info']['user']['apps']['admin'] &&
@ -170,11 +172,11 @@ class notifications_ajax {
{ {
$message = substr_replace($message, '', strpos($message, lang('Linked entries:'))); $message = substr_replace($message, '', strpos($message, lang('Linked entries:')));
} }
$message = preg_replace('#</?a[^>]*>#is','',$message); $message2 = preg_replace('#</?a[^>]*>#is','',$message);
$message = 'data:text/html;charset=' . translation::charset() .';base64,'.base64_encode($message); $message3 = 'data:text/html;charset=' . Api\Translation::charset() .';base64,'.base64_encode($message2);
} }
$this->response->apply('app.notifications.append',array($notification['notify_id'],$notification['notify_message'],$message)); $this->response->apply('app.notifications.append',array($notification['notify_id'],$notification['notify_message'],$message3));
} }
switch($this->preferences[self::_appname]['egwpopup_verbosity']) { switch($this->preferences[self::_appname]['egwpopup_verbosity']) {

View File

@ -1,6 +1,6 @@
<?php <?php
/** /**
* eGroupWare - Notifications * EGroupware - Notifications
* *
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @package notifications * @package notifications
@ -10,6 +10,8 @@
* @version $Id$ * @version $Id$
*/ */
use EGroupware\Api;
/** /**
* User notification via email. * User notification via email.
*/ */
@ -44,7 +46,7 @@ class notifications_email implements notifications_iface {
/** /**
* holds preferences object of user to notify * holds preferences object of user to notify
* *
* @var preferences * @var Api\Preferences
*/ */
private $preferences; private $preferences;
@ -74,7 +76,7 @@ class notifications_email implements notifications_iface {
{ {
unset($this->mail); unset($this->mail);
} }
$this->mail = new egw_mailer(); $this->mail = new Api\Mailer();
} }
/** /**
@ -139,13 +141,13 @@ class notifications_email implements notifications_iface {
if(is_null($_render_html)) { $_render_html = false; } if(is_null($_render_html)) { $_render_html = false; }
if(is_null($_render_external)) { $_render_external = true; } if(is_null($_render_external)) { $_render_external = true; }
$newline = $_render_html ? "<br />" : "\n"; $newline = $_render_html ? "<br />" : "\n";
$hruler = $_render_html ? html::hr() : ''; $hruler = $_render_html ? Api\Html::hr() : '';
$rendered_links = array(); $rendered_links = array();
foreach($_links as $link) { foreach($_links as $link) {
if($_render_external || ! $link->popup) { $link->view['no_popup'] = 1; } if($_render_external || ! $link->popup) { $link->view['no_popup'] = 1; }
// do not expose sensitive data // do not expose sensitive data
$url = preg_replace('/(sessionid|kp3|domain)=[^&]+&?/','',html::link('/index.php', $link->view)); $url = preg_replace('/(sessionid|kp3|domain)=[^&]+&?/','',Api\Html::link('/index.php', $link->view));
// complete missing protocol and domain part if needed // complete missing protocol and domain part if needed
if ($url{0} == '/' && $_render_external) { if ($url{0} == '/' && $_render_external) {
$url = ($_SERVER['HTTPS'] || $GLOBALS['egw_info']['server']['enforce_ssl'] ? 'https://' : 'http://'). $url = ($_SERVER['HTTPS'] || $GLOBALS['egw_info']['server']['enforce_ssl'] ? 'https://' : 'http://').

View File

@ -1,6 +1,6 @@
<?php <?php
/** /**
* eGroupWare - Notifications * EGroupware - Notifications
* *
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @package notifications * @package notifications

View File

@ -9,6 +9,8 @@
* @author Stefan Werfling <stefan.werfling@hw-softwareentwicklung.de>, Maik H<EFBFBD>ttner <maik.huettner@hw-softwareentwicklung.de> * @author Stefan Werfling <stefan.werfling@hw-softwareentwicklung.de>, Maik H<EFBFBD>ttner <maik.huettner@hw-softwareentwicklung.de>
*/ */
use EGroupware\Api;
/** /**
* jdesk Json methods for notifications * jdesk Json methods for notifications
*/ */
@ -57,14 +59,14 @@ class notifications_jdesk_ajax {
/** /**
* reference to global db object * reference to global db object
* *
* @var egw_db * @var Api\Db
*/ */
private $db; private $db;
/** /**
* the xml response object * the xml response object
* *
* @var xajaxResponse * @var Api\Json\Response
*/ */
private $response; private $response;
@ -74,17 +76,13 @@ class notifications_jdesk_ajax {
*/ */
public function __construct() public function __construct()
{ {
if( class_exists('xajaxResponse') ) $this->response = new Api\Json\Response();
{
$this->response = new xajaxResponse();
}
$this->recipient = (object)$GLOBALS['egw']->accounts->read($GLOBALS['egw_info']['user']['account_id']); $this->recipient = (object)$GLOBALS['egw']->accounts->read($GLOBALS['egw_info']['user']['account_id']);
$this->config = (object)config::read(self::_appname); $this->config = (object)Api\Config::read(self::_appname);
$prefs = new preferences($this->recipient->account_id); $prefs = new Api\Preferences($this->recipient->account_id);
$preferences = $prefs->read();
$this->preferences = $prefs->read(); $this->preferences = $prefs->read();
$this->db = $GLOBALS['egw']->db; $this->db = $GLOBALS['egw']->db;
@ -123,8 +121,6 @@ class notifications_jdesk_ajax {
"message" => $message, "message" => $message,
"details" => $details)); "details" => $details));
*/ */
return $this->response->getXML();
} }
/** /**
@ -150,7 +146,9 @@ class notifications_jdesk_ajax {
* *
* @return boolean true or false * @return boolean true or false
*/ */
private function get_egwpopup($browserNotify = false) { private function get_egwpopup($browserNotify = false)
{
unset($browserNotify); // not used
$message = ''; $message = '';

View File

@ -1,5 +1,4 @@
<?php <?php
/** /**
* EGroupware - Notifications Java Desktop App * EGroupware - Notifications Java Desktop App
* *
@ -10,6 +9,8 @@
* @author Stefan Werfling <stefan.werfling@hw-softwareentwicklung.de>, Maik H<EFBFBD>ttner <maik.huettner@hw-softwareentwicklung.de> * @author Stefan Werfling <stefan.werfling@hw-softwareentwicklung.de>, Maik H<EFBFBD>ttner <maik.huettner@hw-softwareentwicklung.de>
*/ */
use EGroupware\Api;
class notifications_jpopup implements notifications_iface class notifications_jpopup implements notifications_iface
{ {
@ -59,7 +60,7 @@ class notifications_jpopup implements notifications_iface
/** /**
* holds db object of SQL database * holds db object of SQL database
* *
* @var egw_db * @var Api\Db
*/ */
private $db; private $db;
@ -93,6 +94,8 @@ class notifications_jpopup implements notifications_iface
*/ */
public function send(array $_messages, $_subject=false, $_links=false, $_attachments=false) public function send(array $_messages, $_subject=false, $_links=false, $_attachments=false)
{ {
unset($_attachments); // not used
$jmessage = array(); $jmessage = array();
// app-message // app-message
@ -119,7 +122,7 @@ class notifications_jpopup implements notifications_iface
} }
$message = $this->render_infos($_subject) $message = $this->render_infos($_subject)
.html::hr() .Api\Html::hr()
.$_messages['html']; .$_messages['html'];
$jmessage['msghtml'] = $message; $jmessage['msghtml'] = $message;
@ -133,7 +136,7 @@ class notifications_jpopup implements notifications_iface
* renders additional infos from sender and subject * renders additional infos from sender and subject
* *
* @param string $_subject * @param string $_subject
* @return html rendered info as complete string * @return string html rendered info as complete string
*/ */
private function render_infos($_subject = false) { private function render_infos($_subject = false) {
$infos = array(); $infos = array();
@ -141,7 +144,7 @@ class notifications_jpopup implements notifications_iface
$sender = $this->sender->account_fullname ? $this->sender->account_fullname : $this->sender_account_email; $sender = $this->sender->account_fullname ? $this->sender->account_fullname : $this->sender_account_email;
$infos[] = lang('Message from').': '.$sender; $infos[] = lang('Message from').': '.$sender;
if(!empty($_subject)) { $infos[] = html::bold($_subject); } if(!empty($_subject)) { $infos[] = Api\Html::bold($_subject); }
return implode($newline,$infos); return implode($newline,$infos);
} }

View File

@ -10,6 +10,8 @@
* @version $Id$ * @version $Id$
*/ */
use EGroupware\Api;
/** /**
* Instant user notification with egroupware popup. * Instant user notification with egroupware popup.
* *
@ -67,7 +69,7 @@ class notifications_popup implements notifications_iface {
/** /**
* holds db object of SQL database * holds db object of SQL database
* *
* @var egw_db * @var Api\Db
*/ */
private $db; private $db;
@ -98,15 +100,17 @@ class notifications_popup implements notifications_iface {
* @param array $_links * @param array $_links
* @param array $_attachments * @param array $_attachments
*/ */
public function send(array $_messages, $_subject = false, $_links = false, $_attachments = false) { public function send(array $_messages, $_subject = false, $_links = false, $_attachments = false)
{
unset($_attachments); // not used
// Check access log to see if user is still logged in // Check access log to see if user is still logged in
if ( !egw_session::notifications_active($this->recipient->account_id) ) if ( !Api\Session::notifications_active($this->recipient->account_id) )
{ {
throw new Exception("User {$this->recipient->account_lid} isn't online. Can't send notification via popup"); throw new Exception("User {$this->recipient->account_lid} isn't online. Can't send notification via popup");
} }
$message = $this->render_infos($_subject) $message = $this->render_infos($_subject)
.html::hr() .Api\Html::hr()
.(isset($_messages['popup'])&&!empty($_messages['popup'])?$_messages['popup']:$_messages['html']) .(isset($_messages['popup'])&&!empty($_messages['popup'])?$_messages['popup']:$_messages['html'])
.$this->render_links($_links); .$this->render_links($_links);
@ -133,7 +137,7 @@ class notifications_popup implements notifications_iface {
* should be moved to the ajax class later - like mentioned in the Todo * should be moved to the ajax class later - like mentioned in the Todo
* *
* @param array $_links * @param array $_links
* @return html rendered link(s) as complete string with jspopup or a new window * @return string html rendered link(s) as complete string with jspopup or a new window
*/ */
private function render_links($_links = false) { private function render_links($_links = false) {
if(!is_array($_links) || count($_links) == 0) { return false; } if(!is_array($_links) || count($_links) == 0) { return false; }
@ -143,20 +147,19 @@ class notifications_popup implements notifications_iface {
foreach($_links as $link) { foreach($_links as $link) {
if(!$link->popup) { $link->view['no_popup'] = 1; } if(!$link->popup) { $link->view['no_popup'] = 1; }
$url = html::link('/index.php', $link->view);
// do not expose sensitive data // do not expose sensitive data
$url = preg_replace('/(sessionid|kp3|domain)=[^&]+&?/','',$url); $url = preg_replace('/(sessionid|kp3|domain)=[^&]+&?/','',
Api\Html::link('/index.php', $link->view));
// extract application-icon from menuaction // extract application-icon from menuaction
if($link->view['menuaction']) { if($link->view['menuaction']) {
$menuaction_arr = explode('.',$link->view['menuaction']); $menuaction_arr = explode('.',$link->view['menuaction']);
$application = $menuaction_arr[0]; $application = $menuaction_arr[0];
$image = $application ? html::image($application,'navbar',$link->text,'align="middle" style="width: 24px; margin-right: 0.5em;"') : ''; $image = $application ? Api\Html::image($application,'navbar',$link->text,'align="middle" style="width: 24px; margin-right: 0.5em;"') : '';
} else { } else {
$image = ''; $image = '';
} }
if($link->popup && !$GLOBALS['egw_info']['user']['preferences']['notifications']['external_mailclient']) if($link->popup && !$GLOBALS['egw_info']['user']['preferences']['notifications']['external_mailclient'])
{ {
$dimensions = explode('x', $link->popup);
$data = array( $data = array(
"data-app = '{$link->app}'", "data-app = '{$link->app}'",
"data-id = '{$link->id}'", "data-id = '{$link->id}'",
@ -164,14 +167,14 @@ class notifications_popup implements notifications_iface {
"data-popup = '{$link->popup}'" "data-popup = '{$link->popup}'"
); );
$rendered_links[] = html::div($image.$link->text,implode(' ',$data),'link'); $rendered_links[] = Api\Html::div($image.$link->text,implode(' ',$data),'link');
} else { } else {
$rendered_links[] = html::div('<a href="'.$url.'" target="_blank">'.$image.$link->text.'</a>','','link'); $rendered_links[] = Api\Html::div('<a href="'.$url.'" target="_blank">'.$image.$link->text.'</a>','','link');
} }
} }
if(count($rendered_links) > 0) { if(count($rendered_links) > 0) {
return html::hr().html::bold(lang('Linked entries:')).$newline.implode($newline,$rendered_links); return Api\Html::hr().Api\Html::bold(lang('Linked entries:')).$newline.implode($newline,$rendered_links);
} }
} }
@ -179,9 +182,9 @@ class notifications_popup implements notifications_iface {
* returns javascript to open a popup window: window.open(...) * returns javascript to open a popup window: window.open(...)
* *
* @param string $link link or this.href * @param string $link link or this.href
* @param string $target='_blank' name of target or this.target * @param string $target ='_blank' name of target or this.target
* @param int $width=750 width of the window * @param int $width =750 width of the window
* @param int $height=400 height of the window * @param int $height =400 height of the window
* @return string javascript (using single quotes) * @return string javascript (using single quotes)
*/ */
private function jspopup($link,$target='_blank',$width=750,$height=410) private function jspopup($link,$target='_blank',$width=750,$height=410)
@ -202,7 +205,7 @@ class notifications_popup implements notifications_iface {
* renders additional infos from sender and subject * renders additional infos from sender and subject
* *
* @param string $_subject * @param string $_subject
* @return html rendered info as complete string * @return string html rendered info as complete string
*/ */
private function render_infos($_subject = false) { private function render_infos($_subject = false) {
$infos = array(); $infos = array();
@ -210,7 +213,7 @@ class notifications_popup implements notifications_iface {
$sender = $this->sender->account_fullname ? $this->sender->account_fullname : $this->sender_account_email; $sender = $this->sender->account_fullname ? $this->sender->account_fullname : $this->sender_account_email;
$infos[] = lang('Message from').': '.$sender; $infos[] = lang('Message from').': '.$sender;
if(!empty($_subject)) { $infos[] = html::bold($_subject); } if(!empty($_subject)) { $infos[] = Api\Html::bold($_subject); }
return implode($newline,$infos); return implode($newline,$infos);
} }

View File

@ -10,9 +10,8 @@
* @version $Id$ * @version $Id$
*/ */
use EGroupware\Api\Json;
use EGroupware\Api; use EGroupware\Api;
use EGroupware\Api\Json;
/** /**
* Class to push via notification polling and other json requests from client-side * Class to push via notification polling and other json requests from client-side
@ -34,7 +33,7 @@ class notifications_push implements Json\PushBackend
/** /**
* Reference to global DB object * Reference to global DB object
* *
* @var egw_db * @var Api\Db
*/ */
public static $db; public static $db;
@ -113,7 +112,7 @@ class notifications_push implements Json\PushBackend
{ {
self::$db->delete(self::TABLE, array( self::$db->delete(self::TABLE, array(
'notify_type' => self::TYPE, 'notify_type' => self::TYPE,
'notify_created < '.self::$db->from_unixtime(egw_session::heartbeat_limit()), 'notify_created < '.self::$db->from_unixtime(Api\Session::heartbeat_limit()),
), __LINE__, __FILE__, self::APP); ), __LINE__, __FILE__, self::APP);
} }

View File

@ -10,6 +10,8 @@
* @version $Id$ * @version $Id$
*/ */
use EGroupware\Api;
/** /**
* User notification via winpopup. * User notification via winpopup.
*/ */
@ -100,9 +102,12 @@ class notifications_winpopup implements notifications_iface {
* @param array $_links * @param array $_links
* @param array $_attachments * @param array $_attachments
*/ */
public function send(array $_messages, $_subject = false, $_links = false, $_attachments = false) { public function send(array $_messages, $_subject = false, $_links = false, $_attachments = false)
{
unset($_links, $_attachments); // not used
$user_sessions = array(); $user_sessions = array();
foreach (egw_session::session_list(0, 'asc', 'session_dla', true) as $session) { foreach (Api\Session::session_list(0, 'asc', 'session_dla', true) as $session) {
if ($session['session_lid'] == $this->recipient->account_lid. '@'. $GLOBALS['egw_info']['user']['domain']) { if ($session['session_lid'] == $this->recipient->account_lid. '@'. $GLOBALS['egw_info']['user']['domain']) {
if($this->valid_ip($session['session_ip'])) { if($this->valid_ip($session['session_ip'])) {
$user_sessions[] = $session['session_ip']; $user_sessions[] = $session['session_ip'];
@ -138,6 +143,7 @@ class notifications_winpopup implements notifications_iface {
'/\[SENDER\]/' => $this->sender->account_fullname ? escapeshellarg($this->sender->account_fullname) : escapeshellarg($this->sender->account_email), '/\[SENDER\]/' => $this->sender->account_fullname ? escapeshellarg($this->sender->account_fullname) : escapeshellarg($this->sender->account_email),
); );
$command = preg_replace(array_keys($placeholders), $placeholders, $this->netbios_command); $command = preg_replace(array_keys($placeholders), $placeholders, $this->netbios_command);
$output = $returncode = null;
exec($command,$output,$returncode); exec($command,$output,$returncode);
if($returncode != 0) { if($returncode != 0) {
throw new Exception("Failed sending notification message via winpopup. Error while executing the specified command."); throw new Exception("Failed sending notification message via winpopup. Error while executing the specified command.");

View File

@ -9,7 +9,9 @@
* @version $Id: hook_preferences.inc.php 22498 2006-09-25 10:20:46Z jaytraxx $ * @version $Id: hook_preferences.inc.php 22498 2006-09-25 10:20:46Z jaytraxx $
*/ */
$file = Array( 'Site Configuration' => egw::link('/index.php', array( use EGroupware\Api\Egw;
$file = Array( 'Site Configuration' => Egw::link('/index.php', array(
'menuaction' => 'admin.admin_config.index', 'menuaction' => 'admin.admin_config.index',
'appname' => $appname, 'appname' => $appname,
'ajax' => 'true', 'ajax' => 'true',

View File

@ -1,6 +1,7 @@
<?php <?php
/** /**
* eGroupWare - Notifications * EGroupware - Notifications
*
* serves the hook "after_navbar" to create the notificationwindow * serves the hook "after_navbar" to create the notificationwindow
* *
* @abstract notificatonwindow is an empty and non displayed 1px div which gets rezised * @abstract notificatonwindow is an empty and non displayed 1px div which gets rezised
@ -12,17 +13,19 @@
* @author Cornelius Weiss <nelius@cwtech.de> * @author Cornelius Weiss <nelius@cwtech.de>
* @version $Id$ * @version $Id$
*/ */
use EGroupware\Api;
if ($GLOBALS['egw_info']['user']['apps']['notifications']) if ($GLOBALS['egw_info']['user']['apps']['notifications'])
{ {
$notification_config = config::read('notifications'); $notification_config = Api\Config::read('notifications');
translation::add_app('notifications'); Api\Translation::add_app('notifications');
$popup_poll_interval = empty($notification_config['popup_poll_interval']) ? 60 : $notification_config['popup_poll_interval']; $popup_poll_interval = empty($notification_config['popup_poll_interval']) ? 60 : $notification_config['popup_poll_interval'];
echo '<script src="'. $GLOBALS['egw_info']['server']['webserver_url']. '/notifications/js/notificationajaxpopup.js?'. echo '<script src="'. $GLOBALS['egw_info']['server']['webserver_url']. '/notifications/js/notificationajaxpopup.js?'.
filemtime(EGW_SERVER_ROOT.'/notifications/js/notificationajaxpopup.js'). '" type="text/javascript" id="notifications_script_id" data-poll-interval="'.$popup_poll_interval.'"></script>'; filemtime(EGW_SERVER_ROOT.'/notifications/js/notificationajaxpopup.js'). '" type="text/javascript" id="notifications_script_id" data-poll-interval="'.$popup_poll_interval.'"></script>';
echo ' echo '
<div id="egwpopup" style="display: none; z-index: 999;"> <div id="egwpopup" style="display: none; z-index: 999;">
<div id="egwpopup_header">'.lang('Notification'). '<span style="float:right;">'. <div id="egwpopup_header">'.lang('Notification'). '<span style="float:right;">'.
html::submit_button('egwpopup_close_button', 'X', '', true, 'id="egwpopup_close_button"', 'close.button') . Api\Html::submit_button('egwpopup_close_button', 'X', '', true, 'id="egwpopup_close_button"', 'close.button') .
'</span></div> '</span></div>
<div id="egwpopup_message"></div> <div id="egwpopup_message"></div>
<div id="egwpopup_footer"> <div id="egwpopup_footer">

View File

@ -1,16 +0,0 @@
<?php
/**
* eGroupWare - eTemplates for Application notifications
* http://www.egroupware.org
* generated by soetemplate::dump4setup() 2009-02-14 18:23
*
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @package notifications
* @subpackage setup
* @version $Id$
*/
$templ_version=1;
$templ_data[] = array('name' => 'notifications.checkmailbox','template' => '','lang' => '','group' => '0','version' => '1.7.001','data' => 'a:1:{i:0;a:4:{s:4:"type";s:4:"grid";s:4:"data";a:3:{i:0;a:2:{s:2:"c1";s:2:"th";s:2:"c2";s:7:"row,top";}i:1;a:4:{s:1:"A";a:3:{s:4:"size";s:6:"1,,0,0";s:4:"type";s:4:"vbox";i:1;a:3:{s:8:"readonly";s:4:"true";s:4:"type";s:5:"label";s:5:"label";s:6:"Folder";}}s:1:"B";a:3:{s:4:"size";s:6:"1,,0,0";s:4:"type";s:4:"vbox";i:1;a:3:{s:8:"readonly";s:4:"true";s:4:"type";s:5:"label";s:5:"label";s:7:"Subject";}}s:1:"C";a:3:{s:4:"size";s:6:"1,,0,0";s:4:"type";s:4:"vbox";i:1;a:3:{s:8:"readonly";s:4:"true";s:4:"type";s:5:"label";s:5:"label";s:4:"From";}}s:1:"D";a:3:{s:4:"size";s:6:"1,,0,0";s:4:"type";s:4:"vbox";i:1;a:3:{s:8:"readonly";s:4:"true";s:4:"type";s:5:"label";s:5:"label";s:8:"Received";}}}i:2;a:4:{s:1:"A";a:3:{s:4:"size";s:6:"1,,0,0";s:4:"type";s:4:"vbox";i:1;a:2:{s:4:"name";s:19:"${row}[mail_folder]";s:4:"type";s:5:"label";}}s:1:"B";a:3:{s:4:"size";s:6:"1,,0,0";s:4:"type";s:4:"vbox";i:1;a:4:{s:7:"no_lang";s:1:"1";s:4:"name";s:20:"${row}[mail_subject]";s:4:"size";s:103:"b,felamimail.uidisplay.display&uid=$row_cont[mail_uid]&mailbox=$row_cont[mail_folder_base64],,,,750x500";s:4:"type";s:5:"label";}}s:1:"C";a:3:{s:4:"size";s:6:"1,,0,0";s:4:"type";s:4:"vbox";i:1;a:3:{s:7:"no_lang";s:1:"1";s:4:"name";s:17:"${row}[mail_from]";s:4:"type";s:5:"label";}}s:1:"D";a:3:{s:4:"size";s:6:"1,,0,0";s:4:"type";s:4:"vbox";i:1;a:4:{s:8:"readonly";s:4:"true";s:4:"name";s:21:"${row}[mail_received]";s:4:"size";s:2:",8";s:4:"type";s:9:"date-time";}}}}s:4:"cols";i:4;s:4:"rows";i:2;}}','size' => '','style' => '','modified' => '1234631988',);

View File

@ -15,7 +15,7 @@ if (!defined('NOTIFICATION_APP'))
} }
$setup_info[NOTIFICATION_APP]['name'] = NOTIFICATION_APP; $setup_info[NOTIFICATION_APP]['name'] = NOTIFICATION_APP;
$setup_info[NOTIFICATION_APP]['version'] = '14.3'; $setup_info[NOTIFICATION_APP]['version'] = '16.1';
$setup_info[NOTIFICATION_APP]['app_order'] = 1; $setup_info[NOTIFICATION_APP]['app_order'] = 1;
$setup_info[NOTIFICATION_APP]['tables'] = array('egw_notificationpopup'); $setup_info[NOTIFICATION_APP]['tables'] = array('egw_notificationpopup');
$setup_info[NOTIFICATION_APP]['enable'] = 2; $setup_info[NOTIFICATION_APP]['enable'] = 2;
@ -37,11 +37,6 @@ $setup_info[NOTIFICATION_APP]['hooks']['deleteaccount'] = 'notifications.notific
/* Dependencies for this app to work */ /* Dependencies for this app to work */
$setup_info[NOTIFICATION_APP]['depends'][] = array( $setup_info[NOTIFICATION_APP]['depends'][] = array(
'appname' => 'phpgwapi', 'appname' => 'api',
'versions' => Array('14.1') 'versions' => Array('16.1')
); );
$setup_info[NOTIFICATION_APP]['depends'][] = array(
'appname' => 'etemplate',
'versions' => Array('14.1')
);

View File

@ -123,3 +123,7 @@ function notifications_upgrade14_1()
return $GLOBALS['setup_info']['notifications']['currentver'] = '14.3'; return $GLOBALS['setup_info']['notifications']['currentver'] = '14.3';
} }
function notifications_upgrade14_3()
{
return $GLOBALS['setup_info']['notifications']['currentver'] = '16.1';
}