From 762853f42b4c1151804da245e042fec5c505f27e Mon Sep 17 00:00:00 2001 From: stevetruckstuff Date: Wed, 27 Sep 2006 21:54:14 +0000 Subject: [PATCH] t12n of compose function. Paul, could you please check the plugin hook implementation for correctness? I don't think I understand it all yet. git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@11743 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- src/compose.php | 302 ++++++++------------- templates/default/compose_attachments.tpl | 70 +++++ templates/default/compose_body.tpl | 42 +++ templates/default/compose_buttons.tpl | 78 ++++++ templates/default/compose_header.tpl | 77 ++++++ templates/default/compose_newwin_close.tpl | 31 +++ templates/default/stylesheet.tpl | 97 ++++++- 7 files changed, 490 insertions(+), 207 deletions(-) create mode 100644 templates/default/compose_attachments.tpl create mode 100644 templates/default/compose_body.tpl create mode 100644 templates/default/compose_buttons.tpl create mode 100644 templates/default/compose_header.tpl create mode 100644 templates/default/compose_newwin_close.tpl diff --git a/src/compose.php b/src/compose.php index 742d4bc9..7b3d4953 100644 --- a/src/compose.php +++ b/src/compose.php @@ -1,5 +1,4 @@ AssignDelayedErrors($delayed_errors); - sqsession_unregister("delayed_errors"); -} + +// Turn on delayed error handling in case we wind up redirecting below +$oErrorHandler->setDelayedErrors(true); /** SESSION/POST/GET VARS */ sqgetGlobalVar('session',$session); @@ -389,10 +387,10 @@ if ($draft) { } sqimap_logout($imap_stream); } - if (count($oErrorHandler->aErrors)) { - sqsession_register($oErrorHandler->aErrors,"delayed_errors"); - } + + $oErrorHandler->saveDelayedErrors(); session_write_close(); + if ($compose_new_win == '1') { if ( !isset($pageheader_sent) || !$pageheader_sent ) { Header("Location: $location/compose.php?saved_draft=yes&session=$composesession"); @@ -491,10 +489,9 @@ if ($send) { /* * Store the error array in the session because they will be lost on a redirect */ - if (count($oErrorHandler->aErrors)) { - sqsession_register($oErrorHandler->aErrors,"delayed_errors"); - } + $oErrorHandler->saveDelayedErrors(); session_write_close(); + if ($compose_new_win == '1') { if ( !isset($pageheader_sent) || !$pageheader_sent ) { Header("Location: $location/compose.php?mail_sent=yes"); @@ -684,7 +681,8 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se global $editor_size, $default_use_priority, $body, $idents, $use_signature, $data_dir, $username, $key, $imapServerAddress, $imapPort, $compose_messages, - $composeMessage, $body_quote; + $composeMessage, $body_quotem, $request_mdn, $request_dr, + $default_use_mdn, $mdn_user_support; global $languages, $squirrelmail_language, $default_charset; /* @@ -739,7 +737,7 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se $type1 = $msg->type1; $unencoded_bodypart = mime_fetch_body($imapConnection, $passed_id, $ent); $body_part_entity = $message->getEntity($ent); - $bodypart = decodeBody($unencoded_bodypart, + $bodypart = decodeBody($unencoded_bodypart, $body_part_entity->header->encoding); if ($type1 == 'html') { $bodypart = str_replace("\n", ' ', $bodypart); @@ -828,6 +826,11 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se } } $subject = decodeHeader($orig_header->subject,false,false,true); + + // Remember the receipt settings + $request_mdn = $mdn_user_support && !empty($orig_header->dnt) ? '1' : '0'; + $request_dr = $mdn_user_support && !empty($orig_header->drnt) ? '1' : '0'; + /* remember the references and in-reply-to headers in case of an reply */ $composeMessage->rfc822_header->more_headers['References'] = $orig_header->references; $composeMessage->rfc822_header->more_headers['In-Reply-To'] = $orig_header->in_reply_to; @@ -1038,7 +1041,7 @@ function showInputForm ($session, $values=false) { $username, $data_dir, $identity, $idents, $delete_draft, $mailprio, $compose_new_win, $saved_draft, $mail_sent, $sig_first, $compose_messages, $composesession, $default_charset, - $compose_onsubmit, $oTemplate; + $compose_onsubmit, $oTemplate, $oErrorHandler; if (checkForJavascript()) { $onfocus = ' onfocus="alreadyFocused=true;"'; @@ -1127,90 +1130,45 @@ function showInputForm ($session, $values=false) { } if ($saved_draft == 'yes') { - echo '
'. _("Draft Saved").'
'; + $oTemplate->assign('note', _("Draft Saved")); + $oTemplate->display('note.tpl'); } if ($mail_sent == 'yes') { - echo '
'. _("Your Message has been sent.").'
'; + $oTemplate->assign('note', _("Your message has been sent.")); + $oTemplate->display('note.tpl'); } if ($compose_new_win == '1') { - echo ''."\n" . - ' '.html_tag( 'td', '', 'right' ). - ''."\n"; - } else { - echo '
' . "\n"; + $oTemplate->display('compose_newwin_close.tpl'); } + if ($location_of_buttons == 'top') { showComposeButtonRow(); } - /* display select list for identities */ + $identities = array(); if (count($idents) > 1) { - $ident_list = array(); + reset($idents); foreach($idents as $id => $data) { - $ident_list[$id] = - $data['full_name'].' <'.$data['email_address'].'>'; + $identities[$id] = $data['full_name'].' <'.$data['email_address'].'>'; } - echo ' ' . "\n" . - html_tag( 'td', '', 'right', $color[4], 'width="10%"' ) . - '' . "\n" . - html_tag( 'td', '', 'left', $color[4], 'width="90%"' ) . - ' '. - addSelect('identity', $ident_list, $identity, TRUE); - - echo ' ' . "\n" . - ' ' . "\n"; - } - - echo ' ' . "\n" . - html_tag( 'td', '', 'right', $color[4], 'width="10%"' ) . - ':' . "\n" . - html_tag( 'td', '', 'left', $color[4], 'width="90%"' ) . - addInput('send_to', $send_to, 60, 0, $onfocus_array). '
' . "\n" . - ' ' . "\n" . - ' ' . "\n" . - ' ' . "\n" . - html_tag( 'td', '', 'right', $color[4] ) . - ':' . "\n" . - html_tag( 'td', '', 'left', $color[4] ) . - addInput('send_to_cc', $send_to_cc, 60, 0, $onfocus_array). '
' . "\n" . - ' ' . "\n" . - ' ' . "\n" . - ' ' . "\n" . - html_tag( 'td', '', 'right', $color[4] ) . - ':' . "\n" . - html_tag( 'td', '', 'left', $color[4] ) . - addInput('send_to_bcc', $send_to_bcc, 60, 0, $onfocus_array).'
' . "\n" . - ' ' . "\n" . - ' ' . "\n" . - ' ' . "\n" . - html_tag( 'td', '', 'right', $color[4] ) . - ':' . "\n" . - html_tag( 'td', '', 'left', $color[4] ) . "\n"; - echo ' '.addInput('subject', $subject, 60, 0, $onfocus_array). - ' ' . "\n" . - ' ' . "\n\n"; + } + + $oTemplate->assign('identities', $identities); + $oTemplate->assign('identity_def', $identity); + $oTemplate->assign('input_onfocus', 'onfocus="'.join(' ', $onfocus_array).'"'); + + $oTemplate->assign('to', htmlspecialchars($send_to)); + $oTemplate->assign('cc', htmlspecialchars($send_to_cc)); + $oTemplate->assign('bcc', htmlspecialchars($send_to_bcc)); + $oTemplate->assign('subject', htmlspecialchars($subject)); + + $oTemplate->display('compose_header.tpl'); if ($location_of_buttons == 'between') { showComposeButtonRow(); } - /** - * When message is compose in new window, different colors are used. - */ - if ($compose_new_win == '1') { - echo ' ' . "\n" . - ' ' . "\n" . - ' ' . "\n"; - + $oTemplate->assign('editor_width', (int)$editor_size); + $oTemplate->assign('editor_height', (int)$editor_height); + $oTemplate->assign('input_onfocus', 'onfocus="'.join(' ', $onfocus_array).'"'); + $oTemplate->assign('body', $body_str); + $oTemplate->assign('show_bottom_send', $location_of_buttons!='bottom'); + + $oTemplate->display ('compose_body.tpl'); + if ($location_of_buttons == 'bottom') { showComposeButtonRow(); - } else { - echo ' ' . "\n" . - html_tag( 'td', '', 'right', '', 'colspan="2"' ) . "\n" . - ' ' . addSubmit(_("Send"), 'send'). - '     

