Fix outgoing body wrapping in devel, by forwardporting the working code
[squirrelmail.git] / src / compose.php
index 2cfa3dd94441bcb09abd715038d36d59e6b9e9e6..6d4c72383f3f9896c21ab1ed8efcf112508a2aef 100644 (file)
@@ -333,7 +333,7 @@ if ($draft) {
                 exit();
             }
             else {
-                Header("Location: $location/right_main.php?mailbox=$draft_folder".
+                Header("Location: $location/right_main.php?mailbox=" . urlencode($draft_folder) .
                        "&startMessage=1&note=".urlencode($draft_message));
                 exit();
             }
@@ -369,12 +369,24 @@ if ($send) {
         $body = str_replace("\r", "\n", $body);
 
         /**
-         * If the browser doesn't support "VIRTUAL" as the wrap type.
-         * then the line length will be longer than $editor_size
-         * almost all browsers support VIRTUAL, so remove the line by line checking
-         * If this causes a problem, call sqBodyWrap
+         * Rewrap $body so that no line is bigger than $editor_size
          */
-        // sqBodyWrap($body, $editor_size);
+        $body = explode("\n", $body);
+        $newBody = '';
+        foreach ($body as $line) {
+            if( $line <> '-- ' ) {
+               $line = rtrim($line);
+            }
+            if (strlen($line) <= $editor_size + 1) {
+                $newBody .= $line . "\n";
+            } else {
+                sqWordWrap($line, $editor_size);
+                $newBody .= $line . "\n";
+
+            }
+
+        }
+        $body = $newBody;
 
         $composeMessage=$compose_messages[$session];
 
@@ -631,9 +643,9 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se
                 $bodypart = strip_tags($bodypart);
             }
             if (isset($languages[$squirrelmail_language]['XTRA_CODE']) &&
-                function_exists($languages[$squirrelmail_language]['XTRA_CODE'])) {
+                function_exists($languages[$squirrelmail_language]['XTRA_CODE'] . '_decode')) {
                 if (mb_detect_encoding($bodypart) != 'ASCII') {
-                    $bodypart = $languages[$squirrelmail_language]['XTRA_CODE']('decode', $bodypart);
+                    $bodypart = call_user_func($languages[$squirrelmail_language]['XTRA_CODE'] . '_decode', $bodypart);
                 }
             }
 
@@ -644,7 +656,7 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se
         }
 
         if ( $actual && is_conversion_safe($actual) && $actual != $default_charset){
-          $bodypart = charset_convert($actual,$bodypart,$default_charset);
+          $bodypart = charset_convert($actual,$bodypart,$default_charset,false);
         }
 
             $body .= $bodypart;
@@ -840,8 +852,8 @@ function getAttachments($message, &$composeMessage, $passed_id, $entities, $imap
            }
            $filename = str_replace('&#32;', ' ', decodeHeader($filename));
            if (isset($languages[$squirrelmail_language]['XTRA_CODE']) &&
-               function_exists($languages[$squirrelmail_language]['XTRA_CODE'])) {
-                $filename =  $languages[$squirrelmail_language]['XTRA_CODE']('encode', $filename);
+               function_exists($languages[$squirrelmail_language]['XTRA_CODE'] . '_encode')) {
+                $filename =  call_user_func($languages[$squirrelmail_language]['XTRA_CODE'] . '_encode', $filename);
            }
            $localfilename = GenerateRandomString(32, '', 7);
            $full_localfilename = "$hashed_attachment_dir/$localfilename";
@@ -929,14 +941,14 @@ function showInputForm ($session, $values=false) {
     }
 
     if ($use_javascript_addr_book) {
-        echo "\n". '<SCRIPT LANGUAGE=JavaScript>'."\n<!--\n" .
+        echo "\n". '<script language="JavaScript">'."\n<!--\n" .
              'function open_abook() { ' . "\n" .
              '  var nwin = window.open("addrbook_popup.php","abookpopup",' .
              '"width=670,height=300,resizable=yes,scrollbars=yes");' . "\n" .
              '  if((!nwin.opener) && (document.windows != null))' . "\n" .
              '    nwin.opener = document.windows;' . "\n" .
              "}\n" .
-             "// -->\n</SCRIPT>\n\n";
+             "// -->\n</script>\n\n";
     }
 
     echo "\n" . '<form name="compose" action="compose.php" method="post" ' .
