HEX
Server: Apache
System: Linux srv13.cpanelhost.cl 3.10.0-962.3.2.lve1.5.38.el7.x86_64 #1 SMP Thu Jun 18 05:28:41 EDT 2020 x86_64
User: cca63905 (4205)
PHP: 7.3.20
Disabled: NONE
Upload Files
File: /home4/cca63905/www/nueva/modules/ps_metrics/src/Api/HttpApi.php
<?php

/**
 * Copyright since 2007 PrestaShop SA and Contributors
 * PrestaShop is an International Registered Trademark & Property of PrestaShop SA
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Academic Free License version 3.0
 * that is bundled with this package in the file LICENSE.md.
 * It is also available through the world-wide-web at this URL:
 * https://opensource.org/licenses/AFL-3.0
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@prestashop.com so we can send you a copy immediately.
 *
 * @author    PrestaShop SA and Contributors <contact@prestashop.com>
 * @copyright Since 2007 PrestaShop SA and Contributors
 * @license   https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0
 */

namespace PrestaShop\Module\Ps_metrics\Api;

use PrestaShop\Module\Ps_metrics\Api\Client\HttpClient;
use PrestaShop\Module\Ps_metrics\Helper\ConfigHelper;
use Psr\Http\Client\ClientExceptionInterface;

class HttpApi
{
    /**
     * @var HttpClient
     */
    private $client;

    /**
     * @var ConfigHelper
     */
    private $configHelper;

    /**
     * HttpApi constructor.
     *
     * @param HttpClient $httpClient
     */
    public function __construct(
        HttpClient $httpClient,
        ConfigHelper $configHelper
    ) {
        $this->client = $httpClient;
        $this->client->setMiddlewares();
        $this->configHelper = $configHelper;
    }

    /**
     * @param string $moduleKey
     * @param string $isoCode
     * @param string $psVersion
     *
     * @return mixed
     */
    public function getFaq($moduleKey, $isoCode, $psVersion)
    {
        $url =
            'https://api.addons.prestashop.com/request/faq/' .
            $moduleKey .
            '/' .
            $psVersion .
            '/' .
            $isoCode;
        $this->client->setUrl($url);

        $faq = $this->client->get();

        return !empty($faq['error']) ? null : $faq['body'];
    }

    /**
     * @param string $moduleId
     * @param string $isoCode
     * @param string $psVersion
     * @param string $format
     *
     * @return mixed
     */
    public function getLastedVersion(
        $moduleId,
        $isoCode,
        $psVersion,
        $format = 'json'
    ) {
        $url =
            'https://api.addons.prestashop.com/?version=' .
            $psVersion .
            '&iso_lang=' .
            $isoCode .
            '&iso_code=' .
            $isoCode .
            '&format=' .
            $format .
            '&method=listing&action=module&id_module=' .
            $moduleId;
        $this->client->setUrl($url);
        $module = $this->client->get();

        return empty($module['error']) &&
            !empty($module['body']['modules'][0]['version'])
            ? $module['body']['modules'][0]['version']
            : false;
    }

    /**
     * @param string $isoCode
     *
     * @return mixed
     */
    public function getPlansDetails($isoCode)
    {
        $this->client->setUrl(
            $this->configHelper->getApiBaseUrl() .
                '/plans/description/' .
                $isoCode
        );
        $plans = $this->client->get();

        return !empty($plans['error'] || empty($plans['body']))
            ? null
            : $plans['body']['plans_description'];
    }

    /**
     * @param string $url
     *
     * @return mixed
     */
    public function getSourcePage($url)
    {
        $this->client->setUrl($url);
        try {
            $source = $this->client->get();
        } catch (ClientExceptionInterface $error) {
            $source['error'] = $error->getMessage();
        }

        return !empty($source['error']) ? null : $source['body'];
    }

    /**
     * Convert amount from currency to another currency
     *
     * @param float $amount
     * @param string $currency_target
     * @param string $currency_source
     *
     * @return float
     */
    public function convertToCurrency(
        $amount,
        $currency_target,
        $currency_source = 'EUR'
    ) {
        if ($currency_source === $currency_target) {
            return $amount;
        }

        $this->client->setUrl(
            $this->configHelper->getApiBaseUrl() .
                '/currencies?currency=' .
                $currency_source
        );
        $datas = $this->client->get();

        $rate =
            !empty($datas['body']) && !empty($datas['body'][$currency_target])
                ? $datas['body'][$currency_target]
                : 1;

        // 1 USD = 0.8 EUR (by exemple)
        // 100 USD / 0.8 = 120 EUR
        return round($amount / $rate, 2);
    }
}