/**
  * 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());
 }
示例#3
0
 /**
  * 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()));
 }