1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
15: class IMP_LoginTasks_Task_DeleteSentmailMonthly extends Horde_LoginTasks_Task
16: {
17: 18: 19:
20: public function __construct()
21: {
22: if (($this->active = $GLOBALS['prefs']->getValue('delete_sentmail_monthly_keep')) &&
23: $GLOBALS['prefs']->isLocked('delete_sentmail_monthly_keep')) {
24: $this->display = Horde_LoginTasks::DISPLAY_NONE;
25: }
26: }
27:
28: 29: 30: 31: 32:
33: public function execute()
34: {
35: 36: 37:
38: $identity = $GLOBALS['injector']->getInstance('IMP_Identity');
39: $sent_mail_folders = $identity->getAllSentmailFolders();
40:
41: $imaptree = $GLOBALS['injector']->getInstance('IMP_Imap_Tree');
42: $imaptree->setIteratorFilter(IMP_Imap_Tree::FLIST_NOCONTAINER);
43:
44: $folder_array = array();
45:
46: foreach ($imaptree as $k => $v) {
47: foreach ($sent_mail_folders as $folder) {
48: if (preg_match('/^' . str_replace('/', '\/', $folder) . '-([^-]+)-([0-9]{4})$/i', $k, $regs)) {
49: $folder_array[$k] = Horde_String::convertCharset((is_numeric($regs[1])) ? mktime(0, 0, 0, $regs[1], 1, $regs[2]) : strtotime("$regs[1] 1, $regs[2]"), 'UTF-8', 'UTF7-IMAP');
50: }
51: }
52: }
53: arsort($folder_array, SORT_NUMERIC);
54:
55: $return_val = false;
56:
57:
58: $purge_folders = array_slice(array_keys($folder_array), $GLOBALS['prefs']->getValue('delete_sentmail_monthly_keep'));
59: if (count($purge_folders)) {
60: $GLOBALS['notification']->push(_("Old sent-mail folders being purged."), 'horde.message');
61:
62:
63: foreach (IMP_Mailbox::get($purge_folders) as $val) {
64: if ($val->delete(true)) {
65: $return_val = true;
66: }
67: }
68: }
69:
70: return $return_val;
71: }
72:
73: 74: 75: 76: 77: 78:
79: public function describe()
80: {
81: return sprintf(_("All old sent-mail folders more than %s months old will be deleted."), $GLOBALS['prefs']->getValue('delete_sentmail_monthly_keep'));
82: }
83:
84: }
85: