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 contains code related to generating and handling a mailbox
  4:  * message list.  This class will keep track of the current index within
  5:  * a mailbox.
  6:  *
  7:  * Copyright 2010-2012 Horde LLC (http://www.horde.org/)
  8:  *
  9:  * See the enclosed file COPYING for license information (GPL). If you
 10:  * did not receive this file, see http://www.horde.org/licenses/gpl.
 11:  *
 12:  * @author   Michael Slusarz <slusarz@horde.org>
 13:  * @category Horde
 14:  * @license  http://www.horde.org/licenses/gpl GPL
 15:  * @package  IMP
 16:  */
 17: class IMP_Mailbox_List_Track extends IMP_Mailbox_List
 18: {
 19:     /**
 20:      * Check the IMAP cache ID?
 21:      *
 22:      * @var boolean
 23:      */
 24:     public $checkcache = true;
 25: 
 26:     /**
 27:      * The IMAP cache ID of the mailbox.
 28:      *
 29:      * @var string
 30:      */
 31:     protected $_cacheid = null;
 32: 
 33:     /**
 34:      * The location in the sorted array we are at.
 35:      *
 36:      * @var integer
 37:      */
 38:     protected $_index = null;
 39: 
 40:     /**
 41:      * The list of additional variables to serialize.
 42:      *
 43:      * @var array
 44:      */
 45:     protected $_slist = array('_cacheid', '_index');
 46: 
 47:     /**
 48:      * Returns the current message array index. If the array index has
 49:      * run off the end of the message array, will return the last index.
 50:      *
 51:      * @return integer  The message array index.
 52:      */
 53:     public function getMessageIndex()
 54:     {
 55:         return $this->isValidIndex()
 56:             ? ($this->_index + 1)
 57:             : 1;
 58:     }
 59: 
 60:     /**
 61:      * Checks to see if the current index is valid.
 62:      *
 63:      * @return boolean  True if index is valid, false if not.
 64:      */
 65:     public function isValidIndex()
 66:     {
 67:         return !is_null($this->_index);
 68:     }
 69: 
 70:     /**
 71:      * Returns IMAP mbox/UID information on a message.
 72:      *
 73:      * @param integer $offset  The offset from the current message.
 74:      *
 75:      * @return array  Array with the following entries:
 76:      * <pre>
 77:      * 'mailbox' - (IMP_Mailbox) The mailbox.
 78:      * 'uid' - (integer) The message UID.
 79:      * </pre>
 80:      */
 81:     public function getIMAPIndex($offset = 0)
 82:     {
 83:         $index = $this->_index + $offset;
 84: 
 85:         return isset($this->_sorted[$index])
 86:             ? array(
 87:                   'mailbox' => isset($this->_sortedMbox[$index]) ? IMP_Mailbox::get($this->_sortedMbox[$index]) : $this->_mailbox,
 88:                   'uid' => $this->_sorted[$index]
 89:               )
 90:             : array();
 91:     }
 92: 
 93:     /**
 94:      * Using the preferences and the current mailbox, determines the messages
 95:      * to view on the current page.
 96:      */
 97:     public function buildMailboxPage($page = 0, $start = 0, $opts = array())
 98:     {
 99:         $ret = parent::buildMailboxPage($page, $start, $opts);
100: 
101:         if (!$this->_mailbox->search) {
102:             $ret['index'] = $this->_index;
103:         }
104: 
105:         return $ret;
106:     }
107: 
108:     /**
109:      * Updates the message array index.
110:      *
111:      * @param mixed $data  If an integer, the number of messages to increase
112:      *                     array index by. If an indices object, sets array
113:      *                     index to the index value. If null, rebuilds the
114:      *                     internal index.
115:      */
116:     public function setIndex($data)
117:     {
118:         if ($data instanceof IMP_Indices) {
119:             list($mailbox, $uid) = $data->getSingle();
120:             $this->_index = $this->getArrayIndex($uid, $mailbox);
121:             if (is_null($this->_index)) {
122:                 $this->_rebuild(true);
123:                 $this->_index = $this->getArrayIndex($uid, $mailbox);
124:             }
125:         } elseif (is_null($data)) {
126:             $this->_index = null;
127:             $this->_rebuild(true);
128:         } else {
129:             $index = $this->_index += $data;
130:             if (isset($this->_sorted[$this->_index])) {
131:                 $this->_rebuild();
132:             } else {
133:                 $this->_rebuild(true);
134:                 $this->_index = isset($this->_sorted[$index])
135:                     ? $index
136:                     : null;
137:             }
138:         }
139:     }
140: 
141:     /**
142:      */
143:     protected function _buildMailbox()
144:     {
145:         $cacheid = $this->_mailbox->cacheid;
146: 
147:         /* Check cache ID: will catch changes to the mailbox after coming out
148:          * of message view mode. */
149:         if (!$this->isBuilt() ||
150:             ($this->checkcache && ($this->_cacheid != $cacheid))) {
151:             $this->_sorted = null;
152:             $this->_cacheid = $cacheid;
153:             parent::_buildMailbox();
154:         }
155:     }
156: 
157:     /**
158:      */
159:     protected function _rebuild($force = false)
160:     {
161:         if ($force ||
162:             (!is_null($this->_index) && !$this->getIMAPIndex(1))) {
163:             $this->_sorted = null;
164:             $this->_buildMailbox();
165:         }
166:     }
167: 
168:     /**
169:      */
170:     public function removeMsgs($indices)
171:     {
172:         if (parent::removeMsgs($indices)) {
173:             /* Update the current array index to its new position in the
174:              * message array. */
175:             $this->setIndex(0);
176: 
177:             return true;
178:         }
179: 
180:         return false;
181:     }
182: 
183: }
184: 
API documentation generated by ApiGen