Overview

Packages

  • IMP
  • None

Classes

  • IMP
  • IMP_Ajax_Application
  • IMP_Ajax_Imple_ContactAutoCompleter
  • IMP_Ajax_Imple_PassphraseDialog
  • IMP_Ajax_Queue
  • IMP_Api
  • IMP_Auth
  • IMP_Block_Newmail
  • IMP_Block_Summary
  • IMP_Compose
  • IMP_Compose_Exception
  • IMP_Compose_Stationery
  • IMP_Contents
  • IMP_Crypt_Pgp
  • IMP_Crypt_Smime
  • IMP_Dimp
  • IMP_Exception
  • IMP_Factory_AuthImap
  • IMP_Factory_Compose
  • IMP_Factory_Contents
  • IMP_Factory_Flags
  • IMP_Factory_Identity
  • IMP_Factory_Imap
  • IMP_Factory_Imaptree
  • IMP_Factory_Mail
  • IMP_Factory_Mailbox
  • IMP_Factory_MailboxList
  • IMP_Factory_MimeViewer
  • IMP_Factory_Pgp
  • IMP_Factory_Quota
  • IMP_Factory_Search
  • IMP_Factory_Sentmail
  • IMP_Factory_Smime
  • IMP_Filter
  • IMP_Flag_Base
  • IMP_Flag_Imap
  • IMP_Flag_Imap_Answered
  • IMP_Flag_Imap_Deleted
  • IMP_Flag_Imap_Draft
  • IMP_Flag_Imap_Flagged
  • IMP_Flag_Imap_Forwarded
  • IMP_Flag_Imap_Junk
  • IMP_Flag_Imap_NotJunk
  • IMP_Flag_Imap_Seen
  • IMP_Flag_System_Attachment
  • IMP_Flag_System_Encrypted
  • IMP_Flag_System_HighPriority
  • IMP_Flag_System_List
  • IMP_Flag_System_LowPriority
  • IMP_Flag_System_Match_Address
  • IMP_Flag_System_Match_Flag
  • IMP_Flag_System_Match_Header
  • IMP_Flag_System_Personal
  • IMP_Flag_System_Signed
  • IMP_Flag_System_Unseen
  • IMP_Flag_User
  • IMP_Flags
  • IMP_Imap
  • IMP_Imap_Acl
  • IMP_Imap_Exception
  • IMP_Imap_PermanentFlags
  • IMP_Imap_Thread
  • IMP_Imap_Tree
  • IMP_Indices
  • IMP_Indices_Form
  • IMP_LoginTasks_SystemTask_GarbageCollection
  • IMP_LoginTasks_SystemTask_Upgrade
  • IMP_LoginTasks_SystemTask_UpgradeAuth
  • IMP_LoginTasks_Task_Autocreate
  • IMP_LoginTasks_Task_DeleteAttachmentsMonthly
  • IMP_LoginTasks_Task_DeleteSentmailMonthly
  • IMP_LoginTasks_Task_FilterOnLogin
  • IMP_LoginTasks_Task_PurgeSentmail
  • IMP_LoginTasks_Task_PurgeSpam
  • IMP_LoginTasks_Task_PurgeTrash
  • IMP_LoginTasks_Task_RecoverDraft
  • IMP_LoginTasks_Task_RenameSentmailMonthly
  • IMP_Mailbox
  • IMP_Mailbox_List
  • IMP_Mailbox_List_Track
  • IMP_Maillog
  • IMP_Menu_Dimp
  • IMP_Message
  • IMP_Mime_Status
  • IMP_Mime_Viewer_Alternative
  • IMP_Mime_Viewer_Appledouble
  • IMP_Mime_Viewer_Audio
  • IMP_Mime_Viewer_Enriched
  • IMP_Mime_Viewer_Externalbody
  • IMP_Mime_Viewer_Html
  • IMP_Mime_Viewer_Images
  • IMP_Mime_Viewer_Itip
  • IMP_Mime_Viewer_Mdn
  • IMP_Mime_Viewer_Partial
  • IMP_Mime_Viewer_Pdf
  • IMP_Mime_Viewer_Pgp
  • IMP_Mime_Viewer_Plain
  • IMP_Mime_Viewer_Related
  • IMP_Mime_Viewer_Rfc822
  • IMP_Mime_Viewer_Smil
  • IMP_Mime_Viewer_Smime
  • IMP_Mime_Viewer_Status
  • IMP_Mime_Viewer_Vcard
  • IMP_Mime_Viewer_Video
  • IMP_Mime_Viewer_Zip
  • IMP_Notification_Event_Status
  • IMP_Notification_Handler_Decorator_ImapAlerts
  • IMP_Notification_Handler_Decorator_NewmailNotify
  • IMP_Notification_Listener_AjaxStatus
  • Imp_Prefs_Identity
  • IMP_Prefs_Ui
  • IMP_Quota
  • IMP_Quota_Base
  • IMP_Quota_Command
  • IMP_Quota_Hook
  • IMP_Quota_Imap
  • IMP_Quota_Maildir
  • IMP_Quota_Mdaemon
  • IMP_Quota_Mercury32
  • IMP_Quota_Null
  • IMP_Quota_Sql
  • IMP_Search
  • IMP_Search_Element
  • IMP_Search_Element_Attachment
  • IMP_Search_Element_Autogenerated
  • IMP_Search_Element_Bulk
  • IMP_Search_Element_Contacts
  • IMP_Search_Element_Date
  • IMP_Search_Element_Flag
  • IMP_Search_Element_Header
  • IMP_Search_Element_Mailinglist
  • IMP_Search_Element_Or
  • IMP_Search_Element_Personal
  • IMP_Search_Element_Recipient
  • IMP_Search_Element_Size
  • IMP_Search_Element_Text
  • IMP_Search_Element_Within
  • IMP_Search_Filter
  • IMP_Search_Filter_Attachment
  • IMP_Search_Filter_Autogenerated
  • IMP_Search_Filter_Builtin
  • IMP_Search_Filter_Bulk
  • IMP_Search_Filter_Contacts
  • IMP_Search_Filter_Mailinglist
  • IMP_Search_Filter_Personal
  • IMP_Search_Query
  • IMP_Search_Vfolder
  • IMP_Search_Vfolder_Builtin
  • IMP_Search_Vfolder_Vinbox
  • IMP_Search_Vfolder_Vtrash
  • IMP_Sentmail
  • IMP_Sentmail_Base
  • IMP_Sentmail_Null
  • IMP_Sentmail_Sql
  • IMP_Spam
  • IMP_Test
  • IMP_Tree_Flist
  • IMP_Tree_Jquerymobile
  • IMP_Tree_Simplehtml
  • IMP_Ui_Compose
  • IMP_Ui_Editor
  • IMP_Ui_Folder
  • IMP_Ui_Headers
  • IMP_Ui_Imageview
  • IMP_Ui_Mailbox
  • IMP_Ui_Message
  • IMP_Ui_Mimp
  • IMP_Ui_Search
  • IMP_Views_Compose
  • IMP_Views_ListMessages
  • IMP_Views_ShowMessage
  • Overview
  • Package
  • Class
  • Tree
  1: <?php
  2: /**
  3:  * This class provides a place to store common code shared among IMP's various
  4:  * UI views for folder manipulation.
  5:  *
  6:  * Copyright 2011-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   Michael Slusarz <slusarz@horde.org>
 12:  * @category Horde
 13:  * @license  http://www.horde.org/licenses/gpl GPL
 14:  * @package  IMP
 15:  */
 16: class IMP_Ui_Folder
 17: {
 18:     /**
 19:      * Download folder(s) into a MBOX file.
 20:      *
 21:      * @param array $flist  The folder list.
 22:      * @param boolean $zip  Compress with zip?
 23:      *
 24:      * @throws Horde_Exception
 25:      */
 26:     public function downloadMbox($flist, $zip = false)
 27:     {
 28:         global $browser, $injector;
 29: 
 30:         $mbox = $this->generateMbox($flist);
 31: 
 32:         if ($zip) {
 33:             $horde_compress = Horde_Compress::factory('zip');
 34:             try {
 35:                 $data = $horde_compress->compress(array(array(
 36:                     'data' => $mbox,
 37:                     'name' => reset($flist) . '.mbox'
 38:                 )), array(
 39:                     'stream' => true
 40:                 ));
 41:                 fclose($mbox);
 42:             } catch (Horde_Exception $e) {
 43:                 fclose($mbox);
 44:                 throw $e;
 45:             }
 46: 
 47:             $suffix = '.zip';
 48:             $type = 'application/zip';
 49:         } else {
 50:             $data = $mbox;
 51:             $suffix = '.mbox';
 52:             $type = null;
 53:         }
 54: 
 55:         fseek($data, 0, SEEK_END);
 56:         $browser->downloadHeaders(reset($flist) . $suffix, $type, false, ftell($data));
 57: 
 58:         rewind($data);
 59:         while (!feof($data)) {
 60:             echo fread($data, 8192);
 61:         }
 62:         fclose($data);
 63:         exit;
 64:     }
 65: 
 66:     /**
 67:      * Generates a string that can be saved out to an mbox format mailbox file
 68:      * for a folder or set of folders, optionally including all subfolders of
 69:      * the selected folders as well. All folders will be put into the same
 70:      * string.
 71:      *
 72:      * @author Didi Rieder <adrieder@sbox.tugraz.at>
 73:      *
 74:      * @param array $folder_list  A list of folder names to generate a mbox
 75:      *                            file for (UTF7-IMAP).
 76:      *
 77:      * @return resource  A stream resource containing the text of a mbox
 78:      *                   format mailbox file.
 79:      */
 80:     public function generateMbox($folder_list)
 81:     {
 82:         $body = fopen('php://temp', 'r+');
 83: 
 84:         if (empty($folder_list)) {
 85:             return $body;
 86:         }
 87: 
 88:         $imp_imap = $GLOBALS['injector']->getInstance('IMP_Factory_Imap')->create();
 89: 
 90:         foreach ($folder_list as $folder) {
 91:             try {
 92:                 $status = $imp_imap->status($folder, Horde_Imap_Client::STATUS_MESSAGES);
 93:             } catch (IMP_Imap_Exception $e) {
 94:                 continue;
 95:             }
 96: 
 97:             $query = new Horde_Imap_Client_Fetch_Query();
 98:             $query->size();
 99: 
100:             try {
101:                 $size = $imp_imap->fetch($folder, $query, array(
102:                     'ids' => $imp_imap->getIdsOb(Horde_Imap_Client_Ids::ALL, true)
103:                 ));
104:             } catch (IMP_Imap_Exception $e) {
105:                 continue;
106:             }
107: 
108:             $curr_size = 0;
109:             $start = 1;
110:             $slices = array();
111: 
112:             /* Handle 5 MB chunks of data at a time. */
113:             for ($i = 1; $i <= $status['messages']; ++$i) {
114:                 $curr_size += $size[$i]->getSize();
115:                 if ($curr_size > 5242880) {
116:                     $slices[] = $imp_imap->getIdsOb(range($start, $i), true);
117:                     $curr_size = 0;
118:                     $start = $i + 1;
119:                 }
120:             }
121: 
122:             if ($start <= $status['messages']) {
123:                 $slices[] = $imp_imap->getIdsOb(range($start, $status['messages']), true);
124:             }
125: 
126:             unset($size);
127: 
128:             $query = new Horde_Imap_Client_Fetch_Query();
129:             $query->envelope();
130:             $query->imapDate();
131:             $query->fullText(array(
132:                 'peek' => true
133:             ));
134: 
135:             foreach ($slices as $slice) {
136:                 try {
137:                     $res = $imp_imap->fetch($folder, $query, array(
138:                         'ids' => $slice
139:                     ));
140:                 } catch (IMP_Imap_Exception $e) {
141:                     continue;
142:                 }
143: 
144:                 reset($res);
145:                 while (list(,$ptr) = each($res)) {
146:                     $from = '<>';
147:                     if ($from_env = $ptr->getEnvelope()->from) {
148:                         $ptr2 = reset($from_env);
149:                         if (!empty($ptr2['mailbox']) && !empty($ptr2['host'])) {
150:                             $from = $ptr2['mailbox']. '@' . $ptr2['host'];
151:                         }
152:                     }
153: 
154:                     /* We need this long command since some MUAs (e.g. pine)
155:                      * require a space in front of single digit days. */
156:                     $imap_date = $ptr->getImapDate();
157:                     $date = sprintf('%s %2s %s', $imap_date->format('D M'), $imap_date->format('j'), $imap_date->format('H:i:s Y'));
158:                     fwrite($body, 'From ' . $from . ' ' . $date . "\r\n");
159:                     stream_copy_to_stream($ptr->getFullMsg(true), $body);
160:                     fwrite($body, "\r\n");
161:                 }
162:             }
163:         }
164: 
165:         return $body;
166:     }
167: 
168:     /**
169:      * Import a MBOX file into a mailbox.
170:      *
171:      * @param string $mbox       The mailbox name to import into.
172:      * @param string $form_name  The form field name that contains the MBOX
173:      *                           data.
174:      *
175:      * @return string  Notification message.
176:      * @throws Horde_Exception
177:      */
178:     public function importMbox($mbox, $form_name)
179:     {
180:         $GLOBALS['browser']->wasFileUploaded($form_name, _("mailbox file"));
181: 
182:         $mbox = IMP_Mailbox::get(Horde_String::convertCharset($mbox, 'UTF-8', 'UTF7-IMAP'));
183:         $res = $mbox->importMbox($_FILES[$form_name]['tmp_name'], $_FILES[$form_name]['type']);
184:         $mbox_name = basename(Horde_Util::dispelMagicQuotes($_FILES[$form_name]['name']));
185: 
186:         if ($res === false) {
187:             throw new IMP_Exception(sprintf(_("There was an error importing %s."), $mbox_name));
188:         }
189: 
190:         return sprintf(ngettext('Imported %d message from %s.', 'Imported %d messages from %s', $res), $res, $mbox_name);
191:     }
192: 
193: }
194: 
API documentation generated by ApiGen