Add ask_user_info redirect to compose screen
[squirrelmail.git] / src / compose.php
index 2201b18f8e1e73e89cc8af860bdf0bb29236eda3..9f99f9855554d5adf0045bb29d70255a44905ca9 100644 (file)
  */
 require('../include/init.php');
 
+/* If email_address not set and admin wants us to ask user for it,
+ * redirect to options page. */
+if ( $ask_user_info && getPref($data_dir, $username,'email_address') == "" ) {
+    header("Location: " . get_location() . "/options.php?optpage=personal");
+    exit;
+}
+
 /* SquirrelMail required files. */
 require_once(SM_PATH . 'functions/imap_general.php');
 require_once(SM_PATH . 'functions/imap_messages.php');
@@ -45,31 +52,37 @@ sqgetGlobalVar('delayed_errors',  $delayed_errors,  SQ_SESSION);
 $oErrorHandler->setDelayedErrors(true);
 
 /** SESSION/POST/GET VARS */
-sqgetGlobalVar('session',$session);
-sqgetGlobalVar('mailbox',$mailbox);
-if(!sqgetGlobalVar('identity',$identity)) {
+sqgetGlobalVar('send', $send, SQ_POST);
+// Send can only be achieved by setting $_POST var. If Send = true then
+// retrieve other form fields from $_POST
+if (isset($send) && $send) {
+    $SQ_GLOBAL = SQ_POST;
+} else {
+    $SQ_GLOBAL = SQ_FORM;
+}
+sqgetGlobalVar('session',$session, $SQ_GLOBAL);
+sqgetGlobalVar('mailbox',$mailbox, $SQ_GLOBAL);
+if(!sqgetGlobalVar('identity',$identity, $SQ_GLOBAL)) {
     $identity=0;
 }
-sqgetGlobalVar('send_to',$send_to);
-sqgetGlobalVar('send_to_cc',$send_to_cc);
-sqgetGlobalVar('send_to_bcc',$send_to_bcc);
-sqgetGlobalVar('subject',$subject);
-sqgetGlobalVar('body',$body);
-sqgetGlobalVar('mailprio',$mailprio);
-sqgetGlobalVar('request_mdn',$request_mdn);
-sqgetGlobalVar('request_dr',$request_dr);
-sqgetGlobalVar('html_addr_search',$html_addr_search);
-sqgetGlobalVar('mail_sent',$mail_sent);
-sqgetGlobalVar('passed_id',$passed_id);
-sqgetGlobalVar('passed_ent_id',$passed_ent_id);
-sqgetGlobalVar('send',$send);
-
-sqgetGlobalVar('attach',$attach);
-
-sqgetGlobalVar('draft',$draft);
-sqgetGlobalVar('draft_id',$draft_id);
-sqgetGlobalVar('ent_num',$ent_num);
-sqgetGlobalVar('saved_draft',$saved_draft);
+sqgetGlobalVar('send_to',$send_to, $SQ_GLOBAL);
+sqgetGlobalVar('send_to_cc',$send_to_cc, $SQ_GLOBAL);
+sqgetGlobalVar('send_to_bcc',$send_to_bcc, $SQ_GLOBAL);
+sqgetGlobalVar('subject',$subject, $SQ_GLOBAL);
+sqgetGlobalVar('body',$body, $SQ_GLOBAL);
+sqgetGlobalVar('mailprio',$mailprio, $SQ_GLOBAL);
+sqgetGlobalVar('request_mdn',$request_mdn, $SQ_GLOBAL);
+sqgetGlobalVar('request_dr',$request_dr, $SQ_GLOBAL);
+sqgetGlobalVar('html_addr_search',$html_addr_search, $SQ_GLOBAL);
+sqgetGlobalVar('mail_sent',$mail_sent, $SQ_GLOBAL);
+sqgetGlobalVar('passed_id',$passed_id, $SQ_GLOBAL);
+sqgetGlobalVar('passed_ent_id',$passed_ent_id, $SQ_GLOBAL);
+
+sqgetGlobalVar('attach',$attach, SQ_POST);
+sqgetGlobalVar('draft',$draft, SQ_POST);
+sqgetGlobalVar('draft_id',$draft_id, $SQ_GLOBAL);
+sqgetGlobalVar('ent_num',$ent_num, $SQ_GLOBAL);
+sqgetGlobalVar('saved_draft',$saved_draft, SQ_FORM);
 
 if ( sqgetGlobalVar('delete_draft',$delete_draft) ) {
     $delete_draft = (int)$delete_draft;
@@ -326,7 +339,7 @@ if (sqsession_is_registered('session_expired_post')) {
             }
         }
 
-        $compose_messages = unserialize(urldecode($restoremessages));
+        $compose_messages = unserialize($restoremessages);
         sqsession_register($compose_messages,'compose_messages');
         sqsession_register($composesession,'composesession');
         if (isset($send)) {
@@ -452,7 +465,7 @@ if ($send) {
             /* We entered compose via the search results page */
             $mailbox = 'INBOX'; /* Send 'em to INBOX, that's safe enough */
         }
-        $urlMailbox = urlencode (trim($mailbox));
+        $urlMailbox = urlencode($mailbox);
         if (! isset($passed_id)) {
             $passed_id = 0;
         }
@@ -716,8 +729,8 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se
         $use_signature, $data_dir, $username,
         $key, $imapServerAddress, $imapPort, $compose_messages,
         $composeMessage, $body_quote, $request_mdn, $request_dr,
-        $default_use_mdn, $mdn_user_support;
-    global $languages, $squirrelmail_language, $default_charset;
+        $mdn_user_support, $languages, $squirrelmail_language,
+        $default_charset;
 
     /*
      * Set $default_charset to correspond with the user's selection
@@ -749,7 +762,7 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se
                 (array(), $alt_order = array('text/plain'));
             if (!count($entities)) {
                 $entities = $message->entities[0]->findDisplayEntity
-                    (array(), $alt_order = array('text/plain','html/plain'));
+                    (array(), $alt_order = array('text/plain','text/html'));
             }
             $orig_header = $message->rfc822_header; /* here is the envelope located */
             /* redefine the message for picking up the attachments */
@@ -758,7 +771,7 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se
         } else {
             $entities = $message->findDisplayEntity (array(), $alt_order = array('text/plain'));
             if (!count($entities)) {
-                $entities = $message->findDisplayEntity (array(), $alt_order = array('text/plain','html/plain'));
+                $entities = $message->findDisplayEntity (array(), $alt_order = array('text/plain','text/html'));
             }
             $orig_header = $message->rfc822_header;
         }
@@ -809,7 +822,6 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se
             $mailprio = '';
         }
 
