/** * Assigns configuration of the types specified in a setting to a package. * * @param string $method_id * The ID of an assignment method. * @param string $machine_name * Machine name of the package. * @param bool $force * (optional) If TRUE, assign config regardless of restrictions such as it * being already assigned to a package. */ protected function assignPackageByConfigTypes($method_id, $machine_name, $force = FALSE) { $current_bundle = $this->assigner->getBundle(); $settings = $current_bundle->getAssignmentSettings($method_id); $types = $settings['types']['config']; $config_collection = $this->featuresManager->getConfigCollection(); foreach ($config_collection as $item_name => $item) { if (in_array($item['type'], $types) && !isset($item['package'])) { try { $this->featuresManager->assignConfigPackage($machine_name, [$item_name]); } catch (\Exception $exception) { \Drupal::logger('features')->error($exception->getMessage()); } } } }
/** * Assigns configuration of the types specified in a setting to a package. * * @param string $machine_name * Machine name of the package. * @param bool $force * (optional) If TRUE, assign config regardless of restrictions such as it * being already assigned to a package. */ protected function assignPackageByConfigTypes($machine_name, $force = FALSE) { $current_bundle = $this->assigner->getBundle(); $settings = $current_bundle->getAssignmentSettings($this->getPluginId()); $types = $settings['types']['config']; $config_collection = $this->featuresManager->getConfigCollection(); foreach ($config_collection as $item_name => $item) { // Don't assign configuration that's provided by an extension. if (in_array($item->getType(), $types) && !$item->isProviderExcluded()) { try { $this->featuresManager->assignConfigPackage($machine_name, [$item_name]); } catch (\Exception $exception) { \Drupal::logger('features')->error($exception->getMessage()); } } } }
/** * @covers ::assignConfigPackage */ public function testAssignConfigPackageWithExtensionProvidedConfig() { $config_collection = ['test_config' => new ConfigurationItem('test_config', []), 'test_config2' => new ConfigurationItem('test_config2', [], ['extensionProvided' => TRUE])]; $this->featuresManager->setConfigCollection($config_collection); $feature_assigner = $this->prophesize(FeaturesAssignerInterface::class); $feature_assigner->getBundle(NULL)->willReturn(new FeaturesBundle(['machine_name' => 'default'], 'features_bundle')); $this->featuresManager->setAssigner($feature_assigner->reveal()); $package = new Package('test_package'); $original_package = clone $package; $this->featuresManager->setPackage($package); $this->featuresManager->assignConfigPackage('test_package', ['test_config', 'test_config2']); $this->assertEquals(['test_config'], $this->featuresManager->getPackage('test_package')->getConfig(), 'just assign new packages'); $this->featuresManager->setPackage($original_package); $this->featuresManager->assignConfigPackage('test_package', ['test_config', 'test_config2'], TRUE); $this->assertEquals(['test_config', 'test_config2'], $this->featuresManager->getPackage('test_package')->getConfig(), 'just assign new packages'); }