You are here

function _drush_features_export in Features 7.2

Same name and namespace in other branches
  1. 6 features.drush.inc \_drush_features_export()
  2. 7 features.drush.inc \_drush_features_export()

Write a module to the site dir.

Parameters

array $info: The feature info associative array.

string|null $module_name: (optional) The name for the exported module.

string|null $directory: (optional) Destination directory for newly created module.

2 calls to _drush_features_export()
drush_features_export in ./features.drush.inc
Drush command callback for 'features-export'.
drush_features_update in ./features.drush.inc
Drush command callback for 'features-update'.

File

./features.drush.inc, line 698
Features module drush integration.

Code

function _drush_features_export($info, $module_name = NULL, $directory = NULL) {
  $root = drush_get_option(array(
    'r',
    'root',
  ), drush_locate_root());
  $skip_confirmation = drush_get_context('DRUSH_AFFIRMATIVE');
  if ($root) {
    $destination = drush_get_option(array(
      'destination',
    ), variable_get('features_default_export_path', FEATURES_DEFAULT_EXPORT_PATH));
    $directory = isset($directory) ? $directory : $destination . '/' . $module_name;
    if (is_dir($directory)) {

      // If we aren't skipping confirmation and the directory already exists,
      // prompt the user. This message most make sense for but fe and fu.
      if (!$skip_confirmation && !drush_confirm(dt('Module located at !dir will be updated. Do you want to continue?', array(
        '!dir' => $directory,
      )))) {
        drush_die('Aborting.');
      }
    }
    else {
      drush_op('mkdir', $directory);
    }
    if (is_dir($directory)) {

      // Ensure that the export will be created in the English language.
      // The export language must be set before flushing caches as that can
      // result into translatables being statically cached.
      $language = _features_export_language();
      drupal_flush_all_caches();
      $export = _drush_features_generate_export($info, $module_name);
      $files = features_export_render($export, $module_name, TRUE);

      // Restore the language.
      _features_export_language($language);

      // Copy any files if _files key is there.
      if (!empty($files['_files'])) {
        foreach ($files['_files'] as $file_name => $file_info) {

          // See if files are in a sub directory.
          if (strpos($file_name, '/')) {
            $file_directory = $directory . '/' . substr($file_name, 0, strrpos($file_name, '/'));
            if (!is_dir($file_directory)) {
              drush_op('mkdir', $file_directory);
            }
          }
          if (!empty($file_info['file_path'])) {
            drush_op('file_unmanaged_copy', $file_info['file_path'], "{$directory}/{$file_name}", FILE_EXISTS_REPLACE);
          }
          elseif (!empty($file_info['file_content'])) {
            drush_op('file_put_contents', "{$directory}/{$file_name}", $file_info['file_content']);
          }
          else {
            drush_log(dt("Entry for @file_name.in !module is invalid. ", array(
              '!module' => $module_name,
              '@file_name' => $file_name,
            )), 'ok');
          }
        }
        unset($files['_files']);
      }
      foreach ($files as $extension => $file_contents) {
        if (!in_array($extension, array(
          'module',
          'info',
        ))) {
          $extension .= '.inc';
        }
        drush_op('file_put_contents', "{$directory}/{$module_name}.{$extension}", $file_contents);
      }
      drush_log(dt("Created module: !module in !directory", array(
        '!module' => $module_name,
        '!directory' => $directory,
      )), 'ok');
    }
    else {
      drush_die(dt('Couldn\'t create directory !directory', array(
        '!directory' => $directory,
      )));
    }
  }
  else {
    drush_die(dt('Couldn\'t locate site root'));
  }
}