Spamworldpro Mini Shell
Spamworldpro


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/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/old/app/code/Soon/CsBlock/Block/Adminhtml/Block/Edit/Form.php
<?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);
        }
    }
}

Spamworldpro Mini