ProductUrl   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 42
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 0
Metric Value
wmc 3
lcom 1
cbo 2
dl 0
loc 42
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A aroundGetUrl() 0 11 2
1
<?php
2
3
namespace Tkotosz\CatalogRouter\Plugin;
4
5
use Tkotosz\CatalogRouter\Api\CatalogUrlProviderInterface;
6
use Tkotosz\CatalogRouter\Model\Exception\EntityDataNotFoundException;
7
use Tkotosz\CatalogRouter\Model\Service\StoreIdResolver;
8
use Magento\Catalog\Model\Product;
9
use Magento\Catalog\Model\Product\Url as DefaultProductUrlModel;
10
use Magento\Store\Model\StoreManagerInterface;
11
12
class ProductUrl
13
{
14
    /**
15
     * @var CatalogUrlProviderInterface
16
     */
17
    private $catalogUrlProvider;
18
    
19
    /**
20
     * @var StoreIdResolver
21
     */
22
    private $storeIdResolver;
23
    
24
    /**
25
     * @param CatalogUrlProviderInterface $catalogUrlProvider
26
     * @param StoreIdResolver             $storeIdResolver
27
     */
28
    public function __construct(CatalogUrlProviderInterface $catalogUrlProvider, StoreIdResolver $storeIdResolver)
29
    {
30
        $this->catalogUrlProvider = $catalogUrlProvider;
31
        $this->storeIdResolver = $storeIdResolver;
32
    }
33
    
34
    /**
35
     * @param  DefaultProductUrlModel $urlModel
36
     * @param  \Closure               $proceed
37
     * @param  Product                $product
38
     * @param  array                  $params
39
     *
40
     * @return string
41
     */
42
    public function aroundGetUrl(DefaultProductUrlModel $urlModel, \Closure $proceed, Product $product, $params = [])
43
    {
44
        try {
45
            $storeId = $this->storeIdResolver->resolve($product, $params);
46
            $url = $this->catalogUrlProvider->getProductUrl($product->getId(), $storeId, $params);
47
        } catch (EntityDataNotFoundException $e) {
48
            $url = $proceed($product, $params);
49
        }
50
51
        return $url;
52
    }
53
}
54