From ea5e33d0a204f7f2cf65fe0dc2e870ad5462fc57 Mon Sep 17 00:00:00 2001 From: buttle Date: Wed, 3 Nov 2021 21:43:15 +0100 Subject: [PATCH] returns weighted search results --- config/module.config.php | 5 +- src/Controller/ArchiveSiteMetaController.php | 63 ++++++++++++++++---- 2 files changed, 56 insertions(+), 12 deletions(-) diff --git a/config/module.config.php b/config/module.config.php index d0b4af5..ac72a0e 100644 --- a/config/module.config.php +++ b/config/module.config.php @@ -7,9 +7,12 @@ return [ 'router' => [ 'routes' => [ 'archiveSiteMeta' => [ + //'type' => \Laminas\Router\Http\Segment::class, 'type' => \Laminas\Router\Http\Literal::class, 'options' => [ - 'route' => '/collections', + //'route' => '/collections[/:action]', + //'route' => '/collections', + 'route' => '/collections/search', 'defaults' => [ '__NAMESPACE__' => 'ArchiveSiteMeta\Controller', 'controller' => Controller\ArchiveSiteMetaController::class, diff --git a/src/Controller/ArchiveSiteMetaController.php b/src/Controller/ArchiveSiteMetaController.php index 4afb211..c8cf267 100644 --- a/src/Controller/ArchiveSiteMetaController.php +++ b/src/Controller/ArchiveSiteMetaController.php @@ -2,7 +2,6 @@ namespace ArchiveSiteMeta\Controller; use Laminas\Mvc\Controller\AbstractActionController; -#use Laminas\View\Model\ViewModel; use Laminas\View\Model\JsonModel; class ArchiveSiteMetaController extends AbstractActionController @@ -12,17 +11,59 @@ class ArchiveSiteMetaController extends AbstractActionController { } - public function indexAction() { - return new JsonModel([ - 'status' => 'SUCCESS', - 'message'=>'Here is your data', - 'data' => [ - 'full_name' => 'John Doe', - 'address' => '51 Middle st.' - ] - ]); - } + $query = [ + 'limit' => 10, + //'in_sites' => true, + 'fulltext_search' => $this->params()->fromQuery('fulltext_search'), + ]; + $resources = [ + 'site_pages' => [ + 'action' => 'site-pages', + 'query' => $query, + 'response' => null, + ], + 'items' => [ + 'action' => 'items', + 'query' => array_merge($query, ['in_sites' => true]), + 'response' => null, + ], + /* + 'item_sets' => [ + 'action' => 'item-sets', + 'query' => array_merge($query, ['in_sites' => true]), + 'response' => null, + ], + */ + ]; + + $resourceNames = ['site_pages', 'items']; + + //$ids = $this->api()->search('site_pages', $query)->getContent(); + //$ids = $this->api()->search('site_pages', $query, ['return' => 'site'])->getContent(); + //$ids = $this->api()->search('site_pages', $query, ['returnScalar' => 'site'])->getContent(); + + $query_results = array(); + $items = $this->api()->search('items', $resources['items']['query'])->getContent(); + foreach($items as $item) { + foreach($item->sites() as $site){ + array_push($query_results, $site->id()); + } + } + $pages = $this->api()->search('site_pages', $resources['site_pages']['query'], ['returnScalar' => 'site'])->getContent(); + foreach($pages as $page) { + array_push($query_results, (int)$page); + } + $search_results = []; + foreach($query_results as $site_id) { + if (array_key_exists($site_id, $search_results)) { + $search_results[$site_id] = $search_results[$site_id] + 1; + } else { + $search_results[$site_id] = 1; + } + } + return new JsonModel($search_results); + } }