X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;ds=inline;f=gosa-core%2Finclude%2Fclass_configRegistry.inc;h=d2c71a5946dadc093e145ef78618a49b79bb6d5b;hb=7cdfe86c50d0a25ffd0027dc4d26ee35ff422d34;hp=ea80efa573e8ed4068391eca325deabcae59bd87;hpb=d0e0a984c117cd349d3a5664c4074ba6f8a6761d;p=gosa.git diff --git a/gosa-core/include/class_configRegistry.inc b/gosa-core/include/class_configRegistry.inc index ea80efa57..d2c71a594 100644 --- a/gosa-core/include/class_configRegistry.inc +++ b/gosa-core/include/class_configRegistry.inc @@ -50,6 +50,20 @@ class configRegistry{ } } + // Search for config flags defined in the config file (MENU section) + foreach($this->config->data['MENU'] as $section => $entries){ + foreach($entries as $entry){ + if(count($entry) > 2 && isset($entry['CLASS'])){ + $class = $entry['CLASS']; + foreach($entry as $name => $value){ + if(!in_array($name, array('CLASS','ACL'))){ + $this->fileStoredProperties[strtolower($class)][strtolower($name)] = $value; + } + } + } + } + } + // 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; @@ -168,10 +182,21 @@ class configRegistry{ function saveChanges() { + $migrate = array(); foreach($this->properties as $prop){ - $prop->save(); + + // Is this property modified + if(in_array($prop->getStatus(),array('modified','removed'))){ + + // Check if we've to migrate something before we can make the changes effective. + if($prop->migrationRequired()){ + $migrate[] = $prop; + }else{ + $prop->save(); + } + } } - $this->reload(TRUE); + return($migrate); } } @@ -193,6 +218,8 @@ class gosaProperty protected $parent = NULL; protected $data = array(); + protected $migrationClass = NULL; + /*! The current property status * 'ldap' Property is stored in ldap * 'file' Property is stored in the config file @@ -204,6 +231,9 @@ class gosaProperty protected $attributes = array('name','type','default','description','check', 'migrate','mandatory','group','defaults'); + + + function __construct($parent,$classname,$data) { // Set some basic infos @@ -220,6 +250,34 @@ class gosaProperty // Initialize with the current value $this->_restoreCurrentValue(); + + } + + function migrationRequired() + { + // Instantiate migration class + if(!empty($this->migrate) && $this->migrationClass == NULL){ + if(!class_available($this->migrate)){ + trigger_error("Cannot start migration for gosaProperty::'{$this->getName()}' class not found ({$this->migrate})!"); + }else{ + $class = $this->migrate; + $tmp = new $class($this->parent->config,$this); + if(! $tmp instanceof propertyMigration){ + trigger_error("Cannot start migration for gosaProperty::'{$this->getName()}' doesn't implement propertyMigration!"); + }else{ + $this->migrationClass = $tmp; + } + } + } + if(empty($this->migrate) || $this->migrationClass == NULL){ + return(FALSE); + } + return($this->migrationClass->checkForIssues()); + } + + function getMigrationClass() + { + return($this->migrationClass); } function check() @@ -340,7 +398,7 @@ class gosaProperty // Display the reason for failing this check. if($message && ! $match){ - msg_dialog::display(_("Warning"), msgPool::invalid($name,$value), WARNING_DIALOG); + msg_dialog::display(_("Warning"), msgPool::invalid($name,$value,'','cn=user,ou=people,dc=example,dc=de'), WARNING_DIALOG); } return($match); @@ -348,11 +406,11 @@ class gosaProperty static function isRdn($message,$class,$name,$value, $type) { - $match = preg_match("/^([a-z]*=[^=,]*,)*[^=]*=[^=]*$/i", $value); + $match = preg_match("/^([a-z]*=[^=,]*,)*[^=]*=[^=]*,$/i", $value); // Display the reason for failing this check. if($message && ! $match){ - msg_dialog::display(_("Warning"), msgPool::invalid($name,$value), WARNING_DIALOG); + msg_dialog::display(_("Warning"), msgPool::invalid($name,$value,'','ou=people,'), WARNING_DIALOG); } return($match); @@ -369,9 +427,9 @@ class gosaProperty } // Second check for values in the config file. - if(isset($this->parent->fileStoredProperties[$this->class][strtolower($this->name)])){ + if(isset($this->parent->fileStoredProperties[strtolower($this->class)][strtolower($this->name)])){ $this->setStatus('file'); - $this->value = $this->parent->fileStoredProperties[$this->class][strtolower($this->name)]; + $this->value = $this->parent->fileStoredProperties[strtolower($this->class)][strtolower($this->name)]; return; } @@ -458,8 +516,9 @@ class gosaProperty if(!$ldap->success()){ echo $ldap->get_error(); } - } - $this->_restoreCurrentValue(); + } + $this->value = $this->tmp_value; + $this->setStatus('ldap'); }elseif($this->getStatus() == 'removed'){ $ldap = $this->parent->config->get_ldap_link(); $ldap->cd($this->parent->config->current['BASE']); @@ -498,4 +557,12 @@ class gosaProperty } } + + +interface propertyMigration +{ + function __construct($config,$property); +} + + ?>