You are here

protected function FeaturesUIController::getConfigDependents in Features 8.4

Same name and namespace in other branches
  1. 8.3 modules/features_ui/src/Controller/FeaturesUIController.php \Drupal\features_ui\Controller\FeaturesUIController::getConfigDependents()

Returns the configuration dependent on given items.

Parameters

array $item_names: An array of item names.

string $package_name: Short machine name of feature to process.

Return value

array An array of config items.

1 call to FeaturesUIController::getConfigDependents()
FeaturesUIController::detect in modules/features_ui/src/Controller/FeaturesUIController.php
Returns a list of auto-detected config items for a feature.

File

modules/features_ui/src/Controller/FeaturesUIController.php, line 104

Class

FeaturesUIController
Returns ajax responses for the Features UI.

Namespace

Drupal\features_ui\Controller

Code

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() : [];
  $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;
}