ApiWizard.php 2.91 KB
<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace Magento\Paypal\Block\Adminhtml\System\Config;

/**
 * Custom renderer for PayPal API credentials wizard popup
 */
class ApiWizard extends \Magento\Config\Block\System\Config\Form\Field
{
    /**
     * Path to block template
     */
    const WIZARD_TEMPLATE = 'Magento_Paypal::system/config/api_wizard.phtml';

    /**
     * Set template to itself
     *
     * @return $this
     */
    protected function _prepareLayout()
    {
        parent::_prepareLayout();
        if (!$this->getTemplate()) {
            $this->setTemplate(static::WIZARD_TEMPLATE);
        }
        return $this;
    }

    /**
     * Unset some non-related element parameters
     *
     * @param \Magento\Framework\Data\Form\Element\AbstractElement $element
     * @return string
     */
    public function render(\Magento\Framework\Data\Form\Element\AbstractElement $element)
    {
        $element->unsScope()->unsCanUseWebsiteValue()->unsCanUseDefaultValue();
        return parent::render($element);
    }

    /**
     * Get the button and scripts contents
     *
     * @param \Magento\Framework\Data\Form\Element\AbstractElement $element
     * @return string
     */
    protected function _getElementHtml(\Magento\Framework\Data\Form\Element\AbstractElement $element)
    {
        $originalData = $element->getOriginalData();
        $this->addData(
            [
                // Global
                'query' => $this->createQuery(
                    [
                        'partnerId' => $originalData['partner_id'],
                        'partnerLogoUrl' => $this->_assetRepo->getUrl($originalData['partner_logo_url']),
                        'receiveCredentials' => $originalData['receive_credentials'],
                        'showPermissions' => $originalData['show_permissions'],
                        'displayMode' => $originalData['display_mode'],
                        'productIntentID' => $originalData['product_intent_id'],
                    ]
                ),
                // Live
                'button_label' => __($originalData['button_label']),
                'button_url' => $originalData['button_url'],
                'html_id' => $element->getHtmlId(),
                // Sandbox
                'sandbox_button_label' => __($originalData['sandbox_button_label']),
                'sandbox_button_url' => $originalData['sandbox_button_url'],
                'sandbox_html_id' => 'sandbox_' . $element->getHtmlId(),
            ]
        );
        return $this->_toHtml();
    }

    /**
     * Create request query
     *
     * @param array $requestData
     * @return string
     */
    private function createQuery(array $requestData)
    {
        $query = [];

        foreach ($requestData as $name => $value) {
            $query[] = sprintf('%s=%s', $name, $value);
        }

        return implode('&', $query);
    }
}