PageLayoutPlugin   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 127
Duplicated Lines 0 %

Test Coverage

Coverage 96.43%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 33
c 1
b 0
f 0
dl 0
loc 127
ccs 27
cts 28
cp 0.9643
rs 10
wmc 6

4 Methods

Rating   Name   Duplication   Size   Complexity  
A getLayoutProcessor() 0 15 2
A afterApplyUpdate() 0 8 1
A __construct() 0 12 1
A afterFetchAvailableFiles() 0 22 2
1
<?php
2
declare(strict_types=1);
3
4
namespace IntegerNet\GlobalCustomLayout\Plugin;
5
6
use Magento\Cms\Api\Data\PageInterface;
7
use Magento\Cms\Api\PageRepositoryInterface;
8
use Magento\Cms\Model\Page\CustomLayoutManagerInterface;
9
use Magento\Cms\Model\Page\CustomLayout\CustomLayoutManager;
10
use Magento\Cms\Model\Page\CustomLayout\Data\CustomLayoutSelectedInterface;
11
use Magento\Cms\Model\Page\IdentityMap;
12
use Magento\Framework\App\Area;
13
use Magento\Framework\View\Design\Theme\FlyweightFactory;
14
use Magento\Framework\View\DesignInterface;
15
use Magento\Framework\View\Model\Layout\Merge as LayoutProcessor;
16
use Magento\Framework\View\Model\Layout\MergeFactory as LayoutProcessorFactory;
0 ignored issues
show
Bug introduced by
The type Magento\Framework\View\Model\Layout\MergeFactory 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...
17
use Magento\Framework\View\Result\Page as PageLayout;
18
19
class PageLayoutPlugin {
20
21
    /**
22
     * @var FlyweightFactory
23
     */
24
    private $themeFactory;
25
26
    /**
27
     * @var DesignInterface
28
     */
29
    private $design;
30
31
    /**
32
     * @var PageRepositoryInterface
33
     */
34
    private $pageRepository;
35
36
    /**
37
     * @var LayoutProcessorFactory
38
     */
39
    private $layoutProcessorFactory;
40
41
    /**
42
     * @var LayoutProcessor|null
43
     */
44
    private $layoutProcessor;
45
46
    /**
47
     * @var IdentityMap
48
     */
49
    private $identityMap;
50
51
    /**
52
     * @param FlyweightFactory $themeFactory
53
     * @param DesignInterface $design
54
     * @param PageRepositoryInterface $pageRepository
55
     * @param LayoutProcessorFactory $layoutProcessorFactory
56
     * @param IdentityMap $identityMap
57
     */
58 2
    public function __construct(
59
        FlyweightFactory $themeFactory,
60
        DesignInterface $design,
61
        PageRepositoryInterface $pageRepository,
62
        LayoutProcessorFactory $layoutProcessorFactory,
63
        IdentityMap $identityMap
64
    ) {
65 2
        $this->themeFactory = $themeFactory;
66 2
        $this->design = $design;
67 2
        $this->pageRepository = $pageRepository;
68 2
        $this->layoutProcessorFactory = $layoutProcessorFactory;
69 2
        $this->identityMap = $identityMap;
70 2
    }
71
72
    /**
73
     * Get the processor instance.
74
     *
75
     * @return LayoutProcessor
76
     *
77
     * Unchanged private method copied over from @var CustomLayoutManager
78
     */
79 2
    private function getLayoutProcessor(): LayoutProcessor
80
    {
81 2
        if (!$this->layoutProcessor) {
82 2
            $this->layoutProcessor = $this->layoutProcessorFactory->create(
83
                [
84 2
                    'theme' => $this->themeFactory->create(
85 2
                        $this->design->getConfigurationDesignTheme(Area::AREA_FRONTEND)
86
                    )
87
                ]
88
            );
89 2
            $this->themeFactory = null;
90 2
            $this->design = null;
91
        }
92
93 2
        return $this->layoutProcessor;
94
    }
95
96
    /**
97
     * Fetch list of available global files/handles for the page.
98
     *
99
     * @param CustomLayoutManagerInterface $subject
100
     * @param array $result
101
     * @param PageInterface $page
102
     * @return array
103
     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
104
     */
105 2
    public function afterFetchAvailableFiles(
106
        CustomLayoutManagerInterface $subject,
0 ignored issues
show
Unused Code introduced by
The parameter $subject is not used and could be removed. ( Ignorable by Annotation )

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

106
        /** @scrutinizer ignore-unused */ CustomLayoutManagerInterface $subject,

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
107
        array $result,
108
        PageInterface $page
0 ignored issues
show
Unused Code introduced by
The parameter $page is not used and could be removed. ( Ignorable by Annotation )

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

108
        /** @scrutinizer ignore-unused */ PageInterface $page

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
109
    ): array {
110 2
        $handles = $this->getLayoutProcessor()->getAvailableHandles();
111
112 2
        return array_merge($result, array_filter(
113 2
            array_map(
114
                function(string $handle) : ?string {
0 ignored issues
show
Coding Style introduced by
Expected 1 space after FUNCTION keyword; 0 found
Loading history...
115 2
                    preg_match(
116 2
                        '/^cms\_page\_view\_selectable\_0\_([a-z0-9]+)/i',
117
                        $handle,
118
                        $selectable
119
                    );
120 2
                    if (!empty($selectable[1])) {
121
                        return $selectable[1];
122
                    }
123
124 2
                    return null;
125 2
                },
126
                $handles
127
            )
128
        ));
129
    }
130
131
    /**
132
     * @param CustomLayoutManagerInterface $subject
133
     * @param $result
134
     * @param PageLayout $layout
135
     * @param CustomLayoutSelectedInterface $layoutSelected
136
     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
137
     */
138 2
    public function afterApplyUpdate(
139
        CustomLayoutManagerInterface $subject,
0 ignored issues
show
Unused Code introduced by
The parameter $subject is not used and could be removed. ( Ignorable by Annotation )

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

139
        /** @scrutinizer ignore-unused */ CustomLayoutManagerInterface $subject,

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
140
        $result,
0 ignored issues
show
Unused Code introduced by
The parameter $result is not used and could be removed. ( Ignorable by Annotation )

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

140
        /** @scrutinizer ignore-unused */ $result,

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
141
        PageLayout $layout,
142
        CustomLayoutSelectedInterface $layoutSelected
143
    ): void {
144 2
        $layout->addPageLayoutHandles(
145 2
            ['selectable_0' => $layoutSelected->getLayoutFileId()]
146
        );
147 2
    }
148
}
149