Skip to content

Commit cb75ebe

Browse files
wachterjohannesalexander-schranz
authored andcommitted
Update sulu to 2.0 (sulu#100)
* update composer dependencies * update admin class to sulu 2.0 * update code to match new requirements
1 parent 2ae1608 commit cb75ebe

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+343
-433
lines changed

.circleci/config.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ version: 2
66
jobs:
77
build:
88
docker:
9-
- image: circleci/php:7.1-node-browsers
9+
- image: circleci/php:7.2-node-browsers
1010
- image: circleci/mysql:5.7
1111
environment:
1212
- DATABASE_URL=mysql://root:@127.0.0.1:3306/su_sylius_test

.gitignore

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,15 @@ composer.lock
55
# phpunit
66
phpunit.phar
77
phpunit.xml
8+
.phpunit.result.cache
89

910
# php-cs
1011
.php_cs.cache
1112

1213
# tests
1314
.env
14-
Tests/app/cache
15-
Tests/app/data
16-
Tests/app/var
17-
Tests/var
15+
Tests/Application/var
1816

1917
# npm
2018
Resources/js/package-lock.json
21-
Resources/js/node_modules
19+
Resources/js/node_modules

Admin/SyliusConsumerAdmin.php

Lines changed: 43 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,12 @@
1414
namespace Sulu\Bundle\SyliusConsumerBundle\Admin;
1515

1616
use Sulu\Bundle\AdminBundle\Admin\Admin;
17-
use Sulu\Bundle\AdminBundle\Admin\Routing\RouteBuilderFactoryInterface;
18-
use Sulu\Bundle\AdminBundle\Navigation\Navigation;
19-
use Sulu\Bundle\AdminBundle\Navigation\NavigationItem;
17+
use Sulu\Bundle\AdminBundle\Admin\Navigation\NavigationItem;
18+
use Sulu\Bundle\AdminBundle\Admin\Navigation\NavigationItemCollection;
19+
use Sulu\Bundle\AdminBundle\Admin\View\ToolbarAction;
20+
use Sulu\Bundle\AdminBundle\Admin\View\ViewBuilderFactoryInterface;
21+
use Sulu\Bundle\AdminBundle\Admin\View\ViewCollection;
2022
use Sulu\Bundle\SyliusConsumerBundle\Model\Product\ProductInterface;
21-
use Sulu\Component\Localization\Localization;
2223
use Sulu\Component\Security\Authorization\PermissionTypes;
2324
use Sulu\Component\Security\Authorization\SecurityCheckerInterface;
2425
use Sulu\Component\Webspace\Manager\WebspaceManagerInterface;
@@ -27,15 +28,19 @@ class SyliusConsumerAdmin extends Admin
2728
{
2829
const PRODUCT_SECURITY_CONTEXT = 'sulu.global.products';
2930

31+
const LIST_VIEW = 'sulu_sylius_consumer.products.list';
32+
33+
const EDIT_FORM_VIEW = 'sulu_sylius_consumer.products.edit_form';
34+
3035
/**
3136
* @var WebspaceManagerInterface
3237
*/
3338
private $webspaceManager;
3439

3540
/**
36-
* @var RouteBuilderFactoryInterface
41+
* @var ViewBuilderFactoryInterface
3742
*/
38-
private $routeBuilderFactory;
43+
private $viewBuilderFactory;
3944

4045
/**
4146
* @var SecurityCheckerInterface
@@ -44,79 +49,73 @@ class SyliusConsumerAdmin extends Admin
4449

4550
public function __construct(
4651
WebspaceManagerInterface $webspaceManager,
47-
RouteBuilderFactoryInterface $routeBuilderFactory,
52+
ViewBuilderFactoryInterface $viewBuilderFactory,
4853
SecurityCheckerInterface $securityChecker
4954
) {
5055
$this->webspaceManager = $webspaceManager;
51-
$this->routeBuilderFactory = $routeBuilderFactory;
56+
$this->viewBuilderFactory = $viewBuilderFactory;
5257
$this->securityChecker = $securityChecker;
5358
}
5459

55-
public function getNavigation(): Navigation
60+
public function configureNavigationItems(NavigationItemCollection $navigationItemCollection): void
5661
{
57-
$rootNavigationItem = $this->getNavigationItemRoot();
58-
5962
if ($this->securityChecker->hasPermission(static::PRODUCT_SECURITY_CONTEXT, PermissionTypes::EDIT)) {
60-
$products = new NavigationItem('sulu_sylius_product.products');
61-
$products->setPosition(45);
62-
$products->setIcon('fa-cube');
63-
$products->setMainRoute('sulu_sylius_product.products_list');
64-
$rootNavigationItem->addChild($products);
63+
$productItem = new NavigationItem('sulu_sylius_product.products');
64+
$productItem->setPosition(45);
65+
$productItem->setIcon('fa-cube');
66+
$productItem->setView(self::LIST_VIEW);
67+
$navigationItemCollection->add($productItem);
6568
}
66-
67-
return new Navigation($rootNavigationItem);
6869
}
6970

70-
public function getRoutes(): array
71+
public function configureViews(ViewCollection $viewCollection): void
7172
{
72-
$locales = array_values(
73-
array_map(
74-
function (Localization $localization) {
75-
return $localization->getLocale();
76-
},
77-
$this->webspaceManager->getAllLocalizations()
78-
)
79-
);
73+
$locales = $this->webspaceManager->getAllLocales();
8074

8175
$contentFormToolbarActions = [];
8276
$detailsFormToolbarActions = [];
8377
if ($this->securityChecker->hasPermission(static::PRODUCT_SECURITY_CONTEXT, PermissionTypes::EDIT)) {
84-
$contentFormToolbarActions[] = 'sulu_admin.save_with_publishing';
85-
$contentFormToolbarActions[] = 'sulu_admin.type';
86-
$detailsFormToolbarActions[] = 'sulu_admin.save';
78+
$contentFormToolbarActions[] = new ToolbarAction('sulu_admin.save_with_publishing');
79+
$contentFormToolbarActions[] = new ToolbarAction('sulu_admin.type');
80+
$detailsFormToolbarActions[] = new ToolbarAction('sulu_admin.save');
8781
}
8882

89-
return [
90-
$this->routeBuilderFactory->createListRouteBuilder('sulu_sylius_product.products_list', '/products/:locale')
83+
$viewCollection->add(
84+
$this->viewBuilderFactory->createListViewBuilder(self::LIST_VIEW, '/products/:locale')
9185
->setResourceKey(ProductInterface::RESOURCE_KEY)
9286
->setListKey(ProductInterface::LIST_KEY)
9387
->setTitle('sulu_sylius_product.products')
9488
->addListAdapters(['table'])
95-
->setEditRoute('sulu_sylius_product.product_edit_form.detail')
89+
->setEditView(self::EDIT_FORM_VIEW)
9690
->addLocales($locales)
9791
->setDefaultLocale($locales[0])
98-
->getRoute(),
99-
$this->routeBuilderFactory->createResourceTabRouteBuilder('sulu_sylius_product.product_edit_form', '/products/:locale/:id')
92+
);
93+
94+
$viewCollection->add(
95+
$this->viewBuilderFactory->createResourceTabViewBuilder(self::EDIT_FORM_VIEW, '/products/:locale/:id')
10096
->setResourceKey(ProductInterface::RESOURCE_KEY)
101-
->setBackRoute('sulu_sylius_product.products_list')
97+
->setBackView(self::LIST_VIEW)
10298
->setTitleProperty('name')
10399
->addLocales($locales)
104-
->getRoute(),
105-
$this->routeBuilderFactory->createFormRouteBuilder('sulu_sylius_product.product_edit_form.detail', '/details')
100+
);
101+
102+
$viewCollection->add(
103+
$this->viewBuilderFactory->createFormViewBuilder(self::EDIT_FORM_VIEW . '.details', '/details')
106104
->setResourceKey(ProductInterface::RESOURCE_KEY)
107105
->setFormKey(ProductInterface::FORM_KEY)
108106
->setTabTitle('sulu_sylius_product.details')
109107
->addToolbarActions($detailsFormToolbarActions)
110-
->setParent('sulu_sylius_product.product_edit_form')
111-
->getRoute(),
112-
$this->routeBuilderFactory->createFormRouteBuilder('sulu_sylius_product.product_edit_form.content', '/content')
108+
->setParent(self::EDIT_FORM_VIEW)
109+
);
110+
111+
$viewCollection->add(
112+
$this->viewBuilderFactory->createFormViewBuilder(self::EDIT_FORM_VIEW . '.content', '/content')
113113
->setResourceKey(ProductInterface::CONTENT_RESOURCE_KEY)
114114
->setFormKey(ProductInterface::CONTENT_FORM_KEY)
115115
->setTabTitle('sulu_sylius_product.content')
116116
->addToolbarActions($contentFormToolbarActions)
117-
->setParent('sulu_sylius_product.product_edit_form')
118-
->getRoute(),
119-
];
117+
->setParent(self::EDIT_FORM_VIEW)
118+
);
120119
}
121120

122121
public function getSecurityContexts()

Content/ProxyFactory.php

Lines changed: 43 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,10 @@
1313

1414
namespace Sulu\Bundle\SyliusConsumerBundle\Content;
1515

16-
use JMS\Serializer\SerializerInterface;
1716
use ProxyManager\Factory\LazyLoadingValueHolderFactory;
1817
use ProxyManager\Proxy\LazyLoadingInterface;
18+
use Sulu\Bundle\SyliusConsumerBundle\Model\Product\ProductViewInterface;
19+
use Sulu\Bundle\SyliusConsumerBundle\Resolver\ProductViewContentResolverInterface;
1920

2021
class ProxyFactory
2122
{
@@ -24,12 +25,20 @@ class ProxyFactory
2425
*/
2526
private $proxyFactory;
2627

27-
public function __construct(LazyLoadingValueHolderFactory $proxyFactory)
28-
{
28+
/**
29+
* @var ProductViewContentResolverInterface
30+
*/
31+
private $productViewContentResolver;
32+
33+
public function __construct(
34+
LazyLoadingValueHolderFactory $proxyFactory,
35+
ProductViewContentResolverInterface $productViewContentResolver
36+
) {
2937
$this->proxyFactory = $proxyFactory;
38+
$this->productViewContentResolver = $productViewContentResolver;
3039
}
3140

32-
public function createProxy(SerializerInterface $serializer, $data)
41+
public function createProxy(ProductViewInterface $productView)
3342
{
3443
return $this->proxyFactory->createProxy(
3544
\ArrayObject::class,
@@ -39,10 +48,37 @@ function (
3948
$method,
4049
array $parameters,
4150
&$initializer
42-
) use ($serializer, $data) {
51+
) use ($productView) {
4352
$initializer = null;
44-
/** @var array $serializedData */
45-
$serializedData = $serializer->serialize($data, 'array');
53+
54+
$serializedData = $this->productViewContentResolver->resolve($productView);
55+
$wrappedObject = new \ArrayObject($serializedData);
56+
57+
return true;
58+
}
59+
);
60+
}
61+
62+
/**
63+
* @param ProductViewInterface[] $productViews
64+
*/
65+
public function createProxies(array $productViews)
66+
{
67+
return $this->proxyFactory->createProxy(
68+
\ArrayObject::class,
69+
function (
70+
&$wrappedObject,
71+
LazyLoadingInterface $proxy,
72+
$method,
73+
array $parameters,
74+
&$initializer
75+
) use ($productViews) {
76+
$initializer = null;
77+
78+
$serializedData = [];
79+
foreach ($productViews as $productView) {
80+
$serializedData[] = $this->productViewContentResolver->resolve($productView);
81+
}
4682
$wrappedObject = new \ArrayObject($serializedData);
4783

4884
return true;

Content/Types/ProductSelectionContentType.php

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414
namespace Sulu\Bundle\SyliusConsumerBundle\Content\Types;
1515

16-
use JMS\Serializer\SerializerInterface;
1716
use Sulu\Bundle\SyliusConsumerBundle\Content\ProxyFactory;
1817
use Sulu\Bundle\SyliusConsumerBundle\Model\Product\Query\FindProductViewsQuery;
1918
use Sulu\Bundle\WebsiteBundle\ReferenceStore\ReferenceStoreInterface;
@@ -23,11 +22,6 @@
2322

2423
class ProductSelectionContentType extends SimpleContentType
2524
{
26-
/**
27-
* @var SerializerInterface
28-
*/
29-
private $serializer;
30-
3125
/**
3226
* @var MessageBusInterface
3327
*/
@@ -45,14 +39,12 @@ class ProductSelectionContentType extends SimpleContentType
4539

4640
public function __construct(
4741
MessageBusInterface $messageBus,
48-
SerializerInterface $serializer,
4942
ReferenceStoreInterface $productReferenceStore,
5043
ProxyFactory $proxyFactory
5144
) {
5245
parent::__construct('ProductSelection');
5346

5447
$this->messageBus = $messageBus;
55-
$this->serializer = $serializer;
5648
$this->productReferenceStore = $productReferenceStore;
5749
$this->proxyFactory = $proxyFactory;
5850
}
@@ -79,7 +71,7 @@ private function findProducts(array $ids, string $locale)
7971

8072
$productViews = $query->getProductViews();
8173

82-
return $this->proxyFactory->createProxy($this->serializer, $productViews);
74+
return $this->proxyFactory->createProxies($productViews);
8375
}
8476

8577
/**

Content/Types/SingleProductSelectionContentType.php

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414
namespace Sulu\Bundle\SyliusConsumerBundle\Content\Types;
1515

16-
use JMS\Serializer\SerializerInterface;
1716
use Sulu\Bundle\SyliusConsumerBundle\Content\ProxyFactory;
1817
use Sulu\Bundle\SyliusConsumerBundle\Model\Product\Exception\ProductInformationNotFoundException;
1918
use Sulu\Bundle\SyliusConsumerBundle\Model\Product\Query\FindProductViewQuery;
@@ -24,11 +23,6 @@
2423

2524
class SingleProductSelectionContentType extends SimpleContentType
2625
{
27-
/**
28-
* @var SerializerInterface
29-
*/
30-
private $serializer;
31-
3226
/**
3327
* @var MessageBusInterface
3428
*/
@@ -46,14 +40,12 @@ class SingleProductSelectionContentType extends SimpleContentType
4640

4741
public function __construct(
4842
MessageBusInterface $messageBus,
49-
SerializerInterface $serializer,
5043
ReferenceStoreInterface $productReferenceStore,
5144
ProxyFactory $proxyFactory
5245
) {
5346
parent::__construct('SingleProductSelection');
5447

5548
$this->messageBus = $messageBus;
56-
$this->serializer = $serializer;
5749
$this->productReferenceStore = $productReferenceStore;
5850
$this->proxyFactory = $proxyFactory;
5951
}
@@ -81,7 +73,7 @@ private function findProduct(string $id, string $locale)
8173

8274
$productView = $query->getProductView();
8375

84-
return $this->proxyFactory->createProxy($this->serializer, $productView);
76+
return $this->proxyFactory->createProxy($productView);
8577
} catch (ProductInformationNotFoundException $exception) {
8678
return null;
8779
}

Controller/Product/WebsiteProductController.php

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
1313

1414
namespace Sulu\Bundle\SyliusConsumerBundle\Controller\Product;
1515

16-
use JMS\Serializer\SerializerInterface;
1716
use Sulu\Bundle\HttpCacheBundle\Cache\SuluHttpCache;
1817
use Sulu\Bundle\SyliusConsumerBundle\Model\Attribute\Query\FindAttributeTranslationsByCodesQuery;
1918
use Sulu\Bundle\SyliusConsumerBundle\Model\Product\ProductViewInterface;
19+
use Sulu\Bundle\SyliusConsumerBundle\Resolver\ProductViewContentResolverInterface;
2020
use Sulu\Bundle\WebsiteBundle\Resolver\TemplateAttributeResolverInterface;
2121
use Symfony\Bundle\FrameworkBundle\Controller\ControllerTrait;
2222
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
@@ -53,7 +53,9 @@ protected function renderProduct(
5353

5454
protected function getAttributes(array $attributes, ProductViewInterface $object, string $locale): array
5555
{
56-
$attributes = $this->getAttributeResolver()->resolve(array_merge($this->serialize($object), $attributes));
56+
$attributes = $this->getAttributeResolver()->resolve(
57+
array_merge($this->resolveProductView($object), $attributes)
58+
);
5759

5860
return array_merge($attributes, $this->resolveProductAttributes($object, $locale));
5961
}
@@ -73,10 +75,10 @@ protected function resolveProductAttributes(ProductViewInterface $object, string
7375
];
7476
}
7577

76-
protected function serialize(ProductViewInterface $object): array
78+
protected function resolveProductView(ProductViewInterface $object): array
7779
{
7880
/** @var array $result */
79-
$result = $this->getSerializer()->serialize($object, 'array');
81+
$result = $this->getProductViewResolver()->resolve($object);
8082

8183
return $result;
8284
}
@@ -107,12 +109,12 @@ protected function createResponse(Request $request)
107109
return $response;
108110
}
109111

110-
protected function getSerializer(): SerializerInterface
112+
protected function getProductViewResolver(): ProductViewContentResolverInterface
111113
{
112-
/** @var SerializerInterface $serializer */
113-
$serializer = $this->get('jms_serializer');
114+
/** @var ProductViewContentResolverInterface $resolver */
115+
$resolver = $this->get('sulu_sylius_consumer.content.product_view_resolver');
114116

115-
return $serializer;
117+
return $resolver;
116118
}
117119

118120
protected function getMessageBus(): MessageBusInterface

0 commit comments

Comments
 (0)