diff --git a/cosmogramme/php/integration/domaines.php b/cosmogramme/php/integration/domaines.php index 3b03814dc04651c9369142290c7fb08a8fd2ad12..ec2cbd6179f52576816301656611f8713be17684 100644 --- a/cosmogramme/php/integration/domaines.php +++ b/cosmogramme/php/integration/domaines.php @@ -22,20 +22,20 @@ setVariable('traitement_phase', 'Indexation des domaines'); if ($phase==16) { - $log->ecrire('<h4>Indexation des domaines</h4>'); - unset($phase_data); - $reprise = false; - $phase_data['nombre'] = 0; - $phase_data['nb_fic'] = 0; - $phase_data['timeStart'] = time(); - $phase_data['pointeur'] = 0; - $phase_data['domaine'] = 0; + $log->ecrire('<h4>Indexation des domaines</h4>'); + unset($phase_data); + $reprise = false; + $phase_data['nombre'] = 0; + $phase_data['nb_fic'] = 0; + $phase_data['timeStart'] = time(); + $phase_data['pointeur'] = 0; + $phase_data['domaine'] = 0; - $phase=17; + $phase=17; } if ($phase==17) { - if ($mode_cron) { + if ($mode_cron) { $position_domaine = $phase_data['domaine']; $catalogues = array_slice(Class_Catalogue::findAllCataloguesAIndexer(), $position_domaine); @@ -50,15 +50,15 @@ if ($phase==17) { $phase_data['pointeur'] = 0; } - $log->ecrire('<h4>Indexation des paniers dans les domaines</h4>'); - Class_PanierNotice::indexAll(); + $log->ecrire('<h4>Indexation des paniers dans les domaines</h4>'); + Class_PanierNotice::indexAll(); - $log->ecrire('<h4>Indexation des articles dans les domaines</h4>'); - Class_Article::indexAll(); + $log->ecrire('<h4>Indexation des articles dans les domaines</h4>'); + Class_Article::indexAll(); - $log->ecrire('<h4>Indexation des sitothèques dans les domaines</h4>'); - Class_Sitotheque::indexAll(); - } else { - $log->ecrire('<h4>Les indexations des domaines, des paniers, articles et sitothèques dans les domaines ne sont traitées qu\'en mode cron</h4>'); - } + $log->ecrire('<h4>Indexation des sitothèques dans les domaines</h4>'); + Class_Sitotheque::indexAll(); + } else { + $log->ecrire('<h4>Les indexations des domaines, des paniers, articles et sitothèques dans les domaines ne sont traitées qu\'en mode cron</h4>'); + } } \ No newline at end of file diff --git a/library/Class/CodifThesaurus.php b/library/Class/CodifThesaurus.php index 2e6aa9f83ec5b5c5c6f833687f504ab0e98a8d5a..7ce47599de34610a089b606d58f36dd0197e2a2a 100644 --- a/library/Class/CodifThesaurus.php +++ b/library/Class/CodifThesaurus.php @@ -329,15 +329,9 @@ class Class_CodifThesaurus extends Storm_Model_Abstract { public function newChildEntry() { $loader = $this->getLoader(); $code = $this->getCode(); - - $parent_id_length = strlen($this->getIdThesaurus()); - $id_thesaurus = $loader->findNextThesaurusChildId($code, - $this->getIdThesaurus()); - $child_id_length = strlen($id_thesaurus); - return $child_id_length != $parent_id_length+self::ID_KEY_LENGTH - ? null - : $loader->newInstance(['code' => $code, - 'id_thesaurus' => $id_thesaurus]); + return $loader->newInstance(['code' => $code, + 'id_thesaurus' => $loader->findNextThesaurusChildId($code, + $this->getIdThesaurus())]); } @@ -352,14 +346,12 @@ class Class_CodifThesaurus extends Storm_Model_Abstract { if ($entry) return $entry; - if (!$entry = $this->newChildEntry()) - return null; - - $entry->updateAttributes(['id_origine' => $id_origine, - 'libelle' => $label]); - $entry->assertSave(); + $entry = $this + ->newChildEntry() + ->updateAttributes(['id_origine' => $id_origine, + 'libelle' => $label]); - return $entry; + return $entry->save() ? $entry : null; } @@ -377,7 +369,9 @@ class Class_CodifThesaurus extends Storm_Model_Abstract { public function validate() { - $this->check('' != $this->getLibelle(), $this->_('Vous devez définir le libellé')); + $this->_validateIdThesaurus(); + + $this->checkAttribute('libelle', '' != $this->getLibelle(), $this->_('Vous devez définir le libellé')); if (!$this->getRules()) return true; @@ -388,6 +382,17 @@ class Class_CodifThesaurus extends Storm_Model_Abstract { } + protected function _validateIdThesaurus() { + $my_key = substr($this->getIdThesaurus(), -self::ID_KEY_LENGTH); + $empty_key = str_repeat('0', self::ID_KEY_LENGTH); + + $this->checkAttribute('id_thesaurus', + $my_key != $empty_key, + $this->_('Nombre maximum d\'élément à ce niveau déjà atteint (%s)', + str_repeat('9', self::ID_KEY_LENGTH))); + } + + public function deleteMeAndMyChildren() { $this->cleanRecords(); $this->getLoader()->deleteAllFrom($this); diff --git a/tests/library/Class/CodifThesaurusTest.php b/tests/library/Class/CodifThesaurusTest.php index c3acb92bc7f6a499b28cf73ab459982a688861de..44f32e25bd1065c662ec9a35f11412dbd1e307e8 100644 --- a/tests/library/Class/CodifThesaurusTest.php +++ b/tests/library/Class/CodifThesaurusTest.php @@ -180,9 +180,12 @@ class CodifThesaurusTooManyValuesTest extends ModelTestCase { /** @test */ public function shouldNotInsertMoreThan9999Child() { - Class_CodifThesaurus::find(723)->getOrCreateChild(strtoupper('métiers de la recherche'), 'métiers de la recherche'); + Class_CodifThesaurus::find(723) + ->getOrCreateChild(strtoupper('métiers de la recherche'), + 'métiers de la recherche'); - $this - ->assertNull(Class_CodifThesaurus::findFirstBy(['id_thesaurus' => 'TEST00010000'])); + $this->assertEquals(2, Class_CodifThesaurus::count(), + Class_CodifThesaurus::findFirstBy(['order' => 'id desc']) + ->getIdThesaurus()); } } \ No newline at end of file