diff --git a/src/TideSiteHelper.php b/src/TideSiteHelper.php index 1251fab..6a82f60 100644 --- a/src/TideSiteHelper.php +++ b/src/TideSiteHelper.php @@ -10,6 +10,7 @@ use Drupal\node\NodeInterface; use Drupal\taxonomy\TermInterface; use Symfony\Component\DependencyInjection\ContainerAwareTrait; +use Shaper\Util\Context; /** * Class TideSiteHelper. @@ -708,4 +709,42 @@ public function getRouteCacheId($path, $site_id) { return $cid; } + /** + * Function to handle URL that belongs to other sites. + */ + public function handleApiUrl($data, Context $context) { + /** @var \Drupal\tide_site\AliasStorageHelper $alias_helper */ + $alias_helper = \Drupal::service('tide_site.alias_storage_helper'); + + $data['origin_alias'] = $data['alias']; + $data['alias'] = $alias_helper->getPathAliasWithoutSitePrefix($data); + + /** @var \Drupal\path_alias\Entity\PathAlias $path_entity */ + $path_entity = PathAlias::load($data['pid']); + if ($path_entity) { + $node = $alias_helper->getNodeFromPathEntity($path_entity); + if ($node) { + // Get the Site ID parameter. + $request = \Drupal::request(); + $site_id = $request->get('site'); + if (!$site_id) { + return; + } + + // The URL from Tide API is already relative. + $data['origin_url'] = $data['url']; + // Check if the link belongs to the current site. + if ($this->isEntityBelongToSite($node, $site_id)) { + $site_url = ''; + } + else { + $site_url = $this->getEntityPrimarySiteBaseUrl($node); + $data['url'] = $this->getNodeUrlFromPrimarySite($node); + } + // Remove site prefix from the URL. + $data['url'] = $alias_helper->getPathAliasWithoutSitePrefix(['alias' => $data['url']], $site_url); + } + } + } + } diff --git a/tide_site.module b/tide_site.module index eb9d4ed..3dca992 100644 --- a/tide_site.module +++ b/tide_site.module @@ -800,3 +800,18 @@ function tide_site_share_link_token_view_alter(array &$build, EntityInterface $t } } } + +/** + * Implements hook_tide_card_link_enhancer_undo_transform_alter(). + * + * @see Drupal\tide_landing_page\Plugin\jsonapi\FieldEnhancer\CardLinkEnhancer::doUndoTransform() + */ +function tide_site_tide_card_link_enhancer_undo_transform_alter(&$data, &$context) { + if (empty($data['pid']) || empty($data['url'])) { + return; + } + + /** @var \Drupal\tide_site\TideSiteHelper $helper */ + $helper = \Drupal::service('tide_site.helper'); + $helper->handleApiUrl($data, $context); +}