trying maildrop
[old-projects.git] / philter / philter / include / filter.inc.php
CommitLineData
dd8de1ec
PH
1<?php
2/********************************************************************************
3* include/filter.inc.php : The complete Filter Object
4* ----------------------
5*
6* This file is part of the philter distribution
7* Copyright: See COPYING files that comes with this distribution
8********************************************************************************/
9
10class Filter {
11 /** Rules */
12 var $rules;
13 /** user id */
14 var $uid;
772509f3
PH
15 /** tmp.bd or not */
16 var $bd;
dd8de1ec
PH
17
18 function Filter($_uid) {
772509f3 19 global $philter;
dd8de1ec
PH
20 $this->uid = $_uid;
21 $this->rules = array();
22
772509f3 23 $sql = mysql_query("SELECT rank,rid,flags,name FROM ".bd()."rules WHERE uid='$_uid' ORDER BY rank");
dd8de1ec 24 while(list($_rank,$_rid,$_flags,$_name) = mysql_fetch_row($sql)) {
de47756d 25 $this->rules[$_rid] = new Rule($_rank,$_flags,$_name);
dd8de1ec
PH
26 $this->rules[$_rid]->sql_get_matches($_uid,$_rid);
27 $this->rules[$_rid]->sql_get_actions($_uid,$_rid);
28 }
29 }
de47756d
PH
30
31 function get_global_data($_plug_id) {
32 if(isset($this->rules[0]))
33 foreach($this->rules[0]->matches as $match)
34 if($match[0] == $_plug_id)
35 return $match;
36 return(Array($_plug_id,0));
37 }
38
39 function set_global_data($_plug_id, $data) {
40 if(!isset($this->rules[0]))
41 $this->rules[0] = new Rule(0,'','GLOBAL');
42 foreach($this->rules[0]->matches as $id=>$match)
43 if($match[0] == $_plug_id) {
44 $this->rules[0]->matches[$id] = $data;
45 return;
46 }
47 $this->rules[0]->matches[] = $data;
48 }
dd8de1ec
PH
49
50 function to_string() {
583e7202 51 global $mail_pool,$philter;
defba7f3 52 $res = "# generated by philter\n"
ca052371
PH
53 . "\n";
54
55 foreach($this->rules as $id=>$rule)
56 if($id)
57 $res .= $rule->to_string();
583e7202
PH
58 else
59 foreach($rule->matches as $id=>$match)
60 $res .= $philter->config['global_plugins'][$match[0]]->to_string($match);
ca052371 61
5534b9a9 62 $res .= "to \"!";
583e7202
PH
63 foreach($mail_pool->emails as $mail)
64 if($mail->is_active())
65 $res .= ' '.$mail->email;
66
5534b9a9 67 return $res."\"\n";
dd8de1ec
PH
68 }
69
70 function delete_rule($_rid) {
71 $rk = $this->rules[$_rid]->rank;
72 $this->rules[$_rid]->sql_clean($this->uid, $_rid);
73 unset($this->rules[$_rid]);
74
772509f3 75 mysql_query("UPDATE ".bd()."rules SET rank=rank-1 WHERE uid='{$this->uid}' and rank>$rk");
dd8de1ec
PH
76 }
77
78 function new_rule_id() {
79 $i=1;
80 while(array_key_exists($i,$this->rules))
81 $i++;
82 return $i;
83 }
84
85 function handle_form() {
86 global $philter;
87
88 $rule_id = ($_POST['rule']['id'] ? $_POST['rule']['id'] : $this->new_rule_id());
89 $rank = (isset($this->rules[$rule_id]) ? $this->rules[$rule_id]->rank : count($this->rules)+1);
90
91 $flags = Array();
92 if($_POST['rule']['all']) $flags[] = 'all';
93 if(isset($_POST['rule']['block'])) $flags[] = 'block';
94 $flags = implode(',', $flags);
95
96 $my_rule = new Rule($rank,$flags,$_POST['rule']['name']);
97
98 // we create the $matches real array
99 if(isset($_POST['rule']['matches']))
100 foreach($_POST['rule']['matches'] as $data)
101 if(array_key_exists(0, $data))
102 $my_rule->matches[] = $data;
103
104 // we create the $actions real array
105 if(isset($_POST['rule']['actions']))
106 foreach($_POST['rule']['actions'] as $data)
107 if(array_key_exists(0, $data))
108 $my_rule->actions[] = $data;
109
110 if(!count($my_rule->actions) && !count($my_rule->matches)) {
f0a83324 111 $philter->set_error(_i18n('filter_err_empty'));
dd8de1ec
PH
112 return false;
113 }
114
115 $my_rule->sql_store(get_user_id(),$rule_id);
116
117 $_POST['rule']['id'] = $rule_id;
118 $this->rules[$rule_id] = $my_rule;
119 return true;
120 }
121
122 function to_js() {
e4f6db07 123 $res = "filter[0] = { all: 1, block:1, name:'"._i18n('new_rule')."', matches: [], actions: [] };\n";
dd8de1ec
PH
124
125 foreach($this->rules as $id=>$rule)
de47756d
PH
126 if($id)
127 $res .= "filter[$id] = ".$rule->to_js().";\n";
dd8de1ec
PH
128
129 return $res;
130 }
131
132}
133
134/********************************************************************************
135* $Id$
136* vim: set expandtab shiftwidth=4 tabstop=4 softtabstop=4 textwidth=100:
137********************************************************************************/
138?>