/** * {@inheritdoc} */ public function createBundlesFromPackages() { $existing_bundles = $this->getBundleList(); $new_bundles = []; // Only parse from installed features. $modules = $this->featuresManager->getFeaturesModules(NULL, TRUE); foreach ($modules as $module) { $info = $this->featuresManager->getExtensionInfo($module); // @todo This entire function could be simplified a lot using packages. $features_info = $this->featuresManager->getFeaturesInfo($module); // Create a new bundle if: // - the feature specifies a bundle and // - that bundle doesn't yet exist locally. // Allow profiles to override previous values. if (!empty($features_info['bundle']) && !isset($existing_bundles[$features_info['bundle']]) && (!in_array($features_info['bundle'], $new_bundles) || $info['type'] == 'profile')) { if ($info['type'] == 'profile') { $new_bundle = ['name' => $info['name'], 'description' => $info['description'], 'is_profile' => TRUE, 'profile_name' => $module->getName()]; } else { $new_bundle = ['name' => isset($info['package']) ? $info['package'] : ucwords(str_replace('_', ' ', $features_info['bundle'])), 'description' => NULL, 'is_profile' => FALSE, 'profile_name' => NULL]; } $new_bundle['machine_name'] = $features_info['bundle']; $new_bundles[$new_bundle['machine_name']] = $new_bundle; } } foreach ($new_bundles as $new_bundle) { $new_bundle = $this->createBundleFromDefault($new_bundle['machine_name'], $new_bundle['name'], $new_bundle['description'], $new_bundle['is_profile']); drupal_set_message($this->t('Features bundle @name automatically created.', ['@name' => $new_bundle->getName()])); } }