849bdf42 |
1 | <?php |
2 | /* |
3 | * Message and Spam Filter Plugin |
4 | * By Luke Ehresman <luke@squirrelmail.org> |
5 | * Tyler Akins |
6 | * Brent Bice |
7 | * (c) 2000 (GNU GPL - see ../../COPYING) |
8 | * |
9 | * This plugin filters your inbox into different folders based upon given |
10 | * criteria. It is most useful for people who are subscibed to mailing lists |
11 | * to help organize their messages. The argument stands that filtering is |
12 | * not the place of the client, which is why this has been made a plugin for |
13 | * SquirrelMail. You may be better off using products such as Sieve or |
14 | * Procmail to do your filtering so it happens even when SquirrelMail isn't |
15 | * running. |
16 | * |
17 | * If you need help with this, or see improvements that can be made, please |
18 | * email me directly at the address above. I definately welcome suggestions |
19 | * and comments. This plugin, as is the case with all SquirrelMail plugins, |
20 | * is not directly supported by the developers. Please come to me off the |
21 | * mailing list if you have trouble with it. |
22 | * |
23 | * Also view plugins/README.plugins for more information. |
24 | * |
25 | */ |
26 | chdir (".."); |
27 | require_once('../src/validate.php'); |
28 | require_once ("../functions/page_header.php"); |
29 | require_once ("../functions/imap.php"); |
30 | require_once ("../src/load_prefs.php"); |
31 | |
32 | global $AllowSpamFilters; |
33 | |
34 | displayPageHeader($color, "None"); |
35 | |
36 | if (isset($filter_submit)) { |
37 | if (!isset($theid)) $theid = 0; |
38 | $filter_what = ereg_replace(",", " ", $filter_what); |
39 | $filter_what = str_replace("\\\\", "\\", $filter_what); |
40 | $filter_what = str_replace("\\\"", "\"", $filter_what); |
41 | $filter_what = str_replace("\"", """, $filter_what); |
42 | |
43 | setPref($data_dir, $username, "filter".$theid, $filter_where.",".$filter_what.",".$filter_folder); |
44 | $filters[$theid]["where"] = $filter_where; |
45 | $filters[$theid]["what"] = $filter_what; |
46 | $filters[$theid]["folder"] = $filter_folder; |
47 | } elseif (isset($spam_submit) && $AllowSpamFilters) { |
48 | $spam_filters = load_spam_filters(); |
49 | setPref($data_dir, $username, 'filters_spam_folder', $filters_spam_folder_set); |
50 | setPref($data_dir, $username, 'filters_spam_scan', $filters_spam_scan_set); |
51 | foreach ($spam_filters as $Key => $Value) |
52 | { |
53 | $input = $spam_filters[$Key]['prefname'] . '_set'; |
54 | setPref($data_dir, $username, $spam_filters[$Key]['prefname'], |
55 | $$input); |
56 | } |
57 | } elseif (isset($action) && $action == "delete") { |
58 | remove_filter($theid); |
59 | } elseif (isset($action) && $action == "move_up") { |
60 | filter_swap($theid, $theid - 1); |
61 | } elseif (isset($action) && $action == "move_down") { |
62 | filter_swap($theid, $theid + 1); |
63 | } |
64 | |
65 | if ($AllowSpamFilters) { |
66 | $filters_spam_folder = getPref($data_dir, $username, 'filters_spam_folder'); |
67 | $filters_spam_scan = getPref($data_dir, $username, 'filters_spam_scan'); |
68 | } |
69 | $filters = load_filters(); |
70 | |
71 | ?> |
72 | <br> |
73 | <table width=95% align=center border=0 cellpadding=2 cellspacing=0><tr><td bgcolor="<?php echo $color[0] ?>"> |
74 | <center><b><?php echo _("Options") ?> - Message Filtering</b></center> |
75 | </td></tr></table> |
76 | <br><center>[<a href="options.php?action=add">New</a>] - [<a href="../../src/options.php">Done</a>]</center><br> |
77 | <table border=0 cellpadding=3 cellspacing=0 align=center> |
78 | <?php |
79 | for ($i=0; $i < count($filters); $i++) { |
80 | if ($i % 2 == 0) $clr = $color[0]; |
81 | else $clr = $color[9]; |
82 | |
83 | $fdr = ($folder_prefix)?str_replace($folder_prefix, "", $filters[$i]["folder"]):$filters[$i]["folder"]; |
84 | |
85 | ?> |
86 | <tr bgcolor="<?PHP echo $clr ?>"><td><small> |
87 | [<a href="options.php?theid=<?PHP echo $i ?>&action=edit">Edit</a>] |
88 | </small></td><td><small> |
89 | [<a href="options.php?theid=<?PHP echo $i ?>&action=delete">Delete</a>] |
90 | </small></td><td align=center><small> |
91 | [<?PHP if (isset($filters[$i + 1])) { |
92 | ?><a href="options.php?theid=<?PHP echo $i ?>&action=move_down">Down</a><?PHP |
93 | if ($i > 0) echo ' | '; |
94 | } |
95 | if ($i > 0) { |
96 | ?><a href="options.php?theid=<?PHP echo $i ?>&action=move_up">Up</a><?PHP |
97 | } ?>]</small></td><td> |
98 | - If <b><?PHP echo $filters[$i]['where'] ?></b> contains <b><?PHP |
99 | echo $filters[$i]['what'] ?></b> then move to <b><?PHP echo $fdr ?></b> |
100 | </td></tr> |
101 | <?PHP |
102 | |
103 | } |
104 | ?> |
105 | </table> |
106 | |
107 | <table width=80% align=center border=0 cellpadding=2 cellspacing=0"> |
108 | <tr><td> </td></tr> |
109 | </table> |
110 | |
111 | <?PHP if ($AllowSpamFilters) { ?> |
112 | |
113 | <table width=95% align=center border=0 cellpadding=2 cellspacing=0 bgcolor="<?php echo $color[0] ?>"> |
114 | <tr><th align=center>Spam Filtering</th></tr> |
115 | </table> |
116 | <?PHP if (! isset($action) || $action != 'spam') { ?> |
117 | <p align=center>[<a href="options.php?action=spam">Edit</a>]<br> |
118 | Spam is sent to <b><?PHP |
119 | if ($filters_spam_folder) |
120 | { |
121 | echo $filters_spam_folder; |
122 | } |
123 | else |
124 | { |
125 | echo '[<i>not set yet</i>]'; |
126 | } |
127 | ?></b><br>Spam scan is limited to <b><?PHP |
128 | if ($filters_spam_scan == 'new') |
129 | { |
130 | echo 'New Messages Only'; |
131 | } |
132 | else |
133 | { |
134 | echo 'All Messages'; |
135 | } |
136 | ?></b></p> |
137 | |
138 | <table border=0 cellpadding=3 cellspacing=0 align=center bgcolor="<?PHP echo $color[0] ?>"> |
139 | <?PHP |
140 | |
141 | $spam_filters = load_spam_filters(); |
142 | |
143 | foreach ($spam_filters as $Key => $Value) |
144 | { |
145 | echo '<tr><th align=center>'; |
146 | |
147 | if ($spam_filters[$Key]['enabled']) |
148 | { |
149 | echo 'ON'; |
150 | } |
151 | else |
152 | { |
153 | echo 'OFF'; |
154 | } |
155 | |
156 | echo '</th><td> - </td><td>'; |
157 | |
158 | if ($spam_filters[$Key]['link']) |
159 | { |
160 | echo '<a href="'; |
161 | echo $spam_filters[$Key]['link']; |
162 | echo '" target="_blank">'; |
163 | } |
164 | |
165 | echo $spam_filters[$Key]['name']; |
166 | if ($spam_filters[$Key]['link']) |
167 | { |
168 | echo '</a>'; |
169 | } |
170 | echo "</td></tr>\n"; |
171 | } |
172 | |
173 | ?> |
174 | </table> |
175 | <?php |
176 | } |
177 | } |
178 | |
179 | if (isset($action) && ($action == "add" || $action == "edit")) { |
180 | $imapConnection = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0); |
181 | $boxes = sqimap_mailbox_list($imapConnection); |
182 | sqimap_logout($imapConnection); |
183 | if (!isset($theid)) |
184 | $theid = count($filters); |
185 | |
186 | ?> |
187 | <center> |
188 | <form action="options.php" method=post> |
189 | <br><table cellpadding=2 cellspacing=0 border=0> |
190 | <tr> |
191 | <td> |
192 | |
193 | </td> |
194 | <td> |
195 | <select name=filter_where> |
196 | <?php |
197 | if (! isset($filters[$theid]['where'])) $L = false; |
198 | else $L = true; |
199 | if ($L && $filters[$theid]["where"] == "From") echo "<option value=\"From\" selected> From\n"; |
200 | else echo "<option value=\"From\"> From\n"; |
201 | |
202 | if ($L && $filters[$theid]["where"] == "To") echo "<option value=\"To\" selected> To\n"; |
203 | else echo "<option value=\"To\"> To\n"; |
204 | |
205 | if ($L && $filters[$theid]["where"] == "Cc") echo "<option value=\"Cc\" selected> Cc\n"; |
206 | else echo "<option value=\"Cc\"> Cc\n"; |
207 | |
208 | if ($L && $filters[$theid]["where"] == "To or Cc") echo "<option value=\"To or Cc\" selected> To or Cc\n"; |
209 | else echo "<option value=\"To or Cc\"> To or Cc\n"; |
210 | |
211 | if ($L && $filters[$theid]["where"] == "Subject") echo "<option value=\"Subject\" selected> Subject\n"; |
212 | else echo "<option value=\"Subject\"> Subject\n"; |
213 | ?> |
214 | </select> |
215 | </td> |
216 | </tr> |
217 | <tr> |
218 | <td align=right> |
219 | Contains: |
220 | </td> |
221 | <td> |
222 | <input type=text size=32 name=filter_what value="<?php |
223 | if (isset($filters[$theid]['what'])) echo $filters[$theid]["what"]; ?>"> |
224 | </td> |
225 | </tr> |
226 | <tr> |
227 | <td> |
228 | Move to: |
229 | </td> |
230 | <td> |
231 | <tt> |
232 | <select name=filter_folder> |
233 | <?php |
234 | for ($i = 0; $i < count($boxes); $i++) { |
235 | if (! in_array('noselect', $boxes[$i]['flags'])) { |
236 | $box = $boxes[$i]["unformatted"]; |
237 | $box2 = str_replace(' ', ' ', $boxes[$i]["formatted"]); |
238 | if (isset($filters[$theid]['folder']) && |
239 | $filters[$theid]["folder"] == $box) |
240 | echo " <OPTION VALUE=\"$box\" SELECTED>$box2\n"; |
241 | else |
242 | echo " <OPTION VALUE=\"$box\">$box2\n"; |
243 | } |
244 | } |
245 | ?> |
246 | </tt> |
247 | </select> |
248 | </td> |
249 | </tr> |
250 | </table> |
251 | <input type=submit name=filter_submit value=Submit> |
252 | <input type=hidden name=theid value=<?php echo $theid ?>> |
253 | </form> |
254 | </center> |
255 | <?php |
256 | } |
257 | else if (isset($action) && $action == 'spam' && $AllowSpamFilters) |
258 | { |
259 | $imapConnection = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0); |
260 | $boxes = sqimap_mailbox_list($imapConnection); |
261 | sqimap_logout($imapConnection); |
262 | for ($i = 0; $i < count($boxes) && $filters_spam_folder == ''; $i++) { |
263 | if ($boxes[$i]["flags"][0] != "noselect" && $boxes[$i]["flags"][1] != "noselect" && $boxes[$i]["flags"][2] != "noselect") { |
264 | $filters_spam_folder = $boxes[$i]['unformatted']; |
265 | } |
266 | } |
267 | |
268 | ?><form method=post action="options.php"> |
269 | <center> |
270 | <table width=85% cellpadding=2 cellspacing=0 border=0> |
271 | <tr> |
272 | <th align=right nowrap>Move spam to:</th> |
273 | <td><select name="filters_spam_folder_set"> |
274 | <?PHP |
275 | for ($i = 0; $i < count($boxes); $i++) { |
276 | if (! in_array('noselect', $boxes[$i]['flags'])) { |
277 | $box = $boxes[$i]["unformatted"]; |
278 | $box2 = str_replace(' ', ' ', $boxes[$i]["formatted"]); |
279 | if ($filters_spam_folder == $box) |
280 | echo "<OPTION VALUE=\"$box\" SELECTED>$box2</OPTION>\n"; |
281 | else |
282 | echo "<OPTION VALUE=\"$box\">$box2</OPTION>\n"; |
283 | } |
284 | } |
285 | ?> |
286 | </select> |
287 | </td> |
288 | </tr> |
289 | <tr><td></td><td>Moving spam directly to the trash may not be a good idea at first, |
290 | since messages from friends and mailing lists might accidentally be marked as spam. |
291 | Whatever folder you set this to, make sure that it gets cleaned out periodically, |
292 | so that you don't have an excessively large mailbox hanging around. |
293 | </td></tr> |
294 | <tr> |
295 | <th align=right nowrap>What to Scan:</th> |
296 | <td><select name="filters_spam_scan_set"> |
297 | <option value=''<?PHP |
298 | if ($filters_spam_scan == '') echo ' SELECTED'; |
299 | ?>>All messages</option> |
300 | <option value='new'<?PHP |
301 | if ($filters_spam_scan == 'new') echo ' SELECTED'; |
302 | ?>>Only unread messages</option> |
303 | </select> |
304 | </td> |
305 | </tr> |
306 | <tr> |
307 | <td></td><td>The more messages you scan, the longer it takes. I would suggest |
308 | that you scan only new messages. If you make a change to your filters, I |
309 | would set it to scan all messages, then go view my INBOX, then come back and |
310 | set it to scan only new messages. That way, your new spam filters will be |
311 | applied and you'll scan even the spam you read with the new filters.</td> |
312 | </tr> |
313 | <?PHP |
314 | $spam_filters = load_spam_filters(); |
315 | |
316 | foreach ($spam_filters as $Key => $Value) |
317 | { |
318 | echo "<tr><th align=right nowrap>$Key</th>\n"; |
319 | echo '<td><input type=checkbox name="'; |
320 | echo $spam_filters[$Key]['prefname']; |
321 | echo '_set"'; |
322 | if ($spam_filters[$Key]['enabled']) |
323 | echo ' CHECKED'; |
324 | echo '> - '; |
325 | if ($spam_filters[$Key]['link']) |
326 | { |
327 | echo '<a href="'; |
328 | echo $spam_filters[$Key]['link']; |
329 | echo '" target="_blank">'; |
330 | } |
331 | echo $spam_filters[$Key]['name']; |
332 | if ($spam_filters[$Key]['link']) |
333 | { |
334 | echo '</a>'; |
335 | } |
336 | echo '</td></tr><tr><td></td><td>'; |
337 | echo $spam_filters[$Key]['comment']; |
338 | echo "</td></tr>\n"; |
339 | } |
340 | ?> |
341 | <tr><td colspan=2 align=center><input type=submit name="spam_submit" value="Save"></td></tr> |
342 | </table> |
343 | </center> |
344 | </form> |
345 | <?PHP |
346 | |
347 | sqimap_logout($imapConnection); |
348 | } |
349 | ?> |