, Maik H�ttner */ class notifications_jpopup implements notifications_iface { /** * Appname */ const _appname = 'notifications'; /** * Notification table in SQL database */ const _notification_table = 'egw_notificationpopup'; /** * Notification type */ const _type = 'jpopup'; /** * holds account object for user who sends the message * * @var object */ private $sender; /** * holds account object for user to notify * * @var object */ private $recipient; /** * holds config object (sitewide application config) * * @var object */ private $config; /** * holds preferences object of user to notify * * @var object */ private $preferences; /** * holds db object of SQL database * * @var egw_db */ private $db; /** * constructor of notifications_egwpopup * * @param object $_sender * @param object $_recipient * @param object $_config * @param object $_preferences */ public function __construct($_sender, $_recipient, $_config = null, $_preferences = null) { if( !is_object($_sender) ) { throw new Exception("no sender given."); } if( !is_object($_recipient) ) { throw new Exception("no recipient given."); } $this->sender = $_sender; $this->recipient = $_recipient; $this->config = $_config; $this->preferences = $_preferences; $this->db = $GLOBALS['egw']->db; } /** * sends notification if user is online * * @param array $_messages * @param string $_subject * @param array $_links * @param array $_attachments */ public function send(array $_messages, $_subject=false, $_links=false, $_attachments=false) { $jmessage = array(); // app-message if( ($_links != null) && (count($_links) > 0) ) { $tlink = $_links[0]; $appname = ""; if( key_exists('menuaction', $tlink->view) ) { $tmp = explode(".", $tlink->view['menuaction']); $appname = $tmp[0]; } $link = array(); foreach( $tlink->view as $pkey => $pvalue ) { $link[] = $pkey . '=' . $pvalue; } // TODO more links? $jmessage['link'] = implode("&", $link); } $message = $this->render_infos($_subject) .html::hr() .$_messages['html']; $jmessage['msghtml'] = $message; $jmessage['app'] = $appname; $this->save( serialize($jmessage) ); } /** * renders additional infos from sender and subject * * @param string $_subject * @return html rendered info as complete string */ private function render_infos($_subject = false) { $infos = array(); $newline = "
"; $sender = $this->sender->account_fullname ? $this->sender->account_fullname : $this->sender_account_email; $infos[] = lang('Message from').': '.$sender; if(!empty($_subject)) { $infos[] = html::bold($_subject); } return implode($newline,$infos); } /** * saves notification into database so that the client can fetch it from there * * @param string $_message * @param array $_user_sessions */ private function save( $_message ) { $result = $this->db->insert( self::_notification_table, array( 'account_id' => $this->recipient->account_id, 'notify_message' => $_message, 'notify_type' => self::_type ), false,__LINE__,__FILE__,self::_appname); if ($result === false) throw new Exception("Can't save notification into SQL table"); } }