diff --git a/cosmogramme/php/classes/classe_notice_integration.php b/cosmogramme/php/classes/classe_notice_integration.php index dd21747edb99ff235b6f5b89e1a535c4f070abca..c81d9c6ddf012c1fa05a4322eca80754c55134a1 100644 --- a/cosmogramme/php/classes/classe_notice_integration.php +++ b/cosmogramme/php/classes/classe_notice_integration.php @@ -705,34 +705,33 @@ class notice_integration private function ecrireExemplaires($id_notice) { global $sql; - $unicite_codes_barres=getVariable("unicite_code_barres"); - if($unicite_codes_barres=="1") $condition_bib=""; - else $condition_bib=" and id_bib=$id_bib"; - $id_bib=$this->id_bib; - $to_insert=[]; + $id_bib = $this->id_bib; + $to_insert = []; + $unicite_codes_barres = getVariable('unicite_code_barres'); + $condition_bib = ($unicite_codes_barres == '1') ? '' : ' and id_bib=' . $id_bib; $code_barres = []; - foreach($this->notice['exemplaires'] as $ex) { - $code_barres []= '\''.$ex['code_barres'].'\''; - if($ex["activite"]=="d") continue; - - $data=$ex; - $data["id_notice"]=$id_notice; - $data["id_bib"]=$id_bib; - $data["id_origine"]=$this->notice["id_origine"]; - $to_insert[]=$data; + foreach ($this->notice['exemplaires'] as $ex) { + $code_barres []= '\'' . $ex['code_barres'] . '\''; + if ($ex["activite"]=="d") + continue; + + $data = $ex; + $data['id_notice'] = $id_notice; + $data['id_bib'] = $id_bib; + $data['id_origine'] = $this->notice['id_origine']; + $to_insert[] = $data; } if (!empty($code_barres)) { - $req_delete="delete from exemplaires where id_notice=$id_notice ".$condition_bib." and code_barres in (".implode(',', $code_barres).")"; + $req_delete = 'delete from exemplaires where id_notice=' . $id_notice . $condition_bib . ' and code_barres in (' . implode(',', $code_barres) . ')'; $sql->execute($req_delete); } - foreach($to_insert as $data) { - $sql->insert("exemplaires",$data); - } + foreach($to_insert as $data) + $sql->insert('exemplaires', $data); - $date_maj=dateDuJour(2); + $date_maj = dateDuJour(2); $sql->execute("update notices set date_maj='$date_maj' where id_notice=$id_notice"); } diff --git a/cosmogramme/tests/php/classes/NoticeIntegrationTest.php b/cosmogramme/tests/php/classes/NoticeIntegrationTest.php index 9be41add32b757c326da00288b25db2c69c4211b..2306c70a807a99fc84ecc8fb24af7f6153c046fc 100644 --- a/cosmogramme/tests/php/classes/NoticeIntegrationTest.php +++ b/cosmogramme/tests/php/classes/NoticeIntegrationTest.php @@ -24,7 +24,7 @@ require_once('classe_notice_marc21.php'); require_once 'ModelTestCase.php'; -abstract class NoticeIntegrationAbstract extends ModelTestCase { +abstract class NoticeIntegrationTestCase extends ModelTestCase { protected $notice_sgbd, $_mock_sql, @@ -39,7 +39,7 @@ abstract class NoticeIntegrationAbstract extends ModelTestCase { $this->_mock_sql ->whenCalled('execute')->answers(true) ->whenCalled('fetchAll')->answers(null) - ->whenCalled('insert')->answers(null) + ->whenCalled('insert')->answers(12) ->whenCalled('update')->answers(null) ->whenCalled('fetchEnreg')->answers(null); @@ -50,8 +50,12 @@ abstract class NoticeIntegrationAbstract extends ModelTestCase { 'tracer_accents_iso'=>1, 'non_exportable'=> 'electre;decitre;gam;zebris', 'controle_codes_barres'=> 0, - 'unimarc_zone_titre' => '200$a;461$t']) - ->setListeCache(['nature_docs'=> "1:Collection\r\n2:Dataset\r\n3:Event\r\n4:Image"]); + 'unimarc_zone_titre' => '200$a;461$t', + 'unicite_code_barres' => 0, + 'champs_sup' => '', + 'ean_345' => '']) + ->setListeCache(['nature_docs'=> "1:Collection\r\n2:Dataset\r\n3:Event\r\n4:Image", + 'types_docs' => "0:non identifié\r\n1:livres\r\n2:périodiques\r\n3:disques\r\n4:DVD\r\n5:cédéroms\r\n8:articles cms\r\n9:fils rss\r\n10:sites internet\r\n100:Livre Numérique\r\n101:Diaporamas\r\n102:Type doc\r\n103:OAI\r\n104:Type doc\r\n105:Formation Vodéclic\r\n106:Livres Numériques\r\n107:Vidéos à la demande\r\n108:Tout apprendre\r\n109:Enregistrement audio\r\n110:Numérique Premium"]); Class_Notice::beVolatile(); Class_Exemplaire::beVolatile(); @@ -77,7 +81,7 @@ abstract class NoticeIntegrationAbstract extends ModelTestCase { -class NoticeIntegrationLivreNumTest extends NoticeIntegrationAbstract { +class NoticeIntegrationLivreNumTest extends NoticeIntegrationTestCase { public function setUp() { parent::setUp(); $notice_integration = new notice_integration(); @@ -143,7 +147,7 @@ class NoticeIntegrationLivreNumTest extends NoticeIntegrationAbstract { -abstract class NoticeIntegrationSacramentariumTestCase extends NoticeIntegrationAbstract { +abstract class NoticeIntegrationSacramentariumTestCase extends NoticeIntegrationTestCase { public function setUp() { parent::setUp(); @@ -284,7 +288,7 @@ class NoticeIntegrationSacramentariumParsingTest extends NoticeIntegrationSacram -class NoticeIntegrationLollipopGeneratedNoticeRecordTest extends NoticeIntegrationAbstract { +class NoticeIntegrationLollipopGeneratedNoticeRecordTest extends NoticeIntegrationTestCase { public function setUp() { parent::setUp(); @@ -335,7 +339,7 @@ class NoticeIntegrationLollipopGeneratedNoticeRecordTest extends NoticeIntegrati -abstract class NoticeIntegrationMarc21ToUnimarcTest extends NoticeIntegrationAbstract { +abstract class NoticeIntegrationMarc21ToUnimarcTest extends NoticeIntegrationTestCase { public function setUp() { parent::setUp(); $this->notice_marc21 = new notice_marc21(); @@ -356,7 +360,7 @@ abstract class NoticeIntegrationMarc21ToUnimarcTest extends NoticeIntegrationAbs -class NoticeIntegrationMarc21CoupCavalierToUnimarcTest extends NoticeIntegrationAbstract { +class NoticeIntegrationMarc21CoupCavalierToUnimarcTest extends NoticeIntegrationTestCase { protected $_id_profil_donnees = 150; //MARC21 DYNIX public function setUp() { @@ -435,7 +439,7 @@ class NoticeIntegrationMarc21CoupCavalierToUnimarcTest extends NoticeIntegration -class NoticeIntegrationBourdieuWithElectreGeneratedNoticeRecordTest extends NoticeIntegrationAbstract { +class NoticeIntegrationBourdieuWithElectreGeneratedNoticeRecordTest extends NoticeIntegrationTestCase { public function setUp() { parent::setUp(); @@ -514,7 +518,7 @@ class NoticeIntegrationBourdieuWithElectreGeneratedNoticeRecordTest extends Noti -class NoticeIntegrationSupertrampWithElectreAndPcmd4GeneratedNoticeRecordTest extends NoticeIntegrationAbstract { +class NoticeIntegrationSupertrampWithElectreAndPcmd4GeneratedNoticeRecordTest extends NoticeIntegrationTestCase { public function setUp() { parent::setUp(); @@ -540,7 +544,7 @@ class NoticeIntegrationSupertrampWithElectreAndPcmd4GeneratedNoticeRecordTest ex -class NoticeIntegrationMussoWithoutRenvoisTest extends NoticeIntegrationAbstract { +class NoticeIntegrationMussoWithoutRenvoisTest extends NoticeIntegrationTestCase { public function setUp() { parent::setUp(); $this->loadNotice("unimarc_musso"); @@ -556,7 +560,7 @@ class NoticeIntegrationMussoWithoutRenvoisTest extends NoticeIntegrationAbstract -class NoticeIntegrationCekovTest extends NoticeIntegrationAbstract { +class NoticeIntegrationCekovTest extends NoticeIntegrationTestCase { public function setUp() { parent::setUp(); $this->loadNotice("unimarc_cekov"); @@ -581,7 +585,7 @@ class NoticeIntegrationCekovTest extends NoticeIntegrationAbstract { -class NoticeIntegrationLearningWithRenvoisTest extends NoticeIntegrationAbstract { +class NoticeIntegrationLearningWithRenvoisTest extends NoticeIntegrationTestCase { public function setUp() { parent::setUp(); $this->loadNotice("unimarc_learning_from_vernacular"); @@ -597,7 +601,7 @@ class NoticeIntegrationLearningWithRenvoisTest extends NoticeIntegrationAbstract -class NoticeIntegrationDimancheALaPiscineTest extends NoticeIntegrationAbstract { +class NoticeIntegrationDimancheALaPiscineTest extends NoticeIntegrationTestCase { protected $_id_profil_donnees = 111; //Unimarc Aloes public function setUp() { @@ -606,38 +610,33 @@ class NoticeIntegrationDimancheALaPiscineTest extends NoticeIntegrationAbstract $this->_mock_sql ->whenCalled('fetchEnreg') ->with('Select * from profil_donnees where id_profil=111') - ->answers( - ['id_profil' => 111, - 'libelle' => 'Unimarc Aloes', - 'accents' => '1', - 'rejet_periodiques' => '1', - 'id_article_periodique' => '2', - 'type_fichier' => '0', - 'format' => '0', - 'attributs' => 'a:7:{i:0;a:8:{s:8:"type_doc";a:12:{i:0;a:3:{s:4:"code";s:1:"0";s:5:"label";s:0:"";s:8:"zone_995";s:0:"";}i:1;a:3:{s:4:"code";s:1:"1";s:5:"label";s:5:"am;na";s:8:"zone_995";s:22:"LIV;MS;LDV;LVI;LV;LIVC";}i:2;a:3:{s:4:"code";s:1:"2";s:5:"label";s:2:"as";s:8:"zone_995";s:12:"PER;REVC;REV";}i:3;a:3:{s:4:"code";s:1:"3";s:5:"label";s:3:"i;j";s:8:"zone_995";s:17:"CD;LIVCD;LIVK7;K7";}i:4;a:3:{s:4:"code";s:1:"4";s:5:"label";s:1:"g";s:8:"zone_995";s:25:"DIAPO;DVD;VHS;VHD;VD;DVDJ";}i:5;a:3:{s:4:"code";s:1:"5";s:5:"label";s:3:"l;m";s:8:"zone_995";s:3:"CDR";}i:6;a:3:{s:4:"code";s:1:"7";s:5:"label";s:0:"";s:8:"zone_995";s:7:"LCA;LCD";}i:7;a:3:{s:4:"code";s:1:"8";s:5:"label";s:0:"";s:8:"zone_995";s:3:"DOS";}i:8;a:3:{s:4:"code";s:1:"9";s:5:"label";s:0:"";s:8:"zone_995";s:0:"";}i:9;a:3:{s:4:"code";s:2:"10";s:5:"label";s:0:"";s:8:"zone_995";s:6:"WEB;MF";}i:10;a:3:{s:4:"code";s:2:"11";s:5:"label";s:0:"";s:8:"zone_995";s:2:"JV";}i:11;a:3:{s:4:"code";s:3:"100";s:5:"label";s:0:"";s:8:"zone_995";s:0:"";}}s:17:"champ_code_barres";s:1:"f";s:10:"champ_cote";s:1:"k";s:14:"champ_type_doc";s:1:"r";s:11:"champ_genre";s:0:"";s:13:"champ_section";s:1:"q";s:17:"champ_emplacement";s:1:"u";s:12:"champ_annexe";s:1:"b";}i:1;a:1:{s:6:"champs";s:0:"";}i:2;a:1:{s:6:"champs";s:0:"";}i:3;a:1:{s:6:"champs";s:0:"";}i:5;a:3:{s:6:"champs";s:0:"";s:17:"xml_balise_abonne";s:0:"";s:17:"xml_champs_abonne";a:11:{s:6:"IDABON";s:0:"";s:9:"ORDREABON";s:0:"";s:3:"NOM";s:0:"";s:6:"PRENOM";s:0:"";s:9:"NAISSANCE";s:0:"";s:8:"PASSWORD";s:0:"";s:4:"MAIL";s:0:"";s:10:"DATE_DEBUT";s:0:"";s:8:"DATE_FIN";s:0:"";s:7:"ID_SIGB";s:0:"";s:9:"NUM_CARTE";s:0:"";}}i:4;a:5:{s:4:"zone";s:3:"995";s:5:"champ";s:1:"v";s:6:"format";s:1:"3";s:5:"jours";s:0:"";s:7:"valeurs";s:1:"n";}i:6;a:2:{s:4:"zone";s:3:"901";s:5:"champ";s:1:"a";}}' - ]) + ->answers(['id_profil' => 111, + 'libelle' => 'Unimarc Aloes', + 'accents' => '1', + 'rejet_periodiques' => '1', + 'id_article_periodique' => '2', + 'type_fichier' => '0', + 'format' => '0', + 'attributs' => 'a:7:{i:0;a:8:{s:8:"type_doc";a:12:{i:0;a:3:{s:4:"code";s:1:"0";s:5:"label";s:0:"";s:8:"zone_995";s:0:"";}i:1;a:3:{s:4:"code";s:1:"1";s:5:"label";s:5:"am;na";s:8:"zone_995";s:22:"LIV;MS;LDV;LVI;LV;LIVC";}i:2;a:3:{s:4:"code";s:1:"2";s:5:"label";s:2:"as";s:8:"zone_995";s:12:"PER;REVC;REV";}i:3;a:3:{s:4:"code";s:1:"3";s:5:"label";s:3:"i;j";s:8:"zone_995";s:17:"CD;LIVCD;LIVK7;K7";}i:4;a:3:{s:4:"code";s:1:"4";s:5:"label";s:1:"g";s:8:"zone_995";s:25:"DIAPO;DVD;VHS;VHD;VD;DVDJ";}i:5;a:3:{s:4:"code";s:1:"5";s:5:"label";s:3:"l;m";s:8:"zone_995";s:3:"CDR";}i:6;a:3:{s:4:"code";s:1:"7";s:5:"label";s:0:"";s:8:"zone_995";s:7:"LCA;LCD";}i:7;a:3:{s:4:"code";s:1:"8";s:5:"label";s:0:"";s:8:"zone_995";s:3:"DOS";}i:8;a:3:{s:4:"code";s:1:"9";s:5:"label";s:0:"";s:8:"zone_995";s:0:"";}i:9;a:3:{s:4:"code";s:2:"10";s:5:"label";s:0:"";s:8:"zone_995";s:6:"WEB;MF";}i:10;a:3:{s:4:"code";s:2:"11";s:5:"label";s:0:"";s:8:"zone_995";s:2:"JV";}i:11;a:3:{s:4:"code";s:3:"100";s:5:"label";s:0:"";s:8:"zone_995";s:0:"";}}s:17:"champ_code_barres";s:1:"f";s:10:"champ_cote";s:1:"k";s:14:"champ_type_doc";s:1:"r";s:11:"champ_genre";s:0:"";s:13:"champ_section";s:1:"q";s:17:"champ_emplacement";s:1:"u";s:12:"champ_annexe";s:1:"b";}i:1;a:1:{s:6:"champs";s:0:"";}i:2;a:1:{s:6:"champs";s:0:"";}i:3;a:1:{s:6:"champs";s:0:"";}i:5;a:3:{s:6:"champs";s:0:"";s:17:"xml_balise_abonne";s:0:"";s:17:"xml_champs_abonne";a:11:{s:6:"IDABON";s:0:"";s:9:"ORDREABON";s:0:"";s:3:"NOM";s:0:"";s:6:"PRENOM";s:0:"";s:9:"NAISSANCE";s:0:"";s:8:"PASSWORD";s:0:"";s:4:"MAIL";s:0:"";s:10:"DATE_DEBUT";s:0:"";s:8:"DATE_FIN";s:0:"";s:7:"ID_SIGB";s:0:"";s:9:"NUM_CARTE";s:0:"";}}i:4;a:5:{s:4:"zone";s:3:"995";s:5:"champ";s:1:"v";s:6:"format";s:1:"3";s:5:"jours";s:0:"";s:7:"valeurs";s:1:"n";}i:6;a:2:{s:4:"zone";s:3:"901";s:5:"champ";s:1:"a";}}']) ->whenCalled('fetchAll') ->with('select * from codif_emplacement', false) ->answers([ ['id_emplacement' => 54, - 'regles' => '995$u=Littératureadulte'] - ]) + 'regles' => '995$u=Littératureadulte']]) ->whenCalled('fetchAll') ->with('select * from codif_section', false) ->answers([ ['id_section' => 2, - 'regles' => '995$q=A'] - ]) + 'regles' => '995$q=A']]) ->whenCalled('fetchAll') ->with('select * from codif_genre', false) ->answers([ ['id_genre' => 8, - 'regles' => '902$a=Roman'] - ]); + 'regles' => '902$a=Roman']]); $this->loadNotice("unimarc_dimanche_a_la_piscine"); } @@ -664,8 +663,19 @@ class NoticeIntegrationDimancheALaPiscineTest extends NoticeIntegrationAbstract /** @test */ public function exemplairesCountShouldBeOne() { $this->assertEquals(1, count($this->notice_data['exemplaires'])); - } + } + + /** + * @test + * @see #13453 + */ + public function uniciteCodeBarreShouldNotRegress() { + $this->assertTrue( + $this->_mock_sql + ->methodHasBeenCalledWithParams('execute', + ['delete from exemplaires where id_notice=12 and id_bib=1 and code_barres in (\'2060303\')'])); + } } ?>