integer-net /
magento2-global-custom-layout
| 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
|
|||||
| 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
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
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
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
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
|
|||||
| 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
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
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
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
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 |
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:For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths