added recover mechanism in case of expired sessions
[squirrelmail.git] / src / compose.php
index 4be2a18eb8f0e613cb3b5e814b2e57f35f9f50e8..a1f835f89193c54eaff5f5b41a4e37112c105627 100644 (file)
@@ -100,6 +100,44 @@ function getforwardHeader($orig_header) {
 }
 /* ----------------------------------------------------------------------- */
 
+/*
+ * If the session is expired during a post this restores the compose session 
+ * vars.
+ */
+//$session_expired = false; 
+if (session_is_registered('session_expired_post')) {
+   global $session_expired_post, $session_expired;
+   /* 
+    * extra check for username so we don't display previous post data from
+    * another user during this session.
+    */
+   if ($session_expired_post['username'] != $username) {
+      session_unregister('session_expired_post');
+      session_unregister('session_expired');      
+   } else {
+      foreach ($session_expired_post as $postvar => $val) {
+         if (isset($val)) {
+            $$postvar = $val;
+         } else {
+            $$postvar = '';
+         }
+      }
+      if (isset($send)) {
+         unset($send);
+      }
+      $session_expired = true;
+   }
+   session_unregister('session_expired_post');
+   session_unregister('session_expired');
+   if ($compose_new_win == '1') {
+      compose_Header($color, $mailbox);
+   } else {
+      displayPageHeader($color, $mailbox);
+   }
+   showInputForm($session, false);
+   exit();
+}
+
 if (!isset($attachments)) {
     $attachments = array();
     session_register('attachments');
@@ -148,7 +186,7 @@ if (isset($draft)) {
             }
             else {
             Header("Location: right_main.php?mailbox=$draft_folder&sort=$sort".
-                   "&startMessage=1&note=".urlencode($draft_message);
+                   "&startMessage=1&note=".urlencode($draft_message));
             exit();
             }
         }
