![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/framework/View/Layout/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Framework\View\Layout; use Magento\Framework\View\Element\UiComponent\DataSourceInterface; use Magento\Framework\View\Element\UiComponent\BlockWrapperInterface; use Magento\Framework\View\Element\UiComponent\LayoutInterface; use Magento\Framework\View\Element\UiComponentInterface; use Magento\Framework\View\Element\UiComponentFactory; /** * Class Generic */ class Generic implements LayoutInterface { const CONFIG_JS_COMPONENT = 'component'; const CONFIG_COMPONENT_NAME = 'componentName'; const CONFIG_PANEL_COMPONENT = 'panelComponentName'; /** * @var UiComponentInterface */ protected $component; /** * @var string */ protected $namespace; /** * @var UiComponentFactory */ protected $uiComponentFactory; /** * @var array */ protected $data; /** * @param UiComponentFactory $uiComponentFactory * @param array $data */ public function __construct(UiComponentFactory $uiComponentFactory, $data = []) { $this->uiComponentFactory = $uiComponentFactory; $this->data = $data; } /** * Generate Java Script configuration element * * @param UiComponentInterface $component * @return array */ public function build(UiComponentInterface $component) { $this->component = $component; $this->namespace = $component->getContext()->getNamespace(); $this->component->getContext()->addComponentDefinition( $this->getConfig(self::CONFIG_COMPONENT_NAME), [ 'component' => $this->getConfig(self::CONFIG_JS_COMPONENT), 'extends' => $this->namespace ] ); $children = []; $context = $component->getContext(); $this->addChildren($children, $component, $component->getName()); $dataSources = $component->getContext()->getDataSourceData($component); $configuration = [ 'types' => $context->getComponentsDefinitions(), 'components' => [ $context->getNamespace() => [ 'children' => array_merge($children, $dataSources) ] ] ]; return $configuration; } /** * Add children data * * @param array $topNode * @param UiComponentInterface $component * @param string $componentType * @return void */ protected function addChildren( array &$topNode, UiComponentInterface $component, $componentType ) { $childrenNode = []; $childComponents = $component->getChildComponents(); if (!empty($childComponents)) { /** @var UiComponentInterface $child */ foreach ($childComponents as $child) { if ($child instanceof DataSourceInterface) { continue; } if ($child->getData('wrapper')) { $this->addWrappedBlock($child, $childrenNode); continue; } self::addChildren($childrenNode, $child, $child->getComponentName()); } } $config = $component->getConfiguration(); if (is_string($config)) { $topNode[$config] = $config; } else { $nodeData = [ 'type' => $componentType, 'name' => $component->getName(), ]; if (!empty($childrenNode)) { $nodeData['children'] = $childrenNode; } if (isset($config['dataScope'])) { $nodeData['dataScope'] = $config['dataScope']; unset($config['dataScope']); } if (!empty($config)) { $nodeData['config'] = $config; } $topNode[$component->getName()] = $nodeData; } } /** * Add wrapped layout block * * @param BlockWrapperInterface $childComponent * @param array $childrenNode * @return $this */ protected function addWrappedBlock(BlockWrapperInterface $childComponent, array &$childrenNode) { if (!($childComponent->getData('wrapper/canShow') && $childComponent->getData('wrapper/componentType'))) { return $this; } $name = $childComponent->getName(); $panelComponent = $this->createChildFormComponent($childComponent, $name); $childrenNode[$name] = [ 'type' => $panelComponent->getComponentName(), 'dataScope' => $name, 'config' => $childComponent->getConfiguration(), 'children' => [ $name => [ 'type' => $childComponent->getComponentName(), 'dataScope' => $name, 'config' => [ 'content' => $childComponent->render() ], ] ], ]; return $this; } /** * Create child of form * * @param UiComponentInterface $childComponent * @param string $name * @return UiComponentInterface * @throws \Magento\Framework\Exception\LocalizedException */ protected function createChildFormComponent(UiComponentInterface $childComponent, $name) { $panelComponent = $this->uiComponentFactory->create( $name, $childComponent->getData('wrapper/componentType'), [ 'context' => $this->component->getContext(), 'components' => [$childComponent->getName() => $childComponent] ] ); $panelComponent->prepare(); $this->component->addComponent($name, $panelComponent); return $panelComponent; } /** * Get config by name * * @param string $name * @return mixed */ protected function getConfig($name) { return $this->data['config'][$name] ?? null; } }