function _features_populate in Features 7
Same name and namespace in other branches
- 6 features.export.inc \_features_populate()
- 7.2 features.export.inc \_features_populate()
Iterate and descend into a feature definition to extract module dependencies and feature definition. Calls hook_features_export for modules that implement it.
Parameters
$pipe: Associative of array of module => info-for-module
$export: Associative array of items, and module dependencies which define a feature. Passed by reference.
Return value
fully populated $export array.
2 calls to _features_populate()
- drush_features_export in ./features.drush.inc 
- Add a component to a features module, or create a new module with the selected components.
- features_populate in ./features.export.inc 
File
- ./features.export.inc, line 47 
Code
function _features_populate($pipe, &$export, $module_name = '') {
  features_include();
  foreach ($pipe as $component => $data) {
    static $processed = array();
    // Convert already defined items to dependencies.
    _features_resolve_dependencies($data, $export, $module_name, $component);
    if (!empty($data) && ($function = features_hook($component, 'features_export'))) {
      // Pass module-specific data and export array.
      // We don't use features_invoke() here since we need to pass $export by reference.
      $more = $function($data, $export, $module_name, $component);
      // Add the context information.
      $export['component'] = $component;
      $export['module_name'] = $module_name;
      // Allow other modules to manipulate the pipe to add in additional modules.
      drupal_alter(array(
        'features_pipe',
        'features_pipe_' . $component,
      ), $more, $data, $export);
      // Remove the component information.
      unset($export['component']);
      unset($export['module_name']);
      // Allow for export functions to request additional exports, but avoid
      // circular references on already processed components.
      $processed[$component] = isset($processed[$component]) ? array_merge($processed[$component], $data) : $data;
      if (!empty($more)) {
        // Remove already processed components.
        foreach ($more as $component_name => $component_data) {
          if (isset($processed[$component_name])) {
            $more[$component_name] = array_diff($component_data, $processed[$component_name]);
          }
        }
        if ($more = array_filter($more)) {
          _features_populate($more, $export, $module_name);
        }
      }
    }
  }
  return $export;
}