diff --git a/tide_site.module b/tide_site.module index eb9d4ed..0056e9a 100644 --- a/tide_site.module +++ b/tide_site.module @@ -800,3 +800,49 @@ 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'); + /** @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 ($helper->isEntityBelongToSite($node, $site_id)) { + $site_url = ''; + } + else { + $site_url = $helper->getEntityPrimarySiteBaseUrl($node); + $data['url'] = $helper->getNodeUrlFromPrimarySite($node); + } + // Remove site prefix from the URL. + $data['url'] = $alias_helper->getPathAliasWithoutSitePrefix(['alias' => $data['url']], $site_url); + } + } +}