diff --git a/VERSIONS_HOTLINE/133563 b/VERSIONS_HOTLINE/133563 new file mode 100644 index 0000000000000000000000000000000000000000..6b75fd707e75af02e07ddeaeb02a1d8fa5e10d03 --- /dev/null +++ b/VERSIONS_HOTLINE/133563 @@ -0,0 +1 @@ + - correctif #133563 : Correction de la langue dans la recherche des articles traduits. \ No newline at end of file diff --git a/library/Class/Cosmogramme/Integration/PhasePseudoRecordCms.php b/library/Class/Cosmogramme/Integration/PhasePseudoRecordCms.php index 84285c5eee2d61648e61caf2ab67d884aa79602d..b3b723c7dc1887de5722492aca79a432de0a8853 100644 --- a/library/Class/Cosmogramme/Integration/PhasePseudoRecordCms.php +++ b/library/Class/Cosmogramme/Integration/PhasePseudoRecordCms.php @@ -103,6 +103,6 @@ class Class_Cosmogramme_Integration_PhasePseudoRecordCms protected function _articlesRecordsJoin() : string { return 'from notices as n ' . 'inner join exemplaires as e on (n.id_notice=e.id_notice and n.type=1 and n.type_doc="' . Class_TypeDoc::ARTICLE . '") ' - . 'inner join cms_article as a on a.id_article=e.id_origine'; + . 'inner join cms_article as a on a.id_article=e.id_origine or a.parent_id = e.id_origine'; } } diff --git a/tests/library/Class/Cosmogramme/Integration/PhasePseudoRecordCmsTest.php b/tests/library/Class/Cosmogramme/Integration/PhasePseudoRecordCmsTest.php index 20386882e7adc0e00d60ecb6e8f3bcaae870bb76..fcee3820691597c62045e7fe76a7a75fc5a7e189 100644 --- a/tests/library/Class/Cosmogramme/Integration/PhasePseudoRecordCmsTest.php +++ b/tests/library/Class/Cosmogramme/Integration/PhasePseudoRecordCmsTest.php @@ -21,6 +21,7 @@ class PhasePseudoRecordCmsUnindexTest extends Class_Cosmogramme_Integration_PhaseTestCase { + protected function _getPreviousPhase() { return (new Class_Cosmogramme_Integration_Phase(0.1)) ->beCron(); @@ -29,12 +30,13 @@ class PhasePseudoRecordCmsUnindexTest extends Class_Cosmogramme_Integration_Phas public function setUp() { parent::setUp(); + Zend_Registry::set('sql', $this->mock() ->whenCalled('fetchAllByColumn')->answers([]) ->whenCalled('fetchAllByColumn') - ->with('select n.id_notice from notices as n inner join exemplaires as e on (n.id_notice=e.id_notice and n.type=1 and n.type_doc="8") inner join cms_article as a on a.id_article=e.id_origine where (a.debut is not null and date(a.debut) > date(now())) or (a.fin is not null and date(a.fin) < date(now()))') + ->with('select n.id_notice from notices as n inner join exemplaires as e on (n.id_notice=e.id_notice and n.type=1 and n.type_doc="8") inner join cms_article as a on a.id_article=e.id_origine or a.parent_id = e.id_origine where (a.debut is not null and date(a.debut) > date(now())) or (a.fin is not null and date(a.fin) < date(now()))') ->answers([12])); $this->fixture(Class_Article::class, @@ -95,6 +97,7 @@ class PhasePseudoRecordCmsUnindexTest extends Class_Cosmogramme_Integration_Phas class PhasePseudoRecordCmsIndexTest extends Class_Cosmogramme_Integration_PhaseTestCase { + protected function _getPreviousPhase() { return (new Class_Cosmogramme_Integration_Phase(0.1)) ->beCron(); @@ -103,12 +106,13 @@ class PhasePseudoRecordCmsIndexTest extends Class_Cosmogramme_Integration_PhaseT public function setUp() { parent::setUp(); + Zend_Registry::set('sql', $this->mock() ->whenCalled('fetchAllByColumn')->answers([]) ->whenCalled('fetchAllByColumn') - ->with('select id_article from cms_article where id_article not in (select a.id_article from notices as n inner join exemplaires as e on (n.id_notice=e.id_notice and n.type=1 and n.type_doc="8") inner join cms_article as a on a.id_article=e.id_origine) and ((debut is null or date(debut) <= date(now())) and (fin is null or date(fin) >= date(now()))) and status=3 and indexation=1 order by id_article') + ->with('select id_article from cms_article where id_article not in (select a.id_article from notices as n inner join exemplaires as e on (n.id_notice=e.id_notice and n.type=1 and n.type_doc="8") inner join cms_article as a on a.id_article=e.id_origine or a.parent_id = e.id_origine) and ((debut is null or date(debut) <= date(now())) and (fin is null or date(fin) >= date(now()))) and status=3 and indexation=1 order by id_article') ->answers([22199])); Class_Article::setTimeSource(new TimeSourceForTest('2022-04-30 14:50:49')); @@ -164,3 +168,79 @@ class PhasePseudoRecordCmsIndexTest extends Class_Cosmogramme_Integration_PhaseT $this->assertLogContains('1 notice(s) traitée(s)'); } } + + + + +/* https://forge.afi-sa.net/issues/133563 */ +class PhasePseudoRecordCmsIndexWithTranslatedRecordTest + extends Class_Cosmogramme_Integration_PhaseTestCase { + + protected function _getPreviousPhase() { + return (new Class_Cosmogramme_Integration_Phase(0.1)) + ->beCron(); + } + + + public function setUp() { + parent::setUp(); + + Class_AdminVar::set('DEFAULT_LANGUAGE', 'fr'); + Class_AdminVar::set('LANGUES', 'en;'); + Zend_Registry::set('sql', + $this->mock() + + ->whenCalled('fetchAllByColumn') + ->with('select n.id_notice from notices as n inner join exemplaires as e on (n.id_notice=e.id_notice and n.type=1 and n.type_doc="8") inner join cms_article as a on a.id_article=e.id_origine or a.parent_id = e.id_origine where (a.debut is not null and date(a.debut) > date(now())) or (a.fin is not null and date(a.fin) < date(now()))') + ->answers([]) + + ->whenCalled('fetchAllByColumn') + ->with('select id_article from cms_article where id_article not in (select a.id_article from notices as n inner join exemplaires as e on (n.id_notice=e.id_notice and n.type=1 and n.type_doc="8") inner join cms_article as a on a.id_article=e.id_origine) and ((debut is null or date(debut) <= date(now())) and (fin is null or date(fin) >= date(now()))) and status=3 and indexation=1') + ->answers([22299]) + + ->whenCalled('fetchAllByColumn') + ->with('select id_article from cms_article where id_article not in (select a.id_article from notices as n inner join exemplaires as e on (n.id_notice=e.id_notice and n.type=1 and n.type_doc="8") inner join cms_article as a on a.id_article=e.id_origine or a.parent_id = e.id_origine) and ((debut is null or date(debut) <= date(now())) and (fin is null or date(fin) >= date(now()))) and status=3 and indexation=1') + ->answers([]) + + ->beStrict()); + + $this->fixture(Class_Notice::class, + ['id' => 159, + 'titres' => 'ARTICLE EN FRANCAIS', + 'type' => 1, + 'type_doc' => 8]); + $this->fixture(Class_Exemplaire::class, + ['id' => 753, + 'id_notice' => 159, + 'id_origine' => 22199]); + + $this->fixture(Class_Article::class, + ['id' => 22199, + 'id_notice' => 159, + 'parent_id' => 0, + 'titre' => 'Article en francais', + 'contenu' => 'Article en francais', + 'status' => Class_Article::STATUS_VALIDATED, + 'indexation' => 1, + 'langue' => 'fr']); + $this->fixture(Class_Article::class, + ['id' => 22299, + 'titre' => 'translation article', + 'contenu' => 'translation article', + 'status' => Class_Article::STATUS_VALIDATED, + 'indexation' => 1, + 'langue' => 'en', + 'parent_id' => 22199]); + + $this->_phase = $this->_buildPhase('PseudoRecordCms') + ->setMemoryCleaner(function() {}) + ->run(); + } + + + /** @test */ + public function recordShouldHaveTitresTestingArticle() { + $this->assertEquals('ARTICLE EN FRANCAIS', Class_Notice::findFirstBy(['type_doc' => Class_TypeDoc::ARTICLE]) + ->getTitres()); + } +}