Code

Fixed Terminal NTPserver .... syslogserver default to inherited
[gosa.git] / plugins / admin / systems / class_terminalGeneric.inc
index c2689cf067098a20cb25a1425f320630c348d5c1..812b4f90f8ea6dd9a1d13e6f56c6ca9c5ce5d072 100644 (file)
@@ -12,14 +12,14 @@ class termgeneric extends plugin
   var $gotoTerminalPath= "";
   var $gotoSwapServer= "";
   var $gotoSyslogServer= "";
-  var $gotoNtpServer= "";
+  var $gotoSyslogServers = array();
+  var $gotoNtpServer= array();
+  var $gotoNtpServers= array();
   var $gotoSndModule= "";
   var $gotoFloppyEnable= "";
   var $gotoCdromEnable= "";
   var $ghCpuType= "-";
   var $ghMemSize= "-";
-  var $macAddress= "";
-  var $ipHostNumber= "";
   var $ghUsbSupport= "-";
   var $ghNetNic= array();
   var $ghIdeDev= array();
@@ -27,28 +27,30 @@ class termgeneric extends plugin
   var $ghGfxAdapter= "-";
   var $ghSoundAdapter= "-";
   var $gotoLastUser= "-";
-
+  var $netConfigDNS;
   /* Needed values and lists */
   var $base= "";
   var $cn= "";
   var $orig_dn= "";
 
+  var $inheritTimeServer = true;
+
   /* Plugin side filled */
   var $modes= array();
 
   /* attribute list for save action */
   var $ignore_account= TRUE;
