Rewrite of internal message caching
[squirrelmail.git] / src / move_messages.php
index b3d757dff70b8ed903d5cb763c5df819a7e52434..d142747de2d3b05a8198f7ebc11857b6fcb5efe1 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-
+exit;
 /**
  * move_messages.php
  *
@@ -265,5 +265,136 @@ if ($exception) {
     header("Location: $location");
     exit;
 }
+
+function handleMessageListForm($imapConnection,&$aMailbox) {
+    /* incoming formdata */
+    sqgetGlobalVar('moveButton',      $moveButton,      SQ_POST);
+    sqgetGlobalVar('expungeButton',   $expungeButton,   SQ_POST);
+    sqgetGlobalVar('targetMailbox',   $targetMailbox,   SQ_POST);
+    sqgetGlobalVar('expungeButton',   $expungeButton,   SQ_POST);
+    sqgetGlobalVar('undeleteButton',  $undeleteButton,  SQ_POST);
+    sqgetGlobalVar('markRead',        $markRead,        SQ_POST);
+    sqgetGlobalVar('markUnread',      $markUnread,      SQ_POST);
+    sqgetGlobalVar('markFlagged',     $markFlagged,     SQ_POST);
+    sqgetGlobalVar('markUnflagged',   $markUnflagged,   SQ_POST);
+    sqgetGlobalVar('attache',         $attache,         SQ_POST);
+    sqgetGlobalVar('location',        $location,        SQ_POST);
+    sqgetGlobalVar('bypass_trash',    $bypass_trash,    SQ_POST);
+    sqgetGlobalVar('msg',             $msg,             SQ_POST);
+
+    $sError = '';
+    /* retrieve the check boxes */
+    $aUid = array();
+    if (isset($msg) && is_array($msg)) {
+        foreach( $msg as $key=>$iUid ) {
+            // using foreach removes the risk of infinite loops that was there //
+            $aUid[] = $iUid;
+        }
+    }
+    $num_ids = count($id);
+
+    if (count($num_ids) && !isset($expungeButton)) {
+        /* handle submit buttons */
+        $sButton = '';
+        $sButton = (isset($expungeButton)) ? 'expunge'      : $sButton;
+        $sButton = (isset($attache))       ? 'attache'      : $sButton;
+        $sButton = (isset($moveButton))    ? 'move'         : $sButton;
+        $sButton = (isset($copyButton))    ? 'copy'         : $sButton;
+        $sButton = (isset($markDelete))    ? 'setDeleted'   : $sButton;
+        $sButton = (isset($markUndelete))  ? 'unsetDeleted' : $sButton;
+        $sButton = (isset($markSeen))      ? 'setSeen'      : $sButton;
+        $sButton = (isset($markUnseen))    ? 'unsetSeen'    : $sButton;
+        $sButton = (isset($markFlagged))   ? 'setFlagged'   : $sButton;
+        $sButton = (isset($markUnflagged)) ? 'unsetFlagged' : $sButton;
+
+        $aUpdatedMsgs = false;
+        $bExpunge = false;
+        switch ($sButton) {
+          case 'setDeleted':
+            // What kind of hook is this, can it be removed?
+            if (!boolean_hook_function('move_messages_button_action', NULL, 1)) {
+                $aUpdatedMsgs = sqimap_msgs_list_delete($imapConnection, $mailbox, $aUid,$bypass_trash);
+                $bExpunge = true;
+            }
+            break;
+          case 'unsetDeleted':
+          case 'setSeen':
+          case 'unsetSeen':
+          case 'setFlagged':
+          case 'unsetFlagged':
+            // get flag
+            $sFlag = (substr($sButton,0,3) == 'set') ? '\\'.substr($sButton,3) : '\\'.substr($sButton,5);
+            $bSet  = (substr($sButton,0,3) == 'set') ? true : false;
+            $aUpdatedMsgs = sqimap_toggle_flag($imapConnection, $aUid, $sFlag, $bSet, true);
+            break;
+          case 'move':
+            $aUpdatedMsgs = sqimap_msgs_list_move($imapConnection,$aId,$targetMailbox);
+            $bExpunge = true;
+            break;
+          case 'attache':
+            $composesession = attachSelectedMessages($id, $imapConnection);
+            // dirty hack, add info to $aMailbox
+            $aMailbox['FORWARD_SESSION'] = $composesession;
+            break;
+        }
+
+        if ($aUpdatedMsgs) {
+            foreach ($aUpdatedMsgs as $iUid => $aMsg) {
+                if (isset($aMsg['FLAGS'])) {
+                    $aMailbox['MSG_HEADERS'][$iUid]['FLAGS'] = $aMsg['FLAGS'];
+                }
+            }
+            if ($bExpunge && $aMailbox['AUTO_EXPUNGE'] &&
+                $iExpungedMessages = sqimap_mailbox_expunge($imapConnection, $aMailbox['NAME'], true))
+                {
+                if (count($aUpdateMsgs != $iExpungedMessages)) {
+                    // there are more messages deleted permanently then we expected
+                    // invalidate the cache
+                    $aMailbox['UIDSET'] = false;
+                    $aMailbox['MSG_HEADERS'] = false;
+                } else {
+                    // remove expunged messages from cache
+                    $aUidSet = $aMailbox['UIDSET'];
+                    $aDeleted = array();
+                    foreach ($aUpdatedMsgs as $iUid => $aValue) {
+                        if (isset($aValue['FLAGS']['\\deleted']) && $aValue['FLAGS']['\\deleted']) {
+                            $aDeleted[] = $iUid;
+                        }
+                    }
+                    if (count($aDeleted)) {
+                        // create a UID => array index temp array
+                        $aUidSetDummy = array_flip($aUidSet);
+                        foreach ($aDeleted as $iUid) {
+                            unset($aUidSetDummy[$iUid]);
+                        }
+                        $aUidSet = array_keys($aUidSetDummy);
+                        $aMailbox['UIDSET'] = $aUidSet;
+                        // update EXISTS info
+                        $aMailbox['EXISTS'] -= $iExpungedMessages;
+                    }
+                }
+                // Change the startMessage number if the mailbox was changed
+                if (($aMailbox['PAGEOFFSET']+$iExpungedMessages-1) >= $aMailbox['EXISTS']) {
+                    $aMailbox['PAGEOFFSET'] = ($aMailbox['PAGEOFFSET'] > $aMailbox['LIMIT']) ?
+                        $aMailbox['PAGEOFFSET'] - $aMailbox['LIMIT'] : 1;
+                }
+            }
+        }
+    } else {
+        if (isset($expungeButton)) {
+            // on expunge we do not know which messages will be deleted
+            // so it's useless to try to sync the cache
+
+            // Close the mailbox so we do not need to parse the untagged expunge responses
+            sqimap_run_command($imapConnection,'CLOSE',false,$result,$message);
+            $aMbxResponse = sqimap_select($imapConnection,$aMailbox['NAME'];
+            // update the $aMailbox array
+            $aMailbox['EXISTS'] = $aMbxResponse['EXISTS'];
+            $aMailbox['UIDSET'] = false;
+        } else {
+            $sError = _("No messages were selected.");
+        }
+    }
+}
 ?>
 </BODY></HTML>