Code

Column name changed.
[gosa.git] / gosa-plugins / goto / admin / systems / goto / class_workstationStartup.inc
index 91ffbb1d01f35b4919361c509082ce049f909ef2..ea4db08a490e13d67b80f8cc1c65ac5ff10d370c 100644 (file)
@@ -61,7 +61,7 @@ class workstartup extends plugin
   {
     /* Check if FAI is active */
     $tmp= $config->search("faiManagement", "CLASS",array('menu','tabs'));
-    if(!empty($tmp)){
+    if(!empty($tmp) && class_available("faiManagement")){
       $this->fai_activated = TRUE;
     }else{
       $this->attributes = array("gotoLdapServer", "gotoBootKernel", "gotoKernelParameters", "gotoShare");
@@ -71,7 +71,7 @@ class workstartup extends plugin
     plugin::plugin ($config, $dn, $parent);
 
     /* Check for si daemon */
-    $this->si_active = isset($this->config->current['GOSA_SI']) && !empty($this->config->current['GOSA_SI']);
+    $this->si_active = $this->config->get_cfg_value("gosaSupportURI") != "";
 
     /* Check object group membership */
     if(!isset($this->parent->by_object['ogroup'])){
@@ -245,9 +245,8 @@ class workstartup extends plugin
         }
         $this->FAIdebianMirror = "auto";
         $this->FAIrelease = key($this->cache['SERVERS'][$this->FAIdebianMirror]);
-        $this->cache =array();
+        $this->cache['CLASSES'] = array();
         $this->update_fai_cache();
-        
       }
   
       /* Check if the current mirror is available 
@@ -258,40 +257,10 @@ class workstartup extends plugin
           msg_dialog::display(_("Error"), sprintf(_("FAI release '%s' is not available on mirror '%s' - setting to release '%s'!"), $this->FAIrelease, $this->FAIdebianMirror,$new_release), ERROR_DIALOG);
         }
         $this->FAIrelease = $new_release;
-        $this->cache =array();
+        $this->cache['CLASSES'] = array();
         $this->update_fai_cache();
       }
     }
-
-#   /* Get list of boot kernels */
-#   if (isset($this->config->data['TABS'])){
-#     $command= $this->config->search(get_class($this), "KERNELS",array('tabs'));
-#     if (!check_command($command)){
-#       $message[]= sprintf(_("Command '%s', specified as KERNELS hook for plugin '%s' doesn't seem to exist."), $command,
-#           get_class($this));
-#     } else {
-#       $fh= popen($command, "r");
-#       while (!feof($fh)) {
-#         $buffer= trim(fgets($fh, 256));
-#         if(!empty($buffer)){
-#           $name=$value = $buffer;
-#           if(preg_match("/:/",$buffer)){
-#             $name = preg_replace("/:.*$/","",$buffer);
-#             $value= preg_replace("/^.*:/","",$buffer);
-#             $this->gotoBootKernels[$name]= $name.":".$value;
-#           }else{
-#             $this->gotoBootKernels[$name]= $value;
-#           }
-#         }
-#       }
-#       pclose($fh);
-#     }
-#   }
-#
-#    /* Turn to default, if we've nothing to inherit */
-#    if (!isset($this->gotoBootKernels['default-inherited']) && $this->gotoBootKernel == "default-inherited"){
-#      $this->gotoBootKernel= "default";
-#    }
   }
 
   
@@ -320,15 +289,6 @@ class workstartup extends plugin
       new log("view","workstation/".get_class($this),$this->dn);
     }
 
