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 2002-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 2002-2014 Horde LLC
 10:  * @license   http://www.horde.org/licenses/gpl GPL
 11:  * @package   IMP
 12:  */
 13: 
 14: /**
 15:  * Render message data meant for inline viewing in a browser.
 16:  *
 17:  * @author    Michael Slusarz <slusarz@horde.org>
 18:  * @category  Horde
 19:  * @copyright 2002-2014 Horde LLC
 20:  * @license   http://www.horde.org/licenses/gpl GPL
 21:  * @package   IMP
 22:  */
 23: class IMP_Contents_InlineOutput
 24: {
 25:     /**
 26:      * Generate inline message display.
 27:      *
 28:      * @param IMP_Contents $contents  Contents object.
 29:      * @param array $options          Options:
 30:      *   - display_mask: (integer) The mask of display view type to render
 31:      *                   inline (DEFAULT: RENDER_INLINE_AUTO).
 32:      *   - mask: (integer) The mask needed for a getSummary() call.
 33:      *   - no_inline_all: (boolean) If true, only display first inline part.
 34:      *                    Subsequent inline parts will be treated as
 35:      *                    attachments.
 36:      *   - part_info_display: (array) The list of summary fields to display.
 37:      *   - show_parts: (string) The value of the 'parts_display' pref.
 38:      *
 39:      * @return array  An array with the following keys:
 40:      *   - atc_parts: (array) The list of attachment MIME IDs.
 41:      *   - display_ids: (array) The list of display MIME IDs.
 42:      *   - metadata: (array) A list of metadata.
 43:      *   - msgtext: (string) The rendered HTML code.
 44:      *   - one_part: (boolean) If true, the message only consists of one part.
 45:      */
 46:     public function getInlineOutput(IMP_Contents $contents,
 47:                                     array $options = array())
 48:     {
 49:         global $prefs, $registry;
 50: 
 51:         $atc_parts = $display_ids = $metadata = $msgtext = $wrap_ids = array();
 52:         $parts_list = $contents->getContentTypeMap();
 53:         $text_out = '';
 54:         $view = $registry->getView();
 55: 
 56:         $contents_mask = isset($options['mask'])
 57:             ? $options['mask']
 58:             : 0;
 59:         $display_mask = isset($options['display_mask'])
 60:             ? $options['display_mask']
 61:             : $contents::RENDER_INLINE_AUTO;
 62:         $no_inline_all = !empty($options['no_inline_all']);
 63:         $part_info_display = isset($options['part_info_display'])
 64:             ? $options['part_info_display']
 65:             : array();
 66:         $show_parts = isset($options['show_parts'])
 67:             ? $options['show_parts']
 68:             : $prefs->getValue('parts_display');
 69: 
 70:         foreach ($parts_list as $mime_id => $mime_type) {
 71:             if (isset($display_ids[$mime_id]) ||
 72:                 isset($atc_parts[$mime_id])) {
 73:                 continue;
 74:             }
 75: 
 76:             if (!($render_mode = $contents->canDisplay($mime_id, $display_mask))) {
 77:                 if ($contents->isAttachment($mime_type)) {
 78:                     if ($show_parts == 'atc') {
 79:                         $atc_parts[$mime_id] = 1;
 80:                     }
 81: 
 82:                     if ($contents_mask) {
 83:                         $msgtext[$mime_id] = array(
 84:                             'text' => $this->_formatSummary($contents, $mime_id, $contents_mask, $part_info_display, true)
 85:                         );
 86:                     }
 87:                 }
 88:                 continue;
 89:             }
 90: 
 91:             $render_part = $contents->renderMIMEPart($mime_id, $render_mode);
 92:             if (($show_parts == 'atc') &&
 93:                 $contents->isAttachment($mime_type) &&
 94:                 (empty($render_part) ||
 95:                  !($render_mode & $contents::RENDER_INLINE))) {
 96:                 $atc_parts[$mime_id] = 1;
 97:             }
 98: 
 99:             if (empty($render_part)) {
100:                 if ($contents_mask &&
101:                     $contents->isAttachment($mime_type)) {
102:                     $msgtext[$mime_id] = array(
103:                         'text' => $this->_formatSummary($contents, $mime_id, $contents_mask, $part_info_display, true)
104:                     );
105:                 }
106:                 continue;
107:             }
108: 
109:             reset($render_part);
110:             while (list($id, $info) = each($render_part)) {
111:                 $display_ids[$id] = 1;
112: 
113:                 if (empty($info)) {
114:                     continue;
115:                 }
116: 
117:                 if ($no_inline_all === 1) {
118:                     $atc_parts[$id] = 1;
119:                     continue;
120:                 }
121: 
122:                 $part_text = ($contents_mask && empty($info['nosummary']))
123:                     ? $this->_formatSummary($contents, $id, $contents_mask, $part_info_display, !empty($info['attach']))
124:                     : '';
125: 
126:                 if (empty($info['attach'])) {
127:                     if (isset($info['status'])) {
128:                         if (!is_array($info['status'])) {
129:                             $info['status'] = array($info['status']);
130:                         }
131: 
132:                         $render_issues = array();
133: 
134:                         foreach ($info['status'] as $val) {
135:                             if (in_array($view, $val->views)) {
136:                                 if ($val instanceof IMP_Mime_Status_RenderIssue) {
137:                                     $render_issues[] = $val;
138:                                 } else {
139:                                     $part_text .= strval($val);
140:                                 }
141:                             }
142:                         }
143: 
144:                         if (!empty($render_issues)) {
145:                             $render_issues_ob = new IMP_Mime_Status_RenderIssue_Display();
146:                             $render_issues_ob->addIssues($render_issues);
147:                             $part_text .= strval($render_issues_ob);
148:                         }
149:                     }
150: 
151:                     $part_text .= '<div class="mimePartData">' . $info['data'] . '</div>';
152:                 } elseif ($show_parts == 'atc') {
153:                     $atc_parts[$id] = 1;
154:                 }
155: 
156:                 $msgtext[$id] = array(
157:                     'text' => $part_text,
158:                     'wrap' => empty($info['wrap']) ? null : $info['wrap']
159:                 );
160: 
161:                 if (isset($info['metadata'])) {
162:                     /* Format: array(identifier, ...[data]...) */
163:                     $metadata = array_merge($metadata, $info['metadata']);
164:                 }
165: 
166:                 if ($no_inline_all) {
167:                     $no_inline_all = 1;
168:                 }
169:             }
170:         }
171: 
172:         if (!empty($msgtext)) {
173:             uksort($msgtext, 'strnatcmp');
174:         }
175: 
176:         reset($msgtext);
177:         while (list($id, $part) = each($msgtext)) {
178:             while (!empty($wrap_ids)) {
179:                 $id_ob = new Horde_Mime_Id(end($wrap_ids));
180:                 if ($id_ob->isChild($id)) {
181:                     break;
182:                 }
183:                 array_pop($wrap_ids);
184:                 $text_out .= '</div>';
185:             }
186: 
187:             if (!empty($part['wrap'])) {
188:                 $text_out .= '<div class="' . $part['wrap'] . '">';
189:                 $wrap_ids[] = $id;
190:             }
191: 
192:             $text_out .= '<div class="mimePartBase">' . $part['text'] . '</div>';
193:         }
194: 
195:         $text_out .= str_repeat('</div>', count($wrap_ids));
196: 
197:         if (!strlen($text_out)) {
198:             $text_out = strval(new IMP_Mime_Status(_("There are no parts that can be shown inline.")));
199:         }
200: 
201:         $atc_parts = ($show_parts == 'all')
202:             ? array_keys($parts_list)
203:             : array_keys($atc_parts);
204: 
205:         return array(
206:             'atc_parts' => $atc_parts,
207:             'display_ids' => array_keys($display_ids),
208:             'metadata' => $metadata,
209:             'msgtext' => $text_out,
210:             'one_part' => (count($parts_list) == 1)
211:         );
212:     }
213: 
214:     /**
215:      * Prints out a MIME summary (in HTML).
216:      *
217:      * @param IMP_Contents $contents  Contents object.
218:      * @param string $id              The MIME ID.
219:      * @param integer $mask           A bitmask indicating what summary
220:      *                                information to return.
221:      * @param array $display          The fields to display (in this order).
222:      * @param boolean $atc            Is this an attachment?
223:      *
224:      * @return string  The formatted summary string.
225:      */
226:     protected function _formatSummary(IMP_Contents $contents, $id, $mask,
227:                                       $display, $atc = false)
228:     {
229:         $summary = $contents->getSummary($id, $mask);
230:         $tmp_summary = array();
231: 
232:         foreach ($display as $val) {
233:             if (isset($summary[$val])) {
234:                 switch ($val) {
235:                 case 'description':
236:                     $summary[$val] = '<span class="mimePartInfoDescrip">' . $summary[$val] . '</span>';
237:                     break;
238: 
239:                 case 'size':
240:                     $summary[$val] = '<span class="mimePartInfoSize">(' . $summary[$val] . ')</span>';
241:                     break;
242:                 }
243:                 $tmp_summary[] = $summary[$val];
244:             }
245:         }
246: 
247:         return '<div class="mimePartInfo' .
248:             ($atc ? ' mimePartInfoAtc' : '') .
249:             '"><div>' .
250:             implode(' ', $tmp_summary) .
251:             '</div></div>';
252:     }
253: 
254: }
255: 
API documentation generated by ApiGen