summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 9d17006)
raw | patch | inline | side by side (parent: 9d17006)
author | cajus <cajus@594d385d-05f5-0310-b6e9-bd551577e9d8> | |
Wed, 12 Dec 2007 10:11:10 +0000 (10:11 +0000) | ||
committer | cajus <cajus@594d385d-05f5-0310-b6e9-bd551577e9d8> | |
Wed, 12 Dec 2007 10:11:10 +0000 (10:11 +0000) |
git-svn-id: https://oss.gonicus.de/repositories/gosa/branches/2.5@8094 594d385d-05f5-0310-b6e9-bd551577e9d8
plugins/admin/systems/class_workstationStartup.inc | patch | blob | history |
diff --git a/plugins/admin/systems/class_workstationStartup.inc b/plugins/admin/systems/class_workstationStartup.inc
index 6177cff8b04c9add66c42f929e9f6abd51c210ee..0f47013a881e76eb534cea75ce53d47d1120e4e5 100644 (file)
/* Perform some special FAI stuff, only if it is activated */
if($this->fai_activated){
+ $_SESSION['getAvailableClassesForThisRelease_CACHE'] = array();
+ $_SESSION['getAvailableClassesForThisRelease_CACHED_CLASSES'] = array();
+
$ui = get_userinfo();
$res = get_list( "(|(objectClass=FAIpackageList)".
"(objectClass=FAItemplate)".
foreach($res as $attr){
$cn = $attr['cn'][0];
+ $_SESSION['getAvailableClassesForThisRelease_CACHED_CLASSES'][] = $attr;
+
if(!isset($attr['description'])){
$attr['description'][0] = "";
}
$this->FAIclassInfo = array();
}
- /* Build up a release array */
+ /* Build up an array like this one :
+ [$url]['SERVER'] = 'srv1-002';
+ [$url]['RELEASE']['siga/rc9.0.2']
+ ['SECTIONS'][0] "main";
+ ['SECTIONS'][1] "non-free";
+ [$url]['RELEASE']['siga/rc9.0.2']
+ ['PACKAGES'][0] "pkg1";
+ ['PACKAGES'][1] "postfix";
+ */
$filter= "";
$ui= get_userinfo();
if (isset($config->current['STRICT_UNITS']) && preg_match('/TRUE/i', $config->current['STRICT_UNITS']) && $ui->gosaUnitTag != ""){ $filter= "(gosaUnitTag=".$ui->gosaUnitTag.")";
- }
-
- /* Fill up releases array */
- $release_bases= array();
- $res= get_list("(&(objectClass=FAIbranch)$filter)", $ui->subtreeACL, $this->config->current['BASE'], array());
- foreach ($res as $value){
- if (!preg_match('/,ou=(apps|mime),/', $value['dn'])){
- $release_bases[$value['dn']]= $value['dn'];
- }
- }
-
- /* Load all classes for each release */
- $releases= array();
- foreach($release_bases as $base){
- $tmp= preg_replace('/,ou=fai,ou=configs,ou=systems,.*$/', '', $base);
- $tmp= explode('ou=', trim(preg_replace('/ou=fai,ou=configs,ou=systems,.*$/', '', $tmp), ','));
- $release= trim(implode('/', array_reverse($tmp)), '/');
- foreach (array("disk", "hooks", "scripts", "packages", "profiles", "templates", "variables") as $type){
- $res= get_list("(&(objectClass=FAIclass)$filter)", $ui->subtreeACL,
- "ou=$type,".$base, array(), GL_NONE);
- foreach ($res as $value){
- $name= preg_replace('/^[^=]+=([^,]+),.*$/', '\1', $value['dn']);
- $releases[$release][]= $name;
- }
- }
-
- sort($releases[$release]);
- $releases[$release]= array_unique($releases[$release]);
- }
-
- /* Load all classes for this release */
- $res= get_list("(&(objectClass=FAIbranch)$filter)", $ui->subtreeACL, $this->config->current['BASE'], array());
-
- /* Fill up server array */
- $ldap->search("(&(FAIrepository=*)(objectClass=FAIrepositoryServer)$filter)",array("FAIrepository"));
+ } $ldap->search("(&(FAIrepository=*)(objectClass=FAIrepositoryServer)$filter)",array("FAIrepository"));
$test = array();
while($attr = $ldap->fetch()){
if(isset($attr['FAIrepository'])){
+
unset($attr['FAIrepository']['count']);
+
foreach($attr['FAIrepository'] as $rep){
- list($url, $server, $release, $sections)= split("\|",$rep);
+ $tmp = split("\|",$rep);
+
+ if(count($tmp)==4){
+ $sections = split(",",$tmp[3]);
+ $release = $tmp[2];
+ $server = $tmp[1];
+ $url = $tmp[0];
- /* Assign non-auto releases */
- $test[$url][$release]['SECTIONS'] = split(',', $sections);
- $test[$url][$release]['CLASSES'] = isset($releases[$release])?$releases[$release]:array();
+ $test[$url]['RELEASE'][$release]['SECTIONS'] = $sections;
- /* auto gets all releases/classes */
- $test['auto'][$release]['SECTION'] = $sections;
- $test['auto'][$release]['CLASSES'] = isset($releases[$release])?$releases[$release]:array();
+ /* Result will be cached
+ */
+ $test[$url]['RELEASE'][$release]['PACKAGES'] = $this->getAvailableClassesForThisRelease($release);
+ $test[$url]['SERVER'] = $server;
+
+ /* auto gets all releases/classes
+ */
+ $test['auto']['RELEASE'][$release]['SECTION'] = $sections;
+ $test['auto']['RELEASE'][$release]['PACKAGES'] = $this->getAvailableClassesForThisRelease($release);
+ }
}
}
}
foreach ($lines as $hline){
$entries= split(";", $hline);
if (isset($entries[1]) && !isset($test[$entries[1]])){
- $test[$entries[1]]= array();
+ $test[$entries[1]]['RELEASE']= array();
/* Split releases */
if (isset($entries[2])){
$rname= preg_replace('/:.*$/', '', $release);
$sections= split(':', preg_replace('/^[^:]+:([^|]+)|.*$/', '\1', $release));
$classes= split('\|', preg_replace('/^[^|]+\|(.*)$/', '\1', $release));
- $test[$entries[1]][$rname]= array();
- $test[$entries[1]][$rname]['SECTION']= $sections;
+ $test[$entries[1]]['RELEASE'][$rname]= array();
+ $test[$entries[1]]['RELEASE'][$rname]['SECTION']= $sections;
foreach ($classes as $class){
if ($class != ""){
- $test[$entries[1]][$rname]['CLASSES'][$class]= $class;
+ $test[$entries[1]]['RELEASE'][$rname]['PACKAGES'][$class]= $class;
}
}
}
}
+ /* This class is called by the contrucktor ONLY.
+ * It return the available classes for each
+ * Server / Release combination ...
+ * (Release specifies which classes are available)
+ */
+ function getAvailableClassesForThisRelease($release)
+ {
+ /* There could be more than one server providing this release,
+ so use cached result if available
+ */
+ if(isset($_SESSION['getAvailableClassesForThisRelease_CACHE'][$release])) {
+ return($_SESSION['getAvailableClassesForThisRelease_CACHE'][$release]);
+ }
+
+ /* Walk through cache and get out what we need.
+ *
+ * Function od : "$this->generateDNSyn($release)"
+ * It returns an array like this one :
+ * array("ou=packges,ou=rc0.9.2,ou=siga,",
+ * "ou=scripts.. "
+ * ...);
+ * This helps us to select the correct classes for each release.
+ * It prevents errors like: 'siga' is selected as release, but all classes
+ * with ou='siga' in their dn are shown, also ou=rc...,ou=siga...
+ */
+ $tmp2 = $this->generateDNSyn($release) ;
+ $test2 = array();
+ foreach($_SESSION['getAvailableClassesForThisRelease_CACHED_CLASSES'] as $attr){
+ foreach($tmp2 as $dns){
+ if(preg_match("/".$dns."/",$attr['dn'])){
+ $test2[$attr['cn'][0]] = $attr['cn'][0];
+ }
+ }
+ }
+ $_SESSION['getAvailableClassesForThisRelease_CACHE'][$release] = $test2;
+ return($test2);
+ }
+
+
/* Create array to display available classes/profiles in a selectbox
* This function only displays the available classes.
* If a class is available is defined by these facts :
/* Get all Packages for this server/release combination
*/
- if(!isset($this->FAIServRepConfig[$this->FAIdebianMirror][$this->FAIrelease]['CLASSES'])){
+ if(!isset($this->FAIServRepConfig[$this->FAIdebianMirror]['RELEASE'][$this->FAIrelease]['PACKAGES'])){
$pkgs = array();
print_red(_("There are packages in your configuration, which can't be resolved with current server/release settings."));
}else{
- $pkgs = $this->FAIServRepConfig[$this->FAIdebianMirror][$this->FAIrelease]['CLASSES'];
+ $pkgs = $this->FAIServRepConfig[$this->FAIdebianMirror]['RELEASE'][$this->FAIrelease]['PACKAGES'];
}
/* Check each and every single class name
}else{
$tmp = $this->getFAIreleases();
foreach($tmp as $release => $data){
- if(isset($rest[$release]) && $release == $this->FAIrelease){
+ if(isset($rest['RELEASE'][$release]) && $release == $this->FAIrelease){
$use = $data['USE'];
}
}
}
$errorClasses = array();
- if(isset($this->FAIServRepConfig[$this->FAIdebianMirror])) {
- foreach($this->FAIServRepConfig[$this->FAIdebianMirror] as $release => $sections){
+ if(isset($this->FAIServRepConfig[$this->FAIdebianMirror]['RELEASE'])) {
+ foreach($this->FAIServRepConfig[$this->FAIdebianMirror]['RELEASE'] as $release => $sections){
$use = true;
if(!count($this->FAIclass) == 0){
foreach($this->FAIclass as $class){
- if(!in_array($class, $sections['CLASSES'])){
+ if(!in_array($class, $sections['PACKAGES'])){
$use = false;
$errorClasses[$class] = $class;
}else{