Florian Schaal
2016-03-22 5ca959fa688255a8de61f89fe2751eb4d24a6912
server/lib/classes/services.inc.php
@@ -1,6 +1,7 @@
<?php
/*
Copyright (c) 2007, projektfarm Gmbh, Till Brehm, Falko Timme
Copyright (c) 2007, Till Brehm, projektfarm Gmbh
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
@@ -27,53 +28,56 @@
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
class services {
   var $registered_services = array();
   var $delayed_restarts = array();
   // This function adds a request for restarting
   var $debug = false;
   // This function adds a request for restarting
   // a service at the end of the configuration run.
   function restartServiceDelayed($service_name,$action = 'restart') {
   function restartServiceDelayed($service_name, $action = 'restart') {
      global $app;
      if(is_array($this->registered_services[$service_name])) {
         $this->delayed_restarts[$service_name] = $action;
      } else {
         $app->log("Unable to add a delayed restart for  '$service_name'. Service '$service_name' is not registered.",LOGLEVEL_WARNING);
         $app->log("Unable to add a delayed restart for '$service_name'. Service not registered.", LOGLEVEL_WARNING);
      }
   }
   // This function restarts a service when the function is called
   function restartService($service_name,$action = 'restart') {
   function restartService($service_name, $action = 'restart') {
      global $app;
      if(is_array($this->registered_services[$service_name])) {
         $module_name = $this->registered_services[$service_name]["module"];
         $function_name = $this->registered_services[$service_name]["function"];
         $app->log("Call function '$function_name' in module '$module_name'.",LOGLEVEL_DEBUG);
         call_user_method($function_name,$app->loaded_modules[$module_name],$action);
         $module_name = $this->registered_services[$service_name]['module'];
         $function_name = $this->registered_services[$service_name]['function'];
         $app->log("Calling function '$function_name' from module '$module_name'.", LOGLEVEL_DEBUG);
         // call_user_method($function_name,$app->loaded_modules[$module_name],$action);
         return call_user_func(array($app->loaded_modules[$module_name], $function_name), $action);
      } else {
         $app->log("Unable to restart $service_name. Service $service_name is not registered.",LOGLEVEL_WARNING);
         $app->log("Unable to restart $service_name. Service not registered.", LOGLEVEL_WARNING);
         return array('output' => '', 'retval' => 0);
      }
   }
   // This function is used to register callback functions for services that can be restarted
   function registerService($service_name,$module_name, $function_name) {
   function registerService($service_name, $module_name, $function_name) {
      global $app;
      $this->registered_services[$service_name] = array('module' => $module_name, 'function' => $function_name);
      $app->log("Registered Service '$service_name' in module '$module_name' for processing function '$function_name'",LOGLEVEL_DEBUG);
      if($this->debug) $app->log("Registered Service '$service_name' in module '$module_name' for processing function '$function_name'", LOGLEVEL_DEBUG);
   }
   // This function is called at the end of the server script to restart services.
   function processDelayedActions() {
      global $app;
      foreach($this->delayed_restarts as $service_name => $action) {
         $this->restartService($service_name,$action);
         $this->restartService($service_name, $action);
      }
   }
}
?>
?>