Code

Updated preg_matches
[gosa.git] / plugins / admin / systems / class_systemManagement.inc
index 8455a6a10c7b448e6fff01e13d523f3eaffd0bc1..4d210ca563e47a6d75fcad561d11b27c3a2c3880 100644 (file)
@@ -83,6 +83,9 @@ class systems extends plugin
       }elseif(preg_match("/user_setpwd_.*/i",$key)){
         $s_action="change_pw";
         $s_entry  = preg_replace("/user_setpwd_/i","",$key);
+      }elseif(preg_match("/gen_cd_.*/i",$key)){
+        $s_action="gen_cd";
+        $s_entry  = preg_replace("/gen_cd_/i","",$key);
       }elseif(preg_match("/newsystem_.*/i",$key)){
         $s_action="newsystem";
         $s_entry  = preg_replace("/newsystem_/i","",$key);
@@ -125,6 +128,12 @@ class systems extends plugin
     /* Create new default terminal 
      * Or create specified object of selected system type, from given incoming object  
      */
+
+    $save_object_directly = false;
+    if(($s_action == "SelectedSystemType") && (isset($_POST['ObjectGroup']) && ($_POST['ObjectGroup'] != "none"))){
+      $save_object_directly = true;
+    }
+    
     if (isset($_POST['create_system'])||$s_action=="newsystem"||$s_action == "SelectedSystemType") {
 
       /* If the current entry is an incoming object 
@@ -180,7 +189,7 @@ class systems extends plugin
 
       /* Find out more about the object type */
       $ldap= $this->config->get_ldap_link();
-      $ldap->cat($this->dn);
+      $ldap->cat($this->dn, array('objectClass'));
       $attrs= $ldap->fetch();
       $type= $this->get_system_type($attrs['objectClass']);
 
@@ -213,6 +222,69 @@ class systems extends plugin
       }
     }
 
+    /********************
+      Create FAI CD ...   
+     ********************/
+    if ($s_action=="gen_cd"){
+echo "ACL CHECK!";
+      $this->dn= $this->terminals[$s_entry]['dn'];
+      $_SESSION['objectinfo']= $this->dn;
+      return ($smarty->fetch(get_template_path('gencd.tpl', TRUE)));
+    }
+
+
+    /* Start CD-Creation */
+    if (isset($_POST["cd_create"])){
+echo "ACL CHECK!";
+      $smarty->assign("src", "?plug=".$_GET['plug']."&PerformIsoCreation");
+      return ($smarty->fetch(get_template_path('gencd_frame.tpl', TRUE)));
+    }
+
+    if ($this->dn != "" && isset($_GET['PerformIsoCreation'])){
+echo "ACL CHECK!";
+
+      $command= search_config($this->config->data['TABS'], "workgeneric", "ISOCMD");
+      if (check_command($command)){
+        @DEBUG (DEBUG_SHELL, __LINE__, __FUNCTION__, __FILE__, $command, "Execute");
+
+        $dsc= array(0 => array("pipe", "r"), 1 => array("pipe", "w"), 2 => array("pipe", "w"));
+        echo "<html><head>";
+        echo "<script language=\"javascript\" src=\"include/focus.js\" type=\"text/javascript\"></script>";
+        echo "</head>";
+        echo "<body onLoad='scrollDown()'><pre>";
+        $process= proc_open($command, $dsc, $pipes, '/tmp');
+        if (is_resource($process)) {
+          fclose($pipes[0]);
+          while (!feof($pipes[1])){
+            echo fgets($pipes[1], 1024);
+            flush();
+          }
+        }
+        $buffer= stream_get_contents($pipes[2]);
+        fclose($pipes[1]);
+        fclose($pipes[2]);
+        $ret= proc_close($process);
+        echo "</pre>";
+        
+        if ($ret == 0){
+          echo "hier der runterladen button";
+        } else {
+          echo "<h1 style='color:red'>"._("Creating the image failed. Please see the report below.")."</h1>";
+          echo "<pre style='color:red'>$buffer</pre>";
+        }
+
+      } else {
+        $tmp= "<h1 style='color:red'>".sprintf(_("Command '%s', specified for ISO creation doesn't seem to exist."), $command)."</h1>";
+        echo $tmp;
+      }
+
+      echo "<button onClick='clearTimeout(timeout)'>"._("Disable auto scroll")."</button>";
+      echo "</body></html>";
+
+      exit;
+    }
+
+
 
     /********************
       Change password ...   
@@ -304,7 +376,7 @@ class systems extends plugin
 
         /* Lock the current entry, so nobody will edit it during deletion */
         add_lock ($this->dn, $this->ui->dn);
