Code

Added FAIstate to faiManagement
[gosa.git] / plugins / personal / environment / class_environment.inc
index 84d18ae86522cc65a10d3af7eae445744acb9f11..59be3400076a91950515821d18d0080fc69d1d98 100644 (file)
@@ -40,6 +40,7 @@ class environment extends plugin
   /* Printer */
   var $gotoPrinter        = array();// All available Printer, with their configurations
   var $gotoPrinterSel     = "";     //  The selected Printer
+  var $gosaDefaultPrinter = "";     // Default printer
 
   /* Share */
   var $gotoShares         = array();// Current Share Options
@@ -65,10 +66,10 @@ class environment extends plugin
   var $attributes         = array("uid","gotoProfileServer","gotoProfileFlags",
                                     "gotoXResolution","gotoProfileQuota",
                                     "gotoLogonScripts","gotoLogonScript",
-                                    "gotoPrinter",
+                                    "gotoPrinter", "gosaDefaultPrinter",
                                     "gotoShares","gotoShare",
-                                    "gotoKioskProfile","gotoKioskProfiles",
-                                    "gotoHotplugDevice");
+                                    "gotoKioskProfile","gotoKioskProfiles"
+                                    );
   var $objectclasses      = array("gotoEnvironment"); // Specifies the objectClass which contains the attributes edited here 
   var $cn;
   var $OrigCn;
@@ -112,6 +113,19 @@ class environment extends plugin
         $tmp2['name']        = $tmp[0]; 
         $tmp2['description'] = $tmp[1]; 
         $tmp2['id']          = $tmp[2]; 
+
+        /* Produkt ID */
+        if(!isset($tmp[3])){
+          $tmp[3] = "";
+        }
+        /* Vendor ID */
+        if(!isset($tmp[4])){
+          $tmp[4] = "";
+        }
+  
+        $tmp2['produkt']     = $tmp[3]; 
+        $tmp2['vendor']      = $tmp[4];
         $this->gotoHotplugDevices[$tmp[0]]=$tmp2;
       }
     }
@@ -150,9 +164,9 @@ class environment extends plugin
         $tmp2['name']        =$tmp[1];
         $tmp2['mountPoint']  =$tmp[2];
         if(isset($tmp[3])){
-          $tmp2['OtherStuff']  =$tmp[3];
+          $tmp2['PwdHash']  =$tmp[3];
         }else{
-          $tmp2['OtherStuff']  ="";
+          $tmp2['PwdHash']  ="";
         }
         if(isset($tmp[4])){
           $tmp2['Username']  =$tmp[4];
@@ -180,6 +194,34 @@ class environment extends plugin
       $this->is_group = true;
     }
 
+    /* Set resolutions */
+    $this->gotoXResolutions = array("auto"=>_("auto"),
+                                    "640x480"   =>  "640x480",
+                                    "800x600"   =>  "800x600",
+                                    "1024x768"  =>  "1024x768",
+                                    "1154x864"  =>  "1154x864",
+                                    "1280x768"  =>  "1280x768",
+                                    "1280x1024" =>  "1280x1024");
+
+    if(isset($this->config->data['MAIN']['RESOLUTION_HOOK'])){
+      $file = $this->config->data['MAIN']['RESOLUTION_HOOK'];
+  
+      if(is_readable($file)){
+        $str = file_get_contents($file);
+        $lines = split("\n",$str);
+        foreach($lines as $line){
+          $line = trim($line);
+          if(!empty($line)){
+            $this->gotoXResolutions[$line]=$line;
+          }
+        }
+        //natcasesort($this->gotoXResolutions);
+      }else{
+        print_red(sprintf(_("You have specified an external resolution hook which can't be read, please check the permission of the file '%s'."),$file));
+      }
+    }
+
     $this->gotoProfileServers= $config->getShareServerList() ;
     $this->gotoShareSelections= $config->getShareList(true);
     $this->gotoAvailableShares= $config->getShareList(false);  
@@ -380,13 +422,6 @@ class environment extends plugin
       $smarty->assign("gotoProfileFlag_CCHK"," checked ");
     }
 
