Passed
Push — master ( cb005d...524863 )
by Joachim
07:48
created

Runtime::addItem()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 5
c 0
b 0
f 0
nc 2
nop 2
dl 0
loc 9
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Setono\SyliusStrandsPlugin\Twig;
6
7
use Setono\SyliusStrandsPlugin\Resolver\ItemCodeResolverInterface;
8
use Setono\SyliusStrandsPlugin\Widget\Widget;
9
use Sylius\Component\Core\Model\OrderItemInterface;
10
use Sylius\Component\Order\Context\CartContextInterface;
11
use Twig\Extension\RuntimeExtensionInterface;
12
13
final class Runtime implements RuntimeExtensionInterface
14
{
15
    /** @var ItemCodeResolverInterface */
16
    private $itemCodeResolver;
17
18
    /** @var CartContextInterface */
19
    private $cartContext;
20
21
    public function __construct(ItemCodeResolverInterface $itemCodeResolver, CartContextInterface $cartContext)
22
    {
23
        $this->itemCodeResolver = $itemCodeResolver;
24
        $this->cartContext = $cartContext;
25
    }
26
27
    public function itemCode(OrderItemInterface $item): string
28
    {
29
        return $this->itemCodeResolver->resolve($item);
30
    }
31
32
    public function widget(string $template): Widget
33
    {
34
        return new Widget($template);
35
    }
36
37
    /**
38
     * @param OrderItemInterface|string $item
39
     */
40
    public function addItem(Widget $widget, $item): Widget
41
    {
42
        if ($item instanceof OrderItemInterface) {
43
            $widget->addItem($this->itemCodeResolver->resolve($item));
44
        } else {
45
            $widget->addItem($item);
46
        }
47
48
        return $widget;
49
    }
50
51
    public function addItems(Widget $widget, iterable $items): Widget
52
    {
53
        foreach ($items as $item) {
54
            $this->addItem($widget, $item);
55
        }
56
57
        return $widget;
58
    }
59
60
    public function addCartItems(Widget $widget): Widget
61
    {
62
        $cart = $this->cartContext->getCart();
63
64
        if (count($cart->getItems()) === 0) {
65
            return $widget;
66
        }
67
68
        return $this->addItems($widget, $cart->getItems());
69
    }
70
}
71