-        $smarty->assign("warning", sprintf(_("You're about to delete all information about the component at '%s'."), LDAP::fix($this->dn)));
+        $smarty->assign("warning", sprintf(_("You're about to delete all information about the component at '%s'."), @LDAP::fix($this->dn)));
         return($smarty->fetch(get_template_path('remove.tpl', TRUE)));
       } else {
 
@@ -327,7 +399,7 @@ class systems extends plugin
 
         /* Find out more about the object type */
         $ldap= $this->config->get_ldap_link();
-        $ldap->cat($this->dn);
+        $ldap->cat($this->dn, array('objectClass'));
         $attrs= $ldap->fetch();
         $type= $this->get_system_type($attrs['objectClass']);
 
@@ -386,17 +458,44 @@ class systems extends plugin
     /* Finish user edit is triggered by the tabulator dialog, so
        the user wants to save edited data. Check and save at this
        point. */
-    if ((isset($_POST['edit_finish'])) && (isset($this->systab->config))){
+    if ((isset($_POST['edit_finish'])) && (isset($this->systab->config)) || $save_object_directly){
 
       /* Check tabs, will feed message array */
-      $message= $this->systab->check();
+      $message = array();
+      if(!$save_object_directly){
+        $message = $this->systab->check();
+      }else{
+        $found = false;
+  
+        /* Set gotoMode to active if we there was an ogroup selected . (save_object_directly) */
+        foreach(array("workgeneric"=>"active","servgeneric"=>"active","termgeneric"=>"graphic") as $tab => $value){
+          if(isset($this->systab->by_object[$tab]->gotoMode)) {
+            $found = true;
+            $this->systab->by_object[$tab]->gotoMode = $value;
+          }
+        }   
+        if(!$found){
+          print_red(sprintf(_("Can't set gotoMode to status 'avtice', the current object couldn't be identified.")));
+        }
 
+      }
       /* Save, or display error message? */
       if (count($message) == 0){
 
         /* Save terminal data to ldap */
-        gosa_log ("System object'".$this->dn."' has been saved");
+        if(isset($_SESSION['SelectedSystemType']['ogroup']) && $_SESSION['SelectedSystemType']['ogroup'] != 'none'){
+          foreach (array("workservice", "termservice") as $cls){
+            if (isset($this->systab->by_object[$cls])){
+              $this->systab->by_object[$cls]->gotoXMouseport= "";
+              $this->systab->by_object[$cls]->gotoXMouseType= "";
+              $this->systab->by_object[$cls]->gotoXResolution= "";
+              $this->systab->by_object[$cls]->gotoXColordepth= "";
+            }
+          }
+        }
+
         $this->systab->save();
+        gosa_log ("System object'".$this->dn."' has been saved");
 
         /* Incoming behavior; you can select a system type and an ogroup membership. 
          * If this object is an Incoming object, $_SESSION['SelectedSystemType'] isset.
@@ -420,7 +519,7 @@ class systems extends plugin
             $ldap = $this->config->get_ldap_link();
           }
           $ldap->cd ($this->dn);
-          $ldap->cat($this->dn);  
+          $ldap->cat($this->dn, array('dn'));  
           if(count($ldap->fetch())){
             $ldap->cd($this->dn);
             $ldap->rmDir($this->dn);
@@ -482,6 +581,7 @@ class systems extends plugin
     }
 
     /* Display dialog with system list */
+    $this->DivListSystem->parent = $this;
     $this->DivListSystem->execute();
 
     /* Add departments if subsearch is disabled */
@@ -559,7 +659,7 @@ class systems extends plugin
 
     /* This array represents the combination between checkboxes and search filters */
     $objs = array( "ShowServers"        => array("CLASS" => "goServer"        ,"TREE" => "ou=servers,ou=systems," ),
-        "ShowTerminals"      => array("CLASS" => "goHard"          ,"TREE" => "ou=terminals,ou=systems,"), 
+        "ShowTerminals"      => array("CLASS" => "gotoTerminal"    ,"TREE" => "ou=terminals,ou=systems,"), 
         "ShowPrinters"       => array("CLASS" => "gotoPrinter"     ,"TREE" => "ou=printers,ou=systems," ),
         "ShowDevices"        => array("CLASS" => "ieee802Device"   ,"TREE" => "ou=netdevices,ou=systems," ),
         "ShowPhones"         => array("CLASS" => "goFonHardware"   ,"TREE" => "ou=phones,ou=systems," ),
@@ -578,14 +678,14 @@ class systems extends plugin
           if($oc['CLASS'] != ""){
             $filter = "(|(&".$userregex."(objectClass=".$oc['CLASS'].")(cn=".$this->DivListSystem->Regex.")))";
             $res = array_merge($res,get_list($filter,$this->ui->subtreeACL, $base,
-                  array("cn", "description", "macAddress", "objectClass", "sambaDomainName", "FAIstate"), GL_NONE | GL_SUBSEARCH));
+                  array("cn", "description", "macAddress", "objectClass", "sambaDomainName", "FAIstate"), GL_NONE | GL_SUBSEARCH | GL_SIZELIMIT));
           }
         }else{
           /* User filter? */
           if($oc['CLASS'] != ""){
             $filter = "(|(&".$userregex."(objectClass=".$oc['CLASS'].")(cn=".$this->DivListSystem->Regex.")))";
             $res = array_merge($res,get_list($filter,$this->ui->subtreeACL, $oc['TREE'].$base,
-                  array("cn", "description", "macAddress", "objectClass", "sambaDomainName", "FAIstate"), GL_NONE));
+                  array("cn", "description", "macAddress", "objectClass", "sambaDomainName", "FAIstate"), GL_NONE | GL_SIZELIMIT));
           }
         }
       } 
