1#!/usr/local/bin/perl
2# Apply a filter to email in some folder
3
4require './filter-lib.pl';
5&ReadParse();
6&error_setup($text{'move_err'});
7
8# Get the filter
9@filters = &list_filters();
10($filter) = grep { $_->{'index'} == $in{'idx'} } @filters;
11$filter || &error($text{'save_egone'});
12
13# Get the source and destination folders
14@folders = &mailbox::list_folders();
15$src = &mailbox::find_named_folder($in{'movefrom'}, \@folders);
16$src || &error(&text('move_esrc', $in{'movefrom'}));
17$dest = &file_to_folder($filter->{'action'}, \@folders);
18$dest || &error(&text('move_edest', $filter->{'action'}));
19&mailbox::folder_name($src) eq &mailbox::folder_name($dest) &&
20	&error($text{'move_esame'});
21
22&ui_print_unbuffered_header(undef, $text{'move_title'}, "");
23
24# Find matching messages
25if ($filter->{'condspam'}) {
26	@fields = ( [ "X-Spam-Status", "Yes" ] );
27	}
28elsif ($filter->{'condlevel'}) {
29	$stars = "*" x $filter->{'condlevel'};
30	@fields = ( [ "X-Spam-Level", $stars ] );
31	}
32else {
33	@fields = ( [ lc($filter->{'condheader'}),
34		      $filter->{'condvalue'}, 1 ] );
35	}
36print &text('move_finding', &mailbox::folder_name($src)),"<br>\n";
37@mails = &mailbox::mailbox_search_mail(\@fields, 1, $src, undef, 1);
38if (!@mails) {
39	print $text{'move_none'},"<p>\n";
40	}
41else {
42	print &text('move_found', scalar(@mails)),"<p>\n";
43
44	print &text('move_moving', scalar(@mails),
45		    &mailbox::folder_name($dest)),"<br>\n";
46	&mailbox::mailbox_move_mail($src, $dest, reverse(@mails));
47	print $text{'move_done'},"<p>\n";
48	}
49
50if (defined(&theme_post_save_folder)) {
51	&theme_post_save_folder($src);
52	&theme_post_save_folder($dest);
53	}
54
55&ui_print_footer("", $text{'index_return'});
56
57