/**
  * {@inheritdoc}
  */
 public function handle(Record $recordToHandle, Record $oppositeRecord)
 {
     $this->validate($recordToHandle);
     if ($oppositeRecord->getValue($this->field) !== null || $this->setNullIfEmpty) {
         $recordToHandle->setValue($this->field, $oppositeRecord->getValue($this->field));
     }
 }
 /**
  * {@inheritdoc}
  */
 public function handle(Record $recordToHandle, Record $oppositeRecord)
 {
     $value = $recordToHandle->getValue('value');
     if (!$value) {
         return;
     }
     $this->validate($recordToHandle);
     $parts = explode(':', $value, 4);
     $partsCount = count($parts);
     if ($partsCount == 4) {
         $initVector = $parts[2];
         $encryptedValue = $parts[3];
         $mode = MCRYPT_MODE_CBC;
         $cypher = MCRYPT_RIJNDAEL_128;
     } else {
         $initVector = false;
         $encryptedValue = $value;
         $mode = MCRYPT_MODE_ECB;
         $cypher = MCRYPT_BLOWFISH;
     }
     $crypt = $this->cryptFactory->create(['key' => $this->cryptKey, 'cipher' => $cypher, 'mode' => $mode, 'initVector' => $initVector]);
     $decryptedValue = trim($crypt->decrypt(base64_decode((string) $encryptedValue)));
     $encodedValue = $this->encryptor->encrypt($decryptedValue);
     $recordToHandle->setValue('value', $encodedValue);
 }
 /**
  * {@inheritdoc}
  */
 public function handle(Record $recordToHandle, Record $oppositeRecord)
 {
     $this->validate($recordToHandle);
     $oppositeValue = $oppositeRecord->getValue($this->baseField);
     $hashMethod = $this->hash;
     $resultValue = $hashMethod($oppositeValue);
     $recordToHandle->setValue($this->field, $resultValue);
 }
 /**
  * {@inheritdoc}
  */
 public function handle(Record $recordToHandle, Record $oppositeRecord)
 {
     $this->validate($recordToHandle);
     $value = $recordToHandle->getValue($this->field);
     $valueOpposite = $oppositeRecord->getValue($this->field);
     if (!is_numeric($value) && $valueOpposite) {
         $value = $valueOpposite;
     }
     $recordToHandle->setValue($this->field, $value);
 }
 /**
  * Add Record to collection
  *
  * @param \Migration\ResourceModel\Record $record
  * @return $this
  * @throws Exception
  */
 public function addRecord($record)
 {
     if (!$record->getStructure()) {
         $record->setStructure($this->structure);
     }
     if (!$record->validateStructure($this->structure)) {
         throw new Exception("Record structure does not equal Collection structure");
     }
     $this->data[] = $record;
     return $this;
 }
 /**
  * @param Record $recordToHandle
  * @param Record $oppositeRecord
  * @return void
  */
 public function handle(Record $recordToHandle, Record $oppositeRecord)
 {
     $this->validate($recordToHandle);
     $sourceModel = $recordToHandle->getValue($this->field);
     $oppositeRecordValue = $oppositeRecord->getValue($this->field);
     if (empty($sourceModel) && !empty($oppositeRecordValue)) {
         $recordToHandle->setValue($this->field, $oppositeRecord->getValue($this->field));
     } elseif (empty($sourceModel) || $recordToHandle->getValue('is_configurable')) {
         $recordToHandle->setValue($this->field, null);
     }
 }
 /**
  * @param Record $recordToHandle
  * @param Record $oppositeRecord
  * @return mixed
  */
 public function handle(Record $recordToHandle, Record $oppositeRecord)
 {
     $this->validate($recordToHandle);
     $sourceModel = $recordToHandle->getValue($this->field);
     $oppositeRecordValue = $oppositeRecord->getValue($this->field);
     if (empty($sourceModel) && !empty($oppositeRecordValue)) {
         $recordToHandle->setValue($this->field, $oppositeRecord->getValue($this->field));
     } elseif (empty($sourceModel)) {
         $recordToHandle->setValue($this->field, null);
     } else {
         $recordToHandle->setValue($this->field, $this->classMap->convertClassName($sourceModel));
     }
 }
 /**
  * {@inheritdoc}
  */
 public function validate(Record $record)
 {
     $offsetInt = $this->offset;
     $sign = substr($this->offset, 0, 1);
     if (in_array($sign, [self::SIGN_PLUS, self::SIGN_MINUS])) {
         $offsetInt = substr($this->offset, 1, strlen($this->offset) - 1);
     } else {
         $sign = self::SIGN_PLUS;
     }
     if (self::SIGN_PLUS === $sign && $offsetInt > self::MAX_OFFSET || self::SIGN_MINUS === $sign && $offsetInt < self::MIN_OFFSET) {
         throw new Exception('Offset can have value between ' . '"' . self::MIN_OFFSET . '" and "' . self::SIGN_PLUS . self::MAX_OFFSET . '""');
     }
     $fieldType = $record->getStructure()->getFields()[$this->field]['DATA_TYPE'];
     if (!in_array($fieldType, $this->supportedDatatypes)) {
         throw new Exception('Provided datatype for field "' . $this->field . '" is not supported');
     }
     parent::validate($record);
 }
 /**
  * @dataProvider stateProvider
  * @param string $state
  * @return void
  */
 public function testHandleVisibleState($state)
 {
     $fieldName = 'visible_on_front';
     $this->recordToHandle->expects($this->once())->method('getFields')->will($this->returnValue([$fieldName]));
     $this->recordToHandle->expects($this->any())->method('getValue')->will($this->returnCallback(function ($value) use($state) {
         switch ($value) {
             case 'status':
                 return 'some_my_status';
                 break;
             case 'state':
                 return $state;
                 break;
         }
         return '';
     }));
     $this->recordToHandle->expects($this->once())->method('setValue')->with($fieldName, 1);
     $handler = new SetVisibleOnFront();
     $handler->setField($fieldName);
     $handler->handle($this->recordToHandle, $this->oppositeRecord);
 }
 /**
  * @param Record $record
  * @return mixed
  */
 public function getRecordEntityType(Record $record)
 {
     $isCategory = $record->getValue('category_id') ? 'category' : null;
     $isProduct = $record->getValue('product_id') ? 'product' : null;
     return $isProduct ?: $isCategory;
 }
 /**
  * @param ResourceModel\Record $destinationRecord
  * @param array $recordData
  * @return ResourceModel\Record
  */
 protected function transformRecord($destinationRecord, $recordData)
 {
     foreach ($destinationRecord->getFields() as $recordField) {
         $destinationRecord->setValue($recordField, $recordData[$recordField]);
     }
     return $destinationRecord;
 }
 /**
  * {@inheritdoc}
  */
 public function validate(Record $record)
 {
     if (!in_array($this->field, $record->getFields())) {
         throw new Exception("{$this->field} field not found in the record.");
     }
 }
 /**
  * @param Record $from
  * @param Record $to
  * @return void
  */
 protected function copy(Record $from, Record $to)
 {
     $sourceDocumentName = $this->sourceDocument->getName();
     $data = $from->getData();
     $sourceFields = $from->getFields();
     $destinationFields = $to->getFields();
     $diff = array_diff($sourceFields, $destinationFields);
     foreach ($diff as $field) {
         if (!$this->mapReader->isFieldIgnored($sourceDocumentName, $field, MapInterface::TYPE_SOURCE)) {
             $fieldMap = $this->mapReader->getFieldMap($sourceDocumentName, $field, MapInterface::TYPE_SOURCE);
             $data[$fieldMap] = $from->getValue($field);
         }
         unset($data[$field]);
     }
     foreach ($data as $key => $value) {
         $to->setValue($key, $value);
     }
 }
 /**
  * @param Record $sourceRecord
  * @param array $keyFields
  * @return string
  */
 protected function getMappingValue(Record $sourceRecord, $keyFields)
 {
     $value = [];
     foreach ($keyFields as $field) {
         switch ($field) {
             case 'attribute_id':
                 $value[] = $this->getDestinationAttributeId($sourceRecord->getValue($field));
                 break;
             default:
                 $value[] = $sourceRecord->getValue($field);
                 break;
         }
     }
     return implode('-', $value);
 }
 /**
  * @throws \Migration\Exception
  * @return void
  */
 public function testGetFieldsInvalid()
 {
     $this->record->setStructure(null);
     $this->setExpectedException('Exception', 'Structure not set');
     $this->record->getFields();
 }