summaryrefslogtreecommitdiff
path: root/roundcubemail/program/steps
diff options
context:
space:
mode:
authorNathan Kinkade <nkinkade@nkinka.de>2009-03-05 21:11:55 +0000
committerNathan Kinkade <nkinkade@nkinka.de>2009-03-11 12:51:51 +0000
commit8fd923e70c08c103a3b9aa644431e4ee8cd0b330 (patch)
treec69344a978609e5b7a92d8de4d30380bfb878bd3 /roundcubemail/program/steps
parentbc3c5f3f9922ae33c3f0077b71650ec5749d72dc (diff)
Added functionality to copy messages from one mailbox to another.
Diffstat (limited to 'roundcubemail/program/steps')
-rw-r--r--roundcubemail/program/steps/mail/copy.inc96
1 files changed, 96 insertions, 0 deletions
diff --git a/roundcubemail/program/steps/mail/copy.inc b/roundcubemail/program/steps/mail/copy.inc
new file mode 100644
index 000000000..247f6d96c
--- /dev/null
+++ b/roundcubemail/program/steps/mail/copy.inc
@@ -0,0 +1,96 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | program/steps/mail/move_del.inc |
+ | |
+ | This file is part of the RoundCube Webmail client |
+ | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ | PURPOSE: |
+ | Move the submitted messages to a specific mailbox or delete them |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ $Id: move_del.inc 2018 2008-10-27 10:53:56Z alec $
+
+*/
+
+// count messages before changing anything
+$old_count = $IMAP->messagecount(NULL, rcmail::get_instance()->imap->threading?'THREADS':'ALL');
+$old_pages = ceil($old_count / $IMAP->page_size);
+
+// copy messages
+if ($RCMAIL->action=='copyto' && !empty($_POST['_uid']) && !empty($_POST['_target_mbox'])) {
+ $count = sizeof(explode(',', ($uids = get_input_value('_uid', RCUBE_INPUT_POST))));
+ $target = get_input_value('_target_mbox', RCUBE_INPUT_POST);
+ $mbox = get_input_value('_mbox', RCUBE_INPUT_POST);
+
+ $moved = $IMAP->copy_message($uids, $target, $mbox);
+
+ if (!$moved) {
+ // send error message
+ $OUTPUT->command('list_mailbox');
+ $OUTPUT->show_message('errormoving', 'error');
+ $OUTPUT->send();
+ exit;
+ }
+
+}
+// unknown action or missing query param
+else {
+ exit;
+}
+// refresh saved search set after moving some messages
+if (($search_request = get_input_value('_search', RCUBE_INPUT_GPC)) && $IMAP->search_set) {
+ $_SESSION['search'][$search_request] = $IMAP->refresh_search();
+}
+
+$msg_count = $IMAP->messagecount(NULL, rcmail::get_instance()->imap->threading?'THREADS':'ALL');
+$pages = ceil($msg_count / $IMAP->page_size);
+$nextpage_count = $old_count - $IMAP->page_size * $IMAP->list_page;
+$remaining = $msg_count - $IMAP->page_size * ($IMAP->list_page - 1);
+
+// jump back one page (user removed the whole last page)
+if ($IMAP->list_page > 1 && $nextpage_count <= 0 && $remaining == 0) {
+ $IMAP->set_page($IMAP->list_page-1);
+ $_SESSION['page'] = $IMAP->list_page;
+ $jump_back = true;
+}
+
+// update message count display
+$OUTPUT->set_env('pagecount', $pages);
+$OUTPUT->set_env('messagecount', $msg_count);
+$OUTPUT->set_env('current_page', $IMAP->list_page);
+$OUTPUT->command('set_rowcount', rcmail_get_messagecount_text($msg_count));
+
+// update mailboxlist
+$OUTPUT->command('set_unread_count', $mbox, $IMAP->messagecount($mbox, 'UNSEEN'), ($mbox == 'INBOX'));
+
+if ($RCMAIL->action=='moveto' && $target) {
+ $OUTPUT->command('set_unread_count', $target, $IMAP->messagecount($target, 'UNSEEN'));
+}
+
+$OUTPUT->command('set_quota', rcmail_quota_content($IMAP->get_quota()));
+
+// add new rows from next page (if any)
+if ($addrows && $_POST['_from']!='show' && ($jump_back || $nextpage_count > 0)) {
+ $sort_col = isset($_SESSION['sort_col']) ? $_SESSION['sort_col'] : $CONFIG['message_sort_col'];
+ $sort_order = isset($_SESSION['sort_order']) ? $_SESSION['sort_order'] : $CONFIG['message_sort_order'];
+
+ $a_headers = $IMAP->list_headers($mbox, NULL, $sort_col, $sort_order);
+ if (!$jump_back) {
+ if ($_SESSION['threads'])
+ // TODO: count number of roots deleted and slice that many roots from the end of $a_headers
+ $OUTPUT->command('message_list.clear');
+ else
+ $a_headers = array_slice($a_headers, -$count, $count);
+ }
+ rcmail_js_message_list($a_headers);
+}
+
+// send response
+$OUTPUT->send();