Code

Gray out environment share if we have insufficient acls
[gosa.git] / plugins / personal / environment / class_environment.inc
index 0ef15be9aa12359830515909d54fc7cce0a39841..2f55230ef965415fd09cb6a0170ed40ae0180145 100644 (file)
@@ -74,9 +74,9 @@ class environment extends plugin
   var $cn;
   var $OrigCn;
 
-  function environment ($config, $dn= NULL)
+  function environment ($config, $dn= NULL, $parent= NULL)
   {
-    plugin::plugin ($config, $dn);
+    plugin::plugin ($config, $dn, $parent);
 
     /* Check : Are we currently editing a group or user dialog */
     if((isset($this->attrs['cn'][0]))&&(!isset($this->attrs['uid'][0]))){
@@ -183,11 +183,6 @@ class environment extends plugin
       $this->useProfile = false;
     }
 
-    /* Set to group environment if we editing a group */
-    if(!isset($this->parent)){
-      $this->is_group = true;
-    }
-
     /* Set resolutions */
     $this->gotoXResolutions = array("auto"=>_("auto"),
                                     "640x480"   =>  "640x480",
@@ -222,6 +217,20 @@ class environment extends plugin
 
   }
 
+
+  /* Detect type of edited object (user|group)*/
+  function detect_grouptype()
+  {
+    if((!isset($this->parent))&&(!$this->is_account)){
+      $this->is_group     = false;
+    }elseif((isset($this->parent))&&(!isset($this->parent->by_object['posixAccount']))){
+      $this->is_group     = true;
+    }else{
+      $this->is_group     = false;
+    }
+  }
+
+
   function execute()
   {
        /* Call parent execute */
@@ -256,6 +265,8 @@ class environment extends plugin
      All these tab management is done here
    */
 
+  $this->detect_grouptype();
+
   /* Working from Usermenu an the Account is currently disbled
      * this->parent :  is only set if we are working in a list of tabs
      * is_account   :  is only true if the needed objectClass is given
@@ -277,7 +288,6 @@ class environment extends plugin
      */
     }elseif((isset($this->parent))&&(!isset($this->parent->by_object['posixAccount']))){
       $smarty->assign("is_account","true");
-      $this->is_group     = true;
       $this->uid          = $this->cn;
       $this->attrs['uid'] = $this->cn;
 
@@ -314,7 +324,6 @@ class environment extends plugin
        */
       $smarty->assign("is_account","true");
 
-      $this->is_group = false;
 
       /* Do we need to flip is_account state? */
       if (isset($_POST['modify_state'])){
@@ -536,6 +545,8 @@ class environment extends plugin
       /* 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']))){
         print_red(_("You must specify a valid mount point."));
+      }elseif(preg_match('/ /', $_POST['gotoShareMountPoint'])){
+        print_red(_("Spaces are not allowed in the mount path!"));
       }elseif(!(
         preg_match("/^\//",$_POST['gotoShareMountPoint'])  ||
         preg_match("/^~/",$_POST['gotoShareMountPoint']) ||
@@ -597,9 +608,17 @@ class environment extends plugin
     $divlistShares->SetHeight(100);
     $tmp = $this->printOutAssignedShares();
     
+    
     foreach($tmp as $key => $value){
       $img = "";
    
+      $hide       = false;    
+      $background = "";
+      if(chkacl($this->acl,"gotoShare") != ""){
+        $background = "background: #D0D0D0; ";
+        $hide = true;    
+      }
+
       /* Check if entry starts with an ! */
       if(preg_match("/^!/",$this->gotoShares[$key]['server'])){
 
@@ -607,12 +626,12 @@ class environment extends plugin
         if($this->is_group) continue;
     
         /* Create pwd reset images */
-        if($this->gotoShares[$key]['PwdHash'] != ""){
+        if($this->gotoShares[$key]['PwdHash'] != "" && !$hide){
           $img.= "<input type='image' name='gotoShareResetPwd_".base64_encode($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;'");
+        $field1 = array("string" => "<font style=\"color:#C0C0C0\">".$value."</font>" , "attach" => "style='".$background."'");
+        $field2 = array("string" => $img   , "attach" => "style='".$background."border-right:0px;'");
       }else{
 
         /* Create pwd reset img && delete image */
@@ -621,10 +640,12 @@ class environment extends plugin
             title='"._("Reset password hash")."'>";
           $img.= "&nbsp;";
         }
+        if(!$hide){
         $img.= "<input type='image' name='gotoShareDel_".base64_encode($key)." 'src='images/edittrash.png' alt='"._("Delete")."' 
           title='"._("Delete share entry")."'>";
-        $field1 = array("string" => $value);
-        $field2 = array("string" => $img   , "attach" => "style='border-right:0px;'");
+        }
+        $field1 = array("string" => $value , "attach" => "style='".$background."'");
+        $field2 = array("string" => $img   , "attach" => "style='".$background."border-right:0px;'");
       }
       $divlistShares->AddEntry(array($field1,$field2));
     }
@@ -750,13 +771,15 @@ 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];
+    if(!$this->is_group){
+      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()));
@@ -790,6 +813,8 @@ class environment extends plugin
       $smarty->assign("gotoProfileQuotaACL"," disabled ");
     }
 
+    $smarty->assign("is_group",$this->is_group);
+
     /* Als smarty vars are set. Get smarty template and generate output */
     $display.= $smarty->fetch(get_template_path('environment.tpl', TRUE,dirname(__FILE__)));
     return($display);
@@ -825,7 +850,7 @@ class environment extends plugin
     show_ldap_error($ldap->get_error(), _("Removing environment information failed"));
 
     /* Optionally execute a command after we're done */
-    $this->handle_post_events("remove");
+    $this->handle_post_events("remove",array("uid" => $this->uid));
   }
 
 
