diff --git a/server/lib/app.inc.php b/server/lib/app.inc.php index 1394b1e0c0617b52a91ee0d29d4f495c2041bfd0..88a90104c5fb3571691064094562f73f8017af56 100644 --- a/server/lib/app.inc.php +++ b/server/lib/app.inc.php @@ -28,8 +28,11 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ class app { - - function app() { + + var modules = array(); + var plugins = array(); + + function app() { global $conf; @@ -104,7 +107,7 @@ class app { fclose($fp); } else { - $this->error("Logfile ist nicht beschreibbar."); + $this->error("Unable to write to logfile."); } } // if } // func diff --git a/server/lib/classes/modules.inc.php b/server/lib/classes/modules.inc.php index c0f3776a92da318a43ad655d7f44018c5ca9f70e..12b871e78e2fdca35c2ec7d87fec6d0e166ffda4 100644 --- a/server/lib/classes/modules.inc.php +++ b/server/lib/classes/modules.inc.php @@ -37,8 +37,25 @@ class modules { */ function loadModules() { - global $app; + global $app, $conf; + + $modules_dir = $conf["rootpath"].$conf["fs_div"]."lib".$conf["fs_div"]."mods-enabled".$conf["fs_div"] + if (is_dir($modules_dir)) { + if ($dh = opendir($dir)) { + while (($file = readdir($dh)) !== false) { + if($file != '.' && $file != '..') { + $module_name = substr($file,0,-8); + include_once($modules_dir.$file); + $app->log("Loading Module: $module_name",LOGLEVEL_DEBUG); + $app->modules[$module_name] = new $module_name; + $app->modules[$module_name]->onLoad(); + } + } + } + } else { + $app->log("Modules directory missing: $modules_dir",LOGLEVEL_ERROR); + } } /* @@ -79,7 +96,7 @@ class modules { $module_name = $hook["module"]; $function_name = $hook["function"]; // Claa the processing function of the module - call_user_method($function_name,$app->$module_name,$table_name,$action,$data); + call_user_method($function_name,$app->modules[$module_name],$table_name,$action,$data); unset($module_name); unset($function_name); } diff --git a/server/lib/classes/plugins.inc.php b/server/lib/classes/plugins.inc.php new file mode 100644 index 0000000000000000000000000000000000000000..5e2147f3347718d4e374043d325ddf57ac916091 --- /dev/null +++ b/server/lib/classes/plugins.inc.php @@ -0,0 +1,94 @@ +<?php + +/* +Copyright (c) 2007, Till Brehm, projektfarm Gmbh +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of ISPConfig nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +class plugins { + + var $notification_events = array(); + + /* + This function is called to load the plugins from the plugins-available folder + */ + + function loadPlugins() { + global $app,$conf; + + $plugins_dir = $conf["rootpath"].$conf["fs_div"]."lib".$conf["fs_div"]."plugins-enabled".$conf["fs_div"] + + if (is_dir($plugins_dir)) { + if ($dh = opendir($dir)) { + while (($file = readdir($dh)) !== false) { + if($file != '.' && $file != '..') { + $plugin_name = substr($file,0,-8); + include_once($plugins_dir.$file); + $app->log("Loading Plugin: $plugin_name",LOGLEVEL_DEBUG); + $app->plugins[$plugin_name] = new $module_name; + $app->plugins[$plugin_name]->onLoad(); + } + } + } + } else { + $app->log("Plugin directory missing: $plugins_dir",LOGLEVEL_ERROR); + } + + } + + /* + This function is called by the modules to register for a specific + table change notification + */ + + function registerEvent($event_name,$plugin_name,$function_name) { + $this->notification_events[$event_name][] = array('plugin' => $plugin_name, 'function' => $function_name); + } + + + function raiseEvent($event_name,$data) { + global $app; + + // Get the hooks for this table + $events = $this->notification_hevents[$event_name]; + + if(is_array($events)) { + foreach($events as $event) { + $plugin_name = $event["plugin"]; + $function_name = $event["function"]; + // Claa the processing function of the module + call_user_method($function_name,$app->plugins[$plugin_name],$event_name,$data); + unset($plugin_name); + unset($function_name); + } + } + unset($event); + unset($events); + } + +} + +?> \ No newline at end of file diff --git a/server/lib/config.inc.php b/server/lib/config.inc.php index 8ecfa8197e543035c6f6e4d0a7ed4818d53c1088..0f95d57621496ddcff1b75902dc4eb23703dba6f 100644 --- a/server/lib/config.inc.php +++ b/server/lib/config.inc.php @@ -66,4 +66,9 @@ $conf["start_db"] = true; $conf["load_server_config"] = true; + +define("LOGLEVEL_DEBUG",0); +define("LOGLEVEL_WARN",1); +define("LOGLEVEL_ERROR",2); + ?> \ No newline at end of file diff --git a/server/mods-available/mail.module.php b/server/mods-available/mail_module.inc.php similarity index 99% rename from server/mods-available/mail.module.php rename to server/mods-available/mail_module.inc.php index ae6b7ee6ecc8f567925f378d85e5b932cbc54f03..0f13f05e7d339af1135f7295d0315c2e44a54ca1 100644 --- a/server/mods-available/mail.module.php +++ b/server/mods-available/mail_module.inc.php @@ -30,7 +30,7 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. class mail_module { - var $module_name = 'mail'; + var $module_name = 'mail_module'; var $class_name = 'mail_module'; var $actions_available = array( 'mail_domain_insert', 'mail_domain_update',