FeaturesAssignmentPackages.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. <?php
  2. namespace Drupal\features\Plugin\FeaturesAssignment;
  3. use Drupal\features\FeaturesAssignmentMethodBase;
  4. /**
  5. * Class for assigning existing modules to packages.
  6. *
  7. * @Plugin(
  8. * id = "packages",
  9. * weight = -20,
  10. * name = @Translation("Packages"),
  11. * description = @Translation("Detect and add existing package modules."),
  12. * )
  13. */
  14. class FeaturesAssignmentPackages extends FeaturesAssignmentMethodBase {
  15. /**
  16. * {@inheritdoc}
  17. */
  18. public function assignPackages($force = FALSE) {
  19. $bundle = $this->assigner->getBundle();
  20. $existing = $this->featuresManager->getFeaturesModules();
  21. foreach ($existing as $extension) {
  22. $package = $this->featuresManager->initPackageFromExtension($extension);
  23. $short_name = $package->getMachineName();
  24. // Copy over package excluded settings, if any.
  25. if (!$package->getExcluded()) {
  26. $config_collection = $this->featuresManager->getConfigCollection();
  27. foreach ($package->getExcluded() as $config_name) {
  28. if (isset($config_collection[$config_name])) {
  29. $package_excluded = $config_collection[$config_name]->getPackageExcluded();
  30. $package_excluded[] = $short_name;
  31. $config_collection[$config_name]->setPackageExcluded($package_excluded);
  32. }
  33. }
  34. $this->featuresManager->setConfigCollection($config_collection);
  35. }
  36. // Assign required components, if any.
  37. if ($package->getRequired() !== FALSE) {
  38. $config = $package->getRequired();
  39. if (empty($config) || !is_array($config)) {
  40. // if required is "true" or empty, add all config as required
  41. $config = $this->featuresManager->listExtensionConfig($extension);
  42. }
  43. $this->featuresManager->assignConfigPackage($short_name, $config);
  44. }
  45. }
  46. }
  47. }