1 |
unnilennium |
1.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> |