function features_override_module_component_overrides in Features Override 6.2
Same name and namespace in other branches
- 7.2 features_override.export.inc \features_override_module_component_overrides()
Get overrides for specific module/component.
Parameters
$module: An enabled module to find overrides for it's components.
$component: A type of component to find overrides for.
$reset: Reset the internal cache of overrides gathered.
$all: If TRUE, return all overrides, otherwise only overrides not yet in an override feature
Return value
An array of overrides found.
1 call to features_override_module_component_overrides()
- features_override_get_overrides in ./
features_override.export.inc - Calculautes what overrides exist for by component/element.
File
- ./
features_override.export.inc, line 119 - Helper function to export features overrides.
Code
function features_override_module_component_overrides($module, $component, $reset = FALSE, $all = TRUE) {
static $cache = array();
if (isset($cache[$module][$component]) && !$reset) {
return $cache[$module][$component];
}
module_load_include('inc', 'features_override', 'features_override.hooks');
features_include();
features_include_defaults($component);
// Allows overriding non-feature controlled code.
$default_hook = features_get_default_hooks($component);
if ($all) {
// call hooks directly
// could also do
// $default = features_get_default($component, $module, FALSE, $reset);
// but this is more efficient
$default = module_invoke($module, $default_hook);
}
else {
$default = features_get_default($component, $module, TRUE, $reset);
}
$normal = features_get_normal($component, $module, $reset);
// This indicates it is likely not controlled by features, so fetch manually.
if (!$normal) {
$code = array_pop(features_invoke($component, 'features_export_render', $module, array_keys($default), NULL));
if (!$code) {
return FALSE;
}
else {
$normal = eval($code);
}
}
$context = array(
'component' => $component,
'module' => $module,
);
// Can't use _features_sanitize as that resets some keys.
_features_override_sanitize($normal);
_features_override_sanitize($default);
// make a deep copy of data to prevent problems when removing recursion later
$default_copy = unserialize(serialize($default));
$normal_copy = unserialize(serialize($normal));
$ignore_keys = features_get_ignore_keys($component);
// remove keys to be ignored
// doing this now allows us to better control which recursive parts are removed
if (count($ignore_keys)) {
_features_override_remove_ignores($default_copy, $ignore_keys);
_features_override_remove_ignores($normal_copy, $ignore_keys);
}
// now remove any remaining recursion
features_override_remove_recursion($default_copy);
features_override_remove_recursion($normal_copy);
$component_overrides = array();
if ($normal && is_array($normal) || is_object($normal)) {
foreach ($normal as $name => $properties) {
$component_overrides[$name] = array(
'additions' => array(),
'deletions' => array(),
);
if (isset($default_copy[$name])) {
drupal_alter('features_override_component_overrides', $default[$name], $normal_copy[$name], $context);
_features_override_set_additions($default_copy[$name], $normal_copy[$name], $component_overrides[$name]['additions'], $ignore_keys);
_features_override_set_deletions($default_copy[$name], $normal_copy[$name], $component_overrides[$name]['deletions'], $ignore_keys);
}
if (!array_filter($component_overrides[$name])) {
$component_overrides[$name] = FALSE;
}
}
}
$cache[$module][$component] = $component_overrides;
return $component_overrides;
}