Overview

Packages

  • IMP

Classes

  • IMP
  • IMP_Ajax_Addresses
  • IMP_Ajax_Application
  • IMP_Ajax_Application_Compose
  • IMP_Ajax_Application_Handler_Common
  • IMP_Ajax_Application_Handler_ComposeAttach
  • IMP_Ajax_Application_Handler_Draft
  • IMP_Ajax_Application_Handler_Dynamic
  • IMP_Ajax_Application_Handler_ImageUnblock
  • IMP_Ajax_Application_Handler_Mboxtoggle
  • IMP_Ajax_Application_Handler_Passphrase
  • IMP_Ajax_Application_Handler_Remote
  • IMP_Ajax_Application_Handler_RemotePrefs
  • IMP_Ajax_Application_Handler_Search
  • IMP_Ajax_Application_Handler_Smartmobile
  • IMP_Ajax_Application_ListMessages
  • IMP_Ajax_Application_ShowMessage
  • IMP_Ajax_Application_Viewport
  • IMP_Ajax_Application_Viewport_Error
  • IMP_Ajax_Imple_ImportEncryptKey
  • IMP_Ajax_Imple_ItipRequest
  • IMP_Ajax_Imple_PassphraseDialog
  • IMP_Ajax_Imple_VcardImport
  • IMP_Ajax_Queue
  • IMP_Api
  • IMP_Application
  • IMP_Auth
  • IMP_Basic_Base
  • IMP_Basic_Compose
  • IMP_Basic_Contacts
  • IMP_Basic_Error
  • IMP_Basic_Folders
  • IMP_Basic_Listinfo
  • IMP_Basic_Mailbox
  • IMP_Basic_Message
  • IMP_Basic_Pgp
  • IMP_Basic_Saveimage
  • IMP_Basic_Search
  • IMP_Basic_Searchbasic
  • IMP_Basic_Smime
  • IMP_Basic_Thread
  • IMP_Block_Newmail
  • IMP_Block_Summary
  • IMP_Compose
  • IMP_Compose_Attachment
  • IMP_Compose_Attachment_Linked_Metadata
  • IMP_Compose_Attachment_Metadata
  • IMP_Compose_Attachment_Storage
  • IMP_Compose_Attachment_Storage_AutoDetermine
  • IMP_Compose_Attachment_Storage_Temp
  • IMP_Compose_Attachment_Storage_VfsLinked
  • IMP_Compose_Exception
  • IMP_Compose_Exception_Address
  • IMP_Compose_HtmlSignature
  • IMP_Compose_Link
  • IMP_Compose_LinkedAttachment
  • IMP_Compose_Ui
  • IMP_Compose_View
  • IMP_Contacts
  • IMP_Contacts_Avatar_Addressbook
  • IMP_Contacts_Avatar_Gravatar
  • IMP_Contacts_Avatar_Unknown
  • IMP_Contacts_Flag_Host
  • IMP_Contacts_Image
  • IMP_Contents
  • IMP_Contents_InlineOutput
  • IMP_Contents_View
  • IMP_Crypt_Pgp
  • IMP_Crypt_Smime
  • IMP_Dynamic_AddressList
  • IMP_Dynamic_Base
  • IMP_Dynamic_Compose
  • IMP_Dynamic_Compose_Common
  • IMP_Dynamic_Helper_Base
  • IMP_Dynamic_Mailbox
  • IMP_Dynamic_Message
  • IMP_Exception
  • IMP_Factory_AuthImap
  • IMP_Factory_Compose
  • IMP_Factory_ComposeAtc
  • IMP_Factory_Contacts
  • IMP_Factory_Contents
  • IMP_Factory_Flags
  • IMP_Factory_Ftree
  • IMP_Factory_Identity
  • IMP_Factory_Imap
  • IMP_Factory_Mail
  • IMP_Factory_MailAutoconfig
  • IMP_Factory_Mailbox
  • IMP_Factory_MailboxCache
  • IMP_Factory_MailboxList
  • IMP_Factory_Maillog
  • IMP_Factory_MimeViewer
  • IMP_Factory_Pgp
  • IMP_Factory_PrefsSort
  • IMP_Factory_Quota
  • IMP_Factory_Search
  • IMP_Factory_Sentmail
  • IMP_Factory_Smime
  • IMP_Factory_Spam
  • 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_Ftree
  • IMP_Ftree_Account
  • IMP_Ftree_Account_Imap
  • IMP_Ftree_Account_Inboxonly
  • IMP_Ftree_Account_Remote
  • IMP_Ftree_Account_Vfolder
  • IMP_Ftree_Element
  • IMP_Ftree_Eltdiff
  • IMP_Ftree_Iterator
  • IMP_Ftree_Iterator_Ancestors
  • IMP_Ftree_IteratorFilter
  • IMP_Ftree_IteratorFilter_Children
  • IMP_Ftree_IteratorFilter_Containers
  • IMP_Ftree_IteratorFilter_Expanded
  • IMP_Ftree_IteratorFilter_Invisible
  • IMP_Ftree_IteratorFilter_Mailboxes
  • IMP_Ftree_IteratorFilter_Nonimap
  • IMP_Ftree_IteratorFilter_Polled
  • IMP_Ftree_IteratorFilter_Remote
  • IMP_Ftree_IteratorFilter_Special
  • IMP_Ftree_IteratorFilter_Subscribed
  • IMP_Ftree_IteratorFilter_Vfolder
  • IMP_Ftree_Prefs
  • IMP_Ftree_Prefs_Expanded
  • IMP_Ftree_Prefs_Poll
  • IMP_Ftree_Select
  • IMP_Images
  • IMP_Imap
  • IMP_Imap_Acl
  • IMP_Imap_Cache_Wrapper
  • IMP_Imap_Config
  • IMP_Imap_Exception
  • IMP_Imap_Password
  • IMP_Imap_PermanentFlags
  • IMP_Imap_Remote
  • IMP_Indices
  • IMP_Indices_Mailbox
  • 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_Pop3
  • IMP_Mailbox_List_Thread
  • IMP_Mailbox_List_Virtual
  • IMP_Mailbox_SessionCache
  • IMP_Mailbox_Ui
  • IMP_Maillog
  • IMP_Maillog_Log_Base
  • IMP_Maillog_Log_Forward
  • IMP_Maillog_Log_Mdn
  • IMP_Maillog_Log_Redirect
  • IMP_Maillog_Log_Reply
  • IMP_Maillog_Log_Replyall
  • IMP_Maillog_Log_Replylist
  • IMP_Maillog_Message
  • IMP_Maillog_Storage_Base
  • IMP_Maillog_Storage_Composite
  • IMP_Maillog_Storage_History
  • IMP_Maillog_Storage_Mdnsent
  • IMP_Maillog_Storage_Null
  • IMP_Mbox_Generate
  • IMP_Mbox_Import
  • IMP_Mbox_Size
  • IMP_Message
  • IMP_Message_Date
  • IMP_Message_Ui
  • IMP_Mime_Headers
  • IMP_Mime_Status
  • IMP_Mime_Status_RenderIssue
  • IMP_Mime_Status_RenderIssue_Display
  • 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_Minimal_Base
  • IMP_Minimal_Compose
  • IMP_Minimal_Error
  • IMP_Minimal_Folders
  • IMP_Minimal_Mailbox
  • IMP_Minimal_Message
  • IMP_Minimal_Messagepart
  • IMP_Minimal_Search
  • IMP_Notification_Event_Status
  • IMP_Notification_Handler_Decorator_ImapAlerts
  • IMP_Notification_Handler_Decorator_NewmailNotify
  • IMP_Perms
  • IMP_Prefs_AttribText
  • IMP_Prefs_Identity
  • IMP_Prefs_Sort
  • IMP_Prefs_Sort_FixedDate
  • IMP_Prefs_Sort_None
  • IMP_Prefs_Sort_Sortpref
  • IMP_Prefs_Sort_Sortpref_Locked
  • IMP_Prefs_Special_Acl
  • IMP_Prefs_Special_ComposeTemplates
  • IMP_Prefs_Special_Drafts
  • IMP_Prefs_Special_Encrypt
  • IMP_Prefs_Special_Flag
  • IMP_Prefs_Special_HtmlSignature
  • IMP_Prefs_Special_ImageReplacement
  • IMP_Prefs_Special_InitialPage
  • IMP_Prefs_Special_Mailto
  • IMP_Prefs_Special_NewmailSound
  • IMP_Prefs_Special_PgpPrivateKey
  • IMP_Prefs_Special_PgpPublicKey
  • IMP_Prefs_Special_Remote
  • IMP_Prefs_Special_Searches
  • IMP_Prefs_Special_Sentmail
  • IMP_Prefs_Special_SmimePrivateKey
  • IMP_Prefs_Special_SmimePublicKey
  • IMP_Prefs_Special_Sourceselect
  • IMP_Prefs_Special_Spam
  • IMP_Prefs_Special_SpecialMboxes
  • IMP_Prefs_Special_Trash
  • IMP_Quota
  • IMP_Quota_Hook
  • IMP_Quota_Imap
  • IMP_Quota_Null
  • IMP_Quota_Ui
  • IMP_Remote
  • IMP_Remote_Account
  • IMP_Script_Package_Autocomplete
  • IMP_Script_Package_ComposeBase
  • IMP_Script_Package_DynamicBase
  • IMP_Script_Package_Editor
  • IMP_Script_Package_Imp
  • IMP_Search
  • IMP_Search_Element
  • IMP_Search_Element_Attachment
  • IMP_Search_Element_Autogenerated
  • IMP_Search_Element_Bulk
  • IMP_Search_Element_Contacts
  • IMP_Search_Element_Daterange
  • 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_IteratorFilter
  • IMP_Search_Query
  • IMP_Search_Ui
  • IMP_Search_Vfolder
  • IMP_Search_Vfolder_Builtin
  • IMP_Search_Vfolder_Vinbox
  • IMP_Search_Vfolder_Vtrash
  • IMP_Sentmail
  • IMP_Sentmail_Mongo
  • IMP_Sentmail_Null
  • IMP_Sentmail_Sql
  • IMP_Smartmobile
  • IMP_Spam
  • IMP_Spam_Email
  • IMP_Spam_Null
  • IMP_Spam_Program
  • IMP_Test
  • IMP_Tree_Flist
  • IMP_Tree_Jquerymobile
  • IMP_Tree_Simplehtml
  • IMP_View_Subinfo

