1: <?php
2: /**
3: * The IMP_Sentmail_Base:: class is the abstract class that all driver
4: * implementations inherit from.
5: *
6: * Copyright 2010-2012 Horde LLC (http://www.horde.org/)
7: *
8: * See the enclosed file COPYING for license information (GPL). If you
9: * did not receive this file, see http://www.horde.org/licenses/gpl.
10: *
11: * @author Jan Schneider <jan@horde.org>
12: * @author Michael Slusarz <slusarz@horde.org>
13: * @category Horde
14: * @package IMP
15: */
16: abstract class IMP_Sentmail_Base
17: {
18: /**
19: * Hash containing configuration parameters.
20: *
21: * @var array
22: */
23: protected $_params = array();
24:
25: /**
26: * Constructor.
27: *
28: * @param array $params Configuration parameters the driver needs.
29: *
30: * @throws IMP_Exception
31: */
32: public function __construct(array $params = array())
33: {
34: $this->_params = array_merge($this->_params, $params);
35: }
36:
37: /**
38: * Logs an attempt to send a message.
39: *
40: * @param integer $action Why the message was sent (IMP_Sentmail
41: * constant).
42: * @param string $message_id The Message-ID.
43: * @param string|array $recipients The list of message recipients.
44: * @param boolean $success Whether the attempt was successful.
45: */
46: public function log($action, $message_id, $recipients, $success = true)
47: {
48: if (!is_array($recipients)) {
49: $recipients = array($recipients);
50: }
51:
52: foreach ($recipients as $addresses) {
53: $addresses = Horde_Mime_Address::bareAddress($addresses, $GLOBALS['session']->get('imp', 'maildomain'), true);
54: foreach ($addresses as $recipient) {
55: $this->_log($action, $message_id, $recipient, $success);
56: }
57: }
58: }
59:
60: /**
61: * Garbage collect log entries.
62: */
63: public function gc()
64: {
65: $this->_deleteOldEntries(time() - ((isset($this->_params['threshold']) ? $this->_params['threshold'] : 0) * 86400));
66: }
67:
68: /**
69: * Logs an attempt to send a message per recipient.
70: *
71: * @param integer $action Why the message was sent (IMP_Sentmail
72: * constant).
73: * @param string $message_id The Message-ID.
74: * @param string $recipients A message recipient.
75: * @param boolean $success Whether the attempt was successful.
76: */
77: abstract protected function _log($action, $message_id, $recipient,
78: $success);
79:
80: /**
81: * Returns the favourite recipients.
82: *
83: * @param integer $limit Return this number of recipients.
84: * @param mixed $filter A list of messages types that should be
85: * returned. Null returns all message types.
86: *
87: * @return array A list with the $limit most favourite recipients.
88: * @throws IMP_Exception
89: */
90: abstract public function favouriteRecipients($limit, $filter = null);
91:
92: /**
93: * Returns the number of recipients within a certain time period.
94: *
95: * @param integer $hours Time period in hours.
96: * @param boolean $user Return the number of recipients for the current
97: * user?
98: *
99: * @return integer The number of recipients in the given time period.
100: * @throws IMP_Exception
101: */
102: abstract public function numberOfRecipients($hours, $user = false);
103:
104: /**
105: * Deletes all log entries older than a certain date.
106: *
107: * @param integer $before Unix timestamp before that all log entries
108: * should be deleted.
109: */
110: abstract protected function _deleteOldEntries($before);
111:
112: }
113: