1: <?php
2: /**
3: * Login tasks module that purges old messages in the sent-mail folder.
4: *
5: * Copyright 2001-2012 Horde LLC (http://www.horde.org/)
6: *
7: * See the enclosed file COPYING for license information (GPL). If you
8: * did not receive this file, see http://www.horde.org/licenses/gpl.
9: *
10: * @author Michael Slusarz <slusarz@horde.org>
11: * @author Jan Schneider <jan@horde.org>
12: * @category Horde
13: * @license http://www.horde.org/licenses/gpl GPL
14: * @package IMP
15: */
16: class IMP_LoginTasks_Task_PurgeSentmail extends Horde_LoginTasks_Task
17: {
18: /**
19: * Constructor.
20: */
21: public function __construct()
22: {
23: if ($this->interval = $GLOBALS['prefs']->getValue('purge_sentmail_interval')) {
24: if ($GLOBALS['prefs']->isLocked('purge_sentmail_interval')) {
25: $this->display = Horde_LoginTasks::DISPLAY_NONE;
26: }
27: } else {
28: $this->active = false;
29: }
30: }
31:
32: /**
33: * Purge old messages in the sent-mail folder.
34: *
35: * @return boolean Whether any messages were purged from the sent-mail
36: * folder.
37: */
38: public function execute()
39: {
40: global $injector, $prefs;
41:
42: $imp_message = $injector->getInstance('IMP_Message');
43:
44: /* Get the current UNIX timestamp minus the number of days specified
45: * in 'purge_sentmail_keep'. If a message has a timestamp prior to
46: * this value, it will be deleted. */
47: $del_time = new Horde_Date(time() - ($prefs->getValue('purge_sentmail_keep') * 86400));
48:
49: foreach ($this->_getFolders() as $mbox) {
50: /* Make sure the sent-mail mailbox exists. */
51: if (!$mbox->exists) {
52: continue;
53: }
54:
55: /* Open the sent-mail mailbox and get the list of messages older
56: * than 'purge_sentmail_keep' days. */
57: $query = new Horde_Imap_Client_Search_Query();
58: $query->dateSearch($del_time, Horde_Imap_Client_Search_Query::DATE_BEFORE);
59: $msg_ids = $mbox->runSearchQuery($query);
60:
61: /* Go through the message list and delete the messages. */
62: if ($imp_message->delete($msg_ids, array('nuke' => true))) {
63: $msgcount = count($msg_ids);
64: if ($msgcount == 1) {
65: $notification->push(sprintf(_("Purging 1 message from sent-mail folder %s."), $mbox->display), 'horde.message');
66: } else {
67: $notification->push(sprintf(_("Purging %d messages from sent-mail folder."), $msgcount, $mbox->display), 'horde.message');
68: }
69: }
70: }
71:
72: return true;
73: }
74:
75: /**
76: * Return information for the login task.
77: *
78: * @return string Description of what the operation is going to do during
79: * this login.
80: */
81: public function describe()
82: {
83: $mbox_list = array();
84: foreach ($this->_getFolders() as $val) {
85: $mbox_list = $val->display_html;
86: }
87:
88: return sprintf(_("All messages in the folder(s) \"%s\" older than %s days will be permanently deleted."),
89: implode(', ', $mbox_list),
90: $GLOBALS['prefs']->getValue('purge_sentmail_keep'));
91: }
92:
93: /**
94: * Returns the list of sent-mail folders.
95: *
96: * @return array All sent-mail folders (IMP_Mailbox objects).
97: */
98: protected function _getFolders()
99: {
100: return IMP_Mailbox::get($GLOBALS['injector']->getInstance('IMP_Identity')->getAllSentmailfolders());
101: }
102:
103: }
104: