X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=trunk%2Fgosa-plugins%2Fgoto%2Fadmin%2Fsystems%2Fgoto%2Fclass_workstationStartup.inc;h=b1ae491fcc536fb43adbaa9feac5d5332f53a839;hb=babd4528edd7a7dd5e52979e5d313df0a097d76a;hp=b7c3c97098a72f1edcb36f3fcfb0a7a87a60d2bf;hpb=30cce8a4fa59c10e17db45e1c3fdb1e9c1586474;p=gosa.git diff --git a/trunk/gosa-plugins/goto/admin/systems/goto/class_workstationStartup.inc b/trunk/gosa-plugins/goto/admin/systems/goto/class_workstationStartup.inc index b7c3c9709..b1ae491fc 100644 --- a/trunk/gosa-plugins/goto/admin/systems/goto/class_workstationStartup.inc +++ b/trunk/gosa-plugins/goto/admin/systems/goto/class_workstationStartup.inc @@ -650,18 +650,18 @@ class workstartup extends plugin } $i ++ ; - /* Get Description tag - * There may be several FAI objects with the same class name, - * use the description from FAIprofile, if possible. + /* Get used FAI types from the class */ - $abbrevations = $this->get_abbrevations_string($class); - - if(!empty($abbrevations)){ - $abbrevations = " [".trim($abbrevations)."]"; - } + if(!$marker) { + $types = $this->get_fai_types_string($class, true); + } + else { + $types = ""; + } $div->AddEntry(array( - array("string"=>$class.$abbrevations.$marker), + array("string"=>$class.$marker), + array("string"=>$types), array("string"=>preg_replace("/\%s/",base64_encode($class),$str),"attach"=>"style='width:50px;border-right:none;'") )); } @@ -694,6 +694,18 @@ class workstartup extends plugin function remove_from_parent() { + /* Cancel if there's nothing to do here */ + if ((!$this->acl_is_removeable())){ + return; + } + + /* Remove and write to LDAP */ + plugin::remove_from_parent(); + $ldap = $this->config->get_ldap_link(); + $ldap->cd($this->dn); + $this->cleanup(); + $this->attrs['gotoModules'] = array(); + $ldap->modify($this->attrs); $this->handle_post_events("remove"); new log("remove","workstation/".get_class($this),$this->dn); } @@ -845,7 +857,7 @@ class workstartup extends plugin } } - if ($this->attrs['gotoBootKernel'] == "default-inherited"){ + if ($this->gotoBootKernel == "default-inherited"){ $this->attrs['gotoBootKernel']= array(); } @@ -991,7 +1003,7 @@ class workstartup extends plugin plugin::PrepareForCopyPaste($source); $source_o = new workstartup ($this->config, $source['dn']); foreach(array("FAIclass","gotoModules", "gotoAutoFs", "gotoFilesystem", - "gotoKernelParameters","gotoShares") as $attr){ + "gotoKernelParameters","gotoShares","gotoLdapServers", "gotoLdap_inherit") as $attr){ $this->$attr = $source_o->$attr; } } @@ -1044,6 +1056,44 @@ class workstartup extends plugin )); } + /* Function to find bad classes */ + function update_bad_classes($release) + { + + if(!isset($this->cache['BAD_CLASSES'][$release])) { + /* Find "bad" classes */ + $ui = get_userinfo(); + $ldap = $this->config->get_ldap_link(); + + /* Convert release name to a valid ldap uri component */ + $release_components = split('/', $release); + $release_components = array_reverse($release_components); + for($i=0;$iconfig->current['BASE']); + + /* Build a list of all fai classes, that don't have the unittag of the user + * and are not freezed or removed. The classes will be filtered by this + * list. Its needed to specify each objectClass (FAIpackageList etc.) because + * FAIClass would match sub-objects, too, which would lead to an array that + * is much bigger then needed */ + $filter = sprintf('(&(|(objectClass=FAItemplate)(objectClass=FAIpackageList)(objectClass=FAIprofile)(objectClass=FAIscript)(objectClass=FAIpartitionTable)(objectClass=FAIHook)(objectClass=FAIvariable)(objectClass=FAItemplate))(&(!(gosaUnitTag=%s))(&(!(FAIstate=*removed*))(!(FAIstate=*freeze*)))))', $ui->gosaUnitTag); + $ldap->cd($base); + $ldap->search(sprintf("$filter", $ui->gosaUnitTag)); + + $this->cache['BAD_CLASSES'][$release] = array(); + while ($entry = $ldap->fetch()) { + $classname = $entry['cn'][0]; + if (!in_array($classname, $this->cache['BAD_CLASSES'][$release])) { + array_push($this->cache['BAD_CLASSES'][$release], $classname); + } + } + } + } /* Updates release dns * and reads all classes for the current release, @@ -1064,7 +1114,7 @@ class workstartup extends plugin if($force || !isset($this->cache['SERVERS'])){ $o_queue = new gosaSupportDaemon(); - $tmp = $o_queue->FAI_get_server(); + $servers = $o_queue->FAI_get_server(); if($o_queue->is_error()){ msg_dialog::display(_("Service infrastructure"),msgPool::siError($o_queue->get_error()),ERROR_DIALOG); $this->si_fai_action_failed = TRUE; @@ -1072,12 +1122,20 @@ class workstartup extends plugin return; }else{ - foreach($tmp as $entry){ - $rel = $entry['FAI_RELEASE']; + $base = $this->config->current['BASE']; + $ldap = $this->config->get_ldap_link(); + foreach($servers as $server){ + /* Dont show servers that have a different unittag as the user*/ + $ui = get_userinfo(); + if ($ui->gosaUnitTag != $server['TAG']) { + continue; + } + + $rel = $server['FAI_RELEASE']; $this->cache['SERVERS']['auto'][$rel] = $rel; - $this->cache['SERVERS'][$entry['SERVER']][$rel] = $rel; + $this->cache['SERVERS'][$server['SERVER']][$rel] = $rel; uksort($this->cache['SERVERS']['auto'], 'strnatcasecmp'); - uksort($this->cache['SERVERS'][$entry['SERVER']], 'strnatcasecmp'); + uksort($this->cache['SERVERS'][$server['SERVER']], 'strnatcasecmp'); } } } @@ -1133,6 +1191,13 @@ class workstartup extends plugin }else{ foreach($classes as $class){ $classname = $class['CLASS']; + $this->update_bad_classes($release); + if(isset($this->cache['BAD_CLASSES'][$release])){ + /* Skip classes that are in the array of bad classes */ + if (in_array($classname, $this->cache['BAD_CLASSES'][$release])) { + continue; + } + } if (!isset($this->cache['CLASSES'][$release][$classname])) { $this->cache['CLASSES'][$release][$classname] = array(); } @@ -1233,16 +1298,33 @@ class workstartup extends plugin return($NA); } + function get_fai_types_string($class_name, $image=FALSE) { + $classes = $this->get_classes(); + $result = array(); - function get_abbrevations_string($class_name) { - $classes = $this->get_classes(); + if ($image) { + # Pre-fill the array fields with an empty image so that + # everything looks fine if the type in this position + # doesn't exist in that class + for ($i=0; $i<6; $i++) { + $result[$i] = " "; + } + } - $Abbr = ""; - foreach($classes[$class_name] as $class_type) { - $Abbr .= $class_type['Abbr']." "; + foreach($classes[$class_name] as $type) { + $index = $type['index']; + if ($image) { + $string = " "; + } + else { + $string = $type['Abbr']; + } + + $result[$index] = $string; } - return trim($Abbr); + return join(' ', $result); + } /* Get all selectable classes for the ui select box @@ -1254,7 +1336,7 @@ class workstartup extends plugin $ret= array(); foreach($classes as $class_name => $class_types) { if (!in_array($class_name, $this->FAIclass)) { - $ret[$class_name] = $this->get_abbrevations_string($class_name); + $ret[$class_name] = $this->get_fai_types_string($class_name); } } uksort($ret, 'strnatcasecmp'); @@ -1267,40 +1349,60 @@ class workstartup extends plugin */ function analyse_fai_object($attr) { - $tmp = array(); + $result = array(); switch($attr['TYPE']){ - + case 'FAIpartitionTable': + $result["Type"]= 'FAIpartitionTable'; + $result["Abbr"]= 'Pt'; + $result["img"]= 'plugins/fai/images/fai_partitionTable.png'; + $result["desc"] = _('Partition table'); + $result["index"]= 0; + break; case 'FAIpackageList': - $tmp["Type"]= 'FAIpackageList'; - $tmp["Abbr"]= 'Pl'; + $result["Type"]= 'FAIpackageList'; + $result["Abbr"]= 'Pl'; + $result["img"] = 'plugins/fai/images/fai_packages.png'; + $result["desc"] = _('Package list'); + $result["index"] = 1; break; - case 'FAItemplate': - $tmp["Type"]= 'FAItemplate'; - $tmp["Abbr"]= 'T'; + case 'FAIscript': + $result["Type"]= 'FAIscript'; + $result["Abbr"]= 'S'; + $result["img"]= 'plugins/fai/images/fai_script.png'; + $result["desc"] = _('Scripts'); + $result["index"] = 2; break; case 'FAIvariable': - $tmp["Type"]= 'FAIvariable'; - $tmp["Abbr"]= 'V'; - break; - case 'FAIscript': - $tmp["Type"]= 'FAIscript'; - $tmp["Abbr"]= 'S'; + $result["Type"]= 'FAIvariable'; + $result["Abbr"]= 'V'; + $result["img"]= 'plugins/fai/images/fai_variable.png'; + $result["desc"] = _('Variables'); + $result["index"]= 3; break; case 'FAIhook': - $tmp["Type"]= 'FAIhook'; - $tmp["Abbr"]= 'H'; - break; - case 'FAIpartitionTable': - $tmp["Type"]= 'FAIpartitionTable'; - $tmp["Abbr"]= 'Pt'; + $result["Type"]= 'FAIhook'; + $result["Abbr"]= 'H'; + $result["img"]= 'plugins/fai/images/fai_hook.png'; + $result["desc"] = _('Hooks'); + $result["index"]= 4; break; case 'FAIprofile': - $tmp["Type"]= 'FAIprofile'; - $tmp["Abbr"]= 'P'; + $result["Type"]= 'FAIprofile'; + $result["Abbr"]= 'P'; + $result["img"]= 'plugins/fai/images/fai_profile.png'; + $result["desc"]= _('Profile'); + $result["index"] = 5; + break; + case 'FAItemplate': + $result["Type"]= 'FAItemplate'; + $result["Abbr"]= 'T'; + $result["img"] = 'plugins/fai/images/fai_template.png'; + $result["desc"]= _('Templates'); + $result["index"] = 6; break; default: trigger_error("Unknown FAI object type!");; } - return($tmp); + return($result); }