You are here

function features_override_detect_overrides in Features Override 6

Same name and namespace in other branches
  1. 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];
}