Commit bea705cc authored by Simon Gadient's avatar Simon Gadient
Browse files

[IMP] Additional mapping property support

refs KIME-4583
parent fed606d3
Loading
Loading
Loading
Loading
+13 −0
Changes for Classes/WE/SpreadsheetImport/Annotations/Mapping.php: 13 added lines, 0 removed lines.
Original line number Original line Diff line number Diff line
@@ -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;
+29 −6
Changes for Classes/WE/SpreadsheetImport/SpreadsheetImportService.php: 29 added lines, 6 removed lines.
Original line number Original line Diff line number Diff line
@@ -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 {
	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 {
	 */
	 */
	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) {
+0 −1
Changes for Configuration/Testing/Settings.yaml: 0 added lines, 1 removed line.
Original line number Original line Diff line number Diff line
@@ -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
+1 −1
Changes for Tests/Functional/SpreadsheetImportServiceTest.php: 1 added line, 1 removed line.
Original line number Original line Diff line number Diff line
@@ -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 */