+<?php
+
+ class mw_env_observers extends mw_env{
+
+ var $observers;
+
+ function init_observers(){
+ $observers_files = array();
+ if(($plugins = $this->plugins()) !== false){
+ foreach($plugins as $plugin_name => $plugin){
+ $observers_path = $this->path("mw_dir")."plugins/".$plugin_name."/app/observers/";
+ if(
+ $plugin["installed"]
+ && $plugin["enabled"]
+ && file_exists($observers_path)
+ && is_dir($observers_path)
+ ){
+ if($dh = opendir($observers_path)){
+ while(($file = readdir($dh)) !== false){
+ if(
+ substr($file, 0, 1) != "."
+ && !is_dir($observers_path.$file)
+ && strcmp(substr($file, -4), ".php") == 0
+ && !isset($observers_files[$file])
+ ) $observers_files[$file] = $observers_path;
+ }
+ closedir($dh);
+ }
+ else return false;
+ }
+ }
+ $observers_path = $this->path("mw_dir")."app/observers/";
+ if(
+ file_exists($observers_path)
+ && is_dir($observers_path)
+ ){
+ if($dh = opendir($observers_path)){
+ while(($file = readdir($dh)) !== false){
+ if(
+ substr($file, 0, 1) != "."
+ && !is_dir($observers_path.$file)
+ && strcmp(substr($file, -4), ".php") == 0
+ && !isset($observers_files[$file])
+ ) $observers_files[$file] = $observers_path;
+ }
+ closedir($dh);
+ }
+ else return false;
+ }
+ }
+ $observers = array();
+ foreach($observers_files as $file => $observers_path){
+ $observer_name = substr($file, 0, -4);
+ if(class_exists($observer_name)) return false;
+ if(!file_exists($observer_file = $observers_path.$file)) return false;
+ require_once $observer_file;
+ if(!class_exists($observer_name)) return false;
+ $observers[$observer_name] = new $observer_name();
+ }
+ return $observers;
+ }
+
+ function call_observers($observer_call){
+ if(!isset($this->observers)){
+ $this->observers = $this->init_observers();
+ }
+ if($this->observers){
+ foreach($this->observers as $observer_name => $observer){
+ if(method_exists($observer, $observer_call)){
+ $observer->$observer_call($this);
+ }
+ }
+ }
+ }
+
+ }
+
+?>
\ No newline at end of file