| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 | 
							- <?php
 
- /**
 
-  * Copyright © Magento, Inc. All rights reserved.
 
-  * See COPYING.txt for license details.
 
-  */
 
- declare(strict_types=1);
 
- namespace Magento\UrlRewriteGraphQl\Model\Resolver;
 
- use Magento\Framework\GraphQl\Exception\GraphQlInputException;
 
- use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
 
- use Magento\Framework\GraphQl\Config\Element\Field;
 
- use Magento\Framework\GraphQl\Query\ResolverInterface;
 
- use Magento\Store\Model\StoreManagerInterface;
 
- use Magento\UrlRewrite\Model\UrlFinderInterface;
 
- use Magento\UrlRewriteGraphQl\Model\Resolver\UrlRewrite\CustomUrlLocatorInterface;
 
- /**
 
-  * UrlRewrite field resolver, used for GraphQL request processing.
 
-  */
 
- class EntityUrl implements ResolverInterface
 
- {
 
-     /**
 
-      * @var UrlFinderInterface
 
-      */
 
-     private $urlFinder;
 
-     /**
 
-      * @var StoreManagerInterface
 
-      */
 
-     private $storeManager;
 
-     /**
 
-      * @var CustomUrlLocatorInterface
 
-      */
 
-     private $customUrlLocator;
 
-     /**
 
-      * @param UrlFinderInterface $urlFinder
 
-      * @param StoreManagerInterface $storeManager
 
-      * @param CustomUrlLocatorInterface $customUrlLocator
 
-      */
 
-     public function __construct(
 
-         UrlFinderInterface $urlFinder,
 
-         StoreManagerInterface $storeManager,
 
-         CustomUrlLocatorInterface $customUrlLocator
 
-     ) {
 
-         $this->urlFinder = $urlFinder;
 
-         $this->storeManager = $storeManager;
 
-         $this->customUrlLocator = $customUrlLocator;
 
-     }
 
-     /**
 
-      * @inheritdoc
 
-      */
 
-     public function resolve(
 
-         Field $field,
 
-         $context,
 
-         ResolveInfo $info,
 
-         array $value = null,
 
-         array $args = null
 
-     ) {
 
-         if (!isset($args['url']) || empty(trim($args['url']))) {
 
-             throw new GraphQlInputException(__('"url" argument should be specified and not empty'));
 
-         }
 
-         $result = null;
 
-         $url = $args['url'];
 
-         if (substr($url, 0, 1) === '/' && $url !== '/') {
 
-             $url = ltrim($url, '/');
 
-         }
 
-         $customUrl = $this->customUrlLocator->locateUrl($url);
 
-         $url = $customUrl ?: $url;
 
-         $urlRewrite = $this->findCanonicalUrl($url);
 
-         if ($urlRewrite) {
 
-             $result = [
 
-                 'id' => $urlRewrite->getEntityId(),
 
-                 'canonical_url' => $urlRewrite->getTargetPath(),
 
-                 'type' => $this->sanitizeType($urlRewrite->getEntityType())
 
-             ];
 
-         }
 
-         return $result;
 
-     }
 
-     /**
 
-      * Find the canonical url passing through all redirects if any
 
-      *
 
-      * @param string $requestPath
 
-      * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite|null
 
-      */
 
-     private function findCanonicalUrl(string $requestPath) : ?\Magento\UrlRewrite\Service\V1\Data\UrlRewrite
 
-     {
 
-         $urlRewrite = $this->findUrlFromRequestPath($requestPath);
 
-         if ($urlRewrite && $urlRewrite->getRedirectType() > 0) {
 
-             while ($urlRewrite && $urlRewrite->getRedirectType() > 0) {
 
-                 $urlRewrite = $this->findUrlFromRequestPath($urlRewrite->getTargetPath());
 
-             }
 
-         }
 
-         if (!$urlRewrite) {
 
-             $urlRewrite = $this->findUrlFromTargetPath($requestPath);
 
-         }
 
-         return $urlRewrite;
 
-     }
 
-     /**
 
-      * Find a url from a request url on the current store
 
-      *
 
-      * @param string $requestPath
 
-      * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite|null
 
-      */
 
-     private function findUrlFromRequestPath(string $requestPath) : ?\Magento\UrlRewrite\Service\V1\Data\UrlRewrite
 
-     {
 
-         return $this->urlFinder->findOneByData(
 
-             [
 
-                 'request_path' => $requestPath,
 
-                 'store_id' => $this->storeManager->getStore()->getId()
 
-             ]
 
-         );
 
-     }
 
-     /**
 
-      * Find a url from a target url on the current store
 
-      *
 
-      * @param string $targetPath
 
-      * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite|null
 
-      */
 
-     private function findUrlFromTargetPath(string $targetPath) : ?\Magento\UrlRewrite\Service\V1\Data\UrlRewrite
 
-     {
 
-         return $this->urlFinder->findOneByData(
 
-             [
 
-                 'target_path' => $targetPath,
 
-                 'store_id' => $this->storeManager->getStore()->getId()
 
-             ]
 
-         );
 
-     }
 
-     /**
 
-      * Sanitize the type to fit schema specifications
 
-      *
 
-      * @param string $type
 
-      * @return string
 
-      */
 
-     private function sanitizeType(string $type) : string
 
-     {
 
-         return strtoupper(str_replace('-', '_', $type));
 
-     }
 
- }
 
 
  |