Interfaces

  • IMP_Compose_Attachment_Linked
  • IMP_Contacts_Avatar_Backend
  • IMP_Contacts_Flag_Backend
  • IMP_Spam_Base
  • Overview
  • Package
  • Class
  • Tree
  1: <?php
  2: /**
  3:  * Copyright 2000-2014 Horde LLC (http://www.horde.org/)
  4:  *
  5:  * See the enclosed file COPYING for license information (GPL). If you
  6:  * did not receive this file, see http://www.horde.org/licenses/gpl.
  7:  *
  8:  * @category  Horde
  9:  * @copyright 2000-2014 Horde LLC
 10:  * @license   http://www.horde.org/licenses/gpl GPL
 11:  * @package   IMP
 12:  */
 13: 
 14: /**
 15:  * Folder tree display for basic view.
 16:  *
 17:  * @author    Anil Madhavapeddy <avsm@horde.org>
 18:  * @author    Chuck Hagenbuch <chuck@horde.org>
 19:  * @author    Michael Slusarz <slusarz@horde.org>
 20:  * @category  Horde
 21:  * @copyright 2000-2014 Horde LLC
 22:  * @license   http://www.horde.org/licenses/gpl GPL
 23:  * @package   IMP
 24:  */
 25: class IMP_Basic_Folders extends IMP_Basic_Base
 26: {
 27:     /**
 28:      */
 29:     protected function _init()
 30:     {
 31:         global $injector, $notification, $page_output, $prefs, $registry, $session;
 32: 
 33:         /* Redirect back to the mailbox if folder use is not allowed. */
 34:         $imp_imap = $injector->getInstance('IMP_Factory_Imap')->create();
 35:         if (!$imp_imap->access(IMP_Imap::ACCESS_FOLDERS)) {
 36:             $notification->push(_("The folder view is not enabled."), 'horde.error');
 37:             Horde::url('mailbox', true)->redirect();
 38:         }
 39: 
 40:         /* Decide whether or not to show all the unsubscribed mailboxes. */
 41:         $subscribe = $prefs->getValue('subscribe');
 42:         $showAll = (!$subscribe || $session->get('imp', 'showunsub'));
 43: 
 44:         $page_output->addScriptFile('hordecore.js', 'horde');
 45:         $page_output->addScriptFile('folders.js');
 46: 
 47:         /* Get the base URL for this page. */
 48:         $folders_url = self::url()->setRaw(true);
 49: 
 50:         /* These JS defines are required by all sub-pages. */
 51:         $page_output->addInlineJsVars(array(
 52:             'ImpFolders.folders_url' => strval($folders_url),
 53:             'ImpFolders.text' => array(
 54:                 'download1' => _("All messages in the following mailbox(es) will be downloaded into one MBOX file:"),
 55:                 'download2' => _("This may take some time. Are you sure you want to continue?"),
 56:                 'oneselect' => _("Only one mailbox should be selected for this action."),
 57:                 'rename1' => _("You are renaming the mailbox:"),
 58:                 'rename2' => _("Please enter the new name:"),
 59:                 'select' => _("Please select a mailbox before you perform this action."),
 60:                 'subfolder1' => _("You are creating a subfolder to"),
 61:                 'subfolder2' => _("Please enter the name of the new mailbox:"),
 62:                 'toplevel' => _("You are creating a top-level mailbox.") . "\n" . _("Please enter the name of the new mailbox:")
 63:             )
 64:         ));
 65: 
 66:         /* Initialize the IMP_Ftree object. */
 67:         $ftree = $injector->getInstance('IMP_Ftree');
 68: 
 69:         /* $mbox_list entries are urlencoded. */
 70:         $mbox_list = isset($this->vars->mbox_list)
 71:             ? IMP_Mailbox::formFrom($this->vars->mbox_list)
 72:             : array();
 73: 
 74:         /* META refresh time (might be altered by actionID). */
 75:         $refresh_time = $prefs->getValue('refresh_time');
 76: 
 77:         /* Set up the master View object. */
 78:         $view = new Horde_View(array(
 79:             'templatePath' => IMP_TEMPLATES . '/basic/folders'
 80:         ));
 81:         $view->addHelper('FormTag');
 82:         $view->addHelper('Tag');
 83: 
 84:         $token = $session->getToken();
 85:         $view->token = $token;
 86: 
 87:         /* Run through the action handlers. */
 88:         if ($this->vars->actionID) {
 89:             try {
 90:                 $session->checkToken($this->vars->token);
 91:             } catch (Horde_Exception $e) {
 92:                 $notification->push($e);
 93:                 $this->vars->actionID = null;
 94:             }
 95:         }
 96: 
 97:         switch ($this->vars->actionID) {
 98:         case 'expand_all_folders':
 99:             $ftree->expandAll();
100:             break;
101: 
102:         case 'collapse_all_folders':
103:             $ftree->collapseAll();
104:             break;
105: 
106:         case 'rebuild_tree':
107:             $ftree->init();
108:             break;
109: 
110:         case 'expunge_mbox':
111:             if (!empty($mbox_list)) {
112:                 $injector->getInstance('IMP_Message')->expungeMailbox(array_fill_keys($mbox_list, null));
113:             }
114:             break;
115: 
116:         case 'delete_mbox':
117:             foreach ($mbox_list as $val) {
118:                 $val->delete();
119:             }
120:             break;
121: 
122:         case 'download_mbox':
123:         case 'download_mbox_zip':
124:             IMP_Contents_View::downloadUrl('mbox', array(
125:                 'actionID' => 'download_mbox',
126:                 'mbox_list' => $this->vars->mbox_list,
127:                 'type' => ($this->vars->actionID == 'download_mbox') ? 'mbox' : 'mboxzip'
128:             ))->redirect();
129:             exit;
130: 
131:         case 'import_mbox':
132:             if ($this->vars->import_mbox) {
133:                 try {
134:                     $notification->push($injector->getInstance('IMP_Mbox_Import')->import($this->vars->import_mbox, 'mbox_upload'), 'horde.success');
135:                 } catch (Horde_Exception $e) {
136:                     $notification->push($e);
137:                 }
138:                 $this->vars->actionID = null;
139:             } else {
140:                 $refresh_time = null;
141:             }
142:             break;
143: 
144:         case 'create_mbox':
145:             if (isset($this->vars->new_mailbox)) {
146:                 try {
147:                     $parent = empty($mbox_list)
148:                         ? IMP_Mailbox::get(IMP_Ftree::BASE_ELT)
149:                         : $mbox_list[0];
150:                     $new_mbox = $parent->createMailboxName($this->vars->new_mailbox);
151:                     if ($new_mbox->exists) {
152:                         $notification->push(sprintf(_("Mailbox \"%s\" already exists."), $new_mbox->display), 'horde.warning');
153:                     } else {
154:                         $new_mbox->create();
155:                     }
156:                 } catch (Horde_Exception $e) {
157:                     $notification->push($e);
158:                 }
159:             }
160:             break;
161: 
162:         case 'rename_mbox':
163:             // $old_names may be URL encoded.
164:             $old_names = array_map('trim', explode("\n", $this->vars->old_names));
165:             $new_names = array_map('trim', explode("\n", $this->vars->new_names));
166: 
167:             $iMax = count($new_names);
168:             if (!empty($new_names) &&
169:                 !empty($old_names) &&
170:                 ($iMax == count($old_names))) {
171:                 for ($i = 0; $i < $iMax; ++$i) {
172:                     $old_name = IMP_Mailbox::formFrom($old_names[$i]);
173:                     $old_ns = $old_name->namespace_info;
174:                     $new = trim($new_names[$i], $old_ns->delimiter);
175: 
176:                     /* If this is a personal namespace, then anything goes as
177:                      * far as the input. Just append the personal namespace to
178:                      * it. */
179:                     if (($old_ns->type === $old_ns::NS_PERSONAL) ||
180:                         (strlen($old_ns->name) &&
181:                          (stripos($new_names[$i], $old_ns->name) !== 0))) {
182:                         $new = $old_ns->name . $new;
183:                     }
184: 
185:                     $old_name->rename($new);
186:                 }
187:             }
188:             break;
189: 
190:         case 'subscribe_mbox':
191:         case 'unsubscribe_mbox':
192:             if (empty($mbox_list)) {
193:                 $notification->push(_("No mailboxes were specified"), 'horde.message');
194:             } else {
195:                 foreach ($mbox_list as $val) {
196:                     $val->subscribe($this->vars->actionID == 'subscribe_mbox');
197:                 }
198:             }
199:             break;
200: 
201:         case 'toggle_subscribed_view':
202:             if ($subscribe) {
203:                 $showAll = !$showAll;
204:                 $session->set('imp', 'showunsub', $showAll);
205:             }
206:             break;
207: 
208:         case 'poll_mbox':
209:             if (!empty($mbox_list)) {
210:                 $ftree->poll->addPollList($mbox_list);
211:             }
212:             break;
213: 
214:         case 'nopoll_mbox':
215:             if (!empty($mbox_list)) {
216:                 $ftree->poll->removePollList($mbox_list);
217:             }
218:             break;
219: 
220:         case 'empty_mbox':
221:             if (!empty($mbox_list)) {
222:                 $injector->getInstance('IMP_Message')->emptyMailbox($mbox_list);
223:             }
224:             break;
225: 
226:         case 'mark_mbox_seen':
227:         case 'mark_mbox_unseen':
228:             if (!empty($mbox_list)) {
229:                 $injector->getInstance('IMP_Message')->flagAllInMailbox(array('\\seen'), $mbox_list, ($this->vars->actionID == 'mark_mbox_seen'));
230:             }
231:             break;
232: 
233:         case 'delete_mbox_confirm':
234:         case 'empty_mbox_confirm':
235:             if (!empty($mbox_list)) {
236:                 $loop = array();
237:                 foreach ($mbox_list as $val) {
238:                     switch ($this->vars->actionID) {
239:                     case 'delete_mbox_confirm':
240:                         if (!$val->access_deletembox) {
241:                             $notification->push(sprintf(_("The mailbox \"%s\" may not be deleted."), $val->display), 'horde.error');
242:                             continue 2;
243:                         }
244:                         break;
245: 
246:                     case 'empty_mbox_confirm':
247:                         if (!$val->access_empty) {
248:                             $notification->push(sprintf(_("The mailbox \"%s\" may not be emptied."), $val->display), 'horde.error');
249:                             continue 2;
250:                         }
251:                         break;
252:                     }
253: 
254:                     try {
255:                         $elt_info = $imp_imap->status($val, Horde_Imap_Client::STATUS_MESSAGES);
256:                     } catch (IMP_Imap_Exception $e) {
257:                         $elt_info = null;
258:                     }
259: 
260:                     $data = array(
261:                         'name' => $val->display,
262:                         'msgs' => $elt_info ? $elt_info['messages'] : 0,
263:                         'val' => $val->form_to
264:                     );
265:                     $loop[] = $data;
266:                 }
267: 
268:                 if (!count($loop)) {
269:                     break;
270:                 }
271: 
272:                 $page_output->addScriptFile('stripe.js', 'horde');
273: 
274:                 $this->title = _("Folder Actions - Confirmation");
275: 
276:                 $v = clone $view;
277: 
278:                 if ($this->vars->actionID == 'delete_mbox_confirm') {
279:                     $v->actionID = 'delete_mbox';
280:                     $v->delete = true;
281:                 } elseif ($this->vars->actionID == 'empty_mbox_confirm') {
282:                     $v->actionID = 'empty_mbox';
283:                     $v->empty = true;
284:                 }
285:                 $v->mboxes = $loop;
286:                 $v->folders_url = $folders_url;
287: 
288:                 $this->output = $v->render('folders_confirm');
289:                 return;
290:             }
291:             break;
292: 
293:         case 'mbox_size':
294:             if (!empty($mbox_list)) {
295:                 $loop = array();
296:                 $sum = 0;
297: 
298:                 foreach ($mbox_list as $val) {
299:                     $size = $val->size;
300:                     $data = array(
301:                         'name' => $val->display,
302:                         'size' => sprintf(_("%.2fMB"), $size / (1024 * 1024)),
303:                         'sort' => $size
304:                     );
305:                     $sum += $size;
306:                     $loop[] = $data;
307:                 }
308: 
309:                 /* Prepare the topbar. */
310:                 $injector->getInstance('Horde_View_Topbar')->subinfo =
311:                     $injector->getInstance('IMP_View_Subinfo')->render();
312: 
313:                 $v = clone $view;
314: 
315:                 $v->folders_url = $folders_url;
316:                 $v->mboxes = $loop;
317:                 $v->mboxes_sum = sprintf(_("%.2fMB"), $sum / (1024 * 1024));
318: 
319:                 $page_output->addScriptFile('stripe.js', 'horde');
320:                 $page_output->addScriptFile('tables.js', 'horde');
321: 
322:                 $this->title = _("Mailbox Sizes");
323:                 $this->output = $v->render('folders_size');
324:                 return;
325:             }
326:             break;
327: 
328:         case 'search':
329:             if (!empty($mbox_list)) {
330:                 IMP_Basic_Search::url()->add(array(
331:                     'mailbox_list' => IMP_Mailbox::formTo($mbox_list),
332:                     'subfolder' => 1
333:                 ))->redirect();
334:             }
335:             break;
336:         }
337: 
338:         $this->title = _("Folder Navigator");
339: 
340:         $folders_url->add('token', $token);
341: 
342:         /* Prepare the topbar. */
343:         $injector->getInstance('Horde_View_Topbar')->subinfo =
344:             $injector->getInstance('IMP_View_Subinfo')->render();
345: 
346:         if ($session->get('imp', 'file_upload') &&
347:             ($this->vars->actionID == 'import_mbox')) {
348:             /* Prepare import template. */
349:             $v = clone $view;
350: 
351:             $v->folders_url = $folders_url;
352:             $v->import_mbox = $mbox_list[0];
353: 
354:             $this->output = $v->render('import');
355:             return;
356:         }
357: 
358:         /* Prepare the header template. */
359:         $head_view = clone $view;
360:         $head_view->folders_url = $folders_url;
361: 
362:         /* Prepare the actions template. */
363:         $actions = clone $view;
364:         $actions->addHelper('Horde_Core_View_Helper_Accesskey');
365:         $actions->addHelper('Horde_Core_View_Helper_Help');
366: 
367:         $actions->id = 0;
368: 
369:         $actions->refresh = Horde::widget(array(
370:             'title' => _("_Refresh"),
371:             'url' => $folders_url->copy()
372:         ));
373:         $actions->create_mbox = ($imp_imap->access(IMP_Imap::ACCESS_CREATEMBOX) && $imp_imap->access(IMP_Imap::ACCESS_CREATEMBOX_MAX));
374:         if ($prefs->getValue('subscribe')) {
375:             $actions->subscribe = true;
376:             $subToggleText = $showAll
377:                 ? _("Hide Unsubscribed")
378:                 : _("Show All");
379:             $actions->toggle_subscribe = Horde::widget(array(
380:                 'url' => $folders_url->copy()->add(array(
381:                     'actionID' => 'toggle_subscribed_view',
382:                     'token' => $token
383:                 )),
384:                 'title' => $subToggleText,
385:                 'nocheck' => true
386:             ));
387:         }
388:         $actions->nav_poll = (!$prefs->isLocked('nav_poll') && !$prefs->getValue('nav_poll_all'));
389:         $actions->notrash = !$prefs->getValue('use_trash');
390:         $actions->file_upload = $session->get('imp', 'file_upload');
391:         $actions->expand_all = Horde::widget(array(
392:             'url' => $folders_url->copy()->add(array(
393:                 'actionID' => 'expand_all_folders',
394:                 'token' => $token
395:             )),
396:             'title' => _("Expand All"),
397:             'nocheck' => true
398:         ));
399:         $actions->collapse_all = Horde::widget(array(
400:             'url' => $folders_url->copy()->add(array(
401:                 'actionID' => 'collapse_all_folders',
402:                 'token' => $token
403:             )),
404:             'title' => _("Collapse All"),
405:             'nocheck' => true
406:         ));
407: 
408:         /* Build the folder tree. */
409:         $iterator = new IMP_Ftree_IteratorFilter($ftree);
410:         $iterator->add(array($iterator::REMOTE, $iterator::VFOLDER));
411:         if ($showAll) {
412:             $ftree->loadUnsubscribed();
413:             $iterator->remove($iterator::UNSUB);
414:         }
415:         $tree = $ftree->createTree('imp_folders', array(
416:             'checkbox' => true,
417:             'editvfolder' => true,
418:             'iterator' => $iterator,
419:             'poll_info' => true
420:         ));
421: 
422:         $displayNames = $fullNames = array();
423: 
424:         foreach ($ftree as $val) {
425:             $mbox_ob = $val->mbox_ob;
426:             $tmp = $displayNames[] = $mbox_ob->display;
427: 
428:             $tmp2 = $mbox_ob->display_notranslate;
429:             if ($tmp != $tmp2) {
430:                 $fullNames[strval($val)] = $tmp2;
431:             }
432:         }
433: 
434:         $page_output->addInlineJsVars(array(
435:             'ImpFolders.ajax' => $registry->getServiceLink('ajax', 'imp')->url,
436:             'ImpFolders.displayNames' => $displayNames,
437:             'ImpFolders.fullNames' => $fullNames,
438:             '-ImpFolders.mbox_expand' => intval($prefs->getValue('nav_expanded') == 2)
439:         ));
440: 
441:         $page_output->metaRefresh($refresh_time, $this->url());
442: 
443:         Horde::startBuffer();
444:         $tree->renderTree();
445:         $this->output = $head_view->render('head') .
446:             $actions->render('actions') .
447:             Horde::endBuffer();
448: 
449:         if (count($tree) > 10) {
450:             $actions->id = 1;
451:             $this->output .= $actions->render('actions');
452:         }
453: 
454:         /* No need for extra template - close out the tags here. */
455:         $this->output .= '</form>';
456:     }
457: 
458:     /**
459:      */
460:     public static function url(array $opts = array())
461:     {
462:         return Horde::url('basic.php')->add('page', 'folders');
463:     }
464: 
465: }
466: 
API documentation generated by ApiGen