Example #1
0
 /**
  * This function will exectute a callback function over all the configurations
  * objects that it process.
  *
  * @param  ConfigIteratorSettings $settings
  *   A ConfigIteratorSettings instance that specifies, which is the callback
  *   to execute. If dependencies and optional configurations should be
  *   processed too, and storage the cache of already processed configurations.
  *
  * @see importToActiveStore()
  * @see exportToDataStore()
  * @see revertActiveStore()
  * @see discoverRequiredModules()
  */
 public function iterate(ConfigIteratorSettings &$settings)
 {
     $callback = $settings->getCallback();
     $build_callback = $settings->getBuildCallback();
     if ($settings->alreadyProcessed($this) || $settings->excluded($this)) {
         return;
     }
     // First proccess requires the dependencies that have to be processed before
     // load the current configuration.
     if ($settings->processDependencies()) {
         foreach ($this->getDependencies() as $dependency => $config_dependency) {
             // In some callbacks, the dependencies storages the full config object
             // other simply use a plain string. If the object is available, use
             // that version.
             if (is_object($config_dependency)) {
                 $config = $config_dependency;
             } else {
                 $config = $settings->getFromCache($dependency);
                 if (!$config) {
                     $config = ConfigurationManagement::createConfigurationInstance($dependency);
                 }
             }
             $config->setContext($settings);
             $config->{$build_callback}();
             $config->iterate($settings);
         }
     }
     if ($settings->alreadyProcessed($this)) {
         return;
     }
     // Now, after proccess the dependencies, proccess the current configuration.
     $this->setContext($settings);
     $this->{$callback}($settings);
     $settings->addToCache($this);
     // After proccess the dependencies and the current configuration, proccess
     // the optionals.
     if ($settings->processOptionals()) {
         foreach ($this->getOptionalConfigurations() as $optional => $optional_config) {
             $config = $settings->getFromCache($optional);
             // In some callbacks, the optionals storages the full config object
             // other simply use a plain string. If the object is available, use
             // that version.
             if (is_object($optional_config)) {
                 $config = $optional_config;
             } else {
                 if (!$config) {
                     $config = ConfigurationManagement::createConfigurationInstance($optional);
                 }
             }
             $config->setContext($settings);
             $config->{$build_callback}();
             $config->iterate($settings);
         }
     }
 }