custom/plugins/MagmodulesWebshopnl/src/Api/Controller/InfoController.php line 38

  1. <?php
  2. declare(strict_types=1);
  3. namespace MagmodulesWebshopnl\Api\Controller;
  4. use Composer\InstalledVersions;
  5. use MagmodulesWebshopnl\Service\WebshopnlFileExportHandler;
  6. use Shopware\Core\Framework\Context;
  7. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
  8. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  9. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  10. use Shopware\Core\Framework\Plugin\PluginEntity;
  11. use Shopware\Core\System\SalesChannel\SalesChannelEntity;
  12. use Shopware\Core\System\SystemConfig\SystemConfigService;
  13. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  14. use Symfony\Component\HttpFoundation\JsonResponse;
  15. use Symfony\Component\HttpFoundation\Request;
  16. use Symfony\Component\Routing\Annotation\Route;
  17. /**
  18.  * @Route(defaults={"_routeScope"={"storefront"}})
  19.  */
  20. class InfoController extends AbstractController
  21. {
  22.     public function __construct(
  23.         private SystemConfigService $systemConfigService,
  24.         private EntityRepository $pluginRepository,
  25.         private EntityRepository $salesChannelRepository,
  26.         private WebshopnlFileExportHandler $fileExportHandler,
  27.     ) {
  28.     }
  29.     /**
  30.      * @Route("/api/webshopnl/info",
  31.      *     name="api.webshopnl.info",  methods={"GET"},
  32.      *     defaults={"auth_required"=false, "_routeScope"={"administration"}})
  33.      */
  34.     public function getInfo(Request $requestContext $context): JsonResponse
  35.     {
  36.         $bearerToken $request->headers->get('Authorization');
  37.         if (!$bearerToken) {
  38.             return new JsonResponse([
  39.                 "status" => 401,
  40.                 "title" => 'The resource owner or authorization server denied the request.',
  41.                 "detail" => 'Missing Authorization header',
  42.             ]);
  43.         }
  44.         $bearerToken str_replace("Bearer """$bearerToken);
  45.         $integrationToken $this->systemConfigService->get('MagmodulesWebshopnl.settings.integrationToken');
  46.         if ($bearerToken !== $integrationToken) {
  47.             return new JsonResponse([
  48.                 "status" => 401,
  49.                 "title" => 'The resource owner or authorization server denied the request.',
  50.                 "detail" => 'Incorrect Authorization header',
  51.             ]);
  52.         }
  53.         $pluginData $this->pluginData($context);
  54.         $installationId implode('-'sscanf($pluginData->getId(), '%8s%4s%4s%4s%12s'));
  55.         $data = [
  56.             'enabled' => $this->systemConfigService->get('MagmodulesWebshopnl.settings.enable'),
  57.             'type' => 'shopware',
  58.             'shopware_version' => $this->getShopwareVersion(),
  59.             'plugin_version' => $pluginData->getVersion(),
  60.             'installation_id' => $installationId,
  61.             'feed_format' => 'https://cart.webshop.nl/static/miab-v3.json',
  62.             'order_post_url' => $request->server->get('APP_URL') . '/api/webshopnl/order/',
  63.             'last_order_import' => '',
  64.             'active_stores' => [],
  65.         ];
  66.         $criteria = new Criteria();
  67.         $criteria->addAssociation('domains');
  68.         $salesChannels $this->salesChannelRepository->search($criteria$context);
  69.         /** @var SalesChannelEntity $salesChannel */
  70.         foreach ($salesChannels as $salesChannel) {
  71.             if (!$this->systemConfigService->get(
  72.                 'MagmodulesWebshopnl.settings.productEnable',
  73.                 $salesChannel->getId())
  74.             ) {
  75.                 continue;
  76.             }
  77.             $filename $this->systemConfigService->get(
  78.                 'MagmodulesWebshopnl.settings.fileName',
  79.                 $salesChannel->getId()
  80.             );
  81.             $data['active_stores'][] = [
  82.                 'integration' => true,
  83.                 'store_id' => $salesChannel->getId(),
  84.                 'store_name' => $salesChannel->getName(),
  85.                 'feed_url' => sprintf(
  86.                     '%s/webshopnl/%s-%s.ndjson',
  87.                     $request->server->get('APP_URL'),
  88.                     $salesChannel->getId(),
  89.                     $filename
  90.                 ),
  91.                 'feed_update' => (new \DateTime())
  92.                     ->setTimestamp($this->fileExportHandler->getUpdateTime($salesChannel->getId()))
  93.                     ->format('Y-m-d H:i:s'),
  94.             ];
  95.         }
  96.         return new JsonResponse($data);
  97.     }
  98.     public function getShopwareVersion(): ?string
  99.     {
  100.         if (InstalledVersions::isInstalled('shopware/platform')) {
  101.             return InstalledVersions::getVersion('shopware/platform');
  102.         }
  103.         return InstalledVersions::getVersion('shopware/core');
  104.     }
  105.     public function pluginData($context): PluginEntity
  106.     {
  107.         $nameSpaceExplode explode('\\'__NAMESPACE__);
  108.         $pluginName $nameSpaceExplode[0];
  109.         $criteria = new Criteria();
  110.         $criteria->addFilter(new EqualsFilter('plugin.name'$pluginName));
  111.         return $this->pluginRepository->search($criteria$context)->first();
  112.     }
  113. }