custom/plugins/GbmedEnev/src/Service/Eprel.php line 89

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. /**
  3.  * gb media
  4.  * All Rights Reserved.
  5.  *
  6.  * Unauthorized copying of this file, via any medium is strictly prohibited.
  7.  * The content of this file is proprietary and confidential.
  8.  *
  9.  * @category       Shopware
  10.  * @package        Shopware_Plugins
  11.  * @subpackage     GbmedEnev
  12.  * @copyright      Copyright (c) 2019, gb media
  13.  * @license        proprietary
  14.  * @author         Giuseppe Bottino
  15.  * @link           http://www.gb-media.biz
  16.  */
  17. namespace Gbmed\Enev\Service;
  18. use Gbmed\Enev\Core\Content\Enev\EnevEntity;
  19. use Gbmed\Enev\Framework\Eprel\EprelGroups;
  20. use GuzzleHttp\Client;
  21. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  22. use Symfony\Component\HttpFoundation\Response;
  23. class Eprel
  24. {
  25.     public const EPREL_URL "https://eprel.ec.europa.eu/api/products";
  26.     private EprelGroups $eprelGroups;
  27.     private Client $client;
  28.     /**
  29.      * @param EprelGroups $eprelGroups
  30.      */
  31.     public function __construct(
  32.         EprelGroups $eprelGroups
  33.     ) {
  34.         $this->eprelGroups $eprelGroups;
  35.     }
  36.     /**
  37.      * get eprel data
  38.      *
  39.      * @param string $eprelGroup
  40.      * @param int $eprelId
  41.      * @return array|null
  42.      * @throws \GuzzleHttp\Exception\GuzzleException
  43.      */
  44.     public function getEprelData(string $eprelGroupint $eprelId): ?array
  45.     {
  46.         $productUrl self::generateProductUrl($eprelGroup$eprelId);
  47.         $response $this->getClient()->get($productUrl);
  48.         if ($response->getStatusCode() !== Response::HTTP_OK) {
  49.             return null;
  50.         }
  51.         $body $response->getBody();
  52.         $content json_decode($body->getContents(), true);
  53.         return is_array($content) ? $content null;
  54.     }
  55.     /**
  56.      * get eprel data from $element
  57.      *
  58.      * @param EnevEntity $element
  59.      * @return array|null
  60.      */
  61.     public function getEprelDataFromElement(EnevEntity $element): ?array
  62.     {
  63.         return [
  64.             'energyClass' => $element->getClass(),
  65.             'color' => $element->getColor(),
  66.             'energyClassSDR' => $element->getSpectrumFrom(),
  67.             'energyClassHDR' => $element->getSpectrumTo(),
  68.             'eprelRegistrationNumber' => $element->getEprelId(),
  69.             'productGroup' => $element->getEprelGroup(),
  70.             'eprelMedia' => $element->getEprelMedia(),
  71.             'eprelDatasheed' => $element->getEprelDatasheed(),
  72.         ];
  73.     }
  74.     /**
  75.      * @param array $eprelData
  76.      * @param SalesChannelContext|null $context
  77.      * @return array
  78.      */
  79.     public function getGbmedEnev(array $eprelData, ?SalesChannelContext $salesChannelContext null)
  80.     {
  81.         return $this->eprelGroups->getGroup($eprelData['productGroup'])
  82.             ->handle($eprelData$salesChannelContext);
  83.     }
  84.     /**
  85.      * @param string $eprelGroup
  86.      * @param int $eprelId
  87.      * @param string|null $type
  88.      * @return string
  89.      */
  90.     public static function generateProductUrl(string $eprelGroupint $eprelIdstring $type null)
  91.     {
  92.         $params = [$eprelGroup$eprelId];
  93.         if ($type) {
  94.             $params[] = $type;
  95.         }
  96.         return self::EPREL_URL '/' implode('/'$params);
  97.     }
  98.     /**
  99.      * return guzzle http client
  100.      *
  101.      * @return Client
  102.      */
  103.     public function getClient(): Client
  104.     {
  105.         if (!isset($this->client)) {
  106.             $this->client = new Client();
  107.         }
  108.         return $this->client;
  109.     }
  110. }