@@ -594,7 +694,7 @@ class systems extends plugin
     /* Search for incoming objects */ 
     $filter = "(|(&".$userregex."(objectClass=goHard)(cn=".$this->DivListSystem->Regex.")))";
     $res = array_merge($res,get_list($filter,$this->ui->subtreeACL, "ou=incoming,".$base,
-          array("cn", "description", "macAddress", "objectClass", "sambaDomainName"), GL_NONE));
+          array("cn", "description", "macAddress", "objectClass", "sambaDomainName"), GL_NONE | GL_SIZELIMIT));
 
     /* Get all gotoTerminal's */
     foreach ($res as $value){
@@ -611,19 +711,25 @@ class systems extends plugin
 
       /* check if current object is a new one */
       if (preg_match ("/,ou=incoming,/i", $tmp)){
-        if (in_array('gotoTerminal', $value['objectClass'])){
+        if (in_array_ics('gotoTerminal', $value['objectClass'])){
           $add= "- "._("New terminal");
-        }elseif (in_array('gotoWorkstation', $value['objectClass'])){
+        }elseif (in_array_ics('gotoWorkstation', $value['objectClass'])){
           $add= "- "._("New workstation");
-        }elseif (in_array('GOhard', $value['objectClass'])){
+        }elseif (in_array_ics('GOhard', $value['objectClass'])){
           $add= "- "._("New Device");
         }
       } 
 
+      /* Create a string containing the last part of the department. */
+      $dn_name = preg_replace("#^([^/]+/)*#","",convert_department_dn(@LDAP::fix($tmp)));
+      if(empty($dn_name)){
+        $dn_name = "/";
+      }
+      
       /* Detect type of object and create an entry for $this->terminals */
       $terminal = array();
       if ((in_array ($tmp, $responsible)) || ($add != "")){
-        if (in_array('gotoTerminal', $value["objectClass"])){
+        if (in_array_ics('gotoTerminal', $value["objectClass"])){
           if (isset($value["macAddress"][0]) && $value["macAddress"][0] != "-"){
             $terminal             = $value;
             $terminal['type']     = "T";
@@ -631,10 +737,10 @@ class systems extends plugin
           } else {
             $terminal             = $value;
             $terminal['type']     = "D";
-            $terminal['message']  = _("Terminal template for");
+            $terminal['message']  = _("Terminal template for")."&nbsp;'".$dn_name."'&nbsp;";
             $terminal['location'] = array_search($tmp, $this->config->departments); 
           }
-        } elseif (in_array('gotoWorkstation', $value["objectClass"])){
+        } elseif (in_array_ics('gotoWorkstation', $value["objectClass"])){
           if (isset($value["macAddress"][0]) &&  $value["macAddress"][0] != "-"){
             $terminal             = $value;
             $terminal['type']     = "L";
@@ -643,28 +749,28 @@ class systems extends plugin
             $terminal             = $value;
             $terminal['type']     = "D";
             $terminal['location'] = array_search($tmp, $this->config->departments);
-            $terminal['message']  = _("Workstation template for");
+            $terminal['message']  = _("Workstation template for")."&nbsp;'".$dn_name."'&nbsp;";
           }
           if (isset($value["FAIstate"][0])){
             $terminal['type']= $this->getState($terminal['type'], $value["FAIstate"][0]);
           }
-        } elseif (in_array('gotoPrinter', $value["objectClass"])){
+        } elseif (in_array_ics('gotoPrinter', $value["objectClass"])){
           $terminal             = $value;
           $terminal['type']     = "P";
-        } elseif (in_array('goServer', $value["objectClass"])){
+        } elseif (in_array_ics('goServer', $value["objectClass"])){
           $terminal             = $value;
           $terminal['type']     = "S";
           if (isset($value["FAIstate"][0])){
             $terminal['type']= $this->getState($terminal['type'], $value["FAIstate"][0]);
           }
-        } elseif (in_array('goFonHardware', $value["objectClass"])){
+        } elseif (in_array_ics('goFonHardware', $value["objectClass"])){
           $terminal             = $value;
           $terminal['type']     = "F";
-        }elseif (in_array("GOhard",$value['objectClass'])){
+        }elseif (in_array_ics("GOhard",$value['objectClass'])){
           $terminal = $value;
           $terminal['type']   = "Q";
           $terminal['is_new'] = $add;
-        } elseif (in_array('ieee802Device', $value["objectClass"])){
+        } elseif (in_array_ics('ieee802Device', $value["objectClass"])){
           $terminal             = $value;
           $terminal['type']     = "C";
         } else{
@@ -705,22 +811,22 @@ class systems extends plugin
   function get_system_type($classes)
   {
     $type= "";
-    if (in_array('ieee802Device', $classes)){
+    if (in_array_ics('ieee802Device', $classes)){
       $type= "component";
-    }elseif (in_array('gotoTerminal', $classes)){
+    }elseif (in_array_ics('gotoTerminal', $classes)){
       $type= "terminal";
-    }elseif (in_array('gotoWorkstation', $classes)){
+    }elseif (in_array_ics('gotoWorkstation', $classes)){
       $type= "workstation";
-    }elseif (in_array('gotoPrinter', $classes)){
+    }elseif (in_array_ics('gotoPrinter', $classes)){
       $type= "printer";
-    }elseif (in_array('goFonHardware', $classes)){
+    }elseif (in_array_ics('goFonHardware', $classes)){
       $type= "phone";
-    }elseif (in_array('goServer', $classes)){
+    }elseif (in_array_ics('goServer', $classes)){
       $type= "server";
-    }elseif (in_array('GOhard', $classes)){
+    }elseif (in_array_ics('GOhard', $classes)){
       $type= "NewDevice";
-    }elseif (in_array('sambaAccount', $classes) ||
-        in_array('sambaSamAccount', $classes)){
+    }elseif (in_array_ics('sambaAccount', $classes) ||
+        in_array_ics('sambaSamAccount', $classes)){
       $type= "winstation";
     }
     return ($type);