Code

Added gray out to navigation icons in divlist
[gosa.git] / plugins / admin / systems / class_serverService.inc
index f88ea34861080dcc2ffa32cc64a4817829f9c54a..c6fe5415b98048d84e02d6bb63c32bd89dd97ce7 100644 (file)
@@ -31,24 +31,35 @@ class ServerService extends plugin
   var $current          = "";
   var $backup           = NULL;
   var $acl              ;
+  var $cn;
 
   function ServerService ($config, $dn)
   {
     plugin::plugin($config);
     $this->dn= $dn;
-    $ui= get_userinfo();
-    $this->acl= get_permissions ($ui->dn, $ui->subtreeACL);
-
     foreach ($config->data['TABS']['SERVERSERVICE'] as $plug){
       $name= $plug['CLASS'];
       $this->plugin_names[]= $name;
       $this->plugins[$name]= new $name($config, $dn);
-      $this->plugins[$name]->acl= get_module_permission($this->acl, "$name", $ui->dn);
     }
-    
     $this->divList = new divListSystemService($config,$this);
        }
 
+  function set_acl_base($base)
+  {
+    plugin::set_acl_base($base);
+    foreach($this->plugins as $name => $obj){
+      $this->plugins[$name]->set_acl_base($base);
+    }
+  }
+
+  function set_acl_category($category)
+  {
+    plugin::set_acl_category($category);
+    foreach($this->plugins as $name => $obj){
+      $this->plugins[$name]->set_acl_category($category);
+    }
+  }
 
   function execute()
   {
@@ -86,11 +97,12 @@ class ServerService extends plugin
 
 
     /* Handle state changes for services */
-    $map =  array( "startServices"          => array("type" => START_SERVICE , "service" => ALL_SERVICES),
-                      "stopServices"          => array("type" => STOP_SERVICE  , "service" => ALL_SERVICES),
-                      "restartServices"         => array("type" => RESTART_SERVICE , "service" => ALL_SERVICES),                      "StartSingleService"    => array("type" => START_SERVICE , "service" => $s_entry),
-                      "StopSingleService"     => array("type" => STOP_SERVICE , "service" => $s_entry),
-                      "RestartSingleService"    => array("type" => RESTART_SERVICE , "service" => $s_entry));
+    $map =  array(    "startServices"         => array("type" => START_SERVICE ,   "service" => ALL_SERVICES),
+                      "stopServices"          => array("type" => STOP_SERVICE  ,   "service" => ALL_SERVICES),
+                      "restartServices"       => array("type" => RESTART_SERVICE , "service" => ALL_SERVICES),                 
+                      "StartSingleService"    => array("type" => START_SERVICE ,   "service" => $s_entry),
+                      "StopSingleService"     => array("type" => STOP_SERVICE ,    "service" => $s_entry),
+                      "RestartSingleService"  => array("type" => RESTART_SERVICE , "service" => $s_entry));
     if(isset($map[$s_action])){
       $type     = $map[$s_action]['type'];
       $service  = $map[$s_action]['service'];
@@ -106,11 +118,17 @@ class ServerService extends plugin
 
     /* Remove service */
     if($s_action == "RemoveSingleService"){
-      $this->plugins[$s_entry]->is_account= false;
-      $this->plugins[$s_entry] = NULL;
-      $this->plugins[$s_entry] = new $s_entry($this->config,$this->dn);
-      $this->plugins[$s_entry]->acl = $this->acl;
-      $this->plugins[$s_entry]->is_account = false;
+
+      /* Create resetted obj */
+      $new_obj = new $s_entry($this->config,$this->dn);
+      $new_obj -> set_acl_base($this->acl_base);
+      $new_obj -> set_acl_category(preg_replace("/\/$/","",$this->acl_category));
+      $tmp     = $new_obj->getListEntry();
+
+      if($tmp['AllowRemove']){
+        $this->plugins[$s_entry] = $new_obj;
+        $this->plugins[$s_entry]->is_account = false;
+      }
     }
 
 
@@ -136,6 +154,9 @@ class ServerService extends plugin
     if(isset($_POST['CancelService'])){
       if($this->backup == NULL){
         $this->plugins[$this->current] = new $this->current($this->config,$this->dn);
+        $this->plugins[$this->current]-> set_acl_base($this->acl_base);
+        $this->plugins[$this->current]-> set_acl_category(preg_replace("/\/$/","",$this->acl_category));
+
       }else{
         foreach($this->backup as $name => $value){
           $this->plugins[$this->current]->$name = $value;
@@ -149,7 +170,7 @@ class ServerService extends plugin
 
     /* Abort dialog */
     if(isset($_POST['SaveService'])){
-
+      $this->dialog->save_object();
       $msgs = $this->dialog->check();
       if(count($msgs)){
         foreach($msgs as $msg){
@@ -157,6 +178,10 @@ class ServerService extends plugin
         }
       }else{
         $this->plugins[$this->current] = $this->dialog;
+        $tmp  = get_object_vars($this->dialog);
+        foreach($tmp as $name => $value){
+          $this->plugins[$this->current]->$name = $value;
+        }
         $this->current = "";
         $this->dialog = NULL;
         $this->backup = NULL;
@@ -183,9 +208,10 @@ class ServerService extends plugin
     /* Dispaly services overview */
     $this->divList->execute();
     $list = array();
+
     foreach($this->plugins as $name => $obj){
       if($obj->is_account){
-        $list[$name] = $obj->getListEntry(); 
+        $list[$name] = $this->plugins[$name]->getListEntry(); 
       }
     }
     $this->divList -> setEntries($list);
@@ -235,6 +261,12 @@ class ServerService extends plugin
           }
         }
       }
+
+      /* Only show createable services */
+      if(!$obj->acl_is_createable()){
+        $skip = true;
+      }
+
       if(!$skip){
         if(isset($obj->DisplayName)){
           $ret[$name] = $obj->DisplayName;
@@ -269,13 +301,36 @@ class ServerService extends plugin
       return;
     }
     
+    $caseVars = array("cn","dn");
     if($service == ALL_SERVICES){
       foreach($this->plugins as $name => $obj){
-        if($this->plugins[$name]->initially_was_account && $this->plugins[$name]->is_account){
-          $this->plugins[$name]->setStatus($action);
+        foreach($caseVars as $var){
+          if(isset($this->$var)){
+            $this->plugins[$name]->$var = $this->$var;  
+          }
+        }
+
+        /* check if services can be restarted */
+        $map =array(SERVICE_STARTED=> "AllowStart" ,
+                    SERVICE_STOPPED => "AllowStop",
+                    SERVICE_RESTARTED => "AllowRestart");
+
+        /* get plugins informations, restart/start/stop actions allowed ?*/
+        $tmp = $this->plugins[$name]->getListEntry();
+
+        /* Check if given action is allowed for this service */
+        if($tmp[$map[$action]]){
+          if($this->plugins[$name]->initially_was_account && $this->plugins[$name]->is_account){
+            $this->plugins[$name]->setStatus($action);
+          }
         }
       }
     }else{
+      foreach($caseVars as $var){
+        if(isset($this->$var)){
+          $this->plugins[$service]->$var = $this->$var;  
+        }
+      }
       if($this->plugins[$service]->is_account){
         $this->plugins[$service]->setStatus($action);
       }