--- 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