__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * Copyright © 2016-present Spryker Systems GmbH. All rights reserved.
5
 * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
6
 */
7
8
namespace SprykerEco\Yves\Coremedia\ApiResponse\Renderer;
9
10
use Generated\Shared\Transfer\CoremediaPlaceholderTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfe...ediaPlaceholderTransfer was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
11
use SprykerEco\Yves\Coremedia\Dependency\Client\CoremediaToProductStorageClientInterface;
12
13
class ProductUrlPlaceholderReplacementRenderer implements PlaceholderReplacementRendererInterface
14
{
15
    protected const PLACEHOLDER_OBJECT_TYPE = 'product';
16
    protected const PLACEHOLDER_RENDER_TYPE = 'url';
17
    protected const PRODUCT_DATA_KEY_URL = 'url';
18
19
    protected const PRODUCT_MAPPING_TYPE = 'sku';
20
21
    /**
22
     * @var \SprykerEco\Yves\Coremedia\Dependency\Client\CoremediaToProductStorageClientInterface
23
     */
24
    protected $productStorageClient;
25
26
    /**
27
     * @param \SprykerEco\Yves\Coremedia\Dependency\Client\CoremediaToProductStorageClientInterface $productStorageClient
28
     */
29
    public function __construct(CoremediaToProductStorageClientInterface $productStorageClient)
30
    {
31
        $this->productStorageClient = $productStorageClient;
32
    }
33
34
    /**
35
     * @param \Generated\Shared\Transfer\CoremediaPlaceholderTransfer $coreMediaPlaceholderTransfer
36
     *
37
     * @return bool
38
     */
39
    public function isApplicable(CoremediaPlaceholderTransfer $coreMediaPlaceholderTransfer): bool
40
    {
41
        return $coreMediaPlaceholderTransfer->getObjectType() === static::PLACEHOLDER_OBJECT_TYPE &&
42
            $coreMediaPlaceholderTransfer->getRenderType() === static::PLACEHOLDER_RENDER_TYPE;
43
    }
44
45
    /**
46
     * @param \Generated\Shared\Transfer\CoremediaPlaceholderTransfer $coreMediaPlaceholderTransfer
47
     * @param string $locale
48
     *
49
     * @return string|null
50
     */
51
    public function getPlaceholderReplacement(
52
        CoremediaPlaceholderTransfer $coreMediaPlaceholderTransfer,
53
        string $locale
54
    ): ?string {
55
        if (!$coreMediaPlaceholderTransfer->getProductId()) {
56
            return null;
57
        }
58
59
        $abstractProductUrl = $this->findAbstractProductUrl(
60
            $coreMediaPlaceholderTransfer,
61
            $locale
62
        );
63
64
        if ($abstractProductUrl) {
65
            return $abstractProductUrl;
66
        }
67
68
        return $this->findConcreteProductUrl(
69
            $coreMediaPlaceholderTransfer,
70
            $locale
71
        );
72
    }
73
74
    /**
75
     * @return string|null
76
     */
77
    public function getFallbackPlaceholderReplacement(): ?string
78
    {
79
        return '';
80
    }
81
82
    /**
83
     * @param \Generated\Shared\Transfer\CoremediaPlaceholderTransfer $coreMediaPlaceholderTransfer
84
     * @param string $locale
85
     *
86
     * @return string|null
87
     */
88
    protected function findAbstractProductUrl(
89
        CoremediaPlaceholderTransfer $coreMediaPlaceholderTransfer,
90
        string $locale
91
    ): ?string {
92
        $abstractProductData = $this->productStorageClient->findProductAbstractStorageDataByMapping(
93
            static::PRODUCT_MAPPING_TYPE,
94
            $coreMediaPlaceholderTransfer->getProductId(),
95
            $locale
96
        );
97
98
        return $abstractProductData[static::PRODUCT_DATA_KEY_URL] ?? null;
99
    }
100
101
    /**
102
     * @param \Generated\Shared\Transfer\CoremediaPlaceholderTransfer $coreMediaPlaceholderTransfer
103
     * @param string $locale
104
     *
105
     * @return string|null
106
     */
107
    protected function findConcreteProductUrl(
108
        CoremediaPlaceholderTransfer $coreMediaPlaceholderTransfer,
109
        string $locale
110
    ): ?string {
111
        $concreteProductData = $this->productStorageClient->findProductConcreteStorageDataByMapping(
112
            static::PRODUCT_MAPPING_TYPE,
113
            $coreMediaPlaceholderTransfer->getProductId(),
114
            $locale
115
        );
116
117
        return $concreteProductData[static::PRODUCT_DATA_KEY_URL] ?? null;
118
    }
119
}
120