X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Finclude%2Fclass_configRegistry.inc;h=e0e09f94fcf5ee4f77248d840f9a9fe41426553a;hb=9540255fc994b107abc71468c306d408e290d7bb;hp=564978d0d478b4729b8c2bc6d4cd5499c8cbf71d;hpb=928e5d63d17e08ba4b364838c75509d454d4fa74;p=gosa.git diff --git a/gosa-core/include/class_configRegistry.inc b/gosa-core/include/class_configRegistry.inc index 564978d0d..e0e09f94f 100644 --- a/gosa-core/include/class_configRegistry.inc +++ b/gosa-core/include/class_configRegistry.inc @@ -31,9 +31,10 @@ class configRegistry{ $this->fileStoredProperties = array(); $this->properties = array(); $this->mapByClass = array(); + $this->mapByName = array(); $this->mapPropertyToClass = array(); - - // Search for config flags defined in the config file + + // Search for config flags defined in the config file (TAB section) foreach($this->config->data['TABS'] as $tabname => $tabdefs){ foreach($tabdefs as $info){ @@ -54,6 +55,18 @@ class configRegistry{ } } + // Search for config flags defined in the config file (MAIN section) + foreach($this->config->data['MAIN'] as $name => $value){ + $this->fileStoredProperties['core'][strtolower($name)] = $value; + } + + // Search for config flags defined in the config file (Current LOCATION section) + if(isset($this->config->current)){ + foreach($this->config->current as $name => $value){ + $this->fileStoredProperties['core'][strtolower($name)] = $value; + } + } + // Search for all config flags defined in the LDAP - BUT only if we ARE logged in. if(!empty($this->config->current['CONFIG'])){ $ldap = $this->config->get_ldap_link(); @@ -68,7 +81,7 @@ class configRegistry{ } $this->status = 'finished'; } - + global $class_mapping; foreach ($class_mapping as $cname => $path){ $cmethods = get_class_methods($cname); @@ -115,6 +128,10 @@ class configRegistry{ function propertyExists($class,$name) { + if(!isset($this->mapByName[$class][$name])){ + print_a(array($class,$name)); + + } return(isset($this->mapByName[$class][$name])); } @@ -154,6 +171,7 @@ class configRegistry{ foreach($this->properties as $prop){ $prop->save(); } + $this->reload(TRUE); } } @@ -196,18 +214,27 @@ class gosaProperty if(isset($data[$aName])){ $this->$aName = $data[$aName]; } - } + } + + // Initialize with the current value + $this->_restoreCurrentValue(); + } + private function _restoreCurrentValue() + { + // First check for values in the LDAP Database. if(isset($this->parent->ldapStoredProperties[$this->class][$this->name])){ $this->setStatus('ldap'); $this->value = $this->parent->ldapStoredProperties[$this->class][$this->name]; + return; } // Second check for values in the config file. - if(isset($this->parent->fileStoredProperties[$this->class][$this->name])){ + if(isset($this->parent->fileStoredProperties[$this->class][strtolower($this->name)])){ $this->setStatus('file'); - $this->value = $this->parent->fileStoredProperties[$this->class][$this->name]; + $this->value = $this->parent->fileStoredProperties[$this->class][strtolower($this->name)]; + return; } // If there still wasn't found anything then fallback to the default. @@ -238,7 +265,11 @@ class gosaProperty function restoreDefault() { - $this->setStatus('removed'); + if(in_array($this->getStatus(),array('ldap'))){ + $this->setStatus('removed'); + }elseif(in_array($this->getStatus(),array('modified'))){ + $this->_restoreCurrentValue(); + } } function save() @@ -252,16 +283,16 @@ class gosaProperty if(!$ldap->count()){ $ldap->cd($dn); $data = array( - 'cn' => $this->class, - 'objectClass' => array('top','gosaConfig'), - 'gosaSetting' => $this->name.":".$this->value); + 'cn' => $this->class, + 'objectClass' => array('top','gosaConfig'), + 'gosaSetting' => $this->name.":".$this->value); $ldap->add($data); - if($ldap->success()){ - $this->status = 'ldap'; - }else{ + if(!$ldap->success()){ echo $ldap->get_error(); } + $this->_restoreCurrentValue(); + }else{ $attrs = $ldap->fetch(); $data = array(); @@ -277,11 +308,10 @@ class gosaProperty if(!$found) $data['gosaSetting'][] = "{$this->name}:{$this->value}"; $ldap->cd($dn); $ldap->modify($data); - if($ldap->success()){ - $this->status = 'ldap'; - }else{ + if(!$ldap->success()){ echo $ldap->get_error(); } + $this->_restoreCurrentValue(); } }elseif($this->getStatus() == 'removed'){ $ldap = $this->parent->config->get_ldap_link(); @@ -289,7 +319,7 @@ class gosaProperty $dn = "cn={$this->class},".$this->parent->config->current['CONFIG']; $ldap->cat($dn); $attrs = $ldap->fetch(); - $data = array(); + $data = array('gosaSetting' => array()); for($i = 0;$i<$attrs['gosaSetting']['count']; $i ++){ $set = $attrs['gosaSetting'][$i]; if(preg_match("/^{$this->name}:/", $set)){ @@ -299,23 +329,10 @@ class gosaProperty } $ldap->cd($dn); $ldap->modify($data); - if($ldap->success()){ - $this->status = 'undefined'; - - // Second check for values in the config file. - if(isset($this->parent->fileStoredProperties[$this->class][$this->name])){ - $this->setStatus('file'); - $this->value = $this->parent->fileStoredProperties[$this->class][$this->name]; - } - - // If there still wasn't found anything then fallback to the default. - if($this->getStatus() == 'undefined'){ - $this->value = $this->getDefault(); - } - - }else{ + if(!$ldap->success()){ echo $ldap->get_error(); } + $this->_restoreCurrentValue(); } }