log("Loading Plugin: $plugin_name",LOGLEVEL_DEBUG); $app->loaded_plugins[$plugin_name] = new $plugin_name; $app->loaded_plugins[$plugin_name]->onLoad(); } } } } else { $app->log("Plugin 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; $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 the function '$function_name' in the plugin '$plugin_name' for event '$event_name'",LOGLEVEL_DEBUG); } else { $this->subscribed_events[$event_name][] = array('plugin' => $plugin_name, 'function' => $function_name); $app->log("Registered the function '$function_name' in the plugin '$plugin_name' for event '$event_name'.",LOGLEVEL_DEBUG); } } function raiseEvent($event_name,$data) { global $app; // Get the subscriptions for this event $events = $this->subscribed_events[$event_name]; $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("Call function '$function_name' in 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); } } ?>