nouveau module observers dans env
[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)) return false;
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         $observers[$observer_name] = new $observer_name();
59       }
60       return $observers;
61     }
62
63     function call_observers($observer_call){
64       if(!isset($this->observers)){
65         $this->observers = $this->init_observers();
66       }
67       if($this->observers){
68         foreach($this->observers as $observer_name => $observer){
69           if(method_exists($observer, $observer_call)){
70             $observer->$observer_call($this);
71           }
72         }
73       }
74     }
75
76   }
77
78 ?>