-    $this->gotoXResolutions = array("auto"=>_("auto"),
-                                    "640x480"   =>  "640x480",
-                                    "800x600"   =>  "800x600",
-                                    "1024x768"  =>  "1024x768",
-                                    "1154x864"  =>  "1154x864",
-                                    "1280x768"  =>  "1280x768",
-                                    "1280x1024" =>  "1280x1024");
 
     $smarty->assign("gotoXResolutions"    , $this->gotoXResolutions);
     $smarty->assign("gotoXResolutionKeys" , array_flip($this->gotoXResolutions));
@@ -410,17 +445,6 @@ class environment extends plugin
       $this->dialog=NULL;
       $this->is_dialog = false;
     }
-    $tmp = new kioskManagementDialog($this->config,$this->dn);
-    $list = $tmp->getKioskProfiles($this->newKioskProfiles);
-
-    $list['none']=_("None");
-
-    $list = array_reverse($list);
-
-    if(!isset($list[$this->gotoKioskProfile])){
-      print_red(sprintf(_("The selected kiosk profile '%s' is no longer available, setting current profile to 'none'."),$this->gotoKioskProfile));
-      $this->gotoKioskProfile = 'none';
-    }
 
     /* Reassign help class */
     $_SESSION['current_class_for_help'] = get_class($this);
@@ -432,7 +456,10 @@ class environment extends plugin
       $this->dialog->acl = $this->acl;
       $this->is_dialog = true;
     }
-
+    $tmp = new kioskManagementDialog($this->config,$this->dn);
+    $list = $tmp->getKioskProfiles($this->newKioskProfiles);
+    $list['none']=_("None");
+    $list = array_reverse($list);
     $smarty->assign("gotoKioskProfiles",$list);
     $smarty->assign("gotoKioskProfileKeys",array_flip($list));
 
@@ -533,7 +560,7 @@ class environment extends plugin
         /* Preparing the new assignment */ 
         $this->gotoShares[$a_share['name']."|".$a_share['server']]=$a_share;
         $this->gotoShares[$a_share['name']."|".$a_share['server']]['Username']=$s_user;
-        $this->gotoShares[$a_share['name']."|".$a_share['server']]['OtherStuff']="";
+        $this->gotoShares[$a_share['name']."|".$a_share['server']]['PwdHash']="";
         $this->gotoShares[$a_share['name']."|".$a_share['server']]['mountPoint']=$s_mount;
       }
     }  
@@ -541,12 +568,70 @@ class environment extends plugin
     /* if the Post  gotoShareDel is set, someone asked GOsa to delete the selected entry (if there is one selected)
      * If there is no defined share selected, we will abort the deletion without any message 
      */
