You are here

function features_override_generate in Features Override 7

Same name and namespace in other branches
  1. 6 features_override.extend.inc \features_override_generate()

Generate include files for features_override support, saving them to the public files directory.

1 call to features_override_generate()
features_override_extend_submit in ./features_override.extend.inc
Submit callback for features_override_extend form.

File

./features_override.extend.inc, line 45

Code

function features_override_generate() {
  $files = array();
  foreach (features_get_components() as $component => $info) {
    if (isset($info['default_hook']) && (!isset($info['module']) || $info['module'] != 'features_override') && $info['default_hook'] != 'node_info' && !module_hook('features_override', $info['default_hook'] . '_alter')) {

      // Assign any component that doesn't specify a module to the features
      // module.
      $module = isset($info['module']) ? $info['module'] : 'features';
      $code = array();
      $code[] = "/**";
      $code[] = " * Implements hook_{$info['default_hook']}_alter().";
      $code[] = " */";
      $code[] = 'function features_override_' . $info['default_hook'] . '_alter(&$items) {';
      $code[] = '  features_override_features_default_alter($items, "' . $component . '");';
      $code[] = "}";
      $code = implode("\n", $code);
      $files[$module][] = $code;
    }
  }
  $generated = array();
  $dir = 'public://features_override';

  // Ensure that the directory exists and is writable, if possible.
  file_prepare_directory($dir, FILE_CREATE_DIRECTORY);
  $module_dir = drupal_get_path('module', 'features_override') . '/modules';

  // Finalize strings to be written to files and generate files.
  foreach ($files as $module => $contents) {
    $name = $module . '.features_override.inc';
    if (file_exists($module_dir . '/' . $name)) {
      $header = file_get_contents($module_dir . '/' . $name);
    }
    else {
      $header = "<?php";
    }
    $contents = $header . "\n\n" . implode("\n\n", $contents) . "\n";
    $dest = $dir . '/' . $name;
    file_unmanaged_save_data($contents, $dest, FILE_EXISTS_REPLACE);
    $generated[] = 'modules/' . $name;
  }
  if (!empty($generated)) {
    $additions = '';
    foreach ($generated as $file) {
      $additions .= "files[] = {$file}\n";
    }
    $contents = file_get_contents(drupal_get_path('module', 'features_override') . '/features_override.info');
    $dest = $dir . '/features_override.info';
    file_unmanaged_save_data($contents . $additions, $dest, FILE_EXISTS_REPLACE);
    drupal_set_message(t('New include files and an updated features_override.info file were generated in !dir. The new include files and can be copied to !module_dir and features_override.info copied to the features_override install directory to enable features override functionality for additional compontent types. Please also submit these changes as a patch to the Features Overide module.', array(
      '!dir' => $dir,
      '!module_dir' => $module_dir,
    )));
  }
}