@@ -962,15 +974,15 @@ function showInputForm ($session, $values=false) {
     }
 
     if ($saved_draft == 'yes') {
-        echo '<BR><CENTER><B>'. _("Draft Saved").'</CENTER></B>';
+        echo '<br /><center><b>'. _("Draft Saved").'</center></b>';
     }
     if ($mail_sent == 'yes') {
-        echo '<BR><CENTER><B>'. _("Your Message has been sent.").'</CENTER></B>';
+        echo '<br /><center><b>'. _("Your Message has been sent.").'</center></b>';
     }
     echo '<table align="center" cellspacing="0" border="0">' . "\n";
     if ($compose_new_win == '1') {
-        echo '<TABLE ALIGN=CENTER BGCOLOR="'.$color[0].'" WIDTH="100%" BORDER=0>'."\n" .
-             '   <TR><TD></TD>'. html_tag( 'td', '', 'right' ) . '<INPUT TYPE="BUTTON" NAME="Close" onClick="return self.close()" VALUE='._("Close").'></TD></TR>'."\n";
+        echo '<table align="center" bgcolor="'.$color[0].'" width="100%" border="0">'."\n" .
+             '   <tr><td></td>'. html_tag( 'td', '', 'right' ) . '<input type="button" name="Close" onClick="return self.close()" value="'._("Close").'" /></td></tr>'."\n";
     }
     if ($location_of_buttons == 'top') {
         showComposeButtonRow();
@@ -996,28 +1008,28 @@ function showInputForm ($session, $values=false) {
 
     echo '   <tr>' . "\n" .
                 html_tag( 'td', '', 'right', $color[4], 'width="10%"' ) .
-                _("To:") . '</TD>' . "\n" .
+                _("To") . ':</td>' . "\n" .
                 html_tag( 'td', '', 'left', $color[4], 'width="90%"' ) .
                 addInput('send_to', $send_to, 60). '<br />' . "\n" .
          '      </td>' . "\n" .
          '   </tr>' . "\n" .
          '   <tr>' . "\n" .
                 html_tag( 'td', '', 'right', $color[4] ) .
-                _("CC:") . '</td>' . "\n" .
+                _("Cc") . ':</td>' . "\n" .
                 html_tag( 'td', '', 'left', $color[4] ) .
-      addInput('send_to_cc', $send_to_cc, 60). '<br />' . "\n" .
+                addInput('send_to_cc', $send_to_cc, 60). '<br />' . "\n" .
          '      </td>' . "\n" .
          '   </tr>' . "\n" .
          '   <tr>' . "\n" .
                 html_tag( 'td', '', 'right', $color[4] ) .
-                _("BCC:") . '</td>' . "\n" .
+                _("Bcc") . ':</td>' . "\n" .
                 html_tag( 'td', '', 'left', $color[4] ) .
-      addInput('send_to_bcc', $send_to_bcc, 60).'<br />' . "\n" .
+                addInput('send_to_bcc', $send_to_bcc, 60).'<br />' . "\n" .
          '      </td>' . "\n" .
          '   </tr>' . "\n" .
          '   <tr>' . "\n" .
                 html_tag( 'td', '', 'right', $color[4] ) .
-                _("Subject:") . '</td>' . "\n" .
+                _("Subject") . ':</td>' . "\n" .
                 html_tag( 'td', '', 'left', $color[4] ) . "\n";
     echo '         '.addInput('subject', $subject, 60).
          '      </td>' . "\n" .
@@ -1029,16 +1041,16 @@ function showInputForm ($session, $values=false) {
 
     /* why this distinction? */
     if ($compose_new_win == '1') {
-        echo '   <TR>' . "\n" .
-             '      <TD BGCOLOR="' . $color[0] . '" COLSPAN=2 ALIGN=CENTER>' . "\n" .
-             '         <TEXTAREA NAME="body" ID="body" ROWS="' . (int)$editor_height .
-             '" COLS="' . (int)$editor_size . '" WRAP="VIRTUAL">';
+        echo '   <tr>' . "\n" .
+             '      <td bgcolor="' . $color[0] . '" colspan="2" align="center">' . "\n" .
+             '         <textarea name="body" id="body" rows="' . (int)$editor_height .
+             '" cols="' . (int)$editor_size . '" wrap="virtual">';
     }
     else {
-        echo '   <TR>' . "\n" .
-            '      <TD BGCOLOR="' . $color[4] . '" COLSPAN=2>' . "\n" .
-            '         &nbsp;&nbsp;<TEXTAREA NAME="body" ID="body" ROWS="' . (int)$editor_height .
-            '" COLS="' . (int)$editor_size . '" WRAP="VIRTUAL">';
+        echo '   <tr>' . "\n" .
+            '      <td bgcolor="' . $color[4] . '" colspan="2">' . "\n" .
+            '         &nbsp;&nbsp;<textarea name="body" id="body" rows="' . (int)$editor_height .
+            '" cols="' . (int)$editor_size . '" wrap="virtual">';
     }
 
     if ($use_signature == true && $newmail == true && !isset($from_htmladdr_search)) {
@@ -1074,7 +1086,7 @@ function showInputForm ($session, $values=false) {
     } else {
         echo '   <tr>' . "\n" .
                     html_tag( 'td', '', 'right', '', 'colspan="2"' ) . "\n" .
-             '         <input type="submit" name="send" value="' . _("Send") . '" />' . "\n" .
+             '         ' . addSubmit(_("Send"), 'send').
              '         &nbsp;&nbsp;&nbsp;&nbsp;<br /><br />' . "\n" .
              '      </td>' . "\n" .
              '   </tr>' . "\n";
@@ -1116,7 +1128,7 @@ function showInputForm ($session, $values=false) {
                                  html_tag( 'td', '', 'left', '', 'valign="middle"' ) .
          '                          <input name="attachfile" size="48" type="file" />' . "\n" .
          '                          &nbsp;&nbsp;<input type="submit" name="attach"' .
-                                    ' value="' . _("Add") .'">' . "\n" .
+                                    ' value="' . _("Add") .'" />' . "\n" .
                                     $maxsize .
          '                       </td>' . "\n" .
          '                    </tr>' . "\n";
@@ -1132,9 +1144,9 @@ function showInputForm ($session, $values=false) {
                         $attachment->mime_header->type1;
 
                 $s_a[] = '<table bgcolor="'.$color[0].
-                '" border="0"><tr><td>'.
-                  addCheckBox('delete[]', FALSE, $key).
-                  "</td><td>\n" . $attached_filename .
+                    '" border="0"><tr><td>'.
+                    addCheckBox('delete[]', FALSE, $key).
+                    "</td><td>\n" . $attached_filename .
                     '</td><td>-</td><td> ' . $type . '</td><td>('.
                     show_readable_size( filesize( $attached_file ) ) . ')</td></tr></table>'."\n";
            }
@@ -1145,34 +1157,34 @@ function showInputForm ($session, $values=false) {
           echo '<tr>' . html_tag( 'td', '', 'left', $color[0], 'colspan="2"' ) . $s .'</td></tr>';
        }
        echo '<tr><td colspan="2"><input type="submit" name="do_delete" value="' .
-            _("Delete selected attachments") . "\">\n" .
+            _("Delete selected attachments") . "\" />\n" .
             '</td></tr>';
     }
     echo '                  </table>' . "\n" .
          '               </td>' . "\n" .
          '            </tr>' . "\n" .
-         '         </TABLE>' . "\n" .
-         '      </TD>' . "\n" .
-         '   </TR>' . "\n";
+         '         </table>' . "\n" .
+         '      </td>' . "\n" .
+         '   </tr>' . "\n";
         } // End of file_uploads if-block
     /* End of attachment code */
     if ($compose_new_win == '1') {
-        echo '</TABLE>'."\n";
+        echo '</table>'."\n";
     }
 
-    echo '</TABLE>' . "\n" .
-      addHidden('username', $username).
-      addHidden('smaction', $action).
-      addHidden('mailbox', $mailbox);
+    echo '</table>' . "\n" .
+        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.
     */
     sqgetGlobalVar('QUERY_STRING', $queryString, SQ_SERVER);
     echo addHidden('restoremessages', serialize($compose_messages)).
-      addHidden('composesession', $composesession).
-      addHidden('querystring', $queryString).
-      "</form>\n";
+         addHidden('composesession', $composesession).
+         addHidden('querystring', $queryString).
+         "</form>\n";
     if (!(bool) ini_get('file_uploads')) {
       /* File uploads are off, so we didn't show that part of the form.
          To avoid bogus bug reports, tell the user why. */
@@ -1181,7 +1193,7 @@ function showInputForm ($session, $values=false) {
     }
 
     do_hook('compose_bottom');
-    echo '</BODY></HTML>' . "\n";
+    echo '</body></html>' . "\n";
 }
 
 
@@ -1191,9 +1203,9 @@ function showComposeButtonRow() {
            $request_mdn, $request_dr,
            $data_dir, $username;
 
-    echo '   <TR>' . "\n" .
-         '      <TD></TD>' . "\n" .
-         '      <TD>' . "\n";
+    echo '   <tr>' . "\n" .
+         '      <td></td>' . "\n" .
+         '      <td>' . "\n";
     if ($default_use_priority) {
         if(!isset($mailprio)) {
             $mailprio = '3';
@@ -1213,34 +1225,34 @@ function showComposeButtonRow() {
         }
     }
 
-    echo '      </TD>' . "\n" .
-         '   </TR>' . "\n" .
-         '   <TR>'  . "\n" .
-         '      <TD></TD>' . "\n" .
-         '      <TD>' . "\n" .
-         '         <INPUT TYPE=SUBMIT NAME="sigappend" VALUE="' . _("Signature") . '">' . "\n";
+    echo '      </td>' . "\n" .
+         '   </tr>' . "\n" .
+         '   <tr>'  . "\n" .
+         '      <td></td>' . "\n" .
+         '      <td>' . "\n" .
+         '         <input type="submit" name="sigappend" value="' . _("Signature") . '" />' . "\n";
     if ($use_javascript_addr_book) {
-        echo "         <SCRIPT LANGUAGE=JavaScript><!--\n document.write(\"".
+        echo "         <script language=\"JavaScript\"><!--\n document.write(\"".
              "            <input type=button value=\\\""._("Addresses").
-                                 "\\\" onclick='javascript:open_abook();'>\");".
-             "            // --></SCRIPT><NOSCRIPT>\n".
-             "            <input type=submit name=\"html_addr_search\" value=\"".
-                              _("Addresses")."\">".
-             "         </NOSCRIPT>\n";
+                                 "\\\" onclick=\\\"javascript:open_abook();\\\" />\");".
+             "            // --></script><noscript>\n".
+             '            <input type="submit" name="html_addr_search" value="'.
+                              _("Addresses").'" />'.
+             "         </noscript>\n";
     } else {
-        echo '         <input type=submit name="html_addr_search" value="'.
-                                 _("Addresses").'">' . "\n";
+        echo '         <input type="submit" name="html_addr_search" value="'.
+                                 _("Addresses").'" />' . "\n";
     }
 
     if ($save_as_draft) {
-        echo '         <input type="submit" name ="draft" value="' . _("Save Draft") . "\">\n";
+        echo '         <input type="submit" name ="draft" value="' . _("Save Draft") . "\" />\n";
     }
 
-    echo '         <INPUT TYPE=submit NAME=send VALUE="'. _("Send") . '">' . "\n";
+    echo '         <input type="submit" name="send" value="'. _("Send") . '" />' . "\n";
     do_hook('compose_button_row');
 
-    echo '      </TD>' . "\n" .
-         '   </TR>' . "\n\n";
+    echo '      </td>' . "\n" .
+         '   </tr>' . "\n\n";
 }
 
 function checkInput ($show) {
@@ -1546,4 +1558,5 @@ function deliverMessage($composeMessage, $draft=false) {
     return $succes;
 }
 
+// vim: et ts=4
 ?>