Code

Added gray out to navigation icons in divlist
[gosa.git] / plugins / admin / systems / class_servDNS.inc
index 9bc83feefef694fd3c61785f44908bce96815539..c74c27fd379fdbbfb0ba2364b557c533b4e46d9f 100644 (file)
@@ -1,6 +1,8 @@
 <?php
 
-class servdns extends plugin
+require_once("class_goService.inc");
+
+class servdns extends goService
 {
   /* CLI vars */
   var $cli_summary= "Manage server basic objects";
@@ -18,12 +20,18 @@ class servdns extends plugin
 
   var $orig_dn          = "";
 
-  var $DNSinitially_was_account;
-
+  var $initially_was_account;
+  
+  /* ServerService tab vars */
+  var $conflicts        = array("servdns");
+  var $DisplayName      = "";
+  var $StatusFlag       = "";
 
-  function servdns ($config, $dn= NULL)
+  function servdns ($config, $dn= NULL, $parent= NULL)
   {
-    plugin::plugin ($config, $dn);
+    plugin::plugin ($config, $dn, $parent);
+
+    $this->DisplayName = _("DNS service");
 
     $this->orig_dn = $dn;
 
@@ -42,7 +50,7 @@ class servdns extends plugin
     }else{
       $this->is_account = true;
     }
-    $this->DNSinitially_was_account = $this->is_account;
+    $this->initially_was_account = $this->is_account;
   }
 
 
