Skip to content
Snippets Groups Projects
Commit d76750c1 authored by Maxime Reyrolle's avatar Maxime Reyrolle
Browse files

Merge branch '1239-gestion-doublons-dans-repertoire-actes-sans-transaction' into 'master'

correction du cas ou un fichier identique existe déjà dans le repertoire sans transaction

Closes #1239

See merge request libriciel/pole-plate-formes/s2low/s2low!805
parents b7917020 8d903177
No related branches found
No related tags found
No related merge requests found
Pipeline #90445 failed
...@@ -8,6 +8,10 @@ ...@@ -8,6 +8,10 @@
- Permettre à l'archiviste de modifier les status PES #1233 - Permettre à l'archiviste de modifier les status PES #1233
- Permettre l'utilisation de `/modules/actes/actes_transac_get_ARActe.php` via API - Permettre l'utilisation de `/modules/actes/actes_transac_get_ARActe.php` via API
### Corrections
- Supprimer l'exception envoyée par actes-enveloppe-menage en cas de fichier semblable déjà présent dans le répertoire sans transaction #1239
## 5.0.46 - 2024-11-18 ## 5.0.46 - 2024-11-18
### Évolutions ### Évolutions
......
...@@ -327,6 +327,7 @@ class CloudStorage ...@@ -327,6 +327,7 @@ class CloudStorage
/** /**
* @param mixed $file * @param mixed $file
* @throws \Exception
*/ */
protected function handlerOlderFileNotInCloud(SplFileInfo $file): void protected function handlerOlderFileNotInCloud(SplFileInfo $file): void
{ {
...@@ -408,6 +409,10 @@ class CloudStorage ...@@ -408,6 +409,10 @@ class CloudStorage
private function rename(SplFileInfo $file, string $relative_destination, string $directory): bool private function rename(SplFileInfo $file, string $relative_destination, string $directory): bool
{ {
$destination = $directory . '/' . $relative_destination; $destination = $directory . '/' . $relative_destination;
if (file_exists($destination) && $this->filesAreSame($destination, $file)) {
unlink($file->getRealPath());
return true;
}
if (file_exists($destination)) { if (file_exists($destination)) {
throw new Exception("Le fichier $destination existe déjà"); throw new Exception("Le fichier $destination existe déjà");
} }
...@@ -423,4 +428,12 @@ class CloudStorage ...@@ -423,4 +428,12 @@ class CloudStorage
$destination $destination
); );
} }
private function filesAreSame(string $destination, SplFileInfo $file): bool
{
if (filesize($destination) !== filesize($file->getRealPath())) {
return false;
}
return sha1_file($destination) === sha1_file($file->getRealPath());
}
} }
...@@ -391,7 +391,7 @@ class CloudStorageTest extends S2lowTestCase ...@@ -391,7 +391,7 @@ class CloudStorageTest extends S2lowTestCase
/** /**
* @throws \Exception * @throws \Exception
*/ */
public function testMoveToOrphelinsFileAlreadyExists(): void public function testMoveToOrphelinsDifferentFileAlreadyExistsWithSameName(): void
{ {
$file_to_send = $this->createFile(); $file_to_send = $this->createFile();
$tmpDir = new TmpFolder(); $tmpDir = new TmpFolder();
...@@ -410,6 +410,31 @@ class CloudStorageTest extends S2lowTestCase ...@@ -410,6 +410,31 @@ class CloudStorageTest extends S2lowTestCase
$tmpDir->delete($files_without_transaction_dir); $tmpDir->delete($files_without_transaction_dir);
} }
/**
* @throws \Exception
*/
public function testMoveToOrphelinsSameFileAlreadyExists(): void
{
$file_to_send = $this->createFile();
$tmpDir = new TmpFolder();
$files_without_transaction_dir = $tmpDir->create();
$iCloudStorable = $this->getMailIncludedFilesCloudStorage(
$file_to_send,
$files_without_transaction_dir,
'bar.txt'
);
file_put_contents(
$files_without_transaction_dir . '/bar.txt',
file_get_contents($file_to_send)
);
$this->getCloudStorage($iCloudStorable)->deleteFilesOnDisk(0);
static::assertFileDoesNotExist($file_to_send); //Le fichier original est supprimé
$tmpDir->delete($files_without_transaction_dir);
}
/** @dataProvider availabilityAndCloudProvider /** @dataProvider availabilityAndCloudProvider
* @throws \Exception * @throws \Exception
*/ */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment