diff --git a/config/services.yaml b/config/services.yaml index 38faa4b6579bfb8d6b50f6e8b6d0a9e5b33be071..f296198aa665876704a974e2688f6432f0680c42 100755 --- a/config/services.yaml +++ b/config/services.yaml @@ -103,3 +103,9 @@ services: arguments: - '%tei_dir%' - '%tei_sample_dir%' + + App\Import\MetadataTransformer: + calls: + - method: 'setConfigs' + arguments: + - '%env(MAIN_DOMAIN)%' diff --git a/src/Controller/ItemController.php b/src/Controller/ItemController.php index 6812a2cf6cdd01d12956da94edd5a23312af4387..ee021b8e2474ac7b5560861ae6368e6d45b7109b 100755 --- a/src/Controller/ItemController.php +++ b/src/Controller/ItemController.php @@ -19,7 +19,7 @@ class ItemController extends AbstractController } /** - * @Route("/id/{id}") + * @Route("/id/{id}", name="_detail") */ public function detail(string $id, Request $request): Response { diff --git a/src/Import/Indexer.php b/src/Import/Indexer.php index 9288f5f932e8433b2c2088fea11017bbd899b925..ce420acd1a2f94ecc4a5bf07e59dd83fb30662d5 100644 --- a/src/Import/Indexer.php +++ b/src/Import/Indexer.php @@ -429,7 +429,7 @@ class Indexer implements IndexerInterface $doc->response = $response; } - if (isset($relatedItem) && !empty($relatedItem)) { + if (isset($relatedItems) && !empty($relatedItems)) { $doc->related_items = $relatedItems; } diff --git a/src/Import/MetadataTransformer.php b/src/Import/MetadataTransformer.php index fa733304beafe9e62b98e4627af4c003f5945624..00cfa88b3aa505268c048739ac06c4e528e0238f 100644 --- a/src/Import/MetadataTransformer.php +++ b/src/Import/MetadataTransformer.php @@ -5,9 +5,23 @@ declare(strict_types=1); namespace App\Import; use DOMXPath; +use Symfony\Component\Routing\RouterInterface; class MetadataTransformer implements MetadataTransformerInterface { + private RouterInterface $router; + private ?string $mainDomain; + + public function __construct(RouterInterface $router) + { + $this->router = $router; + } + + public function setConfigs(string $mainDomain): void + { + $this->mainDomain = $mainDomain; + } + public function getAuthor(DOMXPath $xpath): string { $author = ''; @@ -325,8 +339,21 @@ class MetadataTransformer implements MetadataTransformerInterface $reference = ''; $referenceNode = $xpath->query('//tei:relatedItem[@type = "letter" and @subtype = "related"]/tei:ref'); if ($referenceNode->item(0)) { - $reference = $referenceNode->item(0)->nodeValue; - $reference = trim(preg_replace('/\s+/', ' ', $reference)); + $referenceText = $referenceNode->item(0)->nodeValue; + $referenceText = trim(preg_replace('/\s+/', ' ', $referenceText)); + $refLink = $referenceNode->item(0)->attributes->item(0)->textContent; + $documentId = array_reverse(explode('/', $refLink))[0]; + + if (str_contains($documentId, '.')) { + $documentId = explode('.', $documentId)[0]; + $documentUrl = $this->mainDomain.$this->router->generate('_detail', ['id' => $documentId]); + } + + if (!empty($referenceText) && !empty($documentUrl)) { + $reference = $referenceText.' ('.$documentUrl.')'; + } elseif (!empty($referenceText)) { + $reference = $referenceText; + } } return $reference; @@ -339,7 +366,21 @@ class MetadataTransformer implements MetadataTransformerInterface if (is_iterable($relatedItemNodes)) { foreach ($relatedItemNodes as $relatedItemNode) { if (!empty($relatedItemNode->nodeValue)) { - $relatedItem = trim(preg_replace('/\s+/', ' ', $relatedItemNode->nodeValue)); + $relatedItemText = trim(preg_replace('/\s+/', ' ', $relatedItemNode->nodeValue)); + $refLink = $relatedItemNode->attributes->item(0)->textContent; + $documentId = array_reverse(explode('/', $refLink))[0]; + + if (str_contains($documentId, '.')) { + $documentId = explode('.', $documentId)[0]; + $documentUrl = $this->mainDomain.$this->router->generate('_detail', ['id' => $documentId]); + } + + if (!empty($relatedItemText) && !empty($documentUrl)) { + $relatedItem = $relatedItemText.' ('.$documentUrl.')'; + } elseif (!empty($relatedItemText)) { + $relatedItem = $relatedItemText; + } + $relatedItems[] = $relatedItem; } } @@ -364,8 +405,21 @@ class MetadataTransformer implements MetadataTransformerInterface $response = ''; $responseNode = $xpath->query('//tei:relatedItem[@type = "letter" and @subtype = "response"]/tei:ref'); if ($responseNode->item(0)) { - $response = $responseNode->item(0)->nodeValue; - $response = trim(preg_replace('/\s+/', ' ', $response)); + $responseText = $responseNode->item(0)->nodeValue; + $responseText = trim(preg_replace('/\s+/', ' ', $responseText)); + $refLink = $responseNode->item(0)->attributes->item(0)->textContent; + $documentId = array_reverse(explode('/', $refLink))[0]; + + if (str_contains($documentId, '.')) { + $documentId = explode('.', $documentId)[0]; + $documentUrl = $this->mainDomain.$this->router->generate('_detail', ['id' => $documentId]); + } + + if (!empty($responseText) && !empty($documentUrl)) { + $response = $responseText.' ('.$documentUrl.')'; + } elseif (!empty($responseText)) { + $response = $responseText; + } } return $response; diff --git a/templates/search/search.html.twig b/templates/search/search.html.twig index ee2d98c4c15c88a4127249f42c7a44eccec8825b..a3cd6cbe72f1044d97764370c5a25e262dabc4fa 100755 --- a/templates/search/search.html.twig +++ b/templates/search/search.html.twig @@ -42,10 +42,10 @@ {% for document in documents %}
@@ -100,7 +100,7 @@ {% endif %}
{% endif %} - +