seeddms-code/inc/inc.ClassNotificationService.php

141 lines
3.9 KiB
PHP
Raw Normal View History

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;
/*
* Service for logging
*/
protected $logger;
/*
* Possible types of receivers
*/
const RECV_ANY = 0;
const RECV_NOTIFICATION = 1;
const RECV_OWNER = 2;
const RECV_REVIEWER = 3;
const RECV_APPROVER = 4;
const RECV_WORKFLOW = 5;
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();
$this->logger = $logger;
2016-03-09 16:57:38 +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;
}
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;
}
public function toIndividual($sender, $recipient, $subject, $message, $params=array(), $recvtype=0) {
2020-12-18 13:36:51 +00:00
$error = true;
foreach($this->services as $name => $service) {
if(!is_callable([$service, 'filter']) || $service->filter($sender, $recipient, $subject, $message, $params, $recvtype)) {
if(is_object($recipient) && ($dms = $recipient->getDMS()) && !strcasecmp(get_class($recipient), $dms->getClassname('user')) && !$recipient->isDisabled() && $recipient->getEmail()!="") {
$to = $recipient->getEmail();
} elseif(is_string($recipient) && trim($recipient) != "") {
$to = $recipient;
}
if(!$service->toIndividual($sender, $recipient, $subject, $message, $params)) {
2020-12-18 13:36:51 +00:00
$error = false;
$this->errors[$name] = false;
$this->logger->log('Notification service: '.$name.'. Sending mail \''.$subject.'\' to user \''.$to.'\' failed.', PEAR_LOG_ERR);
2020-12-18 13:36:51 +00:00
} else {
$this->logger->log('Notification service: '.$name.'. Sending mail \''.$subject.'\' to user \''.$to.'\' successful.', PEAR_LOG_INFO);
2020-12-18 13:36:51 +00:00
$this->errors[$name] = true;
}
}
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
}
/**
* Send a notification to each user of a group
*
*/
public function toGroup($sender, $groupRecipient, $subject, $message, $params=array(), $recvtype=0) {
2020-12-18 13:36:51 +00:00
$error = true;
foreach($this->services as $name => $service) {
$ret = true;
foreach ($groupRecipient->getUsers() as $recipient) {
$ret &= $this->toIndividual($sender, $recipient, $subject, $message, $params, $recvtype);
}
$this->errors[$name] = $ret;
if(!$ret) {
$error = false;
}
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
}
/**
* 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
*/
public function toList($sender, $recipients, $subject, $message, $params=array(), $recvtype=0) {
2020-12-18 13:36:51 +00:00
$error = true;
foreach($this->services as $name => $service) {
$ret = true;
foreach ($recipients as $recipient) {
$ret &= $this->toIndividual($sender, $recipients, $subject, $message, $params, $recvtype);
}
$this->errors[$name] = $ret;
if(!$ret) {
$error = false;
}
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
}
}