![]() 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/app/code/Soon/CsBlock/Block/Adminhtml/Block/Edit/ |
<?php /** * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) * @author Hervé Guétin <[email protected]> <@herveguetin> * @copyright Copyright (c) 2017 Agence Soon (http://www.agence-soon.fr) */ namespace Soon\CsBlock\Block\Adminhtml\Block\Edit; use Magento\Backend\Block\Template\Context; use Magento\Backend\Block\Widget\Form\Element\Dependence; use Magento\Backend\Block\Widget\Form\Generic; use Magento\Framework\Data\Form as MageForm; use Magento\Framework\Data\Form\Element\Fieldset; use Magento\Framework\Data\FormFactory; use Magento\Framework\Registry; use Soon\CsBlock\Model\BlockTypeInterface; use Soon\CsBlock\Model\InputType\Builder\BuilderPoolInterface; use Soon\CsBlock\Model\InputType\InputTypePoolInterface; class Form extends Generic { /** * @var MageForm */ private $form; /** * @var Fieldset */ private $fieldset; /** * @var InputTypePoolInterface */ private $inputTypePool; /** * @var ContentMaskInterface */ private $blockType; /** * @var array */ private $fields; /** * @var BuilderPoolInterface */ private $builderPool; /** * @var array */ private $loadedBlockData = []; public function __construct( Context $context, Registry $registry, FormFactory $formFactory, InputTypePoolInterface $inputTypePool, BlockTypeInterface $blockType, BuilderPoolInterface $builderPool, array $data = [] ) { parent::__construct($context, $registry, $formFactory, $data); $this->inputTypePool = $inputTypePool; $this->blockType = $blockType; $this->builderPool = $builderPool; } /** * @return Generic */ protected function _prepareForm() { $this->populateLoadedBlockData(); $this->prepareFormAndFieldset(); $this->addInputTypes(); $this->fields = $this->blockType->getFields(); if (empty($this->fields)) { return Generic::_prepareForm(); } $this->addCommonFields(); $this->populateFields(); $this->buildFieldDependencies(); $this->populateData(); $this->setForm($this->form); return parent::_prepareForm(); } private function populateLoadedBlockData() { if ($this->_coreRegistry->registry('soon_csblock_block')) { $this->loadedBlockData = $this->_coreRegistry->registry('soon_csblock_block'); } } private function prepareFormAndFieldset() { $this->form = $this->_formFactory->create( ['data' => [ 'use_container' => true, 'id' => 'edit_form', 'action' => $this->getData('action'), 'method' => 'post' ]] ); $this->fieldset = $this->form->addFieldset( 'base_fieldset', ['legend' => __('Content Information'), 'class' => 'fieldset-wide'] ); } private function addInputTypes() { $inputTypes = $this->inputTypePool->getInputTypes(); array_map(function ($code, $class) { $this->fieldset->addType($code, $class); }, array_keys($inputTypes), $inputTypes); } private function addCommonFields() { if (!empty($this->loadedBlockData)) { $this->fieldset->addField( 'block_id', 'hidden', ['name' => 'block_id', 'value' => $this->loadedBlockData['block_id']] ); } $this->fieldset->addField( 'title', 'text', ['name' => 'title', 'label' => __('Block Title'), 'required' => true] ); $this->fieldset->addField('block_type', 'select', [ 'label' => __('Type'), 'title' => __('Type'), 'name' => 'block_type', 'options' => $this->blockType->getLabels(), ], 'title'); } private function populateFields() { foreach ($this->fields as $fieldName => $field) { $fieldConfig = [ 'label' => $field['label'], 'title' => $field['label'], 'name' => $fieldName, 'note' => (isset($field['note'])) ? $field['note'] : '', 'field_type' => $field['field_type'], ]; $fieldConfig = array_merge($fieldConfig, $this->makeFieldConfig($field)); $this->fieldset->addField($fieldName, $fieldConfig['field_type'], $fieldConfig, 'soon_type'); } } /** * @param string $field * @return array */ private function makeFieldConfig($field) { $fieldConfig = isset($field['element_data']) ? $field['element_data'] : []; $builder = $this->builderPool->makeByType( $field['field_type'], ['data' => ['soon_csblock_element_data' => $fieldConfig]] ); return ($builder) ? $builder->makeConfig() : $fieldConfig; } private function buildFieldDependencies() { /** @var Dependence $formDependBlock */ $formDependBlock = $this->getLayout()->createBlock('Magento\Backend\Block\Widget\Form\Element\Dependence'); $formDependBlock->addFieldMap('block_type', 'block_type_depend'); foreach ($this->fields as $fieldName => $field) { $formDependBlock->addFieldMap($fieldName, $fieldName . '_depend'); $typeOptionArr = explode('__', $fieldName); $typeCode = $typeOptionArr[1]; $formDependBlock->addFieldDependence($fieldName . '_depend', 'block_type_depend', $typeCode); } $this->setChild('form_after', $formDependBlock); } private function populateData() { if (!empty($this->loadedBlockData)) { $data = $this->loadedBlockData; $configData = $this->blockType->getFields(); foreach ($configData as $k => $i) { if (isset($i['element_data']['value'])) { $data[$k] = $i['element_data']['value']; } } $data = array_merge($data, unserialize($data['content'])); $this->form->setValues($data); } } }