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 2012-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 2012-2014 Horde LLC
 10:  * @license   http://www.horde.org/licenses/gpl GPL
 11:  * @package   IMP
 12:  */
 13: 
 14: /**
 15:  * Compose page for dynamic view.
 16:  *
 17:  * @author    Michael Slusarz <slusarz@horde.org>
 18:  * @category  Horde
 19:  * @copyright 2012-2014 Horde LLC
 20:  * @license   http://www.horde.org/licenses/gpl GPL
 21:  * @package   IMP
 22:  */
 23: class IMP_Dynamic_Compose extends IMP_Dynamic_Base
 24: {
 25:     /**
 26:      * URL parameters:
 27:      *   - bcc: BCC addresses.
 28:      *   - bcc_json: JSON encoded addresses to send to. Overwrites 'bcc'.
 29:      *   - body: Message body text.
 30:      *   - cc: CC addresses.
 31:      *   - cc_json: JSON encoded addresses to send to. Overwrites 'cc'.
 32:      *   - identity: Force message to use this identity by default.
 33:      *   - subject: Subject to use.
 34:      *   - type: redirect, reply, reply_auto, reply_all, reply_list,
 35:      *           forward_attach, forward_auto, forward_body, forward_both,
 36:      *           forward_redirect, resume, new, new_to, editasnew, template,
 37:      *           template_edit, template_new
 38:      *   - to: Addresses to send to.
 39:      *   - to_json: JSON encoded addresses to send to. Overwrites 'to'.
 40:      */
 41:     protected function _init()
 42:     {
 43:         global $injector, $notification, $page_output, $prefs, $session;
 44: 
 45:         $alist = $injector->getInstance('IMP_Dynamic_AddressList');
 46:         $clink = new IMP_Compose_Link($this->vars);
 47: 
 48:         $addr = array();
 49:         foreach (array('to', 'cc', 'bcc') as $val) {
 50:             $var_name = $val . '_json';
 51:             if (isset($this->vars->$var_name)) {
 52:                 /* Check for JSON encoded information. */
 53:                 $addr[$val] = $alist->parseAddressList($this->vars->$var_name);
 54:             } elseif (isset($clink->args[$val])) {
 55:                 /* Non-JSON encoded address information. */
 56:                 $addr[$val] = IMP::parseAddressList($clink->args[$val]);
 57:             }
 58:         }
 59: 
 60:         $subject = isset($clink->args['subject'])
 61:             ? $clink->args['subject']
 62:             : null;
 63: 
 64:         $identity = $injector->getInstance('IMP_Identity');
 65:         if (!$prefs->isLocked('default_identity') &&
 66:             isset($this->vars->identity)) {
 67:             $identity->setDefault($this->vars->identity);
 68:         }
 69: 
 70:         /* Init objects. */
 71:         $imp_compose = $injector->getInstance('IMP_Factory_Compose')->create();
 72:         $compose_ajax = new IMP_Ajax_Application_Compose($imp_compose, $this->vars->type);
 73: 
 74:         $ajax_queue = $injector->getInstance('IMP_Ajax_Queue');
 75:         $ajax_queue->compose($imp_compose);
 76: 
 77:         $compose_opts = array(
 78:             'title' => _("New Message")
 79:         );
 80: 
 81:         switch ($this->vars->type) {
 82:         case 'reply':
 83:         case 'reply_all':
 84:         case 'reply_auto':
 85:         case 'reply_list':
 86:             try {
 87:                 $result = $imp_compose->replyMessage(
 88:                     $compose_ajax->reply_map[$this->vars->type],
 89:                     $this->_getContents(),
 90:                     array(
 91:                         'to' => isset($addr['to']) ? $addr['to'] : null
 92:                     )
 93:                 );
 94:             } catch (IMP_Exception $e) {
 95:                 $notification->push($e, 'horde.error');
 96:                 break;
 97:             }
 98: 
 99:             $onload = $compose_ajax->getResponse($result);
100: 
101:             switch ($result['type']) {
102:             case IMP_Compose::REPLY_SENDER:
103:                 $compose_opts['title'] = _("Reply");
104:                 break;
105: 
106:             case IMP_Compose::REPLY_ALL:
107:                 $compose_opts['title'] = _("Reply to All");
108:                 break;
109: 
110:             case IMP_Compose::REPLY_LIST:
111:                 $compose_opts['title'] = _("Reply to List");
112:                 break;
113:             }
114:             $compose_opts['title'] .= ': ' . $result['subject'];
115:             break;
116: 
117:         case 'forward_attach':
118:         case 'forward_auto':
119:         case 'forward_body':
120:         case 'forward_both':
121:             try {
122:                 if (count($this->indices) > 1) {
123:                     if (!in_array($this->vars->type, array('forward_attach', 'forward_auto'))) {
124:                         $notification->push(_("Multiple messages can only be forwarded as attachments."), 'horde.warning');
125:                     }
126: 
127:                     $result = $imp_compose->forwardMultipleMessages($this->indices);
128:                 } else {
129:                     $result = $imp_compose->forwardMessage(
130:                         $compose_ajax->forward_map[$this->vars->type],
131:                         $this->_getContents()
132:                     );
133:                 }
134:             } catch (IMP_Exception $e) {
135:                 $notification->push($e, 'horde.error');
136:                 break;
137:             }
138: 
139:             $onload = $compose_ajax->getResponse($result);
140:             $compose_opts['title'] = $result['title'];
141: 
142:             $ajax_queue->attachment($imp_compose, IMP_Compose::FORWARD_ATTACH);
143:             break;
144: 
145:         case 'forward_redirect':
146:             try {
147:                 $imp_compose->redirectMessage($this->indices);
148:                 $compose_opts['title'] = _("Redirect");
149:             } catch (IMP_Compose_Exception $e) {
150:                 $notification->push($e, 'horde.error');
151:             }
152:             // Not used in JS
153:             $onload = new stdClass;
154:             break;
155: 
156:         case 'editasnew':
157:         case 'resume':
158:         case 'template':
159:         case 'template_edit':
160:             try {
161:                 switch ($this->vars->type) {
162:                 case 'editasnew':
163:                     $result = $imp_compose->editAsNew($this->indices);
164:                     break;
165: 
166:                 case 'resume':
167:                     $result = $imp_compose->resumeDraft($this->indices);
168:                     $compose_opts['resume'] = true;
169:                     break;
170: 
171:                 case 'template':
172:                     $result = $imp_compose->useTemplate($this->indices);
173:                     break;
174: 
175:                 case 'template_edit':
176:                     $result = $imp_compose->editTemplate($this->indices);
177:                     $compose_opts['template'] = true;
178:                     break;
179:                 }
180: 
181:                 $onload = $compose_ajax->getResponse($result);
182: 
183:                 $ajax_queue->attachment($imp_compose, $result['type']);
184: 
185:                 $show_editor = ($result['format'] == 'html');
186:             } catch (IMP_Compose_Exception $e) {
187:                 $notification->push($e);
188:             }
189:             break;
190: 
191:         case 'new_to':
192:             $h = $this->_getContents()->getHeader();
193:             $addr['to'] = $h->getOb('reply-to') ?: $h->getOb('from');
194:             // Fall-through
195: 
196:         case 'new':
197:         case 'template_new':
198:         default:
199:             $show_editor = ($prefs->getValue('compose_html') && $session->get('imp', 'rteavail'));
200: 
201:             $onload = $compose_ajax->getBaseResponse();
202:             $onload->body = isset($clink->args['body'])
203:                 ? strval($clink->args['body'])
204:                 : '';
205:             if ($show_editor) {
206:                 $onload->format = 'html';
207:             }
208: 
209:             if ($this->vars->type == 'template_new') {
210:                 $compose_opts['template'] = true;
211:             }
212:             break;
213:         }
214: 
215:         $compose_opts['redirect'] = ($this->vars->type == 'forward_redirect');
216: 
217:         if (isset($onload->addr) || !empty($addr)) {
218:             foreach (array('to', 'cc', 'bcc') as $val) {
219:                 if (!isset($onload->addr[$val])) {
220:                     $onload->addr[$val] = array();
221:                 }
222:                 if (isset($addr[$val])) {
223:                     $onload->addr[$val] = array_merge(
224:                         $onload->addr[$val],
225:                         array_map('strval', $addr[$val]->base_addresses)
226:                     );
227:                 }
228:             }
229:         }
230: 
231:         if (!is_null($subject)) {
232:             $onload->subject = $subject;
233:         }
234: 
235:         $this->title = $compose_opts['title'];
236:         $this->view->compose = $injector->getInstance('IMP_Dynamic_Compose_Common')->compose($this, $compose_opts);
237: 
238:         $page_output->addInlineJsVars(array(
239:             'DimpCompose.onload_show' => $onload,
240:             'DimpCompose.tasks' => $injector->getInstance('Horde_Core_Factory_Ajax')->create('imp', $this->vars)->getTasks()
241:         ));
242: 
243:         Horde::startBuffer();
244:         $notification->notify(array(
245:             'listeners' => array('status', 'audio')
246:         ));
247:         $this->view->status = Horde::endBuffer();
248: 
249:         $this->_pages[] = 'compose-base';
250:     }
251: 
252:     /**
253:      */
254:     public static function url(array $opts = array())
255:     {
256:         return Horde::url('dynamic.php')->add('page', 'compose');
257:     }
258: 
259:     /**
260:      * Create the IMP_Contents objects needed to create a message.
261:      *
262:      * @param Horde_Variables $vars  The variables object.
263:      *
264:      * @return IMP_Contents  The IMP_Contents object.
265:      * @throws IMP_Exception
266:      */
267:     protected function _getContents()
268:     {
269:         if (!is_null($this->indices)) {
270:             try {
271:                 return $GLOBALS['injector']->getInstance('IMP_Factory_Contents')->create($this->indices);
272:             } catch (Horde_Exception $e) {}
273:         }
274: 
275:         $this->vars->buid = null;
276:         $this->vars->type = 'new';
277: 
278:         throw new IMP_Exception(_("Could not retrieve message data from the mail server."));
279:     }
280: 
281: }
282: 
API documentation generated by ApiGen