Code

Updated listing table summary
[gosa.git] / gosa-plugins / opsi / admin / opsi / class_opsigeneric.inc
index 6aec6c21a421b1de0c3fedd4b3a55ee6c411dfe9..96993fd770daa8dfbfa2b168c4d2465591014c4b 100644 (file)
@@ -79,31 +79,6 @@ class opsiGeneric extends plugin
 
     /* Try to plugin */
     $this->init();
-
-    // Now fake a valid ldap entry ... this is necessary to avoid 
-    //  modifications in the dns/dhcp classes
-   
-    // First fake cn 
-    $this->attrs['hostId'][0] = $this->hostId;
-    $this->attrs['cn'][0] = $this->hostId;
-
-    // Second detect DNS settings. 
-    $ldap = $this->config->get_ldap_link();
-    $ldap->cd($this->config->current['BASE']);
-    $strippedHostId = preg_replace("/\..*$/","",$this->hostId);
-    $ldap->search("(&(objectClass=dNSZone)(|(relativeDomainName=".$this->hostId.")(relativeDomainName=".$strippedHostId."))(aRecord=*))",array("aRecord"));
-    if($ldap->count()){
-      $attrs = $ldap->fetch();
-      $this->attrs['ipHostNumber']['count'] = 0;
-      $this->attrs['ipHostNumber'][0] = $attrs['aRecord'][0];
-    }
-
-    // Initialize DHCP and DNS 
-    $this->netConfigDNS = new termDNS($this->config,$this,$this->objectclasses, FALSE, "hostId");
-    $this->netConfigDNS->set_acl_category("opsi");
-    $this->netConfigDNS->set_acl_base($this->config->current['BASE']);
-    $this->netConfigDNS->IPisMust = FALSE;
-    $this->netConfigDNS->MACisMust = FALSE;
   }
   
 
@@ -122,10 +97,10 @@ class opsiGeneric extends plugin
       $this->is_account = TRUE;
     }
 
+
     /* Try to load client infos from the gosa support daemon
      */
     if(!empty($this->hostId)){
-
       $list = $this->opsi->list_clients($this->hostId);
       $err |= $this->opsi->is_error();
 
@@ -150,61 +125,37 @@ class opsiGeneric extends plugin
       }
     }
 
-    /* Read informations about available netboot products. 
-        If not already done, before.
-     */
-    if(!$err && !count($this->a_availableNetbootProducts)){
-      $this->a_availableNetbootProducts = $this->opsi->get_netboot_products();
-      ksort($this->a_availableNetbootProducts);
-      $err |= $this->opsi->is_error();
-    }
+    // Get package info
+    $list = array(); 
+    $list = $this->opsi->get_full_product_host_information($this->hostId);
+    $err |= $this->opsi->is_error();
 
     /* Read informations about available netboot products. 
-        If not already done, before.
-     */
-    if(!$err && !count($this->a_availableLocalProducts)) {
-      $this->a_availableLocalProducts   = $this->opsi->get_local_products();
-      ksort($this->a_availableLocalProducts);
-      $err |= $this->opsi->is_error();
-    }
-
-    /* Get products selected by this host.
+       If not already done, before.
      */
