123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Backend\Block\Widget;
- use Magento\Framework\App\ObjectManager;
- /**
- * Backend form widget
- *
- * @api
- * @deprecated 100.2.0 in favour of UI component implementation
- * @SuppressWarnings(PHPMD.NumberOfChildren)
- * @since 100.0.2
- */
- class Form extends \Magento\Backend\Block\Widget
- {
- /**
- * Form Object
- *
- * @var \Magento\Framework\Data\Form
- */
- protected $_form;
- /**
- * @var string
- */
- protected $_template = 'Magento_Backend::widget/form.phtml';
- /** @var Form\Element\ElementCreator */
- private $creator;
- /**
- * Constructs form
- *
- * @param \Magento\Backend\Block\Template\Context $context
- * @param array $data
- * @param Form\Element\ElementCreator|null $creator
- */
- public function __construct(
- \Magento\Backend\Block\Template\Context $context,
- array $data = [],
- Form\Element\ElementCreator $creator = null
- ) {
- parent::__construct($context, $data);
- $this->creator = $creator ?: ObjectManager::getInstance()->get(Form\Element\ElementCreator::class);
- }
- /**
- * Class constructor
- *
- * @return void
- */
- protected function _construct()
- {
- parent::_construct();
- $this->setDestElementId('edit_form');
- }
- /**
- * Preparing global layout
- *
- * You can redefine this method in child classes for changing layout
- *
- * @return $this
- */
- protected function _prepareLayout()
- {
- \Magento\Framework\Data\Form::setElementRenderer(
- $this->getLayout()->createBlock(
- \Magento\Backend\Block\Widget\Form\Renderer\Element::class,
- $this->getNameInLayout() . '_element'
- )
- );
- \Magento\Framework\Data\Form::setFieldsetRenderer(
- $this->getLayout()->createBlock(
- \Magento\Backend\Block\Widget\Form\Renderer\Fieldset::class,
- $this->getNameInLayout() . '_fieldset'
- )
- );
- \Magento\Framework\Data\Form::setFieldsetElementRenderer(
- $this->getLayout()->createBlock(
- \Magento\Backend\Block\Widget\Form\Renderer\Fieldset\Element::class,
- $this->getNameInLayout() . '_fieldset_element'
- )
- );
- return parent::_prepareLayout();
- }
- /**
- * Get form object
- *
- * @return \Magento\Framework\Data\Form
- */
- public function getForm()
- {
- return $this->_form;
- }
- /**
- * Get form HTML
- *
- * @return string
- */
- public function getFormHtml()
- {
- if (is_object($this->getForm())) {
- return $this->getForm()->getHtml();
- }
- return '';
- }
- /**
- * Set form object
- *
- * @param \Magento\Framework\Data\Form $form
- * @return $this
- */
- public function setForm(\Magento\Framework\Data\Form $form)
- {
- $this->_form = $form;
- $this->_form->setParent($this);
- $this->_form->setBaseUrl($this->_urlBuilder->getBaseUrl());
- $customAttributes = $this->getData('custom_attributes');
- if (is_array($customAttributes)) {
- foreach ($customAttributes as $key => $value) {
- $this->_form->addCustomAttribute($key, $value);
- }
- }
- return $this;
- }
- /**
- * Prepare form before rendering HTML
- *
- * @return $this
- */
- protected function _prepareForm()
- {
- return $this;
- }
- /**
- * This method is called before rendering HTML
- *
- * @return $this
- */
- protected function _beforeToHtml()
- {
- $this->_prepareForm();
- $this->_initFormValues();
- return parent::_beforeToHtml();
- }
- /**
- * Initialize form fields values
- *
- * Method will be called after prepareForm and can be used for field values initialization
- *
- * @return $this
- */
- protected function _initFormValues()
- {
- return $this;
- }
- /**
- * Set Fieldset to Form
- *
- * @param array $attributes attributes that are to be added
- * @param \Magento\Framework\Data\Form\Element\Fieldset $fieldset
- * @param array $exclude attributes that should be skipped
- * @return void
- */
- protected function _setFieldset($attributes, $fieldset, $exclude = [])
- {
- $this->_addElementTypes($fieldset);
- foreach ($attributes as $attribute) {
- /* @var $attribute \Magento\Eav\Model\Entity\Attribute */
- if (!$this->_isAttributeVisible($attribute)) {
- continue;
- }
- if (($inputType = $attribute->getFrontend()->getInputType())
- && !in_array($attribute->getAttributeCode(), $exclude)
- && ('media_image' !== $inputType || $attribute->getAttributeCode() == 'image')
- ) {
- $element = $this->creator->create($fieldset, $attribute);
- $element->setAfterElementHtml($this->_getAdditionalElementHtml($element));
- $this->_applyTypeSpecificConfig($inputType, $element, $attribute);
- }
- }
- }
- /**
- * Check whether attribute is visible
- *
- * @param \Magento\Eav\Model\Entity\Attribute $attribute
- * @return bool
- */
- protected function _isAttributeVisible(\Magento\Eav\Model\Entity\Attribute $attribute)
- {
- return !(!$attribute || $attribute->hasIsVisible() && !$attribute->getIsVisible());
- }
- /**
- * Apply configuration specific for different element type
- *
- * @param string $inputType
- * @param \Magento\Framework\Data\Form\Element\AbstractElement $element
- * @param \Magento\Eav\Model\Entity\Attribute $attribute
- * @return void
- */
- protected function _applyTypeSpecificConfig($inputType, $element, \Magento\Eav\Model\Entity\Attribute $attribute)
- {
- switch ($inputType) {
- case 'select':
- $element->setValues($attribute->getSource()->getAllOptions(true, true));
- break;
- case 'multiselect':
- $element->setValues($attribute->getSource()->getAllOptions(false, true));
- $element->setCanBeEmpty(true);
- break;
- case 'date':
- $element->setDateFormat($this->_localeDate->getDateFormatWithLongYear());
- break;
- case 'multiline':
- $element->setLineCount($attribute->getMultilineCount());
- break;
- default:
- break;
- }
- }
- /**
- * Add new element type
- *
- * @param \Magento\Framework\Data\Form\AbstractForm $baseElement
- * @return void
- */
- protected function _addElementTypes(\Magento\Framework\Data\Form\AbstractForm $baseElement)
- {
- $types = $this->_getAdditionalElementTypes();
- foreach ($types as $code => $className) {
- $baseElement->addType($code, $className);
- }
- }
- /**
- * Retrieve predefined additional element types
- *
- * @return array
- */
- protected function _getAdditionalElementTypes()
- {
- return [];
- }
- /**
- * Render additional element
- *
- * @param \Magento\Framework\Data\Form\Element\AbstractElement $element
- * @return string
- * @SuppressWarnings(PHPMD.UnusedFormalParameter)
- */
- protected function _getAdditionalElementHtml($element)
- {
- return '';
- }
- }
|