X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-plugins%2Fgoto%2Fpersonal%2Fenvironment%2Fclass_environment.inc;h=b72ced3ce70b2584673ccef8f447eb45cba48c2d;hb=fd16381bbcb916810fe1c4899ff0fdd52f5e8dd3;hp=fe0be1d0189676b5814ecc3a5a10bf11e00b7fde;hpb=118c8f12fdf0da25908fd63a1fa3a5e09651c861;p=gosa.git
diff --git a/gosa-plugins/goto/personal/environment/class_environment.inc b/gosa-plugins/goto/personal/environment/class_environment.inc
index fe0be1d01..b72ced3ce 100644
--- a/gosa-plugins/goto/personal/environment/class_environment.inc
+++ b/gosa-plugins/goto/personal/environment/class_environment.inc
@@ -2,10 +2,7 @@
class environment extends plugin
{
- /* CLI vars */
- var $cli_summary = "Manage server basic objects";
- var $cli_description = "Some longer text\nfor help";
- var $cli_parameters = array("eins" => "Eins ist toll", "zwei" => "Zwei ist noch besser");
+ var $plIcon = "plugins/goto/images/plugin.png";
/* attribute list for save action */
var $ignore_account = FALSE;
@@ -18,7 +15,7 @@ class environment extends plugin
var $is_group = false;
var $view_logged = FALSE;
-
+
/* Attribute definition
*/
@@ -150,7 +147,7 @@ class environment extends plugin
unset($this->attrs['gotoLogonScript']['count']);
foreach($this->attrs['gotoLogonScript'] as $device){
$tmp = $tmp2 = array();
- $tmp = split("\|",$device);
+ $tmp = explode("|",$device);
$tmp2['LogonName'] = $tmp[0];
$tmp2['LogonPriority'] = $tmp[2];
if(preg_match("/O/i",$tmp[1])){
@@ -174,7 +171,7 @@ class environment extends plugin
unset($this->attrs['gotoShare']['count']);
foreach($this->attrs['gotoShare'] as $share){
$tmp = $tmp2 = array();
- $tmp = split("\|",$share);
+ $tmp = explode("|",$share);
$tmp2['server'] =$tmp[0];
$tmp2['name'] =$tmp[1];
@@ -220,12 +217,12 @@ class environment extends plugin
"1280x768" => "1280x768",
"1280x1024" => "1280x1024");
- if(isset($this->config->data['MAIN']['RESOLUTION_HOOK'])){
- $file = $this->config->data['MAIN']['RESOLUTION_HOOK'];
+ if($this->config->get_cfg_value("resolutions") != ""){
+ $file = $this->config->get_cfg_value("resolutions");
if(is_readable($file)){
$str = file_get_contents($file);
- $lines = split("\n",$str);
+ $lines = preg_split("/\n/",$str);
foreach($lines as $line){
$line = trim($line);
if(!empty($line)){
@@ -241,28 +238,55 @@ class environment extends plugin
$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();
-
- $this->gotoKioskProfile= preg_replace("/^.*\//i","",$this->gotoKioskProfile);
}
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();
$ldap = $this->config->get_ldap_link();
$ldap->cd($this->config->current['BASE']);
$ldap->search("(&(objectClass=goEnvironmentServer)(gotoKioskProfile=*)(cn=*))",array("cn","gotoKioskProfile"));
$cnt = 0;
+ $ui = get_userinfo();
while($attrs = $ldap->fetch()){
+ $acl = $ui->get_permissions($attrs['dn'],"server/goKioskService","");
for($i = 0 ; $i < $attrs['gotoKioskProfile']['count'] ; $i ++){
- $name = preg_replace("/^.*kiosk\//","",$attrs['gotoKioskProfile'][$i]);
- $tmp1[$attrs['cn'][0]][] = $name;
+ 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'))){
@@ -271,23 +295,21 @@ class environment extends plugin
$this->gotoKioskProfiles['BY_SERVER'] = $tmp1;
$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;
- if(!in_array($this->gotoKioskProfile_Server, $this->gotoKioskProfiles['SERVERS'])){
- $this->gotoKioskProfile_Server = key($this->gotoKioskProfiles['SERVERS']);
+ if(!isset($this->gotoKioskProfiles['SERVERS'][$this->gotoKioskProfile_Server])){
$error = true;
- }
- if(!in_array($this->gotoKioskProfile_Profile, $this->gotoKioskProfiles['BY_SERVER'][$this->gotoKioskProfile_Server])){
- $this->gotoKioskProfile_Profile = $this->gotoKioskProfiles['BY_SERVER'][$this->gotoKioskProfile_Server][0];
+ }elseif(!in_array($this->gotoKioskProfile_Profile, $this->gotoKioskProfiles['BY_SERVER'][$this->gotoKioskProfile_Server])){
$error = true;
}
if($error && !empty($this->gotoKioskProfile)){
+ 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="";
- 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);
}
}
@@ -325,7 +347,10 @@ class environment extends plugin
/* Check profile server */
if($this->acl_is_writeable("gotoProfileServer",$WriteOnly)){
+
if(!empty($this->gotoProfileServer) && !isset($this->gotoProfileServers[$this->gotoProfileServer])){
+
+
if(count($this->gotoProfileServers)){
/* Get First Profile */
@@ -405,8 +430,8 @@ class environment extends plugin
}
/* Group Dialog with enabled environment options */
if ($this->is_account){
- $display= $this->show_enable_header(_("Remove environment extension"),
- _("Environment extension enabled. You can disable it by clicking below."));
+ $display= $this->show_enable_header(msgPool::removeFeaturesButton(_("Environment")),
+ msgPool::featuresEnabled(_("Environment")));
} else {
/* Environment is disabled
@@ -414,14 +439,16 @@ class environment extends plugin
environment extensions
*/
if((isset($this->parent->by_object['group']))||(isset($this->attrs['objectClass']))&&((in_array("posixAccount",$this->attrs['objectClass'])))){
- // 4. There is a PosixAccount
- $display= $this->show_enable_header(_("Add environment extension"),
- _("Environment extension disabled. You can enable it by clicking below."));
+ $display= $this->show_enable_header(msgPool::addFeaturesButton(_("Environment")),
+ msgPool::featuresDisabled(_("Environment")));
+ return $display;
+ }elseif((isset($this->parent->by_object['ogroup']))){
+ $display= $this->show_enable_header(msgPool::addFeaturesButton(_("Environment")),
+ msgPool::featuresDisabled(_("Environment")));
return $display;
}else{
- // 4. There is no PosixAccount
- $display= $this->show_enable_header(_("Add environment extension"),
- _("Environment extension disabled. You have to setup a posix account before you can enable this feature."));
+ $display= $this->show_enable_header(msgPool::addFeaturesButton(_("Environment")),
+ msgPool::featuresDisabled(_("Environment"), _("POSIX")), TRUE);
return $display;
}
}
@@ -443,19 +470,17 @@ class environment extends plugin
// 3. Account enabled . Editing from adminmenu
if ($this->is_account){
- $display= $this->show_disable_header(_("Remove environment extension"),
- _("Environment extension enabled. You can disable it by clicking below."));
+ $display= $this->show_enable_header(msgPool::removeFeaturesButton(_("Environment")),
+ msgPool::featuresEnabled(_("Environment")));
} else {
if($this->parent->by_object['posixAccount']->is_account==true){
- // 4. There is a PosixAccount
- $display= $this->show_disable_header(_("Add environment extension"),
- _("Environment extension disabled. You can enable it by clicking below."));
+ $display= $this->show_enable_header(msgPool::addFeaturesButton(_("Environment")),
+ msgPool::featuresDisabled(_("Environment")));
return $display;
}else{
- // 4. There is a PosixAccount
- $display= $this->show_disable_header(_("Add environment extension"),
- _("Environment extension disabled. You have to setup a posix account before you can enable this feature."),TRUE,TRUE);
+ $display= $this->show_enable_header(msgPool::addFeaturesButton(_("Environment")),
+ msgPool::featuresDisabled(_("Environment"), _("POSIX")), TRUE);
return $display;
}
}
@@ -538,7 +563,6 @@ class environment extends plugin
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']);
@@ -556,7 +580,7 @@ class environment extends plugin
if(isset($_POST['LogonSave'])){
if(!$this->acl_is_writeable("gotoLogonScript")){
- msg_dialog::display(_("Permission error"), _("You have no permission to modify logon scripts!"), ERROR_DIALOG);
+ msg_dialog::display(_("Permission error"), msgPool::permModify(_("Logon scripts")), ERROR_DIALOG);
unset($this->dialog);
$this->dialog=FALSE;
$this->is_dialog=false;
@@ -646,11 +670,11 @@ class environment extends plugin
/* We assign a share to this user, if we don't know where to mount the share */
if(!isset($_POST['gotoShareSelection']) || get_post('gotoShareSelection') == ""){
- msg_dialog::display(_("Error"), _("Please select a valid share!"), ERROR_DIALOG);
+ msg_dialog::display(_("Error"), msgPool::invalid(_("Share")), ERROR_DIALOG);
}elseif((!isset($_POST['gotoShareMountPoint']))||(empty($_POST['gotoShareMountPoint']))||(preg_match("/[\|]/i",$_POST['gotoShareMountPoint']))){
- msg_dialog::display(_("Error"), _("Please specify a valid mount point!"), ERROR_DIALOG);
+ msg_dialog::display(_("Error"), msgPool::invalid(_("Mount point")), ERROR_DIALOG);
}elseif(preg_match('/ /', $_POST['gotoShareMountPoint'])){
- msg_dialog::display(_("Error"), _("You cannot use spaces in the mount path!"), ERROR_DIALOG);
+ msg_dialog::display(_("Error"), msgPool::invalid(_("Mount point"), "/[^\s]/"), ERROR_DIALOG);
}elseif(!(
preg_match("/^\//",$_POST['gotoShareMountPoint']) ||
preg_match("/^~/",$_POST['gotoShareMountPoint']) ||
@@ -661,7 +685,7 @@ class environment extends plugin
preg_match("/^%/",$_POST['gotoShareMountPoint'])
)
){
- msg_dialog::display(_("Error"), _("Please specify a valid mount point!"), ERROR_DIALOG);
+ msg_dialog::display(_("Error"), msgPool::invalid(_("Mount point")), ERROR_DIALOG);
}else{
$a_share = $this->gotoAvailableShares[$_POST['gotoShareSelection']];
$s_mount = $_POST['gotoShareMountPoint'];
@@ -717,7 +741,7 @@ class environment extends plugin
$tmp = array();
- if($this->acl_is_readable("gotoShares")){
+ if($this->acl_is_readable("gotoShare")){
$tmp = $this->printOutAssignedShares();
}
@@ -751,7 +775,8 @@ class environment extends plugin
/* Create pwd reset images */
if($this->gotoShares[$key]['PwdHash'] != ""){
- $img.= "";
}
$field1 = array("string" => "".$value."" , "attach" => "style='".$color."'");
@@ -760,11 +785,12 @@ class environment extends plugin
/* Create pwd reset img && delete image */
if($this->gotoShares[$key]['PwdHash'] != ""){
- $img.= "";
$img.= " ";
}
- $img.= "";
$field1 = array("string" => $value , "attach" => "style='".$color."'");
$field2 = array("string" => $img , "attach" => "style='border-right:0px;'");
@@ -970,7 +996,6 @@ class environment extends plugin
}
$smarty->assign("gotoPrinter",$this->printOutPrinterDevices());
- $smarty->assign("gotoPrinterKeys",array_flip($this->printOutPrinterDevices()));
/* General behavior */
if(is_object($this->dialog)){
@@ -1029,7 +1054,9 @@ class environment extends plugin
new log("remove","users/".get_class($this),$this->dn,array_keys($this->attrs),$ldap->get_error());
}
- show_ldap_error($ldap->get_error(), sprintf(_("Removing of user/environment account with dn '%s' failed."),$this->dn));
+ if (!$ldap->success()){
+ msg_dialog::display(_("LDAP error"), msgPool::ldaperror($ldap->get_error(), $this->dn, 0, get_class()));
+ }
/* Optionally execute a command after we're done */
$this->handle_post_events("remove",array("uid" => $this->uid));
@@ -1111,14 +1138,14 @@ class environment extends plugin
$this->detect_grouptype();
if(preg_match("/[^0-9]/",$this->gotoProfileQuota)) {
- $message[]=_("Please set a valid profile quota size.");
+ $message[] = msgPool::invalid(_("Profile quota"),$this->gotoProfileQuota,"/[0-9]/") ;
}
if(!isset($this->attrs['objectClass'])){
$this->attrs['objectClass']=array();
}
if(!$this->is_group){
if((!((in_array("posixAccount",$this->attrs['objectClass']))||($this->parent->by_object['posixAccount']->is_account==true)))&&(!$this->is_group)){
- $message[]=(_("You need to setup a valid posix extension in order to enable evironment features."));
+ $message[]= msgPool::featuresDisabled(_("environment"),_("POSIX"));
}
}
return ($message);
@@ -1132,11 +1159,7 @@ class environment extends plugin
*/
/* only save changed variables ....*/
if ($this->gotoKioskProfile_Server != "none"){
- if(preg_match("/https/i",$_SERVER['HTTP_REFERER'])){
- $method="https://".$this->gotoKioskProfile_Server."/kiosk/".$this->gotoKioskProfile_Profile;
- }else{
- $method="http://".$this->gotoKioskProfile_Server."/kiosk/".$this->gotoKioskProfile_Profile;
- }
+ $method = $this->gotoKioskProfiles['MAP'][$this->gotoKioskProfile_Server][$this->gotoKioskProfile_Profile];
$this->gotoKioskProfile= $method;
}else{
$this->gotoKioskProfile= array();
@@ -1177,6 +1200,7 @@ class environment extends plugin
}
/* Remove old entries */
+ $ldap->cd($this->config->current['BASE']);;
$ldap->search("(&(objectClass=gotoPrinter)(goto".$s_suffix."Printer=".$this->$useVar."))",array("*"));
while($attr = $ldap->fetch()){
$printerObj = NULL;
@@ -1186,6 +1210,7 @@ class environment extends plugin
$printerObj->by_object['printgeneric']->save();
}
+ $ldap->cd($this->config->current['BASE']);;
$ldap->search("(&(objectClass=gotoPrinter)(goto".$s_suffix."AdminPrinter=".$this->$useVar."))",array("*"));
while($attr = $ldap->fetch()){
$printerObj = NULL;
@@ -1215,7 +1240,7 @@ class environment extends plugin
/* Prepare HotPlug devices */
$this->attrs['gotoHotplugDeviceDN'] = array();
foreach($this->gotoHotplugDevices as $name => $device){
- $this->attrs['gotoHotplugDeviceDN'][]= $device['dn'];
+ $this->attrs['gotoHotplugDeviceDN'][]= LDAP::fix($device['dn']);
}
/* Prepare LogonScripts */
@@ -1286,7 +1311,9 @@ class environment extends plugin
new log("create",$cat."/".get_class($this),$this->dn,array_keys($this->attrs),$ldap->get_error());
}
- show_ldap_error($ldap->get_error(), sprintf(_("Saving of user/environment account with dn '%s' failed."),$this->dn));
+ if (!$ldap->success()){
+ msg_dialog::display(_("LDAP error"), msgPool::ldaperror($ldap->get_error(), $this->dn, 0, get_class()));
+ }
$this->handle_post_events($mode,array("uid"=>$this->uid));
}
@@ -1329,22 +1356,20 @@ class environment extends plugin
function printOutPrinterDevices()
{
$a_return = array();
-
- if($this->acl_is_readable("gotoPrinter")){
- if(is_array($this->gotoPrinter)){
- foreach($this->gotoPrinter as $printer){
- if($printer['mode'] == "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");
- }
+ if(is_array($this->gotoPrinter)){
+ foreach($this->gotoPrinter as $printer){
+ if($printer['mode'] == '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");
}
}
}
+ asort($a_return);
return($a_return);
}
@@ -1403,7 +1428,7 @@ class environment extends plugin
unset($this->multi_attrs_all['gotoShare']['count']);
foreach($this->multi_attrs_all['gotoShare'] as $share){
$tmp = $tmp2 = array();
- $tmp = split("\|",$share);
+ $tmp = explode("|",$share);
$tmp2['server'] =$tmp[0];
$tmp2['name'] =$tmp[1];
@@ -1434,7 +1459,7 @@ class environment extends plugin
unset($this->multi_attrs['gotoShare']['count']);
foreach($this->multi_attrs['gotoShare'] as $share){
$tmp = $tmp2 = array();
- $tmp = split("\|",$share);
+ $tmp = explode("|",$share);
$tmp2['server'] =$tmp[0];
$tmp2['name'] =$tmp[1];
@@ -1466,7 +1491,7 @@ class environment extends plugin
unset($this->multi_attrs_all['gotoLogonScript']['count']);
foreach($this->multi_attrs_all['gotoLogonScript'] as $device){
$tmp = $tmp2 = array();
- $tmp = split("\|",$device);
+ $tmp = explode("|",$device);
$tmp2['LogonName'] = $tmp[0];
$tmp2['LogonPriority'] = $tmp[2];
if(preg_match("/O/i",$tmp[1])){
@@ -1491,7 +1516,7 @@ class environment extends plugin
unset($this->multi_attrs['gotoLogonScript']['count']);
foreach($this->multi_attrs['gotoLogonScript'] as $device){
$tmp = $tmp2 = array();
- $tmp = split("\|",$device);
+ $tmp = explode("|",$device);
$tmp2['LogonName'] = $tmp[0];
$tmp2['LogonPriority'] = $tmp[2];
if(preg_match("/O/i",$tmp[1])){
@@ -1683,7 +1708,7 @@ class environment extends plugin
$this->detect_grouptype();
if(preg_match("/[^0-9]/",$this->gotoProfileQuota) && in_array("gotoProfileQuota",$this->multi_boxes)) {
- $message[]=_("Please set a valid profile quota size.");
+ $message[] = msgPool::invalid(_("Profile quota"),$this->gotoProfileQuota,"/[0-9]/") ;
}
return($message);
}
@@ -1751,19 +1776,15 @@ class environment extends plugin
"plProvidedAcls" => array(
- "gotoProfileFlagL" => _("Resolution changeable during session") ,
- "gotoProfileFlagC" => _("Cache profile localy") ,
-
- "gotoProfileQuota" => _("Profile quota") ,
"gotoProfileServer" => _("Profile server") ,
-
- "gotoXResolution" => _("Resolution") ,
- "gotoKioskProfile" => _("Kiosk profile") ,
-
- "gosaDefaultPrinter" => _("Default printer") ,
- "gotoLogonScript" => _("Logon script") ,
+ "gotoProfileQuota" => _("Profile quota") ,
+ "gotoProfileFlagC" => _("Cache profile localy") ,
+ "gotoShare" => _("Shares"),
"gotoHotplugDevice" => _("Hotplug devices"),
- "gotoShare" => _("Shares"))
+ "gotoKioskProfile" => _("Kiosk profile") ,
+ "gotoProfileFlagL" => _("Resolution changeable during session") ,
+ "gotoXResolution" => _("Resolution") ,
+ "gotoLogonScript" => _("Logon script"))
));
}
}