Skip to content

Commit

Permalink
Releasing v1.1.2
Browse files Browse the repository at this point in the history
  • Loading branch information
vlmed committed Jan 27, 2025
1 parent 92e7b6f commit d361ec5
Show file tree
Hide file tree
Showing 25 changed files with 691 additions and 217 deletions.
3 changes: 2 additions & 1 deletion Model/DataMapping/Config/Converter.php
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,8 @@ public function convert($source)

$entityTypeData[] = [
'bloomreach_code' => $bloomreachCode->getAttribute('code'),
'field' => $fieldCode
'field' => $fieldCode,
'type' => $bloomreachCode->getAttribute('type'),
];
}
$output[$entityType->getAttribute('entity')] = $entityTypeData;
Expand Down
12 changes: 11 additions & 1 deletion Model/DataMapping/Config/Data/FieldMappingConfigData.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@
class FieldMappingConfigData extends AbstractSimpleObject implements FieldMappingConfigDataInterface
{
public const BLOOMREACH_CODE = 'bloomreach_code';

public const FIELD = 'field';
public const TYPE = 'type';

/**
* Return Bloomreach code
Expand All @@ -37,4 +37,14 @@ public function getField(): string
{
return $this->_get(self::FIELD);
}

/**
* Returns field type
*
* @return string
*/
public function getType(): string
{
return $this->_get(self::TYPE);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,11 @@ public function getBloomreachCode(): string;
* @return string
*/
public function getField(): string;

/**
* Returns field type
*
* @return string
*/
public function getType(): string;
}
8 changes: 5 additions & 3 deletions Model/DataMapping/ConfigResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ private function createByEntityType(string $entityType): array
if (!$configData) {
throw new NotFoundException(
__(
'There are not registered mapping config for "%1" entity type',
'There is no registered mapping config for "%1" entity type',
$entityType
)
);
Expand All @@ -100,16 +100,18 @@ private function prepareConfigData(array $configData): array
foreach ($configData as $configField) {
$bloomreachCode = $configField['bloomreach_code'] ?? '';
$field = $configField['field'] ?? '';
$type = $configField['type'] ?? '';

if (!$bloomreachCode || !$field) {
continue;
}

$result[] = $this->fieldMappingConfigDataInterfaceFactory->create(
$result[$bloomreachCode] = $this->fieldMappingConfigDataInterfaceFactory->create(
[
'data' => [
FieldMappingConfigData::BLOOMREACH_CODE => $bloomreachCode,
FieldMappingConfigData::FIELD => $field
FieldMappingConfigData::FIELD => $field,
FieldMappingConfigData::TYPE => $type
]
]
);
Expand Down
58 changes: 58 additions & 0 deletions Model/DataMapping/FieldTypeResolver.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
<?php
/**
* @author Bloomreach
* @copyright Copyright (c) Bloomreach (https://www.bloomreach.com/)
*/
declare(strict_types=1);

namespace Bloomreach\EngagementConnector\Model\DataMapping;

use Bloomreach\EngagementConnector\Service\ValueTypeGetter;
use Magento\Framework\Exception\NotFoundException;

/**
* This class is responsible for getting field type
*/
class FieldTypeResolver
{
/**
* @var ConfigResolver
*/
private $configResolver;

/**
* @var ValueTypeGetter
*/
private $valueTypeGetter;

/**
* @param ConfigResolver $configResolver
* @param ValueTypeGetter $valueTypeGetter
*/
public function __construct(
ConfigResolver $configResolver,
ValueTypeGetter $valueTypeGetter
) {
$this->configResolver = $configResolver;
$this->valueTypeGetter = $valueTypeGetter;
}

/**
* Get field type
*
* @param string $entityType
* @param string $fieldCode
* @param mixed $value
*
* @return string
* @throws NotFoundException
*/
public function get(string $entityType, string $fieldCode, $value): string
{
$fieldConfig = $this->configResolver->getByEntityType($entityType)[$fieldCode] ?? null;

return $fieldConfig && $fieldConfig->getType()
? $fieldConfig->getType()
: $this->valueTypeGetter->execute($value);
}
}
2 changes: 1 addition & 1 deletion Model/DataMapping/FieldValueRenderer/Order/ProductList.php
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,6 @@ private function getProductSku(OrderItemInterface $orderItem): string
$product = $orderItem->getProduct();
}

return $product ? $product->getSku() : $orderItem->getSku();
return (string) ($product ? $product->getSku() : $orderItem->getSku());
}
}
37 changes: 31 additions & 6 deletions Model/DataMapping/FieldValueRenderer/OrderItem/Category.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@
namespace Bloomreach\EngagementConnector\Model\DataMapping\FieldValueRenderer\OrderItem;

use Bloomreach\EngagementConnector\Model\DataMapping\FieldValueRenderer\RenderInterface;
use Bloomreach\EngagementConnector\Model\Product\CategoryDataResolver;
use Bloomreach\EngagementConnector\Service\EavAttribute\GetAttributeValue;
use Magento\Catalog\Api\Data\ProductAttributeInterface;
use Bloomreach\EngagementConnector\Model\Product\Store\CategoryDataResolver;
use Exception;
use Magento\Catalog\Model\Product;
use Magento\Framework\Api\AbstractSimpleObject;
use Magento\Framework\Model\AbstractModel;
use Magento\Store\Model\StoreManagerInterface;

/**
* The class is responsible for rendering the value of order item product category field
Expand All @@ -25,12 +25,21 @@ class Category implements RenderInterface
*/
private $categoryDataResolver;

/**
* @var StoreManagerInterface
*/
private $storeManager;

/**
* @param CategoryDataResolver $categoryDataResolver
* @param StoreManagerInterface $storeManager
*/
public function __construct(CategoryDataResolver $categoryDataResolver)
{
public function __construct(
CategoryDataResolver $categoryDataResolver,
StoreManagerInterface $storeManager
) {
$this->categoryDataResolver = $categoryDataResolver;
$this->storeManager = $storeManager;
}

/**
Expand All @@ -46,6 +55,22 @@ public function render($entity, string $fieldCode)
/** @var Product $product */
$product = $entity->getProduct();

return $product ? $this->categoryDataResolver->getDataByCode($product, $fieldCode) : '';
if (!$product) {
return '';
}

if ($this->storeManager->isSingleStoreMode()) {
return $this->categoryDataResolver->execute($product, $fieldCode);
}

try {
$defaultStoreId = (int) $this->storeManager->getDefaultStoreView()->getId();

return (int) $entity->getStoreId() === $defaultStoreId
? $this->categoryDataResolver->execute($product, $fieldCode)
: $this->categoryDataResolver->execute($product, $fieldCode, $defaultStoreId);
} catch (Exception $e) {
return $this->categoryDataResolver->execute($product, $fieldCode);
}
}
}
116 changes: 106 additions & 10 deletions Model/DataMapping/FieldValueRenderer/OrderItem/Name.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,13 @@

