From 250e40a5a6f17227059701255c4151aedaef8ff2 Mon Sep 17 00:00:00 2001 From: Laurent Laffont <llaffont@afi-sa.fr> Date: Tue, 27 Nov 2018 17:08:11 +0100 Subject: [PATCH] dev #82369 indexable domains now index records in baskets --- .../admin/controllers/CatalogueController.php | 4 +-- library/Class/Bib.php | 2 +- library/Class/Catalogue.php | 27 ++++++++++++++----- library/Class/CodifAnnexe.php | 2 +- library/Class/IntBib.php | 2 +- library/Class/MoteurRecherche.php | 2 +- library/Class/MoteurRecherche/Facettes.php | 2 +- library/Class/Notice.php | 4 ++- library/Class/NoticeDomain.php | 13 ++++----- tests/library/Class/ArticleTest.php | 3 ++- tests/library/Class/PanierNoticeTest.php | 25 ++++++++++++++--- 11 files changed, 60 insertions(+), 26 deletions(-) diff --git a/application/modules/admin/controllers/CatalogueController.php b/application/modules/admin/controllers/CatalogueController.php index 727c710dd8a..60417cd4541 100644 --- a/application/modules/admin/controllers/CatalogueController.php +++ b/application/modules/admin/controllers/CatalogueController.php @@ -47,8 +47,8 @@ class Admin_CatalogueController extends ZendAfi_Controller_Action { $ret = array_merge($ret, $catalogue->getTestCatalogue()); - if ($catalogue->isIndexable()) - $catalogue->index(); + if ($catalogue->hasIndexer()) + $catalogue->indexWithBaskets(); if (!$catalogue->isIndexable() && ($catalogue->numberOfPanierNotices() == 0)) $this->view->error = $this->_('Le domaine ne peut pas être mis en favori utilisateur sans critères d\'indexation'); diff --git a/library/Class/Bib.php b/library/Class/Bib.php index 21a07d6411b..32a8e4217b2 100644 --- a/library/Class/Bib.php +++ b/library/Class/Bib.php @@ -851,7 +851,7 @@ class Class_Bib extends Storm_Model_Abstract { } - public function getFacet() { + public function asBookmark() { return Class_Bib::CODE_FACETTE . $this->getIdSite(); } diff --git a/library/Class/Catalogue.php b/library/Class/Catalogue.php index 4f295276b1f..9c0f019e22a 100644 --- a/library/Class/Catalogue.php +++ b/library/Class/Catalogue.php @@ -712,11 +712,6 @@ class Class_Catalogue extends Storm_Model_Abstract { } - public function getFacette() { - return $this->getFacetCode(); - } - - public function getAllNoticeIdsForDomaine($nb_par_page,$numero_page) { $preferences = $this->toArray(); @@ -1275,11 +1270,16 @@ class Class_Catalogue extends Storm_Model_Abstract { } - public function getFacet() { + public function asBookmark() { + return $this->getThesaurusFacetCode(); + } + + + public function getThesaurusFacetCode() { if(!$thesaurus = Class_CodifThesaurus::findThesaurusForCatalogue($this->getId())) return ''; - return $thesaurus->getFacetteIndex(); + return $thesaurus->getFacetCode(); } @@ -1339,6 +1339,19 @@ class Class_Catalogue extends Storm_Model_Abstract { } + public function indexWithBaskets() { + if (!$this->hasIndexer()) + return $this; + + $this->index(); + foreach($this->getPanierNotices() as $basket) { + $basket->index(); + } + + return $this; + } + + public function getTitre() { return $this->getLibelle(); } diff --git a/library/Class/CodifAnnexe.php b/library/Class/CodifAnnexe.php index f18c12368ca..a9b366c02ff 100644 --- a/library/Class/CodifAnnexe.php +++ b/library/Class/CodifAnnexe.php @@ -97,7 +97,7 @@ class Class_CodifAnnexe extends Storm_Model_Abstract { } - public function getFacet() { + public function asBookmark() { return $this->getFacetteIndex(); } diff --git a/library/Class/IntBib.php b/library/Class/IntBib.php index d0dc1ae2a7a..dbe58101bb0 100644 --- a/library/Class/IntBib.php +++ b/library/Class/IntBib.php @@ -184,7 +184,7 @@ class Class_IntBib extends Storm_Model_Abstract { } - public function getFacet() { + public function asBookmark() { return Class_Bib::CODE_FACETTE . $this->getIdBib(); } diff --git a/library/Class/MoteurRecherche.php b/library/Class/MoteurRecherche.php index dc2ce5765f6..bb698b7aeac 100644 --- a/library/Class/MoteurRecherche.php +++ b/library/Class/MoteurRecherche.php @@ -273,7 +273,7 @@ class Class_MoteurRecherche { if(!$domain_id) return ''; - if(!$facette = Class_Catalogue::find($domain_id)->getFacette()) + if(!$facette = Class_Catalogue::find($domain_id)->getFacetCode()) return ''; return 'MATCH(facettes) AGAINST(\'' . trim($facette) . '\' IN BOOLEAN MODE)'; diff --git a/library/Class/MoteurRecherche/Facettes.php b/library/Class/MoteurRecherche/Facettes.php index 22231381380..4d3369999b7 100644 --- a/library/Class/MoteurRecherche/Facettes.php +++ b/library/Class/MoteurRecherche/Facettes.php @@ -206,7 +206,7 @@ class Class_MoteurRecherche_Facettes { $user_bookmarks_codes = array_map(function($model) { - return $model->getFacet(); + return $model->asBookmark(); }, $user_bookmarks); diff --git a/library/Class/Notice.php b/library/Class/Notice.php index a471e638417..1caa0519700 100644 --- a/library/Class/Notice.php +++ b/library/Class/Notice.php @@ -1903,7 +1903,9 @@ class Class_Notice extends Storm_Model_Abstract { if (!Class_NoticeDomain::findFirstBy($params)) Class_NoticeDomain::newInstance($params)->save(); - $facets[] = $domain->getFacette(); + $facets[] = $domain->getFacetCode(); + if ($domain->hasIndexer()) + $facets[] = $domain->getThesaurusFacetCode(); } if (!empty($facets)) diff --git a/library/Class/NoticeDomain.php b/library/Class/NoticeDomain.php index bc050d23353..b3d78fd8647 100644 --- a/library/Class/NoticeDomain.php +++ b/library/Class/NoticeDomain.php @@ -75,10 +75,11 @@ class NoticeDomainLoader extends Storm_Model_Loader { public function updateRecordsFacette($domain_id) { - if ($catalogue = Class_Catalogue::find($domain_id)) { - foreach (Class_NoticeDomain::getRecordsForDomain($domain_id) as $record) - $record->updateFacette($catalogue->getFacette())->save(); - } + if (!$catalogue = Class_Catalogue::find($domain_id)) + return; + + foreach (Class_NoticeDomain::getRecordsForDomain($domain_id) as $record) + $record->updateFacette($catalogue->getFacetCode())->save(); } @@ -153,12 +154,12 @@ class Class_NoticeDomain extends Storm_Model_Abstract { if (1 < $existing) return; - $record->deleteFacettes($domain->getFacette())->save(); + $record->deleteFacettes($domain->getFacetCode())->save(); } protected function _updateRecordFacets($record, $domain) { - $record->updateFacette($domain->getFacette())->save(); + $record->updateFacette($domain->getFacetCode())->save(); } diff --git a/tests/library/Class/ArticleTest.php b/tests/library/Class/ArticleTest.php index e773cd56764..5f2fd33fdaa 100644 --- a/tests/library/Class/ArticleTest.php +++ b/tests/library/Class/ArticleTest.php @@ -1184,7 +1184,8 @@ class ArticleIndexAllTest extends ModelTestCase { /** @test */ public function recordShouldHaveExpectedFacette() { - $this->assertContains(Class_Catalogue::find(1)->getFacette(), Class_Notice::find(2)->getFacettes()); + $this->assertContains(Class_Catalogue::find(1)->getFacetCode(), + Class_Notice::find(2)->getFacettes()); } diff --git a/tests/library/Class/PanierNoticeTest.php b/tests/library/Class/PanierNoticeTest.php index aff31c8a079..b762462b936 100644 --- a/tests/library/Class/PanierNoticeTest.php +++ b/tests/library/Class/PanierNoticeTest.php @@ -421,8 +421,10 @@ class PanierNoticeIndexAllTest extends ModelTestCase { public function setUp() { parent::setUp(); - Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Catalogue') - ->whenCalled('saveThesaurus')->answers(true); + Zend_Registry::set('sql', + Storm_Test_ObjectWrapper::mock() + ->whenCalled('query') + ->answers(null)); $this->fixture('Class_Notice', ['id' => 4, 'titre_principal' => 'Le Montespan', @@ -490,7 +492,21 @@ class PanierNoticeIndexAllTest extends ModelTestCase { /** @test */ public function facetOfRecordMontespanShouldContainsFacetQ1() { - $this->assertContains('Q1', Class_Notice::findFirstBy(['clef_alpha' => 'MONTESPAN'])->getFacettes()); + $this->assertEquals('Q1', + Class_Notice::findFirstBy(['clef_alpha' => 'MONTESPAN'])->getFacettes()); + } + + + /** @test */ + public function withBookmarkableDomainFacetOfRecordMontespanShouldContainsFacetHCCCC() { + $domain = Class_Catalogue::find(1); + $domain + ->setIndexer(true) + ->assertSave(); + $domain->indexWithBaskets(); + + $this->assertEquals('Q1 HCCCC0001', + Class_Notice::findFirstBy(['clef_alpha' => 'MONTESPAN'])->getFacettes()); } @@ -502,6 +518,7 @@ class PanierNoticeIndexAllTest extends ModelTestCase { /** @test */ public function recordMonstespanShouldNotHaveFacetQ2() { - $this->assertNotContains('Q2', Class_Notice::findFirstBy(['clef_alpha' => 'MONTESPAN'])->getFacettes()); + $this->assertNotContains('Q2', + Class_Notice::findFirstBy(['clef_alpha' => 'MONTESPAN'])->getFacettes()); } } -- GitLab