diff --git a/core/includes/file.inc b/core/includes/file.inc index 0e69bfe..c820393 100644 --- a/core/includes/file.inc +++ b/core/includes/file.inc @@ -1448,11 +1448,8 @@ function file_save_upload($source, $validators = array(), $destination = FALSE, } // Begin building file object. - $file = new stdClass(); - $file->uid = $user->uid; - $file->status = 0; + $file = file_uri_to_object($_FILES['files']['tmp_name'][$source]); $file->filename = trim(drupal_basename($_FILES['files']['name'][$source]), '.'); - $file->uri = $_FILES['files']['tmp_name'][$source]; $file->filemime = file_get_mimetype($file->filename); $file->filesize = $_FILES['files']['size'][$source]; @@ -1847,13 +1844,7 @@ function file_save_data($data, $destination = NULL, $replace = FILE_EXISTS_RENAM if ($uri = file_unmanaged_save_data($data, $destination, $replace)) { // Create a file object. - $file = new stdClass(); - $file->fid = NULL; - $file->uri = $uri; - $file->filename = drupal_basename($uri); - $file->filemime = file_get_mimetype($file->uri); - $file->uid = $user->uid; - $file->status = FILE_STATUS_PERMANENT; + $file = file_uri_to_object($uri, $replace); // If we are replacing an existing file re-use its database record. if ($replace == FILE_EXISTS_REPLACE) { $existing_files = file_load_multiple(array(), array('uri' => $uri)); @@ -1868,8 +1859,9 @@ function file_save_data($data, $destination = NULL, $replace = FILE_EXISTS_RENAM elseif ($replace == FILE_EXISTS_RENAME && is_file($destination)) { $file->filename = drupal_basename($destination); } - + return file_save($file); + } return FALSE; } @@ -2119,6 +2111,40 @@ function file_get_mimetype($uri, $mapping = NULL) { } /** + * Returns a file object which can be passed to file_save(). + * + * @param $uri + * A string containing the URI, path, or filename. + * @return + * A file object, or FALSE on error. + */ +function file_uri_to_object($uri, $use_exsisting = FALSE) { + $uri = file_stream_wrapper_uri_normalize($uri); + + if ($use_exsisting) { + $files = entity_load('file', FALSE, array('uri' => $uri)); + $file = !empty($files) ? reset($files) : FALSE; + } + else { + $file = FALSE; + } + if (!$file) { + global $user; + $file = new stdClass(); + $file->uid = $user->uid; + $file->filename = basename($uri); + $file->name = pathinfo($file->filename, PATHINFO_FILENAME); + $file->uri = $uri; + //$file->filemime = file_get_mimetype($uri); + // This is gagged because some uris will not support it. + $file->filesize = @filesize($uri); + $file->timestamp = REQUEST_TIME; + $file->status = FILE_STATUS_PERMANENT; + } + return $file; +} + +/** * Sets the permissions on a file or directory. * * This function will use the 'file_chmod_directory' and 'file_chmod_file'