-    if(!$err && !empty($this->hostId)) {
-      $tmp = array_keys($this->opsi->get_netboot_products($this->hostId));
-      $err |= $this->opsi->is_error();
-      if(count($tmp) && !$err && !isset($this->a_availableNetbootProducts[$this->s_selectedNetbootProduct]['CFG'])){
-        $this->s_selectedNetbootProduct = $tmp[0];
-      
-        /* Read configuration for "Netboot Products" */
-        if(isset($this->a_availableNetbootProducts[$this->s_selectedNetbootProduct])){
-          $CFG = $this->opsi->get_product_properties($this->s_selectedNetbootProduct,$this->hostId);
-          $this->a_availableNetbootProducts[$this->s_selectedNetbootProduct]['CFG'] = $CFG;
-        }
-      }
-      $err |= $this->opsi->is_error();
-    }
+    if(!$err){
+      foreach($list as $key => $entry){
 
-    /* Get all selected local products 
-     */
-    if(!$err && !empty($this->hostId) && !count($this->a_selectedLocalProducts)) {
-      $tmp = $this->opsi->get_local_products($this->hostId); 
-      $err |= $this->opsi->is_error();
-      $this->a_selectedLocalProducts = $tmp;
-    }
+        $tmp = array('DESC'=>$entry['data']['DESCRIPTION'],'NAME'=>$key);
+        if($entry['configurable']){
+          $tmp['CFG'] = $entry['data']['PROPERTIES'];
+        } 
 
-    /* Load product configuration for all already selected products.
-     */
-    if(!$err && !empty($this->hostId)) {
-      foreach($this->a_selectedLocalProducts as $name => $data){
-        if(!$err && !isset($this->a_selectedLocalProducts[$name]['CFG'])){
-          $CFG = $this->opsi->get_product_properties($name,$this->hostId);
-          $err |= $this->opsi->is_error();
-          $this->a_selectedLocalProducts[$name]['CFG'] = $CFG;
+        if($entry['data']['TYPE'] == "localboot"){
+          if(!$entry['installed']){
+            $this->a_availableLocalProducts[$key] = $tmp;
+          }else{
+            $this->a_selectedLocalProducts[$key] = $tmp;
+          }
+        }else{
+          $this->a_availableNetbootProducts[$key] = $tmp;
+          if($entry['installed']){
+            $this->s_selectedNetbootProduct= $key;
+          }
         }
       }
     }
-  
+
     /* Check if everything went fine else reset everything and display a retry button 
      */
     if($err){
@@ -222,6 +173,34 @@ class opsiGeneric extends plugin
       if(empty($this->s_selectedNetbootProduct)){
         $this->s_selectedNetbootProduct = key($this->a_availableNetbootProducts);
       }
+
+      // Now fake a valid ldap entry ... this is necessary to avoid 
+      //  modifications in the dns/dhcp classes
+
+      // First fake cn 
+      $this->attrs['hostId'][0] = $this->hostId;
+      $this->attrs['cn'][0] = $this->hostId;
+
+      // Second detect DNS settings. 
+      $ldap = $this->config->get_ldap_link();
+      $ldap->cd($this->config->current['BASE']);
+      $strippedHostId = preg_replace("/\..*$/","",$this->hostId);
+      $ldap->search("(&(objectClass=dNSZone)(|(relativeDomainName=".$this->hostId.")(relativeDomainName=".$strippedHostId."))(aRecord=*))",array("aRecord"));
+      if($ldap->count()){
+        $attrs = $ldap->fetch();
+        $this->attrs['ipHostNumber']['count'] = 0;
+        $this->attrs['ipHostNumber'][0] = $attrs['aRecord'][0];
+      }
+
+      $this->attrs['macAddress']['count'] = 1;
+      $this->attrs['macAddress'][0] = &$this->mac;
+
+      // Initialize DHCP and DNS 
+      $this->netConfigDNS = new termDNS($this->config,$this,$this->objectclasses, FALSE, "hostId");
+      $this->netConfigDNS->set_acl_category("opsi");
+      $this->netConfigDNS->set_acl_base($this->config->current['BASE']);
+      $this->netConfigDNS->IPisMust = FALSE;
+      $this->netConfigDNS->MACisMust = FALSE;
     }
   }
 
@@ -231,6 +210,13 @@ class opsiGeneric extends plugin
    */
   public function check()
   {
+  
+    // In case of initialization problem, we do not save anything.
+    // We can skip checks here, the date isn't usable.
+    if($this->init_failed){ 
+      return;
+    };
+
     $messages = plugin::check();
     $messages= array_merge($messages, $this->netConfigDNS->check());
 
@@ -260,6 +246,7 @@ class opsiGeneric extends plugin
    */
   public function execute()
   {
+    plugin::execute();
     $display ="";
 
     /* The pluign initialization failed due to communication problems with the gosa daemon. 
@@ -329,7 +316,7 @@ class opsiGeneric extends plugin
     foreach($this->a_availableLocalProducts as $name => $data){
       if(isset($this->a_selectedLocalProducts[$name])) continue;
 
-      $add_tab  = array("string"   => "<input type='image' src='images/back.png' name='add_lp_".$name."'>");
+      $add_tab  = array("string"   => image('images/back.png','add_lp_'.$name));
       $name_tab = array("string"   => $name);
       $desc_tab = array("string"   => "<div style='height: 14px;overflow:hidden;'>".$data['DESC']."</div>",
           "attach"   => "title='".$data['DESC']."' style='border-right:0px;'");
@@ -354,11 +341,11 @@ class opsiGeneric extends plugin
 
         /* Only display edit button, if there is something to edit 
          */
-        $edit = "<img src='images/empty.png' alt=' '>";
+        $edit = image('images/empty.png');
         if(count($data['CFG'])){
-          $edit = "<input type='image' src='images/lists/edit.png' name='edit_lp_".$name."'>";
+          $edit = image('images/lists/edit.png','edit_lp_'.$name);
         }
-        $del  = "<input type='image' src='images/lists/trash.png' name='del_lp_".$name."'>";  
+        $del = image('images/lists/trash.png','del_lp_'.$name);
 
         $opt_tab  = array("string" => $edit.$del,
             "attach" => "style='border-right:0px; width: 40px; text-align:right;'");
@@ -400,6 +387,9 @@ class opsiGeneric extends plugin
    */
   public function save()
   {
+    if($this->init_failed){ 
+      return;
+    }
     
     /* Check if we have to create a new opsi client
         or just have to save client modifications.
@@ -547,12 +537,12 @@ class opsiGeneric extends plugin
      */
     $res = array();
     foreach($c2 as $name => $value){
-      if(!isset($c1[$name]) || $c1[$name]['DEFAULT'] != $c2[$name]['DEFAULT']){
+      if(!isset($c1[$name]) || $c1[$name]['CURRENT'] != $c2[$name]['CURRENT']){
         $res[$name] = $c2[$name];
       }
     }
     foreach($c1 as $name => $value){
-      if(!isset($c2[$name]) || $c2[$name]['DEFAULT'] != $c1[$name]['DEFAULT']){
+      if(!isset($c2[$name]) || $c2[$name]['CURRENT'] != $c1[$name]['CURRENT']){
         $res[$name] = $c1[$name];
       }
     }
@@ -564,6 +554,9 @@ class opsiGeneric extends plugin
    */  
   public function remove_from_parent()
   {
+    if($this->init_failed){ 
+      return;
+    }
     $this->netConfigDNS->remove_from_parent();
 
     $this->opsi->del_client($this->hostId);
@@ -617,7 +610,8 @@ class opsiGeneric extends plugin
 
       plugin::save_object();
       $this->netConfigDNS->save_object();
-
+      $this->mac = $this->netConfigDNS->macAddress;
+  
       /* Get hostId 
        */
       if(isset($_POST['hostId']) && $this->standalone && $this->acl_is_writeable("hostId")){
@@ -672,7 +666,7 @@ class opsiGeneric extends plugin
         /* Add product 
          */
         if(preg_match("/^add_lp_/",$name) && $this->acl_is_writeable("localProduct")){
-          $product = preg_replace("/^add_lp_(.*)_.$/","\\1",$name);
+          $product = preg_replace("/^add_lp_(.*)$/","\\1",$name);
           if(isset($this->a_availableLocalProducts[$product]) && !isset($this->a_selectedLocalProducts[$product])){
             $this->a_selectedLocalProducts[$product] = $this->a_availableLocalProducts[$product];
             $CFG = $this->opsi->get_product_properties($product);
@@ -688,7 +682,7 @@ class opsiGeneric extends plugin
         /* Delete product 
          */
         if(preg_match("/^del_lp_/",$name) && $this->acl_is_writeable("localProduct")){
-          $product = preg_replace("/^del_lp_(.*)_.$/","\\1",$name);
+          $product = preg_replace("/^del_lp_(.*)$/","\\1",$name);
           if(isset($this->a_selectedLocalProducts[$product])){
             unset($this->a_selectedLocalProducts[$product]);
           }
@@ -698,7 +692,7 @@ class opsiGeneric extends plugin
         /* Edit a product  
          */
         if(preg_match("/^edit_lp_/",$name) && $this->acl_is_readable("localProduct")){
-          $product = preg_replace("/^edit_lp_(.*)_.$/","\\1",$name);
+          $product = preg_replace("/^edit_lp_(.*)$/","\\1",$name);
           $this->dialog = new opsiProperties($this->config,
               $product,$this->a_selectedLocalProducts[$product]['CFG'],$this->hostId);
           break;