@@ -872,6 +897,7 @@ class environment extends plugin
   function check()
   {
     /* Call common method to give check the hook */
+    $this->detect_grouptype();
     $message= plugin::check();
   
     if(preg_match("/[^0-9]/",$this->gotoProfileQuota)) {
@@ -940,60 +966,65 @@ class environment extends plugin
 
 
     /* Save usersettings to Printer */
+    $skip_printer_changes = false;
     if(chkacl($this->acl,"gotoPrinter")!=""){
-      $this->gotoPrinter = array();
+      $this->gotoPrinter    = array();
+      $skip_printer_changes = true;
     }  
     
-    /* 1. Search all printers that have our uid/cn as member
-     * 2. Delete this uid/cn from every single entry and save it again.
-     * 2.1 There are different types of members: Users / Groups, this will be defined in $suffix
-     * 2.2 And each type has two modes, Admin (e.g. 'gotoUserAdminPrinter') and Normal
-     */
-    $types = array( "gotoUserPrinter"       => "AddUser",
-                    "gotoGroupPrinter"      => "AddGroup",
-                    "gotoUserAdminPrinter"  => "AddAdminUser",
-                    "gotoGroupAdminPrinter" => "AddAdminGroup");
-
-    if($this->is_group){
-      $s_suffix = "Group";
-      $useVar   = "cn";
-    }else{
-      $useVar   = "uid";
-      $s_suffix = "User";
-    }
+    if(!$skip_printer_changes){
+      /* 1. Search all printers that have our uid/cn as member
+       * 2. Delete this uid/cn from every single entry and save it again.
+       * 2.1 There are different types of members: Users / Groups, this will be defined in $suffix
+       * 2.2 And each type has two modes, Admin (e.g. 'gotoUserAdminPrinter') and Normal
+       */
+      $types = array( "gotoUserPrinter"       => "AddUser",
+          "gotoGroupPrinter"      => "AddGroup",
+          "gotoUserAdminPrinter"  => "AddAdminUser",
+          "gotoGroupAdminPrinter" => "AddAdminGroup");
 
-    /* Remove old entries */
-    $ldap->search("(&(objectClass=gotoPrinter)(goto".$s_suffix."Printer=".$this->uid."))",array("*"));
-    while($attr = $ldap->fetch()){
-      $printerObj = NULL;
-      $printerObj = new printtabs($this->config,$this->config->data['TABS']['PRINTTABS'],$attr['dn']);
-      $printerObj->by_object['printgeneric']->DelMember($types["goto".$s_suffix."Printer"],$this->uid);
-      $printerObj->by_object['printgeneric']->save();
-    }
+      /* Detect type of edited object, sometimes this wasn't set correctly ... */
+      $this->detect_grouptype();
 
-    $ldap->search("(&(objectClass=gotoPrinter)(goto".$s_suffix."AdminPrinter=".$this->uid."))",array("*"));
-    while($attr = $ldap->fetch()){
-      $printerObj = NULL;
-      $printerObj = new printtabs($this->config,$this->config->data['TABS']['PRINTTABS'],$attr['dn']);
-      $printerObj->by_object['printgeneric']->DelMember($types["goto".$s_suffix."AdminPrinter"],$this->uid);
-      $printerObj->by_object['printgeneric']->save();
-    }
+      if($this->is_group){
+        $s_suffix = "Group";
+        $useVar   = "cn";
+      }else{
+        $useVar   = "uid";
+        $s_suffix = "User";
+      }
 
-    foreach($this->gotoPrinter as $printer){
-      $printerObj = NULL;
-      $printerObj = new printtabs($this->config,$this->config->data['TABS']['PRINTTABS'],$printer['dn']);
+      /* Remove old entries */
+      $ldap->search("(&(objectClass=gotoPrinter)(goto".$s_suffix."Printer=".$this->uid."))",array("*"));
+      while($attr = $ldap->fetch()){
+        $printerObj = NULL;
+        $printerObj = new printtabs($this->config,$this->config->data['TABS']['PRINTTABS'],$attr['dn']);
+        $printerObj->by_object['printgeneric']->DelMember($types["goto".$s_suffix."Printer"],$this->uid);
+        $printerObj->by_object['printgeneric']->save();
+      }
 
-      if($printer['mode'] == "admin") {
-        $attribute = "goto".$s_suffix."AdminPrinter";
-      }else{
-        $attribute = "goto".$s_suffix."Printer";
+      $ldap->search("(&(objectClass=gotoPrinter)(goto".$s_suffix."AdminPrinter=".$this->uid."))",array("*"));
+      while($attr = $ldap->fetch()){
+        $printerObj = NULL;
+        $printerObj = new printtabs($this->config,$this->config->data['TABS']['PRINTTABS'],$attr['dn']);
+        $printerObj->by_object['printgeneric']->DelMember($types["goto".$s_suffix."AdminPrinter"],$this->uid);
+        $printerObj->by_object['printgeneric']->save();
       }
 
-      $printerObj->by_object['printgeneric']->AddMember($types[$attribute],$this->dn);
-      $printerObj->by_object['printgeneric']->save();
-    }
+      foreach($this->gotoPrinter as $printer){
+        $printerObj = NULL;
+        $printerObj = new printtabs($this->config,$this->config->data['TABS']['PRINTTABS'],$printer['dn']);
 
+        if($printer['mode'] == "admin") {
+          $attribute = "goto".$s_suffix."AdminPrinter";
+        }else{
+          $attribute = "goto".$s_suffix."Printer";
+        }
 
+        $printerObj->by_object['printgeneric']->AddMember($types[$attribute],$this->dn);
+        $printerObj->by_object['printgeneric']->save();
+      }
+    }
 
     /* Prepare HotPlug devices */
     $this->attrs['gotoHotplugDevice'] = array();
@@ -1065,7 +1096,7 @@ class environment extends plugin
     $this->cleanup();
     $ldap->$mode($this->attrs);
     show_ldap_error($ldap->get_error(), _("Adding environment information failed"));
-    $this->handle_post_events($mode);
+    $this->handle_post_events($mode,array("uid"=>$this->uid));
   }
 
 /* Generate ListBox frindly output for the defined shares