X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fadmin%2Fsystems%2Fclass_workstationStartup.inc;h=07a925b61fed2d0d44e97c36b1ccb5ff5f66c9ac;hb=e99742e600fa6fa4b514d9209ee7641ea51260c5;hp=90afd398c0c7e2b463d4b2c2dc4af46e0557f529;hpb=fd362c6fd748ebebb558b7662d382ba18f98c1fa;p=gosa.git diff --git a/plugins/admin/systems/class_workstationStartup.inc b/plugins/admin/systems/class_workstationStartup.inc index 90afd398c..07a925b61 100644 --- a/plugins/admin/systems/class_workstationStartup.inc +++ b/plugins/admin/systems/class_workstationStartup.inc @@ -20,7 +20,7 @@ class workstartup extends plugin var $FAIclass = array(); var $FAIclasses = array(); var $FAIclassInfo = array(); - var $FAIdebianMirror = array(); + var $FAIdebianMirror = "auto"; /* attribute list for save action */ @@ -42,22 +42,36 @@ class workstartup extends plugin 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")); + $this->FAIdebianMirrors = array(); $ldap = $this->config->get_ldap_link(); - $ldap->search("(objectClass=FAIrepository)",array("FAIdebianMirror")); + $ldap->cd($this->config->current['BASE']); + $ldap->search("(objectClass=FAIrepositoryServer)",array("FAIrepository")); /* attach all attributes with "index => cn" to avoid multiple entries */ + $ret = array(); while($attr = $ldap->fetch()){ - if(isset($attr['FAIdebianMirror'])){ - $this->FAIdebianMirrors[$attr['FAIdebianMirror'][0]]=$attr['FAIdebianMirror'][0]; + if(isset($attr['FAIrepository'])){ + + unset($attr['FAIrepository']['count']); + + foreach($attr['FAIrepository'] as $rep){ + $tmp = split("\|",$rep); + $str = ""; + if(count($tmp)==4){ + $sections = split(",",$tmp[3]); + $str = $tmp[0]; + $ret[$str]=$sections; + } + } } - } - + } + ksort($ret); + $this->FAIdebianMirrors = $ret; + /* Get arrays */ foreach (array("gotoModules", "gotoAutoFs", "gotoFilesystem") as $val){ if (isset($this->attrs["$val"]["count"])){ @@ -109,8 +123,8 @@ class workstartup extends plugin /* Search all FAI objects */ $ldap->search("(| (objectClass=FAIpackageList)(objectClass=FAItemplate) - (objectClass=FAIvariable)(objectClass=FAIscript')(objectClass=FAIhook) - (objectClass=FAIpartitionTable))",array("objectClass","cn"),true); + (objectClass=FAIvariable)(objectClass=FAIscript)(objectClass=FAIhook)(objectClass=FAIprofile) + (objectClass=FAIpartitionTable))",array("*"),true); /* Sort all entries, and attach elementtype. * To be able to show the types in the listbox. */ @@ -118,7 +132,8 @@ class workstartup extends plugin $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'; + $tmp2[$cn]['FAIpackageList']['sec'] = $attr['FAIdebianSection']; $this->FAIclasses[$attr['cn'][0]]=$attr['cn'][0]; } if(in_array('FAItemplate',$attr['objectClass'])){ @@ -146,25 +161,33 @@ 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]; + } + } + if(is_array($this->FAIclasses)){ + natcasesort($this->FAIclasses); } $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; } @@ -174,6 +197,7 @@ class workstartup extends plugin foreach($this->FAIclasses as $class){ $str = ""; $skip = false; + if(isset($this->FAIclassInfo[$class])){ foreach($this->FAIclassInfo[$class] as $objs){ $str .= $objs['kzl']." "; @@ -184,11 +208,9 @@ class workstartup extends plugin 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'."); @@ -198,6 +220,9 @@ class workstartup extends plugin 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; @@ -241,13 +266,78 @@ 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 = base64_decode(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 = base64_decode(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']])){ @@ -276,8 +366,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; } } @@ -304,8 +394,36 @@ 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/",base64_encode($class),$str),"attach"=>"style='width:50px;border-right:none;'") + )); + } + + $smarty->assign("FAIScriptlist",$div->DrawList()); + $smarty->assign("FAIdebianMirrors",$this->getFAIdebianMirrors()); $smarty->assign("FAIclasses",$this->selectFriendlyClasses()); $smarty->assign("FAIclassesKeys",array_flip($this->selectFriendlyClasses())); $smarty->assign("FAIclassKeys",$this->FAIclass); @@ -333,18 +451,50 @@ 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"); } + function getFAIdebianMirrors() + { + $ret = array(); + $ret['auto']=_("automatic"); + $secs = array(); + if(is_array($this->FAIclass)){ + foreach($this->FAIclass as $classes){ + if(isset($this->FAIclassInfo[ $classes]['FAIpackageList']['sec'])){ + if(isset($this->FAIclassInfo[ $classes]['FAIpackageList']['sec']['count'])){ + unset($this->FAIclassInfo[ $classes]['FAIpackageList']['sec']['count']); + } + if(is_array($this->FAIclassInfo[ $classes]['FAIpackageList']['sec'])){ + foreach($this->FAIclassInfo[ $classes]['FAIpackageList']['sec'] as $sec => $value){ + $secs[$value]= $value; + } + } + } + } + } + if(is_array($this->FAIdebianMirrors)){ + foreach($this->FAIdebianMirrors as $mirr=>$sections){ + $allok = true; + foreach($secs as $sec){ + if(!in_array($sec,$sections)){ + $allok = false; + } + } + if($allok){ + $ret[$mirr]=$mirr; + } + } + } + return($ret); + } + /* Save data to object */ function save_object() { @@ -365,6 +515,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! */ @@ -414,14 +579,18 @@ class workstartup extends plugin $this->gotoKernelParameters.= " o ".$this->customParameters; } - /* Create numeric index for our classes */ - $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){ @@ -436,18 +605,11 @@ class workstartup extends plugin unset ($this->attrs['gotoLdapServer']); } - $tmp = array(); - foreach($this->FAIclass as $class){ - $tmp[] = $class; - } - $this->attrs['FAIclass'] = $tmp; - /* Write back to ldap */ - /* if mirror == none stop saving this attribute */ if($this->FAIdebianMirror == "none"){ $this->FAIdebianMirror = ""; } - + if((count($this->attrs['FAIclass'])==0)&&(empty($this->FAIdebianMirror))){ $tmp = array(); foreach($this->attrs['objectClass'] as $class){ @@ -460,6 +622,15 @@ class workstartup extends plugin $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); $ldap->modify($this->attrs);