--- smeserver-mailsorting-1.4.old/root/usr/share/perl5/vendor_perl/esmith/FormMagick/Panel/mailsort.pm.dropbox 2014-12-02 07:32:45.000000000 +0100
+++ smeserver-mailsorting-1.4.old/root/usr/share/perl5/vendor_perl/esmith/FormMagick/Panel/mailsort.pm 2017-02-08 20:27:45.000000000 +0100
@@ -64,7 +64,7 @@
stripe => "#D4D0C8",
- fields => [ qw(b1 criterion b2 criterion2 deliver copy deliver2 Modify Remove) ],
+ fields => [ qw(b1 criterion b2 criterion2 action deliver copy deliver2 Modify Remove) ],
labels => 1,
@@ -77,6 +77,7 @@
criterion2 => { label => $self->localise("2ND_CRITERION") },
+ action => { label => $self->localise("ACTION") },
deliver => { label => $self->localise("DESTINATION") },
copy => { label => $self->localise("COPY") },
@@ -109,6 +110,8 @@
my $deliver2 = $rule->prop("deliver2") || '';
my $action = $rule->prop("action") || '';
my $action2 = $rule->prop("action2") || '';
+ my $folder = ("$action" eq "sort" )? $deliver : '';
+ $folder = "INBOX" if "$folder" eq "" && "$action" eq "sort";
my $copy = $rule->prop("copy") || '';
my $oldpmRule = '';
@@ -123,13 +126,13 @@
my $b1 = $self->localise($basis);
my $b2 = $self->localise($basis2);
- my $copyto = $rule->prop("deliver2") || '';
+ my $copyto = $rule->prop("deliver2") || '';# useless
if (($copy eq 'yes') && ($action2 eq 'inbox'))
- { $copyto = 'inbox'; }
+ { $deliver2 = ""; $copyto = 'inbox'; } # copyto is useless
$deliver = GetDisplayName($deliver);
$deliver2 = GetDisplayName($deliver2);
-
+
push @data,
{
key => $rule->key,
@@ -139,6 +142,7 @@
criterion2 => $rule->prop("criterion2") || '',
deliver => $deliver,
deliver2 => $deliver2,
+ folder => $folder,
action => $action,
action2 => $action2,
copy => $copy,
@@ -227,6 +231,10 @@
{
my ($data_item, $row, $field) = @_;
+ #avoid duplicate data if we sort we use folder field
+ my $deliver = $row->{deliver};
+ $deliver="" if $row->{action} eq "sort";
+
return "userpanel-mailsort?" .
join("&",
"page=0",
@@ -238,8 +246,9 @@
"basis2=" . $row->{basis2},
"criterion=" . $row->{criterion},
"criterion2=" . $row->{criterion2},
- "deliver=" . $row->{deliver},
+ "deliver=" . $deliver,
"deliver2=" . $row->{deliver2},
+ "folder=" . $row->{folder},
"action=" . $row->{action},
"action2=" . $row->{action2},
"copy=" . $row->{copy},
@@ -290,34 +299,42 @@
$rule = $PanelUser.$random;
$pdb->new_record($rule, { type => "$PanelUser" });
}
+ my %filtered;
+ $filtered{criterion} .= $q->param ('criterion') || '';
+ $filtered{criterion2} .= $q->param ('criterion2') || '';
+ $filtered{basis} .= $q->param ('basis') || '';
+ $filtered{basis2} .= $q->param ('basis2') || '';
+ $filtered{action} .= $q->param ('action') || '';
+ $filtered{action2} .= $q->param ('action2') || '';
+ $filtered{deliver} .= $q->param ('deliver') || '';
+ $filtered{deliver2} .= $q->param ('deliver2') || '';
+ $filtered{folder} .= $q->param ('folder') || '';
+ $filtered{copy} .= $q->param ('copy') || '';
+ $filtered{oldkey} .= $q->param ('oldkey') || '';
+
+ if ($filtered{basis} eq 'sizelt') { $filtered{basis} = '<'; }
+ if ($filtered{basis} eq 'sizegt') { $filtered{basis} = '>'; }
+ if ($filtered{basis2} eq 'sizelt') { $filtered{basis2} = '<'; }
+ if ($filtered{basis2} eq 'sizegt') { $filtered{basis2} = '>'; }
+
+ # we use the folder drop box selection if asked to sort
+ $filtered{folder} = "" if $filtered{folder} eq "INBOX";
+ $filtered{deliver} = $filtered{folder} if $filtered{action} eq "sort";
- my $basis = $q->param ('basis') || '';
- my $basis2 = $q->param ('basis2') || '';
- my $action = $q->param ('action') || '';
- my $action2 = $q->param ('action2') || '';
- my $deliver = $q->param ('deliver') || '';
- my $deliver2 = $q->param ('deliver2') || '';
- my $copy = $q->param ('copy') || '';
- my $oldkey = $q->param ('oldkey') || '';
-
- if ($basis eq 'sizelt') { $basis = '<'; }
- if ($basis eq 'sizegt') { $basis = '>'; }
- if ($basis2 eq 'sizelt') { $basis2 = '<'; }
- if ($basis2 eq 'sizegt') { $basis2 = '>'; }
-
- if ($copy eq 'no') { $deliver2 = ''; $action2 = ''; }
+ if ($filtered{copy} eq 'no') { $filtered{deliver2} = ''; $filtered{action2} = ''; }
+ if ($filtered{copy} eq 'yes' && $filtered{action2} eq 'inbox') { $filtered{deliver2} = ''; }
# keys are different but rule at least has part of users name so is likely changed
- if (($oldkey ne $rule) && ($oldkey =~ /$PanelUser/))
+ if (($filtered{oldkey} ne $rule) && ($filtered{oldkey} =~ /$PanelUser/))
{
$pdb->new_record($rule, { type => "$PanelUser" });
- my $rec = $pdb->get($oldkey);
+ my $rec = $pdb->get($filtered{oldkey});
$rec->delete;
}
foreach ("criterion","criterion2","action","action2","copy","basis","basis2","deliver","deliver2" )
- { $pdb->set_prop($rule, "$_", $q->param("$_")); }
+ { $pdb->set_prop($rule, "$_", $filtered{$_}); }
unless ( system ("/sbin/e-smith/signal-event mailsorting-conf $PanelUser") == 0 )
{ return $self->error('ERROR_UPDATING'); }
@@ -331,7 +348,29 @@
my $t = Unicode::IMAPUtf7->new();
$s =~ s/(.*)//; # untaint it
my $u = utf8($t->decode($1));
- return $u->latin1;
+ return $u->utf8;#$u->latin1;
+}
+
+sub listfolders
+{
+ use File::Find::Rule;
+ my $root="/home/e-smith/files/users/$PanelUser/Maildir";
+ $root="/home/e-smith/Maildir" if "$PanelUser" eq "admin" ;
+ my @dirs = File::Find::Rule->new
+ ->extras({ untaint => 1 , untaint_pattern => qr|^([-+@\w&. /]+)$| })
+ ->directory
+ ->maxdepth(1)
+ ->in($root);
+ my %out_dir;
+ $out_dir{"INBOX"} .= "INBOX";
+ $out_dir{""} .= "";
+ for (sort @dirs) {
+ s/$root\/?\.?//;
+ my @exclu =("cur", "tmp", "new" , "INBOX" );
+ next if $_ ~~ @exclu;
+ $out_dir{$_} .= GetDisplayName(join('/',split('\.', $_)));
+ }
+ return \%out_dir;
}
sub nonblankWithForward
@@ -342,7 +381,12 @@
my $action = $q->param ('action') || '';
my $deliver = $q->param ('deliver') || '';
- if ( $action ne 'delete')
+ if ( $action eq 'sort')
+ {
+ return "ERROR_SHOULD_BE_EMPTY" unless not $deliver;
+ return "OK";
+ }
+ elsif ( $action ne 'delete')
{
if (not $deliver)
{ return "ERROR_FORWARD_NO_EMAIL"; }
@@ -363,7 +407,7 @@
my $action = $q->param ('action2') || '';
my $deliver = $q->param ('deliver2') || '';
- if (( $action ne 'delete') && ( $copy eq 'yes'))
+ if (( $action eq 'forward') && ( $copy eq 'yes'))
{
if (not $deliver)
{ return "ERROR_FORWARD_NO_EMAIL"; }
@@ -375,4 +419,21 @@
else { return "OK"; }
}
+sub nonblankWithSort
+{
+ my $self = shift;
+ my $q = $self->{cgi};
+
+ my $action = $q->param ('action') || '';
+ my $folder = $q->param ('folder') || '';
+
+ if ( $action eq 'sort')
+ {
+ return "ERROR_SORT_NO_FOLDER" if not $folder;
+ return "OK";
+ }
+ else { return "OK"; }
+}
+
+
1;
--- smeserver-mailsorting-1.4.old/root/etc/e-smith/web/functions/userpanel-mailsort.dropbox 2014-12-02 07:32:45.000000000 +0100
+++ smeserver-mailsorting-1.4.old/root/etc/e-smith/web/functions/userpanel-mailsort 2017-02-08 19:31:01.000000000 +0100
@@ -120,6 +120,14 @@
validation="nonblankWithForward()">
+
+
+
-
+
diff -Nur smeserver-mailsorting-1.4.old/root/etc/e-smith/locale/en-us/etc/e-smith/web/functions/userpanel-mailsort smeserver-mailsorting-1.4/root/etc/e-smith/locale/en-us/etc/e-smith/web/functions/userpanel-mailsort
--- smeserver-mailsorting-1.4.old/root/etc/e-smith/locale/en-us/etc/e-smith/web/functions/userpanel-mailsort 2014-12-02 01:32:45.000000000 -0500
+++ smeserver-mailsorting-1.4/root/etc/e-smith/locale/en-us/etc/e-smith/web/functions/userpanel-mailsort 2017-02-08 14:38:37.752000000 -0500
@@ -78,7 +78,15 @@
DELIVER
- Folder or email address
+ email address (if forwarding)
+
+
+ EMAIL
+ email address (if forwarding)
+
+
+ FOLDER
+ Folder (if sorting)
COPY_TO