$file) { include_once($plugins_dir.$file); if($this->debug) $app->log('Loading plugin: '.$plugin_name,LOGLEVEL_DEBUG); $app->loaded_plugins[$plugin_name] = new $plugin_name; $app->loaded_plugins[$plugin_name]->onLoad(); } } else { $app->log('Unable to open the plugins directory: '.$plugins_dir,LOGLEVEL_ERROR); } } else { $app->log('Plugins directory missing: '.$plugins_dir,LOGLEVEL_ERROR); } } /* This function is used by the modules to announce which events they provide */ function announceEvents($module_name,$events) { global $app; foreach($events as $event_name) { $this->available_events[$event_name] = $module_name; if($this->debug) $app->log('Announced event: '.$event_name,LOGLEVEL_DEBUG); } } /* This function is called by the plugin to register for an event */ function registerEvent($event_name,$plugin_name,$function_name) { global $app; if(!isset($this->available_events[$event_name])) { $app->log("Unable to register function '$function_name' from plugin '$plugin_name' for event '$event_name'",LOGLEVEL_DEBUG); } else { $this->subscribed_events[$event_name][] = array('plugin' => $plugin_name, 'function' => $function_name); if($this->debug) $app->log("Registered function '$function_name' from plugin '$plugin_name' for event '$event_name'.",LOGLEVEL_DEBUG); } } function raiseEvent($event_name,$data) { global $app; // Get the subscriptions for this event $events = (isset($this->subscribed_events[$event_name]))?$this->subscribed_events[$event_name]:''; if($this->debug) $app->log('Raised event: '.$event_name,LOGLEVEL_DEBUG); if(is_array($events)) { foreach($events as $event) { $plugin_name = $event['plugin']; $function_name = $event['function']; // Call the processing function of the plugin $app->log("Calling function '$function_name' from plugin '$plugin_name' raised by event '$event_name'.",LOGLEVEL_DEBUG); call_user_method($function_name,$app->loaded_plugins[$plugin_name],$event_name,$data); unset($plugin_name); unset($function_name); } } unset($event); unset($events); } } ?>