You are here

public function FeaturesAssignmentAlter::assignPackages in Features 8.4

Same name and namespace in other branches
  1. 8.3 src/Plugin/FeaturesAssignment/FeaturesAssignmentAlter.php \Drupal\features\Plugin\FeaturesAssignment\FeaturesAssignmentAlter::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/FeaturesAssignmentAlter.php, line 29

Class

FeaturesAssignmentAlter
Class for excluding configuration from packages.

Namespace

Drupal\features\Plugin\FeaturesAssignment

Code

public function assignPackages($force = FALSE) {
  $current_bundle = $this->assigner
    ->getBundle();
  $settings = $current_bundle
    ->getAssignmentSettings($this
    ->getPluginId());

  // Alter configuration items.
  if ($settings['core'] || $settings['uuid'] || $settings['user_permissions']) {
    $config_collection = $this->featuresManager
      ->getConfigCollection();
    foreach ($config_collection as &$config) {
      $data = $config
        ->getData();
      if ($settings['core']) {
        unset($data['_core']);
      }

      // Unset UUID for configuration entities.
      if ($settings['uuid'] && $config
        ->getType() !== FeaturesManagerInterface::SYSTEM_SIMPLE_CONFIG) {
        unset($data['uuid']);
      }

      // Unset permissions for user roles. Doing so facilitates packaging
      // roles that may have permissions that relate to multiple packages.
      if ($settings['user_permissions'] && $config
        ->getType() == 'user_role') {

        // Unset and not empty permissions data to prevent loss of configured
        // role permissions in the event of a feature revert.
        unset($data['permissions']);
      }
      $config
        ->setData($data);
    }

    // Clean up the $config pass by reference.
    unset($config);

    // Register the updated data.
    $this->featuresManager
      ->setConfigCollection($config_collection);
  }
}