Commit | Line | Data |
---|---|---|
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 | ||
10 | class 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 | ?> |