Model/Adminhtml/Source/PaymentGroup.php
<?php
/**
* PagBank Payment Magento Module.
*
* Copyright © 2023 PagBank. All rights reserved.
*
* @author Bruno Elisei <brunoelisei@o2ti.com>
* @license See LICENSE for license details.
*/
namespace PagBank\PaymentMagento\Model\Adminhtml\Source;
use Magento\Config\Block\System\Config\Form\Fieldset;
use Magento\Framework\View\Helper\SecureHtmlRenderer;
/**
* Class PaymentGroup - Fieldset renderer for PagBank.
*
* @SuppressWarnings(PHPMD.CamelCaseMethodName)
* @SuppressWarnings(PHPMD.CamelCasePropertyName)
*/
class PaymentGroup extends Fieldset
{
/**
* @var \Magento\Config\Model\Config
*/
protected $backendConfig;
/**
* @var SecureHtmlRenderer
*/
protected $secureRenderer;
/**
* @param \Magento\Backend\Block\Context $context
* @param \Magento\Backend\Model\Auth\Session $authSession
* @param \Magento\Framework\View\Helper\Js $jsHelper
* @param \Magento\Config\Model\Config $backendConfig
* @param SecureHtmlRenderer $secureRenderer
* @param array $data
*/
public function __construct(
\Magento\Backend\Block\Context $context,
\Magento\Backend\Model\Auth\Session $authSession,
\Magento\Framework\View\Helper\Js $jsHelper,
\Magento\Config\Model\Config $backendConfig,
SecureHtmlRenderer $secureRenderer,
array $data = []
) {
$this->backendConfig = $backendConfig;
parent::__construct($context, $authSession, $jsHelper, $data, $secureRenderer);
$this->secureRenderer = $secureRenderer;
}
/**
* Add custom css class.
*
* @param \Magento\Framework\Data\Form\Element\AbstractElement $element
*
* @return string
*/
protected function _getFrontendClass($element)
{
$enabledString = $this->_isPaymentEnabled($element) ? ' enabled' : '';
return parent::_getFrontendClass($element).' with-button'.$enabledString;
}
/**
* Check whether current payment method is enabled.
*
* @param \Magento\Framework\Data\Form\Element\AbstractElement $element
*
* @return bool
*/
protected function _isPaymentEnabled($element)
{
$groupConfig = $element->getGroup();
$activityPaths = isset($groupConfig['activity_path']) ? $groupConfig['activity_path'] : [];
if (!is_array($activityPaths)) {
$activityPaths = [$activityPaths];
}
$isPaymentEnabled = false;
foreach ($activityPaths as $activityPath) {
$isPaymentEnabled = $isPaymentEnabled
|| (bool) (string) $this->backendConfig->getConfigDataValue($activityPath);
}
return $isPaymentEnabled;
}
/**
* Return header title part of html for payment solution.
*
* @param \Magento\Framework\Data\Form\Element\AbstractElement $element
*
* @return string
*
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
* @SuppressWarnings(PHPMD.NPathComplexity)
*/
protected function _getHeaderTitleHtml($element)
{
$html = '<div class="config-heading" >';
$htmlId = $element->getHtmlId();
$html .= '<div class="button-container"><button type="button"'.
' class="button action-configure'.
'" id="'.$htmlId.'-head" >'.
'<span class="state-closed">'.__(
'Configure'
).'</span><span class="state-opened">'.__(
'Close'
).'</span></button>';
$html .= /* @noEscape */ $this->secureRenderer->renderEventListenerAsTag(
'onclick',
"pagbankToggleSolution.call(this, '".$htmlId."', '".$this->getUrl('adminhtml/*/state').
"');event.preventDefault();",
'button#'.$htmlId.'-head'
);
$html .= '</div>';
$html .= '<div class="heading"><strong>'.$element->getLegend().'</strong>';
if ($element->getComment()) {
$html .= '<span class="heading-intro">'.$element->getComment().'</span>';
}
$html .= '<div class="config-alt"></div>';
$html .= '</div></div>';
return $html;
}
/**
* Return header comment part of html for payment solution.
*
* @param \Magento\Framework\Data\Form\Element\AbstractElement $element
*
* @return string
*
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
protected function _getHeaderCommentHtml($element)
{
return '';
}
/**
* Get collapsed state on-load.
*
* @param \Magento\Framework\Data\Form\Element\AbstractElement $element
*
* @return false
*
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
protected function _isCollapseState($element)
{
return false;
}
/**
* Return extra Js.
*
* @param \Magento\Framework\Data\Form\Element\AbstractElement $element
*
* @return string
*
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
protected function _getExtraJs($element)
{
$script = "require(['jquery', 'prototype'], function(jQuery){
window.pagbankToggleSolution = function (id, url) {
var doScroll = false;
Fieldset.toggleCollapse(id, url);
if ($(this).hasClassName(\"open\")) {
\$$(\".with-button button.button\").each(function(anotherButton) {
if (anotherButton != this && $(anotherButton).hasClassName(\"open\")) {
$(anotherButton).click();
doScroll = true;
}
}.bind(this));
}
if (doScroll) {
var pos = Element.cumulativeOffset($(this));
window.scrollTo(pos[0], pos[1] - 45);
}
}
});";
return $this->_jsHelper->getScript($script);
}
}