diff --git a/cosmogramme/cosmozend/application/modules/cosmo/controllers/FacetsController.php b/cosmogramme/cosmozend/application/modules/cosmo/controllers/FacetsController.php index 5ad208a1136953d84050d0f3d6ddcded430669e6..83f599228d802de64d8977fae24a2d8fd518226a 100644 --- a/cosmogramme/cosmozend/application/modules/cosmo/controllers/FacetsController.php +++ b/cosmogramme/cosmozend/application/modules/cosmo/controllers/FacetsController.php @@ -64,10 +64,10 @@ class Cosmo_FacetsController extends Zend_Controller_Action { if (!$model->getIdThesaurus()) { $libelle = preg_replace('/[^a-zA-Z0-9]/', '', $this->_getParam('libelle_facette')); - $libelle = substr($libelle, 0, 4); + $id_thesaurus = $this->generateNewIdThesaurusForLabel($libelle); $model->setIdThesaurus($id_thesaurus); - $model->setCode($libelle); + $model->setCode($id_thesaurus); } $model->save(); @@ -76,10 +76,16 @@ class Cosmo_FacetsController extends Zend_Controller_Action { protected function generateNewIdThesaurusForLabel($label) { + $id = substr(strtoupper($label), 0, 4); + + if (strlen($id) == 4 && !Class_CodifThesaurus::findFirstBy(['id_thesaurus' => $id])) + return $id; + + $label = substr(strtoupper($label), 0, 3); $suffixes = array_merge(range(0, 9), range('a', 'z')); while(!empty($suffixes)) { $suffix = strtoupper(array_shift($suffixes));; - $id = sprintf("%'".$suffix."-4s", strtoupper($label)); + $id = sprintf("%'".$suffix."-4s", $label); if (!Class_CodifThesaurus::findFirstBy(['id_thesaurus' => $id])) return $id; } diff --git a/cosmogramme/cosmozend/tests/application/modules/cosmo/controllers/DynamicFacetsControllerTest.php b/cosmogramme/cosmozend/tests/application/modules/cosmo/controllers/DynamicFacetsControllerTest.php index 3bc761728f3eb7e16fd896a662cc8ce38f0d8043..c1e3cd08033938ccd23790f327eabcf1e2b72cba 100644 --- a/cosmogramme/cosmozend/tests/application/modules/cosmo/controllers/DynamicFacetsControllerTest.php +++ b/cosmogramme/cosmozend/tests/application/modules/cosmo/controllers/DynamicFacetsControllerTest.php @@ -189,6 +189,24 @@ class Cosmo_DynamicFacetsControllerValidateTest extends Cosmo_DynamicFacetsContr } + /** @test */ + public function withExistingIdThesaurusDOCUNewIdThesaurusShouldBeDOC0() { + $this->fixture('Class_CodifThesaurus', + ['libelle' => 'doc that i love', + 'id_thesaurus' => 'DOCU', + 'rules' => '{"label":" 345$t "}']); + + $this->postDispatch( + '/cosmo/facets/validate', + ['libelle_facette' => 'docu', + 'rules' => '33$2']); + + $this->assertEquals('DOC0', + Class_CodifThesaurus::findFirstBy(['libelle'=>'docu'])->getIdThesaurus()); + + } + + /** @test */ public function withSpecialCharsNewIdThesaurusShouldBeFourLetters() { $this->postDispatch(