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:  * The IMP_Imap_Thread class provides functions to manipulate threaded sorts
  4:  * of messages.
  5:  *
  6:  * Copyright 2005-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_Imap_Thread
 17: {
 18:     /**
 19:      * The thread data object.
 20:      *
 21:      * @var Horde_Imap_Client_Data_Thread
 22:      */
 23:     protected $_thread;
 24: 
 25:     /**
 26:      * Constructor.
 27:      *
 28:      * @param Horde_Imap_Client_Data_Thread $thread  The thread data object.
 29:      */
 30:     public function __construct($thread)
 31:     {
 32:         $this->_thread = $thread;
 33:     }
 34: 
 35:     /**
 36:      * Generate the thread representation for the given index list in the
 37:      * internal format.
 38:      *
 39:      * @param array $indices    The list of indices to create a tree for.
 40:      * @param boolean $sortdir  True for newest first, false for oldest first.
 41:      *
 42:      * @return array  An array with the index as the key and the internal
 43:      *                thread representation as the value.
 44:      * <pre>
 45:      * 0 - blank
 46:      * 1 - line
 47:      * 2 - join
 48:      * 3 - joinbottom-down
 49:      * 4 - joinbottom
 50:      * </pre>
 51:      */
 52:     public function getThreadTreeOb($indices, $sortdir)
 53:     {
 54:         $container = $last_level = $last_thread = null;
 55:         $thread_level = $tree = array();
 56:         $t = &$this->_thread;
 57: 
 58:         if (empty($indices)) {
 59:             return $tree;
 60:         }
 61: 
 62:         $indices = array_intersect($t->messageList(), $indices);
 63: 
 64:         /* If starting in the middle of a thread, the threadLevel tree needs
 65:          * to be built from the base of the current thread. */
 66:         $first = reset($indices);
 67:         foreach ($t->getThread(reset($indices)) as $val) {
 68:             if ($first == $val) {
 69:                 break;
 70:             }
 71:             $thread_level[$t->getThreadIndent($val)] = $t->lastInLevel($val);
 72:         }
 73: 
 74:         foreach ($indices as $val) {
 75:             $tree[$val] = '';
 76: 
 77:             $indentBase = $t->getThreadBase($val);
 78:             if (empty($indentBase)) {
 79:                 continue;
 80:             }
 81: 
 82:             $lines = '';
 83:             $indentLevel = $t->getThreadIndent($val);
 84:             $lastinlevel = $t->lastInLevel($val);
 85: 
 86:             if ($lastinlevel && ($indentBase == $val)) {
 87:                 continue;
 88:             }
 89: 
 90:             if ($lastinlevel) {
 91:                 $join_img = ($sortdir) ? 3 : 4;
 92:             } elseif (($indentLevel == 1) && ($indentBase == $val)) {
 93:                 $join_img = ($sortdir) ? 4 : 3;
 94:             } else {
 95:                 $join_img = 2;
 96:             }
 97: 
 98:             $thread_level[$indentLevel] = $lastinlevel;
 99:             $line = '';
100: 
101:             for ($i = 1; $i < $indentLevel; ++$i) {
102:                 $line .= intval(isset($thread_level[$i]) && !$thread_level[$i]);
103:             }
104:             $tree[$val] = $line . $join_img;
105:         }
106: 
107:         return $sortdir
108:             ? array_reverse($tree, true)
109:             : $tree;
110:     }
111: 
112:     /**
113:      * Generate the thread representation image for the given index list.
114:      *
115:      * @param array $indices    The list of indices to create a tree for.
116:      * @param boolean $sortdir  True for newest first, false for oldest first.
117:      *
118:      * @return array  An array with the index as the key and the thread image
119:      *                representation as the value.
120:      */
121:     public function getThreadImageTree($indices, $sortdir)
122:     {
123:         $tree = array();
124: 
125:         foreach ($this->getThreadTreeOb($indices, $sortdir) as $k => $v) {
126:             $tree[$k] = '';
127:             for ($i = 0, $length = strlen($v); $i < $length; ++$i) {
128:                 $tree[$k] .= '<span class="treeImg treeImg' . $v[$i] . '"></span>';
129:             }
130:         }
131:         return $tree;
132:     }
133: 
134:     /**
135:      * Generate the thread representation text for the given index list.
136:      *
137:      * @param array $indices    The list of indices to create a tree for.
138:      * @param boolean $sortdir  True for newest first, false for oldest first.
139:      *
140:      * @return array  An array with the index as the key and the thread image
141:      *                representation as the value.
142:      */
143:     public function getThreadTextTree($indices, $sortdir)
144:     {
145:         $tree = array();
146: 
147:         foreach ($this->getThreadTreeOb($indices, $sortdir) as $k => $v) {
148:             $tmp = '';
149: 
150:             if (!empty($v)) {
151:                 foreach (str_split($v) as $c) {
152:                     switch (intval($c)) {
153:                     case 0:
154:                         $tmp .= '  ';
155:                         break;
156: 
157:                     case '1':
158:                         $tmp .= '| ';
159:                         break;
160: 
161:                     case '2':
162:                         $tmp .= '|-';
163:                         break;
164: 
165:                     case '3':
166:                         $tmp .= '/-';
167:                         break;
168: 
169:                     case '4':
170:                         $tmp .= '\-';
171:                         break;
172:                     }
173:                 }
174:             }
175: 
176:             $tree[$k] = $tmp;
177:         }
178: 
179:         return $tree;
180:     }
181: 
182: }
183: 
API documentation generated by ApiGen