2016-03-09 16:57:38 +00:00
< ? php
/**
* Implementation of notification service
*
* @ category DMS
* @ package SeedDMS
* @ license GPL 2
* @ version @ version @
* @ author Uwe Steinmann < uwe @ steinmann . cx >
* @ copyright Copyright ( C ) 2016 Uwe Steinmann
* @ version Release : @ package_version @
*/
/**
* Implementation of notification service
*
* @ category DMS
* @ package SeedDMS
* @ author Uwe Steinmann < uwe @ steinmann . cx >
* @ copyright Copyright ( C ) 2016 Uwe Steinmann
* @ version Release : @ package_version @
*/
class SeedDMS_NotificationService {
/**
* List of services for sending notification
*/
protected $services ;
2020-12-18 13:36:51 +00:00
/*
* List of servives with errors
*/
protected $errors ;
2021-01-28 20:08:33 +00:00
/*
* Service for logging
*/
protected $logger ;
/*
* Possible types of receivers
*/
const RECV_ANY = 0 ;
const RECV_NOTIFICATION = 1 ;
2021-01-29 07:57:37 +00:00
const RECV_OWNER = 2 ;
const RECV_REVIEWER = 3 ;
const RECV_APPROVER = 4 ;
const RECV_WORKFLOW = 5 ;
2021-01-28 20:08:33 +00:00
public function __construct ( $logger = null ) {
2016-03-09 16:57:38 +00:00
$this -> services = array ();
2020-12-18 13:36:51 +00:00
$this -> errors = array ();
2021-01-28 20:08:33 +00:00
$this -> logger = $logger ;
2016-03-09 16:57:38 +00:00
}
2020-12-01 17:21:18 +00:00
public function addService ( $service , $name = '' ) {
2020-12-18 13:36:51 +00:00
if ( ! $name )
$name = md5 ( uniqid ());
$this -> services [ $name ] = $service ;
$this -> errors [ $name ] = true ;
2020-12-01 17:21:18 +00:00
}
public function getServices () {
return $this -> services ;
2016-03-09 16:57:38 +00:00
}
2020-12-18 13:36:51 +00:00
public function getErrors () {
return $this -> errors ;
}
2021-01-28 20:08:33 +00:00
public function toIndividual ( $sender , $recipient , $subject , $message , $params = array (), $recvtype = 0 ) {
2020-12-18 13:36:51 +00:00
$error = true ;
2020-12-01 17:21:18 +00:00
foreach ( $this -> services as $name => $service ) {
2021-01-29 09:34:01 +00:00
/* Set $to to email address of user or the string passed in $recipient
* This is only used for logging
*/
if ( is_object ( $recipient ) && $recipient -> isType ( 'user' ) && ! $recipient -> isDisabled () && $recipient -> getEmail () != " " ) {
$to = $recipient -> getEmail ();
} elseif ( is_string ( $recipient ) && trim ( $recipient ) != " " ) {
$to = $recipient ;
} else {
$to = '' ;
}
/* Call filter of notification service if set */
2021-01-28 20:08:33 +00:00
if ( ! is_callable ([ $service , 'filter' ]) || $service -> filter ( $sender , $recipient , $subject , $message , $params , $recvtype )) {
2021-01-29 07:57:37 +00:00
if ( ! $service -> toIndividual ( $sender , $recipient , $subject , $message , $params )) {
2020-12-18 13:36:51 +00:00
$error = false ;
$this -> errors [ $name ] = false ;
2021-02-01 12:42:16 +00:00
$this -> logger -> log ( 'Notification service \'' . $name . '\': Sending notification \'' . $subject . '\' to user \'' . $to . '\' (' . $recvtype . ') failed.' , PEAR_LOG_ERR );
2020-12-18 13:36:51 +00:00
} else {
2021-02-01 12:42:16 +00:00
$this -> logger -> log ( 'Notification service \'' . $name . '\': Sending notification \'' . $subject . '\' to user \'' . $to . '\' (' . $recvtype . ') successful.' , PEAR_LOG_INFO );
2020-12-18 13:36:51 +00:00
$this -> errors [ $name ] = true ;
}
2021-01-29 09:34:01 +00:00
} else {
2021-02-01 12:42:16 +00:00
$this -> logger -> log ( 'Notification service \'' . $name . '\': Notification \'' . $subject . '\' to user \'' . $to . '\' (' . $recvtype . ') filtered out.' , PEAR_LOG_INFO );
2020-12-01 17:21:18 +00:00
}
2016-03-09 16:57:38 +00:00
}
2020-12-18 13:36:51 +00:00
return $error ;
2016-03-09 16:57:38 +00:00
}
2021-01-29 07:57:37 +00:00
/**
* Send a notification to each user of a group
*
*/
2021-01-28 20:08:33 +00:00
public function toGroup ( $sender , $groupRecipient , $subject , $message , $params = array (), $recvtype = 0 ) {
2020-12-18 13:36:51 +00:00
$error = true ;
2020-12-01 17:21:18 +00:00
foreach ( $this -> services as $name => $service ) {
2021-01-29 07:57:37 +00:00
$ret = true ;
foreach ( $groupRecipient -> getUsers () as $recipient ) {
$ret &= $this -> toIndividual ( $sender , $recipient , $subject , $message , $params , $recvtype );
}
$this -> errors [ $name ] = $ret ;
if ( ! $ret ) {
$error = false ;
2020-12-01 17:21:18 +00:00
}
2016-03-09 16:57:38 +00:00
}
2020-12-18 13:36:51 +00:00
return $error ;
2016-03-09 16:57:38 +00:00
}
2021-01-29 07:57:37 +00:00
/**
* Send a notification to a list of recipients
*
* The list of recipients may contain both email addresses and users
*
* @ param string | object $sender either an email address or a user
* @ param array $recipients list of recipients
* @ param string $subject key of translatable phrase for the subject
* @ param string $message key of translatable phrase for the message body
* @ param array $params list of parameters filled into the subject and body
* @ param int $recvtype type of receiver
* @ return boolean true on success , otherwise false
*/
2021-01-28 20:08:33 +00:00
public function toList ( $sender , $recipients , $subject , $message , $params = array (), $recvtype = 0 ) {
2020-12-18 13:36:51 +00:00
$error = true ;
2020-12-01 17:21:18 +00:00
foreach ( $this -> services as $name => $service ) {
2021-01-29 07:57:37 +00:00
$ret = true ;
foreach ( $recipients as $recipient ) {
2021-02-02 20:54:29 +00:00
$ret &= $this -> toIndividual ( $sender , $recipient , $subject , $message , $params , $recvtype );
2021-01-29 07:57:37 +00:00
}
$this -> errors [ $name ] = $ret ;
if ( ! $ret ) {
$error = false ;
2020-12-01 17:21:18 +00:00
}
2016-03-09 16:57:38 +00:00
}
2020-12-18 13:36:51 +00:00
return $error ;
2016-03-09 16:57:38 +00:00
}
}