function social_features_import in Open Social 8.7
Same name and namespace in other branches
- 8 social.profile \social_features_import()
- 8.2 social.profile \social_features_import()
- 8.3 social.profile \social_features_import()
- 8.4 social.profile \social_features_import()
- 8.5 social.profile \social_features_import()
- 8.6 social.profile \social_features_import()
Imports module config into the active store.
See also
1 call to social_features_import()
- _social_finalise_batch in ./
social.profile - Implements callback_batch_operation().
File
- ./
social.profile, line 541 - Enables modules and site configuration for a social site installation.
Code
function social_features_import($args) {
/** @var \Drupal\features\FeaturesManagerInterface $manager */
$manager = \Drupal::service('features.manager');
/** @var \Drupal\config_update\ConfigRevertInterface $config_revert */
$config_revert = \Drupal::service('features.config_update');
// Parse list of arguments.
$modules = [];
foreach ($args as $arg) {
$arg = explode(':', $arg);
$module = array_shift($arg);
$component = array_shift($arg);
if (isset($module)) {
if (empty($component)) {
// If we received just a feature name, this means that we need all of
// its components.
$modules[$module] = TRUE;
}
elseif ($modules[$module] !== TRUE) {
if (!isset($modules[$module])) {
$modules[$module] = [];
}
$modules[$module][] = $component;
}
}
}
// Process modules.
foreach ($modules as $module => $components_needed) {
/** @var \Drupal\features\Package $feature */
$feature = $manager
->loadPackage($module, TRUE);
if (empty($feature)) {
return;
}
if ($feature
->getStatus() != FeaturesManagerInterface::STATUS_INSTALLED) {
return;
}
// Only revert components that are detected to be Overridden.
$components = $manager
->detectOverrides($feature);
$missing = $manager
->reorderMissing($manager
->detectMissing($feature));
// Be sure to import missing components first.
$components = array_merge($missing, $components);
if (!empty($components_needed) && is_array($components_needed)) {
$components = array_intersect($components, $components_needed);
}
if (!empty($components)) {
$config = $manager
->getConfigCollection();
foreach ($components as $component) {
if (!isset($config[$component])) {
// Import missing component.
/** @var array $item */
$item = $manager
->getConfigType($component);
$type = ConfigurationItem::fromConfigStringToConfigType($item['type']);
$config_revert
->import($type, $item['name_short']);
}
else {
// Revert existing component.
/** @var \Drupal\features\ConfigurationItem $item */
$item = $config[$component];
$type = ConfigurationItem::fromConfigStringToConfigType($item
->getType());
$config_revert
->revert($type, $item
->getShortName());
}
}
}
}
}