Esempio n. 1
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;
 }
 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++;
     }
 }
Esempio n. 3
0
 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);
     }
 }