Example #1
0
 /**
  * @param string $attrCode
  * @param array $attrParams
  * @param array $rowData
  * @return bool
  * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  * @SuppressWarnings(PHPMD.NPathComplexity)
  */
 public function isAttributeValid($attrCode, array $attrParams, array $rowData)
 {
     $this->_rowData = $rowData;
     if (!empty($attrParams['apply_to']) && !in_array($rowData['product_type'], $attrParams['apply_to'])) {
         return true;
     }
     if ($attrCode == Product::COL_SKU || $attrParams['is_required'] && ($this->context->getBehavior() == \Magento\ImportExport\Model\Import::BEHAVIOR_REPLACE || $this->context->getBehavior() == \Magento\ImportExport\Model\Import::BEHAVIOR_APPEND && !isset($this->context->getOldSku()[$rowData[$attrCode]]))) {
         if (!isset($rowData[$attrCode]) || !strlen(trim($rowData[$attrCode]))) {
             $valid = false;
             $this->_addMessages([sprintf($this->context->retrieveMessageTemplate(RowValidatorInterface::ERROR_VALUE_IS_REQUIRED), $attrCode)]);
             return $valid;
         }
     }
     if (!strlen(trim($rowData[$attrCode]))) {
         return true;
     }
     switch ($attrParams['type']) {
         case 'varchar':
         case 'text':
             $valid = $this->textValidation($attrCode, $attrParams['type']);
             break;
         case 'decimal':
         case 'int':
             $valid = $this->numericValidation($attrCode, $attrParams['type']);
             break;
         case 'select':
         case 'boolean':
         case 'multiselect':
             $values = explode(Product::PSEUDO_MULTI_LINE_SEPARATOR, $rowData[$attrCode]);
             $valid = true;
             foreach ($values as $value) {
                 $valid = $valid || isset($attrParams['options'][strtolower($value)]);
             }
             if (!$valid) {
                 $this->_addMessages([sprintf($this->context->retrieveMessageTemplate(RowValidatorInterface::ERROR_INVALID_ATTRIBUTE_OPTION), $attrCode)]);
             }
             break;
         case 'datetime':
             $val = trim($rowData[$attrCode]);
             $valid = strtotime($val) !== false;
             if (!$valid) {
                 $this->_addMessages([RowValidatorInterface::ERROR_INVALID_ATTRIBUTE_TYPE]);
             }
             break;
         default:
             $valid = true;
             break;
     }
     if ($valid && !empty($attrParams['is_unique'])) {
         if (isset($this->_uniqueAttributes[$attrCode][$rowData[$attrCode]]) && $this->_uniqueAttributes[$attrCode][$rowData[$attrCode]] != $rowData[Product::COL_SKU]) {
             $this->_addMessages([RowValidatorInterface::ERROR_DUPLICATE_UNIQUE_ATTRIBUTE]);
             return false;
         }
         $this->_uniqueAttributes[$attrCode][$rowData[$attrCode]] = $rowData[Product::COL_SKU];
     }
     return (bool) $valid;
 }
Example #2
0
 /**
  * @param string $attrCode
  * @param array $attributeParams
  * @param array $rowData
  * @return bool
  */
 public function isRequiredAttributeValid($attrCode, array $attributeParams, array $rowData)
 {
     $doCheck = false;
     if ($attrCode == Product::COL_SKU) {
         $doCheck = true;
     } elseif ($attributeParams['is_required'] && $this->getRowScope($rowData) == Product::SCOPE_DEFAULT && $this->context->getBehavior() != \Magento\ImportExport\Model\Import::BEHAVIOR_DELETE) {
         $doCheck = true;
     }
     return $doCheck ? isset($rowData[$attrCode]) && strlen(trim($rowData[$attrCode])) : true;
 }
Example #3
0
 /**
  * @param ImportProduct $import
  * @param bool $result
  * @return bool
  */
 public function afterImportData(ImportProduct $import, $result)
 {
     if ($import->getAffectedEntityIds()) {
         foreach ($import->getAffectedEntityIds() as $productId) {
             $product = $this->productRepository->getById($productId);
             $productUrls = $this->productUrlRewriteGenerator->generate($product);
             if ($productUrls) {
                 $this->urlPersist->replace($productUrls);
             }
         }
     } elseif (ImportExport::BEHAVIOR_DELETE == $import->getBehavior()) {
         $this->clearProductUrls($import);
     }
     return $result;
 }