/** * 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; }
public function testSellPriceFormulaSanitizationWithBothInvalidAndValidData() { $mappingData = array(); $data = array(); $this->processSantizerCSVAndGetData($mappingData, $data); $counter = 1; foreach ($data as $rowBean) { //@see ImportDataAnalyze::analyzePage $sanitizer = ImportSanitizerUtilFactory::make('SellPriceFormulaType', 'ProductTemplate', 'sellPriceFormula__type', 'column_2', $mappingData['column_2']); if ($counter == 1) { $sanitizer->analyzeByRow($rowBean); $this->assertEquals(1, count($sanitizer->getAnalysisMessages())); $this->assertTrue((bool) $sanitizer->getShouldSkipRow()); try { $sanitizer->sanitizeValue($rowBean->column_2); } catch (InvalidValueToSanitizeException $e) { $this->assertEquals(Zurmo::t('ProductTemplatesModule', 'Sell Price Formula type specified is invalid.'), $e->getMessage()); } } elseif ($counter == 2) { $sanitizer->analyzeByRow($rowBean); $this->assertEquals(0, count($sanitizer->getAnalysisMessages())); $value = $sanitizer->sanitizeValue($rowBean->column_2); $this->assertEquals(2, $value); } elseif ($counter == 3) { $value = $sanitizer->sanitizeValue($rowBean->column_2); $this->assertEquals(2, $value); ZurmoRedBean::store($rowBean); $sanitizer->analyzeByRow($rowBean); $this->assertEquals(0, count($sanitizer->getAnalysisMessages())); } elseif ($counter == 4) { $value = $sanitizer->sanitizeValue($rowBean->column_2); $this->assertEquals(3, $value); ZurmoRedBean::store($rowBean); $sanitizer->analyzeByRow($rowBean); $this->assertEquals(0, count($sanitizer->getAnalysisMessages())); } $counter++; } }
public function analyzePage() { $data = $this->dataProvider->getData(true); foreach ($data as $rowBean) { assert('$rowBean->id != null'); $columnMessages = array(); $shouldSkipRow = false; foreach ($this->sanitizableColumnNames as $columnName) { $attributeIndexOrDerivedType = $this->mappingData[$columnName]['attributeIndexOrDerivedType']; $attributeImportRules = AttributeImportRulesFactory::makeByImportRulesTypeAndAttributeIndexOrDerivedType($this->importRules->getType(), $attributeIndexOrDerivedType); $modelClassName = $attributeImportRules->getModelClassName(); $attributeName = static::resolveAttributeNameByRules($attributeImportRules); if (null != ($attributeValueSanitizerUtilTypes = $attributeImportRules->getSanitizerUtilTypesInProcessingOrder())) { assert('is_array($attributeValueSanitizerUtilTypes)'); foreach ($attributeValueSanitizerUtilTypes as $attributeValueSanitizerUtilType) { $sanitizer = ImportSanitizerUtilFactory::make($attributeValueSanitizerUtilType, $modelClassName, $attributeName, $columnName, $this->mappingData[$columnName]); $sanitizer->analyzeByRow($rowBean); if ($sanitizer->getShouldSkipRow()) { $shouldSkipRow = true; } foreach ($sanitizer->getAnalysisMessages() as $message) { $columnMessages[$columnName][] = $message; } $classToEvaluate = new ReflectionClass($sanitizer); if ($classToEvaluate->implementsInterface('ImportSanitizerHasCustomFieldValuesInterface')) { $missingCustomFieldValues = $sanitizer->getMissingCustomFieldValues(); $this->getCustomFieldsInstructionData()->addMissingValuesByColumnName($missingCustomFieldValues, $columnName); } } } } if (!empty($columnMessages)) { $rowBean->serializedAnalysisMessages = serialize($columnMessages); if ($shouldSkipRow) { $rowBean->analysisStatus = static::STATUS_SKIP; } else { $rowBean->analysisStatus = static::STATUS_WARN; } } else { $rowBean->serializedAnalysisMessages = null; $rowBean->analysisStatus = static::STATUS_CLEAN; } R::store($rowBean); } }