X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Finclude%2Fclass_configRegistry.inc;h=e0e09f94fcf5ee4f77248d840f9a9fe41426553a;hb=9540255fc994b107abc71468c306d408e290d7bb;hp=416865203d7a8e2957b7606c9ee563207585c981;hpb=68206c8989e42e3857c8ae0605d1b9976a08c85f;p=gosa.git diff --git a/gosa-core/include/class_configRegistry.inc b/gosa-core/include/class_configRegistry.inc index 416865203..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])); } @@ -148,6 +165,14 @@ class configRegistry{ } return(""); } + + function saveChanges() + { + foreach($this->properties as $prop){ + $prop->save(); + } + $this->reload(TRUE); + } } @@ -189,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. @@ -223,8 +257,19 @@ class gosaProperty function setValue($str) { - $this->setStatus('modified'); - $this->value = $str; + if($this->value != $str){ + $this->setStatus('modified'); + $this->value = $str; + } + } + + function restoreDefault() + { + if(in_array($this->getStatus(),array('ldap'))){ + $this->setStatus('removed'); + }elseif(in_array($this->getStatus(),array('modified'))){ + $this->_restoreCurrentValue(); + } } function save() @@ -238,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(); @@ -263,18 +308,37 @@ 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(); + $ldap->cd($this->parent->config->current['BASE']); + $dn = "cn={$this->class},".$this->parent->config->current['CONFIG']; + $ldap->cat($dn); + $attrs = $ldap->fetch(); + $data = array('gosaSetting' => array()); + for($i = 0;$i<$attrs['gosaSetting']['count']; $i ++){ + $set = $attrs['gosaSetting'][$i]; + if(preg_match("/^{$this->name}:/", $set)){ + continue; + } + $data['gosaSetting'][] = $set; + } + $ldap->cd($dn); + $ldap->modify($data); + if(!$ldap->success()){ + echo $ldap->get_error(); + } + $this->_restoreCurrentValue(); } } private function setStatus($state) { - if(!in_array($state, array('ldap','file','undefined','modified'))) { + if(!in_array($state, array('ldap','file','undefined','modified','removed'))) { trigger_error("Unknown property status given '{$state}' for {$this->class}:{$this->name}!"); }else{ $this->status = $state;