/**
  * Returns the configuration dependent on given items.
  *
  * @param array $item_names
  *   An array of item names.
  *
  * @return array
  *   An array of config items.
  */
 protected function getConfigDependents(array $item_names = NULL)
 {
     $result = [];
     $config_collection = $this->featuresManager->getConfigCollection();
     $packages = $this->featuresManager->getPackages();
     $settings = $this->featuresManager->getSettings();
     $allow_conflicts = $settings->get('conflicts');
     if (empty($item_names)) {
         $item_names = array_keys($config_collection);
     }
     foreach ($item_names as $item_name) {
         if ($config_collection[$item_name]->getPackage()) {
             foreach ($config_collection[$item_name]->getDependents() as $dependent_item_name) {
                 if (isset($config_collection[$dependent_item_name])) {
                     $allow = TRUE;
                     if (!$allow_conflicts && $config_collection[$dependent_item_name]->getPackage()) {
                         if ($packages[$config_collection[$dependent_item_name]->getPackage()]) {
                             $allow = $packages[$config_collection[$dependent_item_name]->getPackage()]->getStatus() == FeaturesManagerInterface::STATUS_NO_EXPORT || $config_collection[$item_name]->getPackage() == $config_collection[$dependent_item_name]->getPackage();
                         }
                     }
                     if ($allow) {
                         $result[] = $dependent_item_name;
                     }
                 }
             }
         }
     }
     return $result;
 }
 /**
  * Returns the configuration dependent on given items.
  *
  * @param array $item_names
  *   An array of item names.
  * @param string $package_name
  *   Short machine name of feature to process.
  *
  * @return array
  *   An array of config items.
  */
 protected function getConfigDependents(array $item_names, $package_name)
 {
     $result = [];
     $config_collection = $this->featuresManager->getConfigCollection();
     $packages = $this->featuresManager->getPackages();
     $settings = $this->featuresManager->getSettings();
     $allow_conflicts = $settings->get('conflicts');
     if (empty($item_names)) {
         $item_names = array_keys($config_collection);
     }
     // Add any existing auto-detected items already in the package config
     $this->package = $packages[$package_name];
     $package_config = isset($this->package) ? $this->package->getConfig() : array();
     $package_config = !empty($package_config) ? array_unique(array_merge($package_config, $item_names)) : $item_names;
     foreach ($package_config as $config_name) {
         if (!$config_collection[$config_name]->getPackageExcluded()) {
             $result[] = $config_name;
         }
     }
     // Now add dependents of the items selected
     foreach ($item_names as $item_name) {
         if ($config_collection[$item_name]->getPackage()) {
             foreach ($config_collection[$item_name]->getDependents() as $dependent_item_name) {
                 if (isset($config_collection[$dependent_item_name])) {
                     $allow = TRUE;
                     if (!$allow_conflicts && $config_collection[$dependent_item_name]->getPackage()) {
                         if ($packages[$config_collection[$dependent_item_name]->getPackage()]) {
                             $allow = $packages[$config_collection[$dependent_item_name]->getPackage()]->getStatus() == FeaturesManagerInterface::STATUS_NO_EXPORT || $config_collection[$item_name]->getPackage() == $config_collection[$dependent_item_name]->getPackage();
                         }
                     }
                     if ($allow) {
                         $result[] = $dependent_item_name;
                     }
                 }
             }
         }
     }
     return $result;
 }