X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fpersonal%2Fenvironment%2Fclass_environment.inc;h=6bc6cbd6ee3112b507d3870896d9ebf63c1fdee8;hb=888379c40b3c70d44df945cf181a2d9fedbc5d9f;hp=0ef15be9aa12359830515909d54fc7cce0a39841;hpb=0d6c52550d085bd5c8c5789088f8a49a4bf98d91;p=gosa.git diff --git a/plugins/personal/environment/class_environment.inc b/plugins/personal/environment/class_environment.inc index 0ef15be9a..6bc6cbd6e 100644 --- a/plugins/personal/environment/class_environment.inc +++ b/plugins/personal/environment/class_environment.inc @@ -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']) || @@ -825,7 +836,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 +883,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 +952,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 +1082,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