You are here

function media_browser_plus_move_root_folder in Media Browser Plus 7.3

Same name and namespace in other branches
  1. 7.2 includes/media_browser_plus.folders.inc \media_browser_plus_move_root_folder()

Moves the root folder of media files.

Updates the variable media_root_folder too.

Parameters

string $source: Source path.

string $destination: Destination path.

1 call to media_browser_plus_move_root_folder()
media_browser_plus_media_settings_submit in includes/media_browser_plus.admin.inc
Submit handler for the Media browser plus settings form.

File

includes/media_browser_plus.folders.inc, line 18
Folder manipulation functions.

Code

function media_browser_plus_move_root_folder($source, $destination) {
  if (!empty($source)) {
    $source .= '/';
  }
  if (!empty($destination)) {
    $destination .= '/';
  }

  // Load root folder term.
  $root_folder_term = media_browser_plus_get_media_root_folder();

  // Prepare destination.
  foreach (media_get_local_stream_wrappers() as $scheme => $scheme_info) {
    $directory = file_stream_wrapper_uri_normalize($scheme . '://' . $destination);
    file_prepare_directory($directory, FILE_CREATE_DIRECTORY | FILE_MODIFY_PERMISSIONS);
  }
  variable_set('media_root_folder', trim($destination, '/'));

  // Move media files in root folder itself. We do this because if the root
  // folder was located in the default file directory of Drupal we can't move
  // all files / folders.
  $file_query = new EntityFieldQuery();
  $files = $file_query
    ->entityCondition('entity_type', 'file')
    ->fieldCondition('field_folder', 'tid', $root_folder_term->tid)
    ->execute();
  if (!empty($files['file'])) {
    $file_entities = file_load_multiple(array_keys($files['file']));
    foreach ($file_entities as $file_entity) {
      file_move($file_entity, file_stream_wrapper_uri_normalize(file_uri_scheme($file_entity->uri) . '://' . $destination));
    }
  }

  // Collect the subfolder operations.
  $batch = array(
    'title' => t('Move root folder'),
    'operations' => array(),
    'finished' => 'media_browser_plus_move_root_folder_complete',
    'file' => drupal_get_path('module', 'media_browser_plus') . '/includes/media_browser_plus.folders.inc',
  );

  // Set the media root folder variable to the new destination.
  $batch['operations'] = array();

  // Move subfolders.
  $root_subfolders = taxonomy_get_children($root_folder_term->tid);
  foreach ($root_subfolders as $subfolder) {
    $subfolder_source = media_browser_plus_construct_dir_path($subfolder);
    $subfolder_destination = $destination . str_replace($source, '', $subfolder_source);

    // Already takes care of multiple stream wrappers.
    $batch['operations'] = array_merge($batch['operations'], media_browser_plus_move_subfolder($subfolder, $subfolder_source, $subfolder_destination));
  }
  batch_set($batch);
}