-        $identity = '';
         $from_o = $orig_header->from;
         if (is_array($from_o)) {
             if (isset($from_o[0])) {
@@ -850,15 +862,7 @@ function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $se
                 $send_from_parts = new AddressStructure();
                 $send_from_parts = $orig_header->parseAddress($send_from);
                 $send_from_add = $send_from_parts->mailbox . '@' . $send_from_parts->host;
-                $identities = get_identities();
-                if (count($identities) > 0) {
-                    foreach($identities as $iddata) {
-                        if ($send_from_add == $iddata['email_address']) {
-                            $identity = $iddata['index'];
-                            break;
-                        }
-                    }
-                }
+                $identity = find_identity(array($send_from_add));
                 $subject = decodeHeader($orig_header->subject,false,false,true);
 
                 // Remember the receipt settings
@@ -1058,10 +1062,11 @@ function getMessage_RFC822_Attachment($message, $composeMessage, $passed_id,
 }
 
 function showInputForm ($session, $values=false) {
-    global $send_to, $send_to_cc, $body, $startMessage, $action,
-        $color, $use_signature, $signature, $prefix_sig,
+    global $send_to, $send_to_cc, $send_to_bcc,
+        $body, $startMessage, $action,
+        $use_signature, $signature, $prefix_sig,
         $editor_size, $editor_height, $subject, $newmail,
-        $use_javascript_addr_book, $send_to_bcc, $passed_id, $mailbox,
+        $use_javascript_addr_book, $passed_id, $mailbox,
         $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,
@@ -1255,7 +1260,8 @@ function showInputForm ($session, $values=false) {
         }
 
         $attach = array();
-        if ($composeMessage->entities) {
+        // composeMessage can be empty when coming from a restored session
+        if (is_object($composeMessage) && $composeMessage->entities) {
             foreach ($composeMessage->entities as $key => $attachment) {
                 $attached_file = $attachment->att_local_name;
                 if ($attachment->att_local_name || $attachment->body_part) {
@@ -1308,6 +1314,8 @@ function showInputForm ($session, $values=false) {
         $oTemplate->display('compose_newwin_close.tpl');
     }
 
+    do_hook('compose_bottom', $null);
+
     $oErrorHandler->setDelayedErrors(false);
     $oTemplate->display('footer.tpl');
 }
@@ -1435,10 +1443,10 @@ function getByteSize($ini_size) {
  */
 function deliverMessage($composeMessage, $draft=false) {
     global $send_to, $send_to_cc, $send_to_bcc, $mailprio, $subject, $body,
-        $username, $popuser, $usernamedata, $identity, $idents, $data_dir,
-        $request_mdn, $request_dr, $default_charset, $color, $useSendmail,
-        $domain, $action, $default_move_to_sent, $move_to_sent;
-    global $imapServerAddress, $imapPort, $sent_folder, $key;
+        $username, $identity, $idents, $data_dir,
+        $request_mdn, $request_dr, $default_charset, $useSendmail,
+        $domain, $action, $default_move_to_sent, $move_to_sent,
+        $imapServerAddress, $imapPort, $sent_folder, $key;
 
     $rfc822_header = $composeMessage->rfc822_header;
 
@@ -1460,45 +1468,24 @@ function deliverMessage($composeMessage, $draft=false) {
     }
     $composeMessage->setBody($body);
 
-    if (ereg("^([^@%/]+)[@%/](.+)$", $username, $usernamedata)) {
-        $popuser = $usernamedata[1];
-        $domain  = $usernamedata[2];
-        unset($usernamedata);
-    } else {
-        $popuser = $username;
-    }
     $reply_to = '';
-    $from_mail = $idents[$identity]['email_address'];
-    $full_name = $idents[$identity]['full_name'];
     $reply_to  = $idents[$identity]['reply_to'];
-    if (!$from_mail) {
-        $from_mail = "$popuser@$domain";
-    }
-    $rfc822_header->from = $rfc822_header->parseAddress($from_mail,true);
-    if ($full_name) {
-        $from = $rfc822_header->from[0];
-        if (!$from->host) $from->host = $domain;
-        $full_name_encoded = encodeHeader($full_name);
-        if ($full_name_encoded != $full_name) {
-            $from_addr = $full_name_encoded .' <'.$from->mailbox.'@'.$from->host.'>';
-        } else {
-            $from_addr = '"'.$full_name .'" <'.$from->mailbox.'@'.$from->host.'>';
-        }
-        $rfc822_header->from = $rfc822_header->parseAddress($from_addr,true);
-    }
+    
+    $from_addr = build_from_header($identity);
+    $rfc822_header->from = $rfc822_header->parseAddress($from_addr,true);
     if ($reply_to) {
         $rfc822_header->reply_to = $rfc822_header->parseAddress($reply_to,true);
     }
     /* Receipt: On Read */
     if (isset($request_mdn) && $request_mdn) {
-        $rfc822_header->dnt = $rfc822_header->parseAddress($from_mail,true);
+        $rfc822_header->dnt = $rfc822_header->parseAddress($from_addr,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;
+        $rfc822_header->more_headers['Return-Receipt-To'] = $from->mailbox.'@'.$from->domain;
     } elseif (isset($rfc822_header->more_headers['Return-Receipt-To'])) {
         unset($rfc822_header->more_headers['Return-Receipt-To']);
     }
@@ -1628,8 +1615,8 @@ function deliverMessage($composeMessage, $draft=false) {
             $lcl_allow_sent = false;
         }
 
+        global $passed_id, $mailbox;
         if (($fld_sent && $svr_allow_sent && !$lcl_allow_sent) || ($fld_sent && $lcl_allow_sent)) {
-            global $passed_id, $mailbox, $action;
             if ($action == 'reply' || $action == 'reply_all') {
                 $save_reply_with_orig=getPref($data_dir,$username,'save_reply_with_orig');
                 if ($save_reply_with_orig) {
@@ -1644,7 +1631,7 @@ function deliverMessage($composeMessage, $draft=false) {
             unset ($imap_deliver);
         }
 
-        global $passed_id, $mailbox, $action, $what, $iAccount,$startMessage;
+        global $what, $iAccount, $startMessage;
 
         $composeMessage->purgeAttachments();
         if ($action=='reply' || $action=='reply_all' || $action=='forward' || $action=='forward_as_attachment') {
@@ -1696,4 +1683,3 @@ function deliverMessage($composeMessage, $draft=false) {
     }
     return $success;
 }
-?>