X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fadmin%2Fsystems%2Fclass_workstationStartup.inc;h=6e544c855e2c575b2d9611e6c12ce6e4cc8f628b;hb=84d2c065af9ce3f287fef380606a593a0cda5a81;hp=f9548a12c6657a4bb99e2be759f3da5c2ac758c2;hpb=9131c26da07045177a123ff2008dc54f1943a5c2;p=gosa.git diff --git a/plugins/admin/systems/class_workstationStartup.inc b/plugins/admin/systems/class_workstationStartup.inc index f9548a12c..6e544c855 100644 --- a/plugins/admin/systems/class_workstationStartup.inc +++ b/plugins/admin/systems/class_workstationStartup.inc @@ -7,24 +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 $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"); - 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 @@ -33,14 +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 $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")); + + /* 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"])){ @@ -85,46 +102,54 @@ class workstartup extends plugin $this->gotoShareSelections= $config->getShareList(true); $this->gotoAvailableShares= $config->getShareList(false); - - $ldap = $this->config->get_ldap_link(); - $ldap->search("(objectClass=FAIprofile)",array("*")); - while($attr = $ldap->fetch()){ - $this->FAIclasses[$attr['cn'][0]]=$attr['cn'][0]; - $base = "ou=fai,".preg_replace("/^.*ou=fai,/","",$attr['dn']); - $cn = $attr['cn'][0]; - $tmp[$cn] = $base; - } - - foreach($tmp as $cn => $base){ - - $ldap->cd($base); - $ldap->search("(&(objectClass=*)(cn=".$cn."))",array("objectClass","cn")); - while($attr = $ldap->fetch()){ + $tmp2 = array(); - if(in_array('FAIpackageList',$attr['objectClass'])){ - $tmp2[$cn]['FAIpackageList']['obj'] = 'FAIpackageList'; - $tmp2[$cn]['FAIpackageList']['kzl'] = 'P'; - } - if(in_array('FAItemplate',$attr['objectClass'])){ - $tmp2[$cn]['FAItemplate']['obj'] = 'FAItemplate'; - $tmp2[$cn]['FAItemplate']['kzl'] = 'T'; - } - if(in_array('FAIvariable',$attr['objectClass'])){ - $tmp2[$cn]['FAIvariable']['obj'] = 'FAIvariable'; - $tmp2[$cn]['FAIvariable']['kzl'] = 'V'; - } - if(in_array('FAIscript',$attr['objectClass'])){ - $tmp2[$cn]['FAIscript']['obj'] = 'FAIscript'; - $tmp2[$cn]['FAIscript']['kzl'] = 'S'; - } - if(in_array('FAIhook',$attr['objectClass'])){ - $tmp2[$cn]['FAIhook']['obj'] = 'FAIhook'; - $tmp2[$cn]['FAIhook']['kzl'] = 'H'; - } - if(in_array('FAIpartitionTable',$attr['objectClass'])){ - $tmp2[$cn]['FAIpartitionTable']['obj']= 'FAIpartitionTable'; - $tmp2[$cn]['FAIpartitionTable']['kzl']= 'Pt'; - } + $ldap = $this->config->get_ldap_link(); + $ldap->cd($this->config->current['BASE']); + + /* 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'] = 'Pl'; + $this->FAIclasses[$attr['cn'][0]]=$attr['cn'][0]; + } + if(in_array('FAItemplate',$attr['objectClass'])){ + $tmp2[$cn]['FAItemplate']['obj'] = 'FAItemplate'; + $tmp2[$cn]['FAItemplate']['kzl'] = 'T'; + $this->FAIclasses[$attr['cn'][0]]=$attr['cn'][0]; + } + if(in_array('FAIvariable',$attr['objectClass'])){ + $tmp2[$cn]['FAIvariable']['obj'] = 'FAIvariable'; + $tmp2[$cn]['FAIvariable']['kzl'] = 'V'; + $this->FAIclasses[$attr['cn'][0]]=$attr['cn'][0]; + } + if(in_array('FAIscript',$attr['objectClass'])){ + $tmp2[$cn]['FAIscript']['obj'] = 'FAIscript'; + $tmp2[$cn]['FAIscript']['kzl'] = 'S'; + $this->FAIclasses[$attr['cn'][0]]=$attr['cn'][0]; + } + if(in_array('FAIhook',$attr['objectClass'])){ + $tmp2[$cn]['FAIhook']['obj'] = 'FAIhook'; + $tmp2[$cn]['FAIhook']['kzl'] = 'H'; + $this->FAIclasses[$attr['cn'][0]]=$attr['cn'][0]; + } + if(in_array('FAIpartitionTable',$attr['objectClass'])){ + $tmp2[$cn]['FAIpartitionTable']['obj']= 'FAIpartitionTable'; + $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]; } } @@ -148,28 +173,42 @@ class workstartup extends plugin $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= "\"\" ". @@ -192,27 +231,36 @@ class workstartup extends plugin } /* FAI class management */ - if((isset($_POST['AddClass']))&&(isset($_POST['FAIclassesSel']))){ - $this->FAIclass[$_POST['FAIclassesSel']]=$_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){ + if($atr['obj'] == "FAIpartitionTable"){ + $found ++ ; + } + } + } + } + if((isset($this->FAIclassInfo[$_POST['FAIclassesSel']]['FAIpackageList']))&&($found>0)){ + print_red(_("There is already a profile in your selection that contain partition table configuratons.")); + }else{ + $this->FAIclass[$_POST['FAIclassesSel']]=$_POST['FAIclassesSel']; + } + } + /* Delete selected class from our list */ if((isset($_POST['DelClass']))&&(isset($_POST['FAIclassSel']))){ if(isset($this->FAIclass[$_POST['FAIclassSel']])){ unset($this->FAIclass[$_POST['FAIclassSel']]); } } - - - - - - - - - /* Show main page */ $smarty= get_smarty(); @@ -234,8 +282,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; } } @@ -258,12 +306,12 @@ class workstartup extends plugin } /* Values */ - foreach(array("gotoBootKernel", "customParameters", "gotoShare","FAIclasses","FAIclass") as $val){ + foreach(array("gotoBootKernel", "customParameters", "gotoShare","FAIclasses","FAIclass","FAIdebianMirror") as $val){ $smarty->assign($val, $this->$val); $smarty->assign($val."ACL", chkacl($this->acl, $val)); } - - + + $smarty->assign("FAIdebianMirrors",$this->FAIdebianMirrors); $smarty->assign("FAIclasses",$this->selectFriendlyClasses()); $smarty->assign("FAIclassesKeys",array_flip($this->selectFriendlyClasses())); $smarty->assign("FAIclassKeys",$this->FAIclass); @@ -291,15 +339,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()); + } @@ -323,6 +401,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! */ @@ -372,6 +465,7 @@ class workstartup extends plugin $this->gotoKernelParameters.= " o ".$this->customParameters; } + /* Create numeric index for our classes */ $tmp = array(); foreach($this->FAIclass as $class){ $tmp[] = $class; @@ -397,9 +491,34 @@ class workstartup extends plugin foreach($this->FAIclass as $class){ $tmp[] = $class; } - $this->FAIclass = $tmp; + $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){ + if($class != "FAIobject"){ + $tmp[] = $class; + } + } + $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);