Commit bea705cc authored by Simon Gadient's avatar Simon Gadient

[IMP] Additional mapping property support

refs KIME-4583
parent fed606d3
...@@ -20,16 +20,29 @@ namespace WE\SpreadsheetImport\Annotations; ...@@ -20,16 +20,29 @@ namespace WE\SpreadsheetImport\Annotations;
final class Mapping { final class Mapping {
/** /**
* Label id for the property mapping
*
* @var string * @var string
*/ */
public $labelId = ''; public $labelId = '';
/** /**
* Flag if property is handled as an identifier for updates
*
* @var boolean * @var boolean
*/ */
public $identifier = FALSE; public $identifier = FALSE;
/** /**
* Overwrite the default getter for previews
*
* @var string
*/
public $getter;
/**
* Overwrite the default setter
*
* @var string * @var string
*/ */
public $setter; public $setter;
......
...@@ -30,6 +30,11 @@ class SpreadsheetImportService { ...@@ -30,6 +30,11 @@ class SpreadsheetImportService {
*/ */
protected $context; protected $context;
/**
* @var array
*/
protected $mappingProperties;
/** /**
* @Flow\InjectConfiguration * @Flow\InjectConfiguration
* @var array * @var array
...@@ -68,19 +73,37 @@ class SpreadsheetImportService { ...@@ -68,19 +73,37 @@ class SpreadsheetImportService {
public function init(SpreadsheetImport $spreadsheetImport) { public function init(SpreadsheetImport $spreadsheetImport) {
$this->spreadsheetImport = $spreadsheetImport; $this->spreadsheetImport = $spreadsheetImport;
$this->context = $this->settings[$spreadsheetImport->getContext()]; $this->context = $this->settings[$spreadsheetImport->getContext()];
$this->initDomainMappingProperties();
return $this; return $this;
} }
/** /**
* @return array * Initializes the properties declared by annotations.
*/ */
public function getDomainMappingProperties() { private function initDomainMappingProperties() {
$domainMappingProperties = array(); $this->mappingProperties = array();
$properties = $this->reflectionService->getPropertyNamesByAnnotation($this->context['domain'], Mapping::class); $properties = $this->reflectionService->getPropertyNamesByAnnotation($this->context['domain'], Mapping::class);
foreach ($properties as $property) { foreach ($properties as $property) {
$domainMappingProperties[$property] = $this->reflectionService->getPropertyAnnotation($this->context['domain'], $property, Mapping::class); $this->mappingProperties[$property] = $this->reflectionService->getPropertyAnnotation($this->context['domain'], $property, Mapping::class);
} }
return $domainMappingProperties; }
/**
* Adds additional mapping properties to the domain mapping properties retrieved by annotations. This increases
* flexibility for dynamic property mapping.
*
* @param array $additionalMappingProperties
*/
public function addAdditionalMappingProperties(array $additionalMappingProperties) {
$this->mappingProperties = array_merge($this->mappingProperties, $additionalMappingProperties);
}
/**
* @return array
*/
public function getMappingProperties() {
return $this->mappingProperties;
} }
/** /**
...@@ -244,7 +267,7 @@ class SpreadsheetImportService { ...@@ -244,7 +267,7 @@ class SpreadsheetImportService {
*/ */
private function setObjectPropertiesByRow($newObject, $row) { private function setObjectPropertiesByRow($newObject, $row) {
// TODO: Cache $domainMappingProperties and $mappings // TODO: Cache $domainMappingProperties and $mappings
$domainMappingProperties = $this->getDomainMappingProperties(); $domainMappingProperties = $this->getMappingProperties();
$mappings = $this->spreadsheetImport->getMapping(); $mappings = $this->spreadsheetImport->getMapping();
/** @var \PHPExcel_Cell $cell */ /** @var \PHPExcel_Cell $cell */
foreach ($row->getCellIterator() as $cell) { foreach ($row->getCellIterator() as $cell) {
......
...@@ -2,7 +2,6 @@ WE: ...@@ -2,7 +2,6 @@ WE:
SpreadsheetImport: SpreadsheetImport:
testing: testing:
domain: WE\SpreadsheetImport\Tests\Functional\Fixtures\ImportTarget domain: WE\SpreadsheetImport\Tests\Functional\Fixtures\ImportTarget
labelPackageKey: 'WE.SpreadsheetImport'
Configuration: Configuration:
userProfileType: userProfileType:
setter: convertUserProfileTypeBySysValue setter: convertUserProfileTypeBySysValue
......
...@@ -71,7 +71,7 @@ class SpreadsheetImportServiceTest extends FunctionalTestCase { ...@@ -71,7 +71,7 @@ class SpreadsheetImportServiceTest extends FunctionalTestCase {
* @test * @test
*/ */
public function getMappingPropertiesReturnsPropertiesWithMappingAnnotation() { public function getMappingPropertiesReturnsPropertiesWithMappingAnnotation() {
$properties = $this->spreadsheetImportService->getDomainMappingProperties(); $properties = $this->spreadsheetImportService->getMappingProperties();
$this->assertArrayHasKey('id', $properties); $this->assertArrayHasKey('id', $properties);
$this->assertArrayHasKey('name', $properties); $this->assertArrayHasKey('name', $properties);
/** @var Mapping $id */ /** @var Mapping $id */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment