Skip to content

Commit 4d2bcb2

Browse files
trickreichwachterjohannes
authored andcommitted
Load attribute translations (sulu#62)
* Load attribute translations * Fix newest sulu dev * Fix newest sulu dev * Fix PHP-CS
1 parent e9b0f73 commit 4d2bcb2

File tree

15 files changed

+131
-49
lines changed

15 files changed

+131
-49
lines changed

Admin/SyliusConsumerAdmin.php

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -65,29 +65,29 @@ function (Localization $localization) {
6565

6666
return [
6767
(new Route('sulu_sylius_product.products_datagrid', '/products/:locale', 'sulu_admin.datagrid'))
68-
->addOption('title', 'sulu_sylius_product.products')
69-
->addOption('adapters', ['table'])
70-
->addOption('resourceKey', ProductInterface::RESOURCE_KEY)
71-
->addOption('editRoute', 'sulu_sylius_product.product_edit_form.detail')
72-
->addOption('locales', $locales)
73-
->addAttributeDefault('locale', $locales[0]),
68+
->setOption('title', 'sulu_sylius_product.products')
69+
->setOption('adapters', ['table'])
70+
->setOption('resourceKey', ProductInterface::RESOURCE_KEY)
71+
->setOption('editRoute', 'sulu_sylius_product.product_edit_form.detail')
72+
->setOption('locales', $locales)
73+
->setAttributeDefault('locale', $locales[0]),
7474
(new Route('sulu_sylius_product.product_edit_form', '/products/:locale/:id', 'sulu_admin.resource_tabs'))
75-
->addOption('resourceKey', ProductInterface::RESOURCE_KEY)
76-
->addOption('toolbarActions', [])
77-
->addOption('locales', $locales)
78-
->addAttributeDefault('locale', $locales[0]),
75+
->setOption('resourceKey', ProductInterface::RESOURCE_KEY)
76+
->setOption('toolbarActions', [])
77+
->setOption('locales', $locales)
78+
->setAttributeDefault('locale', $locales[0]),
7979
(new Route('sulu_sylius_product.product_edit_form.detail', '/details', 'sulu_admin.form'))
80-
->addOption('tabTitle', 'sulu_sylius_product.details')
81-
->addOption('backRoute', 'sulu_sylius_product.products_datagrid')
82-
->addOption('formKey', 'product_details')
83-
->addOption('toolbarActions', ['sulu_admin.save'])
80+
->setOption('tabTitle', 'sulu_sylius_product.details')
81+
->setOption('backRoute', 'sulu_sylius_product.products_datagrid')
82+
->setOption('formKey', 'product_details')
83+
->setOption('toolbarActions', ['sulu_admin.save'])
8484
->setParent('sulu_sylius_product.product_edit_form'),
8585
(new Route('sulu_sylius_product.product_edit_form.content', '/content', 'sulu_admin.form'))
86-
->addOption('tabTitle', 'sulu_sylius_product.content')
87-
->addOption('backRoute', 'sulu_sylius_product.products_datagrid')
88-
->addOption('resourceKey', ProductInterface::CONTENT_RESOURCE_KEY)
89-
->addOption('formKey', ProductInterface::CONTENT_RESOURCE_KEY)
90-
->addOption('toolbarActions', $formToolbarActions)
86+
->setOption('tabTitle', 'sulu_sylius_product.content')
87+
->setOption('backRoute', 'sulu_sylius_product.products_datagrid')
88+
->setOption('resourceKey', ProductInterface::CONTENT_RESOURCE_KEY)
89+
->setOption('formKey', ProductInterface::CONTENT_RESOURCE_KEY)
90+
->setOption('toolbarActions', $formToolbarActions)
9191
->setParent('sulu_sylius_product.product_edit_form'),
9292
];
9393
}

Controller/Product/WebsiteProductController.php

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,15 @@
1515

1616
use JMS\Serializer\SerializerInterface;
1717
use Sulu\Bundle\HttpCacheBundle\Cache\SuluHttpCache;
18+
use Sulu\Bundle\SyliusConsumerBundle\Model\Attribute\Query\FindAttributeTranslationsByCodesQuery;
1819
use Sulu\Bundle\SyliusConsumerBundle\Model\Product\ProductViewInterface;
1920
use Sulu\Bundle\WebsiteBundle\Resolver\TemplateAttributeResolverInterface;
2021
use Symfony\Bundle\FrameworkBundle\Controller\ControllerTrait;
2122
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
2223
use Symfony\Component\DependencyInjection\ContainerAwareTrait;
2324
use Symfony\Component\HttpFoundation\Request;
2425
use Symfony\Component\HttpFoundation\Response;
26+
use Symfony\Component\Messenger\MessageBusInterface;
2527

2628
class WebsiteProductController implements ContainerAwareInterface
2729
{
@@ -44,14 +46,32 @@ protected function renderProduct(
4446

4547
return $this->render(
4648
$viewTemplate,
47-
$this->getAttributes($attributes, $object),
49+
$this->getAttributes($attributes, $object, $request->getLocale()),
4850
$this->createResponse($request)
4951
);
5052
}
5153

52-
protected function getAttributes(array $attributes, ProductViewInterface $object): array
54+
protected function getAttributes(array $attributes, ProductViewInterface $object, string $locale): array
5355
{
54-
return $this->getAttributeResolver()->resolve(array_merge($this->serialize($object), $attributes));
56+
$attributes = $this->getAttributeResolver()->resolve(array_merge($this->serialize($object), $attributes));
57+
58+
return array_merge($attributes, $this->resolveProductAttributes($object, $locale));
59+
}
60+
61+
protected function resolveProductAttributes(ProductViewInterface $object, string $locale): array
62+
{
63+
$attributeValueCodes = $object->getProductInformation()->getAttributeValueCodes();
64+
if (!$attributeValueCodes) {
65+
return [];
66+
}
67+
68+
$attributeTranslations = $this->getMessageBus()->dispatch(
69+
new FindAttributeTranslationsByCodesQuery($locale, $attributeValueCodes)
70+
);
71+
72+
return [
73+
'productAttributeTranslations' => $attributeTranslations,
74+
];
5575
}
5676

5777
protected function serialize(ProductViewInterface $object): array
@@ -95,4 +115,12 @@ protected function getSerializer(): SerializerInterface
95115

96116
return $serializer;
97117
}
118+
119+
protected function getMessageBus(): MessageBusInterface
120+
{
121+
/** @var MessageBusInterface $messageBus */
122+
$messageBus = $this->get('message_bus');
123+
124+
return $messageBus;
125+
}
98126
}

Model/Cart/Message/CreateCartMessage.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
class CreateCartMessage
1919
{
2020
/**
21-
* @var null|Customer
21+
* @var Customer|null
2222
*/
2323
private $customer;
2424

@@ -28,7 +28,7 @@ class CreateCartMessage
2828
private $locale;
2929

3030
/**
31-
* @var null|string
31+
* @var string|null
3232
*/
3333
private $channel;
3434

Model/Category/Category.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
class Category extends BaseCategory implements CategoryInterface
1919
{
2020
/**
21-
* @var null|int
21+
* @var int|null
2222
*/
2323
private $syliusId;
2424

Model/Customer/Customer.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,12 @@ class Customer
3838
private $gender;
3939

4040
/**
41-
* @var null|string
41+
* @var string|null
4242
*/
4343
private $firstName;
4444

4545
/**
46-
* @var null|string
46+
* @var string|null
4747
*/
4848
private $lastName;
4949

Model/Product/Handler/Query/ListProductViewsQueryHandler.php

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
namespace Sulu\Bundle\SyliusConsumerBundle\Model\Product\Handler\Query;
1515

16+
use Sulu\Bundle\SyliusConsumerBundle\Model\Attribute\Query\FindAttributeTranslationsByCodesQuery;
1617
use Sulu\Bundle\SyliusConsumerBundle\Model\Dimension\DimensionInterface;
1718
use Sulu\Bundle\SyliusConsumerBundle\Model\Dimension\DimensionRepositoryInterface;
1819
use Sulu\Bundle\SyliusConsumerBundle\Model\Product\ProductInformationAttributeValueRepositoryInterface;
@@ -21,12 +22,18 @@
2122
use Sulu\Bundle\SyliusConsumerBundle\Model\Product\ProductViewListInterface;
2223
use Sulu\Bundle\SyliusConsumerBundle\Model\Product\Query\ListProductViewsQuery;
2324
use Sulu\Bundle\SyliusConsumerBundle\Model\Product\View\ProductViewFactoryInterface;
25+
use Symfony\Component\Messenger\MessageBusInterface;
2426

2527
class ListProductViewsQueryHandler
2628
{
2729
const DEFAULT_LIMIT = 10;
2830
const DEFAULT_QUERY_FIELDS = ['product.code', 'productInformation.name'];
2931

32+
/**
33+
* @var MessageBusInterface
34+
*/
35+
private $messageBus;
36+
3037
/**
3138
* @var DimensionRepositoryInterface
3239
*/
@@ -48,11 +55,13 @@ class ListProductViewsQueryHandler
4855
private $productViewFactory;
4956

5057
public function __construct(
58+
MessageBusInterface $messageBus,
5159
DimensionRepositoryInterface $dimensionRepository,
5260
ProductRepositoryInterface $productRepository,
5361
ProductInformationAttributeValueRepositoryInterface $productInformationAttributeValueRepository,
5462
ProductViewFactoryInterface $productViewFactory
5563
) {
64+
$this->messageBus = $messageBus;
5665
$this->dimensionRepository = $dimensionRepository;
5766
$this->productRepository = $productRepository;
5867
$this->productInformationAttributeValueRepository = $productInformationAttributeValueRepository;
@@ -61,13 +70,15 @@ public function __construct(
6170

6271
public function __invoke(ListProductViewsQuery $query): ProductViewListInterface
6372
{
73+
$locale = $query->getLocale();
74+
6475
$liveDimension = $this->dimensionRepository->findOrCreateByAttributes(
6576
[DimensionInterface::ATTRIBUTE_KEY_STAGE => DimensionInterface::ATTRIBUTE_VALUE_LIVE]
6677
);
6778
$localizedLiveDimension = $this->dimensionRepository->findOrCreateByAttributes(
6879
[
6980
DimensionInterface::ATTRIBUTE_KEY_STAGE => DimensionInterface::ATTRIBUTE_VALUE_LIVE,
70-
DimensionInterface::ATTRIBUTE_KEY_LOCALE => $query->getLocale(),
81+
DimensionInterface::ATTRIBUTE_KEY_LOCALE => $locale,
7182
]
7283
);
7384

@@ -97,15 +108,31 @@ public function __invoke(ListProductViewsQuery $query): ProductViewListInterface
97108
);
98109

99110
$productViews = [];
111+
$attributeCodes = [];
100112
foreach ($products as $product) {
101-
$productViews[] = $this->productViewFactory->create($product, [$liveDimension, $localizedLiveDimension]);
113+
$productView = $this->productViewFactory->create($product, [$liveDimension, $localizedLiveDimension]);
114+
115+
$attributeCodes = array_merge(
116+
$attributeCodes,
117+
$productView->getProductInformation()->getAttributeValueCodes()
118+
);
119+
120+
$productViews[] = $productView;
121+
}
122+
123+
$productAttributeTranslations = [];
124+
if ($query->loadAttributeTranslations() && $attributeCodes) {
125+
$productAttributeTranslations = $this->messageBus->dispatch(
126+
new FindAttributeTranslationsByCodesQuery($locale, $attributeCodes)
127+
);
102128
}
103129

104130
return new ProductViewList(
105131
$page,
106132
$limit,
107133
$total,
108-
$productViews
134+
$productViews,
135+
$productAttributeTranslations
109136
);
110137
}
111138

Model/Product/ProductInformationAttributeValue.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,42 +31,42 @@ class ProductInformationAttributeValue implements ProductInformationAttributeVal
3131
private $type;
3232

3333
/**
34-
* @var null|string
34+
* @var string|null
3535
*/
3636
private $textValue;
3737

3838
/**
39-
* @var null|string
39+
* @var string|null
4040
*/
4141
private $textAreaValue;
4242

4343
/**
44-
* @var null|bool
44+
* @var bool|null
4545
*/
4646
private $booleanValue;
4747

4848
/**
49-
* @var null|int
49+
* @var int|null
5050
*/
5151
private $integerValue;
5252

5353
/**
54-
* @var null|float
54+
* @var float|null
5555
*/
5656
private $floatValue;
5757

5858
/**
59-
* @var null|\DateTimeInterface
59+
* @var \DateTimeInterface|null
6060
*/
6161
private $dateTimeValue;
6262

6363
/**
64-
* @var null|\DateTimeInterface
64+
* @var \DateTimeInterface|null
6565
*/
6666
private $dateValue;
6767

6868
/**
69-
* @var null|array
69+
* @var array|null
7070
*/
7171
private $selectValue;
7272

Model/Product/ProductMediaReference.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class ProductMediaReference
3333
private $sorting;
3434

3535
/**
36-
* @var null|int
36+
* @var int|null
3737
*/
3838
private $syliusId;
3939

Model/Product/ProductView.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class ProductView implements ProductViewInterface
4141
private $productInformation;
4242

4343
/**
44-
* @var null|Category
44+
* @var Category|null
4545
*/
4646
private $mainCategory;
4747

@@ -56,7 +56,7 @@ class ProductView implements ProductViewInterface
5656
private $media;
5757

5858
/**
59-
* @var null|ContentViewInterface
59+
* @var ContentViewInterface|null
6060
*/
6161
private $content;
6262

Model/Product/ProductViewList.php

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,17 +40,24 @@ class ProductViewList implements ProductViewListInterface
4040
*/
4141
private $productViews;
4242

43+
/**
44+
* @var array[]
45+
*/
46+
private $productAttributeTranslations;
47+
4348
public function __construct(
4449
int $page,
4550
int $limit,
4651
int $total,
47-
array $productViews
52+
array $productViews,
53+
array $productAttributeTranslations = []
4854
) {
4955
$this->page = $page;
5056
$this->limit = $limit;
5157
$this->pages = intval(ceil($total / $limit));
5258
$this->total = $total;
5359
$this->productViews = $productViews;
60+
$this->productAttributeTranslations = $productAttributeTranslations;
5461
}
5562

5663
public function getPage(): int
@@ -77,4 +84,9 @@ public function getProductViews(): array
7784
{
7885
return $this->productViews;
7986
}
87+
88+
public function getProductAttributeTranslations(): array
89+
{
90+
return $this->productAttributeTranslations;
91+
}
8092
}

0 commit comments

Comments
 (0)