@@ -64,10 +72,10 @@ class servdns extends plugin
     }
 
     if ($this->is_account){
-      $display= $this->show_header(_("Remove DNS service"),
+      $display= $this->show_disable_header(_("Remove DNS service"),
           _("This server has DNS features enabled. You can disable them by clicking below."));
     } else {
-      $display= $this->show_header(_("Add DNS service"),
+      $display= $this->show_enable_header(_("Add DNS service"),
           _("This server has DNS features disabled. You can enable them by clicking below."));
       return ($display);
     }
@@ -204,14 +212,16 @@ class servdns extends plugin
 
     /* There are still entries using this configuration
      *  Abort deletion
-     */ 
+     */
     if(count($used)){
       $i = 2;
       $str ="";
       foreach($used as $dn){
-        if($i > 0 ){
+        if($i > 0 && !preg_match("/,relativeDomainName=/",$dn)){
           $i --;
-          $str.=$dn." ";
+          $name = preg_replace("/^[^=]+=([^,]*),.*$/","\\1",$dn);
+          $zone = preg_replace("/^.*zoneName=([^,]*),.*$/","\\1",$dn);
+          $str.= $name.".".$zone." ";
         }
       }
 
@@ -221,9 +231,10 @@ class servdns extends plugin
         $str .=" ... ";
       }
       print_red(sprintf(_("Can't delete the selected zone, because it is still in use by these entry/entries '%s'"),trim($str)));
-
+      return(false);
     }else{
       unset($this->Zones[$id]);
+      return(true);
     }
   } 
 
@@ -247,18 +258,17 @@ class servdns extends plugin
    */
   function remove_from_parent()
   {
-    if(!$this->DNSinitially_was_account){
-      return;
-    }
-    print_red("Can't remove dns yet. returning without remove.");
-    return;
-    $ldap = $this->config->get_ldap_link();
-    $ldap->ls("(&(objectClass=dNSZone)(zoneName=*)(relativeDomainName=@))",$this->orig_dn,array("relativeDomainName","zoneName"));
-    while($attr = $ldap->fetch()){
-      $ldap->cd($attr['dn']);
-      $ldap->rmDir($attr['dn']);
+    if($this->initially_was_account){
+      $bool = true;
+      foreach($this->Zones as $key => $zone){
+        $bool= $bool & $this->RemoveZone($key);
+      }
+
+      if($bool){
+        $this->save();
+      }
+      return($bool);
     }
-    show_ldap_error($ldap->get_error(), _("Removing DNS service failed"));
   }
 
 
@@ -279,7 +289,7 @@ class servdns extends plugin
       foreach($tmp['zoneUpdates'] as $dn => $attrs){
         $ldap->cd($dn);
         $ldap->modify($attrs);
-        show_ldap_error("Zone:".$ldap->get_error(), _("Updating DNS service failed"));
+        show_ldap_error($ldap->get_error(), sprintf(_("Updating of system server/dns with dn '%s' failed."),$this->dn));
       }
     }
 
@@ -288,7 +298,7 @@ class servdns extends plugin
     foreach($tmp['del'] as $dn => $del){
       $ldap->cd($dn);
       $ldap->rmdir_recursive($dn);
-      show_ldap_error($ldap->get_error(), _("Removing DNS entries failed"));
+      show_ldap_error($ldap->get_error(), sprintf(_("Removing of system server/dns with dn '%s' failed."),$this->dn));
     }
 
     /* move follwoing entries
@@ -309,9 +319,90 @@ class servdns extends plugin
         $ldap->cd($dn);
         $ldap->add($attrs);
       }
-      show_ldap_error($ldap->get_error(), _("Saving DNS entries failed"));
+      show_ldap_error($ldap->get_error(), sprintf(_("Saving of system server/dns with dn '%s' failed."),$this->dn));
     }
   }
+
+
+  /* Directly save new status flag */
+  function setStatus($value)
+  {
+    if($value == "none") return;
+    if(!$this->initially_was_account) return;
+    if(empty($this->StatusFlag)) return;
+    $ldap = $this->config->get_ldap_link();
+    $ldap->cd($this->dn);
+    $ldap->cat($this->dn,array("objectClass"));
+    if($ldap->count()){
+
+      $tmp = $ldap->fetch();
+      for($i = 0; $i < $tmp['objectClass']['count']; $i ++){
+        $attrs['objectClass'][] = $tmp['objectClass'][$i];
+      }
+      $flag = $this->StatusFlag;
+      $attrs[$flag] = $value;
+      $this->$flag = $value;
+      $ldap->modify($attrs);
+      show_ldap_error($ldap->get_error(), sprintf(_("Set status flag for system server/dns with dn '%s' failed."),$this->dn));
+      $this->action_hook();
+    }
+  }
+
+
+  function getListEntry()
+  {
+    $fields               = goService::getListEntry(); 
+    $fields['Message']    = _("DNS service");
+    $fields['AllowEdit']  = true;
+    return($fields);
+  }
+
+
+  /* Get updates for status flag */
+  function updateStatusState()
+  {
+    if(empty($this->StatusFlag)) return;
+
+    $attrs = array();
+    $flag = $this->StatusFlag;
+    $ldap = $this->config->get_ldap_link();
+    $ldap->cd($this->cn);
+    $ldap->cat($this->dn,array($flag));
+    if($ldap->count()){
+      $attrs = $ldap->fetch();
+    }
+    if(isset($attrs[$flag][0])){
+      $this->$flag = $attrs[$flag][0];
+    }
+  }
+
+
+  /* Return plugin informations for acl handling */
+  function plInfo()
+  {
+    return (array(
+          "plShortName"   => _("DNS service"),
+          "plDescription" => _("DNS service")." ("._("Services").")",
+          "plSelfModify"  => FALSE,
+          "plDepends"     => array(),
+          "plPriority"    => 83,
+          "plSection"     => array("administration"),
+          "plCategory"    => array("server"),
+
+          "plProvidedAcls"=> array(
+            "zoneName"      =>_("Zone name"),
+            "ReverseZone"   =>_("Reverse zone"),
+            "sOAprimary"    =>_("Primary dns server"),
+            "sOAmail"       =>_("Mail address"),
+            "sOAserial"     =>_("Serial"),
+            "sOArefresh"    =>_("Refresh"),
+            "sOAretry"      =>_("Retry"),
+            "sOAexpire"     =>_("Expire"),
+            "sOAttl"        =>_("TTL"),
+            "zoneRecords"   =>_("Zone records"))
+    ));
+  }
+
 }
 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
 ?>