use Bloomreach\EngagementConnector\Model\DataMapping\FieldValueRenderer\RenderInterface;
use Bloomreach\EngagementConnector\Model\ResourceModel\OrderItem\ChildItems;
use Exception;
use Magento\Catalog\Model\ProductRepository;
use Magento\ConfigurableProduct\Model\Product\Type\Configurable;
use Magento\Framework\Api\AbstractSimpleObject;
use Magento\Framework\Model\AbstractModel;
use Magento\Framework\Exception\NoSuchEntityException;
use Magento\Sales\Api\Data\OrderItemInterface;
use Magento\Sales\Model\Order\Item;
use Magento\Store\Model\StoreManagerInterface;

/**
* The class is responsible for rendering the value of order item name field
Expand All @@ -24,37 +27,80 @@ class Name implements RenderInterface
*/
private $childItems;

/**
* @var StoreManagerInterface
*/
private $storeManager;

/**
* @var ProductRepository
*/
private $productRepository;

/**
* @param ChildItems $childItems
* @param StoreManagerInterface $storeManager
* @param ProductRepository $productRepository
*/
public function __construct(ChildItems $childItems)
{
public function __construct(
ChildItems $childItems,
StoreManagerInterface $storeManager,
ProductRepository $productRepository
) {
$this->childItems = $childItems;
$this->storeManager = $storeManager;
$this->productRepository = $productRepository;
}

/**
* Render the value of order item field
*
* @param AbstractSimpleObject|AbstractModel $entity
* @param Item $entity
* @param string $fieldCode
*
* @return string
*/
public function render($entity, string $fieldCode)
{
$name = $entity->getName();
if ($this->storeManager->isSingleStoreMode()) {
return $this->getName($entity);
}

$defaultStoreId = (int) $this->storeManager->getDefaultStoreView()->getId();

if ($defaultStoreId === (int) $entity->getStoreId()) {
return $this->getName($entity);
}

if ($entity->getProductType() !== Configurable::TYPE_CODE) {
try {
return $this->getNameForStore($entity, $defaultStoreId);
} catch (Exception $e) {
return $this->getName($entity);
}
}

/**
* Get product name
*
* @param OrderItemInterface $orderItem
*
* @return string
*/
private function getName(OrderItemInterface $orderItem): string
{
$name = $orderItem->getName();

if ($orderItem->getProductType() !== Configurable::TYPE_CODE) {
return $name;
}

/** @var OrderItemInterface[] $childrenItems */
$childrenItems = $entity->getChildrenItems();
$childrenItems = $orderItem->getChildrenItems();

if (!$childrenItems) {
$childName = $this->childItems->getChildName(
(int) $entity->getOrderId(),
(int) $entity->getItemId()
(int) $orderItem->getOrderId(),
(int) $orderItem->getItemId()
);

return $childName ?: $name;
Expand All @@ -66,4 +112,54 @@ public function render($entity, string $fieldCode)

return $name;
}

/**
* Get name for store
*
* @param OrderItemInterface $orderItem
* @param int $storeId
*
* @return string
* @throws NoSuchEntityException
*/
private function getNameForStore(OrderItemInterface $orderItem, int $storeId): string
{
if ($orderItem->getProductType() !== Configurable::TYPE_CODE) {
return $this->getProductName((int) $orderItem->getProductId(), $storeId);
}

/** @var OrderItemInterface[] $childrenItems */
$childrenItems = $orderItem->getChildrenItems() ?? [];

if (!$childrenItems) {
$childIds = $this->childItems->getChildIds((int) $orderItem->getOrderId(), (int) $orderItem->getItemId());

foreach ($childIds as $childId) {
return $this->getProductName((int) $childId, $storeId);
}
}

foreach ($childrenItems as $childrenItem) {
return $this->getProductName((int) $childrenItem->getProductId(), $storeId);
}

return $this->getProductName((int) $orderItem->getProductId(), $storeId);
}

/**
* Get product name
*
* @param int $productId
* @param int $storeId
*
* @return string
* @throws NoSuchEntityException
*/
private function getProductName(int $productId, int $storeId): string
{
$name = $this->productRepository->getById($productId, false, $storeId)->getName();
$this->productRepository->cleanCache();

return $name;
}
}
6 changes: 3 additions & 3 deletions Model/DataMapping/FieldValueRenderer/Product/Rating.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,9 @@ public function __construct(
* @param AbstractSimpleObject|AbstractModel $entity
* @param string $fieldCode
*
* @return string
* @return float
*/
public function render($entity, string $fieldCode): string
public function render($entity, string $fieldCode)
{
$rating = 0;
$storeId = (int) $entity->getStoreId();
Expand All @@ -53,6 +53,6 @@ public function render($entity, string $fieldCode): string
$rating = $entity->getRatingSummary()->getReviewsCount();
}

return (string) $rating;
return (float) $rating;
}
}
Loading

0 comments on commit d361ec5

Please sign in to comment.