-  var $attributes= array("gotoMode", "gotoTerminalPath", "macAddress",
+  var $attributes= array("gotoMode", "gotoTerminalPath", 
       "gotoSwapServer", "gotoSyslogServer", "gotoNtpServer",
       "gotoFloppyEnable", "gotoCdromEnable", "cn", "gotoSndModule",
-      "ghCpuType", "ghMemSize", "ipHostNumber", "ghUsbSupport",
+      "ghCpuType", "ghMemSize","ghUsbSupport",
       "ghGfxAdapter", "ghSoundAdapter", "gotoLastUser");
   var $objectclasses= array("top", "gotoTerminal", "GOhard");
 
   function termgeneric ($config, $dn= NULL)
   {
     plugin::plugin ($config, $dn);
-
+    $this->netConfigDNS = new termDNS($this->config,$this->dn,$this->objectclasses);
     /* Read arrays */
     foreach (array("ghNetNic", "ghIdeDev", "ghScsiDev") as $val){
       if (!isset($this->attrs[$val])){
@@ -59,6 +61,30 @@ class termgeneric extends plugin
       }
     }
 
+    /* Create used ntp server array */
+    $this->gotoNtpServer= array();
+    if(isset($this->attrs['gotoNtpServer'])){
+      $this->inheritTimeServer = false;
+      unset($this->attrs['gotoNtpServer']['count']);
+      foreach($this->attrs['gotoNtpServer'] as $server){
+        $this->gotoNtpServer[$server] = $server;
+      }
+    }
+
+    /* Set inherit checkbox state */
+    if((in_array("default",$this->gotoNtpServer)) || (count($this->gotoNtpServer)==0)){
+      $this->inheritTimeServer = true;
+      $this->gotoNtpServer=array();
+    }
+
+    /* Create available ntp options */
+    $this->gotoNtpServers = $this->config->data['SERVERS']['NTP'];
+    foreach($this->gotoNtpServers as $key => $server){
+      if($server == "default"){
+        unset($this->gotoNtpServers[$key]);
+      }
+    }
+
     $this->modes["disabled"]= _("disabled");
     $this->modes["text"]= _("text");
     $this->modes["graphic"]= _("graphic");
@@ -71,13 +97,23 @@ class termgeneric extends plugin
       $this->base= preg_replace ("/^[^,]+,[^,]+,[^,]+,/", "", $this->dn);
     }
 
+    /* Create an array of all Syslog servers */
+    $tmp = $this->config->data['SERVERS']['SYSLOG'];
+    foreach($tmp as $server){
+      $visible = $server;
+      if($server == "default") {
+        $visible = "["._("inherited")."]";
+      }
+      $this->gotoSyslogServers[$server] = $visible;
+    }
+
     $this->orig_dn= $this->dn;
   }
 
   function execute()
   {
-       /* Call parent execute */
-       plugin::execute();
+    /* Call parent execute */
+    plugin::execute();
 
     /* Do we need to flip is_account state? */
     if (isset($_POST['modify_state'])){
@@ -87,11 +123,11 @@ class termgeneric extends plugin
     if (isset($_POST['action'])){
       switch($_POST['saction']){
         case 'wake':
-          $cmd= search_config($this->config->data['TABS'], "terminfo", "WAKECMD");
+          $cmd= search_config($this->config->data['TABS'], "termgeneric", "WAKECMD");
           if ($cmd == ""){
             print_red(_("No WAKECMD definition found in your gosa.conf"));
           } else {
-            exec ($cmd." ".$this->macAddress, $dummy, $retval);
+            exec ($cmd." ".$this->netConfigDNS->macAddress, $dummy, $retval);
             if ($retval != 0){
               print_red(sprintf(_("Execution of '%s' failed!"), $cmd));
             }
@@ -99,7 +135,7 @@ class termgeneric extends plugin
           break;
 
         case 'reboot':
-          $cmd= search_config($this->config->data['TABS'], "terminfo", "REBOOTCMD");
+          $cmd= search_config($this->config->data['TABS'], "termgeneric", "REBOOTCMD");
           if ($cmd == ""){
             print_red(_("No REBOOTCMD definition found in your gosa.conf"));
           } else {
@@ -111,7 +147,7 @@ class termgeneric extends plugin
           break;
 
         case 'halt':
-          $cmd= search_config($this->config->data['TABS'], "terminfo", "HALTCMD");
+          $cmd= search_config($this->config->data['TABS'], "termgeneric", "HALTCMD");
           if ($cmd == ""){
             print_red(_("No HALTCMD definition found in your gosa.conf"));
           } else {
@@ -124,6 +160,31 @@ class termgeneric extends plugin
       }
     }
 
+    /* Base select dialog */
+    $once = true;
+    foreach($_POST as $name => $value){
+      if(preg_match("/^chooseBase/",$name) && $once){
+        $once = false;
+        $this->dialog = new baseSelectDialog($this->config);
+        $this->dialog->setCurrentBase($this->base);
+      }
+    }
+
+    /* Dialog handling */
+    if(is_object($this->dialog)){
+      /* Must be called before save_object */
+      $this->dialog->save_object();
+
+      if($this->dialog->isClosed()){
+        $this->dialog = false;
+      }elseif($this->dialog->isSelected()){
+        $this->base = $this->dialog->isSelected();
+        $this->dialog= false;
+      }else{
+        return($this->dialog->execute());
+      }
+    }
+
     /* Do we represent a valid terminal? */
     if (!$this->is_account && $this->parent == NULL){
       $display= "<img alt=\"\" src=\"images/stop.png\" align=middle>&nbsp;<b>".
@@ -131,6 +192,18 @@ class termgeneric extends plugin
       return($display);
     }
 
+    /* Add new ntp Server to our list */
+    if((isset($_POST['addNtpServer'])) && (isset($_POST['gotoNtpServers']))){
+      $this->gotoNtpServer[$_POST['gotoNtpServers']] = $_POST['gotoNtpServers'];
+    }
+
+    /* Delete selected NtpServer for list of used servers  */
+    if((isset($_POST['delNtpServer'])) && (isset($_POST['gotoNtpServerSelected']))){
+      foreach($_POST['gotoNtpServerSelected'] as $name){
+        unset($this->gotoNtpServer[$name]);
+      } 
+    }
+
     /* Fill templating stuff */
     $smarty= get_smarty();
     $smarty->assign("cn", $this->cn);
@@ -138,6 +211,9 @@ class termgeneric extends plugin
 
     $smarty->assign("bases", $this->config->idepartments);
 
+    /* tell smarty the inherit checkbox state */
+    $smarty->assign("inheritTimeServer",$this->inheritTimeServer);
+
     /* Check if terminal is online */
     $query= "fping -q -r 1 -t 500 ".$this->cn;
     exec ($query, $dummy, $retval);
@@ -171,9 +247,12 @@ class termgeneric extends plugin
       }
     }
   
-    $smarty->assign("nfsservers", $tmp2);
-    $smarty->assign("syslogservers", $this->config->data['SERVERS']['SYSLOG']);
-    $smarty->assign("ntpservers", $this->config->data['SERVERS']['NTP']);
+    $smarty->assign("nfsservers",     $tmp2);
+
+    
+
+    $smarty->assign("syslogservers",  $this->gotoSyslogServers);
+    $smarty->assign("ntpservers",     $this->gotoNtpServers);
 
     /* Variables */
     foreach(array("base", "gotoMode", "gotoTerminalPath", "gotoSwapServer",
@@ -182,11 +261,9 @@ class termgeneric extends plugin
       $smarty->assign($val."_select", $this->$val);
       $smarty->assign($val."ACL", chkacl($this->acl, $val));
     }
-    $smarty->assign("ipHostNumber", $this->ipHostNumber);
-    $smarty->assign("macAddress", $this->macAddress);
 
     /* Show main page */
-    $smarty->assign("netconfig", dirname(__FILE__)."/network.tpl");
+    $smarty->assign("netconfig", $this->netConfigDNS->execute());
     $smarty->assign("actionACL", chkacl($this->acl, 'action'));
     return($smarty->fetch (get_template_path('terminal.tpl', TRUE)));
   }
@@ -196,14 +273,14 @@ class termgeneric extends plugin
     
     $ldap= $this->config->get_ldap_link();
     $ldap->cd($this->dn);
-    $ldap->cat($this->dn);
+    $ldap->cat($this->dn, array('dn'));
     if($ldap->count()){
-
-      $ldap->rmdir($this->dn);
-      show_ldap_error($ldap->get_error());
+      $this->netConfigDNS->remove_from_parent();
+      $ldap->rmDir($this->dn);
+      show_ldap_error($ldap->get_error(), _("Removing terminal failed"));
 
       /* Optionally execute a command after we're done */
-      $this->handle_post_events("remove");
+      $this->handle_post_events("remove", array("macAddress" => $this->netConfigDNS->macAddress));
 
       /* Delete references to object groups */
       $ldap->cd ($this->config->current['BASE']);
@@ -221,7 +298,7 @@ class termgeneric extends plugin
   function save_object()
   {
     plugin::save_object();
-
+    $this->netConfigDNS->save_object();
     /* Save base, since this is no LDAP attribute */
     if (isset($_POST['base']) && chkacl($this->acl, "create") == ""){
       $this->base= $_POST['base'];
@@ -230,13 +307,23 @@ class termgeneric extends plugin
     /* Save terminal path to parent since it is used by termstartup, too */
     $this->parent->by_object['termstartup']->gotoTerminalPath=
       $this->gotoTerminalPath;
+  
+    if(isset($_POST['termgeneric_posted'])){
+      if(isset($_POST["inheritTimeServer"])){
+        $this->inheritTimeServer = true;
+      }else{
+        $this->inheritTimeServer = false;
+      }
+    }  
   }
 
 
   /* Check supplied data */
   function check()
   {
-    $message= array();
+    /* Call common method to give check the hook */
+    $message= plugin::check();
+    $message= array_merge($message, $this->netConfigDNS->check());
 
     /* Permissions for that base? */
     $this->dn= "cn=".$this->cn."ou=terminals,ou=systems,".$this->base;
@@ -270,6 +357,11 @@ class termgeneric extends plugin
       }
     }
 
+    /* Check for valid ntpServer selection */
+    if((!$this->inheritTimeServer) && (!count($this->gotoNtpServer))){
+      $message[]= _("There must be at least one NTP server selected, or the inherit mode activated.");
+    }
+
     return ($message);
   }
 
@@ -306,6 +398,16 @@ class termgeneric extends plugin
       $this->attrs= $attrs;
     }
 
+    if($this->inheritTimeServer){
+      $this->attrs['gotoNtpServer'] = array();
+    }else{  
+      /* Set ntpServers */
+      $this->attrs['gotoNtpServer'] = array();
+      foreach($this->gotoNtpServer as $server){
+        $this->attrs['gotoNtpServer'][] = $server;
+      }
+    }
+
     /* Write back to ldap */
     $ldap= $this->config->get_ldap_link();
     if ($this->orig_dn == 'new'){
@@ -319,10 +421,14 @@ class termgeneric extends plugin
         $this->move($this->orig_dn, $this->dn);
       }
       $ldap->cd($this->dn);
-      $ldap->modify($this->attrs);
+      $this->cleanup();
+      $ldap->modify ($this->attrs); 
+
       $this->handle_post_events("modify");
     }
-    show_ldap_error($ldap->get_error());
+    $this->netConfigDNS->cn = $this->cn;
+    $this->netConfigDNS->save($this->dn);
+    show_ldap_error($ldap->get_error(), _("Saving terminal failed"));
 
     /* Optionally execute a command after we're done */
     $this->postcreate();