You are here

function icon_file_move_recursive in Icon API 7

Same name and namespace in other branches
  1. 8 includes/utilities.inc \icon_file_move_recursive()

Moves a file to a new location without database changes or hook invocation.

Parameters

string $source: The filepath or URI where the original source file(s) reside.

string $destination: The URI where $source should be moved to. This must be a stream wrapper URI. If this value is omitted, Drupal's default files scheme will be used, usually "public://".

bool|string $rename: When moving a directory, the base name of $source will be used. If desired, you can effectively rename the top level directory on $destination by providing a new base name value to the $rename parameter.

int $replace: Replace behavior when the destination file already exists: FILE_EXISTS_REPLACE - Replace the existing file (default behavior). FILE_EXISTS_RENAME - Append _{incrementing number} until the filename is unique. FILE_EXISTS_ERROR - Do nothing and return FALSE.

int $depth: Internal use, do not use.

Return value

string|false The URI of the moved file or directory, or FALSE in the event of an error.

1 call to icon_file_move_recursive()
icon_provider_import_form_validate in includes/import.inc
Validate callback for 'icon_provider_import_form'.

File

includes/utilities.inc, line 314
utilities.inc Provides useful functions and common tasks.

Code

function icon_file_move_recursive($source, $destination = NULL, $rename = FALSE, $replace = FILE_EXISTS_REPLACE, $depth = 0) {
  if (is_dir(drupal_realpath($source))) {
    if (!$depth) {
      $destination .= '/' . ($rename ? $rename : drupal_basename($source));
      file_unmanaged_delete_recursive(drupal_realpath($destination));
    }
    if (!file_prepare_directory($destination, FILE_CREATE_DIRECTORY | FILE_MODIFY_PERMISSIONS)) {
      return FALSE;
    }
    $dir = dir(drupal_realpath($source));
    while (($file = $dir
      ->read()) !== FALSE) {
      if ($file == '.' || $file == '..') {
        continue;
      }
      $source_file = $source . '/' . $file;
      $destination_file = $destination . '/' . $file;
      if (!icon_file_move_recursive($source_file, $destination_file, FALSE, $replace, $depth + 1)) {
        $dir
          ->close();
        return FALSE;
      }
    }
    $dir
      ->close();
    if (!file_unmanaged_delete_recursive(drupal_realpath($source))) {
      return FALSE;
    }
    return $destination;
  }
  elseif (is_file(drupal_realpath($source))) {
    return file_unmanaged_copy($source, $destination, $replace);
  }
  return FALSE;
}