From 8989e89b4e481f8657e17ddd8b2de3dc65e65538 Mon Sep 17 00:00:00 2001 From: Sean Harvey Date: Wed, 18 Feb 2009 02:37:00 +0000 Subject: [PATCH] ENHANCEMENT Allow setting unique check callback function on the importer class, to be consistency with relation callbacks git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@71977 467b73ca-7a2a-4603-9d3b-597d59a354a9 --- dev/CsvBulkLoader.php | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/dev/CsvBulkLoader.php b/dev/CsvBulkLoader.php index 663ec88e3..3f4ca2405 100644 --- a/dev/CsvBulkLoader.php +++ b/dev/CsvBulkLoader.php @@ -140,6 +140,8 @@ class CsvBulkLoader extends BulkLoader { * @return unknown */ public function findExistingObject($record) { + $SNG_objectClass = singleton($this->objectClass); + // checking for existing records (only if not already found) foreach($this->duplicateChecks as $fieldName => $duplicateCheck) { if(is_string($duplicateCheck)) { @@ -152,10 +154,17 @@ class CsvBulkLoader extends BulkLoader { $existingRecord = DataObject::get_one($this->objectClass, "\"$SQL_fieldName\" = '{$SQL_fieldValue}'"); if($existingRecord) return $existingRecord; } elseif(is_array($duplicateCheck) && isset($duplicateCheck['callback'])) { - $existingRecord = singleton($this->objectClass)->{$duplicateCheck['callback']}($record[$fieldName], $record); + if($this->hasMethod($duplicateCheck['callback'])) { + $existingRecord = $this->{$duplicateCheck['callback']}($record[$fieldName], $record); + } elseif($SNG_objectClass->hasMethod($duplicateCheck['callback'])) { + $existingRecord = $SNG_objectClass->{$duplicateCheck['callback']}($record[$fieldName], $record); + } else { + user_error("CsvBulkLoader::processRecord(): {$duplicateCheck['callback']} not found on importer or object class.", E_USER_ERROR); + } + if($existingRecord) return $existingRecord; } else { - user_error('CsvBulkLoader:processRecord: Wrong format for $duplicateChecks', E_USER_ERROR); + user_error('CsvBulkLoader::processRecord(): Wrong format for $duplicateChecks', E_USER_ERROR); } }