From 2ddd044af838a87ce830151e92c0cdeb0cba54f5 Mon Sep 17 00:00:00 2001 From: mjollnir_ Date: Tue, 9 Sep 2008 09:56:56 +0000 Subject: [PATCH] MDL-16390 - detect duplicates when copying files to portfolio export area and handle it nicer this will mean that there will only be one file, and the filename will be set to whatever the first one was, but it's better than getting the error. --- lib/portfolio/exporter.php | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/portfolio/exporter.php b/lib/portfolio/exporter.php index ed1af2f45b..cb73207751 100644 --- a/lib/portfolio/exporter.php +++ b/lib/portfolio/exporter.php @@ -106,6 +106,13 @@ class portfolio_exporter { */ private $alreadystolen; + /** + * files that the exporter has written to this temp area + * keep track of this in case of duplicates within one export + * see MDL-16390 + */ + private $newfilehashes; + /** * construct a new exporter for use * @@ -126,6 +133,7 @@ class portfolio_exporter { $this->navigation = $navigation; $this->caller->set('exporter', $this); $this->alreadystolen = array(); + $this->newfilehashes = array(); } /* @@ -621,10 +629,15 @@ class portfolio_exporter { * @return new stored_file object */ public function copy_existing_file($oldfile) { + if (array_key_exists($oldfile->get_contenthash(), $this->newfilehashes)) { + return $this->newfilehashes[$oldfile->get_contenthash()]; + } $fs = get_file_storage(); $file_record = $this->new_file_record_base($oldfile->get_filename()); try { - return $fs->create_file_from_storedfile($file_record, $oldfile->get_id()); + $newfile = $fs->create_file_from_storedfile($file_record, $oldfile->get_id()); + $this->newfilehashes[$newfile->get_contenthash()] = $newfile; + return $newfile; } catch (file_exception $e) { return false; } -- 2.39.5