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:  * Message page for minimal view.
  4:  *
  5:  * Copyright 2012-2014 Horde LLC (http://www.horde.org/)
  6:  *
  7:  * See the enclosed file COPYING for license information (GPL). If you
  8:  * did not receive this file, see http://www.horde.org/licenses/gpl.
  9:  *
 10:  * @author   Michael Slusarz <slusarz@horde.org>
 11:  * @category Horde
 12:  * @license  http://www.horde.org/licenses/gpl GPL
 13:  * @package  IMP
 14:  */
 15: class IMP_Minimal_Message extends IMP_Minimal_Base
 16: {
 17:     /**
 18:      * URL Parameters:
 19:      *   a: (string) Action ID.
 20:      *   allto: (boolean) View all To addresses?
 21:      *   buid: (string) Browser UID.
 22:      *   t: (string) Token.
 23:      */
 24:     protected function _init()
 25:     {
 26:         global $injector, $notification, $page_output, $prefs, $session;
 27: 
 28:         $imp_mailbox = $this->indices->mailbox->list_ob;
 29:         $imp_mailbox->setIndex($this->indices);
 30: 
 31:         $mailbox_url = IMP_Minimal_Mailbox::url(array(
 32:             'mailbox' => $this->indices->mailbox
 33:         ));
 34: 
 35:         /* Make sure we have a valid index. */
 36:         if (!$imp_mailbox->isValidIndex()) {
 37:             $mailbox_url->add('a', 'm')->redirect();
 38:         }
 39: 
 40:         $imp_ui = $injector->getInstance('IMP_Message_Ui');
 41: 
 42:         /* Run through action handlers */
 43:         $msg_delete = false;
 44:         switch ($this->vars->a) {
 45:         // 'd' = delete message
 46:         case 'd':
 47:             $old_index = $imp_mailbox->getIndex();
 48:             try {
 49:                 $session->checkToken($this->vars->t);
 50:                 $msg_delete = (bool)$injector->getInstance('IMP_Message')->delete(
 51:                     $this->indices,
 52:                     array('mailboxob' => $imp_mailbox)
 53:                 );
 54:             } catch (Horde_Exception $e) {
 55:                 $notification->push($e);
 56:             }
 57:             break;
 58: 
 59:         // 'u' = undelete message
 60:         case 'u':
 61:             $old_index = $imp_mailbox->getIndex();
 62:             $injector->getInstance('IMP_Message')->undelete($this->indices);
 63:             break;
 64: 
 65:         // 'rs' = report spam
 66:         // 'ri' = report innocent
 67:         case 'rs':
 68:         case 'ri':
 69:             $old_index = $imp_mailbox->getIndex();
 70:             $msg_delete = ($injector->getInstance('IMP_Factory_Spam')->create($this->vars->a == 'rs' ? IMP_Spam::SPAM : IMP_Spam::INNOCENT)->report($this->indices, array('mailboxob' => $imp_mailbox)) === 1);
 71:             break;
 72:         }
 73: 
 74:         if ($msg_delete && $imp_ui->moveAfterAction($this->indices->mailbox)) {
 75:             $imp_mailbox->setIndex(1);
 76:         }
 77: 
 78:         /* We may have done processing that has taken us past the end of the
 79:          * message array, so we will return to the mailbox. */
 80:         if (!$imp_mailbox->isValidIndex() ||
 81:             ($msg_delete && $prefs->getValue('mailbox_return'))) {
 82:             $mailbox_url->add('s', $old_index)->redirect();
 83:         }
 84: 
 85:         /* Now that we are done processing, get the index and array index of
 86:          * the current message. */
 87:         $msg_index = $imp_mailbox[$imp_mailbox->getIndex()];
 88:         $mailbox = $msg_index['m'];
 89:         $uid = $msg_index['u'];
 90:         $buid = $imp_mailbox->getBuid($mailbox, $uid);
 91: 
 92:         /* Get envelope/flag/header information. */
 93:         try {
 94:             $imp_imap = $mailbox->imp_imap;
 95: 
 96:             /* Need to fetch flags before HEADERTEXT, because SEEN flag might
 97:              * be set before we can grab it. */
 98:             $query = new Horde_Imap_Client_Fetch_Query();
 99:             $query->flags();
100:             $flags_ret = $imp_imap->fetch($mailbox, $query, array(
101:                 'ids' => $imp_imap->getIdsOb($uid)
102:             ));
103: 
104:             $query = new Horde_Imap_Client_Fetch_Query();
105:             $query->envelope();
106:             $fetch_ret = $imp_imap->fetch($mailbox, $query, array(
107:                 'ids' => $imp_imap->getIdsOb($uid)
108:             ));
109:         } catch (IMP_Imap_Exception $e) {
110:             $mailbox_url->add('a', 'm')->redirect();
111:         }
112: 
113:         $envelope = $fetch_ret->first()->getEnvelope();
114:         $flags = $flags_ret->first()->getFlags();
115: 
116:         /* Parse the message. */
117:         try {
118:             $imp_contents = $injector->getInstance('IMP_Factory_Contents')->create(new IMP_Indices($imp_mailbox));
119:             $mime_headers = $imp_contents->getHeaderAndMarkAsSeen();
120:         } catch (IMP_Exception $e) {
121:             $mailbox_url->add('a', 'm')->redirect();
122:         }
123: 
124:         /* Get the starting index for the current message and the message
125:          * count. */
126:         $msgindex = $imp_mailbox->getIndex();
127:         $msgcount = count($imp_mailbox);
128: 
129:         /* Generate the mailbox link. */
130:         $mailbox_link = $mailbox_url->add('s', $msgindex);
131:         $self_link = self::url(array(
132:             'buid' => $buid,
133:             'mailbox' => $this->indices->mailbox
134:         ));
135: 
136:         /* Create the Identity object. */
137:         $user_identity = $injector->getInstance('IMP_Identity');
138: 
139:         /* Develop the list of headers to display. */
140:         $basic_headers = $imp_ui->basicHeaders();
141:         $display_headers = $msgAddresses = array();
142: 
143:         if (($subject = $mime_headers->getValue('subject'))) {
144:             /* Filter the subject text, if requested. */
145:             $subject = Horde_String::truncate(IMP::filterText($subject), 50);
146:         } else {
147:             $subject = _("[No Subject]");
148:         }
149:         $display_headers['subject'] = $subject;
150: 
151:         $date_ob = new IMP_Message_Date($envelope->date);
152:         if ($format_date = $date_ob->format($date_ob::DATE_LOCAL)) {
153:             $display_headers['date'] = $format_date;
154:         }
155: 
156:         /* Build From address links. */
157:         $display_headers['from'] = $imp_ui->buildAddressLinks($envelope->from, null, false);
158: 
159:         /* Build To/Cc/Bcc links. */
160:         foreach (array('to', 'cc', 'bcc') as $val) {
161:             $msgAddresses[] = $mime_headers->getValue($val);
162:             $addr_val = $imp_ui->buildAddressLinks($envelope->$val, null, false);
163:             if (!empty($addr_val)) {
164:                 $display_headers[$val] = $addr_val;
165:             }
166:         }
167: 
168:         /* Check for the presence of mailing list information. */
169:         $list_info = $imp_ui->getListInformation($mime_headers);
170: 
171:         /* See if the priority has been set. */
172:         switch($priority = $injector->getInstance('IMP_Mime_Headers')->getPriority($mime_headers)) {
173:         case 'high':
174:         case 'low':
175:             $basic_headers['priority'] = _("Priority");
176:             $display_headers['priority'] = Horde_String::ucfirst($priority);
177:             break;
178:         }
179: 
180:         /* Set the status information of the message. */
181:         $status = '';
182:         $match_identity = $identity = null;
183: 
184:         if (!empty($msgAddresses)) {
185:             $match_identity = $identity = $user_identity->getMatchingIdentity($msgAddresses);
186:             if (is_null($identity)) {
187:                 $identity = $user_identity->getDefault();
188:             }
189:         }
190: 
191:         $flag_parse = $injector->getInstance('IMP_Flags')->parse(array(
192:             'flags' => $flags,
193:             'personal' => $match_identity
194:         ));
195: 
196:         foreach ($flag_parse as $val) {
197:             if ($abbrev = $val->abbreviation) {
198:                 $status .= $abbrev;
199:             } elseif ($val instanceof IMP_Flag_User) {
200:                 $status .= ' *' . Horde_String::truncate($val->label, 8) . '*';
201:             }
202:         }
203: 
204:         /* Create the body of the message. */
205:         $inline_ob = new IMP_Contents_InlineOutput();
206:         $inlineout = $inline_ob->getInlineOutput($imp_contents, array(
207:             'display_mask' => IMP_Contents::RENDER_INLINE,
208:             'no_inline_all' => true
209:         ));
210: 
211:         $msg_text = $inlineout['msgtext'];
212: 
213:         $this->view->msg = nl2br($injector->getInstance('Horde_Core_Factory_TextFilter')->filter($msg_text, 'space2html'));
214: 
215:         $menu = array();
216:         if ($this->indices->mailbox->access_deletemsgs) {
217:             $menu[] = in_array(Horde_Imap_Client::FLAG_DELETED, $flags)
218:                 ? array(_("Undelete"), $self_link->copy()->add('a', 'u'))
219:                 : array(_("Delete"), $self_link->copy()->add(array('a' => 'd', 't' => $session->getToken())));
220:         }
221: 
222:         /* Add compose actions (Reply, Reply List, Reply All, Forward,
223:          * Redirect, Edit as New). */
224:         if (IMP_Compose::canCompose()) {
225:             $clink_ob = new IMP_Compose_Link();
226:             $clink_ob->args['buid'] = $buid;
227:             $clink_ob->args['mailbox'] = $this->indices->mailbox;
228:             $clink = $clink_ob->link()->add(array('identity' => $identity));
229: 
230:             $menu[] = array(_("Reply"), $clink->copy()->add(array('a' => 'r')));
231: 
232:             if ($list_info['reply_list']) {
233:                 $menu[] = array(_("Reply to List"), $clink->copy()->add(array('a' => 'rl')));
234:             }
235: 
236:             $addr_ob = clone($envelope->to);
237:             $addr_ob->add($envelope->cc);
238:             $addr_ob->setIteratorFilter(0, $user_identity->getAllFromAddresses());
239: 
240:             if (count($addr_ob)) {
241:                 $menu[] = array(_("Reply All"), $clink->copy()->add(array('a' => 'ra')));
242:             }
243: 
244:             $menu[] = array(_("Forward"), $clink->copy()->add(array('a' => 'f')));
245:             $menu[] = array(_("Redirect"), $clink->copy()->add(array('a' => 'rc')));
246:             $menu[] = array(_("Edit as New"), $clink->copy()->add(array('a' => 'en')));
247:         }
248: 
249:         /* Generate previous/next links. */
250:         if ($prev_msg = $imp_mailbox[$imp_mailbox->getIndex() - 1]) {
251:             $menu[] = array(_("Previous Message"), self::url(array(
252:                 'buid' => $imp_mailbox->getBuid($prev_msg['m'], $prev_msg['u']),
253:                 'mailbox' => $this->indices->mailbox
254:             )));
255:         }
256:         if ($next_msg = $imp_mailbox[$imp_mailbox->getIndex() + 1]) {
257:             $menu[] = array(_("Next Message"), self::url(array(
258:                 'buid' => $imp_mailbox->getBuid($next_msg['m'], $next_msg['u']),
259:                 'mailbox' => $this->indices->mailbox
260:             )));
261:         }
262: 
263:         $menu[] = array(sprintf(_("To %s"), $this->indices->mailbox->label), $mailbox_link);
264: 
265:         if ($mailbox->spam_show) {
266:             $menu[] = array(_("Report as Spam"), $self_link->copy()->add(array('a' => 'rs', 't' => $session->getToken())));
267:         }
268: 
269:         if ($mailbox->innocent_show) {
270:             $menu[] = array(_("Report as Innocent"), $self_link->copy()->add(array('a' => 'ri', 't' => $session->getToken())));
271:         }
272: 
273:         $this->view->menu = $this->getMenu('message', $menu);
274: 
275:         $hdrs = array();
276:         foreach ($display_headers as $head => $val) {
277:             $tmp = array(
278:                 'label' => $basic_headers[$head]
279:             );
280:             if ((Horde_String::lower($head) == 'to') &&
281:                 !isset($this->vars->allto) &&
282:                 (($pos = strpos($val, ',')) !== false)) {
283:                 $val = Horde_String::substr($val, 0, $pos);
284:                 $tmp['all_to'] = $self_link->copy()->add('allto', 1);
285:             }
286:             $tmp['val'] = $val;
287:             $hdrs[] = $tmp;
288:         }
289:         $this->view->hdrs = $hdrs;
290: 
291:         $atc = array();
292:         foreach ($inlineout['atc_parts'] as $key) {
293:             $summary = $imp_contents->getSummary($key, IMP_Contents::SUMMARY_BYTES | IMP_Contents::SUMMARY_SIZE | IMP_Contents::SUMMARY_DESCRIP | IMP_Contents::SUMMARY_DOWNLOAD);
294: 
295:             $tmp = array(
296:                 'descrip' => $summary['description_raw'],
297:                 'size' => $summary['size'],
298:                 'type' => $summary['type']
299:             );
300: 
301:             if (!empty($summary['download'])) {
302:                 /* Preference: if set, only show download confirmation screen
303:                  * if attachment over a certain size. */
304:                 $tmp['download'] = IMP_Minimal_Messagepart::url(array(
305:                     'buid' => $buid,
306:                     'mailbox' => $this->indices->mailbox
307:                 ))->add('atc', $key);
308:             }
309: 
310:             if ($imp_contents->canDisplay($key, IMP_Contents::RENDER_INLINE)) {
311:                 $tmp['view'] = IMP_Minimal_Messagepart::url(array(
312:                     'buid' => $buid,
313:                     'mailbox' => $this->indices->mailbox
314:                 ))->add('id', $key);
315:             }
316: 
317:             $atc[] = $tmp;
318:         }
319:         $this->view->atc = $atc;
320: 
321:         $this->title = $display_headers['subject'];
322:         $this->view->title = ($status ? $status . ' ' : '') . sprintf(_("(Message %d of %d)"), $msgindex, $msgcount);
323: 
324:         $page_output->noDnsPrefetch();
325: 
326:         $this->_pages[] = 'message';
327:         $this->_pages[] = 'menu';
328:     }
329: 
330:     /**
331:      * @param array $opts  Options:
332:      *   - buid: (string) BUID of message.
333:      *   - mailbox: (string) Mailbox of message.
334:      */
335:     public static function url(array $opts = array())
336:     {
337:         return IMP_Mailbox::get($opts['mailbox'])->url('minimal', $opts['buid'])->add('page', 'message');
338:     }
339: 
340: }
341: 
API documentation generated by ApiGen