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 2005-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 2005-2014 Horde LLC
 10:  * @license   http://www.horde.org/licenses/gpl GPL
 11:  * @package   IMP
 12:  */
 13: 
 14: /**
 15:  * Compose code common to various dynamic views.
 16:  *
 17:  * @author    Michael Slusarz <slusarz@horde.org>
 18:  * @category  Horde
 19:  * @copyright 2005-2014 Horde LLC
 20:  * @license   http://www.horde.org/licenses/gpl GPL
 21:  * @package   IMP
 22:  */
 23: class IMP_Dynamic_Compose_Common
 24: {
 25:     /**
 26:      * Create content needed to output the compose page.
 27:      *
 28:      * @param IMP_Dynamic_Base $base  Base dynamic view object.
 29:      * @param array $args             Configuration parameters:
 30:      *   - redirect: (boolean) Display the redirect interface? If true,
 31:      *               display only redirect. If false, don't add redirect
 32:      *               interface to page.
 33:      *   - resume: (boolean) Are we resuming a saved draft?
 34:      *   - show_editor: (boolean) Show the HTML editor?
 35:      *   - template: (string) Display the edit template interface?
 36:      *
 37:      * @return string  The compose HTML text.
 38:      */
 39:     public function compose(IMP_Dynamic_Base $base, array $args = array())
 40:     {
 41:         global $injector, $page_output, $prefs, $registry;
 42: 
 43:         $page_output->addScriptPackage('Horde_Core_Script_Package_Keynavlist');
 44:         $page_output->addScriptPackage('IMP_Script_Package_ComposeBase');
 45:         if ($registry->hasMethod('contacts/search')) {
 46:             $page_output->addScriptPackage('IMP_Script_Package_Autocomplete');
 47:         }
 48: 
 49:         $page_output->addScriptFile('compose-dimp.js');
 50:         $page_output->addScriptFile('draghandler.js');
 51:         $page_output->addScriptFile('editor.js');
 52:         $page_output->addScriptFile('imp.js');
 53: 
 54:         if (!$prefs->isLocked('default_encrypt') &&
 55:             ($prefs->getValue('use_pgp') || $prefs->getValue('use_smime'))) {
 56:             $page_output->addScriptPackage('Horde_Core_Script_Package_Dialog');
 57:             $page_output->addScriptFile('passphrase.js');
 58:         }
 59: 
 60:         $this->_addComposeVars($base);
 61: 
 62:         $view = $base->getEmptyView();
 63:         $view->addHelper('Tag');
 64:         $view->addHelper('FormTag');
 65: 
 66:         $view->compose_enable = IMP_Compose::canCompose();
 67: 
 68:         if (!empty($args['redirect'])) {
 69:             $base->js_conf['redirect'] = 1;
 70:             return $view->render('redirect');
 71:         }
 72: 
 73:         $view->spellcheck = $injector->getInstance('IMP_Compose_Ui')->attachSpellChecker();
 74: 
 75:         $this->_compose($base, $view, $args);
 76:         return $view->render('compose') . (isset($args['redirect']) ? '' : $view->render('redirect'));
 77:     }
 78: 
 79:     /**
 80:      */
 81:     protected function _compose($base, $view, $args)
 82:     {
 83:         global $injector, $registry, $page_output, $prefs, $session;
 84: 
 85:         $view->title = $args['title'];
 86: 
 87:         /* Load Identity. */
 88:         $identity = $injector->getInstance('IMP_Identity');
 89:         $selected_identity = intval($identity->getDefault());
 90: 
 91:         /* Generate identities list. */
 92:         $injector->getInstance('IMP_Compose_Ui')->addIdentityJs();
 93: 
 94:         if ($session->get('imp', 'rteavail')) {
 95:             $view->compose_html = !empty($args['show_editor']);
 96:             $view->rte = true;
 97: 
 98:             $page_output->addScriptPackage('IMP_Script_Package_Editor');
 99:             $page_output->addScriptFile('external/base64.js');
100:         }
101: 
102:         /* Create list for sent-mail selection. */
103:         $imp_imap = $injector->getInstance('IMP_Factory_Imap')->create();
104:         if ($imp_imap->access(IMP_Imap::ACCESS_FOLDERS) &&
105:             !$prefs->isLocked('save_sent_mail')) {
106:             $view->save_sent_mail = true;
107:             $view->save_sent_mail_select = !$prefs->isLocked(IMP_Mailbox::MBOX_SENT);
108:         }
109: 
110:         $view->drafts = ($imp_imap->access(IMP_Imap::ACCESS_DRAFTS) &&
111:             ($draft = IMP_Mailbox::getPref(IMP_Mailbox::MBOX_DRAFTS)) &&
112:             !$draft->readonly);
113: 
114:         $view->compose_link = $registry->getServiceLink('ajax', 'imp')->url . 'addAttachment';
115:         $view->resume = !empty($args['resume']);
116:         $view->is_template = !empty($args['template']);
117:         $view->read_receipt_set = (strcasecmp($prefs->getValue('request_mdn'), 'always') === 0);
118:         $view->user = $registry->getAuth();
119: 
120:         if (IMP_Compose::canUploadAttachment()) {
121:             $view->attach = true;
122:             $view->max_size = $session->get('imp', 'file_upload');
123:             $view->save_attach_set = (strcasecmp($prefs->getValue('save_attachments'), 'always') === 0);
124:         } else {
125:             $view->attach = false;
126:         }
127: 
128:         if ($prefs->getValue('use_pgp') &&
129:             $prefs->getValue('pgp_public_key')) {
130:             $view->pgp_pubkey = $prefs->getValue('pgp_attach_pubkey');
131:         }
132: 
133:         if ($registry->hasMethod('contacts/ownVCard')) {
134:             $view->vcard_attach = true;
135:         }
136: 
137:         $view->priority = $prefs->getValue('set_priority');
138:         if (!$prefs->isLocked('default_encrypt') &&
139:             ($prefs->getValue('use_pgp') || $prefs->getValue('use_smime'))) {
140:             $view->encrypt = $prefs->getValue('default_encrypt');
141:         }
142: 
143:         $from_list = array();
144:         foreach ($identity->getSelectList() as $id => $from) {
145:             $from_list[] = array(
146:                 'label' => $from,
147:                 'sel' => ($id == $selected_identity),
148:                 'val' => $id
149:             );
150:         }
151:         $view->from_list = $from_list;
152: 
153:         $view->signature = $identity->hasSignature(true);
154:         $view->sigExpanded = $prefs->getValue('signature_expanded');
155:     }
156: 
157:     /**
158:      * Add compose javascript variables to the page.
159:      */
160:     protected function _addComposeVars($base)
161:     {
162:         global $browser, $conf, $injector, $prefs, $registry;
163: 
164:         /* Context menu definitions. */
165:         $base->js_context['ctx_other'] = new stdClass;
166:         if (!$prefs->isLocked('request_mdn')) {
167:             $base->js_context['ctx_other']->rr = _("Read Receipt");
168:         }
169: 
170:         $base->js_context['ctx_atc'] = new stdClass;
171: 
172:         if (IMP_Compose::canUploadAttachment()) {
173:             if (!$prefs->isLocked('save_attachments') &&
174:                 (!$prefs->isLocked('save_sent_mail') ||
175:                  $prefs->getValue('save_sent_mail'))) {
176:                 $base->js_context['ctx_atc']->save = _("Save Attachments in Sent Mailbox");
177:             }
178: 
179:             $atcfile = new stdClass;
180:             $atcfile->delete = _("Delete");
181:             $base->js_context['ctx_atcfile'] = $atcfile;
182:         }
183: 
184:         if ($prefs->getValue('use_pgp') &&
185:             $prefs->getValue('pgp_public_key')) {
186:             $base->js_context['ctx_atc']->pgppubkey = _("Attach Personal PGP Public Key");
187:         }
188: 
189:         if ($registry->hasMethod('contacts/ownVCard')) {
190:             $base->js_context['ctx_atc']->vcard = _("Attach contact information");
191:         }
192: 
193:         /* Variables used in compose page. */
194:         $compose_cursor = $prefs->getValue('compose_cursor');
195:         $templates_mbox = IMP_Mailbox::getPref(IMP_Mailbox::MBOX_TEMPLATES);
196: 
197:         $base->js_conf += array_filter(array(
198:             'compose_cursor' => ($compose_cursor ? $compose_cursor : 'top'),
199:             'rte_avail' => intval($browser->hasFeature('rte')),
200:             'spellcheck' => intval($prefs->getValue('compose_spellcheck')),
201:             'templates_mbox' => $templates_mbox ? $templates_mbox->form_to : null
202:         ));
203: 
204:         if ($injector->getInstance('IMP_Factory_Imap')->create()->access(IMP_Imap::ACCESS_DRAFTS) &&
205:             ($drafts_mbox = IMP_Mailbox::getPref(IMP_Mailbox::MBOX_DRAFTS)) &&
206:             !$drafts_mbox->readonly) {
207:             $base->js_conf += array_filter(array(
208:                 'auto_save_interval_val' => intval($prefs->getValue('auto_save_drafts')),
209:                 'close_draft' => intval($prefs->getValue('close_draft')),
210:                 'drafts_mbox' => $drafts_mbox->form_to
211:             ));
212:         }
213: 
214:         if ($registry->hasMethod('contacts/search')) {
215:             $base->js_conf['URI_ABOOK'] = strval(IMP_Basic_Contacts::url()->setRaw(true));
216:             $base->js_conf['ac_delete'] = strval(Horde_Themes::img('delete-small.png'));
217:             $base->js_conf['ac_minchars'] = intval($conf['compose']['ac_threshold']) ?: 1;
218:         }
219: 
220:         if ($prefs->getValue('set_priority')) {
221:             $base->js_conf['priority'] = array(
222:                 array(
223:                     'l' => _("High"),
224:                     'v' => 'high'
225:                 ),
226:                 array(
227:                     'l' => _("Normal"),
228:                     's' => true,
229:                     'v' => 'normal'
230:                 ),
231:                 array(
232:                     'l' => _("Low"),
233:                     'v' => 'low'
234:                 )
235:             );
236:         }
237: 
238:         if (!$prefs->isLocked('default_encrypt')) {
239:             $encrypt = array();
240:             foreach ($injector->getInstance('IMP_Compose_Ui')->encryptList(null, true) as $key => $val) {
241:                 $encrypt[] = array(
242:                     'l' => htmlspecialchars($val),
243:                     'v' => $key
244:                 );
245:             }
246: 
247:             if (!empty($encrypt)) {
248:                 $base->js_conf['encrypt'] = $encrypt;
249:             }
250:         }
251: 
252:         /* Gettext strings used in compose page. */
253:         $base->js_text += array(
254:             'change_identity' => _("You have edited your signature. Change the identity and lose your changes?"),
255:             'compose_cancel' => _("Cancelling this message will permanently discard its contents and will delete auto-saved drafts.\nAre you sure you want to do this?"),
256:             'compose_close' => _("Compose action completed. You may now safely close this window."),
257:             'dragdropimg_error' => _("Could not add %d file(s) to message: only images are supported."),
258:             'group_expand' => _("Expand Group"),
259:             'max_atc_size' => _("Your attachment(s) are too large and cannot be uploaded."),
260:             'max_atc_num' => _("You have reached the limit for the number of attachments in this message."),
261:             'nosubject' => _("The message does not have a subject entered.") . "\n" . _("Send message without a subject?"),
262:             'paste_error' => _("Could not paste image as the clipboard data is invalid."),
263:             'replyall' => _("%d recipients"),
264:             'spell_noerror' => _("No spelling errors found."),
265:             'toggle_html' => _("Discard all text formatting information (by converting from HTML to plain text)? This conversion cannot be reversed."),
266:             'uploading' => _("Uploading...")
267:         );
268:     }
269: 
270: }
271: 
API documentation generated by ApiGen