You are here

function _features_override_set_deletions in Features Override 7.2

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

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

Parameters

$default: The default defination of a component.

$normal: The current defination of a component.

$deletions: An array of currently gathered deletions.

$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_deletions()
features_override_module_component_overrides in ./features_override.export.inc
Get overrides for specific module/component.

File

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

Code

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