diff --git a/application/modules/admin/controllers/CatalogueController.php b/application/modules/admin/controllers/CatalogueController.php index 727c710dd8aef3693e87c35c91b78965944d65fd..60417cd45417f93b718e3c221998d4adcf438c6c 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 21a07d6411bf036fa0bb5faaf1850bb0abf9dca5..32a8e4217b26b18f090736e1b97f3304cf220cff 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 4f295276b1f751c05fa33f779ed636da5d091371..9c0f019e22a7ff0513eb3c10282fc3492b479e09 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 f18c12368caaa2b278e9dfc625368d71b41bea2d..a9b366c02ffca1d0e914b9d4ca9b649109c97a58 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 d0dc1ae2a7a84b5b7b4728b6cad9d8171e3efc0d..dbe58101bb04f7c9d74b82acd1386c5e45666382 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 dc2ce5765f651bc011780969417d00eb1ea4b27a..bb698b7aeac6daef765c4e22e6b46b1d30a8493a 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 222313813808eaf4c9e574a2b6cd81a897e0684e..4d3369999b7bdbb1042ac74a749f5862f287c7df 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 a471e638417fc72d88bc8400b51e0b50c58af6a2..1caa0519700de837198c4ec9ddc6b1fb1ab6c84d 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 bc050d23353555f7bf5433e4f45496c886159795..b3d78fd86475e225d98387846388758aede8245d 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 e773cd5676401ef7f27c3c8a3ad043cb4ab14265..5f2fd33fdaad095734f60a5d7e658a35d0e0709d 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 aff31c8a0793ff30f5d9f73fe6e63220bb022605..b762462b936177c141170b1fd4e2d37cd454b0ab 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()); } }