Skip to content

Commit 01587f2

Browse files
committed
OP-289: List bundles on product detail admin page
1 parent a9d546c commit 01587f2

File tree

6 files changed

+83
-7
lines changed

6 files changed

+83
-7
lines changed

src/Resources/config/services/filter.xml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
<container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
44
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
55
<services>
6-
<service id="bitbag_sylius_product_bundle.grid.filter.is_bundle" class="BitBag\SyliusProductBundlePlugin\Grid\Filter\IsBundleFilter">
6+
<service id="bitbag_sylius_product_bundle.grid.filter.is_bundle"
7+
class="BitBag\SyliusProductBundlePlugin\Grid\Filter\IsBundleFilter">
78
<argument type="service" id="bitbag_sylius_product_bundle.repository.product_bundle"/>
8-
<tag name="sylius.grid_filter" type="is_bundle" form_type="Sylius\Bundle\GridBundle\Form\Type\Filter\BooleanFilterType" />
9+
<tag name="sylius.grid_filter" type="is_bundle"
10+
form_type="Sylius\Bundle\GridBundle\Form\Type\Filter\BooleanFilterType"/>
911
</service>
1012
</services>
1113
</container>
Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
11
<?xml version="1.0" encoding="UTF-8" ?>
22

3-
<container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
3+
<container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
45
<services>
5-
<service id="bitbag_sylius_product_bundle.twig.extension.smash_promotion" class="BitBag\SyliusProductBundlePlugin\Twig\Extension\ProductBundleOrderItemExtension" public="false">
6-
<argument type="service" id="bitbag_sylius_product_bundle.repository.product_bundle_order_item" />
7-
<argument type="service" id="twig" />
8-
<tag name="twig.extension" />
6+
<service id="bitbag_sylius_product_bundle.twig.extension.smash_promotion"
7+
class="BitBag\SyliusProductBundlePlugin\Twig\Extension\ProductBundleOrderItemExtension" public="false">
8+
<argument type="service" id="bitbag_sylius_product_bundle.repository.product_bundle_order_item"/>
9+
<argument type="service" id="twig"/>
10+
<tag name="twig.extension"/>
11+
</service>
12+
<service id="bitbag_sylius_product_bundle.twig.extension.product_bundles"
13+
class="BitBag\SyliusProductBundlePlugin\Twig\Extension\ProductBundlesExtension" public="false">
14+
<argument type="service" id="bitbag_sylius_product_bundle.repository.product_bundle"/>
15+
<tag name="twig.extension"/>
916
</service>
1017
</services>
1118
</container>

src/Resources/translations/messages.en.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
bitbag_sylius_product_bundle:
22
ui:
33
bundle: Bundle
4+
bundles: Bundles
45
product_variant: Product variant
56
quantity: Quantity
67
delete: Delete
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
{% extends '@SyliusAdmin/layout.html.twig' %}
2+
3+
{% block title %}{{ 'sylius.ui.show_product'|trans }} | {{ product.name }}{% endblock %}
4+
5+
{% block content %}
6+
{% if product.variants|length == 1 %}
7+
{% include "@SyliusAdmin/Product/Show/_simpleProduct.html.twig" %}
8+
{% else %}
9+
{% include "@SyliusAdmin/Product/Show/_configurableProduct.html.twig" %}
10+
{% endif %}
11+
12+
{% set bundles = bitbag_get_bundles_containing_product(product) %}
13+
{% if bundles|length > 0 %}
14+
<div class="ui hidden divider"></div>
15+
<div>
16+
<h4 class="ui top attached large header">{{ 'bitbag_sylius_product_bundle.ui.bundles'|trans }}</h4>
17+
{% for bundle in bundles %}
18+
<div class="ui attached segment text-break">
19+
<a href="{{ path('sylius_admin_product_update', {id: bundle.product.id}) }}">
20+
{{ bundle.product.name }}
21+
</a>
22+
</div>
23+
{% endfor %}
24+
</div>
25+
{% endif %}
26+
{% endblock %}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
3+
/*
4+
* This file has been created by developers from BitBag.
5+
* Feel free to contact us once you face any issues or want to start
6+
* You can find more information about us on https://bitbag.io and write us
7+
* an email on hello@bitbag.io.
8+
*/
9+
10+
declare(strict_types=1);
11+
12+
namespace BitBag\SyliusProductBundlePlugin\Twig\Extension;
13+
14+
use BitBag\SyliusProductBundlePlugin\Entity\ProductBundleInterface;
15+
use BitBag\SyliusProductBundlePlugin\Entity\ProductInterface;
16+
use BitBag\SyliusProductBundlePlugin\Repository\ProductBundleRepositoryInterface;
17+
use Twig\Extension\AbstractExtension;
18+
use Twig\TwigFunction;
19+
20+
final class ProductBundlesExtension extends AbstractExtension
21+
{
22+
public function __construct(
23+
private ProductBundleRepositoryInterface $productBundleRepository,
24+
) {
25+
}
26+
27+
public function getFunctions(): array
28+
{
29+
return [
30+
new TwigFunction('bitbag_get_bundles_containing_product', [$this, 'getBundlesForProduct'], ['is_safe' => ['html']]),
31+
];
32+
}
33+
34+
/** @return ProductBundleInterface[] */
35+
public function getBundlesForProduct(ProductInterface $product): array
36+
{
37+
return $this->productBundleRepository->findBundlesByVariants($product->getVariants());
38+
}
39+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{% include '@BitBagSyliusProductBundlePlugin/Admin/Product/show.html.twig' %}

0 commit comments

Comments
 (0)