You are here

function features_overrides_features_export_render in Features Override 7.2

Same name and namespace in other branches
  1. 6.2 features_override.features.inc \features_overrides_features_export_render()

Implements hook_features_export_render().

File

./features_override.features.inc, line 159

Code

function features_overrides_features_export_render($module, $data, $export = NULL) {

  // Remember, the code exported here is just for the Features UI to keep track
  // of the overridden status.  All it needs to do is capture "changes".
  // The actual form of the output doesn't really matter.
  $list = $overrides_to_export = array();

  // Go through all data collecting the items exports to create.
  $features_override_code = array(
    '  // This code is only used for UI in features. Exported alter hooks do the magic.',
    '  $overrides = array();',
  );
  $last_component = '';
  foreach ($data as $identifier) {

    // Something is adding extra quote marks.
    list($component, $element, $keys) = features_override_parse_identifier($identifier);
    $component_code[$component] = isset($component_code[$component]) ? $component_code[$component] : array();
    $overrides_to_export[$component] = isset($overrides_to_export[$component]) ? $overrides_to_export[$component] : array();
    $overrides = features_override_get_overrides($component);
    $features_override_value = array(
      'additions' => array(),
      'deletions' => array(),
    );

    // Just specific keys are being exported so add them if set.
    if (!empty($overrides[$element])) {
      if (isset($overrides[$element]['additions'][$keys])) {
        $overrides_to_export[$component][$element]['additions'][] = $overrides[$element]['additions'][$keys];
        $features_override_value['additions'][] = $overrides[$element]['additions'][$keys];
      }
      elseif (isset($overrides[$element]['deletions'][$keys])) {
        $overrides_to_export[$component][$element]['deletions'][] = $overrides[$element]['deletions'][$keys];
        $features_override_value['deletions'][] = $overrides[$element]['deletions'][$keys];
      }
    }
    if ($component != $last_component) {
      $features_override_code[] = '';
      $features_override_code[] = "  // Exported overrides for: {$component}.";
    }
    $last_component = $component;
    if (count($features_override_value['additions'])) {
      $features_override_code[] = '  $overrides["' . $identifier . '"] = ' . features_override_var_export($features_override_value['additions'][0]['value'], '  ') . ';';
    }
    else {
      if (count($features_override_value['deletions'])) {
        $features_override_code[] = '  $overrides["' . $identifier . '"]["DELETED"] = TRUE;';
      }
    }
  }

  // Create the default hook that defines all exported overrides.
  $features_override_code[] = '';
  $features_override_code[] = '  return $overrides;';
  $list['features_override_default_overrides'] = implode("\n", $features_override_code);
  $component_code = array();
  foreach ($overrides_to_export as $component => $elements) {
    foreach ($elements as $element => $overrides) {
      $component_code[$component] = isset($component_code[$component]) ? $component_code[$component] : array();
      $component_code[$component][] = '  if (isset($data[' . var_export($element, TRUE) . '])) {';
      if (!empty($overrides['additions'])) {
        foreach ($overrides['additions'] as $alter) {
          $component_code[$component][] = implode("\n", features_override_features_export_render_addition($alter, $element, $component));
        }
      }
      if (!empty($overrides['deletions'])) {
        foreach ($overrides['deletions'] as $alter) {
          $component_code[$component][] = implode("\n", features_override_features_export_render_deletion($alter, $element, $component));
        }
      }
      $component_code[$component][] = '  }';
    }
  }
  $info = features_get_components();
  foreach ($component_code as $component => $code) {
    $list[features_get_default_alter_hook($component) . '_alter'] = array(
      'code' => implode("\n", $code),
      'args' => '&$data',
      'file' => 'features',
    );
  }
  return $list;
}