Code

Updated several service dialogs, fixed typos, string, html, post handling and more.
authorhickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8>
Mon, 26 Jul 2010 15:46:37 +0000 (15:46 +0000)
committerhickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8>
Mon, 26 Jul 2010 15:46:37 +0000 (15:46 +0000)
git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@19121 594d385d-05f5-0310-b6e9-bd551577e9d8

gosa-plugins/dns/admin/systems/services/dns/class_servDNSeditZoneEntries.inc

index 9d72fea8966bd7f8f0679b637c740b591be9f75a..5721d9505ed54420dae80925bb9ec28009e1dc6f 100644 (file)
 
 class servDNSeditZoneEntries extends plugin
 {
-  /* attribute list for save action */
-  var $ignore_account     = TRUE;
-  var $attributes         = array();
-  var $objectclasses      = array("whatever");
+    /* attribute list for save action */
+    var $ignore_account     = TRUE;
+    var $attributes         = array();
+    var $objectclasses      = array("whatever");
 
-  var $Devices            = array();
+    var $Devices            = array();
 
-  var $zoneName           = "";   // ZoneName of currently edited Zone
-  var $reverseName        = "";   // ReverseZone of the currently edited Zone
+    var $zoneName           = "";   // ZoneName of currently edited Zone
+    var $reverseName        = "";   // ReverseZone of the currently edited Zone
 
-  var $RecordTypes        = array();  // Possible record type.
-  var $acl                = "";
-  var $disableDialog      = false; // Dialog will be disabled, if this zone is new 
+    var $RecordTypes        = array();  // Possible record type.
+    var $acl                = "";
+    var $disableDialog      = false; // Dialog will be disabled, if this zone is new 
 
 
-  function servDNSeditZoneEntries (&$config,$dn, &$zoneObject)
-  {
-    plugin::plugin ($config, $dn);
+    function servDNSeditZoneEntries (&$config,$dn, &$zoneObject)
+    {
+        plugin::plugin ($config, $dn);
 
-    /* Initialise class
-     */
-    $this->RecordTypes  = DNS::getDnsRecordTypes();
-    $this->dn           = "zoneName=".$zoneObject['InitialzoneName'].",".$dn; 
-    $this->zoneName     = $zoneObject['InitialzoneName'];
-    $this->reverseName  = $zoneObject['InitialReverseZone'];
-
-    /* Remove nSRecord from listed types */
-    if(isset($this->RecordTypes['nSRecord'])){
-      unset($this->RecordTypes['nSRecord']);
-    }
-    /* Remove nSRecord from listed types */
-    if(isset($this->RecordTypes['pTRRecord'])){
-      unset($this->RecordTypes['pTRRecord']);
-    }
+        /* Initialise class
+         */
+        $this->RecordTypes  = DNS::getDnsRecordTypes();
+        $this->dn           = "zoneName=".$zoneObject['InitialzoneName'].",".$dn; 
+        $this->zoneName     = $zoneObject['InitialzoneName'];
+        $this->reverseName  = $zoneObject['InitialReverseZone'];
+
+        /* Remove nSRecord from listed types */
+        if(isset($this->RecordTypes['nSRecord'])){
+            unset($this->RecordTypes['nSRecord']);
+        }
+        /* Remove nSRecord from listed types */
+        if(isset($this->RecordTypes['pTRRecord'])){
+            unset($this->RecordTypes['pTRRecord']);
+        }
 
-    /* Get ldap connection 
-     */
-    $ldap = $this->config->get_ldap_link();
-    $ldap->cd($this->config->current['BASE']);
+        /* Get ldap connection 
+         */
+        $ldap = $this->config->get_ldap_link();
+        $ldap->cd($this->config->current['BASE']);
 
-    /* Get zone content
-     */
-    $ldap->ls("(&(objectClass=dNSZone)(!(relativeDomainName=@)))",$this->dn,array("relativeDomainName"));
-    
-    while($attrs = $ldap->fetch()){
-      $this->Devices[$attrs['relativeDomainName'][0]] = DNS::getDNSHostEntries($config,$attrs['relativeDomainName'][0],true);
-      $this->Devices[$attrs['relativeDomainName'][0]]['OrigCn'] = $attrs['relativeDomainName'][0];
-    }
+        /* Get zone content
+         */
+        $ldap->ls("(&(objectClass=dNSZone)(!(relativeDomainName=@)))",$this->dn,array("relativeDomainName"));
 
-    $ldap->cat($this->dn,array("objectClass"));
+        while($attrs = $ldap->fetch()){
+            $this->Devices[$attrs['relativeDomainName'][0]] = DNS::getDNSHostEntries($config,$attrs['relativeDomainName'][0],true);
+            $this->Devices[$attrs['relativeDomainName'][0]]['OrigCn'] = $attrs['relativeDomainName'][0];
+        }
+
+        $ldap->cat($this->dn,array("objectClass"));
 
-    $this->disableDialog = true;
-    if(count($this->Devices)|| $ldap->count()){
-      $this->disableDialog = false;
+        $this->disableDialog = true;
+        if(count($this->Devices)|| $ldap->count()){
+            $this->disableDialog = false;
+        }
     }
-  }
 
-  function execute()
-  {
-    plugin::execute();
+    function execute()
+    {
+        plugin::execute();
 
-    /* Fill templating stuff */
-    $smarty= get_smarty();
-    $display= "";
+        /* Fill templating stuff */
+        $smarty= get_smarty();
+        $display= "";
 
-    $table = "";
-    foreach($this->Devices as $key => $dev){
-      $table .= $this->generateRecordConfigurationRow($key);
+        $table = "";
+        foreach($this->Devices as $key => $dev){
+            $table .= $this->generateRecordConfigurationRow($key);
+        }
+
+        $smarty->assign("acl",$this->acl);
+        $smarty->assign("disableDialog",$this->disableDialog);
+        $smarty->assign("table",$table);;
+        $display.= $smarty->fetch(get_template_path('servDNSeditZoneEntries.tpl', TRUE, dirname(__FILE__)));
+        return($display);
     }
 
-    $smarty->assign("acl",$this->acl);
-    $smarty->assign("disableDialog",$this->disableDialog);
-    $smarty->assign("table",$table);;
-    $display.= $smarty->fetch(get_template_path('servDNSeditZoneEntries.tpl', TRUE, dirname(__FILE__)));
-    return($display);
-  }
 
+    function save_object()
+    {
+        /* Check posts for operations ...  
+         */
+        $once = true;
+        $ptr_updates = array();
+        if(!preg_match("/w/",$this->acl)) return;
+
+        foreach($_POST as $name => $value){
+
+            /* Extract informations out of post name 
+             */
+            $tmp    = preg_replace("/^[^_]*_/","\\1",$name);
+            $tmp2   = explode("|",postDecode($tmp));      
+
+            /* Add new host entry
+             */
+            if((preg_match("/^UserRecord_?/",$name)) && ($once)){
+                $once = false;
+                $entry = DNS::getDNSHostEntries($this->config,"",true);     
+                $entry['exists']    = true;
+                $entry['zoneName']  = strtoupper($this->attrs['cn'][0])."/".$this->zoneName; 
+                $entry['RECORDS'][] = array("type" => "aRecord" , "value"=>"");
+                $this->Devices[_("New entry")] = $entry;
+            }
 
-  function save_object()
-  {
-    /* Check posts for operations ...  
-     */
-    $once = true;
-    $ptr_updates = array();
-    if(!preg_match("/w/",$this->acl)) return;
-
-    foreach($_POST as $name => $value){
-
-      /* Extract informations out of post name 
-       */
-      $tmp    = preg_replace("/^[^_]*_/","\\1",$name);
-      $tmp2   = explode("|",postDecode($tmp));      
-
-      /* Add new host entry
-       */
-      if((preg_match("/^UserRecord_?/",$name)) && ($once)){
-        $once = false;
-        $entry = DNS::getDNSHostEntries($this->config,"",true);     
-        $entry['exists']    = true;
-        $entry['zoneName']  = strtoupper($this->attrs['cn'][0])."/".$this->zoneName; 
-        $entry['RECORDS'][] = array("type" => "aRecord" , "value"=>"");
-        $this->Devices[_("New entry")] = $entry;
-      }
-
-      if(count($tmp2) != 2) continue;
-
-      $Name     = $tmp2[0];
-      $RecordID = $tmp2[1];
-
-      /* Add new REcord
-       */
-      if((preg_match("/^AddRecord_/",$name)) && ($once)){
-        $once = false;
-        $this->Devices[$Name]['RECORDS'][] = $this->Devices[$Name]['RECORDS'][$RecordID];
-      }
-
-      /* Remove record from given dn
-       */
-      if((preg_match("/^RemoveRecord_/",$name)) && ($once)){
-        $once   = false;
-        if(isset($this->Devices[$Name]['RECORDS'][$RecordID])){
-          unset($this->Devices[$Name]['RECORDS'][$RecordID]);
-        }
+            if(count($tmp2) != 2) continue;
 
-        /* Check if there is at least one visible record. Else remove complete entry */
-        $visible = false;
-        foreach($this->Devices[$Name]['RECORDS'] as $rec){
-          if(in_array($rec['type'],$this->RecordTypes)){
-            $visible = true;  
-            break;
-          }
-        }
-        if(!$visible && isset($this->Devices[$Name]['RECORDS'])){
-          $this->Devices[$Name]['RECORDS'] = array();
-        }
-      }
-    }
+            $Name     = $tmp2[0];
+            $RecordID = $tmp2[1];
 
-    /* Possible attributes posted 
-     */
-    foreach($_POST as $name => $value){
-
-      /* Extract informations out of post name 
-       */
-      $tmp    = preg_replace("/^[^_]*_/","\\1",$name);
-      $tmp2   = explode("|",postDecode($tmp));      
-      if(count($tmp2) != 2) continue;
-
-      $Name     = $tmp2[0];
-      $RecordID = $tmp2[1];
-
-      /* Check for value change 
-       */          
-      if(preg_match("/ValueSelection_/",$name)){
-        if(isset($this->Devices[$Name]['RECORDS'][$RecordID])){
-         
-          /* Update value */ 
-          $old = $this->Devices[$Name]['RECORDS'][$RecordID]['value'];
-          $this->Devices[$Name]['RECORDS'][$RecordID]['value'] = get_post($name);
-
-          /* Handle pTRRecord */
-          if(!isset($ptr_updates[$Name]) && $this->Devices[$Name]['RECORDS'][$RecordID]['type'] == "aRecord"){
-    
-            $found = false;
-            $ip = $value;
-            $match = preg_replace("/^[^\/]*+\//","",$this->reverseName);
-            $ip = preg_replace("/^".preg_quote($match)."/","",$ip);
-            $ip = preg_replace("/^\./","",$ip);
-
-            foreach($this->Devices[$Name]['RECORDS'] as $key => $dev){
-              if($dev['type'] == "pTRRecord"){
-                $ptr_updates[$Name] = $Name;
-                $this->Devices[$Name]['RECORDS'][$key]['value'] = $ip;
-                $found = true;
-                break;
-              }
+            /* Add new REcord
+             */
+            if((preg_match("/^AddRecord_/",$name)) && ($once)){
+                $once = false;
+                $this->Devices[$Name]['RECORDS'][] = $this->Devices[$Name]['RECORDS'][$RecordID];
             }
-            if(!$found){
-              $dev = array('type'=> 'pTRRecord', 'value' => $ip);
-              $this->Devices[$Name]['RECORDS'][] = $dev;
+
+            /* Remove record from given dn
+             */
+            if((preg_match("/^RemoveRecord_/",$name)) && ($once)){
+                $once   = false;
+                if(isset($this->Devices[$Name]['RECORDS'][$RecordID])){
+                    unset($this->Devices[$Name]['RECORDS'][$RecordID]);
+                }
+
+                /* Check if there is at least one visible record. Else remove complete entry */
+                $visible = false;
+                foreach($this->Devices[$Name]['RECORDS'] as $rec){
+                    if(in_array($rec['type'],$this->RecordTypes)){
+                        $visible = true;  
+                        break;
+                    }
+                }
+                if(!$visible && isset($this->Devices[$Name]['RECORDS'])){
+                    $this->Devices[$Name]['RECORDS'] = array();
+                }
             }
-          }
         }
-      }
-
-      /* record type changed
-       */        
-      if(preg_match("/^RecordTypeSelection_/",$name)){
-        if(isset($this->Devices[$Name]['RECORDS'][$RecordID])){
-          $this->Devices[$Name]['RECORDS'][$RecordID]['type'] = $value;
-        }  
-      }   
-    }
-    
-    /* check for renamed entries 
-     */ 
-    foreach($_POST as $name => $value){
-
-      /* Extract informations out of post name 
-       */
-      $tmp    = preg_replace("/^[^_]*_/","\\1",$name);
-      $tmp2   = explode("|",postDecode($tmp));      
-
-      if(count($tmp2) != 2) continue;
-
-      $Name     = $tmp2[0];
-      $RecordID = $tmp2[1];
-
-      /* Host renamed
-       */
-      if(preg_match("/RenameHost_/",$name)){
-        if((isset($this->Devices[$Name])) && ($Name != $value)){
-    
-          if(isset($this->Devices[$value])){
-            msg_dialog::display(_("Error"), sprintf(_("Cannot rename '%s' to '%s'. Name is already in use!"), $Name, $value), ERROR_DIALOG);
-          }else{
-            $this->Devices[$value] = $this->Devices[$Name];
-            unset($this->Devices[$Name]);
-          }
+
+        /* Possible attributes posted 
+         */
+        foreach($_POST as $name => $value){
+
+            $value = get_post($name);
+
+            /* Extract informations out of post name 
+             */
+            $tmp    = preg_replace("/^[^_]*_/","\\1",$name);
+            $tmp2   = explode("|",postDecode($tmp));      
+
+            if(count($tmp2) != 2) continue;
+
+            $Name     = $tmp2[0];
+            $RecordID = $tmp2[1];
+
+            /* Check for value change 
+             */          
+            if(preg_match("/ValueSelection_/",$name)){
+                if(isset($this->Devices[$Name]['RECORDS'][$RecordID])){
+
+                    /* Update value */ 
+                    $old = $this->Devices[$Name]['RECORDS'][$RecordID]['value'];
+                    $this->Devices[$Name]['RECORDS'][$RecordID]['value'] = get_post($name);
+
+                    /* Handle pTRRecord */
+                    if(!isset($ptr_updates[$Name]) && $this->Devices[$Name]['RECORDS'][$RecordID]['type'] == "aRecord"){
+
+                        $found = false;
+                        $ip = $value;
+                        $match = preg_replace("/^[^\/]*+\//","",$this->reverseName);
+                        $ip = preg_replace("/^".preg_quote($match)."/","",$ip);
+                        $ip = preg_replace("/^\./","",$ip);
+
+                        foreach($this->Devices[$Name]['RECORDS'] as $key => $dev){
+                            if($dev['type'] == "pTRRecord"){
+                                $ptr_updates[$Name] = $Name;
+                                $this->Devices[$Name]['RECORDS'][$key]['value'] = $ip;
+                                $found = true;
+                                break;
+                            }
+                        }
+                        if(!$found){
+                            $dev = array('type'=> 'pTRRecord', 'value' => $ip);
+                            $this->Devices[$Name]['RECORDS'][] = $dev;
+                        }
+                    }
+                }
+            }
+
+            /* record type changed
+             */        
+            if(preg_match("/^RecordTypeSelection_/",$name)){
+                if(isset($this->Devices[$Name]['RECORDS'][$RecordID])){
+                    $this->Devices[$Name]['RECORDS'][$RecordID]['type'] = $value;
+                }  
+            }   
         }
-      }
-    }
-  }
 
+        /* check for renamed entries 
+         */ 
+        foreach($_POST as $name => $value){
 
-  /*  check something 
-   */
-  function check()
-  {
-    /* Call common method to give check the hook */
-    $message= plugin::check();
-   
-    if(!preg_match("/w/",$this->acl)) return($message);
-    $ldap = $this->config->get_ldap_link();
-    $ldap->cd($this->config->current['BASE']);
+        
+            $value = get_post($name);
 
-    $names = array();
+            /* Extract informations out of post name 
+             */
+            $tmp    = preg_replace("/^[^_]*_/","\\1",$name);
+            $tmp2   = explode("|",postDecode($tmp));      
 
-    foreach($this->Devices as $DevName => $device){
+            if(count($tmp2) != 2) continue;
 
-      /* Don't need to check empty values ... */
-      if(!count($device['RECORDS'])) continue;
+            $Name     = $tmp2[0];
+            $RecordID = $tmp2[1];
 
-      /* Checking entry name
-       */
-      if(!preg_match("/^[a-z0-9_\.-]+$/i", $DevName) || (empty($DevName))){
-        $message[] = msgPool::invalid(_("Name"),$DevName,"/[a-z0-9_\.-]/i");
-      }      
+            /* Host renamed
+             */
+            if(preg_match("/RenameHost_/",$name)){
+                if((isset($this->Devices[$Name])) && ($Name != $value)){
 
-      /* Renaming check for existing devices 
-       */
-      if(isset($device['OrigCn'])  && ($DevName != $device['OrigCn'] )){
-        $ldap->cd($this->config->current['BASE']);
-        $ldap->search("(relativeDomainName=".$DevName.")",array("relativeDomainName"));
-        if($ldap->count()){
-          $message[] = sprintf(_("Cannot rename '%s' to '%s'. Entry is already in use."),$device['OrigCn'],$DevName);
+                    if(isset($this->Devices[$value])){
+                        msg_dialog::display(_("Error"), sprintf(_("Cannot rename '%s' to '%s'. Name is already in use!"), $Name, $value), ERROR_DIALOG);
+                    }else{
+                        $this->Devices[$value] = $this->Devices[$Name];
+                        unset($this->Devices[$Name]);
+                    }
+                }
+            }
         }
-      }elseif(!isset($device['OrigCn'])){
+    }
+
+
+    /*  check something 
+     */
+    function check()
+    {
+        /* Call common method to give check the hook */
+        $message= plugin::check();
+
+        if(!preg_match("/w/",$this->acl)) return($message);
+
+        $ldap = $this->config->get_ldap_link();
         $ldap->cd($this->config->current['BASE']);
-        $ldap->search("(relativeDomainName=".$DevName.")",array("relativeDomainName"));
-        if($ldap->count()){
-          $message[] = sprintf(_("Cannot create '%s'. Entry is already in use."),$DevName);
-        }
-      }
-
-      /* Check names 
-       */
-      if(!isset($names[$DevName])){
-        $names[$DevName] = "";
-      }else{
-        $message[] = sprintf(_("Entry '%s' is used more than once."),$DevName);
-      }
-
-      /* Names should be written in lowercase
-       */
+
+        $names = array();
+
+        foreach($this->Devices as $DevName => $device){
+
+            /* Don't need to check empty values ... */
+            if(!count($device['RECORDS'])) continue;
+
+            /* Checking entry name
+             */
+            if(!preg_match("/^[a-z0-9_\.-]+$/i", $DevName) || (empty($DevName))){
+                $message[] = msgPool::invalid(_("Name"),$DevName,"/[a-z0-9_\.-]/i");
+            }      
+
+            /* Renaming check for existing devices 
+             */
+            if(isset($device['OrigCn'])  && ($DevName != $device['OrigCn'] )){
+                $ldap->cd($this->config->current['BASE']);
+                $ldap->search("(relativeDomainName=".$DevName.")",array("relativeDomainName"));
+                if($ldap->count()){
+                    $message[] = sprintf(_("Cannot rename '%s' to '%s'. Entry is already in use."),$device['OrigCn'],$DevName);
+                }
+            }elseif(!isset($device['OrigCn'])){
+                $ldap->cd($this->config->current['BASE']);
+                $ldap->search("(relativeDomainName=".$DevName.")",array("relativeDomainName"));
+                if($ldap->count()){
+                    $message[] = sprintf(_("Cannot create '%s'. Entry is already in use."),$DevName);
+                }
+            }
+
+            /* Check names 
+             */
+            if(!isset($names[$DevName])){
+                $names[$DevName] = "";
+            }else{
+                $message[] = sprintf(_("Entry '%s' is used more than once."),$DevName);
+            }
+
+            /* Names should be written in lowercase
+             */
 #      if(strtolower($DevName) != $DevName){
 #        $message[] = sprintf(_("The host name '%s' should be written in lowercase."), $DevName);
 #      }
 
-      /* Check records
-       */                 
-      $singleEntries = array("pTRRecord");
+            /* Check records
+             */                 
+            $singleEntries = array("pTRRecord");
+
+            $tmp  = array();
+            $tmp2 = array();
+            foreach($device['RECORDS'] as $Num => $Rec){
+
+                /* Check values */
+                $message += $this->checkRecordType($DevName, $Rec['type'], $Rec['value']);
+
+                /* Check for multiple use of unique record types
+                 */
+                if(in_array($Rec['type'],$singleEntries)){
+                    if(!isset($tmp[$Rec['type']])){
+                        $tmp[$Rec['type']] = "";
+                    }else{
+                        $message[] = sprintf(_("%s records cannot be used more than once."),$Rec['type']);
+                    }
+                }
+
+                /* Check for empty / duplicate entries in record array 
+                 */
+                if(empty($Rec['value'])){
+                    $message[] = sprintf(_("Please fix the empty %s record for entry '%s'."),$Rec['type'],$DevName);
+                }
+
+                /* Check for duplicate record entries 
+                 */
+                if(!isset($tmp[$Rec['type']][$Rec['value']])){
+                    $tmp[$Rec['type']][$Rec['value']] = "";
+                }else{
+                    $message[] = sprintf(_("Please fix the duplicate %s record for entry '%s'."),$Rec['type'],$DevName); 
+                }
+            }
+        }
+        return ($message);
+    }
 
-      $tmp  = array();
-      $tmp2 = array();
-      foreach($device['RECORDS'] as $Num => $Rec){
 
-        /* Check values */
-        $message += $this->checkRecordType($DevName, $Rec['type'], $Rec['value']);
+    function save()
+    {
+        if($this->disableDialog || !preg_match("/w/",$this->acl)) return;
 
-        /* Check for multiple use of unique record types
-         */
-        if(in_array($Rec['type'],$singleEntries)){
-          if(!isset($tmp[$Rec['type']])){
-            $tmp[$Rec['type']] = "";
-          }else{
-            $message[] = sprintf(_("%s records cannot be used more than once."),$Rec['type']);
-          }
-        }
+        $todo = array(); 
 
-        /* Check for empty / duplicate entries in record array 
-         */
-        if(empty($Rec['value'])){
-          $message[] = sprintf(_("Please fix the empty %s record for entry '%s'."),$Rec['type'],$DevName);
-        }
 
-        /* Check for duplicate record entries 
+
+        /* Create todolist
          */
-        if(!isset($tmp[$Rec['type']][$Rec['value']])){
-          $tmp[$Rec['type']][$Rec['value']] = "";
-        }else{
-          $message[] = sprintf(_("Please fix the duplicate %s record for entry '%s'."),$Rec['type'],$DevName); 
+        foreach($this->Devices as $name => $dev){
+            if(isset($dev['OrigCn'])){
+                if(count($dev['RECORDS'])){
+                    $todo[] = DNS::getDNSHostEntriesDiff($this->config,$dev['OrigCn'],$dev,$name);
+                }else{
+                    $dev['exists'] = false;
+                    $todo[] = DNS::getDNSHostEntriesDiff($this->config,$dev['OrigCn'],$dev,$name);
+                }
+            }else{
+                if(count($dev['RECORDS'])){
+                    $todo[] = DNS::getDNSHostEntriesDiff($this->config,"",$dev,$name);
+                }else{
+                    $dev['exists'] = false;
+                    $todo[] = DNS::getDNSHostEntriesDiff($this->config,"",$dev,$name);
+                }
+            }
         }
-      }
-    }
-    return ($message);
-  }
-
-
-  function save()
-  {
-    if($this->disableDialog || !preg_match("/w/",$this->acl)) return;
-
-    $todo = array(); 
 
+        $tmp = array();
+        $tmp['del']   = array();
+        $tmp['add']   = array();
+        $tmp['move']  = array();
+        foreach($todo as $to){
+            foreach($to as $type => $entries){
+                $tmp[$type] = array_merge($tmp[$type],$entries);
+            }
+        }
 
+        /* Get ldap link
+         */
+        $ldap = $this->config->get_ldap_link();
+        $ldap->cd ($this->config->current['BASE']);
 
-    /* Create todolist
-     */
-    foreach($this->Devices as $name => $dev){
-      if(isset($dev['OrigCn'])){
-        if(count($dev['RECORDS'])){
-          $todo[] = DNS::getDNSHostEntriesDiff($this->config,$dev['OrigCn'],$dev,$name);
-        }else{
-          $dev['exists'] = false;
-          $todo[] = DNS::getDNSHostEntriesDiff($this->config,$dev['OrigCn'],$dev,$name);
+        /* move follwoing entries
+         */
+        foreach($tmp['move'] as $src => $dst){
+            $this->recursive_move($src,$dst);
         }
-      }else{
-        if(count($dev['RECORDS'])){
-          $todo[] = DNS::getDNSHostEntriesDiff($this->config,"",$dev,$name);
-        }else{
-          $dev['exists'] = false;
-          $todo[] = DNS::getDNSHostEntriesDiff($this->config,"",$dev,$name);
+
+        /* Delete dns */
+        foreach($tmp['del'] as $dn => $del){
+            $ldap->cd($dn);
+            $ldap->rmdir_recursive($dn);
+            if(is_object($this->parent->parent)){
+                $this->parent->parent->handle_post_events("remove",array("dn" => $dn));
+            }
         }
-      }
-    }
 
-    $tmp = array();
-    $tmp['del']   = array();
-    $tmp['add']   = array();
-    $tmp['move']  = array();
-    foreach($todo as $to){
-      foreach($to as $type => $entries){
-        $tmp[$type] = array_merge($tmp[$type],$entries);
-      }
+        /* Add || Update new DNS entries
+         */
+        foreach($tmp['add'] as $dn => $attrs){
+            $ldap->cd($dn);
+            $ldap->cat($dn, array('dn'));
+            if(count($ldap->fetch())){
+                $ldap->cd($dn);
+                $ldap->modify ($attrs);
+                if(is_object($this->parent->parent)){
+                    $this->parent->parent->handle_post_events("modify",array("dn" => $dn));
+                }
+            }else{
+                $ldap->cd($dn);
+                $ldap->add($attrs);
+                if(is_object($this->parent->parent)){
+                    $this->parent->parent->handle_post_events("add",array("dn" => $dn));
+                }
+            }
+        }
     }
 
-    /* Get ldap link
-     */
-    $ldap = $this->config->get_ldap_link();
-    $ldap->cd ($this->config->current['BASE']);
 
-    /* move follwoing entries
+    /* Create html table out of given entry 
      */
-    foreach($tmp['move'] as $src => $dst){
-      $this->recursive_move($src,$dst);
-    }
+    function generateRecordConfigurationRow($objKey){
 
-    /* Delete dns */
-    foreach($tmp['del'] as $dn => $del){
-      $ldap->cd($dn);
-      $ldap->rmdir_recursive($dn);
-      if(is_object($this->parent->parent)){
-        $this->parent->parent->handle_post_events("remove",array("dn" => $dn));
-      }
-    }
+        /* Get some basic informations 
+         */
+        $obj        = $this->Devices[$objKey];
+        $objectName = $objKey;
 
-    /* Add || Update new DNS entries
-     */
-    foreach($tmp['add'] as $dn => $attrs){
-      $ldap->cd($dn);
-      $ldap->cat($dn, array('dn'));
-      if(count($ldap->fetch())){
-        $ldap->cd($dn);
-        $ldap->modify ($attrs);
-        if(is_object($this->parent->parent)){
-          $this->parent->parent->handle_post_events("modify",array("dn" => $dn));
-        }
-      }else{
-        $ldap->cd($dn);
-        $ldap->add($attrs);
-        if(is_object($this->parent->parent)){
-          $this->parent->parent->handle_post_events("add",array("dn" => $dn));
+        $dis = "";
+        if(!preg_match("/w/",$this->acl)){
+            $dis = " disabled ";
         }
-      }
-    }
-  }
-
 
-  /* Create html table out of given entry 
-   */
-  function generateRecordConfigurationRow($objKey){
+        /* Abort if emtpy
+         */
+        if(count($obj['RECORDS']) == 0) return "";
 
-    /* Get some basic informations 
-     */
-    $obj        = $this->Devices[$objKey];
-    $objectName = $objKey;
+        /* Set title 
+         */
+        $str= "<br>";
 
-    $dis = "";
-    if(!preg_match("/w/",$this->acl)){
-      $dis = " disabled ";
-    }
+        $hostNameOnce = true;
 
-    /* Abort if emtpy
-     */
-    if(count($obj['RECORDS']) == 0) return "";
+        /* Walk through all defined records 
+         */
+        $str.= "<table summary=''>";
+        foreach($obj['RECORDS'] as $id => $record){
 
-    /* Set title 
-     */
-    $str= "<br>";
+            /* Skip not selectable entries */
+            if(!isset($this->RecordTypes [$record['type']])) {
+                continue;
+            }
 
-    $hostNameOnce = true;
+            /* Create unique post name
+             */
+            $name = postEncode($objKey."|".$id);
+
+            /* Only first host entry name should be editable
+             */
+            if($hostNameOnce){
+                $hostNameOnce = false;  
+                $field1 ="<input $dis type='text' style='width:250px;' name='RenameHost_".$name."' value='".set_post($objectName)."'>\n";
+            }else{
+                $field1 = "";
+            }
+            $field2 = $this->createRecordTypeSelection($record['type'],$name);
+            $field3 = "<input type='text' $dis value='".set_post($record['value'])."' name='ValueSelection_".$name."' style='width:250px;'>";
+            if(preg_match("/w/",$this->acl)){
+                $acl = image('images/lists/element.png[new]',"AddRecord_".$name,_("Add"));
+                $acl.= image('images/lists/trash.png',"RemoveRecord_".$name,_("Remove"));
+            }
 
-    /* Walk through all defined records 
-     */
-    $str.= "<table summary=''>";
-    foreach($obj['RECORDS'] as $id => $record){
-
-      /* Skip not selectable entries */
-      if(!isset($this->RecordTypes [$record['type']])) {
-        continue;
-      }
-
-      /* Create unique post name
-       */
-      $name = postEncode($objKey."|".$id);
-
-      /* Only first host entry name should be editable
-       */
-      if($hostNameOnce){
-        $hostNameOnce = false;  
-        $field1 ="<input $dis type='text' style='width:250px;' name='RenameHost_".$name."' value='".$objectName."'>\n";
-      }else{
-        $field1 = "";
-      }
-      $field2 = $this->createRecordTypeSelection($record['type'],$name);
-      $field3 = "<input type='text' $dis value='".$record['value']."' name='ValueSelection_".$name."' style='width:250px;'>";
-      if(preg_match("/w/",$this->acl)){
-        $acl = image('images/lists/element.png[new]',"AddRecord_".$name,_("Add"));
-        $acl.= image('images/lists/trash.png',"RemoveRecord_".$name,_("Remove"));
-      }
-
-      /* Display settings backwards for CNAMERecords 
-       */
-      if($record['type'] == "cNAMERecord"){
-        $str .= "
-          <tr>
-          <td style='width:250px;text-align:right;'>".$field3."</td>
-          <td style='width:90px;'>".$field2."</td>
-          <td>".$objectName."</td>
-          <td>".$acl."</td>
-          </tr>";
-      }else{ 
-        $str .= "
-          <tr>
-          <td style='width:75px;text-align:right;'>".$field1."</td>
-          <td style='width:90px;'>".$field2."</td>
-          <td>".$field3."</td>
-          <td>".$acl."</td>
-          </tr>";
-      }
+            /* Display settings backwards for CNAMERecords 
+             */
+            if($record['type'] == "cNAMERecord"){
+                $str .= "
+                    <tr>
+                    <td style='width:250px;text-align:right;'>".$field3."</td>
+                    <td style='width:90px;'>".$field2."</td>
+                    <td>".$objectName."</td>
+                    <td>".$acl."</td>
+                    </tr>";
+            }else{ 
+                $str .= "
+                    <tr>
+                    <td style='width:75px;text-align:right;'>".$field1."</td>
+                    <td style='width:90px;'>".$field2."</td>
+                    <td>".$field3."</td>
+                    <td>".$acl."</td>
+                    </tr>";
+            }
+        }
+        $str .="</table>";
+        return($str); 
     }
-    $str .="</table>";
-    return($str); 
-  }
 
 
-  /* Create selectbox with all available option types 
-   */
-  function createRecordTypeSelection($id,$refID){
-
-    if(preg_match("/w/",$this->acl)){
-      $str = "\n<select name='RecordTypeSelection_".$refID."' onChange='document.mainform.submit();'>";
-      foreach($this->RecordTypes as $type => $atr) {
-        if($id == $type){
-          $str .="\n<option value='".$type."' selected >".strtoupper(preg_replace("/record/i","",$type))."</option>";
+    /* Create selectbox with all available option types 
+     */
+    function createRecordTypeSelection($id,$refID){
+
+        if(preg_match("/w/",$this->acl)){
+            $str = "\n<select name='RecordTypeSelection_".$refID."' onChange='document.mainform.submit();'>";
+            foreach($this->RecordTypes as $type => $atr) {
+                if($id == $type){
+                    $str .="\n<option value='".$type."' selected >".strtoupper(preg_replace("/record/i","",$type))."</option>";
+                }else{
+                    $str .="\n<option value='".$type."'>".strtoupper(preg_replace("/record/i","",$type))."</option>";
+                }
+            }
+            $str.= "\n</select>";
         }else{
-          $str .="\n<option value='".$type."'>".strtoupper(preg_replace("/record/i","",$type))."</option>";
+            $str = "&nbsp;".strtoupper(preg_replace("/record/i","",$id));
         }
-      }
-      $str.= "\n</select>";
-    }else{
-      $str = "&nbsp;".strtoupper(preg_replace("/record/i","",$id));
+        return($str);
     }
-    return($str);
-  }
-
-
-  /* Check record types for strange inputs */
-  function checkRecordType($name, $type, $value)
-  {
-    $template = _("The syntax of entry %s (record type %s, value %s) is invalid!")." %s<br><br><i>"._("Example").":</i> %s";
-    
-    $message = Array();
-    switch($type) {
-      case 'aAAARecord': // RFC 3596
-        if(!tests::is_dns_name($name)) {
-          $message[] = sprintf($template, $name, $type, $value, _("Entry should be a DNS name."), "example");
-        }
-        if(!tests::is_ipv6($value)) {
-          $message[] = sprintf($template, $name, $type, $value, _("Value should be an IPv6 address."), "1fff:0000:0a88:85a3:0000:0000:ac1f:8001");
-        }
-        break;
-      case 'aRecord': // RFC 1035
-        if(!tests::is_dns_name($name)) {
-          $message[] = sprintf($template, $name, $type, $value, _("Entry should be a DNS name."), "example");
-        }
-        if(!tests::is_ip($value)) {
-          $message[] = sprintf($template, $name, $type, $value, _("Value should be an IPv4 address."), "192.168.1.10");
-        }
-        break;
-      case 'cNAMERecord': // RFC 1035
-        if(!tests::is_dns_name($name)) {
-          $message[] = sprintf($template, $name, $type, $value, _("Entry should be a DNS name."), "example");
-        }
-        if(!tests::is_dns_name($value)) {
-          $message[] = sprintf($template, $name, $type, $value, _("Value should be a DNS name."), "example");
-        }
-        break;
-      case 'mXRecord': // RFC 1035
-        //value: preference target
-        if(preg_match('/^(\S+)\s+(\S+)$/', $value, $matches)) {
-          if(!tests::is_id($matches[1])) {
-            $message[] = sprintf($template, $name, $type, $value, _("Value 1 should be a number."), "10 example");
-          }
-          if(!tests::is_dns_name($matches[2])) {
-            $message[] = sprintf($template, $name, $type, $value, _("Value 2 should be a DNS name."), "10 example");
-          }
-        } else {
-            $message[] = sprintf($template, $name, $type, $value, _("Value should be composed of 'preference target'."), "10 example");
-        }
-        break;
-      case 'nSRecord': // RFC 1035
-        if(!tests::is_dns_name($value)) {
-          $message[] = sprintf($template, $name, $type, $value, _("Value should be a DNS name."), "example");
-        }
-        break;
-      case 'pTRRecord': // RFC 1035
-        if(!tests::is_dns_name($value)) {
-          $message[] = sprintf($template, $name, $type, $value, _("Value should be a DNS name."), "example");
-        }
-        break;
-      case 'sRVRecord': // RFC 2782
-        if(!tests::is_dns_name($name)) {
-          $message[] = sprintf($template, $name, $type, $value, _("Entry should be a DNS name."), "example");
-        }
-        //value: priority weight port target
-        if(preg_match('/^([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+(\S+)$/', $value, $matches)) {
-          if(!tests::is_id($matches[1])) {
-            $message[] = sprintf($template, $name, $type, $value, _("Value 1 (priority) should be a number."), "0 5 5060 example");
-          }
-          if(!tests::is_id($matches[2])) {
-            $message[] = sprintf($template, $name, $type, $value, _("Value 2 (weight) should be a number."), "0 5 5060 example");
-          }
-          if(!tests::is_id($matches[3])) {
-            $message[] = sprintf($template, $name, $type, $value, _("Value 3 (port) should be a number."), "0 5 5060 example");
-          }
-          if(!tests::is_dns_name($matches[4])) {
-            $message[] = sprintf($template, $name, $type, $value, _("Value 4 (target) should be a DNS name."), "0 5 5060 example");
-          }
-        } else {
-            $message[] = sprintf($template, $name, $type, $value, _("Value should be composed of 'priority weight port target'."), "0 5 5060 example");
+
+
+    /* Check record types for strange inputs */
+    function checkRecordType($name, $type, $value)
+    {
+        $template = _("The syntax of entry %s (record type %s, value %s) is invalid!")." %s<br><br><i>"._("Example").":</i> %s";
+
+        $message = Array();
+        switch($type) {
+            case 'aAAARecord': // RFC 3596
+                if(!tests::is_dns_name($name)) {
+                    $message[] = sprintf($template, $name, $type, $value, _("Entry should be a DNS name."), "example");
+                }
+                if(!tests::is_ipv6($value)) {
+                    $message[] = sprintf($template, $name, $type, $value, _("Value should be an IPv6 address."), "1fff:0000:0a88:85a3:0000:0000:ac1f:8001");
+                }
+                break;
+            case 'aRecord': // RFC 1035
+                if(!tests::is_dns_name($name)) {
+                    $message[] = sprintf($template, $name, $type, $value, _("Entry should be a DNS name."), "example");
+                }
+                if(!tests::is_ip($value)) {
+                    $message[] = sprintf($template, $name, $type, $value, _("Value should be an IPv4 address."), "192.168.1.10");
+                }
+                break;
+            case 'cNAMERecord': // RFC 1035
+                if(!tests::is_dns_name($name)) {
+                    $message[] = sprintf($template, $name, $type, $value, _("Entry should be a DNS name."), "example");
+                }
+                if(!tests::is_dns_name($value)) {
+                    $message[] = sprintf($template, $name, $type, $value, _("Value should be a DNS name."), "example");
+                }
+                break;
+            case 'mXRecord': // RFC 1035
+                //value: preference target
+                if(preg_match('/^(\S+)\s+(\S+)$/', $value, $matches)) {
+                    if(!tests::is_id($matches[1])) {
+                        $message[] = sprintf($template, $name, $type, $value, _("Value 1 should be a number."), "10 example");
+                    }
+                    if(!tests::is_dns_name($matches[2])) {
+                        $message[] = sprintf($template, $name, $type, $value, _("Value 2 should be a DNS name."), "10 example");
+                    }
+                } else {
+                    $message[] = sprintf($template, $name, $type, $value, _("Value should be composed of 'preference target'."), "10 example");
+                }
+                break;
+            case 'nSRecord': // RFC 1035
+                if(!tests::is_dns_name($value)) {
+                    $message[] = sprintf($template, $name, $type, $value, _("Value should be a DNS name."), "example");
+                }
+                break;
+            case 'pTRRecord': // RFC 1035
+                if(!tests::is_dns_name($value)) {
+                    $message[] = sprintf($template, $name, $type, $value, _("Value should be a DNS name."), "example");
+                }
+                break;
+            case 'sRVRecord': // RFC 2782
+                if(!tests::is_dns_name($name)) {
+                    $message[] = sprintf($template, $name, $type, $value, _("Entry should be a DNS name."), "example");
+                }
+                //value: priority weight port target
+                if(preg_match('/^([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+(\S+)$/', $value, $matches)) {
+                    if(!tests::is_id($matches[1])) {
+                        $message[] = sprintf($template, $name, $type, $value, _("Value 1 (priority) should be a number."), "0 5 5060 example");
+                    }
+                    if(!tests::is_id($matches[2])) {
+                        $message[] = sprintf($template, $name, $type, $value, _("Value 2 (weight) should be a number."), "0 5 5060 example");
+                    }
+                    if(!tests::is_id($matches[3])) {
+                        $message[] = sprintf($template, $name, $type, $value, _("Value 3 (port) should be a number."), "0 5 5060 example");
+                    }
+                    if(!tests::is_dns_name($matches[4])) {
+                        $message[] = sprintf($template, $name, $type, $value, _("Value 4 (target) should be a DNS name."), "0 5 5060 example");
+                    }
+                } else {
+                    $message[] = sprintf($template, $name, $type, $value, _("Value should be composed of 'priority weight port target'."), "0 5 5060 example");
+                }
+                break;
         }
-        break;
+        return $message;
     }
-    return $message;
-  }
 
 
-  function remove_from_parent()
-  {
-  }
+    function remove_from_parent()
+    {
+    }
 
 }