' . "\n" . - ' ' . "\n" . - ' ' . "\n"; } /* This code is for attachments */ @@ -1274,32 +1228,7 @@ function showInputForm ($session, $values=false) { } } - if(count($sizes) > 0) { - $maxsize = '(max. ' . show_readable_size( min( $sizes ) ) . ')' - . addHidden('MAX_FILE_SIZE', min( $sizes )); - } else { - $maxsize = ''; - } - echo ' ' . "\n" . - ' ' . "\n" . - ' ' . "\n" . - '
' . "\n" . - '
' . "\n" . - '
' . "\n" . - ' ' . "\n" . - ' ' . "\n" . - ' ' . html_tag( 'td', '', 'left', $color[0], 'colspan="2"' ) . $s .''; - } - echo ''; - } - echo '
' . "\n" . - ' ' . "\n" . - ' ' . "\n" . - html_tag( 'td', '', 'right', '', 'valign="middle"' ) . - _("Attach:") . '' . "\n" . - html_tag( 'td', '', 'left', '', 'valign="middle"' ) . - ' ' . "\n" . - '   ' . "\n" . - $maxsize . - ' ' . "\n" . - ' ' . "\n"; - - $s_a = array(); + $attach = array(); if ($composeMessage->entities) { foreach ($composeMessage->entities as $key => $attachment) { $attached_file = $attachment->att_local_name; @@ -1307,36 +1236,28 @@ function showInputForm ($session, $values=false) { $attached_filename = decodeHeader($attachment->mime_header->getParameter('name')); $type = $attachment->mime_header->type0.'/'. $attachment->mime_header->type1; - - $s_a[] = '
'. - addCheckBox('delete[]', FALSE, $key). - "\n" . $attached_filename . - '- ' . $type . '('. - show_readable_size( filesize( $attached_file ) ) . ')
'."\n"; + + $a = array(); + $a['Key'] = $key; + $a['FileName'] = $attached_filename; + $a['ContentType'] = $type; + $a['Size'] = filesize($attached_file); + $attach[$key] = $a; } } } - if (count($s_a)) { - foreach ($s_a as $s) { - echo '
\n" . - '
' . "\n" . - '
' . "\n" . - ' ' . "\n" . - ' ' . "\n"; + + $max = min($sizes); + $oTemplate->assign('max_file_size', empty($max) ? -1 : $max); + $oTemplate->assign('attachments', $attach); + + $oTemplate->display('compose_attachments.tpl'); } // End of file_uploads if-block /* End of attachment code */ - echo '' . "\n" . - addHidden('username', $username). - addHidden('smaction', $action). - addHidden('mailbox', $mailbox); + + echo addHidden('username', $username). + addHidden('smaction', $action). + addHidden('mailbox', $mailbox); /* store the complete ComposeMessages array in a hidden input value so we can restore them in case of a session timeout. @@ -1355,6 +1276,12 @@ function showInputForm ($session, $values=false) { } do_hook('compose_bottom'); + + if ($compose_new_win=='1') { + $oTemplate->display('compose_newwin_close.tpl'); + } + + $oErrorHandler->setDelayedErrors(false); $oTemplate->display('footer.tpl'); } @@ -1365,38 +1292,20 @@ function showComposeButtonRow() { $request_mdn, $request_dr, $data_dir, $username; - echo ' ' . "\n" . - ' ' . "\n" . - ' ' . "\n"; - if ($default_use_priority) { - if(!isset($mailprio)) { - $mailprio = '3'; - } - echo ' : '. - addSelect('mailprio', array( - '1' => _("High"), - '3' => _("Normal"), - '5' => _("Low") ), $mailprio, TRUE); + global $oTemplate, $buffer_hook; + + if ($default_use_priority) { + $priorities = array('1'=>_("High"), '3'=>_("Normal"), '5'=>_("Low")); + $priority = isset($mailprio) ? $mailprio : 3; + } else { + $priorities = array(); + $priority = NULL; } + $mdn_user_support=getPref($data_dir, $username, 'mdn_user_support',$default_use_mdn); - if ($default_use_mdn) { - if ($mdn_user_support) { - echo ' ' . _("Receipt") .': '. - addCheckBox('request_mdn', $request_mdn == '1', '1') . - '' . - addCheckBox('request_dr', $request_dr == '1', '1') . - ''; - } - } - echo ' ' . "\n" . - ' ' . "\n" . - ' ' . "\n" . - ' ' . "\n" . - ' ' . "\n" . - ' ' . "\n"; if ($use_javascript_addr_book) { - echo " \n"; } else { - echo ' ' . "\n"; } - if ($save_as_draft) { - echo ' \n"; - } - - echo ' ' . "\n"; - do_hook('compose_button_row'); + $oTemplate->assign('allow_priority', $default_use_priority==1); + $oTemplate->assign('priority_list', $priorities); + $oTemplate->assign('current_priority', $priority); + + $oTemplate->assign('notifications_enabled', $mdn_user_support==1); + $oTemplate->assign('read_receipt', $request_mdn=='1'); + $oTemplate->assign('delivery_receipt', $request_dr=='1'); + + $oTemplate->assign('drafts_enabled', $save_as_draft); + $oTemplate->assign('address_book_button', $addr_book); - echo ' ' . "\n" . - ' ' . "\n\n"; + $oTemplate->display('compose_buttons.tpl'); } function checkInput ($show) { @@ -1567,11 +1479,17 @@ function deliverMessage($composeMessage, $draft=false) { /* Receipt: On Read */ if (isset($request_mdn) && $request_mdn) { $rfc822_header->dnt = $rfc822_header->parseAddress($from_mail,true); + } elseif (isset($rfc822_header->dnt)) { + unset($rfc822_header->dnt); } + /* Receipt: On Delivery */ if (isset($request_dr) && $request_dr) { $rfc822_header->more_headers['Return-Receipt-To'] = $from_mail; + } elseif (isset($rfc822_header->more_headers['Return-Receipt-To'])) { + unset($rfc822_header->more_headers['Return-Receipt-To']); } + /* multipart messages */ if (count($composeMessage->entities)) { $message_body = new Message(); @@ -1605,7 +1523,7 @@ function deliverMessage($composeMessage, $draft=false) { $rfc822_header->content_type = $content_type; $composeMessage->rfc822_header = $rfc822_header; - + /* Here you can modify the message structure just before we hand it over to deliver */ $hookReturn = do_hook('compose_send', $composeMessage); @@ -1744,4 +1662,4 @@ function deliverMessage($composeMessage, $draft=false) { } return $success; } -?> +?> \ No newline at end of file diff --git a/templates/default/compose_attachments.tpl b/templates/default/compose_attachments.tpl new file mode 100644 index 00000000..ced5e89b --- /dev/null +++ b/templates/default/compose_attachments.tpl @@ -0,0 +1,70 @@ + +
+ + + + + + + + + + + 0) { + ?> + + + + +
+ : + + +   + " /> +   + + + ( ) + +
+ + + - () +
+ " /> +
+
\ No newline at end of file diff --git a/templates/default/compose_body.tpl b/templates/default/compose_body.tpl new file mode 100644 index 00000000..f94c3207 --- /dev/null +++ b/templates/default/compose_body.tpl @@ -0,0 +1,42 @@ + +
+ + + + + + + + + +
+ +
+ " /> +
+
\ No newline at end of file diff --git a/templates/default/compose_buttons.tpl b/templates/default/compose_buttons.tpl new file mode 100644 index 00000000..8ebb0fe5 --- /dev/null +++ b/templates/default/compose_buttons.tpl @@ -0,0 +1,78 @@ + +
+ + + + + + + + + + + + + + + +
+ + + +
+ : + + /> +
+ /> +
+ " />  +   + + " />  + + " />  + +
+
\ No newline at end of file diff --git a/templates/default/compose_header.tpl b/templates/default/compose_header.tpl new file mode 100644 index 00000000..2be40c3d --- /dev/null +++ b/templates/default/compose_header.tpl @@ -0,0 +1,77 @@ + +
+ + 1) { + ?> + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + /> +
+ + + /> +
+ + + /> +
+ + + /> +
+
\ No newline at end of file diff --git a/templates/default/compose_newwin_close.tpl b/templates/default/compose_newwin_close.tpl new file mode 100644 index 00000000..e3eec8bf --- /dev/null +++ b/templates/default/compose_newwin_close.tpl @@ -0,0 +1,31 @@ + +
+ + + + +
+ " onclick="self.close()" /> +
+
\ No newline at end of file diff --git a/templates/default/stylesheet.tpl b/templates/default/stylesheet.tpl index 0ae3d9ce..e57ae940 100644 --- a/templates/default/stylesheet.tpl +++ b/templates/default/stylesheet.tpl @@ -763,17 +763,17 @@ tr.odd { text-align: ; } -.search table { +div.search table { margin-top: 12px; margin-bottom: 12px; } -.search td.header4 { +div.search td.header4 { border-bottom: 1px solid ; vertical-align: bottom; } -.search td.queryAction { +div.search td.queryAction { text-align: center; font-size: small; width: 1%; @@ -784,71 +784,138 @@ tr.odd { border-bottom: 1px solid ; } -.search td.queryDesc { +div.search td.queryDesc { border-top: 1px solid ; border-bottom: 1px solid ; } -.search span { +div.search span { padding-left: 2px; padding-right: 2px; } -.search span.operator { +div.search span.operator { font-weight: normal; text-decoration: underline; font-style: italic; } -.search span.mailbox { +div.search span.mailbox { font-weight: bold } -.search span.conditions { +div.search span.conditions { font-weight: normal; text-decoration: underline; font-style: italic; } -.search span.value { +div.search span.value { font-weight: bold; } -.search span.error { +div.search span.error { color: ; font-weight: bold; font-size: 125%; } -.search td.searchForm { +div.search td.searchForm { border-right: 1px solid ; border-left: 1px solid ; font-weight: bold; text-align: center; } -.search td.queryError { +div.search td.queryError { color: ; font-weight: bold; text-align: center; padding: 4px; } -.search td.header1 input { +div.search td.header1 input { font-size: 80%; margin: 2px; } -.search h1 { +div.search h1 { font-weight: bold; font-size: 150%; margin-top: 6px; margin-bottom: 2px; } -.search h2 { +div.search h2 { color: ; font-weight: bold; text-align: center; } +div.compose { + text-align: center; +} + +div.compose table { + margin-top: 10px; + margin-bottom: 10px; + margin-left: auto; + margin-right: auto; +} + +div.compose td.fieldName { + text-align: ; + font-weight: bold; + width: 30%; + vertical-align: top; +} + +div.compose td.fieldValue { + text-align: ; +} + +div.compose td.buttons { + text-align: center; +} + +div.compose input { + font-size: 80%; +} + +div.compose textarea { + margin-top: 5px; + margin-bottom: 5px; +} + +div.compose td.bottomSend { + text-align: center; +} + +div.compose tr.header { + background: ; +} + +div.compose tr.header td { + padding-top: 4px; + padding-bottom: 4px; +} + +div.compose tr.attachment td { + background: ; + border-top: 1px solid ; + border-bottom: 1px solid ; +} + +div.compose table.close { + width: 100%; + background: ; + border:1px solid ; + text-align: center; + margin: 0; +} + +div.readMenuBar table.table2 { + width: 100%; +} + + -- 2.25.1