From 62a11081e6b3c963f0223abb2aaaab5ff0e5a089 Mon Sep 17 00:00:00 2001
From: tbrehm <t.brehm@ispconfig.org>
Date: Sun, 27 May 2007 11:20:08 -0400
Subject: [PATCH] Added plugin class for the server daemon and renamed the modules class.
---
server/mods-available/mail_module.inc.php | 2
server/lib/classes/modules.inc.php | 21 ++++++
server/lib/config.inc.php | 5 +
server/lib/classes/plugins.inc.php | 94 +++++++++++++++++++++++++++++++
server/lib/app.inc.php | 9 ++-
5 files changed, 125 insertions(+), 6 deletions(-)
diff --git a/server/lib/app.inc.php b/server/lib/app.inc.php
index 1394b1e..88a9010 100644
--- a/server/lib/app.inc.php
+++ b/server/lib/app.inc.php
@@ -28,8 +28,11 @@
*/
class app {
-
- function app() {
+
+ var modules = array();
+ var plugins = array();
+
+ function app() {
global $conf;
@@ -104,7 +107,7 @@
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 c0f3776..12b871e 100644
--- a/server/lib/classes/modules.inc.php
+++ b/server/lib/classes/modules.inc.php
@@ -37,8 +37,25 @@
*/
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 @@
$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 0000000..5e2147f
--- /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 8ecfa81..0f95d57 100644
--- a/server/lib/config.inc.php
+++ b/server/lib/config.inc.php
@@ -66,4 +66,9 @@
$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 98%
rename from server/mods-available/mail.module.php
rename to server/mods-available/mail_module.inc.php
index ae6b7ee..0f13f05 100644
--- a/server/mods-available/mail.module.php
+++ b/server/mods-available/mail_module.inc.php
@@ -30,7 +30,7 @@
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',
--
Gitblit v1.9.1