You are here

function _features_override_set_item in Features Override 7

Same name and namespace in other branches
  1. 6 features_override.alter.inc \_features_override_set_item()

Set a single addition or deletion for a component.

1 call to _features_override_set_item()
features_override_features_default_alter in ./features_override.alter.inc
Alter default features.

File

./features_override.alter.inc, line 27

Code

function _features_override_set_item(&$item, $action, $keys, $value = NULL, $order = NULL) {
  $key = array_shift($keys);
  if ($key['type'] == 'object') {
    if (count($keys) && isset($item->{$key['key']})) {
      _features_override_set_item($item->{$key['key']}, $action, $keys, $value, $order);
    }
    else {
      switch ($action) {
        case 'add':
          $item->{$key['key']} = $value;
          if (isset($order) && array_keys((array) $item) !== range(0, count((array) $item) - 1)) {
            $compare = create_function('$a,$b', '$order = ' . var_export($order, TRUE) . '; $apos = array_search($a, $order); $bpos = array_search($b, $order); if ($apos == $bpos) return 0; return ($apos < $bpos) ? -1 : 1;');
            $item = (array) $item;
            uksort($item, $compare);
            $item = (object) $item;
          }
          break;
        case 'delete':
          unset($item->{$key['key']});
          break;
      }
    }
  }
  else {
    if (count($keys) && isset($item[$key['key']])) {
      _features_override_set_item($item[$key['key']], $action, $keys, $value, $order);
    }
    else {
      switch ($action) {
        case 'add':
          $item[$key['key']] = $value;
          if (isset($order) && array_keys($item) !== range(0, count($item) - 1)) {
            $compare = create_function('$a,$b', '$order = ' . var_export($order, TRUE) . '; $apos = array_search($a, $order); $bpos = array_search($b, $order); if ($apos == $bpos) return 0; return ($apos < $bpos) ? -1 : 1;');
            uksort($item, $compare);
          }
          break;
        case 'delete':
          unset($item[$key['key']]);
          break;
      }
    }
  }
}