From dd0130670fe3cab4c7e2c1ab4f3bf0d2b2d512b0 Mon Sep 17 00:00:00 2001
From: Denny Bortfeldt <denny@bortfeldt.net>
Date: Mon, 27 Jun 2016 18:02:16 -0400
Subject: [PATCH] When uploading a logo which is smaller than the current ispconfig one, then the logo will be on the left side of the header. In my opinion it will look better when it's centered. You could vote about it ;)

---
 interface/lib/classes/plugin.inc.php |  196 +++++++++++++++++++++++++++++-------------------
 1 files changed, 119 insertions(+), 77 deletions(-)

diff --git a/interface/lib/classes/plugin.inc.php b/interface/lib/classes/plugin.inc.php
index 50efb90..8a8ac20 100644
--- a/interface/lib/classes/plugin.inc.php
+++ b/interface/lib/classes/plugin.inc.php
@@ -29,93 +29,113 @@
 */
 
 class plugin {
-	
+
 	private $subscribed_events = array();
-	private $debug = true;
-	
-	
+	private $debug = false;
+
+
 	/*
 	 This function is called to load the plugins from the plugins folder and update the plugin cache
 	*/
-	
+
 	private function loadPluginCache() {
-		global $app,$conf;
-		
-		
+		global $app, $conf;
+
+
 		if(isset($_SESSION['s']['plugin_cache'])) unset($_SESSION['s']['plugin_cache']);
 		
-		$plugins_dir = ISPC_LIB_PATH.FS_DIV.'plugins'.FS_DIV;
+		$plugin_dirs = array();
+		$plugin_dirs[] = ISPC_LIB_PATH.FS_DIV.'plugins';
+		
+		if(is_dir(ISPC_WEB_PATH)) {
+			if($dh = opendir(ISPC_WEB_PATH)) {
+				while(($file = readdir($dh)) !== false) {
+					if($file !== '.' && $file !== '..' && is_dir(ISPC_WEB_PATH . FS_DIV . $file) && is_dir(ISPC_WEB_PATH . FS_DIV . $file . FS_DIV . 'lib' . FS_DIV . 'plugin.d')) $plugin_dirs[] = ISPC_WEB_PATH . FS_DIV . $file . FS_DIV . 'lib' . FS_DIV . 'plugin.d';
+				}
+				closedir($dh);
+			}
+		}
+		
 		$_SESSION['s']['plugin_cache'] = array();
 		$tmp_plugins = array();
 		
-		if (is_dir($plugins_dir)) {
-			if ($dh = opendir($plugins_dir)) {
-				//** Go trough all files in the plugin dir
-				while (($file = readdir($dh)) !== false) {
-					if($file != '.' && $file != '..' && substr($file,-8,8) == '.inc.php') {
-						$plugin_name = substr($file,0,-8);
-						$tmp_plugins[$plugin_name] = $file;
+		for($d = 0; $d < count($plugin_dirs); $d++) {
+			$plugins_dir = $plugin_dirs[$d];
+			if (is_dir($plugins_dir)) {
+				if ($dh = opendir($plugins_dir)) {
+					$tmp_plugins = array();
+					//** Go trough all files in the plugin dir
+					while (($file = readdir($dh)) !== false) {
+						if($file !== '.' && $file !== '..' && substr($file, -8, 8) == '.inc.php') {
+							$plugin_name = substr($file, 0, -8);
+							$tmp_plugins[$plugin_name] = $file;
+						}
 					}
-				}
-				//** sort the plugins by name
-				ksort($tmp_plugins);
-				
-				//** load the plugins
-				foreach($tmp_plugins as $plugin_name => $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();
+					closedir($dh);
+					//** sort the plugins by name
+					ksort($tmp_plugins);
+
+					//** load the plugins
+					foreach($tmp_plugins as $plugin_name => $file) {
+						require $plugins_dir . FS_DIV . $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("Unable to open the plugin directory: $plugins_dir",LOGLEVEL_ERROR);
+				$app->log('Plugins directory missing: '.$plugins_dir, LOGLEVEL_ERROR);
 			}
-		} else {
-			$app->log("Plugin directory missing: $plugins_dir",LOGLEVEL_ERROR);
 		}
-		
-	}
-	
-	/*
-	 This function is called by the plugin to register for an event which is saved into the plugin cache 
-	 for faster lookups without the need to load all plugins for every page.
-	*/
-	
-	public function registerEvent($event_name,$plugin_name,$function_name) {
-		global $app;
-		
-		$_SESSION['s']['plugin_cache'][$event_name][] = array('plugin' => $plugin_name, 'function' => $function_name);
-		if($this->debug) $app->log("Plugin '$plugin_name' has registered the function '$function_name' for the event '$event_name'",LOGLEVEL_DEBUG);
 
 	}
-	
+
+	/*
+	 This function is called by the plugin to register for an event which is saved into the plugin cache
+	 for faster lookups without the need to load all plugins for every page.
+	*/
+
+	public function registerEvent($event_name, $plugin_name, $function_name, $module_name = '') {
+		global $app;
+
+		$_SESSION['s']['plugin_cache'][$event_name][] = array('plugin' => $plugin_name, 'function' => $function_name, 'module' => $module_name);
+		if($this->debug) $app->log("Plugin '$plugin_name' has registered the function '$function_name' for the event '$event_name'", LOGLEVEL_DEBUG);
+	}
+
 	/*
 		This function is called when a certian action occurs, e.g. a form gets saved or a user is logged in.
 	*/
-	
-	public function raiseEvent($event_name,$data) {
+
+	public function raiseEvent($event_name, $data, $return_data = false) {
 		global $app;
-		
+
 		if(!isset($_SESSION['s']['plugin_cache'])) {
 			$this->loadPluginCache();
-			if($this->debug) $app->log("Loaded the plugin cache.",LOGLEVEL_DEBUG);
+			if($this->debug) $app->log('Loaded the plugin cache.', LOGLEVEL_DEBUG);
 		}
 		
-		
-		$sub_events = explode(':',$event_name);
-		
+		$result = '';
+		$sub_events = explode(':', $event_name);
+
 		if(is_array($sub_events)) {
 			if(count($sub_events) == 3) {
 				$tmp_event = $sub_events[2];
-				if($this->debug) $app->log("Called Event '$tmp_event'",LOGLEVEL_DEBUG);
-				$this->callPluginEvent($tmp_event,$data);
-				$tmp_event = $sub_events[0].':'.$sub_events[2];
-				if($this->debug) $app->log("Called Event '$tmp_event'",LOGLEVEL_DEBUG);
-				$this->callPluginEvent($tmp_event,$data);
-				$tmp_event = $sub_events[0].':'.$sub_events[1].':'.$sub_events[2];
-				if($this->debug) $app->log("Called Event '$tmp_event'",LOGLEVEL_DEBUG);
-				$this->callPluginEvent($tmp_event,$data);
+				if($this->debug) $app->log("Called Event '$tmp_event'", LOGLEVEL_DEBUG);
+				$tmpresult = $this->callPluginEvent($tmp_event, $data, $return_data);
+				if($return_data == true && $tmpresult) $result .= $tmpresult;
 				
+				$tmp_event = $sub_events[0].':'.$sub_events[2];
+				if($this->debug) $app->log("Called Event '$tmp_event'", LOGLEVEL_DEBUG);
+				$tmpresult = $this->callPluginEvent($tmp_event, $data, $return_data);
+				if($return_data == true && $tmpresult) $result .= $tmpresult;
+				
+				$tmp_event = $sub_events[0].':'.$sub_events[1].':'.$sub_events[2];
+				if($this->debug) $app->log("Called Event '$tmp_event'", LOGLEVEL_DEBUG);
+				$tmpresult = $this->callPluginEvent($tmp_event, $data, $return_data);
+				if($return_data == true && $tmpresult) $result .= $tmpresult;
+
 				/*$sub_events = array_reverse($sub_events);
 				$tmp_event = '';
 				foreach($sub_events as $n => $sub_event) {
@@ -125,37 +145,59 @@
 				}
 				*/
 			} else {
-				if($this->debug) $app->log("Called Event '$sub_events[0]'",LOGLEVEL_DEBUG);
-				$this->callPluginEvent($sub_events[0],$data);
+				if($this->debug) $app->log("Called Event '$sub_events[0]'", LOGLEVEL_DEBUG);
+				$tmpresult = $this->callPluginEvent($sub_events[0], $data, $return_data);
+				if($return_data == true && $tmpresult) $result .= $tmpresult;
 			}
 		}
 		
-	 } // end function raiseEvent
-	 
-	 //* Internal function to load the plugin and call the event function in the plugin.
-	 private function callPluginEvent($event_name,$data) {
-	 	global $app;
-	 	
-	 	//* execute the functions for the events
-		if(is_array($_SESSION['s']['plugin_cache'][$event_name])) {
+		if($return_data == true) return $result;
+
+	} // end function raiseEvent
+
+	//* Internal function to load the plugin and call the event function in the plugin.
+	private function callPluginEvent($event_name, $data, $return_data = false) {
+		global $app;
+
+		$result = '';
+
+		//* execute the functions for the events
+		if(@is_array($_SESSION['s']['plugin_cache'][$event_name])) {
 			foreach($_SESSION['s']['plugin_cache'][$event_name] as $rec) {
 				$plugin_name = $rec['plugin'];
 				$function_name = $rec['function'];
-				$plugin_file = ISPC_LIB_PATH.FS_DIV.'plugins'.FS_DIV.$plugin_name.'.inc.php';
+				$module_name = $rec['module'];
+				if($module_name != '') {
+					if(strpos($module_name, '..') !== false || strpos($module_name, '/') !== false) {
+						if($this->debug) $app->log('Module name ' . $module_name . ' contains illegal characters.', LOGLEVEL_DEBUG);
+						continue;
+					}
+					$plugin_file = ISPC_WEB_PATH . FS_DIV . $module_name . FS_DIV . 'lib' . FS_DIV . 'plugin.d' . FS_DIV . $plugin_name . '.inc.php';
+				} else {
+					$plugin_file = ISPC_LIB_PATH . FS_DIV . 'plugins' . FS_DIV . $plugin_name . '.inc.php';
+				}
+
 				if(is_file($plugin_file)) {
 					if(!isset($app->loaded_plugins[$plugin_name])) {
-						include_once($plugin_file);
+						include_once $plugin_file;
 						$app->loaded_plugins[$plugin_name] = new $plugin_name;
 					}
-					if($this->debug) $app->log("Called method: '$function_name' in plugin '$plugin_name' for event '$event_name'",LOGLEVEL_DEBUG);
-					call_user_method($function_name,$app->loaded_plugins[$plugin_name],$event_name,$data);
+
+					if($this->debug) $app->log("Called method: '$function_name' in plugin '$plugin_name' for event '$event_name'", LOGLEVEL_DEBUG);
+					// call_user_method($function_name,$app->loaded_plugins[$plugin_name],$event_name,$data);
+
+					$tmpresult = call_user_func(array($app->loaded_plugins[$plugin_name], $function_name), $event_name, $data);
+					if($return_data == true && $tmpresult) $result .= $tmpresult;
 				}
 			}
-			
+
 		}
-	 } // end functiom callPluginEvent
-	
-	
+		
+		if($return_data == true) return $result;
+
+	} // end functiom callPluginEvent
+
+
 }
 
-?>
\ No newline at end of file
+?>

--
Gitblit v1.9.1