function features_override_detect_overrides in Features Override 6
Same name and namespace in other branches
- 7 features_override.module \features_override_detect_overrides()
Detect differences between DB and code components of a feature.
1 call to features_override_detect_overrides()
- features_override_get_overrides in ./
features_override.module - Get an array of current overrides.
File
- ./
features_override.module, line 179 - Export features component overrides.
Code
function features_override_detect_overrides($module) {
static $cache;
if (!isset($cache)) {
$cache = array();
}
if (!isset($cache[$module->name])) {
// Rebuild feature from .info file description and prepare an export from current DB state.
$export = features_populate($module->info['features'], $module->info['dependencies'], $module->name);
$export = features_export_prepare($export, $module->name);
$overrides = array();
// Collect differences at a per-component level
$states = features_get_component_states(array(
$module->name,
), FALSE);
foreach ($states[$module->name] as $component => $state) {
// Only accept supported components.
if (in_array($component, features_override_supported_components()) && $state != FEATURES_DEFAULT) {
$normal = features_get_normal($component, $module->name);
$default = features_get_default($component, $module->name);
// Can't use _features_sanitize as that resets some keys.
_features_override_sanitize($normal);
_features_override_sanitize($default);
$component_overrides = array();
if ($normal && is_array($normal) || is_object($normal)) {
foreach ($normal as $name => $properties) {
$component_overrides[$name] = array(
'additions' => array(),
'deletions' => array(),
);
// TODO: handle the case of added components.
if (isset($default[$name])) {
_features_override_set_additions($default[$name], $properties, $component_overrides[$name]['additions']);
_features_override_leave_hive($default[$name]);
_features_override_set_deletions($default[$name], $properties, $component_overrides[$name]['deletions']);
_features_override_leave_hive($default[$name]);
}
if (empty($component_overrides[$name]['additions']) && empty($component_overrides[$name]['deletions'])) {
unset($component_overrides[$name]);
}
}
if (!empty($component_overrides)) {
$overrides[$component] = $component_overrides;
}
}
}
}
$cache[$module->name] = $overrides;
}
return $cache[$module->name];
}