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() { | |
51 | return ""; | |
52 | } | |
53 | ||
54 | function delete_rule($_rid) { | |
55 | $rk = $this->rules[$_rid]->rank; | |
56 | $this->rules[$_rid]->sql_clean($this->uid, $_rid); | |
57 | unset($this->rules[$_rid]); | |
58 | ||
772509f3 | 59 | mysql_query("UPDATE ".bd()."rules SET rank=rank-1 WHERE uid='{$this->uid}' and rank>$rk"); |
dd8de1ec PH |
60 | } |
61 | ||
62 | function new_rule_id() { | |
63 | $i=1; | |
64 | while(array_key_exists($i,$this->rules)) | |
65 | $i++; | |
66 | return $i; | |
67 | } | |
68 | ||
69 | function handle_form() { | |
70 | global $philter; | |
71 | ||
72 | $rule_id = ($_POST['rule']['id'] ? $_POST['rule']['id'] : $this->new_rule_id()); | |
73 | $rank = (isset($this->rules[$rule_id]) ? $this->rules[$rule_id]->rank : count($this->rules)+1); | |
74 | ||
75 | $flags = Array(); | |
76 | if($_POST['rule']['all']) $flags[] = 'all'; | |
77 | if(isset($_POST['rule']['block'])) $flags[] = 'block'; | |
78 | $flags = implode(',', $flags); | |
79 | ||
80 | $my_rule = new Rule($rank,$flags,$_POST['rule']['name']); | |
81 | ||
82 | // we create the $matches real array | |
83 | if(isset($_POST['rule']['matches'])) | |
84 | foreach($_POST['rule']['matches'] as $data) | |
85 | if(array_key_exists(0, $data)) | |
86 | $my_rule->matches[] = $data; | |
87 | ||
88 | // we create the $actions real array | |
89 | if(isset($_POST['rule']['actions'])) | |
90 | foreach($_POST['rule']['actions'] as $data) | |
91 | if(array_key_exists(0, $data)) | |
92 | $my_rule->actions[] = $data; | |
93 | ||
94 | if(!count($my_rule->actions) && !count($my_rule->matches)) { | |
f0a83324 | 95 | $philter->set_error(_i18n('filter_err_empty')); |
dd8de1ec PH |
96 | return false; |
97 | } | |
98 | ||
99 | $my_rule->sql_store(get_user_id(),$rule_id); | |
100 | ||
101 | $_POST['rule']['id'] = $rule_id; | |
102 | $this->rules[$rule_id] = $my_rule; | |
103 | return true; | |
104 | } | |
105 | ||
106 | function to_js() { | |
e4f6db07 | 107 | $res = "filter[0] = { all: 1, block:1, name:'"._i18n('new_rule')."', matches: [], actions: [] };\n"; |
dd8de1ec PH |
108 | |
109 | foreach($this->rules as $id=>$rule) | |
de47756d PH |
110 | if($id) |
111 | $res .= "filter[$id] = ".$rule->to_js().";\n"; | |
dd8de1ec PH |
112 | |
113 | return $res; | |
114 | } | |
115 | ||
116 | } | |
117 | ||
118 | /******************************************************************************** | |
119 | * $Id$ | |
120 | * vim: set expandtab shiftwidth=4 tabstop=4 softtabstop=4 textwidth=100: | |
121 | ********************************************************************************/ | |
122 | ?> |