-    /* Do we need to flip is_account state? */
-    if(isset($_POST['modify_state'])){
-      if($this->is_account && $this->acl_is_removeable()){
-        $this->is_account= FALSE;
-      }elseif(!$this->is_account && $this->acl_is_createable()){
-        $this->is_account= TRUE;
-      }
-    }
-
     /* Do we represent a valid terminal? */
     if (!$this->is_account && $this->parent === NULL){
       $display= "<img alt=\"\" src=\"images/small-error.png\" align=middle>&nbsp;<b>".
@@ -338,14 +298,14 @@ class workstartup extends plugin
 
     /* Add module */
     if (isset ($_POST['add_module'])){
-      if ($_POST['module'] != "" && $this->acl_is_writeable("gotoModule")){
+      if ($_POST['module'] != "" && $this->acl_is_writeable("gotoModules")){
         $this->add_list ($this->gotoModules, $_POST['module']);
       }
     }
 
     /* Delete module */
     if (isset ($_POST['delete_module'])){
-      if (count($_POST['modules_list']) && $this->acl_is_writeable("gotoModule")){
+      if (count($_POST['modules_list']) && $this->acl_is_writeable("gotoModules")){
         $this->del_list ($this->gotoModules, $_POST['modules_list']);
       }
     }
@@ -371,7 +331,7 @@ class workstartup extends plugin
         }
 
         if((isset($this->FAIclassInfo[$_POST['FAIclassesSel']]['FAIpartitionTable']))&&($found>0)){
-          msg_dialog(_("Error"), _("There is already a profile containing a partition table in your configuration!") , ERROR_DIALOG);
+          msg_dialog::display(_("Error"), _("There is already a profile containing a partition table in your configuration!") , ERROR_DIALOG);
         }else{
           $this->FAIclass[$_POST['FAIclassesSel']]=$_POST['FAIclassesSel'];
         }
@@ -476,12 +436,13 @@ class workstartup extends plugin
     /* if $_POST['gotoShareAdd'] is set, we will try to add a new entry
      * This entry will be, a combination of mountPoint and sharedefinitions
      */
-    if((isset($_POST['gotoShareAdd'])) && ($this->acl_is_writeable("gotoShare"))) {
+    if((isset($_POST['gotoShareAdd'])) && isset($_POST['gotoShareSelection']) && ($this->acl_is_writeable("gotoShare"))) {
       /* We assign a share to this user, if we don't know where to mount the share */
       if((!isset($_POST['gotoShareMountPoint']))||(empty($_POST['gotoShareMountPoint']))||(preg_match("/[\|]/i",$_POST['gotoShareMountPoint']))){
-        msg_dialog(_("Error"), msgPool::required(_("Mount point")), ERROR_DIALOG);
+        msg_dialog::display(_("Error"), msgPool::required(_("Mount point")), ERROR_DIALOG);
       }else{
-        if(count($this->gotoAvailableShares)){
+    
+        if(isset($this->gotoAvailableShares[$_POST['gotoShareSelection']])){
           $a_share = $this->gotoAvailableShares[$_POST['gotoShareSelection']];
           $s_mount = $_POST['gotoShareMountPoint'];
           /* Preparing the new assignment */
@@ -509,7 +470,10 @@ class workstartup extends plugin
     $SelectBoxLdapServer->SetHeight(130);
 
     /* Add new ldap server to the list */
-    if(!$this->gotoLdap_inherit && isset($_POST['add_ldap_server']) && isset($_POST['ldap_server_to_add'])){
+    if($this->acl_is_writeable("gotoLdapServer") && 
+        !$this->gotoLdap_inherit && 
+        isset($_POST['add_ldap_server']) && 
+        isset($_POST['ldap_server_to_add'])){
       if(isset($this->gotoLdapServerList[$_POST['ldap_server_to_add']])){
         $to_add = $this->gotoLdapServerList[$_POST['ldap_server_to_add']];
         if(!in_array($to_add,$this->gotoLdapServers)){
@@ -519,7 +483,7 @@ class workstartup extends plugin
     }
     
     /* Move ldap servers up and down */
-    if(!$this->gotoLdap_inherit){
+    if(!$this->gotoLdap_inherit && $this->acl_is_writeable("gotoLdapServer")){
       foreach($_POST as $name => $value){
         if(preg_match("/sort_ldap_up_/",$name)){
           $id = preg_replace("/^sort_ldap_up_([0-9]*)_(x|y)$/","\\1",$name);
@@ -551,17 +515,20 @@ class workstartup extends plugin
     }
   
     /* Add Entries */
-    foreach($this->gotoLdapServers as $key => $server){
-      /* Announce missing entries */
-      if(!in_array($server,$this->gotoLdapServerList)){
-        $server = $server."&nbsp;<font style='color:red'>(missing)</font>";
-      }
+    if($this->acl_is_readable("gotoLdapServer")){
 
-      /* Convert old style entry */
-      if (!preg_match('%:ldap://%', $server)){
-        $server= "ldap://".preg_replace('/^([^:]+):/', '\1/', $server);
+      foreach($this->gotoLdapServers as $key => $server){
+
+        /* Announce missing entries */
+        if(!in_array($server,$this->gotoLdapServerList)){
+          $server = $server."&nbsp;<font style='color:red'>(missing)</font>";
+        }
 
-      /* Beautify new style entries */
+        /* Convert old style entry */
+        if (!preg_match('%:ldaps?://%', $server)){
+          $server= "ldap://".preg_replace('/^([^:]+):/', '\1/', $server);
+
+        /* Beautify new style entries */
       } else {
         $server= preg_replace("/^[^:]+:/", "", $server);
       }
@@ -573,6 +540,7 @@ class workstartup extends plugin
               "<input class='center' type='image' src='images/lists/sort-down.png' name='sort_ldap_down_".$key."'>&nbsp;".
               "<input class='center' type='image' src='images/lists/trash.png' name='gotoLdapRemove_".$key."'>",
               "attach" => "style='text-align:right;width:40px;border-right:0px;'")));
+      }    
     }    
 
     if($this->gotoLdap_inherit){
@@ -586,7 +554,7 @@ class workstartup extends plugin
       if(!in_array($entry,$this->gotoLdapServers)){
 
         /* Convert old style entry */
-        if (!preg_match('%:ldap://%', $entry)){
+        if (!preg_match('%:ldap[s]*://%', $entry)){
           $entry= "ldap://".preg_replace('/^([^:]+):/', '\1/', $entry);
 
         /* Beautify new style entries */
@@ -786,7 +754,9 @@ class workstartup extends plugin
     }elseif(isset($this->parent->by_object['servgeneric'])){
       $this->objectclasses = array("GOhard","gotoWorkstationTemplate");
     }else{
-      print "Object Type Configuration : unknown";
+      msg_dialog::display(_("Fatal error"),
+          "Object Type Configuration is unknown. Please contact the GOsa developers.",
+          FATAL_ERROR_DIALOG);
       exit();
     }
 
@@ -802,7 +772,7 @@ class workstartup extends plugin
       $ldap= $this->config->get_ldap_link();
 
       /* Strip relevant part from dn, keep trailing ',' */
-      $tmp= preg_replace("/^cn=[^,]+,".get_ou('terminalou')."/i", "", $this->dn);
+      $tmp= preg_replace("/^cn=[^,]+,".get_ou('terminalRDN')."/i", "", $this->dn);
       $tmp= preg_replace("/".$this->config->current['BASE']."$/i", "", $tmp);
 
       /* Walk from top to base and try to load default values for
@@ -810,7 +780,7 @@ class workstartup extends plugin
       while (TRUE){
         $tmp= preg_replace ("/^[^,]+,/", "", $tmp);
 
-        $ldap->cat("cn=default,".get_ou('terminalou').$tmp.
+        $ldap->cat("cn=default,".get_ou('terminalRDN').$tmp.
             $this->config->current['BASE'], array('gotoTerminalPath'));
         $attrs= $ldap->fetch();
         if (isset($attrs['gotoTerminalPath'])){
@@ -906,8 +876,13 @@ class workstartup extends plugin
         $this->attrs['FAIclass']        = array();
         $this->attrs['FAIdebianMirror'] = array();
       }
-    }
+    }else{
 
+      /* Don't touch FAI objects if something went wrong with the si daemon.
+       */
+      if(isset($this->attrs['FAIclass'])) unset($this->attrs['FAIclass']);
+      if(isset($this->attrs['FAIdebianMirror'])) unset($this->attrs['FAIdebianMirror']);
+    }
 
     /* prepare share settings */
     $tmp = array();
@@ -1095,14 +1070,8 @@ class workstartup extends plugin
      */
     if($force || !isset($this->cache['SERVERS'])){
 
-      /* Only add inherit option, if we are part in an object group
-       */
-      if($this->member_of_ogroup){
-        $this->cache['SERVERS']['inherited']=array();
-      }
-
       $o_queue = new gosaSupportDaemon();
-      $tmp = $o_queue->FAI_get_server(); 
+      $tmp = $o_queue->FAI_get_server();
       if($o_queue->is_error()){
         msg_dialog::display(_("Service infrastructure"),msgPool::siError($o_queue->get_error()),ERROR_DIALOG);
         $this->si_fai_action_failed = TRUE;
@@ -1110,13 +1079,22 @@ class workstartup extends plugin
         return;
       }else{
         foreach($tmp as $entry){
-          $rel = $entry['RELEASE'];
+          $rel = $entry['FAI_RELEASE'];
           $this->cache['SERVERS']['auto'][$rel] = $rel;
           $this->cache['SERVERS'][$entry['SERVER']][$rel] = $rel;
+          uksort($this->cache['SERVERS']['auto'], 'strnatcasecmp');
+          uksort($this->cache['SERVERS'][$entry['SERVER']], 'strnatcasecmp');
         }
       }
     }
 
+    /* Ensure that our selection is valid, else we get several PHP warnings 
+        if there is no FAI configuration at all.
+     */
+    if(!isset($this->cache['SERVERS'][$this->FAIdebianMirror])){
+      $this->cache['SERVERS'][$this->FAIdebianMirror][''] ='';
+    }
+
     /* Build up arrays, without checks */
     if(!$first_call){
 
@@ -1143,7 +1121,7 @@ class workstartup extends plugin
       $release = $this->FAIrelease;
     }
 
-    if($force || !isset($this->cache['CLASSES'][$release])){
+    if($force || !isset($this->cache['CLASSES'][$release]) && $release != ""){
 
       /* Get the list of available servers and their releases.
        */
@@ -1193,10 +1171,19 @@ class workstartup extends plugin
           }
         }
       }
+      uksort($this->cache['SERVERS'], 'strnatcasecmp');
+
+      /* Only add inherit option, if we are part in an object group
+       */
+      if($this->member_of_ogroup){
+        $this->cache['SERVERS'] = array_merge(array('inherited' => array()),$this->cache['SERVERS']);
+      }
     }
 
     /* Get list of available kernel for this release 
      */
+    if(!isset($this->cache['KERNELS'])) $this->cache['KERNELS'] = array();
+
     if($force || !isset($this->cache['KERNELS'][$release])){
       $o_queue = new gosaSupportDaemon();
       $tmp = $o_queue->FAI_get_kernels($release);
@@ -1208,8 +1195,8 @@ class workstartup extends plugin
         if(empty($kernel)) continue;
         $this->cache['KERNELS'][$release][$kernel]=$kernel;
       }
+      ksort($this->cache['KERNELS'][$release]);
     }
-    ksort($this->cache['KERNELS'][$release]);
   }
 
 
@@ -1219,10 +1206,12 @@ class workstartup extends plugin
   function get_invalid_classes($classes)
   {
     $this->update_fai_cache();
-    if($this->FAIdebianMirror == "inherited"){
+    if($this->FAIdebianMirror == "inherited" && isset($this->cache['CLASSES'][$this->InheritedFAIrelease])){
       $release_classes = $this->cache['CLASSES'][$this->InheritedFAIrelease];
-    }else{
+    }elseif(isset($this->cache['CLASSES'][$this->FAIrelease])){
       $release_classes = $this->cache['CLASSES'][$this->FAIrelease];
+    }else{
+      $release_classes = array();
     }
 
 
@@ -1245,10 +1234,12 @@ class workstartup extends plugin
   {
     $this->update_fai_cache();
 
-    if($this->FAIdebianMirror == "inherited"){
+    if($this->FAIdebianMirror == "inherited" && isset($this->cache['CLASSES'][$this->InheritedFAIrelease])){
       $classes = $this->cache['CLASSES'][$this->InheritedFAIrelease];
-    }else{
+    }elseif(isset($this->cache['CLASSES'][$this->FAIrelease])){
       $classes = $this->cache['CLASSES'][$this->FAIrelease];
+    }else{
+      $classes = array();
     }
 
     $Abbr ="";
@@ -1315,14 +1306,14 @@ class workstartup extends plugin
   function GetHookElements()
   {
     $ret = array();
-    $cmd= $this->config->search("servrepository", "REPOSITORY_HOOK",array('tabs'));
+    $cmd= $this->config->search("servrepository", "repositoryBranchHook",array('tabs'));
     if(!empty($cmd)){
       $res = shell_exec($cmd);
       $res2 = trim($res);
       if((!$res)){
-        msg_dialog(_("Configuration error"), msgPool::cmdexecfailed("REPOSITORY_HOOK", $cmd), ERROR_DIALOG);
+        msg_dialog::display(_("Configuration error"), msgPool::cmdexecfailed("repositoryBranchHook", $cmd), ERROR_DIALOG);
       }elseif(empty($res2)){
-        msg_dialog(_("Configuration error"), _("REPOSITORY_HOOK returned no result!"), ERROR_DIALOG);
+        msg_dialog::display(_("Configuration error"), _("repositoryBranchHook returned no result!"), ERROR_DIALOG);
       }else{
         $tmp = split("\n",$res);
         foreach($tmp as $line){