123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- /**
- * Field renderer for PayPal merchant country selector
- */
- namespace Magento\Paypal\Block\Adminhtml\System\Config\Field;
- use Magento\Paypal\Model\Config\StructurePlugin;
- class Country extends \Magento\Config\Block\System\Config\Form\Field
- {
- /**
- * Config path for merchant country selector
- */
- const FIELD_CONFIG_PATH = 'paypal/general/merchant_country';
- /**
- * Request parameter name for default country
- */
- const REQUEST_PARAM_DEFAULT_COUNTRY = 'paypal_default_country';
- /**
- * Country of default scope
- *
- * @var string
- */
- protected $_defaultCountry;
- /**
- * @var \Magento\Backend\Model\Url
- */
- protected $_url;
- /**
- * @var \Magento\Framework\View\Helper\Js
- */
- protected $_jsHelper;
- /**
- * @var \Magento\Directory\Helper\Data
- */
- protected $directoryHelper;
- /**
- * @param \Magento\Backend\Block\Template\Context $context
- * @param \Magento\Backend\Model\Url $url
- * @param \Magento\Framework\View\Helper\Js $jsHelper
- * @param \Magento\Directory\Helper\Data $directoryHelper
- * @param array $data
- */
- public function __construct(
- \Magento\Backend\Block\Template\Context $context,
- \Magento\Backend\Model\Url $url,
- \Magento\Framework\View\Helper\Js $jsHelper,
- \Magento\Directory\Helper\Data $directoryHelper,
- array $data = []
- ) {
- parent::__construct($context, $data);
- $this->_url = $url;
- $this->_jsHelper = $jsHelper;
- $this->directoryHelper = $directoryHelper;
- }
- /**
- * Render country field considering request parameter
- *
- * @param \Magento\Framework\Data\Form\Element\AbstractElement $element
- * @return string
- */
- public function render(\Magento\Framework\Data\Form\Element\AbstractElement $element)
- {
- $country = $this->getRequest()->getParam(StructurePlugin::REQUEST_PARAM_COUNTRY);
- if ($country) {
- $element->setValue($country);
- }
- if ($element->getCanUseDefaultValue()) {
- $this->_defaultCountry = $this->_scopeConfig->getValue(self::FIELD_CONFIG_PATH);
- if (!$this->_defaultCountry) {
- $this->_defaultCountry = $this->directoryHelper->getDefaultCountry();
- }
- if ($country) {
- $shouldInherit = $country == $this->_defaultCountry
- && $this->getRequest()->getParam(self::REQUEST_PARAM_DEFAULT_COUNTRY);
- $element->setInherit($shouldInherit);
- }
- if ($element->getInherit()) {
- $this->_defaultCountry = null;
- }
- }
- return parent::render($element);
- }
- /**
- * Get country selector html
- *
- * @param \Magento\Framework\Data\Form\Element\AbstractElement $element
- * @return string
- */
- protected function _getElementHtml(\Magento\Framework\Data\Form\Element\AbstractElement $element)
- {
- $urlParams = [
- 'section' => $this->getRequest()->getParam('section'),
- 'website' => $this->getRequest()->getParam('website'),
- 'store' => $this->getRequest()->getParam('store'),
- StructurePlugin::REQUEST_PARAM_COUNTRY => '__country__',
- ];
- $urlString = $this->_escaper->escapeUrl($this->_url->getUrl('*/*/*', $urlParams));
- $jsString = '
- $("' . $element->getHtmlId() . '").observe("change", function () {
- location.href = \'' . $urlString . '\'.replace("__country__", this.value);
- });
- ';
- if ($this->_defaultCountry) {
- $urlParams[self::REQUEST_PARAM_DEFAULT_COUNTRY] = '__default__';
- $urlString = $this->_escaper->escapeUrl($this->_url->getUrl('*/*/*', $urlParams));
- $jsParentCountry = $this->_escaper->escapeJs($this->_defaultCountry);
- $jsString .= '
- $("' . $element->getHtmlId() . '_inherit").observe("click", function () {
- if (this.checked) {
- location.href = \'' . $urlString . '\'.replace("__country__", \'' . $jsParentCountry . '\')
- .replace("__default__", "1");
- }
- });
- ';
- }
- return parent::_getElementHtml($element) . $this->_jsHelper->getScript(
- 'require([\'prototype\'], function(){document.observe("dom:loaded", function() {' . $jsString . '});});'
- );
- }
- }
|