@@ -342,14 +380,11 @@ elseif (isset($sigappend)) {
     /*
      * This handles the case if we attache message 
      */
-    $imapConnection = sqimap_login($username, $key, $imapServerAddress,
-                                   $imapPort, 0);
-        if ($compose_new_win == '1') {
-            compose_Header($color, $mailbox);
-        }
-        else {
-            displayPageHeader($color, $mailbox);
-        }
+    if ($compose_new_win == '1') {
+        compose_Header($color, $mailbox);
+    } else {
+        displayPageHeader($color, $mailbox);
+    }
 
     $newmail = true;
 
@@ -358,23 +393,30 @@ elseif (isset($sigappend)) {
     if (!isset($mailbox)) $mailbox = '';
     if (!isset($action)) $action = '';
 
-    $values = newMail($imapConnection,$mailbox,$passed_id,$passed_ent_id, $action, $session);
+    $values = newMail($mailbox,$passed_id,$passed_ent_id, $action, $session);
+    /* in case the origin is not read_body.php */
+    if (isset($send_to)) {
+       $values['send_to'] = $send_to;
+    }
+    if (isset($send_to_cc)) {
+       $values['send_to_cc'] = $send_cc;
+    }
+    if (isset($send_to_bcc)) {
+       $values['send_to_bcc'] = $send_bcc;
+    }
+    
     showInputForm($session, $values);
-    sqimap_logout($imapConnection);
-
 } else {
     /*
      * This handles the default case as well as the error case
      * (they had the same code) --> if (isset($smtpErrors)) 
      */
-    $imapConnection = sqimap_login($username, $key, $imapServerAddress,
-                                   $imapPort, 0);
-        if ($compose_new_win == '1') {
-            compose_Header($color, $mailbox);
-        }
-        else {
-            displayPageHeader($color, $mailbox);
-        }
+
+    if ($compose_new_win == '1') {
+       compose_Header($color, $mailbox);
+    } else {
+       displayPageHeader($color, $mailbox);
+    }
 
     $newmail = true;
 
@@ -383,9 +425,19 @@ elseif (isset($sigappend)) {
     if (!isset($mailbox)) $mailbox = '';
     if (!isset($action)) $action = '';
     
-    $values = newMail($imapConnection,$mailbox,$passed_id,$passed_ent_id, $action, $session);
+    $values = newMail($mailbox,$passed_id,$passed_ent_id, $action, $session);
+
+    /* in case the origin is not read_body.php */
+    if (isset($send_to)) {
+       $values['send_to'] = $send_to;
+    }
+    if (isset($send_to_cc)) {
+       $values['send_to_cc'] = $send_to_cc;
+    }
+    if (isset($send_to_bcc)) {
+       $values['send_to_bcc'] = $send_to_bcc;
+    }
     showInputForm($session, $values);
-    sqimap_logout($imapConnection);
 }
 
 exit();
@@ -394,13 +446,18 @@ exit();
 
 
 /* This function is used when not sending or adding attachments */
-function newMail ($imapConnection, $mailbox='', $passed_id='', $passed_ent_id='', $action='', $session='') {
+function newMail ($mailbox='', $passed_id='', $passed_ent_id='', $action='', $session='') {
     global $editor_size, $default_use_priority,
-           $use_signature, $composesession;
+           $use_signature, $composesession, $data_dir, $username,
+          $username, $key, $imapServerAddress, $imapPort;
 
-    $send_to = $send_to_cc = $send_to_bcc = $subject = $mailprio = $body = '';
+    $send_to = $send_to_cc = $send_to_bcc = $subject = $body = $identity = '';
+    $mailprio = 3;
 
     if ($passed_id) {
+        $imapConnection = sqimap_login($username, $key, $imapServerAddress,
+                          $imapPort, 0);
+    
         sqimap_mailbox_select($imapConnection, $mailbox);
         $message = sqimap_get_message($imapConnection, $passed_id, $mailbox);
        $body = '';     
@@ -448,6 +505,30 @@ function newMail ($imapConnection, $mailbox='', $passed_id='', $passed_ent_id=''
          $mailprio = '';
        }
         ClearAttachments($session);
+
+        $identity = '';
+        $idents = getPref($data_dir, $username, 'identities');
+        $from_o = $message->header->from;
+        if (is_object($from_o)) {
+            $orig_from = $from_o->getAddress();
+        } else {
+            $orig_from = '';
+        }    
+        if (!empty($idents) && $idents > 1) {
+           for ($i = 1; $i < $idents; $i++) {
+              $enc_from_name = '"'. 
+                              getPref($data_dir, 
+                                      $username, 
+                                      'full_name' . $i) .
+                 '" <' . getPref($data_dir, $username, 
+                                 'email_address' . $i) . '>';
+              if ($enc_from_name == $orig_from) {
+                  $identity = $i;
+                  break;
+              }
+           }
+        }
+       
        switch ($action) {
          case ('draft'):
              $use_signature = FALSE;
@@ -475,12 +556,12 @@ function newMail ($imapConnection, $mailbox='', $passed_id='', $passed_ent_id=''
             $send_to_bcc = $orig_header->getAddr_s('bcc');
             $subject = $orig_header->subject;
             $mailprio = $orig_header->priority;
+            $orig_from = '';
              getAttachments($message, $session, $passed_id, $entities, $imapConnection);
             sqUnWordWrap($body);
             break;
          case ('forward'):
             $send_to = '';
-            $orig_from = $orig_header->from->getAddress();
              $subject = $orig_header->subject;
              if ((substr(strtolower($subject), 0, 4) != 'fwd:') &&
                 (substr(strtolower($subject), 0, 5) != '[fwd:') &&
@@ -498,7 +579,6 @@ function newMail ($imapConnection, $mailbox='', $passed_id='', $passed_ent_id=''
             } else {
                $send_to = $orig_header->from->getAddress();
             }
-            $orig_from = $orig_header->from->getAddress();
             $subject = $orig_header->subject;
              $subject = str_replace('"', "'", $subject);
              $subject = trim($subject);
@@ -526,6 +606,7 @@ function newMail ($imapConnection, $mailbox='', $passed_id='', $passed_ent_id=''
          default:
             break;
         }
+       sqimap_logout($imapConnection);
     }
     $ret = array(
             'send_to' => $send_to, 
@@ -533,7 +614,8 @@ function newMail ($imapConnection, $mailbox='', $passed_id='', $passed_ent_id=''
            'send_to_bcc' => $send_to_bcc,           
            'subject' => $subject,
            'mailprio' => $mailprio,
-           'body' => $body
+           'body' => $body,
+           'identity' => $identity
            );
     
     return ($ret);
@@ -598,7 +680,8 @@ function showInputForm ($session, $values=false) {
            $from_htmladdr_search, $location_of_buttons, $attachment_dir,
            $username, $data_dir, $identity, $draft_id, $delete_draft,
            $mailprio, $default_use_mdn, $mdn_user_support, $compose_new_win,
-           $saved_draft, $mail_sent, $sig_first, $edit_as_new, $action;
+           $saved_draft, $mail_sent, $sig_first, $edit_as_new, $action, 
+          $username;
 
     $subject = decodeHeader($subject, false);
     if ($values) {
@@ -608,6 +691,7 @@ function showInputForm ($session, $values=false) {
        $subject = $values['subject'];       
        $mailprio = $values['mailprio'];
        $body = $values['body'];
+       $identity = $values['identity'];
     }
     
     if ($use_javascript_addr_book) {
@@ -635,9 +719,10 @@ function showInputForm ($session, $values=false) {
         echo '<input type="hidden" name="delete_draft" value="' . $delete_draft. "\">\n";
     }
     if (isset($session)) {
-        echo '<input type="hidden" name="session" value="' . "$session" . "\">\n";
+        echo '<input type="hidden" name="session" value="' . $session . "\">\n";
     }
 
+
     if ($saved_draft == 'yes') {
         echo '<BR><CENTER><B>'. _("Draft Saved").'</CENTER></B>';
     }
@@ -789,9 +874,9 @@ function showInputForm ($session, $values=false) {
         echo '</TABLE>'."\n";
     }
     echo '</TABLE>' . "\n";
-    if ($action = 'reply' || $action = 'reply_all') {
-        echo '<input type=hidden name=reply_id value=' . $passed_id . ">\n";
-    }
+
+    echo '<input type="hidden" name="username" value="'. $username . "\">\n";    
+    echo '<input type=hidden name=action value=' . $action . ">\n";
     echo '<INPUT TYPE=hidden NAME=mailbox VALUE="' . htmlspecialchars($mailbox) .
          "\">\n" .
          '</FORM>';
@@ -897,9 +982,6 @@ function saveAttachedFiles($session) {
        }
 
     }
-
-
-
     $newAttachment['localfilename'] = $localfilename;
     $newAttachment['remotefilename'] = $HTTP_POST_FILES['attachfile']['name'];
     $newAttachment['type'] = strtolower($HTTP_POST_FILES['attachfile']['type']);