You are here

function _features_override_set_additions in Features Override 6

Same name and namespace in other branches
  1. 6.2 features_override.export.inc \_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 and alters between default and normal components.

1 call to _features_override_set_additions()
features_override_detect_overrides in ./features_override.module
Detect differences between DB and code components of a feature.

File

./features_override.module, line 385
Export features component overrides.

Code

function _features_override_set_additions($default, $normal, &$additions, $keys = array()) {
  $object = is_object($normal);

  // Recursion detected.
  if (_features_override_recursion_marker($default, $object) > 1) {
    return;
  }
  foreach ($normal as $key => $value) {

    // Don't register extra fields as an override.
    // The 'content_has_extra_fields' flag is added to indicate that there are added fields.
    // However, these should simply be added to a feature as fields; they are not an override.
    // Ignore the marker used to track detect recursion.
    if (in_array($key, array(
      'content_has_extra_fields',
      FEATURES_OVERRIDE_RECURSION_MARKER,
    ))) {
      return;
    }
    if ($object) {
      if (!isset($default->{$key}) || $default->{$key} !== $value && !(is_array($value) || is_object($value))) {
        $additions[] = array(
          'keys' => array_merge($keys, array(
            array(
              'type' => 'object',
              'key' => $key,
            ),
          )),
          'value' => $value,
        );
      }
      elseif (isset($default->{$key}) && $default->{$key} !== $value) {
        _features_override_set_additions($default->{$key}, $value, $additions, array_merge($keys, array(
          array(
            'type' => 'object',
            'key' => $key,
          ),
        )));
      }
    }
    else {
      if (!isset($default[$key]) || $default[$key] !== $value && !(is_array($value) || is_object($value))) {
        $additions[] = array(
          'keys' => array_merge($keys, array(
            array(
              'type' => 'array',
              'key' => $key,
            ),
          )),
          'value' => $value,
        );
      }
      elseif (isset($default[$key]) && $default[$key] !== $value) {
        _features_override_set_additions($default[$key], $value, $additions, array_merge($keys, array(
          array(
            'type' => 'array',
            'key' => $key,
          ),
        )));
      }
    }
  }
}