You are here

FeaturesAssignmentExisting.php in Features 8.4

Same filename and directory in other branches
  1. 8.3 src/Plugin/FeaturesAssignment/FeaturesAssignmentExisting.php

File

src/Plugin/FeaturesAssignment/FeaturesAssignmentExisting.php
View source
<?php

namespace Drupal\features\Plugin\FeaturesAssignment;

use Drupal\Core\Extension\Extension;
use Drupal\features\FeaturesAssignmentMethodBase;
use Drupal\features\FeaturesManagerInterface;

/**
 * Class for assigning existing modules to packages.
 *
 * @Plugin(
 *   id = "existing",
 *   weight = 12,
 *   name = @Translation("Existing"),
 *   description = @Translation("Add exported config to existing packages."),
 * )
 */
class FeaturesAssignmentExisting extends FeaturesAssignmentMethodBase {

  /**
   * Calls assignConfigPackage without allowing exceptions to abort us.
   *
   * @param string $machine_name
   *   Machine name of package.
   * @param \Drupal\Core\Extension\Extension $extension
   *   An Extension object.
   */
  protected function safeAssignConfig($machine_name, Extension $extension) {
    $config = $this->featuresManager
      ->listExtensionConfig($extension);
    try {
      $this->featuresManager
        ->assignConfigPackage($machine_name, $config);
    } catch (\Exception $exception) {
      \Drupal::logger('features')
        ->error($exception
        ->getMessage());
    }
  }

  /**
   * {@inheritdoc}
   */
  public function assignPackages($force = FALSE) {
    $packages = $this->featuresManager
      ->getPackages();

    // Assign config to installed modules first.
    foreach ($packages as $name => $package) {

      // @todo Introduce $package->isInstalled() and / or $package->isUninstalled().
      if ($package
        ->getStatus() === FeaturesManagerInterface::STATUS_INSTALLED) {
        $this
          ->safeAssignConfig($package
          ->getMachineName(), $package
          ->getExtension());
      }
    }

    // Now assign to uninstalled modules.
    foreach ($packages as $name => $package) {
      if ($package
        ->getStatus() === FeaturesManagerInterface::STATUS_UNINSTALLED) {
        $this
          ->safeAssignConfig($package
          ->getMachineName(), $package
          ->getExtension());
      }
    }
  }

}

Classes

Namesort descending Description
FeaturesAssignmentExisting Class for assigning existing modules to packages.