851cce47a920cbff07296fa5ad1a52c67d81f1ac
[old-projects.git] / philter / philter / include / plugin.inc.php
1 <?php
2 /********************************************************************************
3 * include/plugin.inc.php : The base class for each Plugin (action|match)
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 Plugin {
11 /** constructor
12 */
13 function Plugin() { }
14
15 /** runtime id.
16 * this function must return 0 if the class should not have any instance
17 * @returns the rtti of the object
18 */
19 function rtti() { return 0; }
20
21 /** name of the plugin (to pick a choice in a select).
22 * @return a string describing the plugin
23 */
24 function name() { return "abstract class !!"; }
25
26 /** gives the LEFT JOIN to add to the sql request to have all this plugin datas
27 * @return the LEFT JOIN string, "" if irrelevant
28 */
29 // function sql_get() { return ""; }
30 // function sql_clean($_uid, $_rid) { }
31
32 /** stores the data to the mysql database
33 * @param $_uid the id of the filter
34 * @param $_rid the id of the rule
35 * @param $_data an array or a string containing all the sql data row for this plugin
36 * @return void
37 */
38 function sql_store($_uid, $_rid, $_data) { }
39
40 /** converts the row of the mysql SELECT into a shorter and usable $data
41 * @param &$sql a reference on the sql row
42 * @return an array with the shorter datas
43 */
44 function sql_to_data(&$sql) {
45 if(preg_match('/^a:\d+:\{.*\}$/', $sql['data']))
46 return unserialize($sql['data']);
47 else
48 return array($sql['pid'], $sql['data']);
49 }
50
51 /** gives the procmailrc instruction of the data associated with this Plugin
52 * @param $_data an array or a string containing all the sql data row for this plugin
53 * @return the procmailrc string
54 */
55 function to_string($_data) { return ""; }
56
57 function to_header_string() { return ""; }
58
59 /** returns the function that creates the form in javascript (@see FwdPlugin for one example).
60 * @return the string containing the javascript code
61 */
62 function to_js() { return ""; }
63 }
64
65 class ActionPlugin extends Plugin {
66 /** constructor */
67 function ActionPlugin() { $this->Plugin(); }
68
69 function sql_store($_uid, $_rid, $_data) {
70 if(count($_data) == 2)
71 $data = $_data[1];
72 else
73 $data = serialize($_data);
74 mysql_query("INSERT INTO ".bd()."actions SET uid='$_uid',rid='$_rid',pid='{$_data[0]}',data='$data'");
75 }
76 }
77
78 class MatchPlugin extends Plugin {
79 /** true if the plugin is used as global */
80 var $global;
81
82 /** constructor */
83 function MatchPlugin($_glob) {
84 $this->Plugin();
85 $this->global=$_glob;
86 }
87
88 function sql_store($_uid, $_rid, $_data) {
89 if(count($_data) == 2)
90 $data = $_data[1];
91 else
92 $data = serialize($_data);
93 if($this->global)
94 mysql_query("INSERT INTO ".bd()."matches SET uid='$_uid',rid='0',pid='{$_data[0]}',data='$data'");
95 else
96 mysql_query("INSERT INTO ".bd()."matches SET uid='$_uid',rid='$_rid',pid='{$_data[0]}',data='$data'");
97 }
98
99 /** true if the plugin is used as global rule
100 * overload with (return false) if the plugin can not be used as a global rule
101 * overload with (return true) if the plugin can not be used as a normal rule
102 * @return true if usable as a global rule, false else
103 */
104 function is_global() { return $this->global; }
105 }
106
107 /********************************************************************************
108 * $Id$
109 * vim: set expandtab shiftwidth=4 tabstop=4 softtabstop=4 textwidth=100:
110 ********************************************************************************/
111 ?>