X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fadmin%2Fsystems%2Fclass_workstationStartup.inc;h=2d551801a8602efb9925fdc5ebd8c25ed59869c9;hb=38e36135b451936d249b671857b133a7d55b7360;hp=e6b46ca26e9efb2d8ec0205cd0d43e8555a716ff;hpb=d742e8edc84fdbbc82452e3bef37bb4a891b5867;p=gosa.git diff --git a/plugins/admin/systems/class_workstationStartup.inc b/plugins/admin/systems/class_workstationStartup.inc index e6b46ca26..2d551801a 100644 --- a/plugins/admin/systems/class_workstationStartup.inc +++ b/plugins/admin/systems/class_workstationStartup.inc @@ -7,25 +7,25 @@ class workstartup extends plugin var $cli_parameters= array("eins" => "Eins ist toll", "zwei" => "Zwei ist noch besser"); /* Generic terminal attributes */ - var $bootmode= "G"; - var $goLdapServerList= array("default"); - var $gotoBootKernel= "default"; - var $gotoKernelParameters= ""; - var $gotoLdapServer= ""; - var $gotoModules= array(); - var $gotoAutoFs= array(); - var $gotoFilesystem= array(); - var $gotoTerminalPath= ""; - var $FAIstatus= ""; - var $FAIclass = array(); - var $FAIclasses = array(); - var $FAIclassInfo = array(); - var $FAIdebianMirror = array(); + var $bootmode = "G"; + var $goLdapServerList = array("default"); + var $gotoBootKernel = "default"; + var $gotoKernelParameters = ""; + var $gotoLdapServer = ""; + var $gotoModules = array(); + var $gotoAutoFs = array(); + var $gotoFilesystem = array(); + var $gotoTerminalPath = ""; + var $FAIstatus = ""; + var $FAIclass = array(); + var $FAIclasses = array(); + var $FAIclassInfo = array(); + var $FAIdebianMirror = array(); /* attribute list for save action */ - var $attributes= array("gotoLdapServer", "gotoBootKernel", "gotoKernelParameters", "FAIclass", "FAIstatus", "gotoShare","FAIdebianMirror"); - var $objectclasses= array("GOhard", "FAIobject"); + var $attributes = array("gotoLdapServer", "gotoBootKernel", "gotoKernelParameters", "FAIclass", "FAIstatus", "gotoShare","FAIdebianMirror"); + var $objectclasses = array("GOhard", "FAIobject"); /* Share */ var $gotoShares = array();// Currently Share Option @@ -34,30 +34,30 @@ class workstartup extends plugin var $gotoAvailableShares= array();// Available Shares for this account /* Helper */ - var $customParameters= ""; - var $orig_dn= ""; - var $ignore_account= TRUE; - var $FAIdebianMirrors = array(); + var $customParameters = ""; + var $orig_dn = ""; + var $ignore_account = TRUE; + var $FAIdebianMirrors = array(); function workstartup ($config, $dn= NULL) { plugin::plugin ($config, $dn); + + /* Creating a list of valid Mirrors + * none will not be saved to ldap. + */ + $this->FAIdebianMirrors = array("none"=>_("none")); + $ldap = $this->config->get_ldap_link(); + $ldap->cd($this->config->current['BASE']); + $ldap->search("(objectClass=FAIrepository)",array("FAIdebianMirror")); - // Create Mirror - $this->FAIdebianMirrors=array(); - $path = "/etc/gosa/fai/"; - $suffix = "http://"; - if(is_readable($path)){ - $od= opendir($path); - if($od){ - while($dir = readdir($od)){ - if((is_dir($path.$dir))&&($dir[0]!=".")){ - $this->FAIdebianMirrors[$suffix.$dir]=$suffix.$dir; - } - } + /* attach all attributes with "index => cn" to avoid multiple entries */ + while($attr = $ldap->fetch()){ + if(isset($attr['FAIdebianMirror'])){ + $this->FAIdebianMirrors[$attr['FAIdebianMirror'][0]]=$attr['FAIdebianMirror'][0]; } - } - + } + /* Get arrays */ foreach (array("gotoModules", "gotoAutoFs", "gotoFilesystem") as $val){ if (isset($this->attrs["$val"]["count"])){ @@ -104,17 +104,21 @@ class workstartup extends plugin $this->gotoAvailableShares= $config->getShareList(false); $tmp2 = array(); - //$ldap->cd($base); - $ldap = $this->config->get_ldap_link(); + $ldap = $this->config->get_ldap_link(); $ldap->cd($this->config->current['BASE']); - $ldap->search("(|(objectClass=FAIpackageList)(objectClass=FAItemplate) - (objectClass=FAIvariable)(objectClass=FAIscript')(objectClass=FAIhook) + + /* Search all FAI objects */ + $ldap->search("(| (objectClass=FAIpackageList)(objectClass=FAItemplate) + (objectClass=FAIvariable)(objectClass=FAIscript)(objectClass=FAIhook)(objectClass=FAIprofile) (objectClass=FAIpartitionTable))",array("objectClass","cn"),true); + /* Sort all entries, and attach elementtype. + * To be able to show the types in the listbox. + */ while($attr = $ldap->fetch()){ $cn = $attr['cn'][0]; if(in_array('FAIpackageList',$attr['objectClass'])){ $tmp2[$cn]['FAIpackageList']['obj'] = 'FAIpackageList'; - $tmp2[$cn]['FAIpackageList']['kzl'] = 'P'; + $tmp2[$cn]['FAIpackageList']['kzl'] = 'Pl'; $this->FAIclasses[$attr['cn'][0]]=$attr['cn'][0]; } if(in_array('FAItemplate',$attr['objectClass'])){ @@ -142,50 +146,69 @@ class workstartup extends plugin $tmp2[$cn]['FAIpartitionTable']['kzl']= 'Pt'; $this->FAIclasses[$attr['cn'][0]]=$attr['cn'][0]; } + if(in_array('FAIprofile',$attr['objectClass'])){ + $tmp2[$cn]['FAIprofile']['obj']= 'FAIprofile'; + $tmp2[$cn]['FAIprofile']['kzl']= 'P'; + $this->FAIclasses[$attr['cn'][0]]=$attr['cn'][0]; + } } $this->FAIclassInfo = $tmp2; - if(isset($this->attrs['FAIclass'])){ + if((isset($this->FAIclass))&&(!is_array($this->FAIclass))){ $tmp = array(); - $tmp2 = $this->attrs['FAIclass']; - unset($tmp2['count']); - foreach($tmp2 as $class){ - $tmp[$class] = $class; + $tmp = split(" ",$this->FAIclass); + $tmp2 =array(); + + foreach($tmp as $class){ + $tmp2[$class] = $class; } - $this->FAIclass = $tmp; + $this->FAIclass = $tmp2; } if(!is_array($this->FAIclass)){ - $this->FAIclass = array(); + $this->FAIclass =array(); } - $this->orig_dn= $this->dn; } + /* Create array to display available classes/profiles in a selectbox */ function selectFriendlyClasses(){ $tmp=array(); foreach($this->FAIclasses as $class){ $str = ""; + $skip = false; if(isset($this->FAIclassInfo[$class])){ foreach($this->FAIclassInfo[$class] as $objs){ $str .= $objs['kzl']." "; } } - $tmp[$class] = $class."  [".$str."]"; + $tmp[$class] = $class."  [".$str."]"; + } + return($tmp); + } + + function check() + { + $messages = array(); + /* If there are packages selected, but no mirror show error */ + if(($this->FAIdebianMirror == "none")&&(count($this->FAIclass)>0)){ + $messages[]=_("Please select a 'FAI server' or remove the 'FAI classes'."); } - return($tmp); + return($messages); } function execute() { + /* Call parent execute */ + plugin::execute(); + /* Do we need to flip is_account state? */ if (isset($_POST['modify_state'])){ $this->is_account= !$this->is_account; } - /* Do we represent a valid terminal? */ if (!$this->is_account && $this->parent == NULL){ $display= "\"\" ". @@ -209,9 +232,11 @@ class workstartup extends plugin /* FAI class management */ if((isset($_POST['AddClass']))&&(isset($_POST['FAIclassesSel']))){ - $found = 0 ; + /* If this new class/profile will attach a second partition table + * to our list of classes, abort and show a message. + */ foreach($this->FAIclass as $name){ if(isset($this->FAIclassInfo[$name])){ foreach($this->FAIclassInfo[$name] as $atr){ @@ -222,13 +247,79 @@ class workstartup extends plugin } } - if((isset($this->FAIclassInfo[$_POST['FAIclassesSel']]['FAIpackageList']))&&($found>0)){ - print_red(_("There is already a profile in your selection that contain partition table configuratons.")); + if((isset($this->FAIclassInfo[$_POST['FAIclassesSel']]['FAIpartitionTable']))&&($found>0)){ + print_red(_("There is already a profile in your selection that contain partition table configurations.")); }else{ $this->FAIclass[$_POST['FAIclassesSel']]=$_POST['FAIclassesSel']; } } + $sort = false; + foreach($_POST as $name => $val){ + + $sort_type = false; + if((preg_match("/sort_up/",$name))&&(!$sort)){ + $sort_type = "sort_up_"; + } + if((preg_match("/sort_down/",$name))&&(!$sort)){ + $sort_type = "sort_down_"; + } + + if(($sort_type)&&(!$sort)){ + $value = preg_replace("/_.*$/i","",preg_replace("/".$sort_type."/i","",$name)); + $sort = true; + + $last = -1; + $change_down = -1; + + /* Create array with numeric index */ + $tmp = array(); + foreach($this->FAIclass as $class){ + $tmp [] = $class; + } + + /* Walk trough array */ + foreach($tmp as $key => $faiName){ + if($faiName == $value){ + if($sort_type == "sort_up_"){ + if($last != -1){ + $change_down= $last; + } + }else{ + if(isset($tmp[$key+1])){ + $change_down = $key; + } + } + } + $last = $key; + } + + $tmp2 = array(); + $skip = false; + + foreach($tmp as $ky => $vl){ + + if($ky == $change_down){ + $skip = $vl; + }else{ + $tmp2[$vl] = $vl; + } + if(($skip != false)&&($ky != $change_down)){ + $tmp2[$skip] = $skip; + $skip =false; + } + } + $this->FAIclass = $tmp2; + } + + + if(preg_match("/fai_remove/i",$name)){ + $value = preg_replace("/_.*$/i","",preg_replace("/fai_remove_/i","",$name)); + unset($this->FAIclass[$value]); + } + } + + /* Delete selected class from our list */ if((isset($_POST['DelClass']))&&(isset($_POST['FAIclassSel']))){ if(isset($this->FAIclass[$_POST['FAIclassSel']])){ unset($this->FAIclass[$_POST['FAIclassSel']]); @@ -256,8 +347,8 @@ class workstartup extends plugin $a_share = $this->gotoAvailableShares[$_POST['gotoShareSelection']]; $s_mount = $_POST['gotoShareMountPoint']; /* Preparing the new assignment */ - $this->gotoShares[$a_share['name']]=$a_share; - $this->gotoShares[$a_share['name']]['mountPoint']=$s_mount; + $this->gotoShares[$a_share['name']."|".$a_share['server']]=$a_share; + $this->gotoShares[$a_share['name']."|".$a_share['server']]['mountPoint']=$s_mount; } } @@ -284,9 +375,35 @@ class workstartup extends plugin $smarty->assign($val, $this->$val); $smarty->assign($val."ACL", chkacl($this->acl, $val)); } - - $smarty->assign("FAIdebianMirrors",$this->FAIdebianMirrors); + + $div = new divSelectBox("WSFAIscriptClasses"); + + $div -> SetHeight("110"); + + $str_up = "  "; + $str_down = "  "; + $str_remove = "  "; + $str_empty = "  "; + + $i = 1; + foreach($this->FAIclass as $class){ + if($i==1){ + $str = $str_empty.$str_down.$str_remove; + }elseif($i == count($this->FAIclass)){ + $str = $str_up.$str_empty.$str_remove; + }else{ + $str = $str_up.$str_down.$str_remove; + } + $i ++ ; + $div->AddEntry(array( + array("string"=>$class), + array("string"=>preg_replace("/\%s/",$class,$str),"attach"=>"style='width:50px;border-right:none;'") + )); + } + + $smarty->assign("FAIScriptlist",$div->DrawList()); + $smarty->assign("FAIdebianMirrors",$this->FAIdebianMirrors); $smarty->assign("FAIclasses",$this->selectFriendlyClasses()); $smarty->assign("FAIclassesKeys",array_flip($this->selectFriendlyClasses())); $smarty->assign("FAIclassKeys",$this->FAIclass); @@ -314,15 +431,45 @@ class workstartup extends plugin } /* Show main page */ - return($smarty->fetch (get_template_path('workstationStartup.tpl', TRUE))); + return($smarty->fetch (get_template_path('workstationStartup.tpl', TRUE,dirname(__FILE__)))); } function remove_from_parent() { + /* $ldap= $this->config->get_ldap_link(); $ldap->rmdir($this->dn); show_ldap_error($ldap->get_error()); $this->handle_post_events("remove"); + */ + + + /* Depending on the baseobject (Ogroup / WS) we + * use another set of objectClasses + * In case of WS itself, we use "array("GOhard", "FAIobject");" + * if we are currently editing from ogroup menu we use (array("gotWorkstationTemplate","GOhard", "FAIobject")) + */ + if(isset($this->parent->by_object['ogroup'])){ + $this->objectclasses = array("gotoWorkstationTemplate","GOhard", "FAIobject"); + }elseif(isset($this->parent->by_object['workgeneric'])){ + $this->objectclasses = array("GOhard", "FAIobject"); + }else{ + print "unknown"; + exit(); + } + + $ldap= $this->config->get_ldap_link(); + plugin::remove_from_parent(); + + /* Remove additional attributes.*/ + foreach(array("gotoModules", "gotoAutoFs", "gotoFilesystem") as $attr){ + $this->attrs [$attr] = array(); + } + + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + show_ldap_error($ldap->get_error()); + } @@ -346,6 +493,21 @@ class workstartup extends plugin /* Save to LDAP */ function save() { + + /* Depending on the baseobject (Ogroup / WS) we + * use another set of objectClasses + * In case of WS itself, we use "array("GOhard", "FAIobject");" + * if we are currently editing from ogroup menu we use (array("gotWorkstationTemplate","GOhard", "FAIobject")) + */ + if(isset($this->parent->by_object['ogroup'])){ + $this->objectclasses = array("gotoWorkstationTemplate","GOhard", "FAIobject"); + }elseif(isset($this->parent->by_object['workgeneric'])){ + $this->objectclasses = array("GOhard", "FAIobject"); + }else{ + print "unknown"; + exit(); + } + /* Find proper terminal path for tftp configuration FIXME: This is suboptimal when the default has changed to another location! */ @@ -395,13 +557,18 @@ class workstartup extends plugin $this->gotoKernelParameters.= " o ".$this->customParameters; } - $tmp = array(); + plugin::save(); + + $str = ""; foreach($this->FAIclass as $class){ - $tmp[] = $class; + $str .= $class." "; } - $this->FAIclass = $tmp; + $this->attrs['FAIclass']= ""; + $this->attrs['FAIclass']= trim($str); - plugin::save(); + if(empty($this->attrs['FAIclass'])){ + $this->attrs['FAIclass'] = array(); + } /* Add missing arrays */ foreach (array("gotoFilesystem", "gotoAutoFs", "gotoModules") as $val){ @@ -416,23 +583,31 @@ class workstartup extends plugin unset ($this->attrs['gotoLdapServer']); } - $tmp = array(); - foreach($this->FAIclass as $class){ - $tmp[] = $class; + /* if mirror == none stop saving this attribute */ + if($this->FAIdebianMirror == "none"){ + $this->FAIdebianMirror = ""; } - $this->attrs['FAIclass'] = $tmp; - /* Write back to ldap */ - if(count($this->attrs['FAIclass'])==0){ + if((count($this->attrs['FAIclass'])==0)&&(empty($this->FAIdebianMirror))){ $tmp = array(); foreach($this->attrs['objectClass'] as $class){ if($class != "FAIobject"){ $tmp[] = $class; } } - $this->attrs['objectClass'] = $tmp; - $this->attrs['FAIclass'] = array();; + $this->attrs['objectClass'] = $tmp; + $this->attrs['FAIclass'] = array(); + $this->attrs['FAIdebianMirror'] = array(); + } + + /* prepare share settings */ + $tmp = array(); + foreach($this->gotoShares as $name => $settings){ + $tmp2= split("\|",$name); + $name = $tmp2[0]; + $tmp[] = $settings['server']."|".$name."|".$settings['mountPoint']; } + $this->attrs['gotoShare']=$tmp; $ldap= $this->config->get_ldap_link(); $ldap->cd($this->dn);