1 |
--- 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 |
2 |
+++ smeserver-mailsorting-1.4.old/root/usr/share/perl5/vendor_perl/esmith/FormMagick/Panel/mailsort.pm 2017-02-08 20:27:45.000000000 +0100 |
3 |
@@ -64,7 +64,7 @@ |
4 |
|
5 |
stripe => "#D4D0C8", |
6 |
|
7 |
- fields => [ qw(b1 criterion b2 criterion2 deliver copy deliver2 Modify Remove) ], |
8 |
+ fields => [ qw(b1 criterion b2 criterion2 action deliver copy deliver2 Modify Remove) ], |
9 |
|
10 |
labels => 1, |
11 |
|
12 |
@@ -77,6 +77,7 @@ |
13 |
|
14 |
criterion2 => { label => $self->localise("2ND_CRITERION") }, |
15 |
|
16 |
+ action => { label => $self->localise("ACTION") }, |
17 |
deliver => { label => $self->localise("DESTINATION") }, |
18 |
|
19 |
copy => { label => $self->localise("COPY") }, |
20 |
@@ -109,6 +110,8 @@ |
21 |
my $deliver2 = $rule->prop("deliver2") || ''; |
22 |
my $action = $rule->prop("action") || ''; |
23 |
my $action2 = $rule->prop("action2") || ''; |
24 |
+ my $folder = ("$action" eq "sort" )? $deliver : ''; |
25 |
+ $folder = "INBOX" if "$folder" eq "" && "$action" eq "sort"; |
26 |
my $copy = $rule->prop("copy") || ''; |
27 |
my $oldpmRule = ''; |
28 |
|
29 |
@@ -123,13 +126,13 @@ |
30 |
my $b1 = $self->localise($basis); |
31 |
my $b2 = $self->localise($basis2); |
32 |
|
33 |
- my $copyto = $rule->prop("deliver2") || ''; |
34 |
+ my $copyto = $rule->prop("deliver2") || '';# useless |
35 |
if (($copy eq 'yes') && ($action2 eq 'inbox')) |
36 |
- { $copyto = 'inbox'; } |
37 |
+ { $deliver2 = ""; $copyto = 'inbox'; } # copyto is useless |
38 |
|
39 |
$deliver = GetDisplayName($deliver); |
40 |
$deliver2 = GetDisplayName($deliver2); |
41 |
- |
42 |
+ |
43 |
push @data, |
44 |
{ |
45 |
key => $rule->key, |
46 |
@@ -139,6 +142,7 @@ |
47 |
criterion2 => $rule->prop("criterion2") || '', |
48 |
deliver => $deliver, |
49 |
deliver2 => $deliver2, |
50 |
+ folder => $folder, |
51 |
action => $action, |
52 |
action2 => $action2, |
53 |
copy => $copy, |
54 |
@@ -227,6 +231,10 @@ |
55 |
{ |
56 |
my ($data_item, $row, $field) = @_; |
57 |
|
58 |
+ #avoid duplicate data if we sort we use folder field |
59 |
+ my $deliver = $row->{deliver}; |
60 |
+ $deliver="" if $row->{action} eq "sort"; |
61 |
+ |
62 |
return "userpanel-mailsort?" . |
63 |
join("&", |
64 |
"page=0", |
65 |
@@ -238,8 +246,9 @@ |
66 |
"basis2=" . $row->{basis2}, |
67 |
"criterion=" . $row->{criterion}, |
68 |
"criterion2=" . $row->{criterion2}, |
69 |
- "deliver=" . $row->{deliver}, |
70 |
+ "deliver=" . $deliver, |
71 |
"deliver2=" . $row->{deliver2}, |
72 |
+ "folder=" . $row->{folder}, |
73 |
"action=" . $row->{action}, |
74 |
"action2=" . $row->{action2}, |
75 |
"copy=" . $row->{copy}, |
76 |
@@ -290,34 +299,42 @@ |
77 |
$rule = $PanelUser.$random; |
78 |
$pdb->new_record($rule, { type => "$PanelUser" }); |
79 |
} |
80 |
+ my %filtered; |
81 |
+ $filtered{criterion} .= $q->param ('criterion') || ''; |
82 |
+ $filtered{criterion2} .= $q->param ('criterion2') || ''; |
83 |
+ $filtered{basis} .= $q->param ('basis') || ''; |
84 |
+ $filtered{basis2} .= $q->param ('basis2') || ''; |
85 |
+ $filtered{action} .= $q->param ('action') || ''; |
86 |
+ $filtered{action2} .= $q->param ('action2') || ''; |
87 |
+ $filtered{deliver} .= $q->param ('deliver') || ''; |
88 |
+ $filtered{deliver2} .= $q->param ('deliver2') || ''; |
89 |
+ $filtered{folder} .= $q->param ('folder') || ''; |
90 |
+ $filtered{copy} .= $q->param ('copy') || ''; |
91 |
+ $filtered{oldkey} .= $q->param ('oldkey') || ''; |
92 |
+ |
93 |
+ if ($filtered{basis} eq 'sizelt') { $filtered{basis} = '<'; } |
94 |
+ if ($filtered{basis} eq 'sizegt') { $filtered{basis} = '>'; } |
95 |
+ if ($filtered{basis2} eq 'sizelt') { $filtered{basis2} = '<'; } |
96 |
+ if ($filtered{basis2} eq 'sizegt') { $filtered{basis2} = '>'; } |
97 |
+ |
98 |
+ # we use the folder drop box selection if asked to sort |
99 |
+ $filtered{folder} = "" if $filtered{folder} eq "INBOX"; |
100 |
+ $filtered{deliver} = $filtered{folder} if $filtered{action} eq "sort"; |
101 |
|
102 |
- my $basis = $q->param ('basis') || ''; |
103 |
- my $basis2 = $q->param ('basis2') || ''; |
104 |
- my $action = $q->param ('action') || ''; |
105 |
- my $action2 = $q->param ('action2') || ''; |
106 |
- my $deliver = $q->param ('deliver') || ''; |
107 |
- my $deliver2 = $q->param ('deliver2') || ''; |
108 |
- my $copy = $q->param ('copy') || ''; |
109 |
- my $oldkey = $q->param ('oldkey') || ''; |
110 |
- |
111 |
- if ($basis eq 'sizelt') { $basis = '<'; } |
112 |
- if ($basis eq 'sizegt') { $basis = '>'; } |
113 |
- if ($basis2 eq 'sizelt') { $basis2 = '<'; } |
114 |
- if ($basis2 eq 'sizegt') { $basis2 = '>'; } |
115 |
- |
116 |
- if ($copy eq 'no') { $deliver2 = ''; $action2 = ''; } |
117 |
+ if ($filtered{copy} eq 'no') { $filtered{deliver2} = ''; $filtered{action2} = ''; } |
118 |
+ if ($filtered{copy} eq 'yes' && $filtered{action2} eq 'inbox') { $filtered{deliver2} = ''; } |
119 |
|
120 |
# keys are different but rule at least has part of users name so is likely changed |
121 |
- if (($oldkey ne $rule) && ($oldkey =~ /$PanelUser/)) |
122 |
+ if (($filtered{oldkey} ne $rule) && ($filtered{oldkey} =~ /$PanelUser/)) |
123 |
{ |
124 |
$pdb->new_record($rule, { type => "$PanelUser" }); |
125 |
|
126 |
- my $rec = $pdb->get($oldkey); |
127 |
+ my $rec = $pdb->get($filtered{oldkey}); |
128 |
$rec->delete; |
129 |
} |
130 |
|
131 |
foreach ("criterion","criterion2","action","action2","copy","basis","basis2","deliver","deliver2" ) |
132 |
- { $pdb->set_prop($rule, "$_", $q->param("$_")); } |
133 |
+ { $pdb->set_prop($rule, "$_", $filtered{$_}); } |
134 |
|
135 |
unless ( system ("/sbin/e-smith/signal-event mailsorting-conf $PanelUser") == 0 ) |
136 |
{ return $self->error('ERROR_UPDATING'); } |
137 |
@@ -331,7 +348,29 @@ |
138 |
my $t = Unicode::IMAPUtf7->new(); |
139 |
$s =~ s/(.*)//; # untaint it |
140 |
my $u = utf8($t->decode($1)); |
141 |
- return $u->latin1; |
142 |
+ return $u->utf8;#$u->latin1; |
143 |
+} |
144 |
+ |
145 |
+sub listfolders |
146 |
+{ |
147 |
+ use File::Find::Rule; |
148 |
+ my $root="/home/e-smith/files/users/$PanelUser/Maildir"; |
149 |
+ $root="/home/e-smith/Maildir" if "$PanelUser" eq "admin" ; |
150 |
+ my @dirs = File::Find::Rule->new |
151 |
+ ->extras({ untaint => 1 , untaint_pattern => qr|^([-+@\w&. /]+)$| }) |
152 |
+ ->directory |
153 |
+ ->maxdepth(1) |
154 |
+ ->in($root); |
155 |
+ my %out_dir; |
156 |
+ $out_dir{"INBOX"} .= "INBOX"; |
157 |
+ $out_dir{""} .= ""; |
158 |
+ for (sort @dirs) { |
159 |
+ s/$root\/?\.?//; |
160 |
+ my @exclu =("cur", "tmp", "new" , "INBOX" ); |
161 |
+ next if $_ ~~ @exclu; |
162 |
+ $out_dir{$_} .= GetDisplayName(join('/',split('\.', $_))); |
163 |
+ } |
164 |
+ return \%out_dir; |
165 |
} |
166 |
|
167 |
sub nonblankWithForward |
168 |
@@ -342,7 +381,12 @@ |
169 |
my $action = $q->param ('action') || ''; |
170 |
my $deliver = $q->param ('deliver') || ''; |
171 |
|
172 |
- if ( $action ne 'delete') |
173 |
+ if ( $action eq 'sort') |
174 |
+ { |
175 |
+ return "ERROR_SHOULD_BE_EMPTY" unless not $deliver; |
176 |
+ return "OK"; |
177 |
+ } |
178 |
+ elsif ( $action ne 'delete') |
179 |
{ |
180 |
if (not $deliver) |
181 |
{ return "ERROR_FORWARD_NO_EMAIL"; } |
182 |
@@ -363,7 +407,7 @@ |
183 |
my $action = $q->param ('action2') || ''; |
184 |
my $deliver = $q->param ('deliver2') || ''; |
185 |
|
186 |
- if (( $action ne 'delete') && ( $copy eq 'yes')) |
187 |
+ if (( $action eq 'forward') && ( $copy eq 'yes')) |
188 |
{ |
189 |
if (not $deliver) |
190 |
{ return "ERROR_FORWARD_NO_EMAIL"; } |
191 |
@@ -375,4 +419,21 @@ |
192 |
else { return "OK"; } |
193 |
} |
194 |
|
195 |
+sub nonblankWithSort |
196 |
+{ |
197 |
+ my $self = shift; |
198 |
+ my $q = $self->{cgi}; |
199 |
+ |
200 |
+ my $action = $q->param ('action') || ''; |
201 |
+ my $folder = $q->param ('folder') || ''; |
202 |
+ |
203 |
+ if ( $action eq 'sort') |
204 |
+ { |
205 |
+ return "ERROR_SORT_NO_FOLDER" if not $folder; |
206 |
+ return "OK"; |
207 |
+ } |
208 |
+ else { return "OK"; } |
209 |
+} |
210 |
+ |
211 |
+ |
212 |
1; |
213 |
--- smeserver-mailsorting-1.4.old/root/etc/e-smith/web/functions/userpanel-mailsort.dropbox 2014-12-02 07:32:45.000000000 +0100 |
214 |
+++ smeserver-mailsorting-1.4.old/root/etc/e-smith/web/functions/userpanel-mailsort 2017-02-08 19:31:01.000000000 +0100 |
215 |
@@ -120,6 +120,14 @@ |
216 |
validation="nonblankWithForward()"> |
217 |
<label>DELIVER</label> |
218 |
</field> |
219 |
+ <field |
220 |
+ type="select" |
221 |
+ id="folder" |
222 |
+ options="listfolders" |
223 |
+ value="" |
224 |
+ validation="nonblankWithSort()"> |
225 |
+ <label>FOLDER</label> |
226 |
+ </field> |
227 |
|
228 |
<field |
229 |
type="select" |
230 |
@@ -146,7 +154,7 @@ |
231 |
id="deliver2" |
232 |
value="" |
233 |
validation="nonblankWithForward2()"> |
234 |
- <label>DELIVER</label> |
235 |
+ <label>EMAIL</label> |
236 |
</field> |
237 |
|
238 |
<subroutine src="priority" /> |
239 |
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 |
240 |
--- 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 |
241 |
+++ 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 |
242 |
@@ -78,7 +78,15 @@ |
243 |
</entry> |
244 |
<entry> |
245 |
<base>DELIVER</base> |
246 |
- <trans>Folder or email address</trans> |
247 |
+ <trans>email address (if forwarding)</trans> |
248 |
+ </entry> |
249 |
+ <entry> |
250 |
+ <base>EMAIL</base> |
251 |
+ <trans>email address (if forwarding)</trans> |
252 |
+ </entry> |
253 |
+ <entry> |
254 |
+ <base>FOLDER</base> |
255 |
+ <trans>Folder (if sorting)</trans> |
256 |
</entry> |
257 |
<entry> |
258 |
<base>COPY_TO</base> |