Skip to content
Snippets Groups Projects
Commit 0b0e405f authored by Patrick Barroca's avatar Patrick Barroca :grin:
Browse files

rel #21441 : custom fields metas create/delete their thesaurus as needed

parent 69f09a57
Branches
Tags
3 merge requests!1132Hotline#29412 images des articles dans le resultat de recherche,!1120Master,!1075Dev#21441 creer des facettes a partir des custom fields
......@@ -36,6 +36,5 @@ class Admin_CustomFieldsMetaController extends ZendAfi_Controller_Action {
'form_class_name' => 'ZendAfi_Form_Admin_CustomFields_CustomFieldMeta'];
}
}
?>
\ No newline at end of file
......@@ -28,12 +28,28 @@ class Class_CodifThesaurusLoader extends Storm_Model_Loader {
public function findForCustomField($field) {
return Class_CodifThesaurus::findForCustomFieldMeta($field->getMeta());
}
public function getOrCreateForCustomField($field) {
return Class_CodifThesaurus::getOrCreateForCustomFieldMeta($field->getMeta());
}
public function findForCustomFieldMeta($meta) {
return Class_CodifThesaurus::getLoader()
->findFirstBy(['id_origine' => $field->getThesaurusIdOrigine(),
->findFirstBy(['id_origine' => $meta->getId(),
'code' => Class_CodifThesaurus::CODE_CUSTOMFIELDS]);
}
public function getOrCreateForCustomFieldMeta($meta) {
return Class_CodifThesaurus::findCustomFieldsRoot()
->getOrCreateChild($meta->getId(), $meta->getLabel());
}
public function findCustomFieldsRoot() {
return Class_CodifThesaurus::getLoader()
->findFirstBy(['id_thesaurus' => Class_CodifThesaurus::ROOT_CUSTOMFIELD_ID]);
......@@ -114,13 +130,17 @@ class Class_CodifThesaurusLoader extends Storm_Model_Loader {
}
public function deleteAllWithIdOrigineAndCode($id_origine,$code_thesaurus) {
if ($thesauri = Class_CodifThesaurus::findAllBy(['id_origine' => $id_origine,
'code' => $code_thesaurus ]))
foreach ($thesauri as $thesaurus) {
if ($thesaurus->getIdThesaurus()!='')
sqlExecute('delete from codif_thesaurus where id_thesaurus like "'.$thesaurus->getIdThesaurus().'%"');
}
public function deleteAllWithIdOrigineAndCode($id_origine, $code_thesaurus) {
foreach (Class_CodifThesaurus::findAllBy(['id_origine' => $id_origine,
'code' => $code_thesaurus ])
as $thesaurus)
Class_CodifThesaurus::deleteAllFrom($thesaurus);
}
public function deleteAllFrom($thesaurus) {
if ($thesaurus && '' != $thesaurus->getIdThesaurus())
sqlExecute('delete from codif_thesaurus where id_thesaurus like "' . $thesaurus->getIdThesaurus() . '%"');
}
......@@ -296,4 +316,9 @@ class Class_CodifThesaurus extends Storm_Model_Abstract {
'La règle n\'est pas de la forme 686$a');
}
public function deleteMeAndMyChildren() {
$this->getLoader()->deleteAllFrom($this);
}
}
\ No newline at end of file
......@@ -34,10 +34,12 @@ class Class_CustomField_Meta extends Storm_Model_Abstract {
protected
$_table_name = 'custom_field_meta',
$_has_many = ['custom_fields' =>
['model' => 'Class_CustomField',
'role' => 'meta',
'dependents' => 'delete']],
$_default_attribute_values = ['label' => '',
'field_type' => self::TEXT_INPUT,
'options_list' => '',
......@@ -47,6 +49,7 @@ class Class_CustomField_Meta extends Storm_Model_Abstract {
return $this->getLabel();
}
public function getFieldTypes() {
return
[self::TEXT_INPUT => $this->_('Texte'),
......@@ -68,7 +71,48 @@ class Class_CustomField_Meta extends Storm_Model_Abstract {
}
public function getFacetLabel() {
return $this->getLabel();
public function getThesaurus() {
return Class_CodifThesaurus::findForCustomFieldMeta($this);
}
public function afterSave() {
$this->_instrumentThesaurus();
}
public function afterDelete() {
if ($thesaurus = $this->getThesaurus())
$thesaurus->deleteMeAndMyChildren();
}
protected function _instrumentThesaurus() {
$thesaurus = $this->getThesaurus();
if ($this->_thesaurusIsMissing($thesaurus)) {
Class_CodifThesaurus::getOrCreateForCustomFieldMeta($this);
return;
}
if ($this->_thesaurusShouldNotBeThere($thesaurus)) {
$thesaurus->deleteMeAndMyChildren();
return;
}
if ($thesaurus)
$thesaurus->setLibelle($this->getLabel())
->setLibelleFacette($this->getLabel())
->save();
}
protected function _thesaurusIsMissing($thesaurus) {
return $this->getIndexable() && !$thesaurus;
}
protected function _thesaurusShouldNotBeThere($thesaurus) {
return !$this->getIndexable() && $thesaurus;
}
}
\ No newline at end of file
......@@ -160,8 +160,7 @@ class Class_Indexation_PseudoNotice_FacettesVisitor extends Class_Indexation_Pse
protected function _ensureThesaurusFor($field) {
return Class_CodifThesaurus::findCustomFieldsRoot()
->getOrCreateChild($field->getThesaurusIdOrigine(), $field->getLabel());
return Class_CodifThesaurus::createForCustomField($field);
}
......
......@@ -25,6 +25,12 @@ abstract class CustomFieldsMetaControllerTestCase extends AbstractControllerTest
public function setUp() {
parent::setUp();
$this->fixture('Class_CodifThesaurus',
['id' => 34,
'id_thesaurus' => Class_CodifThesaurus::ROOT_CUSTOMFIELD_ID,
'code' => Class_CodifThesaurus::CODE_CUSTOMFIELDS,
'libelle' => 'Champs personnalisés']);
$this->fixture('Class_CustomField_Meta',
['id' => 1,
'label' => 'Address',
......@@ -182,7 +188,7 @@ class CustomFieldsMetaControllerEditStatusActionTest extends CustomFieldsMetaCon
class CustomFieldsMetaControllerAddActionTest extends CustomFieldsMetaControllerTestCase {
public function setUp() {
parent::setUp();
$this->dispatch('admin/custom-fields-meta/add/id/1', true);
$this->dispatch('admin/custom-fields-meta/add', true);
}
......@@ -240,6 +246,15 @@ class CustomFieldsMetaControllerPostEditActionTest extends CustomFieldsMetaContr
public function shouldBecomeIndexable() {
$this->assertEquals(1, $this->meta->getIndexable());
}
/** @test */
public function shouldHaveCreatedThesaurus() {
$this->assertNotNull(Class_CodifThesaurus::findFirstBy(['id_origine' => $this->meta->getId(),
'code' => Class_CodifThesaurus::CODE_CUSTOMFIELDS,
'libelle' => 'public',
'libelle_facette' => 'public']));
}
}
......@@ -247,20 +262,36 @@ class CustomFieldsMetaControllerPostEditActionTest extends CustomFieldsMetaContr
class CustomFieldsMetaControllerDeleteAddressFieldTest extends CustomFieldsMetaControllerTestCase {
public function setUp() {
parent::setUp();
$this->fixture('Class_CodifThesaurus',
['id' => 42,
'id_origine' => 1,
'id_thesaurus' => 'CFCF0001',
'code' => Class_CodifThesaurus::CODE_CUSTOMFIELDS,
'libelle' => 'public',
'libelle_facette' => 'public']);
$this->onLoaderOfModel('Class_CodifThesaurus')
->whenCalled('deleteAllFrom')
->answers(true);
$this->dispatch('admin/custom-fields-meta/delete/id/1', true);
Class_CustomField_Meta::clearCache();
Class_CustomField::clearCache();
}
/** @test */
public function metaAddressShouldBeDeleted() {
$this->assertEmpty(Class_CustomField_Meta::find(1));
$this->assertNull(Class_CustomField_Meta::find(1));
}
/** @test */
public function customFieldAddressShouldBeDeleted() {
$this->assertEmpty(Class_CustomField::find(1));
$this->assertNull(Class_CustomField::find(1));
}
/** @test */
public function shouldHaveDeletedThesaurus() {
$this->assertTrue(Class_CodifThesaurus::methodHasBeenCalled('deleteAllFrom'));
}
}
\ No newline at end of file
......@@ -524,34 +524,34 @@ class ModulesControllerConfigRechercheResultatWithPreferencesTest
'libelle' => 'Custum Facet ',
'libelle_facette' => 'New Facet']);
Class_Profil::getCurrentProfil()
->setCfgModules(
['recherche' => ['resultatsimple' => ['suggestion_achat' => 0,
'zones_titre' => '200$e;200$f',
'titre' => 'ok',
'liste_format' => 1,
'liste_nb_par_page' => 50,
'liste_codes' => 'TAENR',
'facettes_actif' => '1',
'facettes_nombre' => '6',
'facettes_codes' => 'S;A;M;D;L;HDELF;HNEWF',
'facettes_message' => 'Affiner le résultat...',
'tags_actif' => '1',
'tags_position' => '2',
'tags_calcul' => '0',
'tags_nombre' => '30',
'tags_codes' => 'AMDPZ',
'tags_message' => 'Elargir la recherche...',
'cvs_display_position' => '0',
'cvs_resultat_titre' => 'Ressources numériques CVS',
'cvs_autres_resultats' => 'Autres documents',
'cvs_nb_result' => '5',
'cvs_msg_deco' => 'Vous devez etre connecté',
'cvs_msg_droit' => 'Merci de contacter la médiathèque pour obtenir un accès.']]]);
['recherche' =>
['resultatsimple' =>
['suggestion_achat' => 0,
'zones_titre' => '200$e;200$f',
'titre' => 'ok',
'liste_format' => 1,
'liste_nb_par_page' => 50,
'liste_codes' => 'TAENR',
'facettes_actif' => '1',
'facettes_nombre' => '6',
'facettes_codes' => 'S;A;M;D;L;HDELF;HNEWF',
'facettes_message' => 'Affiner le résultat...',
'tags_actif' => '1',
'tags_position' => '2',
'tags_calcul' => '0',
'tags_nombre' => '30',
'tags_codes' => 'AMDPZ',
'tags_message' => 'Elargir la recherche...',
'cvs_display_position' => '0',
'cvs_resultat_titre' => 'Ressources numériques CVS',
'cvs_autres_resultats' => 'Autres documents',
'cvs_nb_result' => '5',
'cvs_msg_deco' => 'Vous devez etre connecté',
'cvs_msg_droit' => 'Merci de contacter la médiathèque pour obtenir un accès.']]]);
$this->dispatch('/admin/modules/recherche?config=site&type_module=recherche&id_profil=2&action1=resultat&action2=simple', true);
}
......@@ -567,8 +567,6 @@ class ModulesControllerConfigRechercheResultatWithPreferencesTest
}
/** @test */
public function facettesCodesShouldNotContainsDeletedFacet() {
$this->assertXPath('//input[@name="facettes_codes"][@value="S;A;M;D;L;HNEWF"]',
......@@ -606,14 +604,12 @@ class ModulesControllerConfigRechercheResultatWithPreferencesTest
}
/** @test */
public function deletedFacetShouldNotAppearInDragAndDrop() {
$this->assertNotXPath('//li[@data-code="HDELF"]', $this->_response->getBody());
}
/** @test */
public function customFacetShouldAppearInDragAndDrop() {
$this->assertXPathContentContains('//li[@data-code="HNEWF"]', 'New Facet', $this->_response->getBody());
......@@ -893,12 +889,10 @@ class ModulesControllerRechercheWithCVSActivatePostTest
}
/** @test */
public function afterSaveCvsDisplayPositionShouldBe0() {
$this->assertEquals(0, $this->saved_preferences['cvs_display_position']);
}
}
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment