You are here

public function FeaturesAssignmentPackages::assignPackages in Features 8.4

Same name and namespace in other branches
  1. 8.3 src/Plugin/FeaturesAssignment/FeaturesAssignmentPackages.php \Drupal\features\Plugin\FeaturesAssignment\FeaturesAssignmentPackages::assignPackages()

Performs package assignment.

Parameters

bool $force: (optional) If TRUE, assign config regardless of restrictions such as it being already assigned to a package.

Overrides FeaturesAssignmentMethodInterface::assignPackages

File

src/Plugin/FeaturesAssignment/FeaturesAssignmentPackages.php, line 22

Class

FeaturesAssignmentPackages
Class for assigning existing modules to packages.

Namespace

Drupal\features\Plugin\FeaturesAssignment

Code

public function assignPackages($force = FALSE) {
  $bundle = $this->assigner
    ->getBundle();
  $existing = $this->featuresManager
    ->getFeaturesModules();
  foreach ($existing as $extension) {
    $package = $this->featuresManager
      ->initPackageFromExtension($extension);
    $short_name = $package
      ->getMachineName();

    // Copy over package excluded settings, if any.
    if ($package
      ->getExcluded()) {
      $config_collection = $this->featuresManager
        ->getConfigCollection();
      foreach ($package
        ->getExcluded() as $config_name) {
        if (isset($config_collection[$config_name])) {
          $package_excluded = $config_collection[$config_name]
            ->getPackageExcluded();
          $package_excluded[] = $short_name;
          $config_collection[$config_name]
            ->setPackageExcluded($package_excluded);
        }
      }
      $this->featuresManager
        ->setConfigCollection($config_collection);
    }

    // Assign required components, if any.
    if ($package
      ->getRequired() !== FALSE) {
      $config = $package
        ->getRequired();
      if (empty($config) || !is_array($config)) {

        // If required is "true" or empty, add all config as required.
        $config = $this->featuresManager
          ->listExtensionConfig($extension);
      }
      $this->featuresManager
        ->assignConfigPackage($short_name, $config);
    }
  }
}