From 221f1014fc6ae3457b2aed174e8fa0c24b6a63b1 Mon Sep 17 00:00:00 2001 From: denison Date: Thu, 7 Nov 2013 23:04:34 -0200 Subject: [PATCH] Issue #1163740 by denison, revagomes: Fixed Integrity constraint violation error --- core/includes/file.inc | 47 ++++++++++++++++++++++++++----------------- core/modules/file/file.module | 3 +++ 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/core/includes/file.inc b/core/includes/file.inc index 6065dd4..df9d386 100644 --- a/core/includes/file.inc +++ b/core/includes/file.inc @@ -854,6 +854,33 @@ function file_unmunge_filename($filename) { } /** + * Creates an unique filename by adding a suffix id. + * + * @param $basename + * String with the basename. + * + * @return + * An unique basename. + */ +function file_unique_basename($basename) { + + $pos = strrpos($basename, '.'); + if ($pos !== FALSE) { + + $name = substr($basename, 0, $pos); + $ext = substr($basename, $pos); + + $unique_name = $name . '_' . uniqid() . $ext; + } + else { + $name = $basename; + $unique_name = $name . '_' . uniqid(); + } + + return $unique_name; +} + +/** * Creates a full file path from a directory and filename. * * If a file with the specified name already exists, an alternative will be @@ -885,26 +912,10 @@ function file_create_filename($basename, $directory) { $separator = '/'; } + // Generates an unique basename. + $basename = file_unique_basename($basename); $destination = $directory . $separator . $basename; - if (file_exists($destination)) { - // Destination file already exists, generate an alternative. - $pos = strrpos($basename, '.'); - if ($pos !== FALSE) { - $name = substr($basename, 0, $pos); - $ext = substr($basename, $pos); - } - else { - $name = $basename; - $ext = ''; - } - - $counter = 0; - do { - $destination = $directory . $separator . $name . '_' . $counter++ . $ext; - } while (file_exists($destination)); - } - return $destination; } diff --git a/core/modules/file/file.module b/core/modules/file/file.module index bf67993..2c28b02 100644 --- a/core/modules/file/file.module +++ b/core/modules/file/file.module @@ -822,7 +822,9 @@ function file_save_upload($form_field_name, $validators = array(), $destination continue; } + // Begin building file entity. + $name = file_unique_basename($name); $values = array( 'uid' => $user->id(), 'status' => 0, @@ -894,6 +896,7 @@ function file_save_upload($form_field_name, $validators = array(), $destination if (substr($destination, -1) != '/') { $destination .= '/'; } + $file->destination = file_destination($destination . $file->getFilename(), $replace); // If file_destination() returns FALSE then $replace === FILE_EXISTS_ERROR and // there's an existing file so we need to bail. -- 1.8.3.2