Failing to copy file when creating new attachment with APIv3
In this block of code in civicrm/api/v3/Attachment.php:
$path = $config->customFileUploadDir . DIRECTORY_SEPARATOR . $fileDao->uri;
if (is_string($content)) {
file_put_contents($path, $content);
}
elseif (is_string($moveFile)) {
// CRM-17432 Do not use rename() since it will break file permissions.
// Also avoid move_uplaoded_file() because the API can use options.move-file.
copy($moveFile, $path);
unlink($moveFile);
}
Is there a reason why we can't check if the copy failed and throw an API_Exception if it did?
The reason being, is that I've had some issues with the new Catalina MacOS update and the NFS mounting option lately. I couldn't figure out why my file upload wasn't working. Ultimately it came down to directory permissions as a result of the Catalina update.
Is it possible we could change this to:
$path = $config->customFileUploadDir . DIRECTORY_SEPARATOR . $fileDao->uri;
if (is_string($content)) {
file_put_contents($path, $content);
}
elseif (is_string($moveFile)) {
// CRM-17432 Do not use rename() since it will break file permissions.
// Also avoid move_uploaded_file() because the API can use options.move-file.
if (!copy($moveFile, $path)) {
throw new API_Exception("Cannot copy uploaded file ".$moveFile." to ".$path);
}
unlink($moveFile);
}
So we know when the move has failed?