/** * There is a special way you can import rateToBase and currencyCode for an amount attribute. * if the column data is formatted like: $54.67__1.2__USD then it will split the column and properly * handle rate and currency code. Eventually this will be exposed in the user interface * * @param mixed $value * @param string $columnName * @param array $columnMappingData * @param ImportSanitizeResultsUtil $importSanitizeResultsUtil * @return array */ public function resolveValueForImport($value, $columnName, $columnMappingData, ImportSanitizeResultsUtil $importSanitizeResultsUtil) { assert('is_string($columnName)'); $attributeNames = $this->getRealModelAttributeNames(); $modelClassName = $this->getModelClassName(); $parts = explode(FormModelUtil::DELIMITER, $value); if (count($parts) == 3) { $value = $parts[0]; $rateToBase = $parts[1]; try { $currency = Currency::getByCode($parts[2]); } catch (NotFoundException $e) { $currency = null; $importSanitizeResultsUtil->addMessage('Currency Code: ' . $parts[2] . ' is invalid.'); $importSanitizeResultsUtil->setModelShouldNotBeSaved(); } } else { $rateToBase = $columnMappingData['mappingRulesData']['CurrencyRateToBaseModelAttributeMappingRuleForm']['rateToBase']; $currency = Currency::getById((int) $columnMappingData['mappingRulesData']['CurrencyIdModelAttributeMappingRuleForm']['id']); } $sanitizedValue = ImportSanitizerUtil::sanitizeValueBySanitizerTypes(static::getSanitizerUtilTypesInProcessingOrder(), $modelClassName, $this->getModelAttributeName(), $value, $columnName, $columnMappingData, $importSanitizeResultsUtil); if ($sanitizedValue == null) { $sanitizedValue = 0; } $currencyValue = new CurrencyValue(); $currencyValue->setScenario('importModel'); $currencyValue->value = $sanitizedValue; $currencyValue->rateToBase = $rateToBase; $currencyValue->currency = $currency; return array($this->getModelAttributeName() => $currencyValue); }
public function testShouldSaveModel() { $resultsUtil = new ImportSanitizeResultsUtil(); $this->assertEquals(true, $resultsUtil->shouldSaveModel()); $resultsUtil->setModelShouldNotBeSaved(); $this->assertEquals(false, $resultsUtil->shouldSaveModel()); }
/** * Given an array of sanitizer util types, a value, as well as several other parameters, run through each * sanitizer type on the value and process any sanitization messages or errors into the ImportSanitizeResultsUtil * provided. * @param array $sanitizerUtilTypes * @param string $modelClassName * @param string $attributeName * @param mixed $value * @param array $columnMappingData * @param ImportSanitizeResultsUtil $importSanitizeResultsUtil * @return mixed value */ public static function sanitizeValueBySanitizerTypes($sanitizerUtilTypes, $modelClassName, $attributeName, $value, $columnName, $columnMappingData, ImportSanitizeResultsUtil $importSanitizeResultsUtil) { assert('is_array($sanitizerUtilTypes)'); assert('is_string($modelClassName)'); assert('is_string($attributeName) || $attributeName == null'); assert('is_string($columnName)'); assert('is_array($columnMappingData)'); foreach ($sanitizerUtilTypes as $sanitizerUtilType) { try { $sanitizer = ImportSanitizerUtilFactory::make($sanitizerUtilType, $modelClassName, $attributeName, $columnName, $columnMappingData); if ($sanitizer->shouldSanitizeValue()) { $value = $sanitizer->sanitizeValue($value); } } catch (InvalidValueToSanitizeException $e) { if ($e->getMessage() != null) { if ($attributeName != null) { $label = LabelUtil::makeModelAndAttributeNameCombinationLabel($modelClassName, $attributeName); } else { $label = $modelClassName::getModelLabelByTypeAndLanguage('Singular') . ' -'; } $importSanitizeResultsUtil->addMessage($label . ' ' . $e->getMessage()); } $value = null; if ($sanitizer::shouldNotSaveModelOnSanitizingValueFailure()) { $importSanitizeResultsUtil->setModelShouldNotBeSaved(); } break; } } return $value; }
/** * Given an array of sanitizer util types, a value, as well as several other parameters, run through each * sanitizer type on the value and process any sanitization messages or errors into the ImportSanitizeResultsUtil * provided. * @param array $sanitizerUtilTypes * @param string $modelClassName * @param string $attributeName * @param mixed $value * @param array $columnMappingData * @param ImportSanitizeResultsUtil $importSanitizeResultsUtil */ public static function sanitizeValueBySanitizerTypes($sanitizerUtilTypes, $modelClassName, $attributeName, $value, $columnMappingData, ImportSanitizeResultsUtil $importSanitizeResultsUtil) { assert('is_array($sanitizerUtilTypes)'); assert('is_string($modelClassName)'); assert('is_string($attributeName) || $attributeName == null'); assert('is_array($columnMappingData)'); foreach ($sanitizerUtilTypes as $sanitizerUtilType) { $sanitizerUtilClassName = $sanitizerUtilType . 'SanitizerUtil'; //For extra columns, only process sanitization for 'required' since that will add the default values. //Other sanitization is not required since extra columns are not fed from external data. if ($columnMappingData["type"] == 'extraColumn' && !is_subclass_of($sanitizerUtilClassName, 'RequiredSanitizerUtil') && $sanitizerUtilClassName != 'RequiredSanitizerUtil') { continue; } $mappingRuleType = $sanitizerUtilClassName::getLinkedMappingRuleType(); if ($mappingRuleType != null) { assert('$mappingRuleType != null'); $mappingRuleFormClassName = $mappingRuleType . 'MappingRuleForm'; if (!isset($columnMappingData['mappingRulesData'][$mappingRuleFormClassName])) { assert('$columnMappingData["type"] = "extraColumn"'); $mappingRuleData = null; } else { $mappingRuleData = $columnMappingData['mappingRulesData'][$mappingRuleFormClassName]; } } else { $mappingRuleData = null; } try { if ($sanitizerUtilClassName::supportsSanitizingWithInstructions()) { if (!empty($columnMappingData['importInstructionsData'])) { assert('isset($columnMappingData["importInstructionsData"])'); $importInstructionsData = $columnMappingData['importInstructionsData']; } else { $importInstructionsData = null; } $value = $sanitizerUtilClassName::sanitizeValueWithInstructions($modelClassName, $attributeName, $value, $mappingRuleData, $importInstructionsData); } else { $value = $sanitizerUtilClassName::sanitizeValue($modelClassName, $attributeName, $value, $mappingRuleData); } } catch (InvalidValueToSanitizeException $e) { if ($e->getMessage() != null) { if ($attributeName != null) { $label = LabelUtil::makeModelAndAttributeNameCombinationLabel($modelClassName, $attributeName); } else { $label = $modelClassName::getModelLabelByTypeAndLanguage('Singular') . ' -'; } $importSanitizeResultsUtil->addMessage($label . ' ' . $e->getMessage()); } $value = null; if ($sanitizerUtilClassName::shouldNotSaveModelOnSanitizingValueFailure()) { $importSanitizeResultsUtil->setModelShouldNotBeSaved(); } break; } } return $value; }
public function testGetMessages() { $util = new ImportSanitizeResultsUtil(); $this->assertTrue(is_array($util->getMessages())); }