-    if((isset($_POST['gotoShareDel']))&&(isset($_POST['gotoShare']))){
-      unset($this->gotoShares[$_POST['gotoShare']]);
+    $once = true;
+    foreach($_POST as $name => $value){
+      if((preg_match("/^gotoShareDel_/",$name)) && ($once)){
+        $once = false;  
+        $key  = preg_replace("/^gotoShareDel_/","",$name);
+        $key  = preg_replace("/_+[xy]$/","",$key);
+        $key  = preg_replace("/_/", ".", $key);
+
+        if(isset($this->gotoShares[$key])) {
+          unset($this->gotoShares[$key]);
+        }
+
+        /* Remove corresponding password entry, too. This is a workaround
+           to get rid of old-style entries. */
+        $key= preg_replace("/\|/", "|!", $key);
+        if(isset($this->gotoShares[$key])) {
+          unset($this->gotoShares[$key]);
+        }
+      }
+      if((preg_match("/^gotoShareResetPwd_/",$name)) && ($once)){
+        $once = false;
+        $key  = preg_replace("/^gotoShareResetPwd_/","",$name);
+        $key  = preg_replace("/_+[xy]$/","",$key);
+        $key  = preg_replace("/_/", ".", $key);
+        $this->gotoShares[$key]['PwdHash'] = "";
+      }
     }
 
-    $smarty->assign("gotoShares",$this->printOutAssignedShares());
-    $smarty->assign("gotoShareKeys",array_flip($this->printOutAssignedShares()));
+    $divlistShares = new divSelectBox("gotoShares");
+    $divlistShares->SetHeight(100);
+    $tmp = $this->printOutAssignedShares();
+    
+    foreach($tmp as $key => $value){
+      $img = "";
+   
+      /* Check if entry starts with an ! */
+      if(preg_match("/^!/",$this->gotoShares[$key]['server'])){
+
+        /* If we are currently editing groups environment, skip those ! entries */ 
+        if($this->is_group) continue;
+    
+        /* Create pwd reset images */
+        if($this->gotoShares[$key]['PwdHash'] != ""){
+          $img.= "<input type='image' name='gotoShareResetPwd_".$key." 'src='images/list_reset_password.png' alt='"._("Reset password hash")."' 
+            title='"._("Reset password hash")."'>";
+        }
+        $field1 = array("string" => "<font style=\"color:#C0C0C0\">".$value."</font>" );
+        $field2 = array("string" => $img   , "attach" => "style='border-right:0px;'");
+      }else{
+
+        /* Create pwd reset img && delete image */
+        if($this->gotoShares[$key]['PwdHash'] != ""){
+          $img.= "<input type='image' name='gotoShareResetPwd_".$key." 'src='images/list_reset_password.png' alt='"._("Reset password hash")."' 
+            title='"._("Reset password hash")."'>";
+          $img.= "&nbsp;";
+        }
+        $img.= "<input type='image' name='gotoShareDel_".$key." 'src='images/edittrash.png' alt='"._("Delete")."' 
+          title='"._("Delete share entry")."'>";
+        $field1 = array("string" => $value);
+        $field2 = array("string" => $img   , "attach" => "style='border-right:0px;'");
+      }
+      $divlistShares->AddEntry(array($field1,$field2));
+    }
+    $smarty->assign("divlistShares",$divlistShares->DrawList());
 
     /* Hotplug devices will be handled here 
      * There are 3 possible methods for this feature
@@ -563,12 +648,18 @@ class environment extends plugin
 
     /* We have to delete the selected hotplug from the list*/
     if((isset($_POST['gotoHotplugDeviceDel']))&&(isset($_POST['gotoHotplugDevice']))){
-      unset($this->gotoHotplugDevices[$_POST['gotoHotplugDevice']]);
+      foreach($_POST['gotoHotplugDevice'] as $name){
+        unset($this->gotoHotplugDevices[$name]);
+      }
     }
 
     /* There are already defined hotplugs from other users we could use */
     if(isset($_POST['gotoHotplugDeviceUse'])){
-      $this->dialog = new hotplugDialog($this->config,$this->dn,true);
+      $tmp  =array();
+      foreach($this->gotoHotplugDevices as $plugs){
+        $tmp[] = $plugs['name'];
+      }
+      $this->dialog = new hotplugDialog($this->config,$this->dn,true,$tmp);
       $this->is_dialog = true;
     }
 
@@ -589,8 +680,11 @@ class environment extends plugin
       }else{
         $this->dialog->save_object();
         $a_tmp = $this->dialog->save();
+       
         if(is_array($a_tmp)){
-          $this->gotoHotplugDevices[$a_tmp['name']]= $a_tmp; 
+          foreach($a_tmp as $name => $hotplug){
+            $this->gotoHotplugDevices[$name]= $hotplug; 
+          }
         }
         unset($this->dialog);
         $this->dialog= NULL;
@@ -663,13 +757,31 @@ class environment extends plugin
       }
     }
 
