From 60bebc15b39146edda3bcd3344c400552780bcac Mon Sep 17 00:00:00 2001 From: Daniel Berthereau Date: Mon, 18 Mar 2024 00:00:00 +0000 Subject: [PATCH 1/4] Fixed use of route params during background process. --- Module.php | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/Module.php b/Module.php index 7e72f0f..8ab2e7e 100644 --- a/Module.php +++ b/Module.php @@ -163,14 +163,15 @@ public function repValueHtml($event) $propertyId = $target->property()->id(); - $routeMatch = $this->getServiceLocator()->get('Application') - ->getMvcEvent()->getRouteMatch(); - $routeMatchParams = $routeMatch->getParams(); + /** @var \Omeka\Mvc\Status $status */ + $services = $this->getServiceLocator(); + $status = $services->get('Omeka\Status'); + //setup the route params to pass to the Url helper. Both the route name and its parameters go here $routeParams = [ - 'action' => 'browse', + 'action' => 'browse', ]; - if ($routeMatch->getParam('__ADMIN__')) { + if ($status->isAdminRequest()) { $globalSettings = $this->getServiceLocator()->get('Omeka\Settings'); if ($globalSettings->get('metadata_browse_use_globals')) { $filteredPropertyIds = $globalSettings->get('metadata_browse_properties', []); @@ -185,12 +186,11 @@ public function repValueHtml($event) $filteredPropertyIds = array_merge($currentSettings, $filteredPropertyIds); } } - $routeParams['route'] = 'admin/default'; - } elseif ($routeMatch->getParam('__SITE__')) { + } elseif ($status->isSiteRequest()) { $siteSettings = $this->getServiceLocator()->get('Omeka\Settings\Site'); $filteredPropertyIds = $siteSettings->get('metadata_browse_properties', []); - $siteSlug = $routeMatch->getParam('site-slug'); + $siteSlug = $status->getRouteParam('site-slug'); $routeParams['route'] = 'site'; $routeParams['site-slug'] = $siteSlug . '/' . $controllerName; } else { @@ -201,7 +201,6 @@ public function repValueHtml($event) $url = $viewHelperManager->get('Url'); $hyperlink = $viewHelperManager->get('hyperlink'); if (in_array($propertyId, $filteredPropertyIds)) { - $controllerName = $controllerName; $routeParams['controller'] = $controllerName; $translator = $this->getServiceLocator()->get('MvcTranslator'); From 2cebf2a38e7bf3d021eee3d3b5d2094330a553d4 Mon Sep 17 00:00:00 2001 From: Daniel Berthereau Date: Mon, 28 Oct 2024 00:00:00 +0000 Subject: [PATCH 2/4] Removed useless and wrong query argument "Search". --- Module.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Module.php b/Module.php index 8ab2e7e..5db3fed 100644 --- a/Module.php +++ b/Module.php @@ -263,7 +263,7 @@ protected function literalSearchUrl($url, $routeParams, $propertyId, $searchTarg { $searchUrl = $url($routeParams['route'], $routeParams, - ['query' => ['Search' => '', + ['query' => [ 'property[0][property]' => $propertyId, 'property[0][type]' => 'eq', 'property[0][text]' => $searchTarget, @@ -278,7 +278,7 @@ protected function uriSearchUrl($url, $routeParams, $propertyId, $searchTarget) { $searchUrl = $url($routeParams['route'], $routeParams, - ['query' => ['Search' => '', + ['query' => [ 'property[0][property]' => $propertyId, 'property[0][type]' => 'eq', 'property[0][text]' => $searchTarget, @@ -293,7 +293,7 @@ protected function resourceSearchUrl($url, $routeParams, $propertyId, $searchTar { $searchUrl = $url($routeParams['route'], $routeParams, - ['query' => ['Search' => '', + ['query' => [ 'property[0][property]' => $propertyId, 'property[0][type]' => 'res', 'property[0][text]' => $searchTarget, From 52abe0276ed9635fa7ee132819f2b004710e484c Mon Sep 17 00:00:00 2001 From: Daniel Berthereau Date: Mon, 28 Oct 2024 00:00:00 +0000 Subject: [PATCH 3/4] Added an option to redirect to the site wide full text search. --- Module.php | 112 +++++++++++++++++++++++----------------- src/Form/ConfigForm.php | 12 +++++ 2 files changed, 77 insertions(+), 47 deletions(-) diff --git a/Module.php b/Module.php index 5db3fed..4538565 100644 --- a/Module.php +++ b/Module.php @@ -111,9 +111,9 @@ public function handleConfigForm(AbstractController $controller) } $globalSettings = $this->getServiceLocator()->get('Omeka\Settings'); $globalSettings->set('metadata_browse_properties', $propertyIds); - $globalSettings->set('metadata_browse_use_globals', $params['metadata_browse_use_globals']); - $directLinks = $this->getServiceLocator()->get('Omeka\Settings'); - $directLinks->set('metadata_browse_direct_links', $params['metadata_browse_direct_links']); + $globalSettings->set('metadata_browse_use_globals', !empty($params['metadata_browse_use_globals'])); + $globalSettings->set('metadata_browse_direct_links', !empty($params['metadata_browse_direct_links'])); + $globalSettings->set('metadata_browse_fulltext_search', !empty($params['metadata_browse_fulltext_search'])); } public function getConfigForm(PhpRenderer $renderer) @@ -150,6 +150,7 @@ public function addCSS($event) public function repValueHtml($event) { + /** @var \Omeka\Api\Representation\ValueRepresentation $target */ if ($event->getParam('value')) { $target = $event->getParam('value'); } else { @@ -168,11 +169,10 @@ public function repValueHtml($event) $status = $services->get('Omeka\Status'); //setup the route params to pass to the Url helper. Both the route name and its parameters go here - $routeParams = [ - 'action' => 'browse', - ]; - if ($status->isAdminRequest()) { - $globalSettings = $this->getServiceLocator()->get('Omeka\Settings'); + $routeParams = []; + $isAdminRequest = $status->isAdminRequest(); + $globalSettings = $this->getServiceLocator()->get('Omeka\Settings'); + if ($isAdminRequest) { if ($globalSettings->get('metadata_browse_use_globals')) { $filteredPropertyIds = $globalSettings->get('metadata_browse_properties', []); } else { @@ -187,12 +187,25 @@ public function repValueHtml($event) } } $routeParams['route'] = 'admin/default'; + $routeParams['controller'] = $controllerName; + $routeParams['action'] = 'browse'; + $useFullTextSearch = false; } elseif ($status->isSiteRequest()) { $siteSettings = $this->getServiceLocator()->get('Omeka\Settings\Site'); $filteredPropertyIds = $siteSettings->get('metadata_browse_properties', []); $siteSlug = $status->getRouteParam('site-slug'); - $routeParams['route'] = 'site'; - $routeParams['site-slug'] = $siteSlug . '/' . $controllerName; + $useFullTextSearch = (bool) $globalSettings->get('metadata_browse_fulltext_search'); + if ($useFullTextSearch) { + $route = 'site/resource'; + $routeParams['site-slug'] = $siteSlug; + $routeParams['controller'] = 'index'; + $routeParams['action'] = 'search'; + } else { + $routeParams['route'] = 'site/resource'; + $routeParams['site-slug'] = $siteSlug; + $routeParams['controller'] = $controllerName; + $routeParams['action'] = 'browse'; + } } else { return; } @@ -201,54 +214,59 @@ public function repValueHtml($event) $url = $viewHelperManager->get('Url'); $hyperlink = $viewHelperManager->get('hyperlink'); if (in_array($propertyId, $filteredPropertyIds)) { - $routeParams['controller'] = $controllerName; - - $translator = $this->getServiceLocator()->get('MvcTranslator'); $params = $event->getParams(); + $translator = $this->getServiceLocator()->get('MvcTranslator'); + $isLiteral = false; - switch ($target->type()) { - case 'resource': - $searchTarget = $target->valueResource()->id(); - $searchUrl = $this->resourceSearchUrl($url, $routeParams, $propertyId, $searchTarget); - break; - case 'uri': - $searchTarget = $target->uri(); - $searchUrl = $this->uriSearchUrl($url, $routeParams, $propertyId, $searchTarget); - break; - case 'literal': + if ($useFullTextSearch) { + if ($valueResource = $target->valueResource()) { + $searchTarget = $valueResource->title(); + } elseif ($uri = $target->uri()) { + $val = $target->value(); + $searchTarget = strlen((string) $val) ? $val : $uri; + } else { $searchTarget = $target->value(); - $searchUrl = $this->literalSearchUrl($url, $routeParams, $propertyId, $searchTarget); - $isLiteral = true; - break; - default: - $resource = $target->valueResource(); - $uri = $target->uri(); - if ($resource) { + } + $searchUrl = $url($route, $routeParams, ['query' => ['fulltext_search' => $searchTarget]]); + } else { + switch ($target->type()) { + case 'resource': $searchTarget = $target->valueResource()->id(); $searchUrl = $this->resourceSearchUrl($url, $routeParams, $propertyId, $searchTarget); - } elseif ($uri) { - $searchUrl = $this->uriSearchUrl($url, $routeParams, $propertyId, $uri); - } else { + break; + case 'uri': + $searchTarget = $target->uri(); + $searchUrl = $this->uriSearchUrl($url, $routeParams, $propertyId, $searchTarget); + break; + case 'literal': $searchTarget = $target->value(); $searchUrl = $this->literalSearchUrl($url, $routeParams, $propertyId, $searchTarget); $isLiteral = true; - } + break; + default: + $resource = $target->valueResource(); + $uri = $target->uri(); + if ($resource) { + $searchTarget = $target->valueResource()->id(); + $searchUrl = $this->resourceSearchUrl($url, $routeParams, $propertyId, $searchTarget); + } elseif ($uri) { + $searchUrl = $this->uriSearchUrl($url, $routeParams, $propertyId, $uri); + } else { + $searchTarget = $target->value(); + $searchUrl = $this->literalSearchUrl($url, $routeParams, $propertyId, $searchTarget); + $isLiteral = true; + } + } } - switch ($controllerName) { - case 'item': - $controllerLabel = 'items'; - break; - case 'item-set': - $controllerLabel = 'item sets'; - break; - default: - $controllerLabel = $controllerName; - break; - } + $controllerNamesToLabels = [ + 'item' => 'items', + 'item-set' => 'item sets', + ]; + $controllerLabel = $controllerNamesToLabels[$controllerName] ?? $controllerName; + $html = $params['html']; - $globalSettings = $this->getServiceLocator()->get('Omeka\Settings'); - if ($globalSettings->get('metadata_browse_direct_links') && $isLiteral == true) { + if ($isLiteral && $globalSettings->get('metadata_browse_direct_links')) { $link = $hyperlink->raw($html, $searchUrl, ['class' => 'metadata-browse-direct-link']); $event->setParam('html', $link); } else { diff --git a/src/Form/ConfigForm.php b/src/Form/ConfigForm.php index 28296ac..626ff3e 100644 --- a/src/Form/ConfigForm.php +++ b/src/Form/ConfigForm.php @@ -34,6 +34,18 @@ public function init() 'id' => 'metadata_browse_direct_links', ], ]); + $this->add([ + 'type' => 'checkbox', + 'name' => 'metadata_browse_fulltext_search', + 'options' => [ + 'label' => 'Use full text search', // @translate + 'info' => 'Redirect to the site wide search page instead of the resource search page.', // @translate + ], + 'attributes' => [ + 'checked' => $this->globalSettings->get('metadata_browse_fulltext_search') ? 'checked' : '', + 'id' => 'metadata_browse_fulltext_search', + ], + ]); } public function setGlobalSettings($globalSettings) From 5f6effc9ab1c3260f0772143c23b0a3221d5ab91 Mon Sep 17 00:00:00 2001 From: Daniel Berthereau Date: Mon, 28 Oct 2024 00:00:00 +0000 Subject: [PATCH 4/4] Fixed use with value annotations. --- Module.php | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/Module.php b/Module.php index 4538565..24bf1f5 100644 --- a/Module.php +++ b/Module.php @@ -157,7 +157,13 @@ public function repValueHtml($event) $target = $event->getTarget(); } - $controllerName = $target->resource()->getControllerName(); + // Value annotations are currently not managed. + $resource = $target->resource(); + if (!$resource) { + return; + } + + $controllerName = $resource->getControllerName(); if (!$controllerName) { return; } @@ -244,10 +250,10 @@ public function repValueHtml($event) $isLiteral = true; break; default: - $resource = $target->valueResource(); + $valueResource = $target->valueResource(); $uri = $target->uri(); - if ($resource) { - $searchTarget = $target->valueResource()->id(); + if ($valueResource) { + $searchTarget = $valueResource->id(); $searchUrl = $this->resourceSearchUrl($url, $routeParams, $propertyId, $searchTarget); } elseif ($uri) { $searchUrl = $this->uriSearchUrl($url, $routeParams, $propertyId, $uri);