root/dev/common/includes/class.event.php @ 317

Revision 226, 2.6 KB (checked in by exi, 15 years ago)

if ($_POSTpassword? == config::get('post_mailto')).... NC

Line 
1<?php
2
3class event
4{
5    function event()
6    {
7        trigger_error('The class "event" may only be invoked statically.', E_USER_ERROR);
8    }
9
10    function register($event, $callback)
11    {
12        if (is_array($callback))
13        {
14            if (is_object($callback[0]))
15            {
16                trigger_error('The supplied callback has to point to a static method.', E_USER_WARNING);
17                return;
18            }
19
20            // store callbacks as 'object::function'
21            $callback = $callback[0].'::'.$callback[1];
22        }
23        if (!strpos($callback, '::'))
24        {
25            trigger_error('The supplied callback "'.$callback.'" has to point to a static method.', E_USER_WARNING);
26            return;
27        }
28
29        // we store the event callbacks reverse so you need one function for every event
30        event::_put($callback, $event);
31    }
32
33    function call($event, &$object)
34    {
35        $cache = &event::_getCache();
36        foreach ($cache as $callback => $c_event)
37        {
38            // if the callback registered to the calling event we'll try to use his callback
39            if ($event == $c_event)
40            {
41                $cb = explode('::', $callback);
42                if (is_callable($cb))
43                {
44                    if (is_object($object))
45                    {
46                        //call_user_func($cb, &$object);
47                        call_user_func_array($cb, array(&$object));
48                    }
49                    else
50                    {
51                        call_user_func($cb, $object);
52                    }
53                }
54                else
55                {
56                    trigger_error('The stored event handler "'.$c_event.'" is not callable (CB: "'.$callback.'").', E_USER_WARNING);
57                }
58            }
59        }
60    }
61
62    function add($event)
63    {
64
65    }
66
67    function init()
68    {
69//        $db = new DBQuery();
70//        $db->execute('select rol_name, rol_descr from kb3_roles where rol_site=\''.KB_SITE."'");
71//        while ($row = $db->getRow())
72//        {
73//            role::_put($row['rol_name'], $row['rol_descr']);
74//        }
75    }
76
77    function &_getCache()
78    {
79        static $cache;
80
81        if (!isset($cache))
82        {
83            $cache = array();
84        }
85        return $cache;
86    }
87
88    function _put($key, $data)
89    {
90        $cache = &event::_getCache();
91        $cache[$key] = $data;
92    }
93
94    function _get($key)
95    {
96        $cache = &event::_getCache();
97
98        if (!isset($cache[$key]))
99        {
100            return null;
101        }
102        return $cache[$key];
103    }
104}
105?>
Note: See TracBrowser for help on using the browser.