4184bc676acb7369bba55c973f2ef39b6c5fdaef
[mtweb] / mw / env / modules / mw_env_observers.php
1 <?php
2
3   class mw_env_observers extends mw_env{
4
5     var $observers;
6
7     function init_observers(){
8       $observers_files = array();
9       if(($plugins = $this->plugins()) !== false){
10         foreach($plugins as $plugin_name => $plugin){
11           $observers_path = $this->path("mw_dir")."plugins/".$plugin_name."/app/observers/";
12           if(
13                $plugin["installed"]
14             && $plugin["enabled"]
15             && file_exists($observers_path)
16             && is_dir($observers_path)
17           ){
18             if($dh = opendir($observers_path)){
19               while(($file = readdir($dh)) !== false){
20                 if(
21                      substr($file, 0, 1) != "."
22                   && !is_dir($observers_path.$file)
23                   && strcmp(substr($file, -4), ".php") == 0
24                   && !isset($observers_files[$file])
25                 ) $observers_files[$file] = $observers_path;
26               }
27               closedir($dh);
28             }
29             else return false;
30           }
31         }
32         $observers_path = $this->path("mw_dir")."app/observers/";
33         if(
34              file_exists($observers_path)
35           && is_dir($observers_path)
36         ){
37           if($dh = opendir($observers_path)){
38             while(($file = readdir($dh)) !== false){
39               if(
40                    substr($file, 0, 1) != "."
41                 && !is_dir($observers_path.$file)
42                 && strcmp(substr($file, -4), ".php") == 0
43                 && !isset($observers_files[$file])
44               ) $observers_files[$file] = $observers_path;
45             }
46             closedir($dh);
47           }
48           else return false;
49         }
50       }
51       $observers = array();
52       foreach($observers_files as $file => $observers_path){
53         $observer_name = substr($file, 0, -4);
54         if(!class_exists($observer_name)){
55           if(!file_exists($observer_file = $observers_path.$file)) return false;
56           require_once $observer_file;
57           if(!class_exists($observer_name)) return false;
58         }
59         $observers[$observer_name] = new $observer_name();
60       }
61       return $observers;
62     }
63
64     function call_observers($observer_call, $params = array()){
65       if(!isset($this->observers)){
66         $this->observers = $this->init_observers();
67       }
68       if($this->observers){
69         foreach($this->observers as $observer_name => $observer){
70           if(method_exists($observer, $observer_call)){
71             if(method_exists($observer, "set_env")) $observer->set_env($this);
72             $observer->$observer_call($params);
73           }
74         }
75       }
76     }
77
78   }
79
80   class mw_observer{
81
82     var $env;
83
84     function set_env(&$env){
85       $this->env = &$env;
86     }
87
88     function env(){
89       return $this->env;
90     }
91
92   }
93
94 ?>