+    if((isset($_POST['gotoPrinterDefault']))&&(isset($_POST['gotoPrinterSel']))&&(!empty($_POST['gotoPrinterSel']))){
+      if ($this->gosaDefaultPrinter == $_POST['gotoPrinterSel'][0]){
+        $this->gosaDefaultPrinter= "";
+      } else {
+        $this->gosaDefaultPrinter= $_POST['gotoPrinterSel'][0];
+      }
+    }
+
     $smarty->assign("gotoPrinter",$this->printOutPrinterDevices());
     $smarty->assign("gotoPrinterKeys",array_flip($this->printOutPrinterDevices()));
  
     /* General behavior */
     if((isset($this->dialog))&&($this->dialog!=NULL)&&(!empty($this->dialog))){
       $this->dialog->save_object();
-      return ($this->dialog->execute());
+      $disp =$this->dialog->execute();
+
+      $tmp = new kioskManagementDialog($this->config,$this->dn);
+      $list = $tmp->getKioskProfiles($this->newKioskProfiles);
+      $list['none']=_("None");
+      $list = array_reverse($list);
+      if(!isset($list[$this->gotoKioskProfile])){
+        print_red(sprintf(_("The selected kiosk profile '%s' is no longer available, setting current profile to 'none'."),$this->gotoKioskProfile));
+        $this->gotoKioskProfile = 'none';
+      }
+      return($disp);
     }
     if($this->acl != "#none#"){
       $smarty->assign("useProfileACL","");
@@ -687,7 +799,6 @@ class environment extends plugin
 
     /* Als smarty vars are set. Get smarty template and generate output */
     $display.= $smarty->fetch(get_template_path('environment.tpl', TRUE,dirname(__FILE__)));
-    
     return($display);
   }
 
@@ -718,7 +829,7 @@ class environment extends plugin
     $this->cleanup();
     $ldap->modify ($this->attrs); 
 
-    show_ldap_error($ldap->get_error(), _("Removing environment information failed"));
+    show_ldap_error($ldap->get_error(), sprintf(_("Removing of user/environment account with dn '%s' failed."),$this->dn));
 
     /* Optionally execute a command after we're done */
     $this->handle_post_events("remove");
@@ -731,8 +842,6 @@ class environment extends plugin
     /* Get all Posted vars 
      * Setup checkboxes 
      */
-   
-    
  
     if(isset($_POST['iamposted'])){
       if(isset($_POST['useProfile'])){
@@ -751,6 +860,7 @@ class environment extends plugin
         $this->gotoProfileFlag_L = false;
       }
 
+      $tmp= $this->gosaDefaultPrinter;
       plugin::save_object();
       foreach($this->attributes as $s_attr){
         if(in_array($s_attr,array("gotoShares","gotoHotplugDevices","gotoPrinter","gotoLogonScripts","uid"))) continue;
@@ -760,6 +870,7 @@ class environment extends plugin
           $this->$s_attr = false;
         }
       }
+      $this->gosaDefaultPrinter= $tmp;
     }
   }
 
@@ -862,20 +973,34 @@ class environment extends plugin
 
       /* Remove normal entries (User)*/
       if(isset($attr['goto'.$s_suffix.'Printer'])) {
+        unset($attr['goto'.$s_suffix.'Printer']['count']);
         foreach($attr['goto'.$s_suffix.'Printer'] as $key => $user){
           if($this->uid==$user){
             unset($attr['goto'.$s_suffix.'Printer'][$key]);
           }
-        }    
+        }
+        $tmp = array();
+        foreach($attr['goto'.$s_suffix.'Printer'] as $user){
+          $tmp[] = $user;
+        }
+        $attr['goto'.$s_suffix.'Printer'] = array();  
+        $attr['goto'.$s_suffix.'Printer'] = $tmp;
       }
 
       /* Remove administrational entries (Admin)*/
       if(isset($attr['goto'.$s_suffix.'AdminPrinter'])){
+        unset($attr['goto'.$s_suffix.'AdminPrinter']['count']);
         foreach($attr['goto'.$s_suffix.'AdminPrinter'] as $key => $user){
           if($this->uid==$user){
             unset($attr['goto'.$s_suffix.'AdminPrinter'][$key]);
           }
         }    
+        $tmp = array();
+        foreach($attr['goto'.$s_suffix.'AdminPrinter'] as $user){
+          $tmp[] = $user;
+        }
+        $attr['goto'.$s_suffix.'AdminPrinter'] = array();  
+        $attr['goto'.$s_suffix.'AdminPrinter'] = $tmp;
       }
 
       /* Extract useable tags, to be able to save all changes 
@@ -906,12 +1031,11 @@ class environment extends plugin
 
       /* Save changes */
       $ldap->cd($attr['dn']);
