Source for file move_messages.php

Documentation is available at move_messages.php

  1. <?php
  2. /**
  3. * move_messages.php
  4. *
  5. * Enables message moving between folders on the IMAP server.
  6. *
  7. * @copyright 1999-2020 The SquirrelMail Project Team
  8. * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  9. * @version $Id: move_messages.php 14840 2020年01月07日 07:42:38Z pdontthink $
  10. * @package squirrelmail
  11. */
  12. /** This is the move_messages page */
  13. define ('PAGE_NAME', 'move_messages');
  14. /* Path for SquirrelMail required files. */
  15. define ('SM_PATH','../');
  16. /* SquirrelMail required files. */
  17. require_once(SM_PATH . 'include/validate.php');
  18. require_once(SM_PATH . 'functions/global.php');
  19. require_once(SM_PATH . 'functions/display_messages.php');
  20. require_once(SM_PATH . 'functions/imap.php');
  21. require_once(SM_PATH . 'functions/html.php');
  22. global $compose_new_win;
  23. if ( !sqgetGlobalVar ('composesession', $composesession, SQ_SESSION ) ) {
  24. $composesession = 0;
  25. }
  26. function attachSelectedMessages ($msg, $imapConnection) {
  27. global $username, $attachment_dir , $startMessage,
  28. $data_dir , $composesession, $uid_support , $mailbox,
  29. $msgs, $thread_sort_messages, $allow_server_sort , $show_num;
  30. if (!$composesession) {
  31. $composesession = 1;
  32. sqsession_register ($composesession,'composesession');
  33. } else {
  34. $composesession++;
  35. sqsession_register ($composesession,'composesession');
  36. }
  37. $hashed_attachment_dir = getHashedDir ($username, $attachment_dir, $composesession);
  38. if ($thread_sort_messages || $allow_server_sort) {
  39. $start_index=0;
  40. } else {
  41. $start_index = ($startMessage-1) * $show_num;
  42. }
  43. $i = 0;
  44. $j = 0;
  45. $hashed_attachment_dir = getHashedDir ($username, $attachment_dir);
  46. $composeMessage = new Message ();
  47. $rfc822_header = new Rfc822Header ();
  48. $composeMessage->rfc822_header = $rfc822_header;
  49. $composeMessage->reply_rfc822_header = '';
  50. while ($j < count ($msg)) {
  51. if (isset($msg[$i])) {
  52. $id = $msg[$i];
  53. $body_a = sqimap_run_command ($imapConnection, "FETCH $id RFC822",true, $response, $readmessage, $uid_support);
  54. if ($response == 'OK') {
  55. $message = sqimap_get_message ($imapConnection, $id, $mailbox);
  56. // fetch the subject for the message from the object
  57. //
  58. $subject = $message->rfc822_header->subject;
  59. // use subject for file name
  60. //
  61. if ( empty($subject) )
  62. $filename = "untitled-".$message->entity_id;
  63. else
  64. $filename = $subject;
  65. $filename .= '.eml';
  66. // figure out a subject for new message
  67. //
  68. $subject = decodeHeader ($subject, false, false, true);
  69. $subject = trim ($subject);
  70. if (substr (strtolower ($subject), 0, 4) != 'fwd:') {
  71. $subject = 'Fwd: ' . $subject;
  72. }
  73. array_shift ($body_a);
  74. array_pop ($body_a);
  75. $body = implode ('', $body_a);
  76. $body .= "\r\n";
  77. $localfilename = GenerateRandomString (32, 'FILE', 7);
  78. $full_localfilename = "$hashed_attachment_dir/$localfilename";
  79. while (file_exists ($full_localfilename)) {
  80. $localfilename = GenerateRandomString (32, 'FILE', 7);
  81. $full_localfilename = "$hashed_attachment_dir/$localfilename";
  82. }
  83. $fp = fopen ( $full_localfilename, 'wb');
  84. fwrite ($fp, $body);
  85. fclose ($fp);
  86. $composeMessage->initAttachment('message/rfc822',$filename,
  87. $localfilename);
  88. $composeMessage->rfc822_header->subject = $subject;
  89. }
  90. $j++;
  91. }
  92. $i++;
  93. }
  94. sqgetGlobalVar ('compose_messages', $compose_messages, SQ_SESSION );
  95. if (!isset($compose_messages)
  96. || !is_array ($compose_messages)) {
  97. $compose_messages = array();
  98. }
  99. $compose_messages[$composesession] = $composeMessage;
  100. sqsession_register ($compose_messages,'compose_messages');
  101. return $composesession;
  102. }
  103. /* get globals */
  104. sqgetGlobalVar ('key', $key, SQ_COOKIE );
  105. sqgetGlobalVar ('username', $username, SQ_SESSION );
  106. sqgetGlobalVar ('onetimepad',$onetimepad, SQ_SESSION );
  107. sqgetGlobalVar ('delimiter', $delimiter, SQ_SESSION );
  108. sqgetGlobalVar ('base_uri', $base_uri, SQ_SESSION );
  109. sqgetGlobalVar ('mailbox', $mailbox);
  110. sqgetGlobalVar ('startMessage', $startMessage);
  111. sqgetGlobalVar ('msg', $msg);
  112. sqgetGlobalVar ('msgs', $msgs, SQ_SESSION );
  113. sqgetGlobalVar ('composesession', $composesession, SQ_SESSION );
  114. sqgetGlobalVar ('lastTargetMailbox', $lastTargetMailbox, SQ_SESSION );
  115. sqgetGlobalVar ('moveButton', $moveButton, SQ_POST );
  116. sqgetGlobalVar ('expungeButton', $expungeButton, SQ_POST );
  117. sqgetGlobalVar ('targetMailbox', $targetMailbox, SQ_POST );
  118. sqgetGlobalVar ('expungeButton', $expungeButton, SQ_POST );
  119. sqgetGlobalVar ('undeleteButton', $undeleteButton, SQ_POST );
  120. sqgetGlobalVar ('markRead', $markRead, SQ_POST );
  121. sqgetGlobalVar ('markUnread', $markUnread, SQ_POST );
  122. sqgetGlobalVar ('attache', $attache, SQ_POST );
  123. sqgetGlobalVar ('location', $location, SQ_POST );
  124. if (!sqgetGlobalVar ('smtoken',$submitted_token, SQ_FORM )) {
  125. $submitted_token = '';
  126. }
  127. /* end of get globals */
  128. // security check
  129. sm_validate_security_token ($submitted_token, -1, TRUE);
  130. global $imap_stream_options; // in case not defined in config
  131. $imapConnection = sqimap_login ($username, $key, $imapServerAddress, $imapPort, 0, $imap_stream_options);
  132. $mbx_response=sqimap_mailbox_select ($imapConnection, $mailbox);
  133. $location = set_url_var ($location,'composenew',0,false);
  134. $location = set_url_var ($location,'composesession',0,false);
  135. $location = set_url_var ($location,'session',0,false);
  136. $location = set_url_var ($location,'preselected',NULL,false,true);
  137. // make sure that cache is not used
  138. $location = set_url_var ($location,'use_mailbox_cache',0,false);
  139. /* remember changes to mailbox setting */
  140. if (!isset($lastTargetMailbox)) {
  141. $lastTargetMailbox = 'INBOX';
  142. }
  143. if ($targetMailbox != $lastTargetMailbox) {
  144. $lastTargetMailbox = $targetMailbox;
  145. sqsession_register ($lastTargetMailbox, 'lastTargetMailbox');
  146. }
  147. $exception = false;
  148. do_hook ('move_before_move');
  149. /*
  150. Move msg list sorting up here, as it is used several times,
  151. makes it more efficient to do it in one place for the code
  152. */
  153. $id = array();
  154. if (isset($msg) && is_array ($msg)) {
  155. foreach( $msg as $key=>$uid ) {
  156. // using foreach removes the risk of infinite loops that was there //
  157. $id[] = $uid;
  158. }
  159. }
  160. // expunge-on-demand if user isn't using move_to_trash or auto_expunge
  161. if(isset($expungeButton)) {
  162. $cnt = sqimap_mailbox_expunge ($imapConnection, $mailbox, true);
  163. if (($startMessage+$cnt-1) >= $mbx_response['EXISTS']) {
  164. if ($startMessage > $show_num) {
  165. $location = set_url_var ($location,'startMessage',$startMessage-$show_num,false);
  166. } else {
  167. $location = set_url_var ($location,'startMessage',1,false);
  168. }
  169. }
  170. } elseif(isset($undeleteButton)) {
  171. // undelete messages if user isn't using move_to_trash or auto_expunge
  172. // Removes \Deleted flag from selected messages
  173. if (count ($id)) {
  174. sqimap_toggle_flag ($imapConnection, $id, '\\Deleted',false,true);
  175. } else {
  176. $exception = true;
  177. }
  178. } elseif (!isset($moveButton)) {
  179. if (count ($id)) {
  180. $cnt = count ($id);
  181. if (!isset($attache)) {
  182. if (isset($markRead)) {
  183. sqimap_toggle_flag ($imapConnection, $id, '\\Seen',true,true);
  184. } else if (isset($markUnread)) {
  185. sqimap_toggle_flag ($imapConnection, $id, '\\Seen',false,true);
  186. } else {
  187. sqimap_msgs_list_delete ($imapConnection, $mailbox, $id);
  188. if ($auto_expunge) {
  189. $cnt = sqimap_mailbox_expunge ($imapConnection, $mailbox, true);
  190. }
  191. if (($startMessage+$cnt-1) >= $mbx_response['EXISTS']) {
  192. if ($startMessage > $show_num) {
  193. $location = set_url_var ($location,'startMessage',$startMessage-$show_num, false);
  194. } else {
  195. $location = set_url_var ($location,'startMessage',1, false);
  196. }
  197. }
  198. }
  199. } else {
  200. $composesession = attachSelectedMessages ($id, $imapConnection);
  201. $location = set_url_var ($location, 'session', $composesession, false);
  202. $location = set_url_var ($location, 'forward_as_attachment_init', 1, false);
  203. if ($compose_new_win) {
  204. $location = set_url_var ($location, 'composenew', 1, false);
  205. } else {
  206. $location = str_replace ('search.php','compose.php',$location);
  207. $location = str_replace ('right_main.php','compose.php',$location);
  208. }
  209. }
  210. } else {
  211. $exception = true;
  212. }
  213. } else { // Move messages
  214. if (count ($id)) {
  215. // move messages only when target mailbox is not the same as source mailbox
  216. if ($mailbox!=$targetMailbox) {
  217. sqimap_msgs_list_move ($imapConnection,$id,$targetMailbox);
  218. if ($auto_expunge) {
  219. $cnt = sqimap_mailbox_expunge ($imapConnection, $mailbox, true);
  220. } else {
  221. $cnt = 0;
  222. }
  223. if (($startMessage+$cnt-1) >= $mbx_response['EXISTS']) {
  224. if ($startMessage > $show_num) {
  225. $location = set_url_var ($location,'startMessage',$startMessage-$show_num, false);
  226. } else {
  227. $location = set_url_var ($location,'startMessage',1, false);
  228. }
  229. }
  230. }
  231. } else {
  232. $exception = true;
  233. }
  234. }
  235. // Log out this session
  236. sqimap_logout ($imapConnection);
  237. if ($exception) {
  238. displayPageHeader ($color, $mailbox);
  239. error_message (_ ("No messages were selected."), $mailbox, $sort, $startMessage, $color);
  240. } else {
  241. header ("Location: $location");
  242. exit;
  243. }
  244. ?>
  245. </body></html>

Documentation generated on 2020年1月13日 04:25:01 +0100 by phpDocumentor 1.4.3

AltStyle によって変換されたページ (->オリジナル) /