You are here

public function FeaturesAssignmentBaseType::assignPackages in Features 8.4

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

Class

FeaturesAssignmentBaseType
Class for assigning configuration to packages based on entity types.

Namespace

Drupal\features\Plugin\FeaturesAssignment

Code

public function assignPackages($force = FALSE) {
  $current_bundle = $this->assigner
    ->getBundle();
  $settings = $current_bundle
    ->getAssignmentSettings($this
    ->getPluginId());
  $config_base_types = $settings['types']['config'];
  $config_types = $this->featuresManager
    ->listConfigTypes();
  $config_collection = $this->featuresManager
    ->getConfigCollection();
  foreach ($config_collection as $item_name => $item) {
    if (in_array($item
      ->getType(), $config_base_types)) {
      if (is_null($this->featuresManager
        ->findPackage($item
        ->getShortName())) && !$item
        ->getPackage()) {
        $description = $this
          ->t('Provides @label @type and related configuration.', [
          '@label' => $item
            ->getLabel(),
          '@type' => mb_strtolower($config_types[$item
            ->getType()]),
        ]);
        if (isset($item
          ->getData()['description'])) {
          $description .= ' ' . $item
            ->getData()['description'];
        }
        $this->featuresManager
          ->initPackage($item
          ->getShortName(), $item
          ->getLabel(), $description, 'module', $current_bundle);

        // Update list with the package we just added.
        try {
          $this->featuresManager
            ->assignConfigPackage($item
            ->getShortName(), [
            $item_name,
          ]);
        } catch (\Exception $exception) {
          \Drupal::logger('features')
            ->error($exception
            ->getMessage());
        }
      }
    }
  }
  $entity_types = $this->entityTypeManager
    ->getDefinitions();
  $content_base_types = $settings['types']['content'];
  foreach ($content_base_types as $entity_type_id) {
    if (!isset($packages[$entity_type_id]) && isset($entity_types[$entity_type_id])) {
      $label = $entity_types[$entity_type_id]
        ->getLabel();
      $description = $this
        ->t('Provide @label related configuration.', [
        '@label' => $label,
      ]);
      $this->featuresManager
        ->initPackage($entity_type_id, $label, $description, 'module', $current_bundle);
    }
  }
}