From b84ed2d03be8a857e4717896550f546e99a42ba8 Mon Sep 17 00:00:00 2001 From: Laurent Laffont <llaffont@afi-sa.fr> Date: Mon, 7 May 2018 15:22:14 +0200 Subject: [PATCH] dev #74958 record integration: record id for items can now be other than 001. Add screen configuration in data profile --- .../controllers/DataProfileControllerTest.php | 35 +++++++++++++++++++ .../php/classes/classe_notice_marc21.php | 1 + .../tests/php/classes/marc21_952_items.txt | 1 + library/Class/IntProfilDonnees.php | 16 +++++++++ library/Class/ProfilePrefs.php | 25 +++++++++++++ .../Class/ProfileSerializer/UnimarcRecord.php | 12 ++++++- library/ZendAfi/Form/Cosmo/DataProfile.php | 19 ++++++++-- 7 files changed, 106 insertions(+), 3 deletions(-) create mode 100644 cosmogramme/tests/php/classes/marc21_952_items.txt diff --git a/cosmogramme/cosmozend/tests/application/modules/cosmo/controllers/DataProfileControllerTest.php b/cosmogramme/cosmozend/tests/application/modules/cosmo/controllers/DataProfileControllerTest.php index 814143a8fd7..fca511096d4 100644 --- a/cosmogramme/cosmozend/tests/application/modules/cosmo/controllers/DataProfileControllerTest.php +++ b/cosmogramme/cosmozend/tests/application/modules/cosmo/controllers/DataProfileControllerTest.php @@ -28,6 +28,8 @@ abstract class Cosmo_DataProfileControllerTestCase extends CosmoControllerTestCa Class_IntProfilDonnees::forKoha() ->setId(56) + ->setItemField(Class_IntProfilDonnees::FIELD_ITEM_ID_ORIGINE, ['zone' => '999', + 'champ' => 'c']) ->save(); Class_IntProfilDonnees::forNanook() @@ -342,6 +344,18 @@ class Cosmo_DataProfileControllerEditUnimarcKohaTest extends Cosmo_DataProfileCo } + /** @test */ + public function multiInputItemIdOrigineShouldBePresent() { + $this->assertXPath('//form//div[@id="multi_inputs_item_id_origine"]'); + } + + + /** @test */ + public function scriptShouldSetMutiInputsItemIdOrigineTo999dollarC() { + $this->assertXPathContentContains('//script', 'values:{"id_origine_zone":["999"],"id_origine_champ":["c"]}'); + } + + /** @test */ public function multiInputInteretZoneShouldBePresent() { $this->assertXPath('//form//div[@id="multi_inputs_interests"]'); @@ -399,6 +413,7 @@ class Cosmo_DataProfileControllerPostEditUnimarcKohaFileFormatTest extends Cosmo 'format' => Class_IntProfilDonnees::FORMAT_UNIMARC, 'xml_balise_abonne' => 'subscribers', 'xml_abonne_IDABON' => 'id', + 'item_zone'=> '996', 'champ_code_barres'=> 'f', 'champ_cote' => 'k', 'champ_type_doc' => 'x', @@ -409,6 +424,8 @@ class Cosmo_DataProfileControllerPostEditUnimarcKohaFileFormatTest extends Cosmo 'champ_availability' => 't', 'url_zone' => [0 => '932'], 'url_champ' => [0 => 'n'], + 'id_origine_zone' => [0 => '999'], + 'id_origine_champ' => [0 => 'c'], 'rejet_periodiques' => 1, 'id_article_periodique' => 1, 'nouveaute_format' => 4, @@ -449,6 +466,12 @@ class Cosmo_DataProfileControllerPostEditUnimarcKohaFileFormatTest extends Cosmo } + /** @test */ + public function itemZoneShouldBe996() { + $this->assertEquals('996', $this->_koha->getItemZone()); + } + + /** @test */ public function champsCodeBarresShouldBeF() { $this->assertEquals('f', $this->_koha->getBarCode()); @@ -473,6 +496,18 @@ class Cosmo_DataProfileControllerPostEditUnimarcKohaFileFormatTest extends Cosmo } + /** @test */ + public function idOrigineZoneShouldBe999() { + $this->assertEquals('999', $this->_koha->getIdOrigineZone()); + } + + + /** @test */ + public function idOrigineFieldShouldBeC() { + $this->assertEquals('c', $this->_koha->getIdOrigineField()); + } + + /** @test */ public function serialsRejectShouldBeOne() { $this->assertEquals(1, $this->_koha->getRejetPeriodiques()); diff --git a/cosmogramme/php/classes/classe_notice_marc21.php b/cosmogramme/php/classes/classe_notice_marc21.php index 609e459cf8a..4d6bc1fc62e 100644 --- a/cosmogramme/php/classes/classe_notice_marc21.php +++ b/cosmogramme/php/classes/classe_notice_marc21.php @@ -88,6 +88,7 @@ class notice_marc21 extends notice_unimarc { $this->map["801"]["a"]="b"; $this->map["995"]="*"; $this->map["952"]="*"; + $this->map["999"]="*"; parent::__construct(); } diff --git a/cosmogramme/tests/php/classes/marc21_952_items.txt b/cosmogramme/tests/php/classes/marc21_952_items.txt new file mode 100644 index 00000000000..2c7a9777bf3 --- /dev/null +++ b/cosmogramme/tests/php/classes/marc21_952_items.txt @@ -0,0 +1 @@ +03168nas a2200541 a 4500001000700000003000400007005001700011008004100028010000600069020001500075040001300090043001200103100000700115245019700122260009500319300002100414300003300435490001200468504005300480600006500533610005500598651007300653700002500726700002700751773011400778830004100892856010200933856010301035942001501138955006101153999001301214952017101227952007501398952007501473952007501548952007501623952007501698952007501773952007501848952007501923952007601998952007602074952007602150952007602226952009302302952008402395952014702479681614Ost20180430102806.0950727s1993 sp bc s001 0 spa a a8477533865 aDLCcDLC ae-sp--- axx00aArchivo de JoaquÃn Costabinventario de los documentos conservados en el Archivo Histórico Provincial de Huescacautores, MarÃa Rivas Palá (dirección), Jesús ParaÃso Gros, ... [et al.]. a[Zaragoza] :bDiputación General de Aragón, Departamento de Cultura y Educación,c1993. a199 p. ;c24 cm. a106 p.bil. col. y n.c32 cm1 aUNEDv5 aIncludes bibliographical references and indexes. 4aCosta y MartÃnez, JoaquÃn,d1846-1911xArchivesxCatalogs.20aArchivo Histórico Provincial de HuescaxCatalogs, 0aHuesca (Spain : Province)xHistoryxSourcesxBibliographyxCatalogs.1 aRivas Palá, MarÃa.1 aParaÃso Gros, Jesús. aAgua, medio ambiente y desarrollo en el siglo XXI : México desde una perspectiva global y regionalw14052955 0aColección Archivos de Aragón ;v5. uhttp://demo-kobli.bage.es:8080/intranet-tmpl/prog/local_repository/documents/1.pngyVer documento uhttp://demo-kobli.bage.es:8080/intranet-tmpl/prog/local_repository/documents/1.pngyVer Documento2 2udccBKs1 axh01 to hlcd 7-27-95; lk19 04-29-96; lk03 to sl 04-30-96 c567d567 00102udc407091aorexborexcSTAFFd2011-05-20l3p121215r2015-04-07s2015-04-07t1v54.00w2011-05-20yBKzEl libro se encuentra perdido desde hace años. Prueba 00102lcc407092aorexborexd2011-05-24r2011-05-24w2011-05-24yBK 00102udc407093aorexborexd2012-02-29r2012-02-29w2012-02-29yBK 00102udc407094aorexborexd2012-02-29r2012-02-29w2012-02-29yBK 00102udc407095aorexborexd2012-02-29r2012-02-29w2012-02-29yBK 00102udc407096aorexborexd2012-02-29r2012-02-29w2012-02-29yBK 00102udc407097aorexborexd2012-02-29r2012-02-29w2012-02-29yBK 00102udc407098aorexborexd2012-02-29r2012-02-29w2012-02-29yBK 00102udc407099aorexborexd2012-02-29r2012-02-29w2012-02-29yBK 00102udc4070910aorexborexd2012-02-29r2012-02-29w2012-02-29yBK 00102udc4070911aorexborexd2012-02-29r2012-02-29w2012-02-29yBK 00102udc4070912aorexborexd2012-02-29r2012-02-29w2012-02-29yBK 00102udc4070913aorexborexd2012-02-29r2012-02-29w2012-02-29yBK 00102udc40686070914aorexborexcCHILDd2012-04-10o860r2012-04-10w2012-04-10yBK 00102udc4070915aorexborexd2013-02-11r2013-02-11w2013-02-11yBKzPrueba 00102lcc406SG03801453384791 A S811 M70916aOrexbOrexcCHILDd2013-02-20oSG 380.1453384791 As811mp2013-9999r2013-02-20w2013-02-20yBK \ No newline at end of file diff --git a/library/Class/IntProfilDonnees.php b/library/Class/IntProfilDonnees.php index 017aabdf9c1..f9d76381eb6 100644 --- a/library/Class/IntProfilDonnees.php +++ b/library/Class/IntProfilDonnees.php @@ -274,6 +274,7 @@ class Class_IntProfilDonnees extends Storm_Model_Abstract { FIELD_ITEM_ANNEXE = 'champ_annexe', FIELD_ITEM_AVAILABILITY = 'champ_availability', FIELD_ITEM_URL = 'champ_url', + FIELD_ITEM_ID_ORIGINE = 'champ_id_origine', PROFILE_FIELDS = 'champs', PROFILE_DOC_TYPES = 'type_doc', PROFILE_NOVELTY = 'jours', @@ -917,6 +918,11 @@ class Class_IntProfilDonnees extends Storm_Model_Abstract { } + public function getItemZone() { + return $this->getProfilePrefs()->getItemZone(); + } + + public function getAvailability() { return $this->getProfilePrefs()->getItemAvailability(); } @@ -932,6 +938,16 @@ class Class_IntProfilDonnees extends Storm_Model_Abstract { } + public function getIdOrigineZone() { + return $this->getProfilePrefs()->getItemIdOrigine()['id_origine_zone'][0]; + } + + + public function getIdOrigineField() { + return $this->getProfilePrefs()->getItemIdOrigine()['id_origine_champ'][0]; + } + + public function getNoveltyFormat() { return $this->getProfilePrefs()->getItemNoveltyFormat(); } diff --git a/library/Class/ProfilePrefs.php b/library/Class/ProfilePrefs.php index 7408619c4bf..0d788f0c539 100644 --- a/library/Class/ProfilePrefs.php +++ b/library/Class/ProfilePrefs.php @@ -151,6 +151,31 @@ class Class_ProfilePrefs extends Class_Entity { } + public function getItemIdOrigine() { + $id_origine_zone = $this->getItemIdOrigineZone(); + $id_origine_champ = $this->getItemIdOrigineChamp(); + + return ['id_origine_zone' => [$id_origine_zone], + 'id_origine_champ' => [$id_origine_champ]]; + } + + + public function getItemIdOrigineZone() { + return $this->getItemIdOriginePrefs()['zone']; + } + + + public function getItemIdOrigineChamp() { + return $this->getItemIdOriginePrefs()['champ']; + } + + + public function getItemIdOriginePrefs() { + return $this->getItemPrefs()[Class_IntProfilDonnees::FIELD_ITEM_ID_ORIGINE]; + } + + + public function getItemNoveltyFormat() { return $this->getItemNoveltyPrefs()[Class_IntProfilDonnees::NOVELTY_FORMAT]; } diff --git a/library/Class/ProfileSerializer/UnimarcRecord.php b/library/Class/ProfileSerializer/UnimarcRecord.php index 0d2d3b55ab7..1bf6d6a7db8 100644 --- a/library/Class/ProfileSerializer/UnimarcRecord.php +++ b/library/Class/ProfileSerializer/UnimarcRecord.php @@ -53,6 +53,7 @@ class Class_ProfileSerializer_UnimarcRecord extends Class_ProfileSerializer_Abst ->populateItemNoveltyDays() ->populateItemNoveltyValeurs() ->populateItemDocTypes(['label' => 'label', 'zone' => 'zone_995']) + ->populateItemIdOrigine() ->populateItemUrl() ->populateInterests(); } @@ -65,7 +66,10 @@ class Class_ProfileSerializer_UnimarcRecord extends Class_ProfileSerializer_Abst protected function _extractRecords() { - return array_merge($this->_extractDocTypes(), $this->_extractItemFields(), $this->_extractItemUrl()); + return array_merge($this->_extractDocTypes(), + $this->_extractItemFields(), + $this->_extractItemIdOrigine(), + $this->_extractItemUrl()); } @@ -110,6 +114,12 @@ class Class_ProfileSerializer_UnimarcRecord extends Class_ProfileSerializer_Abst } + protected function _extractItemIdOrigine() { + return [Class_IntProfilDonnees::FIELD_ITEM_ID_ORIGINE => ['zone' => $this->_datas['id_origine_zone'][0], + 'champ' => $this->_datas['id_origine_champ'][0]]]; + } + + protected function _extractItemFields() { return array_intersect_key($this->_datas, Class_IntProfilDonnees::getItemFields()); } diff --git a/library/ZendAfi/Form/Cosmo/DataProfile.php b/library/ZendAfi/Form/Cosmo/DataProfile.php index 1723b195ed3..7984958e224 100644 --- a/library/ZendAfi/Form/Cosmo/DataProfile.php +++ b/library/ZendAfi/Form/Cosmo/DataProfile.php @@ -222,7 +222,9 @@ class ZendAfi_Form_Cosmo_DataProfile extends ZendAfi_Form { return $this ->addElement('text', 'item_zone', - ['label' => $this->_('Zone des exemplaires')]) + ['label' => $this->_('Zone des exemplaires'), + 'validators' => ['int']]) + ->addElement('select', 'champ_code_barres', ['label' => $this->_('Prendre le champ code-barres en'), @@ -240,13 +242,20 @@ class ZendAfi_Form_Cosmo_DataProfile extends ZendAfi_Form { ['name' => 'url_champ', 'label' => $this->_('champ')]], 'fixed' => true]) + ->addElement('multiInput', + 'item_id_origine', + ['label' => $this->_('Prendre l\'identifiant pour les webservices en (si différent de la zone 001)'), + 'fields' => [['name' => 'id_origine_zone', 'label' => $this->_('Zone')], + ['name' => 'id_origine_champ', 'label' => $this->_('champ')]], + 'fixed' => true]) + ->_addElementsWithAllFields($elements_with_all_fields) ->addDisplayGroup(array_merge(['item_zone', 'champ_code_barres', 'champ_cote'], array_keys($elements_with_all_fields), - ['item_url']), + ['item_url', 'item_id_origine']), 'item_group', ['legend' => $this->_('Champs exemplaires')]); } @@ -444,6 +453,12 @@ class ZendAfi_Form_Cosmo_DataProfile extends ZendAfi_Form { } + public function populateItemIdOrigine() { + $this->item_id_origine->setValues($this->_profile_prefs->getItemIdOrigine()); + return $this; + } + + public function populateInterests() { $this->interests->setValues($this->_profile_prefs->getInterests()); return $this; -- GitLab