Issues (3641)

Zed/Cms/Business/Extractor/DataExtractor.php (1 issue)

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 Spryker\Zed\Cms\Business\Extractor;
9
10
use ArrayObject;
11
use Generated\Shared\Transfer\CmsGlossaryTransfer;
12
use Generated\Shared\Transfer\CmsPageAttributesTransfer;
13
use Generated\Shared\Transfer\CmsPageMetaAttributesTransfer;
14
use Generated\Shared\Transfer\CmsPageTransfer;
15
use Generated\Shared\Transfer\CmsVersionDataTransfer;
16
use Generated\Shared\Transfer\LocaleCmsPageDataTransfer;
17
use Generated\Shared\Transfer\LocaleTransfer;
18
use Spryker\Zed\Cms\Dependency\Service\CmsToUtilEncodingInterface;
19
20
class DataExtractor implements DataExtractorInterface
21
{
22
    /**
23
     * @var \Spryker\Zed\Cms\Dependency\Service\CmsToUtilEncodingInterface
24
     */
25
    protected $utilEncoding;
26
27
    /**
28
     * @param \Spryker\Zed\Cms\Dependency\Service\CmsToUtilEncodingInterface $utilEncoding
29
     */
30
    public function __construct(CmsToUtilEncodingInterface $utilEncoding)
31
    {
32
        $this->utilEncoding = $utilEncoding;
33
    }
34
35
    /**
36
     * @param string $data
37
     *
38
     * @return \Generated\Shared\Transfer\CmsVersionDataTransfer
39
     */
40
    public function extractCmsVersionDataTransfer(string $data): CmsVersionDataTransfer
41
    {
42
        $cmsDataArray = $this->utilEncoding->decodeJson($data, true);
43
44
        return (new CmsVersionDataTransfer())->fromArray($cmsDataArray);
45
    }
46
47
    /**
48
     * @param \Generated\Shared\Transfer\CmsVersionDataTransfer $cmsVersionDataTransfer
49
     * @param \Generated\Shared\Transfer\LocaleTransfer $localeTransfer
50
     *
51
     * @return \Generated\Shared\Transfer\LocaleCmsPageDataTransfer
52
     */
53
    public function extractLocaleCmsPageDataTransfer(CmsVersionDataTransfer $cmsVersionDataTransfer, LocaleTransfer $localeTransfer): LocaleCmsPageDataTransfer
54
    {
55
        $cmsMetaAttributeTransfer = $this->extractMetaAttributeByLocales($cmsVersionDataTransfer->getCmsPage(), $localeTransfer->getLocaleName());
56
        $cmsPageAttributeTransfer = $this->extractPageAttributeByLocale($cmsVersionDataTransfer->getCmsPage(), $localeTransfer->getLocaleName());
57
58
        $localeCmsPageDataTransfer = (new LocaleCmsPageDataTransfer())
59
            ->setIdCmsPage($cmsVersionDataTransfer->getCmsPage()->getFkPage())
60
            ->setMetaDescription($cmsMetaAttributeTransfer->getMetaDescription())
61
            ->setMetaKeywords($cmsMetaAttributeTransfer->getMetaKeywords())
62
            ->setMetaTitle($cmsMetaAttributeTransfer->getMetaTitle())
63
            ->setPlaceholders($this->extractPlaceholdersByLocale($cmsVersionDataTransfer->getCmsGlossary(), $localeTransfer->getLocaleName()))
64
            ->setName($cmsPageAttributeTransfer->getName())
65
            ->setTemplatePath($cmsVersionDataTransfer->getCmsTemplate()->getTemplatePath());
66
67
        return $localeCmsPageDataTransfer;
68
    }
69
70
    /**
71
     * @param \Generated\Shared\Transfer\CmsGlossaryTransfer $cmsGlossaryTransfer
72
     * @param string|null $localeName
73
     *
74
     * @return array
75
     */
76
    protected function extractPlaceholdersByLocale(CmsGlossaryTransfer $cmsGlossaryTransfer, ?string $localeName): array
77
    {
78
        $placeholders = [];
79
        foreach ($cmsGlossaryTransfer->getGlossaryAttributes() as $glossaryAttribute) {
80
            $placeholder = $glossaryAttribute->getPlaceholder();
81
            $translations = $glossaryAttribute->getTranslations();
82
            $placeholders[$placeholder] = $this->extractTranslationByLocales($translations, $localeName);
0 ignored issues
show
It seems like $localeName can also be of type null; however, parameter $localeName of Spryker\Zed\Cms\Business...tTranslationByLocales() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

82
            $placeholders[$placeholder] = $this->extractTranslationByLocales($translations, /** @scrutinizer ignore-type */ $localeName);
Loading history...
83
        }
84
85
        return $placeholders;
86
    }
87
88
    /**
89
     * @param \Generated\Shared\Transfer\CmsPageTransfer $cmsPageTransfer
90
     * @param string|null $localeName
91
     *
92
     * @return \Generated\Shared\Transfer\CmsPageAttributesTransfer
93
     */
94
    protected function extractPageAttributeByLocale(CmsPageTransfer $cmsPageTransfer, ?string $localeName): CmsPageAttributesTransfer
95
    {
96
        foreach ($cmsPageTransfer->getPageAttributes() as $pageAttribute) {
97
            if ($pageAttribute->getLocaleName() === $localeName) {
98
                return $pageAttribute;
99
            }
100
        }
101
102
        return new CmsPageAttributesTransfer();
103
    }
104
105
    /**
106
     * @param \Generated\Shared\Transfer\CmsPageTransfer $cmsPageTransfer
107
     * @param string|null $localeName
108
     *
109
     * @return \Generated\Shared\Transfer\CmsPageMetaAttributesTransfer
110
     */
111
    protected function extractMetaAttributeByLocales(CmsPageTransfer $cmsPageTransfer, ?string $localeName): CmsPageMetaAttributesTransfer
112
    {
113
        foreach ($cmsPageTransfer->getMetaAttributes() as $metaAttribute) {
114
            if ($metaAttribute->getLocaleName() === $localeName) {
115
                return $metaAttribute;
116
            }
117
        }
118
119
        return new CmsPageMetaAttributesTransfer();
120
    }
121
122
    /**
123
     * @param \ArrayObject<int, \Generated\Shared\Transfer\CmsPlaceholderTranslationTransfer> $translations
124
     * @param string $localeName
125
     *
126
     * @return string|null
127
     */
128
    protected function extractTranslationByLocales(ArrayObject $translations, string $localeName): ?string
129
    {
130
        foreach ($translations as $translation) {
131
            if ($translation->getLocaleName() === $localeName) {
132
                return $translation->getTranslation();
133
            }
134
        }
135
136
        return '';
137
    }
138
}
139