diff --git a/drush/features.drush.inc b/drush/features.drush.inc index eb5a64f..f0f8eef 100644 --- a/drush/features.drush.inc +++ b/drush/features.drush.inc @@ -588,16 +588,17 @@ function drush_features_import() { $dt_args['@component'] = $component; $confirmation_message = 'Do you really want to import @module : @component?'; if ($skip_confirmation || drush_confirm(dt($confirmation_message, $dt_args))) { + /** @var \Drupal\features\ConfigurationItem $item */ if (!isset($config[$component])) { // Import missing component. $item = $manager->getConfigType($component); - $config_revert->import($item['type'], $item['name_short']); + $config_revert->import($item->getType(), $item->getShortName()); drush_log(dt('Import @module : @component.', $dt_args), 'ok'); } else { // Revert existing component. $item = $config[$component]; - $config_revert->revert($item['type'], $item['name_short']); + $config_revert->revert($item->getType(), $item->getShortName()); drush_log(dt('Reverted @module : @component.', $dt_args), 'ok'); } } @@ -668,7 +669,7 @@ function _drush_features_component_list() { $manager = \Drupal::service('features.manager'); $config = $manager->getConfigCollection(); foreach ($config as $item_name => $item) { - $result[$item['type']][$item['name_short']] = $item['label']; + $result[$item->getType()][$item->getShortName()] = $item->getLabel(); } return $result; } @@ -834,12 +835,15 @@ function _drush_features_get_component_map() { $packages = $manager->getPackages(); foreach ($config as $item_name => $item) { - if (!isset($result[$item['type']][$item['name_short']])) { - $result[$item['type']][$item['name_short']] = array(); - } - if (!empty($item['package'])) { - $package = $packages[$item['package']]; - $result[$item['type']][$item['name_short']][] = $package['machine_name']; + $type = $item->getType(); + $short_name = $item->getShortName(); + $name = $item->getName(); + if (!isset($result[$type][$short_name])) { + $result[$type][$short_name] = array(); + } + if (!empty($item->getPackage())) { + $package = $packages[$item->getPackage()]; + $result[$type][$short_name][] = $name; } } diff --git a/modules/features_ui/src/Controller/FeaturesUIController.php b/modules/features_ui/src/Controller/FeaturesUIController.php index 3edb00c..4d08d88 100644 --- a/modules/features_ui/src/Controller/FeaturesUIController.php +++ b/modules/features_ui/src/Controller/FeaturesUIController.php @@ -88,7 +88,7 @@ class FeaturesUIController implements ContainerInjectionInterface { $result = []; foreach ($detected as $name) { $item = $config_collection[$name]; - $result[$item['type']][$item['name_short']] = $item['name']; + $result[$item->getType()][$item->getShortName()] = $item->getName(); } return new JsonResponse($result); } @@ -114,14 +114,14 @@ class FeaturesUIController implements ContainerInjectionInterface { } foreach ($item_names as $item_name) { - if (!empty($config_collection[$item_name]['package'])) { - foreach ($config_collection[$item_name]['dependents'] as $dependent_item_name) { + if ($config_collection[$item_name]->getPackage()) { + foreach ($config_collection[$item_name]->getDependents() as $dependent_item_name) { if (isset($config_collection[$dependent_item_name])) { $allow = TRUE; - if (!$allow_conflicts && !empty($config_collection[$dependent_item_name]['package'])) { - if (!empty($packages[$config_collection[$dependent_item_name]['package']])) { - $allow = ($packages[$config_collection[$dependent_item_name]['package']]['status'] == FeaturesManagerInterface::STATUS_NO_EXPORT) - || ($config_collection[$item_name]['package'] == $config_collection[$dependent_item_name]['package']); + if (!$allow_conflicts && $config_collection[$dependent_item_name]->getPackage()) { + if ($packages[$config_collection[$dependent_item_name]->getPackage()]) { + $allow = ($packages[$config_collection[$dependent_item_name]->getPackage()]['status'] == FeaturesManagerInterface::STATUS_NO_EXPORT) + || ($config_collection[$item_name]->getPackage() == $config_collection[$dependent_item_name]->getPackage()); } } if ($allow) { diff --git a/modules/features_ui/src/Form/FeaturesDiffForm.php b/modules/features_ui/src/Form/FeaturesDiffForm.php index 56ef00c..ec70e3c 100644 --- a/modules/features_ui/src/Form/FeaturesDiffForm.php +++ b/modules/features_ui/src/Form/FeaturesDiffForm.php @@ -190,7 +190,7 @@ class FeaturesDiffForm extends FormBase { foreach ($items as $config_name) { if (isset($config[$config_name])) { $item = $config[$config_name]; - $this->configRevert->revert($item['type'], $item['name_short']); + $this->configRevert->revert($item->getType(), $item->getShortName()); } else { $item = $this->featuresManager->getConfigType($config_name); diff --git a/modules/features_ui/src/Form/FeaturesEditForm.php b/modules/features_ui/src/Form/FeaturesEditForm.php index 0a113bf..239abe0 100644 --- a/modules/features_ui/src/Form/FeaturesEditForm.php +++ b/modules/features_ui/src/Form/FeaturesEditForm.php @@ -518,14 +518,14 @@ class FeaturesEditForm extends FormBase { $components = array(); $this->conflicts = array(); foreach ($config as $item_name => $item) { - if (!empty($item['package']) && ($item['package'] != $package_name) && - !empty($packages[$item['package']]) && ($packages[$item['package']]['status'] != FeaturesManagerInterface::STATUS_NO_EXPORT)) { - $this->conflicts[$item['type']][$item['name_short']] = $item; + if (($item->getPackage() != $package_name) && + !empty($packages[$item->getPackage()]) && ($packages[$item->getPackage()]['status'] != FeaturesManagerInterface::STATUS_NO_EXPORT)) { + $this->conflicts[$item->getType()][$item->getShortName()] = $item; } if ($this->allowConflicts - || !isset($this->conflicts[$item['type']][$item['name_short']]) + || !isset($this->conflicts[$item->getType()][$item->getShortName()]) || (!empty($this->package['config_orig']) && in_array($item_name, $this->package['config_orig']))) { - $components[$item['type']][$item['name_short']] = $item; + $components[$item->getType()][$item->getShortName()] = $item; } } @@ -536,7 +536,7 @@ class FeaturesEditForm extends FormBase { $item = $config[$item_name]; // Remove any conflicts if those are not being allowed. // if ($this->allowConflicts || !isset($this->conflicts[$item['type']][$item['name_short']])) { - $exported_features_info[$item['type']][$item['name_short']] = $item; + $exported_features_info[$item->getType()][$item->getShortName()] = $item; // } } } @@ -548,7 +548,7 @@ class FeaturesEditForm extends FormBase { $info = !empty($this->package['info']['features'][$constraint]) ? $this->package['info']['features'][$constraint] : array(); foreach ($info as $item_name) { $item = $config[$item_name]; - $this->{$constraint}[$item['type']][$item['name_short']] = $item; + $this->{$constraint}[$item->getType()][$item->getShortName()] = $item; } } @@ -556,7 +556,7 @@ class FeaturesEditForm extends FormBase { $new_features_info = array(); foreach ($this->package['config'] as $item_name) { $item = $config[$item_name]; - $new_features_info[$item['type']][$item['name_short']] = $item; + $new_features_info[$item->getType()][$item->getShortName()] = $item; } $new_features_info['dependencies'] = !empty($this->package['dependencies']) ? $this->package['dependencies'] : array(); diff --git a/modules/features_ui/src/Form/FeaturesExportForm.php b/modules/features_ui/src/Form/FeaturesExportForm.php index 4f0725f..bc9dc19 100644 --- a/modules/features_ui/src/Form/FeaturesExportForm.php +++ b/modules/features_ui/src/Form/FeaturesExportForm.php @@ -328,9 +328,9 @@ class FeaturesExportForm extends FormBase { $package_config = array(); foreach ($package['config'] as $item_name) { $item = $config_collection[$item_name]; - $package_config[$item['type']][] = array( + $package_config[$item->getType()][] = array( 'name' => SafeMarkup::checkPlain($item_name), - 'label' => SafeMarkup::checkPlain($item['label']), + 'label' => SafeMarkup::checkPlain($item->getLabel()), 'class' => in_array($item_name, $overrides) ? 'features-override' : (in_array($item_name, $new_config) ? 'features-detected' : ''), ); @@ -349,9 +349,9 @@ class FeaturesExportForm extends FormBase { elseif (!in_array($item_name, $package['config'])) { $item = $config_collection[$item_name]; $conflicts[] = $item_name; - $package_config[$item['type']][] = array( + $package_config[$item->getType()][] = array( 'name' => SafeMarkup::checkPlain($item_name), - 'label' => SafeMarkup::checkPlain($item['label']), + 'label' => SafeMarkup::checkPlain($item->getLabel()), 'class' => 'features-conflict', ); } @@ -463,7 +463,7 @@ class FeaturesExportForm extends FormBase { * * @param array $packages * An array of package names. - * @param array $config_collection + * @param \Drupal\features\ConfigurationItem[] $config_collection * A collection of configuration. */ protected function addUnpackaged(array &$packages, array $config_collection) { @@ -476,7 +476,7 @@ class FeaturesExportForm extends FormBase { 'version' => '', ); foreach ($config_collection as $item_name => $item) { - if (empty($item['package']) && !$item['extension_provided']) { + if (!$item->getPackage() && !$item->isExtensionProvided()) { $packages['unpackaged']['config'][] = $item_name; } } diff --git a/src/FeaturesAssignmentMethodBase.php b/src/FeaturesAssignmentMethodBase.php index 3f8e999..6a3e231 100644 --- a/src/FeaturesAssignmentMethodBase.php +++ b/src/FeaturesAssignmentMethodBase.php @@ -95,7 +95,7 @@ abstract class FeaturesAssignmentMethodBase implements FeaturesAssignmentMethodI foreach ($config_collection as $item_name => $item) { // Don't assign configuration that's provided by an extension. - if (in_array($item['type'], $types) && !($item['extension_provided'])) { + if (in_array($item->getType(), $types) && !($item->isExtensionProvided())) { try { $this->featuresManager->assignConfigPackage($machine_name, [$item_name]); } @@ -122,8 +122,8 @@ abstract class FeaturesAssignmentMethodBase implements FeaturesAssignmentMethodI $config_collection = $this->featuresManager->getConfigCollection(); foreach ($config_collection as &$item) { - if (in_array($item['type'], $types)) { - $item['subdirectory'] = $subdirectory; + if (in_array($item->getType(), $types)) { + $item->setSubdirectory($subdirectory); } } // Clean up the $item pass by reference. diff --git a/src/FeaturesManager.php b/src/FeaturesManager.php index bc772a3..e49dd85 100644 --- a/src/FeaturesManager.php +++ b/src/FeaturesManager.php @@ -491,8 +491,8 @@ class FeaturesManager implements FeaturesManagerInterface { // - and the item isn't already in the package. // Determine if the item is provided by an extension. - $extension_provided = ($config_collection[$item_name]['extension_provided'] === TRUE); - $already_assigned = !empty($config_collection[$item_name]['package']); + $extension_provided = ($config_collection[$item_name]->isExtensionProvided() === TRUE); + $already_assigned = !empty($config_collection[$item_name]->getPackage()); // If this is the profile package, we can reassign extension-provided configuration. $assignable = (!$extension_provided || $this->getAssigner()->getBundle($package['bundle'])->isProfilePackage($package['machine_name'])); $excluded_from_package = in_array($package_name, $config_collection[$item_name]['package_excluded']); @@ -501,16 +501,16 @@ class FeaturesManager implements FeaturesManagerInterface { // Add the item to the package's config array. $package['config'][] = $item_name; // Mark the item as already assigned. - $config_collection[$item_name]['package'] = $package_name; + $config_collection[$item_name]->setPackage($package_name); // For configuration in the InstallStorage::CONFIG_INSTALL_DIRECTORY // directory, set any module dependencies of the configuration item // as package dependencies. // As its name implies, the core-provided // InstallStorage::CONFIG_OPTIONAL_DIRECTORY should not create // dependencies. - if ($config_collection[$item_name]['subdirectory'] === InstallStorage::CONFIG_INSTALL_DIRECTORY && isset($config_collection[$item_name]['data']['dependencies']['module'])) { + if ($config_collection[$item_name]->getSubdirectory() === InstallStorage::CONFIG_INSTALL_DIRECTORY && isset($config_collection[$item_name]->getData()['dependencies']['module'])) { $dependencies =& $package['dependencies']; - $this->mergeUniqueItems($dependencies, $config_collection[$item_name]['data']['dependencies']['module']); + $this->mergeUniqueItems($dependencies, $config_collection[$item_name]->getData()['dependencies']['module']); } } } @@ -543,7 +543,7 @@ class FeaturesManager implements FeaturesManagerInterface { } } - if (empty($item['package']) && preg_match('/[_\-.]' . $pattern . '[_\-.]/', '.' . $item['name_short'] . '.')) { + if (!$item->getPackage() && preg_match('/[_\-.]' . $pattern . '[_\-.]/', '.' . $item->getShortName() . '.')) { try { $this->assignConfigPackage($machine_name, [$item_name]); } @@ -565,11 +565,11 @@ class FeaturesManager implements FeaturesManagerInterface { $item_names = array_keys($config_collection); } foreach ($item_names as $item_name) { - if (!empty($config_collection[$item_name]['package'])) { - foreach ($config_collection[$item_name]['dependents'] as $dependent_item_name) { - if (isset($config_collection[$dependent_item_name]) && (!empty($package) || empty($config_collection[$dependent_item_name]['package']))) { + if ($config_collection[$item_name]->getPackage()) { + foreach ($config_collection[$item_name]->getDependents() as $dependent_item_name) { + if (isset($config_collection[$dependent_item_name]) && (!empty($package) || empty($config_collection[$dependent_item_name]->getPackage()))) { try { - $package_name = !empty($package) ? $package : $config_collection[$item_name]['package']; + $package_name = !empty($package) ? $package : $config_collection[$item_name]->getPackage(); // If a Package is specified, force assign it to the given // package. $this->assignConfigPackage($package_name, [$dependent_item_name], !empty($package)); @@ -590,13 +590,13 @@ class FeaturesManager implements FeaturesManagerInterface { $config_collection = $this->getConfigCollection(); foreach ($packages as &$package) { foreach ($package['config'] as $item_name) { - if (!empty($config_collection[$item_name]['data']['dependencies']['config'])) { - foreach ($config_collection[$item_name]['data']['dependencies']['config'] as $dependency_name) { + if (!empty($config_collection[$item_name]->getData()['dependencies']['config'])) { + foreach ($config_collection[$item_name]->getData()['dependencies']['config'] as $dependency_name) { if (isset($config_collection[$dependency_name])) { // If the required item is assigned to one of the packages, add // a dependency on that package. - if (!empty($config_collection[$dependency_name]['package']) && array_key_exists($config_collection[$dependency_name]['package'], $packages)) { - $dependency_package = $packages[$config_collection[$dependency_name]['package']]; + if ($config_collection[$dependency_name]->getPackage() && array_key_exists($config_collection[$dependency_name]->getPackage(), $packages)) { + $dependency_package = $packages[$config_collection[$dependency_name]->getPackage()]; $dependency_bundle = $this->getAssigner()->getBundle($dependency_package['bundle']); $this->mergeUniqueItems($package['dependencies'], [$dependency_bundle->getFullName($dependency_package['machine_name'])]); } @@ -792,13 +792,15 @@ class FeaturesManager implements FeaturesManagerInterface { } // User roles include all permissions currently assigned to them. To // avoid extraneous additions, reset permissions. - if ($config['type'] == 'user_role') { - $config['data']['permissions'] = []; + if ($config->getType() == 'user_role') { + $data = $config->getData(); + $data['permissions'] = []; + $config->setData($data); } $package['files'][$name] = [ - 'filename' => $config['name'] . '.yml', - 'subdirectory' => $config['subdirectory'], - 'string' => Yaml::encode($config['data']) + 'filename' => $config->getName() . '.yml', + 'subdirectory' => $config->getSubdirectory(), + 'string' => Yaml::encode($config->getData()) ]; } } diff --git a/src/Plugin/FeaturesAssignment/FeaturesAssignmentBaseType.php b/src/Plugin/FeaturesAssignment/FeaturesAssignmentBaseType.php index fa305f5..f72a339 100644 --- a/src/Plugin/FeaturesAssignment/FeaturesAssignmentBaseType.php +++ b/src/Plugin/FeaturesAssignment/FeaturesAssignmentBaseType.php @@ -40,15 +40,15 @@ class FeaturesAssignmentBaseType extends FeaturesAssignmentMethodBase { $config_collection = $this->featuresManager->getConfigCollection(); foreach ($config_collection as $item_name => $item) { - if (in_array($item['type'], $config_base_types)) { - if (!isset($packages[$item['name_short']]) && empty($item['package'])) { - $description = $this->t('Provide @label @type and related configuration.', array('@label' => $item['label'], '@type' => Unicode::strtolower($config_types[$item['type']]))); - if (isset($item['data']['description'])) { - $description .= ' ' . $item['data']['description']; + if (in_array($item->getType(), $config_base_types)) { + if (!isset($packages[$item['name_short']]) && !$item->getPackage()) { + $description = $this->t('Provide @label @type and related configuration.', array('@label' => $item->getLabel(), '@type' => Unicode::strtolower($config_types[$item->getType()]))); + if (isset($item->getData()['description'])) { + $description .= ' ' . $item->getData()['description']; } - $this->featuresManager->initPackage($item['name_short'], $item['label'], $description, 'module', $current_bundle); + $this->featuresManager->initPackage($item->getShortName(), $item->getLabel(), $description, 'module', $current_bundle); try { - $this->featuresManager->assignConfigPackage($item['name_short'], [$item_name]); + $this->featuresManager->assignConfigPackage($item->getShortName(), [$item_name]); } catch (\Exception $exception) { \Drupal::logger('features')->error($exception->getMessage()); diff --git a/src/Plugin/FeaturesAssignment/FeaturesAssignmentExclude.php b/src/Plugin/FeaturesAssignment/FeaturesAssignmentExclude.php index 999cd1a..822fda8 100644 --- a/src/Plugin/FeaturesAssignment/FeaturesAssignmentExclude.php +++ b/src/Plugin/FeaturesAssignment/FeaturesAssignmentExclude.php @@ -42,7 +42,7 @@ class FeaturesAssignmentExclude extends FeaturesAssignmentMethodBase { $exclude_types = $settings['types']['config']; if (!empty($exclude_types)) { foreach ($config_collection as $item_name => $item) { - if (in_array($item['type'], $exclude_types)) { + if (in_array($item->getType(), $exclude_types)) { unset($config_collection[$item_name]); } } diff --git a/src/Plugin/FeaturesAssignment/FeaturesAssignmentPackages.php b/src/Plugin/FeaturesAssignment/FeaturesAssignmentPackages.php index 4e71ca1..361ad17 100644 --- a/src/Plugin/FeaturesAssignment/FeaturesAssignmentPackages.php +++ b/src/Plugin/FeaturesAssignment/FeaturesAssignmentPackages.php @@ -44,7 +44,9 @@ class FeaturesAssignmentPackages extends FeaturesAssignmentMethodBase { $config_collection = $this->featuresManager->getConfigCollection(); foreach ($info['features']['excluded'] as $config_name) { if (isset($config_collection[$config_name])) { - $config_collection[$config_name]['package_excluded'][] = $short_name; + $package_excluded = $config_collection[$config_name]->getPackageExcluded(); + $package_excluded[] = $short_name; + $config_collection[$config_name]->setPackageExcluded($package_excluded); } } $this->featuresManager->setConfigCollection($config_collection); diff --git a/src/Plugin/FeaturesAssignment/FeaturesAssignmentProfile.php b/src/Plugin/FeaturesAssignment/FeaturesAssignmentProfile.php index f72f14f..d2c1693 100644 --- a/src/Plugin/FeaturesAssignment/FeaturesAssignmentProfile.php +++ b/src/Plugin/FeaturesAssignment/FeaturesAssignmentProfile.php @@ -89,7 +89,7 @@ class FeaturesAssignmentProfile extends FeaturesAssignmentMethodBase { if (isset($config_collection[$item_name])) { // Only assign it if it's not already assigned to a package. // @todo: if it's provided by a module, add a dependency. - if (empty($config_collection[$item_name]['package'])) { + if (!$config_collection[$item_name]->getPackage()) { $this->featuresManager->assignConfigPackage($profile_name, [$item_name], $force); // Reload the profile to refresh the config array after the addition. $profile_package = $this->featuresManager->getPackage($profile_name); @@ -97,7 +97,7 @@ class FeaturesAssignmentProfile extends FeaturesAssignmentMethodBase { // If it's already assigned to a package in the current bundle, // add a dependency. else { - $machine_name = $current_bundle->getFullName($config_collection[$item_name]['package']); + $machine_name = $current_bundle->getFullName($config_collection[$item_name]->getPackage()); if (!in_array($machine_name, $profile_package['dependencies'])) { $profile_package['dependencies'][] = $machine_name; }