+      $dn = $attr['dn'];
       unset($attr['dn']);
-$ldap->modify ($attr); 
-
-      if($ldap->get_error()!="Success"){
-        print_red(_("Error while writing printer")." : ".$ldap->get_error());
-      }
+        
+      $ldap->modify ($attr); 
+      show_ldap_error($ldap->get_error(),sprintf(_("Saving printer membership with dn %s failed "),$dn));
     }
 
     /* All printers are cleaned, (our cn/uid removed) 
@@ -987,7 +1111,8 @@ $ldap->modify ($attrs);
     /* Prepare HotPlug devices */
     $this->attrs['gotoHotplugDevice'] = array();
     foreach($this->gotoHotplugDevices as $name => $device){
-      $this->attrs['gotoHotplugDevice'][] = $device['name']."|".$device['description']."|".$device['id'];
+      $this->attrs['gotoHotplugDevice'][] = $device['name']."|".$device['description']."|".$device['id'].
+        "|".$device['produkt']."|".$device['vendor'];
     }
 
     /* Prepare LogonScripts */
@@ -1003,12 +1128,12 @@ $ldap->modify ($attrs);
     /* Prepare Shares */
     $this->attrs['gotoShare']=array();
     foreach($this->gotoShares as $name => $share){
-      $this->attrs['gotoShare'][] =$share['server']."|".$share['name']."|".$share['mountPoint']."|".$share['OtherStuff']."|".$share['Username'];
+      $this->attrs['gotoShare'][] =$share['server']."|".$share['name']."|".$share['mountPoint']."|".$share['PwdHash']."|".$share['Username'];
     }
 
 
     if($this->gotoXResolution == "auto") $this->gotoXResolution ="";
-    $saveThis = array("gotoProfileQuota","gotoXResolution","gotoProfileServer","gotoKioskProfile");
+    $saveThis = array("gotoProfileQuota","gotoXResolution","gotoProfileServer","gotoKioskProfile","gosaDefaultPrinter");
      
     foreach($saveThis as $tosave){
       if(!empty($this->$tosave)){
@@ -1049,7 +1174,7 @@ $ldap->modify ($attrs);
     $ldap->cd($this->dn);
     $this->cleanup();
     $ldap->$mode($this->attrs);
-    show_ldap_error($ldap->get_error(), _("Adding environment information failed"));
+    show_ldap_error($ldap->get_error(), sprintf(_("Saving of user/environment account with dn '%s' failed."),$this->dn));
     $this->handle_post_events($mode);
   }
 
@@ -1061,10 +1186,13 @@ $ldap->modify ($attrs);
     $a_return = array();
     if(is_array($this->gotoShares)){
       foreach($this->gotoShares as $share){
-        if (!preg_match('/^!/', $share['server'])){
+        if(preg_match("/^!/",$share['server'])){
+          $a_return[$share['name']."|".$share['server']]= preg_replace("/^!/","",$share['server'])."://".$share['name']." - "._("group share"); 
+        }else{
           $a_return[$share['name']."|".$share['server']]= $share['server']."://".$share['name']." on ".$share['mountPoint']." as ".$share['Username'];
         }
       }
+      natcasesort($a_return);
     }
     return($a_return);
   }
@@ -1092,10 +1220,13 @@ function printOutHotPlugDevices()
     if(is_array($this->gotoPrinter)){
       foreach($this->gotoPrinter as $printer){
         if($printer['mode'] == "admin"){
-          $a_return[$printer['cn'][0]]= $printer['cn'][0]." - "._("Admin");
+          $a_return[$printer['cn'][0]]= $printer['cn'][0]." - "._("Administrator");
         }else{
           $a_return[$printer['cn'][0]]= $printer['cn'][0]; 
         }
+        if ($printer['cn'][0] == $this->gosaDefaultPrinter){
+          $a_return[$printer['cn'][0]].=" - "._("Default printer");
+        }
       }
     }
     return($a_return);