FeaturesAssignmentExisting.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <?php
  2. namespace Drupal\features\Plugin\FeaturesAssignment;
  3. use Drupal\features\FeaturesAssignmentMethodBase;
  4. use Drupal\features\FeaturesManagerInterface;
  5. /**
  6. * Class for assigning existing modules to packages.
  7. *
  8. * @Plugin(
  9. * id = "existing",
  10. * weight = 12,
  11. * name = @Translation("Existing"),
  12. * description = @Translation("Add exported config to existing packages."),
  13. * )
  14. */
  15. class FeaturesAssignmentExisting extends FeaturesAssignmentMethodBase {
  16. /**
  17. * Calls assignConfigPackage without allowing exceptions to abort us.
  18. *
  19. * @param string $machine_name
  20. * Machine name of package.
  21. * @param \Drupal\Core\Extension\Extension $extension
  22. * An Extension object.
  23. */
  24. protected function safeAssignConfig($machine_name, $extension) {
  25. $config = $this->featuresManager->listExtensionConfig($extension);
  26. try {
  27. $this->featuresManager->assignConfigPackage($machine_name, $config);
  28. }
  29. catch (\Exception $exception) {
  30. \Drupal::logger('features')->error($exception->getMessage());
  31. }
  32. }
  33. /**
  34. * {@inheritdoc}
  35. */
  36. public function assignPackages($force = FALSE) {
  37. $packages = $this->featuresManager->getPackages();
  38. // Assign config to installed modules first.
  39. foreach ($packages as $name => $package) {
  40. // @todo Introduce $package->isInstalled() and / or $package->isUninstalled().
  41. if ($package->getStatus() === FeaturesManagerInterface::STATUS_INSTALLED) {
  42. $this->safeAssignConfig($package->getMachineName(), $package->getExtension());
  43. }
  44. }
  45. // Now assign to uninstalled modules.
  46. foreach ($packages as $name => $package) {
  47. if ($package->getStatus() === FeaturesManagerInterface::STATUS_UNINSTALLED) {
  48. $this->safeAssignConfig($package->getMachineName(), $package->getExtension());
  49. }
  50. }
  51. }
  52. }