$sOrig_from = decodeHeader($orig_from->getAddress(false),false,false,true);
}
-// $from = decodeHeader($orig_header->getAddr_s('from',"\n$indent"),false,false);
-
/* First, return an empty string when no citation style selected. */
if (($reply_citation_style == '') || ($reply_citation_style == 'none')) {
return '';
$full_reply_citation = sprintf(_("%s wrote:"),$sOrig_from);
break;
case 'quote_who':
- // FIXME: do we have to translate xml formating?
- $start = '<' . _("quote") . ' ' . _("who") . '="';
+ $start = '<quote who="';
$end = '">';
$full_reply_citation = $start . $sOrig_from . $end;
break;
}
if (!isset($compose_messages[$session]) || ($compose_messages[$session] == NULL)) {
- /* if (!array_key_exists($session, $compose_messages)) { /* We can only do this in PHP >= 4.1 */
$composeMessage = new Message();
$rfc822_header = new Rfc822Header();
$composeMessage->rfc822_header = $rfc822_header;
}
sqimap_logout($imap_stream);
}
+ session_write_close();
if ($compose_new_win == '1') {
if ( !isset($pageheader_sent) || !$pageheader_sent ) {
Header("Location: $location/compose.php?saved_draft=yes&session=$composesession");
if (checkInput(false) && !isset($AttachFailure)) {
if ($mailbox == "All Folders") {
/* We entered compose via the search results page */
- $mailbox="INBOX"; /* Send 'em to INBOX, that's safe enough */
+ $mailbox = 'INBOX'; /* Send 'em to INBOX, that's safe enough */
}
$urlMailbox = urlencode (trim($mailbox));
if (! isset($passed_id)) {
$composeMessage=$compose_messages[$session];
$Result = deliverMessage($composeMessage);
+ do_hook('compose_send_after', $Result, $composeMessage);
if (! $Result) {
showInputForm($session);
exit();
}
unset($compose_messages[$session]);
+
/* if it is resumed draft, delete draft message */
if ( isset($delete_draft)) {
$imap_stream = sqimap_login($username, $key, $imapServerAddress, $imapPort, false);
}
sqimap_logout($imap_stream);
}
+ session_write_close();
if ($compose_new_win == '1') {
if ( !isset($pageheader_sent) || !$pageheader_sent ) {
Header("Location: $location/compose.php?mail_sent=yes");
if (isset($delete) && is_array($delete)) {
$composeMessage = $compose_messages[$session];
foreach($delete as $index) {
- $attached_file = $composeMessage->entities[$index]->att_local_name;
- unlink ($attached_file);
- unset ($composeMessage->entities[$index]);
+ if (!empty($composeMessage->entities) && isset($composeMessage->entities[$index])) {
+ $composeMessage->entities[$index]->purgeAttachments();
+ unset ($composeMessage->entities[$index]);
+ }
}
$new_entities = array();
foreach ($composeMessage->entities as $entity) {
} else {
$mailprio = '';
}
- //ClearAttachments($session);
$identity = '';
$from_o = $orig_header->from;
$from_htmladdr_search, $location_of_buttons, $attachment_dir,
$username, $data_dir, $identity, $idents, $delete_draft,
$mailprio, $compose_new_win, $saved_draft, $mail_sent, $sig_first,
- $username, $compose_messages, $composesession, $default_charset;
+ $username, $compose_messages, $composesession, $default_charset,
+ $compose_onsubmit;
if (checkForJavascript()) {
$onfocus = ' onfocus="alreadyFocused=true;"';
echo "\n" . '<form name="compose" action="compose.php" method="post" ' .
'enctype="multipart/form-data"';
+
+ $compose_onsubmit = array();
do_hook('compose_form');
+ // Plugins that use compose_form hook can add an array entry
+ // to the globally scoped $compose_onsubmit; we add them up
+ // here and format the form tag's full onsubmit handler.
+ // Each plugin should use "return false" if they need to
+ // stop form submission but otherwise should NOT use "return
+ // true" to give other plugins the chance to do what they need
+ // to do; SquirrelMail itself will add the final "return true".
+ // Onsubmit text is enclosed inside of double quotes, so plugins
+ // need to quote accordingly.
+ if (checkForJavascript()) {
+ $onsubmit_text = ' onsubmit="';
+ if (empty($compose_onsubmit))
+ $compose_onsubmit = array();
+ else if (!is_array($compose_onsubmit))
+ $compose_onsubmit = array($compose_onsubmit);
+
+ foreach ($compose_onsubmit as $text) {
+ $text = trim($text);
+ if (substr($text, -1) != ';' && substr($text, -1) != '}')
+ $text .= '; ';
+ $onsubmit_text .= $text;
+ }
+
+ echo $onsubmit_text . ' return true;"';
+ }
+
+
echo ">\n";
echo addHidden('startMessage', $startMessage);
/* True if FAILURE */
function saveAttachedFiles($session) {
- global $_FILES, $attachment_dir, $attachments, $username,
+ global $_FILES, $attachment_dir, $username,
$data_dir, $compose_messages;
/* get out of here if no file was attached at all */
$full_localfilename = "$hashed_attachment_dir/$localfilename";
}
- // FIXME: we SHOULD prefer move_uploaded_file over rename because
- // m_u_f works better with restricted PHP installs (safe_mode, open_basedir)
- if (!@rename($_FILES['attachfile']['tmp_name'], $full_localfilename)) {
- if (!@move_uploaded_file($_FILES['attachfile']['tmp_name'],$full_localfilename)) {
+ // m_u_f works better with restricted PHP installs (safe_mode, open_basedir),
+ // if that doesn't work, try a simple rename.
+ if (!@move_uploaded_file($_FILES['attachfile']['tmp_name'],$full_localfilename)) {
+ if (!@rename($_FILES['attachfile']['tmp_name'], $full_localfilename)) {
return true;
}
}
sqsession_register($compose_messages , 'compose_messages');
}
-function ClearAttachments($composeMessage) {
- if ($composeMessage->att_local_name) {
- $attached_file = $composeMessage->att_local_name;
- if (file_exists($attached_file)) {
- unlink($attached_file);
- }
- }
- for ($i=0, $entCount=count($composeMessage->entities);$i< $entCount; ++$i) {
- ClearAttachments($composeMessage->entities[$i]);
- }
-}
-
/* parse values like 8M and 2k into bytes */
function getByteSize($ini_size) {
/**
* temporary function to make use of the deliver class.
- * In the future the responsable backend should be automaticly loaded
+ * In the future the responsible backend should be automaticly loaded
* and conf.pl should show a list of available backends.
* The message also should be constructed by the message class.
*/
$smtpServerAddress, $smtpPort, $user, $pass, $authPop);
} elseif (!$draft) {
require_once(SM_PATH . 'class/deliver/Deliver_SendMail.class.php');
- global $sendmail_path;
- $deliver = new Deliver_SendMail();
+ global $sendmail_path, $sendmail_args;
+ $deliver = new Deliver_SendMail(array('sendmail_args'=>$sendmail_args));
$stream = $deliver->initStream($composeMessage,$sendmail_path);
} elseif ($draft) {
global $draft_folder;
sqimap_append_done ($imap_stream, $draft_folder);
sqimap_logout($imap_stream);
unset ($imap_deliver);
+ $composeMessage->purgeAttachments();
return $length;
} else {
- $msg = '<br />'.sprintf(_("Error: Draft folder %s does not exist."), $draft_folder);
+ $msg = '<br />'.sprintf(_("Error: Draft folder %s does not exist."), htmlspecialchars($draft_folder));
plain_error_message($msg, $color);
return false;
}
}
- $succes = false;
+ $success = false;
if ($stream) {
$length = $deliver->mail($composeMessage, $stream);
- $succes = $deliver->finalizeStream($stream);
+ $success = $deliver->finalizeStream($stream);
}
- if (!$succes) {
+ if (!$success) {
+ // $deliver->dlv_server_msg is not always server's reply
$msg = $deliver->dlv_msg . '<br />' .
_("Server replied:") . ' ' . $deliver->dlv_ret_nr . ' ' .
$deliver->dlv_server_msg;
global $passed_id, $mailbox, $action, $what, $iAccount,$startMessage;
- ClearAttachments($composeMessage);
+ $composeMessage->purgeAttachments();
if ($action == 'reply' || $action == 'reply_all') {
$aMailbox = sqm_api_mailbox_select($imap_stream, $iAccount, $mailbox,array('setindex' => $what, 'offset' => $startMessage),array());
//sqimap_mailbox_select ($imap_stream, $mailbox);
$aMailbox['MSG_HEADERS'][$passed_id]['FLAGS'] = $aMsg['FLAGS'];
}
}
+ /**
+ * Write mailbox with updated seen flag information back to cache.
+ */
+ $mailbox_cache[$iAccount.'_'.$aMailbox['NAME']] = $aMailbox;
+ sqsession_register($mailbox_cache,'mailbox_cache');
}
- /**
- * Write mailbox with updated seen flag information back to cache.
- */
- $mailbox_cache[$iAccount.'_'.$aMailbox['NAME']] = $aMailbox;
- sqsession_register($mailbox_cache,'mailbox_cache');
sqimap_logout($imap_stream);
}
- return $succes;
+ return $success;
}
-?>
\ No newline at end of file
+?>