123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- 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->toOptionArray(),
- '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;
- }
- }
|