You are here

function _views_bulk_operations_archive_action_create_filename in Views Bulk Operations (VBO) 7.3

Create a sanitized and unique version of the provided filename.

Parameters

string $filename: The filename to create.

array $archive_list: The list of files already in the archive.

Return value

string The new filename.

1 call to _views_bulk_operations_archive_action_create_filename()
views_bulk_operations_archive_action in actions/archive.action.inc
Since Drupal's Archiver doesn't abstract properly the archivers it implements (Archive_Tar and ZipArchive), it can't be used here.

File

actions/archive.action.inc, line 178
Provides an action for creating a zip archive of selected files.

Code

function _views_bulk_operations_archive_action_create_filename($filename, $archive_list) {

  // Strip control characters (ASCII value < 32). Though these are allowed in
  // some filesystems, not many applications handle them well.
  $filename = preg_replace('/[\\x00-\\x1F]/u', '_', $filename);
  if (substr(PHP_OS, 0, 3) == 'WIN') {

    // These characters are not allowed in Windows filenames.
    $filename = str_replace(array(
      ':',
      '*',
      '?',
      '"',
      '<',
      '>',
      '|',
    ), '_', $filename);
  }
  if (in_array($filename, $archive_list)) {

    // Destination file already exists, generate an alternative.
    $pos = strrpos($filename, '.');
    if ($pos !== FALSE) {
      $name = substr($filename, 0, $pos);
      $ext = substr($filename, $pos);
    }
    else {
      $name = $filename;
      $ext = '';
    }
    $counter = 0;
    do {
      $filename = $name . '_' . $counter++ . $ext;
    } while (in_array($filename, $archive_list));
  }
  return $filename;
}