setup.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379
  1. <?php
  2. /**
  3. * setup.php
  4. *
  5. * delete_move_next
  6. * deletes or moves currently displayed message and displays
  7. * next or previous message.
  8. *
  9. * Copyright (c) 1999-2002 The SquirrelMail Project Team
  10. * Licensed under the GNU GPL. For full terms see the file COPYING.
  11. *
  12. * $Id$
  13. */
  14. function squirrelmail_plugin_init_delete_move_next() {
  15. global $squirrelmail_plugin_hooks;
  16. $squirrelmail_plugin_hooks['html_top']['delete_move_next'] = 'delete_move_next_action';
  17. $squirrelmail_plugin_hooks['right_main_after_header']['delete_move_next'] = 'delete_move_next_action';
  18. $squirrelmail_plugin_hooks['read_body_bottom']['delete_move_next'] = 'delete_move_next_read_b';
  19. $squirrelmail_plugin_hooks['read_body_top']['delete_move_next'] = 'delete_move_next_read_t';
  20. $squirrelmail_plugin_hooks['options_display_inside']['delete_move_next'] = 'delete_move_next_display_inside';
  21. $squirrelmail_plugin_hooks['options_display_save']['delete_move_next'] = 'delete_move_next_display_save';
  22. $squirrelmail_plugin_hooks['loading_prefs']['delete_move_next'] = 'delete_move_next_loading_prefs';
  23. }
  24. /* fixes the sort_array for the prev_del/next_del links when
  25. * using server side sorting or thread sorting
  26. */
  27. function fix_sort_array () {
  28. global $username, $data_dir, $allow_server_sort, $allow_thread_sort,
  29. $mailbox, $imapConnection, $sort;
  30. if ($allow_server_sort == true) {
  31. $server_sort_array = sqimap_get_sort_order($imapConnection, $sort);
  32. }
  33. $thread_sort_messages = getPref($username, $data_dir, "thread_$mailbox");
  34. if ($allow_thread_sort == true && $thread_sort_messages == 1) {
  35. $server_sort_array = get_thread_sort($imapConnection);
  36. }
  37. }
  38. /*
  39. * Warning: this function relies on the internal representation of
  40. * of the message cache for the current mailbox. As such, it is fragile
  41. * because the underlying implementation can change. I will present it
  42. * to the squirrelmail maintainers as a proposed addition to the API,
  43. * perhaps even as inline code to sqimap_mailbox_expunge(). In the
  44. * meantime, you have been warned. [alane@geeksrus.net 2001/05/06]
  45. */
  46. function delete_move_del_arr_elem($arr, $index) {
  47. $tmp = array();
  48. $lim = count($arr);
  49. $j = 0;
  50. for ($i = 0; $i < $lim; $i++) {
  51. if ($i != $index) {
  52. $tmp[$j++] = $arr[$i];
  53. }
  54. }
  55. return $tmp;
  56. }
  57. function delete_move_show_msg_array() {
  58. global $msort, $msgs;
  59. $keys = array_keys($msort);
  60. for ($i = 0; $i < count($keys); $i++) {
  61. echo '<p>key ' . $keys[$i] . ' msgid ' . $msgs[$keys[$i]]['ID'] . '</p>';
  62. }
  63. }
  64. function delete_move_expunge_from_all($id) {
  65. global $msgs, $msort, $sort, $imapConnection, $mailbox;
  66. // delete_move_show_msg_array();
  67. $delAt = -1;
  68. for ($i = 0; $i < count($msort); $i++) {
  69. if ($msgs[$i]['ID'] == $id) {
  70. $delAt = $i;
  71. } elseif ($msgs[$i]['ID'] > $id) {
  72. $msgs[$i]['ID']--;
  73. }
  74. }
  75. $msgs = delete_move_del_arr_elem($msgs, $delAt);
  76. $msort = delete_move_del_arr_elem($msort, $delAt);
  77. if ($sort < 6) {
  78. if ($sort % 2) {
  79. asort($msort);
  80. } else {
  81. arsort($msort);
  82. }
  83. }
  84. sqimap_mailbox_expunge($imapConnection, $mailbox, true);
  85. }
  86. function delete_move_next_action() {
  87. global $PHP_SELF,
  88. $delete_id, $move_id;
  89. if ($delete_id) {
  90. delete_move_next_delete();
  91. fix_sort_array();
  92. } elseif ($move_id) {
  93. delete_move_next_move();
  94. fix_sort_array();
  95. }
  96. }
  97. function delete_move_next_read_t() {
  98. global $delete_move_next_t;
  99. if($delete_move_next_t == 'on') {
  100. delete_move_next_read('top');
  101. }
  102. }
  103. function delete_move_next_read_b() {
  104. global $delete_move_next_b;
  105. if ($delete_move_next_b != 'off') {
  106. delete_move_next_read('bottom');
  107. }
  108. }
  109. function delete_move_next_read($currloc) {
  110. global $delete_move_next_formATtop, $delete_move_next_formATbottom,
  111. $color, $where, $what, $currentArrayIndex, $passed_id,
  112. $urlMailbox, $sort, $startMessage, $delete_id, $move_id,
  113. $imapConnection, $auto_expunge, $move_to_trash;
  114. if (!(($where && $what) || ($currentArrayIndex == -1))) {
  115. $next = findNextMessage();
  116. $prev = findPreviousMessage();
  117. $prev_if_del = $prev;
  118. $next_if_del = $next;
  119. if ($auto_expunge || $move_to_trash) {
  120. if ($prev_if_del > $passed_id) {
  121. $prev_if_del--;
  122. }
  123. if ($next_if_del > $passed_id) {
  124. $next_if_del--;
  125. }
  126. }
  127. /* Base is illegal within documents
  128. * $location = get_location();
  129. * echo "<base href=\"$location/\">" . */
  130. echo '<table cellspacing=0 width="100%" border=0 cellpadding=2>'.
  131. '<tr>'.
  132. "<td bgcolor=\"$color[9]\" width=\"100%\" align=center><small>";
  133. if ($prev > 0) {
  134. echo "<a href=\"read_body.php?passed_id=$prev&amp;mailbox=$urlMailbox&amp;sort=$sort&amp;startMessage=$startMessage&amp;show_more=0\">" . _("Previous") . "</A>&nbsp;|&nbsp;\n";
  135. } else {
  136. echo _("Previous") . "&nbsp;|&nbsp;";
  137. }
  138. if ($next > 0) {
  139. echo "<a href=\"read_body.php?passed_id=$next&amp;mailbox=$urlMailbox&amp;sort=$sort&amp;startMessage=$startMessage&amp;show_more=0\">" . _("Next") . "</A>&nbsp;|&nbsp;\n";
  140. } else {
  141. echo _("Next") . "&nbsp;|&nbsp;";
  142. }
  143. if ($prev > 0){
  144. echo "<a href=\"read_body.php?passed_id=$prev_if_del&amp;mailbox=$urlMailbox&amp;sort=$sort&amp;startMessage=$startMessage&amp;show_more=0&amp;delete_id=$passed_id\">" . _("Delete & Prev") . "</a>" . "&nbsp;|&nbsp;\n";
  145. }
  146. else {
  147. echo _("Delete & Prev") . "&nbsp;|&nbsp;";
  148. }
  149. if ($next > 0){
  150. echo "<a href=\"read_body.php?passed_id=$next_if_del&amp;mailbox=$urlMailbox&amp;sort=$sort&amp;startMessage=$startMessage&amp;show_more=0&amp;delete_id=$passed_id\">" . _("Delete & Next") . "</a>\n";
  151. } else {
  152. echo _("Delete & Next");
  153. }
  154. echo '</small></td></tr>';
  155. if ($next_if_del < 0) {
  156. $next_if_del = $prev_if_del;
  157. }
  158. if (($delete_move_next_formATtop == 'on') && ($currloc == 'top')){
  159. if ($next_if_del > 0) {
  160. delete_move_next_moveNextForm($next_if_del);
  161. } else {
  162. delete_move_next_moveRightMainForm();
  163. }
  164. }
  165. if (($delete_move_next_formATbottom != 'off') && ($currloc == 'bottom')){
  166. if ($next_if_del > 0) {
  167. delete_move_next_moveNextForm($next_if_del);
  168. } else {
  169. delete_move_next_moveRightMainForm();
  170. }
  171. }
  172. echo '</table>';
  173. }
  174. }
  175. function get_move_target_list() {
  176. global $imapConnection;
  177. $boxes = sqimap_mailbox_list($imapConnection);
  178. for ($i = 0; $i < count($boxes); $i++) {
  179. if (!in_array('noselect', $boxes[$i]['flags'])) {
  180. $box = $boxes[$i]['unformatted'];
  181. $box2 = str_replace(' ', '&nbsp;', $boxes[$i]['unformatted-disp']);
  182. if ( $box2 == 'INBOX' ) {
  183. $box2 = _("INBOX");
  184. }
  185. echo "<option value=\"$box\">$box2</option>\n";
  186. }
  187. }
  188. }
  189. function delete_move_next_moveNextForm($next) {
  190. global $color, $where, $what, $currentArrayIndex, $passed_id,
  191. $urlMailbox, $sort, $startMessage, $delete_id, $move_id,
  192. $imapConnection;
  193. echo '<tr>'.
  194. "<td bgcolor=\"$color[9]\" width=\"100%\" align=\"center\">".
  195. '<form action="read_body.php" method="post"><small>'.
  196. "<input type=\"hidden\" name=\"passed_id\" value=\"$next\">".
  197. "<input type=\"hidden\" name=\"mailbox\" value=\"".urldecode($urlMailbox)."\">".
  198. "<input type=\"hidden\" name=\"sort\" value=\"$sort\">".
  199. "<input type=\"hidden\" name=\"startMessage\" value=\"$startMessage\">".
  200. "<input type=\"hidden\" name=\"show_more\" value=\"0\">".
  201. "<input type=\"hidden\" name=\"move_id\" value=\"$passed_id\">".
  202. _("Move to:") .
  203. ' <select name="targetMailbox">';
  204. get_move_target_list();
  205. echo '</select> '.
  206. '<input type="submit" value="' . _("Move") . '">'.
  207. '</small>'.
  208. '</form>'.
  209. '</td>'.
  210. '</tr>';
  211. }
  212. function delete_move_next_moveRightMainForm() {
  213. global $color, $where, $what, $currentArrayIndex, $passed_id,
  214. $urlMailbox, $sort, $startMessage, $delete_id, $move_id,
  215. $imapConnection;
  216. echo '<tr>' .
  217. "<td bgcolor=\"$color[9]\" width=\"100%\" align=\"center\">".
  218. '<form action="right_main.php" method="post"><small>' .
  219. "<input type=\"hidden\" name=\"mailbox\" value=\"".urldecode($urlMailbox)."\">".
  220. "<input type=\"hidden\" name=\"sort\" value=\"$sort\">".
  221. "<input type=\"hidden\" name=\"startMessage\" value=\"$startMessage\">".
  222. "<input type=\"hidden\" name=\"move_id\" value=\"$passed_id\">".
  223. _("Move to:") .
  224. ' <select name="targetMailbox">';
  225. get_move_target_list();
  226. echo ' </select>' .
  227. '<input type=submit value="' . _("Move") . '">'.
  228. '</small>'.
  229. '</form>' .
  230. '</td>'.
  231. '</tr>';
  232. }
  233. function delete_move_next_delete() {
  234. global $imapConnection, $delete_id, $mailbox, $auto_expunge;
  235. sqimap_messages_delete($imapConnection, $delete_id, $delete_id, $mailbox);
  236. if ($auto_expunge){
  237. delete_move_expunge_from_all($delete_id);
  238. // sqimap_mailbox_expunge($imapConnection, $mailbox, true);
  239. }
  240. }
  241. function delete_move_next_move() {
  242. global $imapConnection, $move_id, $targetMailbox, $auto_expunge, $mailbox;
  243. // Move message
  244. sqimap_messages_copy($imapConnection, $move_id, $move_id, $targetMailbox);
  245. sqimap_messages_flag($imapConnection, $move_id, $move_id, 'Deleted');
  246. if ($auto_expunge) {
  247. delete_move_expunge_from_all($move_id);
  248. // sqimap_mailbox_expunge($imapConnection, $mailbox, true);
  249. }
  250. }
  251. function delete_move_next_display_inside() {
  252. global $username,$data_dir,
  253. $delete_move_next_t, $delete_move_next_formATtop,
  254. $delete_move_next_b, $delete_move_next_formATbottom;
  255. echo "<tr><td align=right valign=top>\n".
  256. _("Delete/Move/Next Buttons:") . "</td>\n".
  257. "<td><input type=checkbox name=delete_move_next_ti";
  258. if ($delete_move_next_t == 'on') {
  259. echo " checked";
  260. }
  261. echo '> ' . _("Display at top").
  262. " <input type=checkbox name=delete_move_next_formATtopi";
  263. if ($delete_move_next_formATtop == 'on') {
  264. echo ' checked';
  265. }
  266. echo '> ' . _("with move option") . '<br>';
  267. echo '<input type=checkbox name=delete_move_next_bi';
  268. if($delete_move_next_b != 'off') {
  269. echo ' checked';
  270. }
  271. echo '> ' . _("Display at bottom") .
  272. '<input type=checkbox name=delete_move_next_formATbottomi';
  273. if ($delete_move_next_formATbottom != 'off') {
  274. echo ' checked';
  275. }
  276. echo '> ' . _("with move option") . '<br>'.
  277. "</td></tr>\n";
  278. }
  279. function delete_move_next_display_save() {
  280. global $username,$data_dir,
  281. $delete_move_next_ti, $delete_move_next_formATtopi,
  282. $delete_move_next_bi, $delete_move_next_formATbottomi;
  283. if (isset($delete_move_next_ti)) {
  284. setPref($data_dir, $username, 'delete_move_next_t', 'on');
  285. } else {
  286. setPref($data_dir, $username, 'delete_move_next_t', "off");
  287. }
  288. if (isset($delete_move_next_formATtopi)) {
  289. setPref($data_dir, $username, 'delete_move_next_formATtop', 'on');
  290. } else {
  291. setPref($data_dir, $username, 'delete_move_next_formATtop', "off");
  292. }
  293. if (isset($delete_move_next_bi)) {
  294. setPref($data_dir, $username, 'delete_move_next_b', 'on');
  295. } else {
  296. setPref($data_dir, $username, 'delete_move_next_b', "off");
  297. }
  298. if (isset($delete_move_next_formATbottomi)) {
  299. setPref($data_dir, $username, 'delete_move_next_formATbottom', 'on');
  300. } else {
  301. setPref($data_dir, $username, 'delete_move_next_formATbottom', "off");
  302. }
  303. }
  304. function delete_move_next_loading_prefs() {
  305. global $username,$data_dir,
  306. $delete_move_next_t, $delete_move_next_formATtop,
  307. $delete_move_next_b, $delete_move_next_formATbottom;
  308. $delete_move_next_t = getPref($data_dir, $username, 'delete_move_next_t');
  309. $delete_move_next_b = getPref($data_dir, $username, 'delete_move_next_b');
  310. $delete_move_next_formATtop = getPref($data_dir, $username, 'delete_move_next_formATtop');
  311. $delete_move_next_formATbottom = getPref($data_dir, $username, 'delete_move_next_formATbottom');
  312. }
  313. ?>