0011960: print with 300 dpi by default
[tine20] / tine20 / Tinebase / Notification.php
1 <?php
2 /**
3  * Tine 2.0
4  *
5  * @package     Tinebase
6  * @subpackage  Notification
7  * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
8  * @copyright   Copyright (c) 2007-2011 Metaways Infosystems GmbH (http://www.metaways.de)
9  * @author      Lars Kneschke <l.kneschke@metaways.de>
10  */
11
12 /**
13  * primary class to handle notifications
14  *
15  * @package     Tinebase
16  * @subpackage  Notification
17  */
18 class Tinebase_Notification
19 {
20     protected $_smtpBackend;
21     
22     /**
23      * the constructor
24      *
25      * don't use the constructor. use the singleton 
26      */
27     private function __construct() {
28         $this->_smtpBackend = Tinebase_Notification_Factory::getBackend(Tinebase_Notification_Factory::SMTP);
29     }
30     
31     /**
32      * don't clone. Use the singleton.
33      *
34      */
35     private function __clone() {}
36
37     /**
38      * holds the instance of the singleton
39      *
40      * @var Adressbook_Controller
41      */
42     private static $_instance = NULL;
43     
44     /**
45      * the singleton pattern
46      *
47      * @return Tinebase_Notification
48      */
49     public static function getInstance() 
50     {
51         if (self::$_instance === NULL) {
52             self::$_instance = new Tinebase_Notification();
53         }
54         
55         return self::$_instance;
56     }
57     
58     /**
59      * send notifications to a list a recipients
60      *
61      * @param Tinebase_Model_FullUser   $_updater
62      * @param array                     $_recipients array of int|Addressbook_Model_Contact
63      * @param string                    $_subject
64      * @param string                    $_messagePlain
65      * @param string                    $_messageHtml
66      * @param string|array              $_attachments
67      * @throws Tinebase_Exception
68      * 
69      * @todo improve exception handling: collect all messages / exceptions / failed email addresses / ...
70      */
71     public function send($_updater, $_recipients, $_subject, $_messagePlain, $_messageHtml = NULL, $_attachments = NULL)
72     {
73         $contactsBackend = Addressbook_Backend_Factory::factory(Addressbook_Backend_Factory::SQL);
74         
75         $exception = NULL;
76         $sentContactIds = array();
77         foreach ($_recipients as $recipient) {
78             try {
79                 if (! $recipient instanceof Addressbook_Model_Contact) {
80                     $recipient = $contactsBackend->get($recipient);
81                 }
82                 if (! in_array($recipient->getId(), $sentContactIds)) {
83                     $this->_smtpBackend->send($_updater, $recipient, $_subject, $_messagePlain, $_messageHtml, $_attachments);
84                     $sentContactIds[] = $recipient->getId();
85                 }
86             } catch (Exception $e) {
87                 $exception = $e;
88                 if (Tinebase_Core::isLogLevel(Zend_Log::NOTICE)) Tinebase_Core::getLogger()->notice(__METHOD__ . '::' . __LINE__
89                     . ' Failed to send notification message (recipient: '
90                     . ($recipient instanceof Addressbook_Model_Contact ? $recipient->email : $recipient) . '. Exception: ' . $e);
91             }
92         }
93         
94         if ($exception !== NULL) {
95             // throw exception in the end when all recipients have been processed
96             throw $exception;
97         }
98     }
99 }