File: /var/www/vhost/disk-apps/magento.bikenow.co/vendor/magento/module-url-rewrite/Block/Edit/Form.php
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);
namespace Magento\UrlRewrite\Block\Edit;
/**
* URL rewrites edit form
*
* @SuppressWarnings(PHPMD.DepthOfInheritance)
*/
class Form extends \Magento\Backend\Block\Widget\Form\Generic
{
/**
* @var array
*/
protected $_sessionData = null;
/**
* @var array
*/
protected $_allStores = null;
/**
* @var bool
*/
protected $_requireStoresFilter = false;
/**
* @var array
*/
protected $_formValues = [];
/**
* Adminhtml data
*
* @var \Magento\Backend\Helper\Data
*/
protected $_adminhtmlData = null;
/**
* @var \Magento\Store\Model\System\Store
*/
protected $_systemStore;
/**
* @var \Magento\UrlRewrite\Model\UrlRewriteFactory
*/
protected $_rewriteFactory;
/**
* @var \Magento\UrlRewrite\Model\OptionProvider
*/
protected $optionProvider;
/**
* @param \Magento\Backend\Block\Widget\Context $context
* @param \Magento\Framework\Registry $registry
* @param \Magento\Framework\Data\FormFactory $formFactory
* @param \Magento\UrlRewrite\Model\OptionProvider $optionProvider
* @param \Magento\UrlRewrite\Model\UrlRewriteFactory $rewriteFactory
* @param \Magento\Store\Model\System\Store $systemStore
* @param \Magento\Backend\Helper\Data $adminhtmlData
* @param array $data
*/
public function __construct(
\Magento\Backend\Block\Widget\Context $context,
\Magento\Framework\Registry $registry,
\Magento\Framework\Data\FormFactory $formFactory,
\Magento\UrlRewrite\Model\OptionProvider $optionProvider,
\Magento\UrlRewrite\Model\UrlRewriteFactory $rewriteFactory,
\Magento\Store\Model\System\Store $systemStore,
\Magento\Backend\Helper\Data $adminhtmlData,
array $data = []
) {
$this->optionProvider = $optionProvider;
$this->_rewriteFactory = $rewriteFactory;
$this->_systemStore = $systemStore;
$this->_adminhtmlData = $adminhtmlData;
parent::__construct($context, $registry, $formFactory, $data);
}
/**
* Set form id and title
*
* @return void
*/
protected function _construct()
{
parent::_construct();
$this->setId('urlrewrite_form');
$this->setTitle(__('Block Information'));
}
/**
* Initialize form values
*
* Set form data either from model values or from session
*
* @return $this
*/
protected function _initFormValues()
{
$model = $this->_getModel();
$this->_formValues = [
'store_id' => $model->getStoreId(),
'entity_type' => $model->getEntityType(),
'entity_id' => $model->getEntityId(),
'request_path' => $model->getRequestPath(),
'target_path' => $model->getTargetPath(),
'redirect_type' => $model->getRedirectType(),
'description' => $model->getDescription(),
];
$sessionData = $this->_getSessionData();
if ($sessionData) {
foreach (array_keys($this->_formValues) as $key) {
if (isset($sessionData[$key])) {
$this->_formValues[$key] = $sessionData[$key];
}
}
}
return $this;
}
/**
* Prepare the form layout
*
* @return $this
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
*/
protected function _prepareForm()
{
$this->_initFormValues();
// Prepare form
/** @var \Magento\Framework\Data\Form $form */
$form = $this->_formFactory->create(
['data' => ['id' => 'edit_form', 'use_container' => true, 'method' => 'post']]
);
$fieldset = $form->addFieldset('base_fieldset', ['legend' => __('URL Rewrite Information')]);
$fieldset->addField(
'entity_type',
'hidden',
[
'name' => 'entity_type',
'value' => $this->_formValues['entity_type']
]
);
$fieldset->addField(
'entity_id',
'hidden',
[
'name' => 'entity_id',
'value' => $this->_formValues['entity_id']
]
);
$this->_prepareStoreElement($fieldset);
$fieldset->addField(
'request_path',
'text',
[
'label' => __('Request Path'),
'title' => __('Request Path'),
'name' => 'request_path',
'required' => true,
'value' => $this->_formValues['request_path']
]
);
$fieldset->addField(
'target_path',
'text',
[
'label' => __('Target Path'),
'title' => __('Target Path'),
'name' => 'target_path',
'required' => true,
'disabled' => false,
'value' => $this->_formValues['target_path']
]
);
$fieldset->addField(
'redirect_type',
'select',
[
'label' => __('Redirect Type'),
'title' => __('Redirect Type'),
'name' => 'redirect_type',
'options' => $this->optionProvider->getOptions(),
'value' => $this->_formValues['redirect_type']
]
);
$fieldset->addField(
'description',
'textarea',
[
'label' => __('Description'),
'title' => __('Description'),
'name' => 'description',
'cols' => 20,
'rows' => 5,
'value' => $this->_formValues['description'],
'wrap' => 'soft'
]
);
$this->setForm($form);
$this->_formPostInit($form);
return parent::_prepareForm();
}
/**
* Prepare store element
*
* @param \Magento\Framework\Data\Form\Element\Fieldset $fieldset
* @return void
*/
protected function _prepareStoreElement($fieldset)
{
if ($this->_storeManager->isSingleStoreMode()) {
$fieldset->addField(
'store_id',
'hidden',
['name' => 'store_id', 'value' => $this->_storeManager->getStore(true)->getId()]
);
} else {
$storeElement = $fieldset->addField(
'store_id',
'select',
[
'label' => __('Store'),
'title' => __('Store'),
'name' => 'store_id',
'required' => true,
'value' => $this->_formValues['store_id']
]
);
try {
$stores = $this->_getStoresListRestrictedByEntityStores($this->_getEntityStores());
} catch (\Magento\Framework\Exception\LocalizedException $e) {
$stores = [];
$storeElement->setAfterElementHtml($e->getMessage());
}
$storeElement->setValues($stores);
if ($this->_getModel()->getIsAutogenerated()) {
$storeElement->setReadonly(true);
}
/** @var $renderer \Magento\Backend\Block\Store\Switcher\Form\Renderer\Fieldset\Element */
$renderer = $this->getLayout()->createBlock(
\Magento\Backend\Block\Store\Switcher\Form\Renderer\Fieldset\Element::class
);
$storeElement->setRenderer($renderer);
}
}
/**
* Form post init
*
* @param \Magento\Framework\Data\Form $form
* @return $this
*/
protected function _formPostInit($form)
{
$form->setAction(
$this->_adminhtmlData->getUrl('adminhtml/*/save', ['id' => $this->_getModel()->getId()])
);
return $this;
}
/**
* Get session data
*
* @return array
*/
protected function _getSessionData()
{
if ($this->_sessionData === null) {
$this->_sessionData = $this->_backendSession->getData('url_rewrite_data', true);
}
return $this->_sessionData;
}
/**
* Get URL rewrite model instance
*
* @return \Magento\UrlRewrite\Model\UrlRewrite
*/
protected function _getModel()
{
if (!$this->hasData('url_rewrite')) {
$this->setUrlRewrite($this->_rewriteFactory->create());
}
return $this->getUrlRewrite();
}
/**
* Get request stores
*
* @return array
*/
protected function _getAllStores()
{
if ($this->_allStores === null) {
$this->_allStores = $this->_systemStore->getStoreValuesForForm();
}
return $this->_allStores;
}
/**
* Get entity stores
*
* @return array
*/
protected function _getEntityStores()
{
return $this->_getAllStores();
}
/**
* Get stores list restricted by entity stores.
* Stores should be filtered only if custom entity is specified.
* If we use custom rewrite, all stores are accepted.
*
* @param array $entityStores
* @return array
*/
private function _getStoresListRestrictedByEntityStores(array $entityStores)
{
$stores = $this->_getAllStores();
if ($this->_requireStoresFilter) {
foreach ($stores as $i => $store) {
if (isset($store['value']) && $store['value']) {
$found = false;
foreach ($store['value'] as $k => $v) {
if (isset($v['value']) && in_array($v['value'], $entityStores)) {
$found = true;
} else {
unset($stores[$i]['value'][$k]);
}
}
if (!$found) {
unset($stores[$i]);
}
}
}
}
return $stores;
}
}