diff --git a/gosa-plugins/goto/personal/environment/class_environment.inc b/gosa-plugins/goto/personal/environment/class_environment.inc
index 91b98c142edbbf0d44cd92c1f3733c00d0e97571..a19bb719f9654600ca2e5c2cbe60a92ee93a0ee2 100644 (file)
$this->gotoProfileServers= $config->getShareServerList() ;
$this->gotoShareSelections= $config->getShareList(true);
$this->gotoAvailableShares= $config->getShareList(false);
$this->gotoProfileServers= $config->getShareServerList() ;
$this->gotoShareSelections= $config->getShareList(true);
$this->gotoAvailableShares= $config->getShareList(false);
+
+ /* Ensure that a currently selected server will stay selected, even if the list of profile servers
+ is empty due to insufficient permissions.
+ */
+ if(count($this->gotoProfileServers) && !empty($this->gotoProfileServer)){
+
+ /* The currently selected profile server is outdated/no longer available */
+ if(!isset($this->gotoProfileServers[$this->gotoProfileServer])){
+ }else{
+ $c = $this->gotoProfileServers[$this->gotoProfileServer];
+ if(!preg_match("/r/",$c['ACL'])){
+
+ /* We are not allowed to read to currently selected server.
+ But to ensure that the selection will be kept after saving the account, we
+ override the current ACL tag.
+ */
+ $this->gotoProfileServers[$this->gotoProfileServer]['ACL'] .= "r";
+ }
+ }
+ }
$this->update_kiosk_profiles();
}
function update_kiosk_profiles()
{
$this->update_kiosk_profiles();
}
function update_kiosk_profiles()
{
+ $this->gotoKioskProfile_Server = preg_replace("/^.*:\/\/([^\/]*).*$/","\\1",$this->gotoKioskProfile);
+ $this->gotoKioskProfile_Profile= preg_replace("/^.*\//","",$this->gotoKioskProfile);
+
$tmp1 = array("none" => array(_("disabled")));
$tmp2 = array("none" => _("disabled"));
$tmp3 = array();
$tmp1 = array("none" => array(_("disabled")));
$tmp2 = array("none" => _("disabled"));
$tmp3 = array();
$ldap->cd($this->config->current['BASE']);
$ldap->search("(&(objectClass=goEnvironmentServer)(gotoKioskProfile=*)(cn=*))",array("cn","gotoKioskProfile"));
$cnt = 0;
$ldap->cd($this->config->current['BASE']);
$ldap->search("(&(objectClass=goEnvironmentServer)(gotoKioskProfile=*)(cn=*))",array("cn","gotoKioskProfile"));
$cnt = 0;
+ $ui = get_userinfo();
while($attrs = $ldap->fetch()){
while($attrs = $ldap->fetch()){
+ $acl = $ui->get_permissions($attrs['dn'],"server/goShareServer","");
for($i = 0 ; $i < $attrs['gotoKioskProfile']['count'] ; $i ++){
for($i = 0 ; $i < $attrs['gotoKioskProfile']['count'] ; $i ++){
- $name = preg_replace("/^.*\//","",$attrs['gotoKioskProfile'][$i]);
- $name = preg_replace("/^.*\//","",$attrs['gotoKioskProfile'][$i]);
- $tmp1[$attrs['cn'][0]][] = $name;
- $tmp3[$attrs['cn'][0]][$name] = $attrs['gotoKioskProfile'][$i];
+ if(preg_match("/r/",$acl) || $this->gotoKioskProfile_Server == $attrs['cn'][0]){
+ $name = preg_replace("/^.*\//","",$attrs['gotoKioskProfile'][$i]);
+ $tmp1[$attrs['cn'][0]][] = $name;
+ $tmp3[$attrs['cn'][0]][$name] = $attrs['gotoKioskProfile'][$i];
+ $tmp2[$attrs['cn'][0]]= $attrs['cn'][0];
+ $cnt ++;
+ }
}
}
- $tmp2[$attrs['cn'][0]]= $attrs['cn'][0];
- $cnt ++;
}
if($cnt && $this->config->search("environment","kioskpath",array('menu','tabs'))){
}
if($cnt && $this->config->search("environment","kioskpath",array('menu','tabs'))){
$this->gotoKioskProfiles['SERVERS'] = $tmp2;
$this->gotoKioskProfiles['MAP'] = $tmp3;
$this->gotoKioskProfiles['SERVERS'] = $tmp2;
$this->gotoKioskProfiles['MAP'] = $tmp3;
- $this->gotoKioskProfile_Server = preg_replace("/^.*:\/\/([^\/]*).*$/","\\1",$this->gotoKioskProfile);
- $this->gotoKioskProfile_Profile= preg_replace("/^.*\//","",$this->gotoKioskProfile);
-
$error = false;
$error = false;
- if(!in_array($this->gotoKioskProfile_Server, $this->gotoKioskProfiles['SERVERS'])){
+ if(!isset($this->gotoKioskProfiles['SERVERS'][$this->gotoKioskProfile_Server])){
$error = true;
}elseif(!in_array($this->gotoKioskProfile_Profile, $this->gotoKioskProfiles['BY_SERVER'][$this->gotoKioskProfile_Server])){
$error = true;
$error = true;
}elseif(!in_array($this->gotoKioskProfile_Profile, $this->gotoKioskProfiles['BY_SERVER'][$this->gotoKioskProfile_Server])){
$error = true;
msg_dialog::display(_("Warning"), sprintf(_("Kiosk profile '%s' located on server '%s' is not available anymore. Kiosk profile will be disabled!"), $this->gotoKioskProfile_Profile, $this->gotoKioskProfile_Server), WARNING_DIALOG);
$this->gotoKioskProfile_Server ="none";
$this->gotoKioskProfile_Profile="";
msg_dialog::display(_("Warning"), sprintf(_("Kiosk profile '%s' located on server '%s' is not available anymore. Kiosk profile will be disabled!"), $this->gotoKioskProfile_Profile, $this->gotoKioskProfile_Server), WARNING_DIALOG);
$this->gotoKioskProfile_Server ="none";
$this->gotoKioskProfile_Profile="";
+ }elseif(empty($this->gotoKioskProfile)){
+ $this->gotoKioskProfile_Server ="none";
+ $this->gotoKioskProfile_Profile="";
}
}
}
}
/* Check profile server */
if($this->acl_is_writeable("gotoProfileServer",$WriteOnly)){
/* Check profile server */
if($this->acl_is_writeable("gotoProfileServer",$WriteOnly)){
+
if(!empty($this->gotoProfileServer) && !isset($this->gotoProfileServers[$this->gotoProfileServer])){
if(!empty($this->gotoProfileServer) && !isset($this->gotoProfileServers[$this->gotoProfileServer])){
+
+
if(count($this->gotoProfileServers)){
/* Get First Profile */
if(count($this->gotoProfileServers)){
/* Get First Profile */
if(!is_array($this->gotoProfileServers)){
$this->gotoProfileServers =array();
}
if(!is_array($this->gotoProfileServers)){
$this->gotoProfileServers =array();
}
- $smarty->assign("gotoProfileServerKeys",array_flip($this->gotoProfileServers));
/* Handle kiosk profiles*/
$smarty->assign("kiosk_servers" , $this->gotoKioskProfiles['SERVERS']);
/* Handle kiosk profiles*/
$smarty->assign("kiosk_servers" , $this->gotoKioskProfiles['SERVERS']);