From 9aeb0e193b094c5b533eac731755974edfcba1bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Marsza=C5=82?= Date: Wed, 22 May 2024 11:35:42 +0200 Subject: [PATCH 1/6] fix: Rest endpoint providing item class list --- actions/class.RestItems.php | 17 +++ manifest.php | 8 ++ .../classes/search/ItemClassListService.php | 102 ++++++++++++++++++ .../search/ItemClassListServiceProvider.php | 44 ++++++++ 4 files changed, 171 insertions(+) create mode 100644 models/classes/search/ItemClassListService.php create mode 100644 models/classes/search/ItemClassListServiceProvider.php diff --git a/actions/class.RestItems.php b/actions/class.RestItems.php index b0e78403..fc815f76 100644 --- a/actions/class.RestItems.php +++ b/actions/class.RestItems.php @@ -18,6 +18,7 @@ */ use oat\tao\model\routing\AnnotationReader\security; +use oat\taoItems\model\search\ItemClassListService; /** * @@ -36,6 +37,17 @@ public function __construct() $this->service = taoItems_models_classes_CrudItemsService::singleton(); } + public function getItemClasses() + { + + $this->returnJson( + $this->getItemClassListService()->getList( + $this->getGetParameter('q'), + $this->getGetParameter('page') + ) + ); + } + /** * Optionnaly a specific rest controller may declare * aliases for parameters used for the rest communication @@ -62,4 +74,9 @@ protected function getParametersRequirements() ]; } + + private function getItemClassListService(): ItemClassListService + { + return $this->getServiceManager()->getContainer()->get(ItemClassListService::class); + } } diff --git a/manifest.php b/manifest.php index 1ba54338..d9334046 100755 --- a/manifest.php +++ b/manifest.php @@ -26,6 +26,8 @@ use oat\tao\model\user\TaoRoles; use oat\taoBackOffice\controller\Lists; +use oat\taoItems\model\search\ItemClassListService; +use oat\taoItems\model\search\ItemClassListServiceProvider; use oat\taoItems\model\user\TaoItemsRoles; use oat\tao\model\accessControl\func\AccessRule; use oat\taoItems\scripts\install\RegisterNpmPaths; @@ -200,6 +202,11 @@ TaoItemsRoles::ITEM_IMPORTER, ['ext' => 'taoItems', 'mod' => 'ItemImport', 'act' => 'index'], ], + [ + AccessRule::GRANT, + TaoItemsRoles::ITEM_IMPORTER, + ['ext' => 'taoItems', 'mod' => 'RestItem', 'act' => 'getItemClasses'], + ], [ AccessRule::GRANT, TaoItemsRoles::ITEM_DELETER, @@ -247,5 +254,6 @@ ], 'containerServiceProviders' => [ CopierServiceProvider::class, + ItemClassListServiceProvider::class ], ]; diff --git a/models/classes/search/ItemClassListService.php b/models/classes/search/ItemClassListService.php new file mode 100644 index 00000000..2ba16a50 --- /dev/null +++ b/models/classes/search/ItemClassListService.php @@ -0,0 +1,102 @@ +complexSearchService = $complexSearchService; + $this->ontology = $ontology; + } + + public function getList(string $query, string $page): array + { + $page = (int) $page; + $root = $this->ontology->getClass(TaoOntology::CLASS_URI_ITEM); + $basicQueryParameters = [ + 'recursive' => true, + 'like' => true, + 'onlyClass' => true + ]; + + $query = [ + OntologyRdfs::RDFS_LABEL => $query + ]; + + $searchResult = $root->searchInstances( + $query, + $this->getDynamicQueryParameters($page, $basicQueryParameters) + ); + + $result['total'] = $root->countInstances($query, $basicQueryParameters) ?? 0; + $result['items'] = []; + + foreach ($searchResult as $row) { + $result['items'][] = [ + 'id' => $row->getUri(), + 'uri' => $row->getUri(), + 'text' => $row->getLabel(), + 'path' => $this->getListElementText($row) + ]; + } + return $result; + } + + private function getListElementText(core_kernel_classes_Resource $row): string + { + $displayText = ''; + foreach ($row->getParentClassesIds() as $parent) { + if ($parent !== TaoOntology::CLASS_URI_ITEM) { + $displayText .= $this->ontology->getResource($parent)->getLabel(); + $displayText .= '/'; + } + } + + $displayText .= $row->getLabel(); + return $displayText; + } + + private function getDynamicQueryParameters(int $page, array $basicQueryParameters) + { + return array_merge( + $basicQueryParameters, + [ + 'limit' => self::CLASS_LIST_LIMIT, + 'offset' => ($page - 1) * self::CLASS_LIST_LIMIT + ] + ); + } + +} diff --git a/models/classes/search/ItemClassListServiceProvider.php b/models/classes/search/ItemClassListServiceProvider.php new file mode 100644 index 00000000..5a70eded --- /dev/null +++ b/models/classes/search/ItemClassListServiceProvider.php @@ -0,0 +1,44 @@ +services(); + $services->set(ItemClassListService::class, ItemClassListService::class) + ->args([ + service(ComplexSearchService::SERVICE_ID), + service(Ontology::SERVICE_ID), + ]) + ->public(); + } +} From 1da35da98eefbababf8d4d027ce9be8e7944b781 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Marsza=C5=82?= Date: Wed, 22 May 2024 14:59:46 +0200 Subject: [PATCH 2/6] fix: Remove Unused use lines --- models/classes/search/ItemClassListService.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/models/classes/search/ItemClassListService.php b/models/classes/search/ItemClassListService.php index 2ba16a50..b1ad0c4a 100644 --- a/models/classes/search/ItemClassListService.php +++ b/models/classes/search/ItemClassListService.php @@ -22,12 +22,10 @@ namespace oat\taoItems\model\search; -use common_persistence_Manager; use core_kernel_classes_Resource; use oat\generis\model\data\Ontology; use oat\generis\model\kernel\persistence\smoothsql\search\ComplexSearchService; use oat\generis\model\OntologyRdfs; -use oat\generis\persistence\PersistenceManager; use oat\tao\model\TaoOntology; class ItemClassListService From 731f6dc827e4f5240d064cfc3ab5cc2142651d26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Marsza=C5=82?= Date: Thu, 23 May 2024 13:46:05 +0200 Subject: [PATCH 3/6] fix: move getClassItems from RestController to SasController --- actions/class.RestItems.php | 18 ------------------ actions/class.SaSItems.php | 17 +++++++++++++++++ 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/actions/class.RestItems.php b/actions/class.RestItems.php index fc815f76..3b94611c 100644 --- a/actions/class.RestItems.php +++ b/actions/class.RestItems.php @@ -18,7 +18,6 @@ */ use oat\tao\model\routing\AnnotationReader\security; -use oat\taoItems\model\search\ItemClassListService; /** * @@ -36,18 +35,6 @@ public function __construct() //The service taht implements or inherits get/getAll/getRootClass ... for that particular type of resources $this->service = taoItems_models_classes_CrudItemsService::singleton(); } - - public function getItemClasses() - { - - $this->returnJson( - $this->getItemClassListService()->getList( - $this->getGetParameter('q'), - $this->getGetParameter('page') - ) - ); - } - /** * Optionnaly a specific rest controller may declare * aliases for parameters used for the rest communication @@ -74,9 +61,4 @@ protected function getParametersRequirements() ]; } - - private function getItemClassListService(): ItemClassListService - { - return $this->getServiceManager()->getContainer()->get(ItemClassListService::class); - } } diff --git a/actions/class.SaSItems.php b/actions/class.SaSItems.php index 7c0bd0e4..2a490ac4 100644 --- a/actions/class.SaSItems.php +++ b/actions/class.SaSItems.php @@ -24,6 +24,7 @@ */ use oat\generis\model\OntologyRdfs; +use oat\taoItems\model\search\ItemClassListService; use tao_helpers_form_FormContainer as FormContainer; /** @@ -158,6 +159,17 @@ public function viewItem() $this->setView('view.tpl'); } + public function getItemClasses() + { + + $this->returnJson( + $this->getItemClassListService()->getList( + $this->getGetParameter('q'), + $this->getGetParameter('page') + ) + ); + } + /** * Load the standalone mode */ @@ -165,4 +177,9 @@ protected function loadStandaloneMode() { tao_helpers_Context::load('STANDALONE_MODE'); } + + private function getItemClassListService(): ItemClassListService + { + return $this->getServiceManager()->getContainer()->get(ItemClassListService::class); + } } From 2d5d97b7e730b67ce401409e17152a544ed7e293 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Marsza=C5=82?= Date: Thu, 23 May 2024 15:03:31 +0200 Subject: [PATCH 4/6] fix: code style refactor --- models/classes/search/ItemClassListService.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/models/classes/search/ItemClassListService.php b/models/classes/search/ItemClassListService.php index b1ad0c4a..f25dc5bd 100644 --- a/models/classes/search/ItemClassListService.php +++ b/models/classes/search/ItemClassListService.php @@ -30,7 +30,7 @@ class ItemClassListService { - const CLASS_LIST_LIMIT = 10; + private const CLASS_LIST_LIMIT = 10; private ComplexSearchService $complexSearchService; private Ontology $ontology; public function __construct(ComplexSearchService $complexSearchService, Ontology $ontology) @@ -96,5 +96,4 @@ private function getDynamicQueryParameters(int $page, array $basicQueryParameter ] ); } - } From 147ce10a2ca934b8cf7bd49336e28a035a3ab14a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Marsza=C5=82?= Date: Tue, 4 Jun 2024 13:09:51 +0200 Subject: [PATCH 5/6] fix: bump dependency --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 41b334bc..a71fa7dc 100644 --- a/composer.json +++ b/composer.json @@ -60,7 +60,7 @@ }, "require": { "oat-sa/oatbox-extension-installer": "~1.1||dev-master", - "oat-sa/generis": ">=15.24", + "oat-sa/generis": ">=15.36.1", "oat-sa/tao-core": ">=53.0.0", "oat-sa/extension-tao-backoffice": ">=6.0.0" }, From 78a1953f68e497ca6d86cd048ef97a8d8095d9b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Marsza=C5=82?= Date: Tue, 4 Jun 2024 13:12:03 +0200 Subject: [PATCH 6/6] fix: fix code style --- actions/class.RestItems.php | 1 + actions/class.SaSItems.php | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/actions/class.RestItems.php b/actions/class.RestItems.php index 3b94611c..b0e78403 100644 --- a/actions/class.RestItems.php +++ b/actions/class.RestItems.php @@ -35,6 +35,7 @@ public function __construct() //The service taht implements or inherits get/getAll/getRootClass ... for that particular type of resources $this->service = taoItems_models_classes_CrudItemsService::singleton(); } + /** * Optionnaly a specific rest controller may declare * aliases for parameters used for the rest communication diff --git a/actions/class.SaSItems.php b/actions/class.SaSItems.php index 2a490ac4..0e80ba9e 100644 --- a/actions/class.SaSItems.php +++ b/actions/class.SaSItems.php @@ -161,7 +161,6 @@ public function viewItem() public function getItemClasses() { - $this->returnJson( $this->getItemClassListService()->getList( $this->getGetParameter('q'),