You are here

function _features_override_set_additions in Features Override 6.2

Same name and namespace in other branches
  1. 6 features_override.module \_features_override_set_additions()
  2. 7.2 features_override.export.inc \_features_override_set_additions()
  3. 7 features_override.module \_features_override_set_additions()

Helper function to set the additions between default and normal features.

Parameters

$default: The default defination of a component.

$normal: The current defination of a component.

$additions: An array of currently gathered additions.

$ignore_keys: Keys to ignore while processing element.

$level: How many levels deep into object.

$keys: The keys for this level.

1 call to _features_override_set_additions()
features_override_module_component_overrides in ./features_override.export.inc
Get overrides for specific module/component.

File

./features_override.export.inc, line 238
Helper function to export features overrides.

Code

function _features_override_set_additions(&$default, &$normal, &$additions, $ignore_keys = array(), $level = 0, $keys = array()) {
  $object = is_object($normal);
  foreach ($normal as $key => $value) {
    if (isset($ignore_keys[$key]) && $level == $ignore_keys[$key]) {
      continue;
    }
    if ($object) {
      if (!is_object($default) || !property_exists($default, $key) || is_scalar($value) && $default->{$key} !== $value) {
        $_keys = array_merge($keys, array(
          array(
            'type' => 'object',
            'key' => $key,
          ),
        ));
        $additions[features_override_make_key($_keys)] = array(
          'keys' => $_keys,
          'value' => $value,
          'original' => is_scalar($value) && isset($default->{$key}) ? $default->key : '',
        );
      }
      elseif (property_exists($default, $key) && $default->{$key} !== $value) {
        _features_override_set_additions($default->{$key}, $value, $additions, $ignore_keys, $level + 1, array_merge($keys, array(
          array(
            'type' => 'object',
            'key' => $key,
          ),
        )));
      }
    }
    elseif (is_array($normal)) {
      if (!is_array($default) || !array_key_exists($key, $default) || is_scalar($value) && $default[$key] !== $value) {
        $_keys = array_merge($keys, array(
          array(
            'type' => 'array',
            'key' => $key,
          ),
        ));
        $additions[features_override_make_key($_keys)] = array(
          'keys' => $_keys,
          'value' => $value,
          'original' => is_scalar($value) && isset($default[$key]) ? $default[$key] : '',
        );
      }
      elseif (array_key_exists($key, $default) && (!is_null($value) && $default[$key] !== $value)) {
        _features_override_set_additions($default[$key], $value, $additions, $ignore_keys, $level + 1, array_merge($keys, array(
          array(
            'type' => 'array',
            'key' => $key,
          ),
        )));
      }
    }
  }
}