diff --git a/VERSIONS b/VERSIONS index 421e59787848e8bf05b6335927c54c5cf491ffac..07e22be314f3697eccb856c250ce60c4d067f7aa 100644 --- a/VERSIONS +++ b/VERSIONS @@ -1,3 +1,31 @@ +05/06/2015 - v7.1.36 + + - ticket #24383 : Les balises deviennent autorisées dans la variable TEXT_REPLACEMENTS + + - ticket #24590 : Correction de la navigation dans les kiosques basés sur des domaines + + - ticket #25433 : Mise en place de la pagination sur le moissonage de Numilog + + - ticket #25724 : Corrige le lien du channel dans les flux RSS des articles + + - ticket #22882 : Ajout du numéro de téléphone et de l'adresse email dans les articles liés à des lieux. + + + +02/06/2015 - v7.1.35 + + - ticket #23826 : Correction de la détection des ressources numériques dans la vue notice. + + - ticket #18661 : Dédoublonnage des mails à l'envoi d'une newsletter + + - ticket #23421 : SIGB Pergame : Correction du calcul du rang si plusieur réservations dans la même journée + + - ticket #23632 : Sauvegarde d'un formulaire sans création de doublon (correctif sur l'option d'accessibilité qui requete systématiquement la page) + + - ticket #25404 : Vue notices : bokeh passe aux préférences par défaut si elles n'ont pas pu être correctement enregistré en base de données + + + 26/05/2015 - v7.1.34 - ticket #25066 : Bibliothèque numérique, ajout du connecteur Jamendo diff --git a/VERSIONS_WIP/17871 b/VERSIONS_WIP/17871 new file mode 100644 index 0000000000000000000000000000000000000000..c88627487a927f0158a4cd561d0fc2b2a7ec2723 --- /dev/null +++ b/VERSIONS_WIP/17871 @@ -0,0 +1 @@ +-ticket #17871 : Cosmogramme: ajout du moissonnage OAI au format MarcXML (UPEC) \ No newline at end of file diff --git a/VERSIONS_WIP/25560 b/VERSIONS_WIP/25560 new file mode 100644 index 0000000000000000000000000000000000000000..0078a13b808b81af70004899505bf51404545452 --- /dev/null +++ b/VERSIONS_WIP/25560 @@ -0,0 +1 @@ +-ticket #25560 : boîte article, les articles sont ordonnables par nombre d'avis \ No newline at end of file diff --git a/application/modules/admin/controllers/IndexController.php b/application/modules/admin/controllers/IndexController.php index eef41d8fd3694b9dcd5fc1f106b49272c667f421..5ae8cb50fd06b8fad00600763f669710c6d409f1 100644 --- a/application/modules/admin/controllers/IndexController.php +++ b/application/modules/admin/controllers/IndexController.php @@ -78,6 +78,7 @@ class Admin_IndexController extends ZendAfi_Controller_Action { $this->_redirectClose('admin/index/adminvaredit/cle/'.$id); return; } + $form->getElement('valeur')->addErrors($var->getErrors()); $this->_helper->notify('Erreur(s) : ' . implode(', ', $var->getErrors()) . ', variable '.$id.' NON sauvegardée'); @@ -85,7 +86,7 @@ class Admin_IndexController extends ZendAfi_Controller_Action { $this->view->form = $form; $this->view->admin_var = $var; - $this->view->titre = 'Modifier la variable: ' . $var->getId(); + $this->view->titre = 'Modifier la variable: ' . $var->getId(); } diff --git a/application/modules/admin/views/scripts/modules/_options_cms.phtml b/application/modules/admin/views/scripts/modules/_options_cms.phtml index f76ca1c5a2ff59d55d0d2d054a701d544e3cc2a7..e8faee43fc5ef692a0b943afc470076df0323042 100644 --- a/application/modules/admin/views/scripts/modules/_options_cms.phtml +++ b/application/modules/admin/views/scripts/modules/_options_cms.phtml @@ -1,53 +1,53 @@ <fieldset> <legend>Articles à afficher</legend> <div id="table_selection"> - <?php - echo $this->treeSelect( - $this->preferences["id_items"], - $this->preferences["id_categorie"], - true, - $this->url(array('module' => 'admin', - 'controller' => 'bib', - 'action' => 'articles', - 'id_bib' => $this->id_bib)), - $this->form_selector); - ?> + <?php + echo $this->treeSelect( + $this->preferences["id_items"], + $this->preferences["id_categorie"], + true, + $this->url(array('module' => 'admin', + 'controller' => 'bib', + 'action' => 'articles', + 'id_bib' => $this->id_bib)), + $this->form_selector); + ?> </div> <table cellspacing="2" width="100%"> <tr> <td class="droite">Ordre d'affichage </td> <td class="gauche"> - <?php - echo $this->formRadioButtons("display_order", - $this->preferences["display_order"], - array( - "Selection" => "Par ordre de sélection", - "DateCreationDesc" => "Par date de création (plus récent en premier)", - "DebutPublicationDesc" => "Par date de début de publication (plus récent en premier)", - "EventDebut" => "Par date de début d'événement (plus ancien en premier)", - "Random" => "Par ordre aléatoire")); - ?> + <?php + echo $this->formRadioButtons("display_order", + $this->preferences["display_order"], + ["Selection" => "Par ordre de sélection", + "DateCreationDesc" => "Par date de création (plus récent en premier)", + "DebutPublicationDesc" => "Par date de début de publication (plus récent en premier)", + "EventDebut" => "Par date de début d'événement (plus ancien en premier)", + "CommentCount" => "Par nombre d'avis", + "Random" => "Par ordre aléatoire"]); + ?> </td> </tr> <script type="text/javascript"> - formSelectToggleVisibilityForElement("input.display_order", "#nb_analyse_option", "Random"); - formSelectToggleVisibilityForElement("input.display_order", - "#options_nb_articles", - ["DateCreationDesc", "DebutPublicationDesc", "EventDebut", "Random"]); + formSelectToggleVisibilityForElement("input.display_order", "#nb_analyse_option", "Random"); + formSelectToggleVisibilityForElement("input.display_order", + "#options_nb_articles", + ["DateCreationDesc", "DebutPublicationDesc", "EventDebut", "Random", "CommentCount"]); </script> <tr id="options_nb_articles"> <td class="droite" width="100px">Afficher </td> <td class="gauche"> <span id="nb_articles_aff"> - <input type="text" name="nb_aff" size="2" maxlength="2" + <input type="text" name="nb_aff" size="2" maxlength="2" value="<?php print($this->preferences["nb_aff"]); ?>"> articles </span> <span id="nb_analyse_option" style="display:none"> parmi les - <input type="text" name="nb_analyse" size="2" maxlength="3" + <input type="text" name="nb_analyse" size="2" maxlength="3" value="<?php print($this->preferences["nb_analyse"]); ?>"> plus récents </span> diff --git a/application/modules/opac/controllers/CmsController.php b/application/modules/opac/controllers/CmsController.php index 36bf4fa0ef453bc820fb4a51486d6c33f724d688..8caf1120de1746b89d30cb1141f936ba453cdeea 100644 --- a/application/modules/opac/controllers/CmsController.php +++ b/application/modules/opac/controllers/CmsController.php @@ -200,13 +200,19 @@ class CmsController extends Zend_Controller_Action { } - /** + /** * @see ZendAfi_View_Helper_Accueil_MenuVertical */ public function viewsummaryAction() { $this->_viewArticlesByPreferences($this->_getAllParams()); } + /* + * prevent rss broken links, tix #25724 + */ + public function viewselectionAction() { + $this->_forward('articleviewselection'); + } /** * @see ZendAfi_View_Helper_Accueil_News diff --git a/application/modules/opac/controllers/NoticeajaxController.php b/application/modules/opac/controllers/NoticeajaxController.php index 90b0c79ad171f41f585da77efaa60aa69c4eefa2..cf95d24768007482c708031a75006fe21c5ab0cd 100644 --- a/application/modules/opac/controllers/NoticeajaxController.php +++ b/application/modules/opac/controllers/NoticeajaxController.php @@ -290,21 +290,21 @@ class NoticeAjaxController extends Zend_Controller_Action { public function resnumeriquesAction() { - $html = ''; - $add_album_tag = ''; - if (1 == Class_AdminVar::isBibNumEnabled() && Class_Users::isCurrentUserAdmin()) - $add_album_tag = $this->view->tagAnchor($this->view->url(['module' => 'admin', - 'controller' => 'album', - 'action' => 'link_album_to', - 'id_notice' => $this->id_notice], - null, true), - $this->_('Créer un album'), - ['class' => 'link_album', - 'data-popup' => 'true']); - - if (null !== $exemplaire = Class_Exemplaire::findFirstBy(['id_notice' => $this->id_notice])) - $html .= $this->view->renderAlbum($exemplaire->getAlbum()); - + $html = $add_album_tag = ''; + + if (1 == Class_AdminVar::isBibNumEnabled() + && Class_Users::isCurrentUserAdmin()) + $add_album_tag = $this->view + ->tagAnchor($this->view->url(['module' => 'admin', + 'controller' => 'album', + 'action' => 'link_album_to', + 'id_notice' => $this->id_notice], + null, true), + $this->_('Créer un album'), + ['class' => 'link_album', + 'data-popup' => 'true']); + + $html .= $this->view->renderAlbum($this->notice->getAlbum()); $html .= $this->view->recordAlbums($this->notice); if ('' == $html) diff --git a/application/modules/opac/views/scripts/head.phtml b/application/modules/opac/views/scripts/head.phtml index 04832a80ae62f75689ff9957e98f39ca4023e882..f536c1caecb54c3f67b95256db43381d99c959ad 100644 --- a/application/modules/opac/views/scripts/head.phtml +++ b/application/modules/opac/views/scripts/head.phtml @@ -81,10 +81,10 @@ ->addOPACStyleSheet('bleu_sur_jaune', ['rel' => 'alternate stylesheet', 'title' => $this->_('Bleu sur jaune'), 'data-name' => 'style_bleu_sur_jaune']) - ->cssAddLine($this->_('<link rel="alternate stylesheet" type="text/css" href="#" title="%s" data-name="style_defaut">', + ->cssAddLine($this->_('<link rel="alternate stylesheet" type="text/css" href="" title="%s" data-name="style_defaut">', 'Style par défaut')) - ->cssAddLine('<link id="accessibility_stylesheet" rel="stylesheet" type="text/css" href="#" title="CSS accessibilité">') + ->cssAddLine('<link id="accessibility_stylesheet" rel="stylesheet" type="text/css" href="" title="CSS accessibilité">') ->addAdminScript('jquery.cookie') ->addJQueryReady('initAccessibilityOptions();'); } diff --git a/cosmogramme/java_script/main.js b/cosmogramme/java_script/main.js index 0b004b0f62daa6ae8847790966bfa4b4268e46d0..4d5a6ed2dac352c373e96254f226e9202a55a0ad 100644 --- a/cosmogramme/java_script/main.js +++ b/cosmogramme/java_script/main.js @@ -50,7 +50,7 @@ function activerFormat(sIdProfil) } // Identifiants des objets a afficher - if(sFormat == 0 || sFormat== 6) + if(sFormat == 0 || sFormat == 6 || sFormat == 7) { if(sTypeFichier == "0") sIdBlocFormat="unimarc_0"; else sIdBlocFormat="unimarc_1"; diff --git a/cosmogramme/php/_init.php b/cosmogramme/php/_init.php index ca9c0b6f1e3cd0387aa84d3dbfef5fb982cbceda..d6376314714539341ed802f286851bf333b348d3 100644 --- a/cosmogramme/php/_init.php +++ b/cosmogramme/php/_init.php @@ -1,7 +1,7 @@ <?php error_reporting(E_ERROR | E_PARSE); -define("PATCH_LEVEL","256"); +define("PATCH_LEVEL","259"); define("APPLI","cosmogramme"); define("COSMOPATH", "/var/www/html/vhosts/opac2/www/htdocs"); diff --git a/cosmogramme/php/classes/classe_codif_abstract.php b/cosmogramme/php/classes/classe_codif_abstract.php index 5aeff79af1b8593b9f50adef62611878a8a13895..af46c87b72e0cfd328dcd758076412e9115567d2 100644 --- a/cosmogramme/php/classes/classe_codif_abstract.php +++ b/cosmogramme/php/classes/classe_codif_abstract.php @@ -16,9 +16,9 @@ * * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE * along with BOKEH; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -require_once('trait_singleton.php'); +require_once('Trait/Singleton.php'); abstract class codif_abstract { use trait_singleton; diff --git a/cosmogramme/php/classes/classe_indexation.php b/cosmogramme/php/classes/classe_indexation.php index 987d3f2d5c03de2659f2733560a9c2e1205c915e..fb4b4a2652860d3e2801b01d331e7ad4702cf046 100644 --- a/cosmogramme/php/classes/classe_indexation.php +++ b/cosmogramme/php/classes/classe_indexation.php @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE * along with BOKEH; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ //////////////////////////////////////////////////////////////////////// // CALCUL DES INDEX @@ -29,7 +29,7 @@ class indexation { private $pluriel; // Règles des pluriels private $tableMajFrom, $tableMajTo = []; // Table de transco pour majuscules private $tableMajUtf8; // Table de transco pour majuscules accentuées utf8 - public static $phonetixCache = []; + public static $phonetixCache = []; private $accents = ['É' => 'E', 'È' => 'E', 'Ë' => 'E', 'Ê' => 'E','Ã' => 'A', 'À' => 'A', 'Ä' => 'A', 'Â' => 'A', 'Ã…' => 'A', 'Ã' => 'A', 'Æ' => 'E','Ã' => 'I', 'ÃŽ' => 'I', 'ÃŒ' => 'I', 'Ã' => 'I', 'Ô' => 'O', 'Ö' => 'O', 'Ã’' => 'O', 'Ó' => 'O', 'Õ' => 'O', 'Ø' => 'O', 'Å’' => 'OEU', @@ -39,7 +39,7 @@ class indexation { 'Â' => 'A', 'Ã¥' => 'Ã…', 'ã' => 'Ã', 'æ' => 'Æ', 'ï' => 'Ã', 'î' => 'ÃŽ', 'ì' => 'ÃŒ', 'Ã' => 'Ã', 'ô' => 'Ô', 'ö' => 'Ö', 'ò' => 'Ã’', 'ó' => 'Ó','õ' => 'Õ', 'ø' => 'Ø', 'Å“' => 'Å’', 'ú' => 'Ú', 'ù' => 'Ù', 'û' => 'Û', 'ü' => 'Ü','ç' => 'Ç', 'ñ' => 'Ñ', 'ß' => 'S']; - + // Contructeur (init les règles d'indexation) function __construct() { @@ -50,7 +50,7 @@ class indexation { $this->articles=array("L'","LE ","LA ","LES ","UN ","UNE "); $this->inclu=array("AN","AS","OR","U2","AI","LU","XO","DO","RE","MI","FA","SI","AC","DC","XX","B","C","D","E","F","G","H","I","J","K","M","P","Q","R","S","T","V","W","X","Y","Z","L","YU","UT","LI","OC","PI","ZU","WU","TO","OZ","ZZ","XX"); $this->exclu = array("L","LE","LA","LES","UN","UNE","LES","DES","MES","TES","CES"); - + // Pluriels $this->pluriel=array( array("AIL","AULX"), @@ -100,9 +100,9 @@ class indexation { array("*EU","*EUX"), array("*AU","*AUX") ); - + // Init table ascii pour majuscules - $this->tableMajTo = str_split(str_repeat( " ", 42 ) + $this->tableMajTo = str_split(str_repeat( " ", 42 ) . "* 0123456789 " . "ABCDEFGHIJKLMNOPQRSTUVWXYZ " . "ABCDEFGHIJKLMNOPQRSTUVWXYZ " @@ -130,13 +130,13 @@ class indexation { $titre=$this->alphaMaj($titre); return $titre; } - - // Rend une suite de mots complete pour les formes plurielles + + // Rend une suite de mots complete pour les formes plurielles public function getExpressionRecherche($mot) { $mot=trim($mot); if(!$mot) return false; - + // Pluriel if(strRight($mot,1) == "*") {$etoile="*";$mot=strLeft($mot, strlen($mot)-1);} $m=$this->getPluriel($mot); @@ -145,10 +145,10 @@ class indexation { return trim($ret); } - + public function alphaMaj( $chaine ) { - return trim(str_replace($this->tableMajFrom, - $this->tableMajTo, + return trim(str_replace($this->tableMajFrom, + $this->tableMajTo, utf8_decode($chaine))); } @@ -166,14 +166,14 @@ class indexation { // Rend une clef alpha pour les oeuvres public function getClefOeuvre($titre,$complement_titre,$auteur,$tome) { - $clef.=substr($this->codeAlphaTitre(strtoupper(str_replace(" ","",$titre))),0,80)."-"; + $clef = substr($this->codeAlphaTitre(strtoupper(str_replace(" ","",$titre))),0,80)."-"; $clef.=substr($this->codeAlphaTitre(strtoupper(str_replace(" ","",$complement_titre))),0,20)."-"; $clef.=substr($this->alphaMaj(str_replace(" ","",$auteur)),0,80)."-"; $clef.=$this->alphaMaj($tome); $clef=str_replace(" ","",$clef); return $clef; } - + // Decoupe une expression en mots en tenant compte des exclusions / inclusions public function getMots( $chaine ) { @@ -195,12 +195,12 @@ class indexation { // On garde le mot $new[$index++] = $mot[$i]; } - return $new; + return $new; } -// Rend une chaine de mots dedoublonnes et filtres +// Rend une chaine de mots dedoublonnes et filtres public function getFulltext($data) { - if (gettype($data) != "array") + if (gettype($data) != "array") $data=array($data); $new=" "; @@ -220,7 +220,7 @@ class indexation { } return trim($new); } - + // Rend le mot au singulier et au pluriel public function getPluriel( $mot ) { @@ -263,7 +263,7 @@ class indexation { // Othographe approchante // --------------------------------------------------- function phonetix($sIn) { - if (strlen($sIn)<4 || is_numeric($sIn)) + if (strlen($sIn)<4 || is_numeric($sIn)) return false; /* if (count(static::$phonetixCache) > 60000) { */ @@ -272,11 +272,11 @@ class indexation { /* exit; */ /* } */ - return isset(static::$phonetixCache[$sIn]) + return isset(static::$phonetixCache[$sIn]) ? static::$phonetixCache[$sIn] : static::$phonetixCache[$sIn] = $this->phonetixCompute($sIn); } - + function phonetixCompute($sIn) { //$sIn = utf8_decode($sIn); // Selon votre implémentation, vous aurez besoin de décoder ce qui arrive pour les caractères spéciaux @@ -488,7 +488,7 @@ class indexation { $sIn = preg_replace( '`([^KL]+)T$`', '$1', $sIn ); // sauf KT LT terminal $sIn = preg_replace( '`^[H]`', '', $sIn ); // H pseudo muet en début de mot, je sais, ce n'est pas une terminaison $sBack2=$sIn; // on sauve le code (utilisé pour les mots très courts) - + $convPartIn = [ '`TIL$`', // terminaisons TIL -> TI '`LC$`', // terminaisons LC -> LK @@ -514,7 +514,7 @@ class indexation { '`AING$`', // terminaisons AING -> IN '`([EISOARN])C$`', // terminaisons C -> K '`([ABD-MO-Z]+)[EH]+$`', // terminaisons E ou H sauf pour C et N - '`EN$`', // terminaisons EN -> AN (difficile à faire avant sans avoir des soucis) Et encore, + '`EN$`', // terminaisons EN -> AN (difficile à faire avant sans avoir des soucis) Et encore, '`(NJ)EN$`',// terminaisons EN -> AN '`^PAIEM`', // PAIE -> PAI '`([^NTB])EF$`', // F muet en fin de mot diff --git a/cosmogramme/php/classes/classe_isbn.php b/cosmogramme/php/classes/classe_isbn.php deleted file mode 100644 index 7454cd4200a37ca0842dbe69d62c432d1b14b3f5..0000000000000000000000000000000000000000 --- a/cosmogramme/php/classes/classe_isbn.php +++ /dev/null @@ -1,163 +0,0 @@ -<?PHP -/** - * Copyright (c) 2012, Agence Française Informatique (AFI). All rights reserved. - * - * BOKEH is free software; you can redistribute it and/or modify - * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by - * the Free Software Foundation. - * - * There are special exceptions to the terms and conditions of the AGPL as it - * is applied to this software (see README file). - * - * BOKEH is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU AFFERO GENERAL PUBLIC LICENSE for more details. - * - * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE - * along with BOKEH; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ -//////////////////////////////////////////////////////////////////////// -// ISBN formattage -//////////////////////////////////////////////////////////////////////// - -class class_isbn -{ - private $code_brut; // Code non filtré - private $statut=0; // 0=isbn vide 1=isbn incorrect 2=ok - private $erreur; // Message d'erreur - private $isbn; // ISbn retenu et formatté calculé 10 ou 13 selon le cas - private $isbn10; // ISbn 10 formatté - private $isbn13; // ISbn 13 formatté - private $ean; // Ean formatté - private $pays; // Code pays - private $editeur; // Code editeur - private $numero; // Numéro chez l'éditeur - -// ---------------------------------------------------------------- -// Constructeur (formatte le code) -// ---------------------------------------------------------------- - function __construct($code) - { - $this->code_brut=$code; - $code=trim($code); - if(!$code) return; - - // filtrer - for($i=0;$i < strLen($code); $i++) if($code[$i]>="0" and $code[$i] <="9") $new.= $code[$i]; - - // Tester la longueur - $len = strlen($new); - if($len == 9 or $len == 10) { $this->calculIsbn($new); $this->isbn=$this->isbn10; } - elseif($len < 12 ) - { - $this->statut=1; - $this->erreur="longueur incorrecte (".$len.")"; - } - // code ok - else - { - $this->statut=2; - if(strLeft($new,3) == "978" or strLeft($new,3) == "979") { $this->calculIsbn($new); $this->isbn=$this->isbn13; } - else $this->ean=strleft($new,12).$this->clefEan($new); - } - if($this->isbn13 == '0-00-000000-0') - { - $this->isbn=""; - $this->isbn10=""; - $this->isbn13=""; - } - } -// ---------------------------------------------------------------- -// Rend la structure -// ---------------------------------------------------------------- - function getAll() - { - $ret["code_brut"]=$this->code_brut; - $ret["statut"]=$this->statut; - $ret["erreur"]=$this->erreur; - $ret["isbn"]=$this->isbn; - $ret["isbn10"]=$this->isbn10; - $ret["isbn13"]=$this->isbn13; - $ret["ean"]=$this->ean; - $ret["pays"]=$this->pays; - $ret["editeur"]=$this->editeur; - $ret["numero"]=$this->numero; - return $ret; - } - -// ---------------------------------------------------------------- -// Calcul l'isbn 10 et 13 -// ---------------------------------------------------------------- - private function calculIsbn($code) - { - if(strLeft($code,3)=="978" or strLeft($code,3)=="979") - { - $prefixe13=substr($code,0,3); - $code=substr($code,3); - } - // isbn 10 - for($i=0;$i<9; $i++) - { - $facteur = 10 -$i; - $somme += ((int)$code[$i] * $facteur); - } - $clef= 11 - $somme % 11; - if($clef == 10) $clef="X"; - if($clef == 11) $clef = 0; - $this->isbn10=$this->decoupeIsbn($code,$clef); - - // isbn 13 - if($prefixe13) $code=$prefixe13.$code; else $code="978".$code; - $clef=$this->clefEan($code); - $this->isbn13=$this->decoupeIsbn(substr($code,3,12),$clef); - $this->isbn13=substr($code,0,3)."-".$this->isbn13; - } -// ---------------------------------------------------------------- -// Calcul clef ean -// ---------------------------------------------------------------- - private function clefEan($code) - { - for($i=0; $i<12; $i++) - { - if($i & 1) $facteur=3; else $facteur=1; - $somme += (int)$code[$i] * $facteur; - } - $clef=$somme % 10; - if($clef > 0)$clef=10-$clef; - return $clef; - } -// ---------------------------------------------------------------- -// Decoupage isbn en pays editeur et no de doc -// ---------------------------------------------------------------- - private function decoupeIsbn($code,$clef) - { - $code=strLeft($code,9); - // Pays - $pays=strLeft($code,1); - if($pays < "8") $code=strMid($code,1,10); - elseif($pays == "8") { $pays=strLeft($code,2); $code=strMid($code,2,10);} - else - { - if(strLeft($code,2) < "95") { $pays=strLeft($code,2); $code=strMid($code,2,10);} - elseif(strLeft($code,3) < "996") { $pays=strLeft($code,3); $code=strMid($code,3,10);} - elseif(strLeft($code,4) < "9990") { $pays=strLeft($code,4); $code=strMid($code,4,10);} - else { $pays=strLeft($code,5); $code=strMid($code,5,10);} - } - $this->pays=$pays; - - // editeur - if(strLeft($code,2) < "20") {$editeur=strLeft($code,2); $numero=strMid($code,2,10); } - elseif(strLeft($code,3) < "700") {$editeur=strLeft($code,3); $numero=strMid($code,3,10); } - elseif(strLeft($code,4) < "8500") {$editeur=strLeft($code,4); $numero=strMid($code,4,10); } - elseif(strLeft($code,5) < "90000") {$editeur=strLeft($code,5); $numero=strMid($code,5,10); } - elseif(strLeft($code,6) < "950000") {$editeur=strLeft($code,6); $numero=strMid($code,6,10); } - else {$editeur=strLeft($code,7); $numero=strMid($code,7,10); } - $this->editeur=$editeur; - $this->numero=$numero; - return $pays."-".$editeur."-".$numero."-".$clef; - } -} - -?> \ No newline at end of file diff --git a/cosmogramme/php/classes/classe_liste_notices.php b/cosmogramme/php/classes/classe_liste_notices.php index 2f20444395ac28329ca4b82660f199f4accc70cd..81afc8c7a1720824d981f6b42c1f1a3f9155b554 100644 --- a/cosmogramme/php/classes/classe_liste_notices.php +++ b/cosmogramme/php/classes/classe_liste_notices.php @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE * along with BOKEH; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ ////////////////////////////////////////////////////////////////////////////////////// // CLASSE LISTE DE NOTICES @@ -29,7 +29,7 @@ class liste_notices private $nb_par_page; // Nombre de notices par page private $page; // Derniere page demandee private $fin; // On atteint la fin de la liste - + // ---------------------------------------------------------------- // Constructeur // ---------------------------------------------------------------- @@ -46,7 +46,7 @@ class liste_notices if(!$page) $page=1; $limit = ($page-1) * $this->nb_par_page; $limit = " LIMIT ".$limit.",". $this->nb_par_page; - + $liste=$sql->fetchAll($req.$limit); if(!$liste) return false; foreach($liste as $notice) @@ -67,14 +67,14 @@ class liste_notices if(!$page) $page=1; $limit = ($page-1) * $this->nb_par_page; $limit = " LIMIT ".$limit.",". $this->nb_par_page; - + $liste=$sql->fetchAll($req.$limit); if(!$liste) return false; foreach($liste as $notice) - { + { $valeur=$notice[$colonne]; if($exemplaire == true ) $ret[]=$sql->fetchOne("select id_notice from exemplaires where ".$colonne." ='$valeur'"); - else + else { $ids=$sql->fetchAll("select id_notice from notices where ".$colonne." ='$valeur' order by ".$colonne.""); foreach($ids as $id) $ret[]=$id["id_notice"]; @@ -93,7 +93,7 @@ class liste_notices if(!$page) $page=1; $limit = ($page-1) * $this->nb_par_page; $limit = " LIMIT ".$limit.",". $this->nb_par_page; - + $liste=$sql->fetchAll($req.$limit); if(!$liste) return false; foreach($liste as $enreg) @@ -124,7 +124,7 @@ class liste_notices global $sql; $unimarc=new notice_unimarc(); - + $html[]='<div><table><tr>'; $html[]='<th> </th>'; $html[]='<th>Type</th>'; @@ -140,23 +140,23 @@ class liste_notices $unimarc->ouvrirNotice($bloc["unimarc"],0,0); $titre=$unimarc->getTitrePrincipal(); $url=rendUrlImg("loupe.png", "analyse_afficher_notice_full.php","id_notice=".$id_notice); - + $html[]='<tr>'; $html[]='<td>'.$url.'</td>'; $html[]='<td>'.$type_doc.'</td>'; $html[]='<td>'.$titre.'</td>'; - $html[]='<td>'.$unimarc->getAuteurs(true).'</td>'; + $html[]='<td>'.$unimarc->getAuteurPrincipal().'</td>'; $html[]='<td>'.$unimarc->getEditeur().'</td>'; $html[]='<td>'.$unimarc->getAnnee().'</td>'; $html[]='</tr>'; } $html[]='</table>'; - + // Pager - $url=$_SERVER["PHP_SELF"]; + $url=$_SERVER["PHP_SELF"]; $args=$args_url."&page="; $page=$this->page; - if(!$this->fin) + if(!$this->fin) { $suivant=rendBouton("Page suivante",$url,$args.($page+1)); } @@ -165,7 +165,7 @@ class liste_notices $premier=rendBouton("Retour au début",$url,$args."1").str_repeat(" ",5); $precedent=rendBouton("Page précédente",$url,$args.($page-1)).str_repeat(" ",5); } - $html[]=BR.'<div> '.$premier.$precedent.$suivant.$dernier.'</div></center>'.BR.BR.'</div>'; + $html[]=BR.'<div> '.$premier.$precedent.$suivant.$dernier.'</div></center>'.BR.BR.'</div>'; return implode($html); } @@ -195,7 +195,7 @@ class liste_notices $unimarc->ouvrirNotice($bloc["unimarc"],0,0); $notice=$unimarc->getNoticeIntegrationArticlePeriodique(); $titre=$unimarc->getTitrePrincipal(); - $auteur=$unimarc->getAuteurs(true); + $auteur=$unimarc->getAuteurPrincipal(); $annee=$unimarc->getAnnee(); $url=rendUrlImg("loupe.png", "analyse_afficher_notice_periodique.php","id_notice=".$id_article); diff --git a/cosmogramme/php/classes/classe_maj_auto.php b/cosmogramme/php/classes/classe_maj_auto.php index be00c6e17e708e402902423dc4ff160823bbd787..bd4a1349611e64c03d6c4485e69cdcfff709f643 100644 --- a/cosmogramme/php/classes/classe_maj_auto.php +++ b/cosmogramme/php/classes/classe_maj_auto.php @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE * along with BOKEH; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ ////////////////////////////////////////////////////////////////////////////////////// // CLASSE pour la table maj_auto @@ -25,7 +25,7 @@ class maj_auto { private $clsbib; // Classe bibliotheque - + // ---------------------------------------------------------------- // Constructeur // ---------------------------------------------------------------- @@ -34,7 +34,7 @@ class maj_auto require_once("classe_bib.php"); $this->clsbib=new bibliotheque(); } - + // ---------------------------------------------------------------- // Liste des programmations triées par bibliotheques // ---------------------------------------------------------------- @@ -54,105 +54,8 @@ class maj_auto } return $ret; } -// ---------------------------------------------------------------- -// Déplacement des fichiers du dossier transferts vers integration -// ---------------------------------------------------------------- - public function transfertfichiersFtp() - { - global $log,$sql; - // Init path - $ftp_path=getVariable("ftp_path"); - $integration_path=getVariable("integration_path"); - if( ! $ftp_path) return "La variable ftp_path n'est pas définie"; - if( ! $integration_path) return "La variable integration_path n'est pas définie"; - $log->ecrire('<table class="blank" cellspacing="0" cellpadding="5px">'); - - // Lire maj_auto - $lignes=$sql->fetchAll("select * from int_maj_auto order by rang") ; - foreach($lignes as $ligne) - { - $id_bib = $ligne["id_bib"]; - $profil = $ligne["profil"]; - $type_fichier=fetchOne("select type_fichier from profil_donnees where id_profil=$profil"); - $type_operation = $ligne["type_operation"]; - $type_doc=$ligne["type_doc"]; - $log->ecrire( '<tr><td class="blank"><span class="bib">' . $this->clsbib->getNomCourt($id_bib) .'</span></td><td class="blank">'.$ligne["nom_fichier"].'</td><td class="blank">'); - - // Déplacement du fichier - $ficFtp = $this->getNomFicUpload($ftp_path,$ligne["nom_fichier"]); - $id_upload = getVariable("ID_upload")+1; - $ficNew = "integre".$id_upload.".pan"; - if($ficFtp and is_file($ficFtp)) - { - // controle de la taille pour les imports totaux - if($ligne['taille_min_import_total'] > 0 and $type_fichier==0 and $type_operation==2) - { - $taille_fic= filesize($ficFtp); - if($taille_fic>0) $taille_fic=(int)(($taille_fic/1024)/1024); - if($taille_fic < $ligne['taille_min_import_total']) - { - $log->ecrire('<span class="rouge">Le fichier est trop petit : '.$taille_fic.' mo -> taille minimun attendue : '.$ligne['taille_min_import_total'].' mo</span></td>'); - continue; - } - } - - if(@rename($ficFtp, $integration_path.$ficNew) == true) - { - $log->ecrire('<span class="vert">transfert vers '.$ficNew .'</span></td>'); - $date=dateDuJour(0); - $sql->execute("insert into integrations(id_bib,type_operation,profil,type_doc,date_transfert,fichier,traite) - Values($id_bib,$type_operation,$profil,'$type_doc','$date','$ficNew','non')"); - setVariable("ID_upload",$id_upload); - } - else - { - $log->ecrire('<span class="rouge">erreur au transfert du fichier</span></td>'); - incrementeVariable("traitement_erreurs"); - } - } - else $log->ecrire("pas de transfert</td>"); - } - $log->ecrire('</table>'); - } - -// ---------------------------------------------------------------- -// Nom de fichier et recherche si le fichier commence par [DATE] -// ---------------------------------------------------------------- - public function getNomFicUpload($ftp_path,$nomfic) - { - global $log; - - if(!$ftp_path) $ftp_path=getVariable("ftp_path"); - if(strpos($nomfic,"[DATE]") === false) return $ftp_path.$nomfic; - // parcourir le dossier pour chercher le fichier - $nomfic=str_replace("[DATE]","",$nomfic); - while(true) - { - if (false===$pos=strpos($nomfic,"/")) - $pos=strpos($nomfic,"-"); - if($pos===false) break; - $pos++; - $ftp_path.=substr($nomfic,0,$pos); - $nomfic=substr($nomfic,$pos); - } - - if (!$dir = opendir($ftp_path)) { - $log->ecrire('<span class="rouge">répertoire inaccessible: '.$ftp_path.'</span>'); - incrementeVariable("traitement_erreurs"); - return null; - } - - while (($file = readdir($dir)) !== false) - { - if(strpos($file,$nomfic)===false) continue; - $ret=$ftp_path.$file; - break; - } - closedir($dir); - return $ret; - } // ---------------------------------------------------------------- // Suppression des fichiers d'entete pergame diff --git a/cosmogramme/php/classes/classe_notice_archive_calice.php b/cosmogramme/php/classes/classe_notice_archive_calice.php index 8ffd5cb412925a70ea01f0d4b37c080347e766df..d7e506170ea7c9be44b565da735edc9f2fd7190f 100644 --- a/cosmogramme/php/classes/classe_notice_archive_calice.php +++ b/cosmogramme/php/classes/classe_notice_archive_calice.php @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE * along with BOKEH; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ ////////////////////////////////////////////////////////////////////////////////////// // CLASSE NOTICE POUR LES ARCHIVES DE CALICE68 @@ -33,15 +33,15 @@ class notice_archive_calice private $erreur; // Erreur bloquante // ---------------------------------------------------------------- -// Constructeur +// Constructeur // ---------------------------------------------------------------- function __construct() { require_once("classe_profil_donnees.php"); require_once("classe_indexation.php"); - require_once("classe_isbn.php"); + require_once("Class/Isbn.php"); require_once("classe_unimarc.php"); - + $this->profil=new profil_donnees(); $this->indexation=new indexation(); } @@ -69,7 +69,7 @@ class notice_archive_calice $notice["statut"] = 0; $notice["id_origine"]=$this->getIdOrigine(); $notice["type_doc"] = 1; - + // Isbn /ean $trav=$this->getIsbn(); if($trav["statut"] == 1) $warnings[]=array("isbn incorrect",$trav["code_brut"]); @@ -118,7 +118,7 @@ class notice_archive_calice $ex["activite"]="à consulter sur place"; $ex["id_origine"]=trim($this->champs[0]); $ret["exemplaire"]=$ex; - + $statut["nb_ex"]=1; $statut["nb_ex_detruits"]=0; if(!$ex["code_barres"]) $statut["codes_barres"]=0; else $statut["codes_barres"]=1; diff --git a/cosmogramme/php/classes/classe_notice_ascii.php b/cosmogramme/php/classes/classe_notice_ascii.php index 0000be128075b41e693fad852c8a6f7357340199..6f712f6eaee7a5c8e848e212adf6da2ff26a2699 100644 --- a/cosmogramme/php/classes/classe_notice_ascii.php +++ b/cosmogramme/php/classes/classe_notice_ascii.php @@ -16,10 +16,10 @@ * * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE * along with BOKEH; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ ////////////////////////////////////////////////////////////////////////////////////// -// CLASSE NOTICE AU FORMAT ASCII +// CLASSE NOTICE AU FORMAT ASCII ////////////////////////////////////////////////////////////////////////////////////// class notice_ascii @@ -33,13 +33,13 @@ class notice_ascii private $erreur; // Erreur bloquante // ---------------------------------------------------------------- -// Constructeur +// Constructeur // ---------------------------------------------------------------- function __construct() { require_once("classe_profil_donnees.php"); require_once("classe_indexation.php"); - + $this->profil=new profil_donnees(); $this->indexation=new indexation(); } @@ -51,7 +51,7 @@ class notice_ascii { // Traitement du profil if($this->id_profil != $id_profil) - { + { $this->id_profil=$id_profil; $profil=$this->profil->getProfil($id_profil); $format=$profil["format"]; @@ -59,8 +59,20 @@ class notice_ascii $this->champs=explode(";",$profil["attributs"][$format]["champs"]); } unset($this->enreg); - $this->enreg["data"]=$data; - $data=explode(chr(9),$data); + $this->enreg = ['data' => $data, + 'type_doc' => 0, + 'titre_princ' => '', + 'auteurs' => [], + 'editeur' => '', + 'collection' => '', + 'matieres' => [], + 'tome_alpha' => '', + 'annee' => '', + 'isbn' => '', + 'ean' => '', + 'cote' => '', + 'activite' => '']; + $i=0; foreach($this->champs as $champ) { @@ -101,16 +113,17 @@ class notice_ascii $notice["unimarc"] = ""; $notice["data"] = $this->enreg["data"]; $notice["warnings"]=array(); - + $notice["id_commerciale"] = ''; + if($this->enreg["isbn"]) - { + { $ret=$this->getIsbn($this->enreg["isbn"]); $notice["isbn"]=$ret["isbn"]; $notice["isbn10"]=$ret["isbn10"]; $notice["isbn13"]=$ret["isbn13"]; } elseif($this->enreg["ean"]) $notice["ean"]=$this->getEan($this->enreg["ean"]); - + $ex=$this->getExemplaire(); $notice["statut_exemplaires"] = $ex["statut_exemplaires"]; $notice["exemplaires"][0] = $ex["exemplaire"]; @@ -126,7 +139,7 @@ class notice_ascii $ex["activite"]=$this->enreg["activite"]; if( !$ex["activite"] ) $ex["activite"]="non disponible"; $ret["exemplaire"]=$ex; - + $statut["nb_ex"]=1; $statut["nb_ex_detruits"]=0; if(!$ex["code_barres"]) $statut["codes_barres"]=0; else $statut["codes_barres"]=1; @@ -141,7 +154,7 @@ class notice_ascii public function getIsbn($isbn) { $isbn=trim($isbn); - if($isbn) + if($isbn) { $oIsbn=new class_isbn($isbn); $ret=$oIsbn->getAll(); @@ -157,7 +170,7 @@ class notice_ascii public function getEan($ean) { $ean=trim($ean); - if($ean) + if($ean) { $oIsbn=new class_isbn($ean); $ean=$oIsbn->getAll(); diff --git a/cosmogramme/php/classes/classe_notice_avenio.php b/cosmogramme/php/classes/classe_notice_avenio.php index 3636d9441233d6fbe49216f151a34de7b755d397..4ae9ff360b7be93ee0887a010e1ec2ecd0348ffd 100644 --- a/cosmogramme/php/classes/classe_notice_avenio.php +++ b/cosmogramme/php/classes/classe_notice_avenio.php @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE * along with BOKEH; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ ////////////////////////////////////////////////////////////////////////////////////// // CLASSE NOTICE POUR LES ARCHIVES DE ST-CLAUDE HAUT JURA @@ -35,15 +35,15 @@ class notice_avenio private $nb_champs; // nombre de champs attendus // ---------------------------------------------------------------- -// Constructeur +// Constructeur // ---------------------------------------------------------------- function __construct($id_bib) { require_once("classe_profil_donnees.php"); require_once("classe_indexation.php"); - require_once("classe_isbn.php"); + require_once("Class/Isbn.php"); require_once("classe_unimarc.php"); - + $this->id_bib=$id_bib; $this->profil=new profil_donnees(); $this->indexation=new indexation(); @@ -66,12 +66,12 @@ class notice_avenio // Rend la structure complète pour l'integration // ---------------------------------------------------------------- public function getNoticeIntegration() - { + { $notice["warnings"]=array(); $notice["statut"] = 0; $notice["id_origine"]=$this->getIdOrigine(); $notice["type_doc"] = 1; - + // supprimer la ligne d'entete if($notice["id_origine"]=='Num_Inventaire') { @@ -79,7 +79,7 @@ class notice_avenio $notice["statut"] = 1; return $notice; } - + // Isbn /ean $trav=$this->getIsbn(); if($trav["statut"] == 1) $warnings[]=array("isbn incorrect",$trav["code_brut"]); @@ -116,7 +116,7 @@ class notice_avenio $ex=$this->getExemplaire(); $notice["statut_exemplaires"] = $ex["statut_exemplaires"]; $notice["exemplaires"][0] = $ex["exemplaire"]; - + return $notice; } // ---------------------------------------------------------------- @@ -130,7 +130,7 @@ class notice_avenio if($this->id_bib) $ex['annexe']=$this->id_bib; $ex["id_origine"]=$this->getIdOrigine(); $ret["exemplaire"]=$ex; - + $statut["nb_ex"]=1; $statut["nb_ex_detruits"]=0; if(!$ex["code_barres"]) $statut["codes_barres"]=0; else $statut["codes_barres"]=1; @@ -164,7 +164,7 @@ class notice_avenio { return trim($this->champs[8]); } - + // ---------------------------------------------------------------- // Auteurs // ---------------------------------------------------------------- diff --git a/cosmogramme/php/classes/classe_notice_integration.php b/cosmogramme/php/classes/classe_notice_integration.php index 50732bc61215987984ca032d30ba52a8552a3cda..80301f81ed901049b6413fb08d26b0e45941ae6d 100644 --- a/cosmogramme/php/classes/classe_notice_integration.php +++ b/cosmogramme/php/classes/classe_notice_integration.php @@ -19,7 +19,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -require_once("classe_isbn.php"); +require_once("Class/Isbn.php"); require_once("classe_indexation.php"); require_once("classe_unimarc.php"); require_once("classe_codif_matiere.php"); @@ -32,8 +32,6 @@ class notice_integration { const STATUS_NOTFOUND = 'non trouvée'; - const SEARCH_MODE_ALPHAKEY = 1; - private $id_profil; // Id du profil de données initialisé private $format; // Format de fichier 0=unimarc private $id_article_periodique; // Mode d'indentification des articles de periodiques @@ -61,8 +59,8 @@ class notice_integration { public function __construct() { $this->indexation=new indexation(); - $this->filtrer_fulltext=getVariable("filtrer_fulltext"); - $this->mode_doublon=getVariable("mode_doublon"); + $this->filtrer_fulltext = Class_CosmoVar::get("filtrer_fulltext"); + $this->mode_doublon = Class_CosmoVar::get("mode_doublon"); $this->notice_sgbd=new notice_unimarc(); } @@ -101,7 +99,8 @@ class notice_integration { switch($format) { // Unimarc - case 0: + case Class_IntProfilDonnees::FORMAT_UNIMARC: + case Class_IntProfilDonnees::FORMAT_UNIMARC_XML: $this->analyseur=new notice_unimarc(); break; // archives calice @@ -115,7 +114,7 @@ class notice_integration { $this->analyseur=new notice_avenio($id_bib); break; // marc21 - case 6: + case Class_IntProfilDonnees::FORMAT_MARC21: require_once("classe_notice_marc21.php"); $this->analyseur=new notice_marc21(); break; @@ -187,7 +186,9 @@ class notice_integration { $clef_chapeau=$this->notice["clef_chapeau"]; $clef_numero=addslashes($this->notice["tome_alpha"]); $date=dateDuJour(0); - $sql->execute("delete from notices_articles where clef_chapeau='$clef_chapeau' and clef_numero='$clef_numero' and date_maj!='$date'"); + Class_Notice_SerialArticles::deleteBy(['clef_chapeau' => $clef_chapeau, + 'clef_numero' => $clef_numero, + 'date_maj not' => $date]); } // opsys indexpresse : on cree les articles manquants @@ -440,7 +441,7 @@ class notice_integration { ['ean', $this->notice['ean']], ['id_commerciale', $this->notice['id_commerciale']]]; - if ($this->mode_doublon == static::SEARCH_MODE_ALPHAKEY) + if ($this->mode_doublon == Class_CosmoVar::DOUBLE_SEARCH_ALPHA_KEY) $attributes = [['clef_alpha', $this->notice['clef_alpha']]]; $this->identification = ['statut' => static::STATUS_NOTFOUND]; @@ -502,8 +503,6 @@ class notice_integration { private function insertNotice() { - global $sql; - if(!$this->notice["statut_exemplaires"]["nb_ex"]) { $this->erreur = "notice sans exemplaire"; $this->statut = 0; @@ -515,7 +514,6 @@ class notice_integration { if($this->notice["isbn"] or $this->notice["ean"] or $this->notice["id_commerciale"]) { $id_bib=$this->id_bib; $data=serialize($this->notice); - //$sql->execute("delete from notices_succintes where id_bib=$id_bib and profil=$profil and data='".utf8_encode(addslashes($data))."'"); $id_succinte=$sql->insert("notices_succintes",compact("id_bib","data")); $this->statut=7; return false; @@ -748,12 +746,13 @@ class notice_integration { return false; } + $notice = Class_Notice::find($id_notice); + foreach($exemplaires as $exemplaire) { + $notice->removeExemplaire($exemplaire); + } - foreach($exemplaires as $exemplaire) - $exemplaire->delete(); - - Class_Notice::find($id_notice)->setDateMaj(dateDuJour(2)) - ->save(); + $notice->setDateMaj(dateDuJour(2)) + ->save(); } @@ -761,8 +760,11 @@ class notice_integration { global $sql; $facettes = []; + $notice_facettes = isset($this->notice["facettes"]) + ? $this->notice["facettes"] + : ''; // Virer les facettes sauf les tags - foreach(explode(' ', $this->notice["facettes"]) as $facet) { + foreach(explode(' ', $notice_facettes) as $facet) { $tp=substr($facet, 0, 1); if($tp =="Z") $facettes []= $facet; @@ -775,6 +777,7 @@ class notice_integration { } // Dewey + $this->notice["full_dewey"] = ''; if($this->notice["dewey"]) { foreach($this->notice["dewey"] as $indice) @@ -790,13 +793,17 @@ class notice_integration { $facettes[]="D".$indice; } } + // Pcdm4 - if($this->notice["pcdm4"]) - { - $indice=$this->notice["pcdm4"]; - $enreg=$sql->fetchEnreg("Select * from codif_pcdm4 where id_pcdm4='$indice'"); - if(!$enreg["id_pcdm4"]) $sql->insert("codif_pcdm4",array("id_pcdm4"=>$indice)); - else $this->notice["full_dewey"].=$enreg["libelle"]." "; + if($this->notice["pcdm4"]) { + $indice = $this->notice["pcdm4"]; + if (!$pcdm4 = Class_CodifPcdm4::find($indice)) { + $pcdm4 = Class_CodifPcdm4::newInstance(['id_pcdm4' => $indice, + 'libelle' => '']); + $pcdm4->save(); + } + + $this->notice["full_dewey"] .= $pcdm4->getLibelle()." "; $facettes[]="P".$indice; } @@ -863,7 +870,7 @@ class notice_integration { { foreach($this->notice["langues"] as $langue) { - if (codif_langue::getInstance()->isCodifExists($langue)) + if (Class_CodifLangue::find($langue)) $facettes[]="L".$langue; else $this->notice["warnings"][]=array("Code langue non reconnu",$langue); @@ -871,17 +878,18 @@ class notice_integration { } // genres - if(count($this->notice["genres"])) + if(isset($this->notice["genres"]) && count($this->notice["genres"])) { - foreach($this->notice["genres"] as $genre) + foreach(array_filter($this->notice["genres"]) as $genre) { $facettes[]="G".$genre." "; - $this->notice["full_dewey"].=fetchOne('select libelle from codif_genre where id_genre='.$genre).' '; + if ($codif_genre = Class_CodifGenre::find($genre)) + $this->notice["full_dewey"].=$codif_genre->getLibelle(); } } // emplacements - if (count($this->notice['emplacements'])) + if (isset($this->notice["emplacements"]) && count($this->notice['emplacements'])) $facettes = array_merge($facettes, array_map(function($e) { return "E$e";}, $this->notice['emplacements'])); // Maj enreg facette @@ -890,25 +898,22 @@ class notice_integration { public function getFacetteAuteur($auteur) { - global $sql; $code_alpha = $this->indexation->alphaMaj($auteur); if (!$code_alpha = str_replace(" ","x",$code_alpha)) return; - $enreg = $sql->fetchEnreg("Select * from codif_auteur where MATCH(formes) AGAINST('\"".$code_alpha."\"' IN BOOLEAN MODE)"); - if(!$enreg['id_auteur']) { + if (!$codif_auteur = Class_CodifAuteur::findByCodeAlpha($code_alpha)) { $nom_prenom = (-1 < $pos=strscan($auteur,"|")) ? trim(substr($auteur,($pos+1))." ".substr($auteur,0,$pos)) : $auteur; - $id_auteur = $sql->insert("codif_auteur", - ['libelle' => $nom_prenom, - 'formes' => $code_alpha]); + $codif_auteur = Class_CodifAuteur::newInstance() + ->setLibelle($nom_prenom) + ->setFormes($code_alpha); + $codif_auteur->save(); } - else - $id_auteur=$enreg['id_auteur']; - return 'A'.$id_auteur; + return 'A'.$codif_auteur->getId(); } // -------------------------------------------------------------------------------- @@ -950,23 +955,23 @@ class notice_integration { $enreg["qualite"]=$this->qualite_bib; // cherche la notice - if($clef_unimarc) - { - $enreg_existe=$sql->fetchEnreg("select * from notices_articles where clef_unimarc='$clef_unimarc'"); - $enreg["clef_chapeau"]=$enreg_existe["clef_chapeau"]; - $enreg["clef_numero"]=$enreg_existe["clef_numero"]; + if($clef_unimarc) { + if ($article = Class_Notice_SerialArticles::findFirstBy(['clef_unimarc' => $clef_unimarc])) { + $enreg["clef_chapeau"] = $article->getClefChapeau(); + $enreg["clef_numero"] = $article->getClefNumero(); + } } - else $enreg_existe=$sql->fetchEnreg("select id_article,qualite from notices_articles where clef_chapeau='".$clef_chapeau."' and clef_numero='".$clef_numero."' and clef_article='$clef_article'" ); + else + $article = Class_Notice_SerialArticles::findFirstBy(['clef_chapeau' => $clef_chapeau, + 'clef_numero' => $clef_numero, + 'clef_article' => $clef_article]); // ecrire - if($enreg_existe["id_article"]) + if($article) { - $id_article=$enreg_existe["id_article"]; - // remplacer si qualite superieure ou egale - if($enreg["qualite"] >= $enreg_existe["qualite"]) - { - $sql->update("update notices_articles set @SET@ where id_article=$id_article",$enreg); + if($enreg["qualite"] >= $article->getQualite()) { + $article->updateAttributes($enreg)->save(); $this->statut=5; } } diff --git a/cosmogramme/php/classes/classe_profil_donnees.php b/cosmogramme/php/classes/classe_profil_donnees.php index 73d07c562279eda7a333e3e965df31aa4be4e735..fecfec429c9981291584382c1c2f0cb69d1edeee 100644 --- a/cosmogramme/php/classes/classe_profil_donnees.php +++ b/cosmogramme/php/classes/classe_profil_donnees.php @@ -32,14 +32,11 @@ class profil_donnees { private $type_fichier=0; // Type de fichier à parser (variable type_fichier) private $format; // Format du fichier à parser (variable import_format) private $attributs; // Bloc de donnees associe au format - private $varTypeDoc; // Liste des types de docs définie dans les variables - - function __construct() { - $this->varTypeDoc = getCodifsVariable("types_docs"); - } public function lire($id_profil) { + $all_type_docs = Class_TypeDoc::findAll(); + // Profils d'homogeneisation : -1= isbn -2=ean if ($id_profil < 0) { $this->getProfilStandard($id_profil); @@ -65,10 +62,9 @@ class profil_donnees { $this->attributs=array(); // Init structure unimarc - foreach($this->varTypeDoc as $td) { - $td["label"]=array(); - $td["zone_995"]=array(); - $this->attributs[0]["type_doc"][]=$td; + foreach($all_type_docs as $type_doc) { + $this->attributs[0]["type_doc"][] = ['label' => [], + 'zone_995' => []]; } return 0; } @@ -85,25 +81,22 @@ class profil_donnees { // Decompacter et consolider les types de docs $td=$this->attributs[0]["type_doc"]; - for($i=0;$i < count($this->varTypeDoc); $i++) - { - $this->attributs[0]["type_doc"][$i]["code"]=$this->varTypeDoc[$i]["code"]; - $this->attributs[0]["type_doc"][$i]["libelle"]=$this->varTypeDoc[$i]["libelle"]; - $this->attributs[0]["type_doc"][$i]["label"] = array(); - $this->attributs[0]["type_doc"][$i]["zone_995"] = array(); - for($j=0; $j < count($td); $j++) - { - if($td[$j]["code"]==$this->varTypeDoc[$i]["code"]) - { - $this->attributs[0]["type_doc"][$i]["label"]=explode(";",$td[$j]["label"]); - $this->attributs[0]["type_doc"][$i]["zone_995"]=explode(";",$td[$j]["zone_995"]); - break; - } - } + foreach($all_type_docs as $i => $type_doc) { + $this->attributs[0]["type_doc"][$i]["code"] = $type_doc->getId(); + $this->attributs[0]["type_doc"][$i]["libelle"] = $type_doc->getLibelle(); + $this->attributs[0]["type_doc"][$i]["label"] = array(); + $this->attributs[0]["type_doc"][$i]["zone_995"] = array(); + for($j=0; $j < count($td); $j++) { + if ($type_doc->getId()==21) xdebug_break(); + if($td[$j]["code"] == $type_doc->getId()) { + $this->attributs[0]["type_doc"][$i]["label"]=explode(";",$td[$j]["label"]); + $this->attributs[0]["type_doc"][$i]["zone_995"]=explode(";",$td[$j]["zone_995"]); + break; + } } + } // decompacter et consolider champs xml - $xml=$this->attributs[5]["xml_champs_abonne"]; $champs=getCodifsVariable("champs_abonne"); foreach($champs as $champ) { $code=$champ["code"]; @@ -124,6 +117,10 @@ class profil_donnees { $profil["format"]=$this->format; $profil["attributs"]=$this->attributs; if(!$profil["attributs"][0]["champ_cote"]) $profil["attributs"][0]["champ_cote"]="k"; + + if(!isset($profil["attributs"][0]["champ_url"])) + $profil["attributs"][0]["champ_url"] = ['zone' => '', 'champ' => '']; + return $profil; } @@ -175,7 +172,7 @@ class profil_donnees { public function getTypeDoc($label, $z995r, $z995p) { - if (strToUpper(substr(trim($z995p), 0, 1)) == 'P') + if (isset($z995p[0]) && (strToUpper(substr(trim($z995p[0]), 0, 1)) == 'P')) return ['code' => 2, 'libelle' => 'Périodiques']; if ($this->isArticlePeriodique($label)) @@ -199,7 +196,9 @@ class profil_donnees { public function isTypeDocMatchOneBiblioItem($z995, $td) { $z995 = array_map('strtolower', $z995); - $identification_codes = array_map('strtolower', array_filter($td["zone_995"])); + $identification_codes = is_array($td["zone_995"]) + ? array_map('strtolower', array_filter($td["zone_995"])) + : []; foreach($identification_codes as $identification_code) { if ($z995[0] == $identification_code) @@ -210,7 +209,7 @@ class profil_donnees { public function isTypeDocMatchLabel($label, $td) { - if (!trim($label)) + if (!trim($label) || !is_array($td["label"])) return false; foreach(array_filter($td["label"]) as $item) { diff --git a/cosmogramme/php/classes/classe_unimarc.php b/cosmogramme/php/classes/classe_unimarc.php index f8ccc45faedc9a2f07df68de4c38d6705680c0b2..35f82a9edbb01d13e563f87c6f9317bc7ba18734 100644 --- a/cosmogramme/php/classes/classe_unimarc.php +++ b/cosmogramme/php/classes/classe_unimarc.php @@ -24,7 +24,7 @@ require_once 'classe_iso2709.php'; require_once 'classe_dewey.php'; require_once 'classe_pcdm4.php'; require_once 'classe_indexation.php'; -require_once 'classe_isbn.php'; +require_once("Class/Isbn.php"); require_once 'classe_codif_cache.php'; @@ -84,6 +84,24 @@ class notice_unimarc extends iso2709_record { } + public function updateItemsWithUrl(&$exemplaires) { + if (!$champ_url = $this->profil['attributs'][Class_IntProfilDonnees::FT_RECORDS]['champ_url']) + return $this; + + $url = (10 > (int)$champ_url['zone']) + ? $this->get_subfield($champ_url['zone']) + : $this->get_subfield($champ_url['zone'], $champ_url['champ']); + + if (!isset($url[0])) + return $this; + + foreach($exemplaires as $i => $exemplaire) + $exemplaires[$i]['url'] = $url[0]; + + return $this; + } + + public function getNoticeIntegration() { $type_doc = $this->getTypeDoc(true); if($type_doc['code'] == 100) @@ -96,6 +114,9 @@ class notice_unimarc extends iso2709_record { $ex = $this->getExemplaires(); $warnings = $ex['warnings']; + //external url + $this->updateItemsWithUrl($ex['exemplaires']); + // Isbn /ean $trav = $this->getIsbn(); if($trav['statut'] == 1) @@ -111,7 +132,7 @@ class notice_unimarc extends iso2709_record { } // Virer ISBN si autre que livre - if ($type_doc["code"] != 1) { + if ($type_doc["code"] != Class_TypeDoc::LIVRE) { $trav['isbn10'] = $trav['isbn13'] = $isbn = ''; } @@ -133,9 +154,12 @@ class notice_unimarc extends iso2709_record { $notice["auteurs"] = $this->getAuteurs(); $notice["auteurs_renvois"] = $this->getAuteursRenvois(); // si pas d'auteur on prend le 200$f - if(!$notice["auteurs"]) + if(!$notice["auteurs"]) { $notice["200_f"] = $this->get200f(); - $notice["alpha_auteur"] = $this->indexation->alphaMaj($notice["auteurs"][0]); + $notice["alpha_auteur"] = ''; + } else { + $notice["alpha_auteur"] = $this->indexation->alphaMaj($notice["auteurs"][0]); + } $notice["editeur"] = $this->getEditeur(); $notice["collection"] = $this->getCollection(); $notice["matieres"] = $this->getMatieres(); @@ -155,11 +179,10 @@ class notice_unimarc extends iso2709_record { $notice["champs_forces"] = $this->getChampsForces(); $notice["interet"] = $this->getCentreInteret(); $notice["statut_exemplaires"] = $ex["statut_exemplaires"]; - $notice["exemplaires"] = $ex["exemplaires"]; + $notice["exemplaires"] = isset($ex["exemplaires"]) ? $ex["exemplaires"] : []; // Analyse sections, genres et emplacements - if ($notice["dewey"]) - $notice['genre'] = $this->id_genre_documentaire; + $notice['genre'] = $notice["dewey"] ? $this->id_genre_documentaire : 0; $ret = $this->getSectionGenre($notice["genre"]); @@ -175,12 +198,12 @@ class notice_unimarc extends iso2709_record { if($exemplaire["emplacement"]) $notice["emplacements"][] = $exemplaire["emplacement"]; - if($exemplaire["genre"]) + if(isset($exemplaire["genre"])) $notice["genres"][] = $exemplaire["genre"]; elseif (!empty($ret['genre'])) $notice["exemplaires"][$i]["genre"] = $ret["genre"][0]; - if (!$notice['cote'] and $exemplaire['cote']) + if (!$notice['cote'] && $exemplaire['cote']) $notice['cote'] = $exemplaire['cote']; } } @@ -245,30 +268,36 @@ class notice_unimarc extends iso2709_record { // ---------------------------------------------------------------------------- // Identifiants des articles de periodiques a partir de la notice du numero // ---------------------------------------------------------------------------- - private function getIdArticlesPeriodiques() - { + private function getIdArticlesPeriodiques() { // opsys indexpresse - if($this->profil["id_article_periodique"] == 2) - { - $data=$this->get_subfield("462","3"); - if(!trim($data[0])) return false; + if ($this->profil["id_article_periodique"] != 2) + return []; - $ret["articles"]=$data; - $chapeau=$this->get_subfield("461","t"); - $ret["clef_chapeau"]=$this->indexation->codeAlphaTitre($chapeau[0]); - $numero=$this->get_subfield("461","v"); + $ret = []; - if(!$numero) $numero=$this->get_subfield("200","h"); + $data=$this->get_subfield("462","3"); + if(!trim($data[0])) + return []; + + $ret["articles"]=$data; + $chapeau=$this->get_subfield("461","t"); + $ret["clef_chapeau"]=$this->indexation->codeAlphaTitre($chapeau[0]); + $numero=$this->get_subfield("461","v"); + + if(!$numero) $numero=$this->get_subfield("200","h"); + + $ret["clef_numero"]=$this->indexation->alphaMaj($numero[0]); + + if (!$ret["clef_chapeau"] or !$ret["clef_numero"]) + return []; - $ret["clef_numero"]=$this->indexation->alphaMaj($numero[0]); - } - if(!$ret["clef_chapeau"] or !$ret["clef_numero"]) return false; return $ret; } public function getTitrePrincipal() { - $titre = $this->get_subfield('200', 'a'); + if(!$titre = $this->get_subfield('200', 'a')) + return ''; $titre = trim($titre[0]); $titre = $this->filtreTitre($titre); return $titre; @@ -276,10 +305,14 @@ class notice_unimarc extends iso2709_record { protected function getProfilNumericAttribute($name, $level=0) { + if (!isset($this->profil['attributs'][$level][$name])) + return ''; + $value = trim($this->profil['attributs'][$level][$name]); return ('#' == $value) ? 0 : $value; } + protected function getChampNouveauteAttribute() { $champs_nouveaute = $this->profil['attributs'][4]; @@ -313,6 +346,7 @@ class notice_unimarc extends iso2709_record { $champ_availability = $this->getProfilNumericAttribute('champ_availability'); $champs_nouveaute = $this->getChampNouveauteAttribute(); + $date_nouveaute = ''; if ($champs_nouveaute['zone'] != '995' and $champs_nouveaute['zone'] > '000') { $data = $this->get_subfield($champs_nouveaute['zone'], $champs_nouveaute['champ']); @@ -326,6 +360,7 @@ class notice_unimarc extends iso2709_record { $cotes = false; $nb_ex_detruits = 0; $exemplaires = $this->get_subfield('995'); + $nb_ex = 0; for ($i=0; $i < count($exemplaires); $i++) { $ex = $this->withExemplaireDo( $exemplaires[$i], @@ -403,9 +438,9 @@ class notice_unimarc extends iso2709_record { } }); - if ($ex['code_barres'] > '') { + if (isset($ex['code_barres']) && ($ex['code_barres'] > '')) { $nb_ex++; - if ($date_nouveaute > '' and !$ex['date_nouveaute']) + if ($date_nouveaute > '' && (!$ex['date_nouveaute'])) $ex['date_nouveaute'] = $date_nouveaute; if(isset($ex['ignore_exemplaire']) @@ -431,12 +466,12 @@ class notice_unimarc extends iso2709_record { return; } - if ($ex['code_barres']) + if (isset($ex['code_barres']) && $ex['code_barres']) return; - $ex['code_barres'] ; - if (!$ex['code_barres'] = $this->filtreCodeBarres($value)) { - $ret['warnings'][] = ['code-barres incorrect', $champ['valeur']]; + $ex['code_barres'] = $this->filtreCodeBarres($value); + if (!$ex['code_barres']) { + $ret['warnings'][] = ['code-barres incorrect', $value]; return; } @@ -471,7 +506,10 @@ class notice_unimarc extends iso2709_record { protected function withExemplaireDo($field, $closure) { - $ex = ['activite' => 'peut être prêté']; + $ex = ['activite' => 'peut être prêté', + 'cote' => '', + 'section' => '', + 'emplacement' => '']; $ex['zone995'] = $champs = $this->decoupe_bloc_champ($field); $ex['zone995'] = serialize($ex['zone995']); @@ -692,16 +730,17 @@ class notice_unimarc extends iso2709_record { public function getIdOrigine() { - $data = $this->get_subfield('001'); + if (!$data = $this->get_subfield('001')) + return ''; return substr(trim($data[0]), 0, 20); } public function getIsbn() { $data = $this->get_subfield('010', 'a'); - $isbn = trim($data[0]); + $isbn = trim($data ? $data[0] : ''); if($isbn) { - $oIsbn = new class_isbn($isbn); + $oIsbn = new Class_Isbn($isbn); $isbn = $oIsbn->getAll(); } @@ -715,14 +754,18 @@ class notice_unimarc extends iso2709_record { } if(!is_array($isbn)) - $isbn = []; + $isbn = ['statut' => 0, + 'isbn' => '', + 'isbn10' => '', + 'isbn13' => '', + 'ean' => '']; return $isbn; } public function getEan() { $data = $this->get_subfield('073', 'a'); - $ean = trim($data[0]); + $ean = trim($data ? $data[0] : ''); if($ean) { $oIsbn = new class_isbn($ean); $ean = $oIsbn->getAll(); @@ -741,7 +784,7 @@ class notice_unimarc extends iso2709_record { if(!$ean) { $data=$this->get_subfield("071","a"); - $code=trim($data[0]); + $code=trim($data ? $data[0] : ''); if(strlen($code) == 13 and is_numeric($code)) { $oIsbn=new class_isbn($code); @@ -750,19 +793,23 @@ class notice_unimarc extends iso2709_record { } if(!is_array($ean)) - $ean = []; + $ean = ['statut' => 0, + 'ean' => '', + 'isbn' => '', + 'isbn10' => '', + 'isbn13' => '']; return $ean; } public function getIdCommerciale($clef_alpha) { $data = $this->get_subfield('071', 'a'); - $id = trim($data[0]); + $id = $data ? trim($data[0]) : ''; if(strlen($id) == 13 and is_numeric($id)) return ''; // c'est un ean $data = $this->get_subfield('071', 'b'); - $id = trim($data[0]) . $id; + $id = trim($data ? $data[0] : '') . $id; $id = $this->indexation->alphaMaj($id); $id = str_replace(' ', '', $id); if(!$id) @@ -799,7 +846,7 @@ class notice_unimarc extends iso2709_record { $type_doc = $this->getTypeDoc(); $titre = $this->getTitrePrincipal(); $complement_titre = $this->getComplementTitre(); - $auteur = $this->getAuteurs(true,true); + $auteur = $this->getAuteurClefAlpha(); $editeur = $this->getEditeur(); $annee = $this->getAnnee(); $tome = $this->getTome(); @@ -813,7 +860,9 @@ class notice_unimarc extends iso2709_record { public function getClefChapeau() { if (!$titre = $this->get_subfield('461', 't')) $titre = $this->get_subfield('410', 't'); - return $this->indexation->codeAlphaTitre(trim($titre[0])); + return $titre + ? $this->indexation->codeAlphaTitre(trim($titre[0])) + : ''; } @@ -845,10 +894,16 @@ class notice_unimarc extends iso2709_record { if ($infos) { $ret["code"] = $typeDoc["code"]; - $ret["infos"] = "Label=".$label." - "."995\$r=".$z995r[0]." - \$p=".$z995p[0]; - if ($this->type_doc_force["label"] > "") - $typeDoc["libelle"] = getLibCodifVariable('types_docs', $typeDoc['code']); - $ret["libelle"] = $typeDoc["libelle"]; + $ret["infos"] = "Label=".$label; + if (isset($z995r[0])) + $ret["infos"] .= " - "."995\$r=".$z995r[0]; + if (isset($z995p[0])) + $ret["infos"] .= " - \$p=".$z995p[0]; + + $ret["libelle"] = ($this->type_doc_force["label"] > "") + ? getLibCodifVariable('types_docs', $typeDoc['code']) + : ''; + return $ret; } @@ -894,6 +949,7 @@ class notice_unimarc extends iso2709_record { public function getTitres() { $zones = getVariable('unimarc_zone_titre'); $zones = explode(';', trim($zones)); + $titre = []; foreach($zones as $elem) { $zone = substr($elem, 0, 3); $champ = substr($elem, -1, 1); @@ -915,7 +971,8 @@ class notice_unimarc extends iso2709_record { /** first one only */ public function getComplementTitre() { - $titre = $this->get_subfield('200', 'e'); + if (!$titre = $this->get_subfield('200', 'e')) + return ''; return $this->filtreTitre($titre[0]); } @@ -967,7 +1024,7 @@ class notice_unimarc extends iso2709_record { } - public function getAuteurs($auteurPrincipal=false, $clef_alpha=false) { + public function getAuteurs() { $auteur = []; foreach ($this->_getAuthorFields() as $zone) { $data = $this->get_subfield($zone); @@ -985,12 +1042,6 @@ class notice_unimarc extends iso2709_record { if ((strlen($nm) > 2 or $this->indexation->isMotInclu($nom)) and striPos($nm, "ANONYME") === false) // On elimine les auteurs avec 1 seule lettre { - if($clef_alpha) - return trim($nom . substr($prenom, 0, 1)); - - if($auteurPrincipal) - return trim($prenom . ' ' . $nom); - $auteur[] = $nm; } } @@ -1000,6 +1051,21 @@ class notice_unimarc extends iso2709_record { } + public function getAuteurPrincipal() { + if (!$auteurs = $this->getAuteurs()) + return ''; + return trim(str_replace('|', ' ', $auteurs[0])); + } + + + public function getAuteurClefAlpha() { + if (!$auteurs = $this->getAuteurs()) + return ''; + list($nom, $prenom) = explode('|', $auteurs[0]); + return trim($nom . substr($prenom, 0, 1)); + } + + public function getAuteursRenvois() { $auteur = []; foreach($this->_getAuthorFields() as $zone) { @@ -1031,6 +1097,7 @@ class notice_unimarc extends iso2709_record { public function getDewey() { $data = $this->get_subfield('676'); + $dewey = []; foreach ($data as $items) { $sous_champs = $this->decoupe_bloc_champ($items); foreach ($sous_champs as $item) @@ -1115,8 +1182,8 @@ class notice_unimarc extends iso2709_record { protected function _getPergamePcdm4() { $data = $this->get_subfield('934', 'a'); - $code = trim($data[0]); - if (!trim($data[0]) or substr($code,0,1) != '<') + $code = trim($data ? $data[0] : ''); + if (!$code or substr($code,0,1) != '<') return; $elems = str_replace('<', '', $code); @@ -1131,16 +1198,16 @@ class notice_unimarc extends iso2709_record { public function getCote() { if ($this->sigb != Class_IntBib::COM_PERGAME) - return false; + return ''; $data = $this->get_subfield('686', 'a'); - return trim($data[0]); + return $data ? trim($data[0]) : ''; } public function getEditeur() { $data = $this->get_subfield('210', 'c'); - return trim($data[0]); + return $data ? trim($data[0]) : ''; } @@ -1155,6 +1222,7 @@ class notice_unimarc extends iso2709_record { return false; $data = $this->get_subfield($zone_interet); + $interet = []; foreach($data as $items) { $sous_champs = $this->decoupe_bloc_champ($items); foreach($sous_champs as $item) @@ -1173,7 +1241,10 @@ class notice_unimarc extends iso2709_record { public function getAnnee() { - $data = $this->get_subfield('210', 'd'); + if (!$data = $this->get_subfield('210', 'd')) + return ''; + + $annee = ''; for($i=0; $i < strlen($data[0]); $i++) { $car = strMid($data[0], $i, 1); if($car >= '0' and $car <= '9') @@ -1205,7 +1276,7 @@ class notice_unimarc extends iso2709_record { if($ex[$i] == 'd') $nb_ex_detruit++; - if ($nb_ex_detruits >= $nb_ex and $nb_ex > 0) + if ($nb_ex_detruit >= $nb_ex and $nb_ex > 0) $statut = 1; return $statut; @@ -1235,6 +1306,7 @@ class notice_unimarc extends iso2709_record { public function getLangues() { $data = $this->get_subfield(101); + $langues = []; foreach($data as $items) { $sous_champs = $this->decoupe_bloc_champ($items); foreach($sous_champs as $item) { @@ -1298,6 +1370,7 @@ class notice_unimarc extends iso2709_record { public function getChampsForces() { + $champ_forces = []; for($i=0; $i < count($this->champs_forces); $i++) { $champ = $this->get_subfield($this->champs_forces[$i]); for($j=0; $j < count($champ); $j++) { @@ -1341,6 +1414,7 @@ class notice_unimarc extends iso2709_record { private function extractRegles() { + $ret = []; foreach(['section', 'genre', 'emplacement'] as $type) { $classname = 'Class_Codif'.ucfirst($type); if (!$enregs = $classname::findAll()) @@ -1427,6 +1501,9 @@ class notice_unimarc extends iso2709_record { private function getIdCodeExemplaire($type, $champ, $sous_champ, $valeur) { $valeur = trim(str_replace(' ', '', strtoupper($valeur))); $champ = $champ . '$' . $sous_champ; + if (!isset($this->regles_sections_genres[$champ][$type])) + return ''; + $id = $this->regles_sections_genres[$champ][$type]['='][$valeur]; if(!$id) $id = $this->regles_sections_genres['995$0'][$type]['='][$valeur]; if(!$id) $id = ''; diff --git a/cosmogramme/php/config_profil_donnees.php b/cosmogramme/php/config_profil_donnees.php index 77bd9a13337aaa4d4b3d86efda25d8af85649577..c3f9c39de6ba9159b2118eabd83ef3b8b1d192af 100644 --- a/cosmogramme/php/config_profil_donnees.php +++ b/cosmogramme/php/config_profil_donnees.php @@ -67,6 +67,7 @@ if($_REQUEST["action"]=="VALIDER") $attributs[0]["champ_section"]=$champ_section; $attributs[0]["champ_emplacement"]=$champ_emplacement; $attributs[0]["champ_annexe"]=$champ_annexe; + $attributs[0]["champ_url"]=["zone"=>$champ_url_zone,"champ"=>$champ_url_champ]; $attributs[1]["champs"]=$champs; $attributs[2]["champs"]=$champs; $attributs[3]["champs"]=$champs; @@ -157,7 +158,14 @@ function afficherProfil($profil,$display) function paveUnimarcNotice($profil) { $id_profil=$profil["id_profil"]; - if($profil["type_fichier"]==0 and ($profil["format"] == 0 or $profil["format"] == 6)) $display="block"; else $display="none"; + + if ($profil['type_fichier'] == Class_IntProfilDonnees::FT_RECORDS + and in_array($profil["format"], [Class_IntProfilDonnees::FORMAT_UNIMARC, Class_IntProfilDonnees::FORMAT_MARC21, Class_IntProfilDonnees::FORMAT_UNIMARC_XML])) + $display = 'block'; + + else + $display = 'none'; + print('<div id="unimarc_0" style="display:'.$display.'">'); print('<table class="form" cellspacing="0" cellpadding="5">'); @@ -208,10 +216,11 @@ function paveUnimarcNotice($profil) print('<tr><td class="form" align="right">Emplacement</td><td class="form">'.getComboChampsExemplaires("champ_emplacement",$profil["attributs"][0]["champ_emplacement"]).'</td></tr>'); print('<tr><td class="form" align="right">Annexe</td><td class="form">'.getComboChampsExemplaires("champ_annexe",$profil["attributs"][0]["champ_annexe"]).'</td></tr>'); print('<tr><td class="form" align="right">Disponibilité</td><td class="form">'.getComboChampsExemplaires("champ_availability",$profil["attributs"][0]["champ_availability"]).'</td></tr>'); + print('<tr><td class="form" align="right">URL (zone/sous-champ)</td><td class="form">'.getChamp("champ_url_zone",$profil["attributs"][0]["champ_url"]['zone'],3).' $ '.getChamp("champ_url_champ",$profil["attributs"][0]["champ_url"]['champ'],1).'</td></tr>'); // date de nouveauté print('<tr><th class="form" align="left" colspan="2">Date de nouveauté</th></tr>'); - print('<tr><td class="form" align="right">Zone / champ</td><td class="form">'.getChamp("nouveaute_zone",$profil["attributs"][4]["zone"],3).' $ '.getChamp("nouveaute_champ",$profil["attributs"][4]["champ"],1).'</td></tr>'); + print('<tr><td class="form" align="right">Zone / sous-champ</td><td class="form">'.getChamp("nouveaute_zone",$profil["attributs"][4]["zone"],3).' $ '.getChamp("nouveaute_champ",$profil["attributs"][4]["champ"],1).'</td></tr>'); $fmt=array(""=>"","1"=>"AAAA-MM-JJ","2"=>"AAAAMMJJ","4"=>"JJ-MM-AAAA","5"=>"J/M/AAAA","3"=>"Valeur(s)"); print('<tr><td class="form" align="right">Format</td><td class="form">'.getComboSimple("nouveaute_format",$profil["attributs"][4]["format"],$fmt).'</td></tr>'); print('<tr><td class="form" align="right">Valeurs séparées par des ;</td><td class="form">'.getChamp("nouveaute_valeurs",$profil["attributs"][4]["valeurs"],20).'</td></tr>'); @@ -234,7 +243,7 @@ function paveAscii($profil) { $id_profil=$profil["id_profil"]; $format=$profil["format"]; - if( $format > 0 and $format !=4 and $format !=6) $display="block"; else $display="none"; + if( $format > 0 and $format !=4 and $format !=6 and $format !=7) $display="block"; else $display="none"; print('<div id="ascii" style="display:'.$display.';">'); print('<table class="form" width="100%" cellspacing="0" cellpadding="5">'); diff --git a/cosmogramme/php/fonctions/variables.php b/cosmogramme/php/fonctions/variables.php index eaa86b8b7636cb86b1e392a6b30414d7339922ac..591c4ee4b4aca4366ff6affcc97290efe0b8e132 100644 --- a/cosmogramme/php/fonctions/variables.php +++ b/cosmogramme/php/fonctions/variables.php @@ -52,9 +52,8 @@ class VariableCache { public function getValeur($clef) { - global $sql; if (!isset($this->_valeurs[$clef])) - $this->_valeurs[$clef] = $sql->fetchOne("Select valeur from variables where clef='$clef'"); + $this->_valeurs[$clef] = Class_CosmoVar::get($clef); return $this->_valeurs[$clef]; } @@ -109,12 +108,14 @@ function getLibCodifVariable($clef,$code) { function getCodifsVariable($clef,$index_par_clefs=false) { - $data = VariableCache::getInstance()->getListe($clef); + $cosmo_var = Class_CosmoVar::find($clef); + $data = $cosmo_var ? $cosmo_var->getListe() : ''; $v=explode(chr(13).chr(10),$data); - for($i=0; $i<count($v); $i++) - { + $liste = []; + for($i=0; $i<count($v); $i++) { $elem=explode(":",$v[$i]); - if(!trim($elem[1])) continue; + if(!isset($elem[1]) || !trim($elem[1])) continue; + if($index_par_clefs==true) { $liste[$elem[0]]=$elem[1]; diff --git a/cosmogramme/php/integre_fichiers_attente.php b/cosmogramme/php/integre_fichiers_attente.php index a2e4ee584594b04c5be4ab329e60f7d24a2e1168..25a53e325eb27e8d2e303380a230b639f82e9b75 100644 --- a/cosmogramme/php/integre_fichiers_attente.php +++ b/cosmogramme/php/integre_fichiers_attente.php @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE * along with BOKEH; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ //////////////////////////////////////////////////////////////////////////////////////////// // AFFICHAGE DES FICHIERS EN ATTENTE @@ -99,7 +99,7 @@ for($i=0; $i < count($dossier); $i++) $suppr=rendUrlImg("suppression.gif", "integre_fichiers_attente.php","action=SUPPRIMER&fichier=".$fichier,"Supprimer ce fichier"); $controle=$sql->fetchOne("Select count(*) from int_maj_auto where nom_fichier='". $dossier[$i]["nom"]."/".$file ."'"); if($controle) $statut = '<font color="darkgreen">Programmé</font>'; else $statut = '<font color="red">non programmé</font>'; - + print('<tr>'); print('<td>'.$d.'</td>'); print('<td>'.'<a href="'.URL_BASE.getVariable("ftp_path").$dossier[$i]["nom"].'/'.$file.'">'.$file.'</a></td>'); @@ -117,7 +117,7 @@ print('</body></html>'); function quit($msg) { if($msg) print(BR.BR.'<h3 style="margin-left:30px">'.$msg.'</h3>'); - print('</body></html>'); + print('</body></html>'); exit; } diff --git a/cosmogramme/php/integre_journal_integrations.php b/cosmogramme/php/integre_journal_integrations.php index c67191c02bd84e511959d892935af7b5a25681a8..85391b6a1371567ce75cadf2d21700570b939ab7 100644 --- a/cosmogramme/php/integre_journal_integrations.php +++ b/cosmogramme/php/integre_journal_integrations.php @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE * along with BOKEH; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ include '_init_frame.php'; @@ -30,7 +30,8 @@ require_once 'classe_unimarc.php'; $unimarc=new notice_unimarc(); require_once 'classe_notice_ascii.php'; $ascii=new notice_ascii(); -require_once 'classe_isbn.php'; +require_once("Class/Isbn.php"); + // Titre page if($_REQUEST["date"]) $aff_date=" du ".rendDate($_REQUEST["date"],3); @@ -52,12 +53,12 @@ if( $_REQUEST["id_integration"]) $warnings=stripslashes($enreg["warnings"]); $warnings=unserialize($warnings); if(!$enreg["nb_warnings"]) $enreg["nb_warnings"]="aucune"; - + // Ouvrir le fichier $fichier=getVariable("integration_path").$enreg["fichier"]; if(!file_exists($fichier)) quit("Le fichier d'intégration a été effacé"); $parseur->open($fichier,$format,0); - + // Entete print('<span class="violet">Bibliothèque : </span><span class="vert">'.$oBib->getNomCourt($enreg["id_bib"]).'</span>'.BR); print('<span class="violet">Fichier : </span><span class="vert">'.$enreg["fichier"].'</span>'.BR); @@ -66,7 +67,7 @@ if( $_REQUEST["id_integration"]) print('<span class="violet">Profil d\'import : </span><span class="vert">'.$sql->fetchOne("select libelle from profil_donnees where id_profil=".$enreg["profil"]).'</span>'.BR); print('<span class="violet">Format de fichier : </span><span class="vert">'.getLibCodifVariable("import_format",$format).'</span>'.BR); } - + // ---------------------------------------------------------------- // Liste des notices // ---------------------------------------------------------------- @@ -81,7 +82,7 @@ if( $_REQUEST["mode"] == "DETAIL") { ['Anomalies', 'warnings', $warnings]] as $params) { if (!$type == $params[0]) continue; - + foreach ($params[2] as $libelle => $liste) { if ($rubrique and $libelle != $rubrique) continue; @@ -93,12 +94,12 @@ if( $_REQUEST["mode"] == "DETAIL") { } ?> <br> - <input type="button" class="bouton" value="Retour" - onclick="document.location.replace('../cosmozend/cosmo/run-log/synthese/date/<?php echo $_REQUEST['date'];?>/id/<?php echo $_REQUEST['id_integration'];?>');" + <input type="button" class="bouton" value="Retour" + onclick="document.location.replace('../cosmozend/cosmo/run-log/synthese/date/<?php echo $_REQUEST['date'];?>/id/<?php echo $_REQUEST['id_integration'];?>');" style="margin-left:20px"> <br> <br> - <?php + <?php quit(''); } @@ -113,7 +114,7 @@ if($_REQUEST["mode"] == "SYNTHESE") printLigneTableau($enreg["id"],0,"Erreurs (notices rejetées)",$enreg["nb_erreurs"]); printLigneTableau($enreg["id"],0,"Anomalies",$enreg["nb_warnings"]); print('</table>'); - + // Erreurs if($erreurs) { @@ -121,7 +122,7 @@ if($_REQUEST["mode"] == "SYNTHESE") foreach($erreurs as $libelle => $liste) printLigneTableau($enreg["id"],"Erreurs",$libelle,count($liste)); } print('</table>'); - + // Warnings if($warnings) { @@ -129,7 +130,7 @@ if($_REQUEST["mode"] == "SYNTHESE") foreach($warnings as $libelle => $liste) printLigneTableau($enreg["id"],"Anomalies",$libelle,count($liste)); } print('</table>'); - + // Fini print('</table></div>'); $bouton_retour='<input type="button" class="bouton" value="Retour" onclick="document.location.replace(\'integre_journal_integrations.php'."?date=".$_REQUEST["date"].'\')" style="margin-left:20px">'; @@ -138,7 +139,7 @@ if($_REQUEST["mode"] == "SYNTHESE") } // ---------------------------------------------------------------- -// AFFICHAGE DE LA LISTE +// AFFICHAGE DE LA LISTE // ---------------------------------------------------------------- // Entête ?> @@ -154,22 +155,22 @@ if($_REQUEST["mode"] == "SYNTHESE") <th width="9%" align="left">Erreurs</th> <th width="9%" align="left">Anomalies</th> </tr> -<?php +<?php // Lire les integrations -if ($_REQUEST['date']) +if ($_REQUEST['date']) $cond = " and traite='" . $_REQUEST['date'] . "' "; $req = "select * from integrations where traite != 'non' " . $cond . " order by id DESC"; $liste = $sql->fetchAll($req); -foreach ($liste as $ligne) { +foreach ($liste as $ligne) { $taille_fichier = filesize(getVariable("integration_path") . $ligne["fichier"]); - if ($taille_fichier > 0 ) + if ($taille_fichier > 0 ) $taille_fichier = intval($taille_fichier / 1024); ?> <tr> <td align="center"> - <?php echo rendUrlImg("loupe.png", + <?php echo rendUrlImg("loupe.png", "integre_journal_integrations.php", "mode=SYNTHESE&id_integration=" . $ligne["id"] . "&date=" . $_REQUEST["date"], "Afficher le détail");?></td> @@ -182,8 +183,8 @@ foreach ($liste as $ligne) { <td><?php echo $ligne["fichier"];?></td> <td align="right" style="white-space:nowrap"> <?php echo $taille_fichier;?> ko - <?php if (0 < $taille_fichier) - echo rendUrlImg("plus.gif", + <?php if (0 < $taille_fichier) + echo rendUrlImg("plus.gif", "integre_journal_integrations.php", "mode=DOWNLOAD&id_integration=" . $ligne["id"] . "&date=" . $_REQUEST["date"], "Télécharger le fichier");?> @@ -217,7 +218,7 @@ function printRubriqueUnimarc($fichier, $type, $rubrique, $id_profil, $notices) { if(!$notices) return; global $parseur,$unimarc; - + // Entete print('<table class="blank" style="margin-left:20px;width:800px" cellspacing="0">'); print('<tr><th class="blank" colspan="2">no</th>'); @@ -225,19 +226,19 @@ function printRubriqueUnimarc($fichier, $type, $rubrique, $id_profil, $notices) print('<th class="blank">Codes-barres</th>'); if($type == "warnings") print('<th class="blank">Anomalie</th>'); print('</tr>'); - + // Rubrique $num=0; foreach($notices as $enreg) { $num++; $data=explode(chr(9), $enreg); - + // Lire notice $ret=$parseur->getEnreg($data[0]); - $unimarc->ouvrirNotice($ret["data"],$id_profil); + $unimarc->ouvrirNotice($ret["data"],$id_profil); $notice=$unimarc->getNoticeIntegration(); - + // Recup données a afficher $titre=$notice["titre_princ"]; if(!$titre) $titre = "** pas de titre principal **"; @@ -247,7 +248,7 @@ function printRubriqueUnimarc($fichier, $type, $rubrique, $id_profil, $notices) if($notice["exemplaires"][$i]["code_barres"]) $cab.="[".$notice["exemplaires"][$i]["code_barres"]."] "; } if(!$cab) $cab="aucun exemplaire"; - + // Afficher $loupe=rendUrlImg("loupe.png", "analyse_afficher_notice.php","mode=INTEGRATION&fichier=".urlencode($fichier)."&adresse=".$data[0]."&date=".$_REQUEST["date"],"Afficher la notice d'origine"); print('<tr>'); @@ -265,22 +266,22 @@ function printRubriqueAscii($fichier, $type, $rubrique, $id_profil, $notices) { if(!$notices) return; global $parseur,$ascii; - + // Entete print('<table class="blank" style="margin-left:20px;width:800px" cellspacing="0">'); - + // Rubrique $num=0; foreach($notices as $enreg) { $num++; $data=explode(chr(9), $enreg); - + // Lire notice $ret=$parseur->getEnreg($data[0]); - $ascii->ouvrirNotice($ret["data"],$id_profil); + $ascii->ouvrirNotice($ret["data"],$id_profil); $notice=$ascii->getEnreg(); - + // Afficher entete if($num == 1) { @@ -293,7 +294,7 @@ function printRubriqueAscii($fichier, $type, $rubrique, $id_profil, $notices) if($type == "warnings") print('<th class="blank">Anomalie</th>'); print('</tr>'); } - + // Afficher ligne print('<tr>'); print('<th class="blank">'.$num.'</th>'); @@ -312,7 +313,7 @@ function printRubriqueAscii($fichier, $type, $rubrique, $id_profil, $notices) function quit($msg) { if($msg) print(BR.BR.'<h3 style="margin-left:30px">'.$msg.'</h3>'); - print('</body></html>'); + print('</body></html>'); exit; } ?> \ No newline at end of file diff --git a/cosmogramme/php/integre_traite_main.php b/cosmogramme/php/integre_traite_main.php index bd3f81fdf320534508c0d95e2d79373207357f0c..a3b39a51c5b8bb6d881523f66df05f6f36db4266 100644 --- a/cosmogramme/php/integre_traite_main.php +++ b/cosmogramme/php/integre_traite_main.php @@ -108,28 +108,17 @@ if ($_REQUEST['reprise'] == 'oui') { $log->ecrire('Type d\'import : ' . $txt[$cron_a_traiter] . BR); } - // controle du trigger de maj des notices - //@sqlExecute('DROP TRIGGER datemaj_notices_update'); - /*@sqlExecute(" - CREATE TRIGGER datemaj_notices_update BEFORE DELETE - ON exemplaires - FOR EACH ROW - BEGIN - update notices set date_maj=NOW() where id_notice=OLD.id_notice; - END - "); - * */ - - $log->ecrire('<h4>Déplacement des fichiers à intégrer</h4>'); - $transfert = new maj_auto(); - $erreur = $transfert->transfertfichiersFtp(); - if ($erreur) { + + try { + startIntegrationPhase('PrepareIntegrations'); + } catch (Class_Cosmogramme_Integration_PhasePrepareIntegrationsException $e) { $log->ecrire(BR . BR - . '<span class="rouge">' . $erreur . ' : Abandon du traitement !</span><br>'); + . '<span class="rouge">' . $e->getMessage() . ' : Abandon du traitement !</span><br>'); exit; } + setVariable('integration_date', $date); - $transfert->supprimerEntetesPergame(); + (new maj_auto())->supprimerEntetesPergame(); // ---------------------------------------------------------------- // controle si on doit sortir en cas d'import total @@ -173,108 +162,7 @@ if ($_REQUEST['reprise'] == 'oui') { // Integration des notices (PHASE 0) // ---------------------------------------------------------------- setVariable('traitement_phase', 'Intégration des notices'); - -$resultat = $sql->prepareListe("select * from integrations Where traite='non' Order by id"); - -while ($ligne = $sql->fetchNext($resultat)) { - extract($ligne); - $format = $sql->fetchOne('select format from profil_donnees where id_profil=' . $profil); - $type_fichier = $sql->fetchOne('select type_fichier from profil_donnees where id_profil=' . $profil); - - // Si autre que notices on passe - // if (!$type_fichier || $type_fichier=='') $log->ecrire('<span class="bib">Problème de configuration, pas de type de fichier pour le profil de données: '.$profil.' concernant le fichier: '.$fichier.'</span><br>'); - // if ($type_fichier =='' || ($type_fichier > 0 and $type_fichier < 10)) continue; - if ($type_fichier > 0 and $type_fichier < 10) - continue; - - $nom_bib = $bib->getNomCourt($id_bib); - $libelle_type_operation = getLibCodifVariable("import_type_operation", $type_operation); - $trace = '<br><b><span class="vert">' . $nom_bib . " (" . $libelle_type_operation . ")</b></span><br>"; - $trace.='<span class="bib">Fichier : ' . $fichier . "</span><br>"; - $trace.='<span class="bib">Profil : ' . $sql->fetchOne("select libelle from profil_donnees where id_profil=$profil") . '</span><br>'; - $trace.='<span class="bib">Format : ' . getLibCodifVariable("import_format", $format) . '</span><br>'; - if ($type_doc > '') $trace.='<span class="bib">Type de doc. forcé : ' . $type_doc . '</span><br>'; - if (!$pointeur_reprise) $log->ecrire($trace); else print($trace); - - // Suppression des exemplaires si export total - if ($type_operation == 2 and !$reprise and !$pointeur_reprise) { - $log->ecrire(BR . '<span class="violet">Supression des exemplaires</span><br>'); - if(filesize($integration_path . $fichier)>0) - { - $nb = $sql->execute("delete from exemplaires where id_bib=$id_bib"); - $nb1 = $sql->execute("delete from notices_succintes where id_bib=$id_bib"); - $log->ecrire('<span class="vert">' . $nb . ' exemplaires supprimés</span>' . BR); - $log->ecrire('<span class="vert">' . $nb1 . ' notices succintes supprimées</span>' . BR . BR); - $log->ecrire('<span class="vert">' . 'table notice_domain nettoyée</span>' . BR . BR); - } - else $log->ecrire('<span class="rouge">Le fichier d\'import total est vide : aucun exemplaire supprimé.</span>' . BR . BR); - } - - // Traitement d'un fichier - $notice->setParamsIntegration($id_bib, $type_operation, $profil, $type_doc); - if ($reprise) $reprise = false; - else - { - unset($phase_data); - $phase_data["nb_erreurs"] = 0; - $phase_data["nb_warnings"] = 0; - $nb_notices = 0; - $chrono100notices->start(); - $chrono_fichier->start(); - } - if (false == $parseur->open($integration_path . $fichier, $format, $pointeur_reprise)) - { - incrementeVariable("traitement_erreurs"); - $log->ecrire('<span class="rouge">Impossible d\'ouvrir le fichier : ' . $fichier . '</span><br>'); - continue; - } - - // Parser les enregs - while (true) - { - if (!$mode_cron and $chrono->tempsPasse() > $timeout) sauveContexte(); - $ret = $parseur->nextEnreg(); - if ($ret["statut"] == "erreur") - { - incrementeVariable("traitement_erreurs"); - $log->ecrire('<span class="rouge">' . $ret["erreur"] . '</span><br>'); - $msg = "Unimarc incorrect."; - $log->ecrire('<span class="vert">' . $msg . '</span>'); - continue; - } - - // fin de fichier - if ($ret["statut"] == "eof") - { - if ($nb_notices == 0) $msg = "Le fichier ne contenait aucune notice"; - else - { - $log->ecrire(BR . '<span class="vert">' . $nb_notices . ' notices ont été traitées.</span>'); - $msg = "temps de traitement " . $chrono_fichier->end() . " (" . $chrono_fichier->moyenne($nb_notices, "notices") . ")"; - } - $log->ecrire(BR . '<span class="vert">' . $msg . '</span><br>'); - break; - } - - // notice lue avec succes - if ($ret["statut"] == "ok") - { - $notice->traiteNotice($ret["data"]); - $nb_notices++; - traceTraitementNotice(); - $ptr = $ret["pointeur_reprise"]; - $sql->execute("Update integrations set pointeur_reprise = $ptr Where id = " . $ligne["id"]); - } - } - - // Maj base et rapport erreurs et warnings - $champ_erreurs = addslashes(serialize($phase_data["erreurs"])); - $champ_warnings = addslashes(serialize($phase_data["warnings"])); - if(!$phase_data["nb_erreurs"]) $phase_data["nb_erreurs"]=0; - if(!$phase_data["nb_warnings"]) $phase_data["nb_warnings"]=0; - $sql->execute("update integrations Set traite='$date', pointeur_reprise=$nb_notices,nb_erreurs=" . $phase_data["nb_erreurs"] . ",nb_warnings=" . $phase_data["nb_warnings"] . ",erreurs='$champ_erreurs',warnings='$champ_warnings' Where id = " . $ligne["id"]); - $sql->execute("update int_bib set dernier_ajout='$date' where id_bib=$id_bib"); -} +startIntegrationPhase('notice'); if ($phase == "0") $phase = "0.1"; // ---------------------------------------------------------------- @@ -285,12 +173,18 @@ if ($phase > 0 and $phase < 1) { $phase = 1; } + +if ($phase == 1 || $phase == 1.1) { + startIntegrationPhase('DeleteItem'); + $phase = 1.2; +} + // ---------------------------------------------------------------- // Suppression des notices sans exemplaires (PHASE 2) // ---------------------------------------------------------------- setVariable("traitement_phase", "Suppression des notices sans exemplaire"); if (!$mode_cron and $chrono->tempsPasse() > 10) sauveContexte(); -if ($phase == 1) +if ($phase == 1.2) { $log->ecrire("<h4>Suppression des notices sans exemplaire</h4>"); unset($phase_data); diff --git a/cosmogramme/php/util_indexation.php b/cosmogramme/php/util_indexation.php index f5c1fe51be86776d7011bed7175ac735a3e796e0..cce13f11462aa799e299d62decd59ddb230c0628 100644 --- a/cosmogramme/php/util_indexation.php +++ b/cosmogramme/php/util_indexation.php @@ -16,21 +16,21 @@ * * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE * along with BOKEH; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ //////////////////////////////////////////////////////////////////////////////////// // REINEXATION DES CLEFS D'ACCES (ISBN, EAN,ID_COMMERCIALE,CLEF_ALPHA et TOME_ALPHA) //////////////////////////////////////////////////////////////////////////////////// - + include("_init_frame.php"); // Includes -require_once("classe_chronometre.php"); +require_once("classe_chronometre.php"); require_once("classe_unimarc.php"); -require_once("classe_isbn.php"); +require_once("Class/Isbn.php"); // Instanciations -$chrono = new chronometre(); +$chrono = new chronometre(); $unimarc = new notice_unimarc(); // Initialisations @@ -60,10 +60,10 @@ print('</div>'); flush(); // ---------------------------------------------------------------- -// Boucle principale +// Boucle principale // ---------------------------------------------------------------- $resultat=$sql->prepareListe("select id_notice,unimarc from notices where id_notice > $pointeur_reprise Order by id_notice LIMIT 0,20000"); -while($ligne=$sql->fetchNext($resultat)) +while($ligne=$sql->fetchNext($resultat)) { if($chrono->tempsPasse() > $timeout) sauveContexte(); $unimarc->ouvrirNotice($ligne["unimarc"],0); @@ -109,7 +109,7 @@ function restaureContext() { global $timeStart,$pointeur_reprise; global $nb_notices,$nb_total; - + extract($_SESSION["reprise"]); unset($_SESSION["reprise"]); } @@ -124,7 +124,7 @@ function afficherAvance($pointeur,$nb_total) print('<script>'); print("document.getElementById('pct').innerHTML='".$pct."%';"); $jauge="document.getElementById('jauge').style.width='".$pct."%';"; - print($jauge); + print($jauge); print('</script>'); } if($pointeur % 100 == 0 or $pct==100) diff --git a/cosmogramme/php/util_paniers.php b/cosmogramme/php/util_paniers.php index f52ec04cb631b14e93d3a79814c0eb6f9facb673..323dda4b109bf9feb897eea1a883f34764f201c0 100644 --- a/cosmogramme/php/util_paniers.php +++ b/cosmogramme/php/util_paniers.php @@ -16,21 +16,21 @@ * * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE * along with BOKEH; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ //////////////////////////////////////////////////////////////////////////////////// // REINDEXATION DES CLEFS NOTICES DANS LES PANIERS ET AVIS //////////////////////////////////////////////////////////////////////////////////// - + include("_init_frame.php"); // Includes -require_once("classe_chronometre.php"); +require_once("classe_chronometre.php"); require_once("classe_unimarc.php"); -require_once("classe_isbn.php"); +require_once("Class/Isbn.php"); // Instanciations -$chrono = new chronometre(); +$chrono = new chronometre(); // Initialisations $nb_notices=0; @@ -66,7 +66,7 @@ flush(); // Paniers // ---------------------------------------------------------------- $resultat=$sql->prepareListe("select ID_PANIER,ID_USER,NOTICES from notices_paniers where id_panier > $pointeur_reprise Order by id_panier"); -while($ligne=$sql->fetchNext($resultat)) +while($ligne=$sql->fetchNext($resultat)) { if($chrono->tempsPasse() > $timeout) sauveContexte(); if(!$ligne["NOTICES"]) continue; @@ -130,7 +130,7 @@ function restaureContext() { global $timeStart,$pointeur_reprise; global $nb_notices,$nb_total; - + extract($_SESSION["reprise"]); unset($_SESSION["reprise"]); } @@ -145,7 +145,7 @@ function afficherAvance($pointeur,$nb_total) print('<script>'); print("document.getElementById('pct').innerHTML='".$pct."%';"); $jauge="document.getElementById('jauge').style.width='".$pct."%';"; - print($jauge); + print($jauge); print('</script>'); } if($pointeur % 100 == 0 or $pct==100) diff --git a/cosmogramme/sql/patch/patch_237.php b/cosmogramme/sql/patch/patch_237.php index 13abd10da5f15eb86c8f3c767a6fde40678be851..232df963a209958ddfee57df2603187d7bbf0951 100644 --- a/cosmogramme/sql/patch/patch_237.php +++ b/cosmogramme/sql/patch/patch_237.php @@ -1,4 +1,4 @@ <?php $adapter = Zend_Db_Table_Abstract::getDefaultAdapter(); -$adapter->query("ALTER TABLE album ADD status tinyint(1) unsigned DEFAULT NULL"); +$adapter->query("ALTER TABLE album ADD status tinyint(1) unsigned DEFAULT NULL"); \ No newline at end of file diff --git a/cosmogramme/sql/patch/patch_257.php b/cosmogramme/sql/patch/patch_257.php new file mode 100644 index 0000000000000000000000000000000000000000..9ba6fa116435d5f54b649657235a69010333f3ce --- /dev/null +++ b/cosmogramme/sql/patch/patch_257.php @@ -0,0 +1,5 @@ +<?php +$adapter = Zend_Registry::get('sql'); +$adapter->query('ALTER TABLE reservations ADD COLUMN rang tinyint'); +$adapter->query('ALTER TABLE reservations modify date_resa datetime default null'); +?> \ No newline at end of file diff --git a/cosmogramme/sql/patch/patch_258.php b/cosmogramme/sql/patch/patch_258.php new file mode 100644 index 0000000000000000000000000000000000000000..ae5dcbc0b78603afe0a4de17cc2435e6a648afbb --- /dev/null +++ b/cosmogramme/sql/patch/patch_258.php @@ -0,0 +1,6 @@ +<?php +$adapter = Zend_Db_Table::getDefaultAdapter(); +$adapter->query('alter table int_maj_auto modify nom_fichier varchar(255) NULL'); +$adapter->query('alter table integrations modify fichier varchar(255) NULL'); +$adapter->query('alter table integrations modify pointeur_reprise varchar(255) NULL'); +?> diff --git a/cosmogramme/sql/patch/patch_259.php b/cosmogramme/sql/patch/patch_259.php new file mode 100644 index 0000000000000000000000000000000000000000..3f2981e77cb16141b3bdcb85025729162381d108 --- /dev/null +++ b/cosmogramme/sql/patch/patch_259.php @@ -0,0 +1,8 @@ +<?php +$adapter = Zend_Db_Table::getDefaultAdapter(); +$adapter->query('alter table exemplaires add column url varchar(255) NULL'); + +$format_liste = "0:Unimarc\r\n1:Ascii tabulé\r\n2:Ascii séparé par des points-virgule\r\n3:Ascii séparé par des \"|\"\r\n4:Xml\r\n5:CSV\r\n6:Marc21\r\n7:Marc XML\r\n"; + +$adapter->query("UPDATE variables SET liste = '$format_liste' WHERE clef = 'import_format'"); +?> diff --git a/cosmogramme/tests/php/classes/CarthameIntegrationTest.php b/cosmogramme/tests/php/classes/CarthameIntegrationTest.php index 37d242b815fd0813b19e31f96cdf60980edfed03..6c97ae89bed819660171a14ae7facc38c491891d 100644 --- a/cosmogramme/tests/php/classes/CarthameIntegrationTest.php +++ b/cosmogramme/tests/php/classes/CarthameIntegrationTest.php @@ -24,18 +24,19 @@ require_once 'NoticeIntegrationTest.php'; abstract class CarthameIntegrationTestCase extends NoticeIntegrationTestCase { public function setUp() { parent::setUp(); - VariableCache::getInstance() - ->setValeurCache(['filtrer_fulltext' => 1, - 'homogene_code_qualite' => 10, - 'homogene' => 0, - 'mode_doublon'=> 0, - 'tracer_accents_iso'=>1, - 'non_exportable'=> 'electre;decitre;gam;zebris', - 'controle_codes_barres'=> 0, - 'unimarc_zone_titre' => '200$a;461$t', - 'unicite_code_barres' => 0, - 'champs_sup' => '', - 'ean_345' => '']); + $vars = ['filtrer_fulltext' => 1, + 'homogene_code_qualite' => 10, + 'homogene' => 0, + 'mode_doublon'=> 0, + 'tracer_accents_iso'=>1, + 'non_exportable'=> 'electre;decitre;gam;zebris', + 'controle_codes_barres'=> 0, + 'unimarc_zone_titre' => '200$a;461$t', + 'unicite_code_barres' => 0, + 'champs_sup' => '', + 'ean_345' => '']; + foreach($vars as $key => $value) + Class_CosmoVar::newInstanceWithId($key, ['valeur' => $value]); } @@ -108,9 +109,9 @@ class TangoMangoCarthameIntegrationTest extends CarthameIntegrationTestCase { } - /** - * @depends importFromFileShouldNotCreateAnOtherRecord - * @test + /** + * @depends importFromFileShouldNotCreateAnOtherRecord + * @test * */ public function importFromFileShouldUpdateNotice($notice) { $this->assertEquals('TangoMango n° 2<br /> La Gazette du pirate', $notice->getTitrePrincipal()); diff --git a/cosmogramme/tests/php/classes/NoticeIntegrationTest.php b/cosmogramme/tests/php/classes/NoticeIntegrationTest.php index f96ce961e6965fed6424da2b657fcb959feb33fa..ec65b9b556dfe2d8821ab75070a2f7ce3f905f00 100644 --- a/cosmogramme/tests/php/classes/NoticeIntegrationTest.php +++ b/cosmogramme/tests/php/classes/NoticeIntegrationTest.php @@ -925,11 +925,8 @@ class NoticeIntegrationDimancheALaPiscineTest extends NoticeIntegrationTestCase /** @test */ - public function selectLibelleFormCodifGenreShouldHaveBeenCallIdGenre8() { - $this->assertTrue( - $this->_mock_sql - ->methodHasBeenCalledWithParams('fetchOne', - ['select libelle from codif_genre where id_genre=8'])); + public function deweyShouldContainsRoman() { + $this->assertEquals('JANVIER JANVI 2014 ROMAN', Class_Notice::find(1)->getDewey()); } @@ -1470,23 +1467,21 @@ class NoticeIntegrationMachecoulTest extends NoticeIntegrationTestCase { /** @test */ public function auteurShoulBeLeduStephanie() { - $this->assertContains('Ledu|Stéphanie', $this->notice_data['auteurs'][0]); + $this->assertContains('Ledu|Stéphanie', $this->notice_data['auteurs'][0]); } /** @test */ - public function facetteShouldBeAsExpected() { - $this->assertContains('A12', $this->notice_data['facettes']); + public function facetteShouldContainsA12() { + $this->assertContains('A1', $this->notice_data['facettes']); } /** @test */ - public function codifAuteurShouldBeAsExpected() { - $this->assertTrue($this->_mock_sql - ->methodHasBeenCalledWithParams('insert', - ['codif_auteur', - ['libelle' => 'Stéphanie Ledu', - 'formes' => 'LEDUxSTEPHANIE']])); + public function authorStephanieLeduShouldHaveBeenCreated() { + $this->assertEquals('Stéphanie Ledu', + Class_CodifAuteur::findFirstBy(['formes' => 'LEDUxSTEPHANIE']) + ->getLibelle()); } } @@ -1734,11 +1729,15 @@ class NoticeIntegrationAuxAnimauxLaGuerreTest extends NoticeIntegrationTestCase } - /** @test */ - public function noticeAuxAnimauxLaGuerreCallNumberShouldNotBeEmpty() { + public function setUp() { + parent::setUp(); $this->loadNotice('unimarc_aux_animaux_la_guerre'); $this->loadNotice('unimarc_aux_animaux_la_guerre'); + } + + /** @test */ + public function noticeAuxAnimauxLaGuerreCallNumberShouldNotBeEmpty() { $notice = Class_Notice::find(1); $this->assertEquals('RP MATH', $notice->getCote()); } @@ -1783,12 +1782,11 @@ class NoticeIntegrationUpdateNoticeTest extends NoticeIntegrationTestCase { ->with($req_profils, false) ->answers($profil_donnees_1->getRawAttributes()); - VariableCache::getInstance() - ->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\n15:Liseuse\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_CosmoVar::newInstanceWithId('types_docs', + ['liste' => "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\n15:Liseuse\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_CosmoVar::newInstanceWithId('nature_docs', + ['liste' => '1:Collection\r\n2:Dataset\r\n3:Event\r\n4:Image']); } /** @test */ @@ -1806,24 +1804,75 @@ class NoticeIntegrationUpdateNoticeTest extends NoticeIntegrationTestCase { class NoticeIntegration11septembre2001Test extends NoticeIntegrationTestCase { - protected $_profil_donnees = ['id_profil' => 111, - 'id' => 111, - 'libelle' => 'Unimarc Casqy', - 'accents' => '1', - 'rejet_periodiques' => '0', - 'id_article_periodique' => '2', - 'type_fichier' => '0', - 'format' => '0', - 'attributs' => 'a:6:{i:0;a:8:{s:8:"type_doc";a:26:{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:6:"LIV;MS";}i:2;a:3:{s:4:"code";s:1:"2";s:5:"label";s:2:"as";s:8:"zone_995";s:3:"PER";}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:3:"DVD";}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:"6";s:5:"label";s:2:"cm";s:8:"zone_995";s:3:"PAR";}i:7;a:3:{s:4:"code";s:1:"7";s:5:"label";s:0:"";s:8:"zone_995";s:3:"BRO";}i:8;a:3:{s:4:"code";s:1:"8";s:5:"label";s:0:"";s:8:"zone_995";s:3:"DOS";}i:9;a:3:{s:4:"code";s:1:"9";s:5:"label";s:0:"";s:8:"zone_995";s:0:"";}i:10;a:3:{s:4:"code";s:2:"10";s:5:"label";s:0:"";s:8:"zone_995";s:6:"WEB;MF";}i:11;a:3:{s:4:"code";s:2:"11";s:5:"label";s:0:"";s:8:"zone_995";s:3:"MET";}i:12;a:3:{s:4:"code";s:2:"12";s:5:"label";s:0:"";s:8:"zone_995";s:3:"JEU";}i:13;a:3:{s:4:"code";s:2:"13";s:5:"label";s:0:"";s:8:"zone_995";s:3:"CAR";}i:14;a:3:{s:4:"code";s:2:"14";s:5:"label";s:0:"";s:8:"zone_995";s:3:"DDD";}i:15;a:3:{s:4:"code";s:2:"15";s:5:"label";s:0:"";s:8:"zone_995";s:3:"DIA";}i:16;a:3:{s:4:"code";s:2:"16";s:5:"label";s:0:"";s:8:"zone_995";s:3:"DIS";}i:17;a:3:{s:4:"code";s:2:"17";s:5:"label";s:0:"";s:8:"zone_995";s:3:"CDJ";}i:18;a:3:{s:4:"code";s:2:"18";s:5:"label";s:0:"";s:8:"zone_995";s:4:"LDVD";}i:19;a:3:{s:4:"code";s:2:"19";s:5:"label";s:0:"";s:8:"zone_995";s:3:"LIA";}i:20;a:3:{s:4:"code";s:2:"20";s:5:"label";s:0:"";s:8:"zone_995";s:3:"LIS";}i:21;a:3:{s:4:"code";s:2:"21";s:5:"label";s:0:"";s:8:"zone_995";s:3:"TXT";}i:22;a:3:{s:4:"code";s:2:"22";s:5:"label";s:0:"";s:8:"zone_995";s:0:"";}i:23;a:3:{s:4:"code";s:2:"23";s:5:"label";s:0:"";s:8:"zone_995";s:14:"VDD;VID;UMATIC";}i:24;a:3:{s:4:"code";s:2:"24";s:5:"label";s:0:"";s:8:"zone_995";s:4:"METI";}i:25;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:0:"";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";}}' - ]; + public function getProfilDonnees() { + return Class_IntProfilDonnees::forALOES() + ->setAttributs(serialize( + [ [ + 'type_doc' => [ + [ 'code' => '0', 'label' => '', 'zone_995' => '' ], + [ 'code' => '1', 'label' => 'am;na', 'zone_995' => 'LIV;MS' ], + [ 'code' => '2', 'label' => 'as', 'zone_995' => 'PER'], + [ 'code' => '3', 'label' => 'i;j', 'zone_995' => 'CD;LIVCD;LIVK7;K7'], + [ 'code' => '4', 'label' => 'g','zone_995' => 'DVD'], + [ 'code' => '5', 'label' => 'l;m', 'zone_995' => 'CDR'], + [ 'code' => '6', 'label' => 'cm', 'zone_995' => 'PAR'], + [ 'code' => '7', 'label' => '', 'zone_995' => 'BRO' ], + [ 'code' => '8', 'label' => '', 'zone_995' => 'DOS'], + [ 'code' => '9', 'label' => '', 'zone_995' => ''], + [ 'code' => '10', 'label' => '', 'zone_995' => 'WEB;MF'], + [ 'code' => '11', 'label' => '', 'zone_995' => 'MET'], + [ 'code' => '12', 'label' => '', 'zone_995' => 'JEU'], + [ 'code' => '13', 'label' => '', 'zone_995' => 'CAR'], + [ 'code' => '14', 'label' => '', 'zone_995' => 'DDD'], + [ 'code' => '15', 'label' => '', 'zone_995' => 'DIA'], + [ 'code' => '16', 'label' => '', 'zone_995' => 'DIS'], + [ 'code' => '17', 'label' => '', 'zone_995' => 'CDJ'], + [ 'code' => '18', 'label' => '', 'zone_995' => 'LDVD'], + [ 'code' => '19', 'label' => '', 'zone_995' => 'LIA'], + [ 'code' => '20', 'label' => '', 'zone_995' => 'LIS'], + [ 'code' => '21', 'label' => '', 'zone_995' => 'TXT'], + [ 'code' => '22', 'label' => '', 'zone_995' => ''], + [ 'code' => '23', 'label' => '', 'zone_995' => 'VDD;VID;UMATIC'], + [ 'code' => '24', 'label' => '', 'zone_995' => 'METI'], + ], + 'champ_code_barres' => 'f', + 'champ_cote' => 'k', + 'champ_type_doc' => 'r', + 'champ_genre' => '', + 'champ_section' => 'q', + 'champ_emplacement' => 'u', + 'champ_annexe' => 'b' + ], + + [ 'champs' => ''], + [ 'champs' => ''], + [ 'champs' => ''], + [ 'champs' => '', 'xml_balise_abonne' => '', 'xml_champs_abonne' => [ 'IDABON' => '', + 'ORDREABON' => '', + 'NOM' => '', + 'PRENOM' => '', + 'NAISSANCE' => '', + 'PASSWORD' => '', + 'MAIL' => '', + 'DATE_DEBUT' => '', + 'DATE_FIN' => '', + 'ID_SIGB' => '' ] ], + [ 'zone' => '995', 'champ' => 'v', 'format' => '3', 'jours' => '', 'valeurs' => 'n'] + ])) + ->setIdProfil(111) + ->getRawAttributes(); + } public function setUp() { parent::setUp(); - VariableCache::getInstance() - ->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\n15:Liseuse\r\n21:Texte audio\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" - ]); + + $this->fixture('Class_CosmoVar', + ['id' => 'nature_docs', + 'liste' => "1:Collection\r\n2:Dataset\r\n3:Event\r\n4:Image"]); + + $this->fixture('Class_CosmoVar', + ['id' => 'types_docs', + 'liste' => "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\n15:Liseuse\r\n21:Texte audio\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"]); } @@ -1838,6 +1887,7 @@ class NoticeIntegration11septembre2001Test extends NoticeIntegrationTestCase { + /** @see http://forge.afi-sa.fr/issues/17605 */ class NoticeIntegrationArchivesAlsaceTest extends NoticeIntegrationTestCase { public function getProfilDonnees() { @@ -1892,14 +1942,14 @@ class NoticeIntegrationArchivesAlsaceTest extends NoticeIntegrationTestCase { /** @test */ public function facettesShouldContainsM1AndM2AndD1() { - $this->assertEquals('T1 D94438 A12 M1 M2 Lfre', + $this->assertEquals('T1 D94438 A1 M1 M2 Lfre', Class_Notice::find(1)->getFacettes()); } /** @test */ public function facettesWithExemplairesShouldContainsM1AndM2AndD1() { - $this->assertEquals('D94438 A12 M1 M2 Lfre T1 B1 YBibliothèque des Dominicains', + $this->assertEquals('D94438 A1 M1 M2 Lfre T1 B1 YBibliothèque des Dominicains', Class_Notice::find(1)->updateFacetsFromExemplaires()->getFacettes()); } } @@ -2143,7 +2193,7 @@ class NoticeIntegrationOblivionTest extends NoticeIntegrationTestCase { /** @test */ public function facettesShouldContainsF2andF24() { - $this->assertEquals('T4 A12 F24 F25 Lfre G96', $this->_notice->getFacettes()); + $this->assertEquals('T4 A1 F24 F25 Lfre G96', $this->_notice->getFacettes()); } } diff --git a/cosmogramme/tests/php/classes/NoticeIntegrationTypeDocTest.php b/cosmogramme/tests/php/classes/NoticeIntegrationTypeDocTest.php index 05fc2c90d1142560880ce6e883081a8fe919840b..bf5e1ebbb3126d11907df9ec2897b191020bf613 100644 --- a/cosmogramme/tests/php/classes/NoticeIntegrationTypeDocTest.php +++ b/cosmogramme/tests/php/classes/NoticeIntegrationTypeDocTest.php @@ -31,8 +31,8 @@ class NoticeIntegrationTypeDocPartitionValenceTest extends NoticeIntegrationTest public function setUp() { parent::setUp(); - VariableCache::getInstance() - ->setListeCacheItem('types_docs', "0:non identifié\r\n1:Livres\r\n2:Revues\r\n3:Disques\r\n4:DVD\r\n5:Cédéroms\r\n6:Livres CD\r\n7:Partitions\r\n8:Articles\r\n9:Fils rss\r\n10:Sites internet\r\n11:Jeux video\r\n12:Matériel\r\n13:Documents iconographiques\r\n14:Textes lus\r\n15:Cartes et plans\r\n16:Disques vinyles\r\n17:Estampes\r\n18:Liseuses\r\n100:Documents numérisés\r\n101:Diaporamas\r\n102:E-Books\r\n103:OAI\r\n104:Arte VOD\r\n105:Cours en ligne Vodeclic\r\n106:Livres numériques\r\n107:Vidéos à la demande\r\n108:Cours en ligne Tout Apprendre\r\n109:Enregistrement audio\r\n110:Numérique Premium\r\n111:Cyberlibris"); + Class_CosmoVar::newInstanceWithId('types_docs', + ['liste' => "0:non identifié\r\n1:Livres\r\n2:Revues\r\n3:Disques\r\n4:DVD\r\n5:Cédéroms\r\n6:Livres CD\r\n7:Partitions\r\n8:Articles\r\n9:Fils rss\r\n10:Sites internet\r\n11:Jeux video\r\n12:Matériel\r\n13:Documents iconographiques\r\n14:Textes lus\r\n15:Cartes et plans\r\n16:Disques vinyles\r\n17:Estampes\r\n18:Liseuses\r\n100:Documents numérisés\r\n101:Diaporamas\r\n102:E-Books\r\n103:OAI\r\n104:Arte VOD\r\n105:Cours en ligne Vodeclic\r\n106:Livres numériques\r\n107:Vidéos à la demande\r\n108:Cours en ligne Tout Apprendre\r\n109:Enregistrement audio\r\n110:Numérique Premium\r\n111:Cyberlibris"]); $this->loadNotice('unimarc_musiques_europes'); } diff --git a/library/Class/AdminVar.php b/library/Class/AdminVar.php index b01bcbfac769c99a16a964d3a653a8219da7de81..8208b487e34ff628fee1797c77f2a1bf06e16788 100644 --- a/library/Class/AdminVar.php +++ b/library/Class/AdminVar.php @@ -25,7 +25,8 @@ class Class_AdminVar extends Storm_Model_Abstract { TYPE_DEFAULT = 'default', TYPE_ENCODED_DATA = 'encoded-data', TYPE_ON_OFF = 'on-off', - TYPE_MULTI_INPUT = 'multi-input'; + TYPE_MULTI_INPUT = 'multi-input', + TYPE_RAW_TEXT = 'raw-text'; protected $_table_name = 'bib_admin_var'; protected $_table_primary = 'CLEF'; @@ -379,7 +380,8 @@ class Class_AdminVar extends Storm_Model_Abstract { 'description' => 'Nom de la bibliothèque chez bibliosurf (en minuscules)', ], 'JS_STAT' => [ - 'description' => 'Javascript code for statistics' + 'description' => 'Javascript code for statistics', + 'type' => self::TYPE_RAW_TEXT, ], 'ID_READ_SPEAKER' => [ 'description' => 'Numéro de client Read Speaker <a target="_blank" href="http://webreader.readspeaker.com">http://webreader.readspeaker.com</a>', @@ -615,6 +617,7 @@ class Class_AdminVar extends Storm_Model_Abstract { ], 'TEXT_REPLACEMENTS' => [ 'description' => 'Remplacement de textes à la volée. <br/>Ex:<br/>Panier;Sélection<br/>Vous avez %d paniers;Vous avez %d sélections', + 'type' => self::TYPE_RAW_TEXT, ], 'ARTICLES_LIST_MODE' => [ 'description' => 'Le gestionnaire de contenu affiche les articles sous forme de liste paginée au lieu de d\'une arborescence. Cet affichage est adapté lorsque le nombre d\'article devient trop important', diff --git a/library/Class/Article.php b/library/Class/Article.php index c20381a9daaa5bae7817b4e83d276b657e29c9b2..8c01ef3327340ed8237290864c43d54357a0e591 100644 --- a/library/Class/Article.php +++ b/library/Class/Article.php @@ -164,18 +164,29 @@ class ArticleLoader extends Storm_Model_Loader { * @return ArticleLoader */ protected function _orderAndLimit() { + if ($this->_sort_order == 'CommentCount') { + $this->_select + ->join('cms_rank', + 'cms_rank.ID_CMS = cms_article.ID_ARTICLE', + []) + ->order('(cms_rank.abon_nombre_avis + cms_rank.bib_nombre_avis) desc'); + return $this; + } + + if (!$this->_has_selection) { $this->_select->order('DATE_CREATION DESC'); $this->_select->limit($this->_limit); + return $this; + } - } else { - if ($this->_id_categories) - $this->_select->order(sprintf("FIELD(`cms_article`.ID_CAT, %s)", implode(',', $this->_id_categories))); - if ($this->_id_articles) - $this->_select->order(sprintf("FIELD(ID_ARTICLE, %s)", implode(',', $this->_id_articles))); + if ($this->_id_categories) + $this->_select->order(sprintf("FIELD(`cms_article`.ID_CAT, %s)", implode(',', $this->_id_categories))); + + if ($this->_id_articles) + $this->_select->order(sprintf("FIELD(ID_ARTICLE, %s)", implode(',', $this->_id_articles))); - } return $this; } @@ -295,7 +306,7 @@ class ArticleLoader extends Storm_Model_Loader { $defaults = [ 'id_categorie' => '', // catégories d'article, ex: 12-2-8-1-89 'id_items' => '', // liste d'articles, ex: 39-28-7 - 'display_order' => '', // tri, cf. méthodes Class_Article::sortByXXX, Random, Selection + 'display_order' => '', // tri, cf. méthodes Class_Article::sortByXXX, Random, Selection, CommentCount 'nb_analyse' => 0, // afficher nb_aff articles (aléatoires) parmis nb_analyse articles ramenés sur un critère 'nb_aff' => null, // nb d'article à retourner 'langue' => null, // que les traductions de cette langue diff --git a/library/Class/Batch/SendNewsletters.php b/library/Class/Batch/SendNewsletters.php index bfd6c9cd21ee81d0d61a11d8e8b90155008db75d..21dc9d5aa0c2345ba877a011fbb835f06a7b2994 100644 --- a/library/Class/Batch/SendNewsletters.php +++ b/library/Class/Batch/SendNewsletters.php @@ -22,12 +22,14 @@ class Class_Batch_SendNewsletters extends Class_Batch_Abstract { - protected $_newsletter; + protected + $_newsletter, + $_previous_mail, + $_time_limit; public function __construct($newsletter) { $this->_newsletter = $newsletter; - return $this; } @@ -50,11 +52,79 @@ class Class_Batch_SendNewsletters extends Class_Batch_Abstract { public function run() { - exec("/usr/bin/php -f ".realpath(dirname(__FILE__))."/../../../scripts/sendNewsletter.php " - .$this->getExecParams() - ." > /dev/null &"); + exec('/usr/bin/php -f ' + . realpath(dirname(__FILE__)) . '/../../../scripts/sendNewsletter.php ' + . $this->getExecParams() + . ' > /dev/null &'); + return $this; + } + + + public function sendAllBy($page_size) { + if (!$this->_newsletter) + return; + + $letter = $this->_newsletter; + + Class_NewsletterSubscription::resetSendFlagForNewsletter($letter->getId()); + + $this->_previous_mail = ''; + while (0 < count(array_filter($receivers = $letter->getReceivers($page_size)))) { + $this->_clearMemory() + ->_giveMeMoreTime(30) + ->_sendPage($receivers); + + $letter->setLastDistributionDateWithFormat(); + Class_NewsletterSubscription::updateSendFlagForReceivers($letter->getId(), + $letter->getReceivers($page_size)); + } + + $this->getTimeLimit()->reset(); + } + + + protected function _clearMemory() { + Class_NewsletterSubscription::clearCache(); + Class_Users::clearCache(); + Storm_Model_Loader::resetCache(); + gc_collect_cycles(); + + return $this; + } + + + protected function _giveMeMoreTime($seconds) { + $this->getTimeLimit()->set($seconds); return $this; } -} -?> \ No newline at end of file + + protected function _sendPage($receivers) { + $letter = $this->_newsletter; + + $mail = $letter->newMail(); + $mail->addTo($letter->getExpediteur()); + + foreach($receivers as $receiver) + $this->_addReceiverTo($receiver, $mail); + + $mail->send(); + } + + + protected function _addReceiverTo($receiver, $mail) { + $receiver_mail = $receiver->getMail(); + if ($this->_previous_mail != $receiver_mail) { + $mail->addBcc($receiver_mail); + $this->_previous_mail = $receiver_mail; + } + } + + + public function getTimeLimit() { + if (!$this->_time_limit) + $this->_time_limit = Class_Systeme_TimeLimit::getInstance(); + + return $this->_time_limit; + } +} \ No newline at end of file diff --git a/library/Class/CosmoVar.php b/library/Class/CosmoVar.php index 22777f70efac310b7fcade369cacc1c77453e36f..fa037c211519bf6dd90bbfaead3b42ae124e9f34 100644 --- a/library/Class/CosmoVar.php +++ b/library/Class/CosmoVar.php @@ -106,6 +106,8 @@ class Class_CosmoVar extends Storm_Model_Abstract { protected $_table_primary = 'clef'; protected $_loader_class = 'Class_CosmoVarLoader'; + const DOUBLE_SEARCH_ALPHA_KEY = 1; + /** * @param string $name * @return mixed string|null diff --git a/library/Class/Cosmogramme/FileParser.php b/library/Class/Cosmogramme/FileParser.php index c6d359e74c9aca8a3198aeb1319d6e9100eb9757..900fa523767b95aba841566974bb1cae84866ef5 100644 --- a/library/Class/Cosmogramme/FileParser.php +++ b/library/Class/Cosmogramme/FileParser.php @@ -20,7 +20,6 @@ */ /** - * /!\ WIP * Bokeh translation from cosmogramme API cosmogramme/php/classes/classe_parseur.php */ abstract class Class_Cosmogramme_FileParser { @@ -142,7 +141,7 @@ class Class_Cosmogramme_FileParser_Marc extends Class_Cosmogramme_FileParser { $data .= $record; } - $ret = new Class_Cosmogramme_FileParserRecord($data); + $ret = new Class_Cosmogramme_FileParser_Record($data); $at_end ? $ret->beEnd() : $ret->beOk(); $this->_position += strlen($data); @@ -161,7 +160,7 @@ abstract class Class_Cosmogramme_FileParser_Ascii extends Class_Cosmogramme_File $data = str_getcsv($data, $this->_separator); $this->_position = $fileSystem->ftell($this->_file_handle); - $ret = new Class_Cosmogramme_FileParserRecord($data); + $ret = new Class_Cosmogramme_FileParser_Record($data); $fileSystem->feof($this->_file_handle) ? $ret->beEnd() : $ret->beOk(); return $ret; @@ -230,12 +229,12 @@ class Class_Cosmogramme_FileParser_Xml extends Class_Cosmogramme_FileParser { $record = $fileSystem->fread($this->_file_handle, self::READ_SIZE); if ($fileSystem->feof($this->_file_handle) && !$record) - return (new Class_Cosmogramme_FileParserRecord(''))->beEnd(); + return (new Class_Cosmogramme_FileParser_Record(''))->beEnd(); $data .= $record; } - $ret = (new Class_Cosmogramme_FileParserRecord($data))->beOk(); + $ret = (new Class_Cosmogramme_FileParser_Record($data))->beOk(); $this->_position += strlen($data); return $ret; @@ -248,90 +247,4 @@ class Class_Cosmogramme_FileParser_Csv extends Class_Cosmogramme_FileParser_Asci protected $_separator = ','; } - - -class Class_Cosmogramme_FileParserRecord { - const STATUS_OK = 'ok'; - const STATUS_ERROR = 'error'; - const STATUS_END = 'eof'; - - protected $_status, $_data, $_completion, $_position, $_next_position, $_error; - - - public function __construct($data='') { - $this->_data = $data; - } - - - public function withErrorDo($closure) { - return $closure($this->_error); - } - - - public function withDataDo($closure) { - return $closure($this->_data); - } - - - public function withNextPositionDo($closure) { - return $closure($this->_next_position); - } - - - public function setCompletion($completion) { - $this->_completion = $completion; - return $this; - } - - - public function setPosition($position) { - $this->_position = $position; - return $this; - } - - - public function setNextPosition($position) { - $this->_next_position = $position; - return $this; - } - - - public function setError($error) { - $this->_error = $error; - return $this; - } - - - public function beOk() { - $this->_status = self::STATUS_OK; - return $this; - } - - - public function isOk() { - return $this->_status == self::STATUS_OK; - } - - - public function beError() { - $this->_status = self::STATUS_ERROR; - return $this; - } - - - public function isError() { - return $this->_status == self::STATUS_ERROR; - } - - - public function beEnd() { - $this->_status = self::STATUS_END; - return $this; - } - - - public function isEnd() { - return $this->_status == self::STATUS_END; - } -} ?> \ No newline at end of file diff --git a/library/Class/Cosmogramme/FileParser/Record.php b/library/Class/Cosmogramme/FileParser/Record.php new file mode 100644 index 0000000000000000000000000000000000000000..15c79db3f912df392289d8be9a4fde9ee2b20485 --- /dev/null +++ b/library/Class/Cosmogramme/FileParser/Record.php @@ -0,0 +1,108 @@ +<?php +/** + * Copyright (c) 2012-2014, Agence Française Informatique (AFI). All rights reserved. + * + * BOKEH is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation. + * + * There are special exceptions to the terms and conditions of the AGPL as it + * is applied to this software (see README file). + * + * BOKEH is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with BOKEH; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + +class Class_Cosmogramme_FileParser_Record { + const STATUS_OK = 'ok'; + const STATUS_ERROR = 'error'; + const STATUS_END = 'eof'; + + protected $_status, $_data, $_completion, $_position, $_next_position, $_error; + + + public function __construct($data='') { + $this->_data = $data; + } + + + public function withErrorDo($closure) { + return $closure($this->_error); + } + + + public function withDataDo($closure) { + return $closure($this->_data); + } + + + public function withNextPositionDo($closure) { + return $closure($this->_next_position); + } + + + public function setCompletion($completion) { + $this->_completion = $completion; + return $this; + } + + + public function setPosition($position) { + $this->_position = $position; + return $this; + } + + + public function setNextPosition($position) { + $this->_next_position = $position; + return $this; + } + + + public function setError($error) { + $this->_error = $error; + return $this; + } + + + public function beOk() { + $this->_status = self::STATUS_OK; + return $this; + } + + + public function isOk() { + return $this->_status == self::STATUS_OK; + } + + + public function beError() { + $this->_status = self::STATUS_ERROR; + return $this; + } + + + public function isError() { + return $this->_status == self::STATUS_ERROR; + } + + + public function beEnd() { + $this->_status = self::STATUS_END; + return $this; + } + + + public function isEnd() { + return $this->_status == self::STATUS_END; + } +} + +?> \ No newline at end of file diff --git a/library/Class/Cosmogramme/Integration.php b/library/Class/Cosmogramme/Integration.php index 30bf0a3a31ca1f38fb21b84848d47845d35c501e..86f63e05beaee14bc6678b7d04ef16b3306163fb 100644 --- a/library/Class/Cosmogramme/Integration.php +++ b/library/Class/Cosmogramme/Integration.php @@ -28,16 +28,18 @@ class Class_Cosmogramme_Integration extends Storm_Model_Abstract { const TYPE_OPERATION_TOTAL = 2; const TYPE_OPERATION_PERGAME_HEADER_DELETE = 3; - protected $_table_name = 'integrations'; - protected $_belongs_to = [ + protected + $_table_name = 'integrations', + $_belongs_to = [ 'bib' => ['model' => 'Class_IntBib', 'role' => 'int_bib', 'referenced_in' => 'id_bib'], 'profil_donnees' => ['model' => 'Class_IntProfilDonnees', 'role' => 'integration', - 'referenced_in' => 'profil']]; + 'referenced_in' => 'profil']], + $_default_attribute_values = ['type_doc' => '']; public function isTotal() { return self::TYPE_OPERATION_TOTAL == $this->getTypeOperation(); @@ -54,7 +56,7 @@ class Class_Cosmogramme_Integration extends Storm_Model_Abstract { } - public function beIncrementImport() { + public function beIncrementImport() { return $this->setTypeOperation(self::TYPE_OPERATION_INCREMENT); } @@ -74,6 +76,11 @@ class Class_Cosmogramme_Integration extends Storm_Model_Abstract { } + public function isSourceHTTP() { + return (false !== strpos($this->getFichier(), 'http://')); + } + + public function fileExists() { return $this->getFileSystem()->file_exists($this->getFilePath()); } diff --git a/library/Class/Cosmogramme/Integration/Chronometre.php b/library/Class/Cosmogramme/Integration/Chronometre.php index ce4461c9ff291c94549af5a11b38af6948038325..6c3029d00b160e6fb0ced27c9132c321161f5265 100644 --- a/library/Class/Cosmogramme/Integration/Chronometre.php +++ b/library/Class/Cosmogramme/Integration/Chronometre.php @@ -25,9 +25,9 @@ class Class_Cosmogramme_Integration_Chronometre { public static function fromLegacyState($main, $on_file, $on_records) { return (new Class_Cosmogramme_Integration_Chronometre()) - ->startMain($main->startTime) - ->startOnFile($on_file->startTime) - ->startOnRecords($on_records->startTime); + ->startMain($main->timeStart) + ->startOnFile($on_file->timeStart) + ->startOnRecords($on_records->timeStart); } @@ -42,7 +42,7 @@ class Class_Cosmogramme_Integration_Chronometre { foreach ([$main => $this->_main, $on_file => $this->_on_file, $on_records => $this->_on_records] as $legacy => $internal) - $legacy->startTime = $internal->getStart(); + $legacy->timeStart = $internal->getStart(); } diff --git a/library/Class/Cosmogramme/Integration/DataSource.php b/library/Class/Cosmogramme/Integration/DataSource.php new file mode 100644 index 0000000000000000000000000000000000000000..4c8c5f5851a480b142292142bbf868e3e0bd9de1 --- /dev/null +++ b/library/Class/Cosmogramme/Integration/DataSource.php @@ -0,0 +1,201 @@ +<?php +/** + * Copyright (c) 2012-2014, Agence Française Informatique (AFI). All rights reserved. + * + * BOKEH is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation. + * + * There are special exceptions to the terms and conditions of the AGPL as it + * is applied to this software (see README file). + * + * BOKEH is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with BOKEH; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +abstract class Class_Cosmogramme_Integration_DataSource { + protected + $_uri, + $_integration; + + + public static function on($integration) { + if ($integration->isSourceHTTP()) + return new Class_Cosmogramme_Integration_DataSourceOAI($integration); + + return new Class_Cosmogramme_Integration_DataSourceFile($integration); + } + + + public function __construct($integration) { + $this->_integration = $integration; + } + + + public function getUri() { + return $this->_uri; + } + + + abstract function isValid(); + + abstract function next(); +} + + + + +class Class_Cosmogramme_Integration_DataSourceFile extends Class_Cosmogramme_Integration_DataSource { + protected $_parser; + + + public function __construct($integration) { + parent::__construct($integration); + $this->_uri = Class_CosmoVar::get('integration_path') . $integration->getFichier(); + $this->_parser = $this->newParser(); + } + + + public function isValid() { + return $this->_parser->isValid(); + } + + + public function next() { + return $this->_parser->next(); + } + + + public function newParser() { + return + Class_Cosmogramme_FileParser::openFor($this->_uri, + $this->_integration->getPointeurReprise(), + $this->_integration->getProfilDonnees()); + } +} + + + + +class Class_Cosmogramme_Integration_DataSourceOAI extends Class_Cosmogramme_Integration_DataSource { + protected + $_uri_params, + $_oai_client, + $_position, + $_records, + $_barcode_field; + + + public function __construct($integration) { + parent::__construct($integration); + + list($uri_path, $uri_params) = array_filter(explode('?', $integration->getFichier())); + $this->_uri = $uri_path; + $this->_computeURIParams($uri_params, $integration); + + $this->_oai_client = $this->newClient(); + $this->_restorePosition($integration); + + $this->_barcode_field = $integration->getProfilDonnees()->getBarCodeField(); + } + + + protected function _restorePosition($integration) { + $parts = explode('-', trim($this->_integration->getPointeurReprise())); + if (count($parts) !== 2) { + $this->_position = 0; + return $this; + } + + list($resumption_token, $this->_position) = $parts; + if ($resumption_token) + $this->_oai_client->setListRecordsResumptionToken(new Class_WebService_ResumptionToken($resumption_token)); + } + + + protected function _computeURIParams($uri_params, $integration) { + parse_str($uri_params, $this->_uri_params); + if ($integration->isTotal()) + return $this; + + if (!$last_integration = Class_Cosmogramme_Integration::findFirstBy(['fichier' => $integration->getFichier(), + 'id_bib' => $integration->getIdBib(), + 'order' => 'id desc', + 'traite' => 'oui'])) + return $this; + + $this->_uri_params['dateFrom'] = $last_integration->getDateTransfert(); + } + + + public function isValid() { + return true; + } + + + protected function _getNextRecords() { + if (!isset($this->_records)) + $this->_records = $this->_oai_client->hasNextRecords() + ? $this->_oai_client->getNextRecords() + : $this->_oai_client->getRecords($this->_uri_params); + + if ($this->_position >= count($this->_records)) { + $this->_records = $this->_oai_client->getNextRecords(); + $this->_position = 0; + } + + return $this->_records; + } + + + protected function _addItemFields($unimarc_record) { + if (!$id = $unimarc_record->get_subfield('001')) + return $this; + + $unimarc_record->add_field('995', ' ', [ [$this->_barcode_field, + $id[0]] ]); + $unimarc_record->update(); + + return $this; + } + + + public function next() { + $records = $this->_getNextRecords(); + + if (count($records) == 0) + return (new Class_Cosmogramme_FileParser_Record())->beEnd(); + + $unimarc_record = $records[$this->_position]; + $this->_addItemFields($unimarc_record); + $record = new Class_Cosmogramme_FileParser_Record($unimarc_record->getFullRecord()); + + $token_string = ''; + if ($resumption_token = $this->_oai_client->getListRecordsResumptionToken()) { + $token_string = $resumption_token->getToken(); + } + + $record + ->setPosition($token_string.'-'.$this->_position) + ->setNextPosition($token_string.'-'.($this->_position + 1)) + ->setCompletion(intval(100 * $this->_position / count($records))) + ->beOk(); + + $this->_position = $this->_position + 1; + return $record; + } + + + public function newClient() { + return (new Class_WebService_OAI()) + ->setOAIHandler($this->_uri) + ->setMetadataPrefix('marc21') + ->setParser(new Class_WebService_OAI_MarcXMLParser()); + } +} diff --git a/library/Class/Cosmogramme/Integration/PhaseAbstract.php b/library/Class/Cosmogramme/Integration/PhaseAbstract.php index 65010509093b58975afc59f5dbdbb5cbeec4f7ee..b1c643cb3c38cf4b5ca773077cd48b34a44a4805 100644 --- a/library/Class/Cosmogramme/Integration/PhaseAbstract.php +++ b/library/Class/Cosmogramme/Integration/PhaseAbstract.php @@ -22,6 +22,7 @@ abstract class Class_Cosmogramme_Integration_PhaseAbstract { use Trait_TimeSource; + use Trait_StaticFileSystem; protected $_label = ''; protected $_phase, $_log, $_printer, $_chrono, $_is_time_out; @@ -122,8 +123,7 @@ abstract class Class_Cosmogramme_Integration_PhaseAbstract { public function isTimeOut() { - return $this->_is_time_out = $this->_is_time_out - || (!$this->_phase->isCron() - && $this->_chrono->mainElapsed() > $this->_chrono->timeout()); + return !$this->_phase->isCron() + && $this->_chrono->mainElapsed() > $this->_chrono->timeout(); } } \ No newline at end of file diff --git a/library/Class/Cosmogramme/Integration/PhaseDeleteItem.php b/library/Class/Cosmogramme/Integration/PhaseDeleteItem.php new file mode 100644 index 0000000000000000000000000000000000000000..58090bfff0f100868be123f772d65cc4cc0ff70f --- /dev/null +++ b/library/Class/Cosmogramme/Integration/PhaseDeleteItem.php @@ -0,0 +1,66 @@ +<?php +/** + * Copyright (c) 2012-2014, Agence Française Informatique (AFI). All rights reserved. + * + * BOKEH is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation. + * + * There are special exceptions to the terms and conditions of the AGPL as it + * is applied to this software (see README file). + * + * BOKEH is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with BOKEH; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ +require_once('cosmogramme/php/classes/classe_notice_integration.php'); + +class Class_Cosmogramme_Integration_PhaseDeleteItem extends Class_Cosmogramme_Integration_PhaseOnDataSource { + const MY_ID=1.1; + + /** @return array **/ + protected function _previousPhaseIds() { + return [1]; + } + + + protected function _init($phase) {} + + /** one line of file has been read and should be processed here */ + protected function _processLine($line, $integration) { + $line->withDataDo( + function($data) use ($integration){ + $this->deleteItems($data, $integration); + }); + } + + + public function deleteItems($data, $integration) { + $notice = new notice_integration(); + $notice->setParamsIntegration($integration->getIdBib(), + $integration->getTypeOperation(), + $integration->getProfil(), + $integration->getTypeDoc()); + $notice->traiteNotice($data); + } + + /** in case of full import, implements what is needed to be done */ + protected function _clean($integration){} + + /** should return true if $line must not be processed */ + protected function _shouldIgnoreLine($line, $integration){} + + /** return true if given profil parameters are correct for this phase */ + protected function _validateProfil($profil){ + return $profil->isBiblioRecords(); + } + + /** hooked called after the file has been fully processed */ + protected function _afterFileProcessed($integration){} + +} \ No newline at end of file diff --git a/library/Class/Cosmogramme/Integration/PhaseNotice.php b/library/Class/Cosmogramme/Integration/PhaseNotice.php new file mode 100644 index 0000000000000000000000000000000000000000..13394c23d01a0b36e5831b64a41367e3f3960c5b --- /dev/null +++ b/library/Class/Cosmogramme/Integration/PhaseNotice.php @@ -0,0 +1,102 @@ +<?php +/** + * Copyright (c) 2012-2014, Agence Française Informatique (AFI). All rights reserved. + * + * BOKEH is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation. + * + * There are special exceptions to the terms and conditions of the AGPL as it + * is applied to this software (see README file). + * + * BOKEH is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with BOKEH; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ +require_once('cosmogramme/php/classes/classe_notice_integration.php'); + + +class Class_Cosmogramme_Integration_PhaseNotice extends Class_Cosmogramme_Integration_PhaseOnDataSource { + const MY_ID = 0; + + protected function _init($phase) {} + + + /** one line of file has been read and should be processed here */ + protected function _processLine($line, $integration) { + $line->withDataDo( + function($data) use ($integration){ + $this->importRecord($data, $integration); + }); + } + + + public function importRecord($data, $integration) { + $notice = new notice_integration(); + $notice->setParamsIntegration($integration->getIdBib(), + $integration->getTypeOperation(), + $integration->getProfil(), + $integration->getTypeDoc()); + $notice->traiteNotice($data); + } + + /** in case of full import, implements what is needed to be done */ + protected function _clean($integration) { + if(!$integration->isSourceHTTP() && !filesize($this->_file_path)) { + $this->_log->ecrire('<span class="rouge">Le fichier d\'import total est vide : aucun exemplaire supprimé.</span><br><br>'); + return; + } + + $id_int_bib = $integration->getIdBib(); + $del_msg = '<br><span class="violet">Supression des exemplaires</span><br>'; + + $nb = Class_Exemplaire::countBy(['id_int_bib' => $id_int_bib]); + Class_Exemplaire::deleteBy(['id_int_bib' => $id_int_bib]); + + $nb1 = Class_NoticeSuccincte::countBy(['id_bib' => $id_int_bib]); + Class_NoticeSuccincte::deleteBy(['id_bib' => $id_int_bib]); + + $del_msg .= '<span class="vert">' . $nb . ' exemplaires supprimés</span><br>'; + $del_msg .= '<span class="vert">' . $nb1 . ' notices succinctes supprimées</span><br><br>'; + $this->_log->ecrire($del_msg); + } + + /** should return true if $line must not be processed */ + protected function _shouldIgnoreLine($line, $integration) {} + + /** return true if given profil parameters are correct for this phase */ + protected function _validateProfil($profil) { + return $profil->isBiblioRecords(); + } + + + /** hooked called after the file has been fully processed */ + protected function _afterFileProcessed($integration) {} + + + protected function _headerOf($integration) { + $profil = $integration->getProfilDonnees(); + $format = Class_CosmoVar::getLabelInList('import_format', $profil->getFormat()); + $nom_bib = $integration->getBib()->getNomCourt(); + $type_doc = $integration->getTypeDoc(); + + $operation = Class_CosmoVar::getLabelInList('import_type_operation', + $integration->getTypeOperation()); + $trace = '<b><span class="vert">'.$nom_bib." (" . $operation . ")</b></span><br>"; + $trace .= '<span class="bib">Fichier : '. $integration->getFichier() . "</span><br>"; + $trace .= '<span class="bib">Profil : ' . $profil->getLibelle() . '</span><br>'; + $trace .= '<span class="bib">Format : ' . $format .'</span><br>'; + if ($type_doc > '') + $trace.='<span class="bib">Type de doc. forcé : ' . $type_doc . '</span><br>'; + + (!$integration->getPointeurReprise()) ? + $this->_log->ecrire($trace) : + $this->_getPrinter()->nextPutAll($trace . '<br>'); + } +} +?> \ No newline at end of file diff --git a/library/Class/Cosmogramme/Integration/PhaseOnFile.php b/library/Class/Cosmogramme/Integration/PhaseOnDataSource.php similarity index 90% rename from library/Class/Cosmogramme/Integration/PhaseOnFile.php rename to library/Class/Cosmogramme/Integration/PhaseOnDataSource.php index bd9df250511aa0281b41e97788872e51449dfca6..33f5cd4bba7ca9523df26edaf95a2eb8c33a430c 100644 --- a/library/Class/Cosmogramme/Integration/PhaseOnFile.php +++ b/library/Class/Cosmogramme/Integration/PhaseOnDataSource.php @@ -20,7 +20,10 @@ */ -abstract class Class_Cosmogramme_Integration_PhaseOnFile extends Class_Cosmogramme_Integration_PhaseAbstract { +abstract class Class_Cosmogramme_Integration_PhaseOnDataSource extends Class_Cosmogramme_Integration_PhaseAbstract { + protected $_file_path; + + public function _execute() { $integrations = Class_Cosmogramme_Integration::findAllBy(['traite' => 'non', 'order' => 'id']); @@ -36,7 +39,9 @@ abstract class Class_Cosmogramme_Integration_PhaseOnFile extends Class_Cosmogram $msg = ($processed > 0) ? $processed . ' fichier(s) traité(s).' : 'aucun fichier traité'; - $this->_log->ecrire('<br><span class="violet">' . $msg . '</span><br>'); + + if (!$this->_phase->isCron() && !$this->isTimeOut()) + $this->_log->ecrire('<br><span class="violet">' . $msg . '</span><br>'); } @@ -51,20 +56,17 @@ abstract class Class_Cosmogramme_Integration_PhaseOnFile extends Class_Cosmogram $this->_initOne(); - $file_path = Class_CosmoVar::get('integration_path') . $integration->getFichier(); - $parser = Class_Cosmogramme_FileParser::openFor($file_path, - $integration->getPointeurReprise(), - $profil); + $data_source = Class_Cosmogramme_Integration_DataSource::on($integration); - if (!$parser->isValid()) { + if (!$data_source->isValid()) { Class_CosmoVar::increment('traitement_erreurs'); - $this->_log->ecrire('<span class="rouge">Impossible d\'ouvrir le fichier : ' - . $file_path + $this->_log->ecrire('<span class="rouge">Impossible d\'ouvrir la source : ' + . $data_source->getUri() . '</span><br>'); return; } - $this->_runFile($parser, $integration); + $this->_runFile($data_source, $integration); if (!$this->isTimeOut()) { $integration->setTraite($this->getTimeSource()->dateYmd()) @@ -100,11 +102,9 @@ abstract class Class_Cosmogramme_Integration_PhaseOnFile extends Class_Cosmogram protected function _runFile($parser, $integration) { - while(true) { - if ($this->isTimeOut()) - return; - + while(!$this->isTimeOut()) { $line = $parser->next(); + if ($this->_lineError($line)) return; diff --git a/library/Class/Cosmogramme/Integration/PhasePanier.php b/library/Class/Cosmogramme/Integration/PhasePanier.php index ce26db3ca23ceb3acfd27de365e45543e9b9d2c0..605b146300d93f2b7f9b702c9618700d0866205e 100644 --- a/library/Class/Cosmogramme/Integration/PhasePanier.php +++ b/library/Class/Cosmogramme/Integration/PhasePanier.php @@ -20,7 +20,7 @@ */ -class Class_Cosmogramme_Integration_PhasePanier extends Class_Cosmogramme_Integration_PhaseOnFile { +class Class_Cosmogramme_Integration_PhasePanier extends Class_Cosmogramme_Integration_PhaseOnDataSource { const MY_ID = 15; protected $_label = 'Intégration des fichiers paniers'; diff --git a/library/Class/Cosmogramme/Integration/PhasePrepareIntegrations.php b/library/Class/Cosmogramme/Integration/PhasePrepareIntegrations.php new file mode 100644 index 0000000000000000000000000000000000000000..605ff55f28c94e5689a3bbd51c21c9a6283e66b1 --- /dev/null +++ b/library/Class/Cosmogramme/Integration/PhasePrepareIntegrations.php @@ -0,0 +1,176 @@ +<?php +/** + * Copyright (c) 2012-2014, Agence Française Informatique (AFI). All rights reserved. + * + * BOKEH is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation. + * + * There are special exceptions to the terms and conditions of the AGPL as it + * is applied to this software (see README file). + * + * BOKEH is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with BOKEH; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +class Class_Cosmogramme_Integration_PhasePrepareIntegrationsException extends Exception {} + +class Class_Cosmogramme_Integration_PhasePrepareIntegrations extends Class_Cosmogramme_Integration_PhaseAbstract { + const MY_ID = 0; + + protected + $_ftp_path, + $_integration_path, + $_label = 'Déplacement des intégrations en file d\'attente'; + + + + public function _init($phase) { + if (!$this->_ftp_path = Class_CosmoVar::get('ftp_path')) + throw new Class_Cosmogramme_Integration_PhasePrepareIntegrationsException('La variable ftp_path n\'est pas définie'); + + if (!$this->_integration_path = Class_CosmoVar::get('integration_path')) + throw new Class_Cosmogramme_Integration_PhasePrepareIntegrationsException('La variable integration_path n\'est pas définie'); + } + + + protected function _previousPhaseIds() { + return [0]; + } + + + public function _execute() { + $this->_log->ecrire('<table class="blank" cellspacing="0" cellpadding="5px">'); + + foreach (Class_IntMajAuto::findAllBy(['order' => 'rang']) as $majauto) + $this->_runOne($majauto); + + $this->_log->ecrire('</table>'); + } + + + public function _runOne($majauto) { + $id_bib = $majauto->getIdBib(); + $bib = Class_IntBib::find($id_bib); + + $this->_log->ecrire( '<tr><td class="blank"><span class="bib">' . $bib->getNomCourt($id_bib) .'</span></td><td class="blank">'.$majauto->getNomFichier().'</td><td class="blank">'); + + $ftpfile = $this->_getFtpFile($majauto->getNomFichier()); + $id_upload = Class_CosmoVar::get('ID_upload') + 1; + $newfile = "integre$id_upload.pan"; + + if (false !== strpos($majauto->getNomFichier(), 'http://')) { + $uri = $majauto->getNomFichier(); + xdebug_break(); + if (Class_Cosmogramme_Integration::findFirstBy(['traite' => 'non', + 'fichier' => $uri])) + return $this; + + $this->_log->ecrire('<span class="vert">Création de l\'intégration pour '. $uri .'</span></td>'); + $this->_newIntegration($uri, $majauto); + return $this; + } + + + if (!$ftpfile || !$this->getFileSystem()->is_file($ftpfile)) { + $this->_log->ecrire("pas de transfert pour: $ftpfile</td>"); + return $this; + } + + if (!$this->_checkFileSize($ftpfile, $majauto)) + return $this; + + if (true !== $this->getFilesystem()->rename($ftpfile, $this->_integration_path.$newfile)) { + $this->_log->ecrire('<span class="rouge">erreur au transfert du fichier</span></td>'); + $this->_incrementData('traitement_erreurs'); + return $this; + } + + $this->_log->ecrire('<span class="vert">transfert vers '.$newfile .'</span></td>'); + $this->_newIntegration($newfile, $majauto); + Class_CosmoVar::setValueOf('ID_upload', $id_upload); + } + + + public function _getFtpFile($filename) { + if(strpos($filename, '[DATE]') === false) + return $this->_ftp_path.$filename; + + // parcourir le dossier pour chercher le fichier + $filename = str_replace('[DATE]', '' ,$filename); + while(true) { + if (false === $pos = strpos($filename,'/')) + $pos = strpos($filename,'-'); + + if($pos === false) + break; + + $pos++; + + $this->_ftp_path .= substr($filename, 0, $pos); + $filename =substr($filename, $pos); + } + + if (!$dir = opendir($this->_ftp_path)) { + $this->_log->ecrire('<span class="rouge">répertoire inaccessible: '.$this->_ftp_path.'</span>'); + $this->_incrementData('traitement_erreurs'); + return null; + } + + while (($file = readdir($dir)) !== false) { + if(strpos($file, $filename) === false) + continue; + + $ret = $this->_ftp_path.$file; + break; + } + closedir($dir); + return $ret; + } + + + public function _checkFileSize($file, $majauto) { + if (!$profil = Class_IntProfilDonnees::find($majauto->getProfil())) + return false; + + $file_type = $profil->getTypeFichier(); + $minsize = $majauto->getTailleMinImportTotal(); + $type_operation = $majauto->getTypeOperation(); + + + if($minsize > 0 && $file_type == 0 && $type_operation == 2 ) { + $file_size = filesize($file); + if($file_size > 0) + $file_size = (int) (($file_size / 1024) / 1024); + + if($file_size < $minsize) { + $this->_log->ecrire('<span class="rouge">Le fichier est trop petit : '.$file_size.' mo -> taille minimun attendue : '.$minsize.' mo</span></td>'); + return false; + } + } + return true; + } + + + public function _newIntegration($filename, $majauto) { + $id_bib = $majauto->getIdBib(); + $id_profil = $majauto->getProfil(); + $type_operation = $majauto->getTypeOperation(); + $type_doc = $majauto->getTypeDoc(); + + $integration = Class_Cosmogramme_Integration::newInstance(['id_bib' => $id_bib, + 'type_operation' => $type_operation, + 'profil' => $id_profil, + 'type_doc' => $type_doc, + 'date_transfert' => (new Class_Date)->DateDuJour('Y-m-d'), + 'fichier' => $filename, + 'traite' => 'non']); + $integration->save(); + } +} diff --git a/library/Class/Cosmogramme/Integration/PhaseReservation.php b/library/Class/Cosmogramme/Integration/PhaseReservation.php index 450e54335e8baf0bdd8494494ef5887a42981d8f..0061bad52c55577ef97ea9e42b415b930776fe8b 100644 --- a/library/Class/Cosmogramme/Integration/PhaseReservation.php +++ b/library/Class/Cosmogramme/Integration/PhaseReservation.php @@ -20,7 +20,7 @@ */ -class Class_Cosmogramme_Integration_PhaseReservation extends Class_Cosmogramme_Integration_PhaseOnFile { +class Class_Cosmogramme_Integration_PhaseReservation extends Class_Cosmogramme_Integration_PhaseOnDataSource { const MY_ID = 13; protected $_phase, $_log, $_printer, $_chrono, $_is_time_out; diff --git a/library/Class/Cosmogramme/Integration/Transaction.php b/library/Class/Cosmogramme/Integration/Transaction.php index 74e662b71cf0f91e50cf70528be8c0a406fd041f..6139971b729f0ecd908a1d9ae298e1dd21aa451e 100644 --- a/library/Class/Cosmogramme/Integration/Transaction.php +++ b/library/Class/Cosmogramme/Integration/Transaction.php @@ -56,13 +56,13 @@ class Class_Cosmogramme_Integration_Transaction { if (!$model = Class_Reservation::findFirstBy(['id_pergame' => $data[0], 'id_site' => $this->_bib->getId()])) $model = Class_Reservation::newInstance(); - return $model->updateAttributes(['id_pergame' => $data[0], 'idabon' => $data[1], 'ordreabon' => $data[2], 'support' => $data[3], 'id_notice_origine' => $data[4], - 'date_resa' => $data[5]]); + 'date_resa' => $data[5], + 'rang' => $data[7]]); } diff --git a/library/Class/Exemplaire.php b/library/Class/Exemplaire.php index b4591e04ee7c7362223416bddac31f2532726ed5..a71dd9f327fcb42e89f1d6d26838296f40186396 100644 --- a/library/Class/Exemplaire.php +++ b/library/Class/Exemplaire.php @@ -44,6 +44,7 @@ class Class_Exemplaire extends Storm_Model_Abstract { 'is_available' => false, 'section' => '', 'genre' => null, + 'url' => null, 'emplacement' => '', 'date_nouveaute' => '']; diff --git a/library/Class/IntProfilDonnees.php b/library/Class/IntProfilDonnees.php index 64f23bd54b28822862aa384df02fd6b1bfd2528f..765337f0781d3a6080d231088c87c6fb9c4a7d2f 100644 --- a/library/Class/IntProfilDonnees.php +++ b/library/Class/IntProfilDonnees.php @@ -37,6 +37,7 @@ class Class_IntProfilDonnees extends Storm_Model_Abstract { FORMAT_XML = 4, FORMAT_CSV = 5, FORMAT_MARC21 = 6, + FORMAT_UNIMARC_XML = 7, SERIAL_FORMAT_NONE = 0, SERIAL_FORMAT_PERGAME = 1, SERIAL_FORMAT_ALOES_INDEXPRESS = 2, @@ -47,7 +48,16 @@ class Class_IntProfilDonnees extends Storm_Model_Abstract { NOVELTY_DATE_FORMAT_AAAAMMJJ = 2, NOVELTY_DATE_FORMAT_VALUES = 3, NOVELTY_DATE_FORMAT_JJ_MM_AAAA = 4, - NOVELTY_DATE_FORMAT_SLASHED_JMAAAA = 5; + NOVELTY_DATE_FORMAT_SLASHED_JMAAAA = 5, + FIELD_ITEM_TYPE_DOC = 'champ_type_doc', + FIELD_ITEM_BARCODE = 'champ_code_barres', + FIELD_ITEM_COTE = 'champ_cote', + FIELD_ITEM_GENRE = 'champ_genre', + FIELD_ITEM_SECTION = 'champ_section', + FIELD_ITEM_EMPLACEMENT = 'champ_emplacement', + FIELD_ITEM_ANNEXE = 'champ_annexe', + FIELD_ITEM_AVAILABILITY = 'champ_availability', + FIELD_ITEM_URL = 'champ_url'; protected $_table_name = 'profil_donnees'; protected $_table_primary = 'id_profil'; @@ -77,13 +87,13 @@ class Class_IntProfilDonnees extends Storm_Model_Abstract { [ 'code' => '11', 'label' => '', 'zone_995' => ''], [ 'code' => '12', 'label' => '', 'zone_995' => 'jd'] ], - 'champ_code_barres' => 'f', - 'champ_cote' => 'k', - 'champ_type_doc' => '', - 'champ_genre' => '7', - 'champ_section' => '9', - 'champ_emplacement' => '6', - 'champ_annexe' => '8' + self::FIELD_ITEM_BARCODE => 'f', + self::FIELD_ITEM_COTE => 'k', + self::FIELD_ITEM_TYPE_DOC => '', + self::FIELD_ITEM_GENRE => '7', + self::FIELD_ITEM_SECTION => '9', + self::FIELD_ITEM_EMPLACEMENT => '6', + self::FIELD_ITEM_ANNEXE => '8' ], ['zone' => '995', 'champ' => '4', @@ -116,13 +126,13 @@ class Class_IntProfilDonnees extends Storm_Model_Abstract { [ 'code' => '7', 'label' => '', 'zone_995' => '' ], [ 'code' => '8', 'label' => '', 'zone_995' => 'WEB;MF'] ], - 'champ_code_barres' => 'a', - 'champ_cote' => 'f', - 'champ_type_doc' => 'c', - 'champ_genre' => '', - 'champ_section' => 'w', - 'champ_emplacement' => 'x', - 'champ_annexe' => 'g' + self::FIELD_ITEM_BARCODE => 'a', + self::FIELD_ITEM_COTE => 'f', + self::FIELD_ITEM_TYPE_DOC => 'c', + self::FIELD_ITEM_GENRE => '', + self::FIELD_ITEM_SECTION => 'w', + self::FIELD_ITEM_EMPLACEMENT => 'x', + self::FIELD_ITEM_ANNEXE => 'g' ], ['zone' => '995', 'champ' => '5', @@ -157,13 +167,13 @@ class Class_IntProfilDonnees extends Storm_Model_Abstract { 'format' => self::FORMAT_UNIMARC, 'attributs' => [ ['type_doc' => $type_doc, - 'champ_code_barres' => 'f', - 'champ_cote' => 'k', - 'champ_type_doc' => '', - 'champ_genre' => '', - 'champ_section' => 'q', - 'champ_emplacement' => 'l', - 'champ_annexe' => 'b'], + self::FIELD_ITEM_BARCODE => 'f', + self::FIELD_ITEM_COTE => 'k', + self::FIELD_ITEM_TYPE_DOC => '', + self::FIELD_ITEM_GENRE => '', + self::FIELD_ITEM_SECTION => 'q', + self::FIELD_ITEM_EMPLACEMENT => 'l', + self::FIELD_ITEM_ANNEXE => 'b'], ['zone' => '995', 'champ' => 'v', 'format' => self::NOVELTY_DATE_FORMAT_VALUES, @@ -194,13 +204,13 @@ class Class_IntProfilDonnees extends Storm_Model_Abstract { 'format' => self::FORMAT_UNIMARC, 'attributs' => [ ['type_doc' => $type_doc, - 'champ_code_barres' => 'f', - 'champ_cote' => 'k', - 'champ_type_doc' => 'r', - 'champ_genre' => '', - 'champ_section' => 'q', - 'champ_emplacement' => 'u', - 'champ_annexe' => 'a'], + self::FIELD_ITEM_BARCODE => 'f', + self::FIELD_ITEM_COTE => 'k', + self::FIELD_ITEM_TYPE_DOC => 'r', + self::FIELD_ITEM_GENRE => '', + self::FIELD_ITEM_SECTION => 'q', + self::FIELD_ITEM_EMPLACEMENT => 'u', + self::FIELD_ITEM_ANNEXE => 'a'], ['zone' => '922', 'champ' => 'c', 'format' => self::NOVELTY_DATE_FORMAT_SLASHED_JMAAAA, @@ -237,13 +247,13 @@ class Class_IntProfilDonnees extends Storm_Model_Abstract { 'format' => self::FORMAT_UNIMARC, 'attributs' => [ ['type_doc' => $type_doc, - 'champ_code_barres' => 'f', - 'champ_cote' => 'k', - 'champ_type_doc' => 'r', - 'champ_genre' => '', - 'champ_section' => 'q', - 'champ_emplacement' => 'e', - 'champ_annexe' => 'b' + self::FIELD_ITEM_BARCODE => 'f', + self::FIELD_ITEM_COTE => 'k', + self::FIELD_ITEM_TYPE_DOC => 'r', + self::FIELD_ITEM_GENRE => '', + self::FIELD_ITEM_SECTION => 'q', + self::FIELD_ITEM_EMPLACEMENT => 'e', + self::FIELD_ITEM_ANNEXE => 'b' ], ['zone' => '801', 'champ' => 'c', @@ -287,13 +297,13 @@ class Class_IntProfilDonnees extends Storm_Model_Abstract { 'type_fichier' => self::FT_RECORDS, 'format' => self::FORMAT_MARC21, 'attributs' => [['type_doc' => $type_doc, - 'champ_code_barres' => '999', - 'champ_cote' => 'k', - 'champ_type_doc' => 'x', - 'champ_genre' => '', - 'champ_section' => 'z', - 'champ_emplacement' => 'l', - 'champ_annexe' => 'm'], + self::FIELD_ITEM_BARCODE => '999', + self::FIELD_ITEM_COTE => 'k', + self::FIELD_ITEM_TYPE_DOC => 'x', + self::FIELD_ITEM_GENRE => '', + self::FIELD_ITEM_SECTION => 'z', + self::FIELD_ITEM_EMPLACEMENT => 'l', + self::FIELD_ITEM_ANNEXE => 'm'], ['zone' => '996', 'champ' => 'u', 'format' => self::NOVELTY_DATE_FORMAT_AAAA_MM_JJ, @@ -318,13 +328,13 @@ class Class_IntProfilDonnees extends Storm_Model_Abstract { 'type_fichier' => self::FT_RECORDS, 'format' => self::FORMAT_UNIMARC, 'attributs' => [['type_doc' => $type_doc, - 'champ_code_barres' => '852', - 'champ_cote' => 'k', - 'champ_type_doc' => '', - 'champ_genre' => '', - 'champ_section' => '', - 'champ_emplacement' => '', - 'champ_annexe' => ''], + self::FIELD_ITEM_BARCODE => '852', + self::FIELD_ITEM_COTE => 'k', + self::FIELD_ITEM_TYPE_DOC => '', + self::FIELD_ITEM_GENRE => '', + self::FIELD_ITEM_SECTION => '', + self::FIELD_ITEM_EMPLACEMENT => '', + self::FIELD_ITEM_ANNEXE => ''], ['zone' => '852', 'champ' => 'd', 'format' => self::NOVELTY_DATE_FORMAT_SLASHED_JMAAAA, @@ -352,13 +362,13 @@ class Class_IntProfilDonnees extends Storm_Model_Abstract { [ 'code' => '6', 'label' => 'c;d', 'zone_995' => 'zz' ], [ 'code' => '7', 'label' => 'f;k', 'zone_995' => 'f;k' ], ], - 'champ_code_barres' => 'f', - 'champ_cote' => 'k', - 'champ_type_doc' => '', - 'champ_genre' => 'k', - 'champ_section' => 'j', - 'champ_emplacement' => '', - 'champ_annexe' => 'y' + self::FIELD_ITEM_BARCODE => 'f', + self::FIELD_ITEM_COTE => 'k', + self::FIELD_ITEM_TYPE_DOC => '', + self::FIELD_ITEM_GENRE => 'k', + self::FIELD_ITEM_SECTION => 'j', + self::FIELD_ITEM_EMPLACEMENT => '', + self::FIELD_ITEM_ANNEXE => 'y' ], ['zone' => '995', 'champ' => '', @@ -391,13 +401,13 @@ class Class_IntProfilDonnees extends Storm_Model_Abstract { [ 'code' => '8', 'label' => '', 'zone_995' => ''], [ 'code' => '9', 'label' => '', 'zone_995' => ''] ], - 'champ_code_barres' => 'f', - 'champ_cote' => 'k', - 'champ_type_doc' => '', - 'champ_genre' => '', - 'champ_section' => 'j', - 'champ_emplacement' => 'u', - 'champ_annexe' => '' + self::FIELD_ITEM_BARCODE => 'f', + self::FIELD_ITEM_COTE => 'k', + self::FIELD_ITEM_TYPE_DOC => '', + self::FIELD_ITEM_GENRE => '', + self::FIELD_ITEM_SECTION => 'j', + self::FIELD_ITEM_EMPLACEMENT => 'u', + self::FIELD_ITEM_ANNEXE => '' ], ['zone' => '995', 'champ' => '4', @@ -420,32 +430,50 @@ class Class_IntProfilDonnees extends Storm_Model_Abstract { public function setTypeDocRecognition($type_doc, $label, $zone_995) { $config = unserialize($this->getAttributs()); - $config[0]['type_doc'][$type_doc] = ['code' => $type_doc, - 'label' => $label, - 'zone_995' => $zone_995]; + $config[self::FT_RECORDS]['type_doc'][$type_doc] = ['code' => $type_doc, + 'label' => $label, + 'zone_995' => $zone_995]; return $this->setAttributs($config); } - public function setTypeDocField($value) { + public function setItemField($name, $value) { $config = unserialize($this->getAttributs()); - $config[0]['champ_type_doc'] = $value; + $config[self::FT_RECORDS][$name] = $value; return $this->setAttributs($config); } + + public function setTypeDocField($value) { + return $this->setItemField(self::FIELD_ITEM_TYPE_DOC, $value); + } + + public function setAvailabilityField($value) { - $config = unserialize($this->getAttributs()); - $config[0]['champ_availability'] = $value; - return $this->setAttributs($config); + return $this->setItemField(self::FIELD_ITEM_AVAILABILITY, $value); } + public function setBarCodeField($value) { + return $this->setItemField(self::FIELD_ITEM_BARCODE, $value); + } + + + public function getBarCodeField() { + return unserialize($this->getAttributs())[0][self::FIELD_ITEM_BARCODE]; + } + public function isHolds() { return self::FT_HOLDS == $this->getTypeFichier(); } + + public function isBiblioRecords() { + return self::FT_RECORDS == $this->getTypeFichier(); + } + public function getSeparator() { switch ($this->getFormat()) { case self::FORMAT_SEMI_COLON_ASCII : return ';';break; diff --git a/library/Class/Newsletter.php b/library/Class/Newsletter.php index 60bab4e402ee684d9a588829647aa2b4240399fd..4ed1a48102cb0ed106bae2714f419978657a90c7 100644 --- a/library/Class/Newsletter.php +++ b/library/Class/Newsletter.php @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE * along with BOKEH; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* @@ -55,7 +55,7 @@ class Class_Newsletter extends Storm_Model_Abstract { use Trait_TimeSource, Trait_Translator; - + protected $_table_name = 'newsletters'; protected $_has_many = ['subscriptions' => ['model' => 'Class_NewsletterSubscription', 'role' => 'newsletter', @@ -69,7 +69,7 @@ class Class_Newsletter extends Storm_Model_Abstract { 'limitPage' => [$page, $items_by_page]]); } - + public function send() { return (new Class_Batch_SendNewsletters($this))->run(); } @@ -83,7 +83,7 @@ class Class_Newsletter extends Storm_Model_Abstract { public function sendTo($destinataire) { - $mail = $this->_newMail(); + $mail = $this->newMail(); $mail->addTo($destinataire); $mail->send(); } @@ -97,7 +97,7 @@ class Class_Newsletter extends Storm_Model_Abstract { } - protected function _newMail() { + public function newMail() { $notices = $this->getNotices(); $mail = new ZendAfi_Mail('utf8'); @@ -117,52 +117,33 @@ class Class_Newsletter extends Storm_Model_Abstract { protected function getMailAt($index) { $users = Class_NewsletterSubscription::getAvailableUsersForNewsletter($this->getId(), $index); - - $mail = $this->_newMail(); + + $mail = $this->newMail(); $mail->addTo($this->getExpediteur()); foreach($users as $user) { - ($user_mail = $user->getMail()) + ($user_mail = $user->getMail()) ? $mail->addBcc($user_mail) : ''; } return $mail; } - + public function getNumberOfUsers() { return sprintf('%05d', Class_NewsletterSubscription::countAvailableUserForNewsletter($this->getId())); } - public function generateMails($recipient_size) { - Class_NewsletterSubscription::resetSendFlagForNewsletter($this->getId()); - $time_limit = Class_Systeme_TimeLimit::getInstance(); - - while (0 < count(array_filter( $receivers = $this->getReceivers($recipient_size)))) { - Class_NewsletterSubscription::clearCache(); - Class_Users::clearCache(); - Storm_Model_Loader::resetCache(); - gc_collect_cycles(); - $time_limit->set(30); - - $mail = $this->_newMail(); - $mail->addTo($this->getExpediteur()); - - foreach($receivers as $receiver) - $mail->addBcc($receiver->getMail()); - $mail->send(); - $this->setLastDistributionDateWithFormat(); - Class_NewsletterSubscription::updateSendFlagForReceivers($this->getId(),$this->getReceivers($recipient_size)); - } - $time_limit->reset(); + (new Class_Batch_SendNewsletters($this)) + ->sendAllBy($recipient_size); } - protected function getReceivers($recipient_size) { - return Class_Users::getNewslettersReceivers($this->getId(), $recipient_size); + public function getReceivers($recipient_size) { + return Class_Users::getNewslettersReceivers($this->getId(), $recipient_size); } @@ -253,7 +234,7 @@ class Class_Newsletter extends Storm_Model_Abstract { } return $html; - + } diff --git a/library/Class/NewsletterSubscription.php b/library/Class/NewsletterSubscription.php index 873ec5c8638bc757f710225fdb7116669061fd40..b953d0cccd8a17aa889430de0c9c0cbf90b9b1d9 100644 --- a/library/Class/NewsletterSubscription.php +++ b/library/Class/NewsletterSubscription.php @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE * along with BOKEH; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ class NewsletterSubscriptionLoader extends Storm_Model_Loader { @@ -25,7 +25,7 @@ class NewsletterSubscriptionLoader extends Storm_Model_Loader { return Class_NewsletterSubscription::countBy($this->availableUserForNewsletter($id_newsletter)); } - + protected function clearInvalid($id_newsletter) { Class_NewsletterSubscription::deleteBy($this->notAvailableUserForNewsletter($id_newsletter)); } @@ -45,29 +45,30 @@ class NewsletterSubscriptionLoader extends Storm_Model_Loader { if(!$subscriptions) return []; - + $users = []; foreach($subscriptions as $subscription) { $user = Class_Users::find($subscription->getUserId()); if(!$user || !$user->getMail()) continue; - + $users[] = $user; } return array_filter($users); } - + public function resetSendFlagForNewsletter($id_newsletter) { $newsletters_not_already_send = Class_NewsletterSubscription::findAllBy(['newsletter_id' => $id_newsletter, 'send' => false]); - if(1 > count(array_filter($newsletters_not_already_send))) + + if(0 == count(array_filter($newsletters_not_already_send))) return sqlExecute("update newsletters_users set send=false where newsletter_id=".$id_newsletter); return ''; } - + public function updateSendFlagForReceivers($id_newsletter,$receivers) { $users_ids_list = []; foreach ($receivers as $user) { @@ -92,11 +93,11 @@ class NewsletterSubscriptionLoader extends Storm_Model_Loader { return ['where' => 'newsletter_id = '.$id_newsletter.' and '.$this->usersWithNoMail()]; } - + protected function usersWithNoMail() { return 'user_id not in ('.$this->selectUser().')'; } - + protected function validUsers() { return 'user_id in ('.$this->selectUser().')'; @@ -115,12 +116,12 @@ class Class_NewsletterSubscription extends Storm_Model_Abstract { protected $_loader_class = 'NewsletterSubscriptionLoader'; protected $_belongs_to = ['user' => ['model' => 'Class_Users'], 'newsletter' => ['model' => 'Class_Newsletter']]; - + public static function newWith($newsletter, $user) { if(!$user || !$newsletter) return new Class_NewsletterSubscription(); - + $subscription = (new Class_NewsletterSubscription()) ->setNewsletter($newsletter) ->setUser($user); diff --git a/library/Class/NoticeSuccincte.php b/library/Class/NoticeSuccincte.php new file mode 100644 index 0000000000000000000000000000000000000000..2154f722eb430f87a384e3410f9efd72c752700e --- /dev/null +++ b/library/Class/NoticeSuccincte.php @@ -0,0 +1,29 @@ +<?php +/** + * Copyright (c) 2012-2014, Agence Française Informatique (AFI). All rights reserved. + * + * BOKEH is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation. + * + * There are special exceptions to the terms and conditions of the AGPL as it + * is applied to this software (see README file). + * + * BOKEH is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with BOKEH; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +class Class_NoticeSuccincte extends Storm_Model_Abstract { + protected + $_table_name = 'notices_succintes', + $_belongs_to = ['bib' => ['model' => 'Class_IntBib', + 'referenced_in' => 'id_bib']]; + +} +?> diff --git a/library/Class/NoticeUnimarc.php b/library/Class/NoticeUnimarc.php index 55155790a62a891df8f299ac241235a2ce7c9e00..4471ee71cad4303201d834a95ad9ebabbdcb1189 100644 --- a/library/Class/NoticeUnimarc.php +++ b/library/Class/NoticeUnimarc.php @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE * along with BOKEH; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ class Class_NoticeUnimarc { @@ -42,8 +42,8 @@ class Class_NoticeUnimarc { protected $rgx_subfield_begin; public function __construct() { - $this->tracer_accents = isset(self::$_tracer_accents_iso) - ? self::$_tracer_accents_iso + $this->tracer_accents = isset(self::$_tracer_accents_iso) + ? self::$_tracer_accents_iso : self::$_tracer_accents_iso = Class_CosmoVar::get('tracer_accents_iso'); // initialisation des caractères spéciaux @@ -61,7 +61,7 @@ class Class_NoticeUnimarc { return !empty($this->full_record); } - + public function setNotice($string, $type_accents = 0) { $this->reset_notice(); @@ -73,10 +73,10 @@ class Class_NoticeUnimarc { $this->guide = substr($this->full_record, 0, self::LABEL_LENGTH); // guide interne : valeurs par défaut si création - $ba = (int)substr($this->guide, 12, 5); // base adress : pos.12-16 + $ba = (int)substr($this->guide, 12, 5); // base adress : pos.12-16 $ba = $ba ? $ba : 24; - $dm1 = (int)$this->guide[20]; // Length of 'Length of field' (pos.20, 4 in UNIMARC) + $dm1 = (int)$this->guide[20]; // Length of 'Length of field' (pos.20, 4 in UNIMARC) $dm1 = $dm1 ? $dm1 : 4; $dm2 = (int)$this->guide[21]; // Length of 'Starting character position' (pos.21, 5 in UNIMARC) @@ -97,8 +97,10 @@ class Class_NoticeUnimarc { $ba + (int)substr($dir, $adress_length, $dm2), (int)substr($dir, 3, $dm1)); } + + return $this; } - + public function set_subfield($zone, $sous_zone, $valeur) { $this->inner_data[$zone] = [$this->rgx_subfield_begin.$sous_zone.$valeur.$this->rgx_field_end]; @@ -110,8 +112,8 @@ class Class_NoticeUnimarc { * Premier argument label de champ obligatoire * Puis liste de sous-champs sinon renvoit le bloc entier */ - public function get_subfield() { - if (!$args = func_get_args()) + public function get_subfield() { + if (!$args = func_get_args()) return []; $inner_data_label = $args[0]; @@ -127,7 +129,7 @@ class Class_NoticeUnimarc { $result = []; foreach($this->inner_data[$inner_data_label] as $content) $this->$get_method($content, $subfields, $result); - + return $result; } @@ -140,7 +142,7 @@ class Class_NoticeUnimarc { protected function _getOneSubfieldContent($content, &$subfields, &$result) { $mask = $this->_getPatternForSubfield($subfields[0]); preg_match_all($mask, $content, $matches); - foreach($matches[1] as $match) + foreach($matches[1] as $match) $result[] = $match; } @@ -149,7 +151,7 @@ class Class_NoticeUnimarc { $tmp = []; foreach ($subfields as $subfield) { preg_match($this->_getPatternForSubfield($subfield), $content, $regs); - $tmp[$subfield] = $regs[1]; + $tmp[$subfield] = $regs[1]; } $result[] = $tmp; } @@ -169,7 +171,7 @@ class Class_NoticeUnimarc { $valeurs = []; $bloc = substr($bloc, 3); $fields = explode($this->subfield_begin, $bloc); - foreach ($fields as $field) + foreach ($fields as $field) $valeurs[] = substr($field, 1); return $valeurs; } diff --git a/library/Class/NoticeUnimarc/Writer.php b/library/Class/NoticeUnimarc/Writer.php index 16fbdbde3860f867a210f17867eed364a9f9eaf9..a53e9518d1f635aeecbbb34657ec749d81086ba0 100644 --- a/library/Class/NoticeUnimarc/Writer.php +++ b/library/Class/NoticeUnimarc/Writer.php @@ -111,6 +111,7 @@ class Class_NoticeUnimarc_Writer extends Class_NoticeUnimarc { } $this->update(); + return $this; } @@ -332,32 +333,33 @@ class Class_NoticeUnimarc_Writer extends Class_NoticeUnimarc { // --------------------------------------------------- public function set_rs($status) { - $this->_set_inner_guide_value('rs', $status); + return $this->_set_inner_guide_value('rs', $status); } public function set_dt($dtype) { - $this->_set_inner_guide_value('dt', $dtype); + return $this->_set_inner_guide_value('dt', $dtype); } public function set_bl($bltype) { - $this->_set_inner_guide_value('bl', $bltype); + return $this->_set_inner_guide_value('bl', $bltype); } public function set_hl($hltype) { - $this->_set_inner_guide_value('hl', $hltype); + return $this->_set_inner_guide_value('hl', $hltype); } public function set_el($eltype) { - $this->_set_inner_guide_value('el', $eltype); + return $this->_set_inner_guide_value('el', $eltype); } public function set_ru($rutype) { - $this->_set_inner_guide_value('ru', $rutype); + return $this->_set_inner_guide_value('ru', $rutype); } protected function _set_inner_guide_value($key, $value) { if ($value) $this->inner_guide[$key] = $value[0]; + return $this; } public function getFullRecord() { diff --git a/library/Class/Onglet.php b/library/Class/Onglet.php index 3d4e1ac9b973c729f6d5d8236524f5f660bfdc83..588aefc7d0afe6cf855ad9a85606f59defa4f7d2 100644 --- a/library/Class/Onglet.php +++ b/library/Class/Onglet.php @@ -22,109 +22,119 @@ class Class_Onglet { use Trait_Singleton, Trait_Translator; + protected $libelle; - protected $function_name='alwaysDisplay'; -// Mode d'affichage 0=aucun 1=bloc déplié 2=bloc fermé 3=dans 1 onglet + protected $function_name = 'alwaysDisplay'; + + /** Mode d'affichage 0=aucun 1=bloc déplié 2=bloc fermé 3=dans 1 onglet */ protected $display=0; - protected $largeur=0; // Largeur de l'onglet 0=répartition auto en pourcentage + + /** Largeur de l'onglet 0=répartition auto en pourcentage */ + protected $largeur=0; protected $order=0; - public static function forLibelleAndType($libelle,$type) { - return new self($libelle,$type); + + + public static function forLibelleAndType($libelle, $type) { + return new self($libelle, $type); } - public function __construct($libelle,$type) { + + public function __construct($libelle, $type) { $this->setLibelle($libelle); $this->setType($type); - return $this; } - function setLibelle($libelle) { - $this->libelle=$libelle; + public function setLibelle($libelle) { + $this->libelle = $libelle; return $this; } - function getLibelle() { + + public function getLibelle() { return $this->libelle; } - - function setType($type) { - $this->type=$type; + public function setType($type) { + $this->type = $type; return $this; } - function getType() { + + public function getType() { return $this->type; } - function setLargeur($largeur) { - $this->largeur=$largeur; + public function setLargeur($largeur) { + $this->largeur = $largeur; return $this; } - function getLargeur() { + + public function getLargeur() { return $this->largeur; } - function setDisplayMethod($function_name) { - $this->function_name=$function_name; + public function setDisplayMethod($function_name) { + $this->function_name = $function_name; return $this; } - function callDisplayMethod($param) { + + public function callDisplayMethod($param) { return ($this->{$this->function_name}($param)); } - function alwaysDisplay($param) { + + public function alwaysDisplay($param) { return true; } - function checkIfClefChapeauExists($notice) { + public function checkIfClefChapeauExists($notice) { return strlen($notice->getClefChapeau())>0; } - function checkIfHasRessourcesNumeriques($notice) { - if (1 == Class_AdminVar::isBibNumEnabled() && Class_Users::isCurrentUserAdmin()) + public function checkIfHasRessourcesNumeriques($notice) { + if (1 == Class_AdminVar::isBibNumEnabled() + && Class_Users::isCurrentUserAdmin()) return true; - return (null !== ($exemplaire = Class_Exemplaire::findFirstBy(['id_notice' => $notice->getId()])) - && null !== $exemplaire->getAlbum()) + return (null !== $notice->getAlbum()) || 0 < Class_FRBR_Link::countAlbumsFromNotice($notice); } - function checkIfHasNoticesLiees($notice) { + public function checkIfHasNoticesLiees($notice) { $sourceLinks = $notice->getLinksAsSource(); $targetLinks = $notice->getLinksAsTarget(); - return !(0 == count($sourceLinks) and 0 == count($targetLinks)); - } - function setDisplayMode($display) { - $this->display=$display; + public function setDisplayMode($display) { + $this->display = $display; return $this; } - function getDisplayMode() { + + public function getDisplayMode() { return $this->display; } - function getOrder() { + public function getOrder() { return $this->order; } - function setOrder($order) { - $this->order=$order; + + public function setOrder($order) { + $this->order = $order; return $this; } } \ No newline at end of file diff --git a/library/Class/Profil.php b/library/Class/Profil.php index 576b3136dfe66e8c57fbc16dc4ab168f5bbaba64..268883f072ff253bced0de56809fde1265e0664d 100644 --- a/library/Class/Profil.php +++ b/library/Class/Profil.php @@ -868,8 +868,9 @@ class Class_Profil extends Storm_Model_Abstract { ? (new Class_Systeme_ModulesAppli())->getValeursParDefaut($controller,$action) : Class_Profil::getLoader()->getPortail()->getCfgModulesPreferences($controller, $action, $subaction); - if (!array_key_exists($controller, $cfg_modules) || - !array_key_exists($action.$subaction, $cfg_modules[$controller])) + if (!array_key_exists($controller, $cfg_modules) + || !array_key_exists($action.$subaction, $cfg_modules[$controller]) + || !is_array($cfg_modules[$controller][$action.$subaction])) return $preferences_defaut; return array_merge($preferences_defaut, diff --git a/library/Class/Reservation.php b/library/Class/Reservation.php index 2e75a6ed7b1f316e3dc098d2cfb7835c8c7accb4..e7df8ae6f2ce4ec0ae39514d7765a58e5216dc0e 100644 --- a/library/Class/Reservation.php +++ b/library/Class/Reservation.php @@ -19,7 +19,23 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +class ReservationLoader extends Storm_Model_Loader { + use Trait_TimeSource; + + public function nextRang($id_notice_sigb) { + $nb_resa=$this->countBy(['ID_NOTICE_ORIGINE' => $id_notice_sigb, + 'where' => sprintf('DATE_RESA<="%s"', date('Y-m-d H:i:s',$this->getCurrentTime()))] + ); + if (!$nb_resa) + return 1; + + return (1 + $nb_resa); + } +} + + class Class_Reservation extends Storm_Model_Abstract { + use Trait_TimeSource; protected $_table_name = 'reservations'; protected $_table_primary = 'id_resa'; @@ -28,6 +44,15 @@ class Class_Reservation extends Storm_Model_Abstract { protected $_notice; + protected $_loader_class = 'ReservationLoader'; + + protected $_default_attribute_values = ['rang' => 0]; + + + public function __construct() { + $this->setDateResa(date('Y-m-d H:i:s', $this->getCurrentTime())); + } + public function getNotice() { if (isset($this->_notice)) @@ -41,18 +66,27 @@ class Class_Reservation extends Storm_Model_Abstract { } - public function getRang() { - return 1 + Class_Reservation::getLoader()->countBy(['ID_NOTICE_ORIGINE' => $this->getIdNoticeOrigine(), - 'where' => sprintf('DATE_RESA<"%s"', $this->getDateResa())]); + public function getDynamicRank() { + If ($this->getRang() > 0) + return $this->getRang(); + + $nb_resa = $this->getLoader() + ->countBy(['ID_NOTICE_ORIGINE' => $this->getIdNoticeOrigine(), + 'idabon !' => $this->getIdabon(), + 'where' => 'DATE_RESA<="' . $this->getDateResa() . '"']); + return $nb_resa + 1; } public function getEtat() { - $nb_prets = Class_Pret::getLoader()->countBy(array('ID_NOTICE_ORIGINE' => $this->getIdNoticeOrigine(), - 'EN_COURS' => 1)); - if ($nb_prets>0) return "En prêt"; - if ($this->getRang() == 1) return "Disponible"; - return "Réservé"; + $nb_prets = Class_Pret::countBy(['ID_NOTICE_ORIGINE' => $this->getIdNoticeOrigine(), + 'EN_COURS' => 1]); + if ($nb_prets > 0) + return 'En prêt'; + + if ($this->getRang() == 1) + return 'Disponible'; + + return 'Réservé'; } -} -?> \ No newline at end of file +} \ No newline at end of file diff --git a/library/Class/StatsNotices.php b/library/Class/StatsNotices.php index 7b1a0695eb6e558ab16939b3f7c9629c2cc91185..1e43f7eb4aab52b784b297ab6e566859c327f78e 100644 --- a/library/Class/StatsNotices.php +++ b/library/Class/StatsNotices.php @@ -41,8 +41,11 @@ class Class_StatsNotices { protected function _addStat($id_notice, $field) { $annee = date('Y'); $mois = date('m'); - sqlExecute(sprintf('update notices set %s = %s + 1 where id_notice=%s', - $field, $field, $id_notice)); + + // @see http://forge.afi-sa.fr/issues/23151 + /* + sqlExecute(sprintf('update notices set %s = %s + 1 where id_notice=%s', $field, $field, $id_notice)); + */ if (!fetchOne(sprintf('select count(*) from stats_notices where annee=%s and mois=%s', $annee, $mois))) @@ -171,9 +174,6 @@ class Class_StatsNotices { protected function _isBlackListed() { - // @see http://forge.afi-sa.fr/issues/23151 - return true; - $robots = explode(';', getVar('BLACK_LIST_ROBOT')); $client = null; diff --git a/library/Class/Systeme/PergameService.php b/library/Class/Systeme/PergameService.php index 6ea5abb3e47f218e1203f72f9732f987e0d537c0..80b77bf3eb7280ee456b0d397ca1359f257c8d83 100644 --- a/library/Class/Systeme/PergameService.php +++ b/library/Class/Systeme/PergameService.php @@ -101,35 +101,31 @@ class Class_Systeme_PergameService { } // nombre de réservations - $nb_resas=fetchOne("select count(*) from reservations where ID_NOTICE_ORIGINE=".intval($ex["id_origine"])); + $nb_resas=Class_Reservation::countBy(['ID_NOTICE_ORIGINE' => intval($ex["id_origine"])]); if($nb_resas) { if($nb_resas>1) $pluriel="s"; if($nb_resas) $ex["dispo"]=$nb_resas." réservation".$pluriel." en cours"; } - return $ex; } public function getReservations() { - $data = Class_Reservation::findAllBy(['idabon' => $this->user->getIdabon(), - 'ordreabon' => $this->user->getOrdreabon()]); - if(!$data) + if (!$data = Class_Reservation::findAllBy(['idabon' => $this->user->getIdabon(), + 'ordreabon' => $this->user->getOrdreabon()])) return []; foreach($data as $enreg) { $notice = $this->getNoticeFromTransaction($enreg->getSupport(), $enreg->getIdNoticeOrigine()); + $resa["titre"]=$notice["J"]; if($notice["A"]) $resa["titre"].= " / ".$notice["A"]; - $rang = Class_Reservation::countBy(['where' => "ID_NOTICE_ORIGINE = " . $enreg->getIdNoticeOrigine() . - " and DATE_RESA < '" . $enreg->getDateResa() . "'"]); - - $resa["rang"] = $rang + 1; + $resa['rang'] = $enreg->getDynamicRank(); $resa["id_suppr"] = $enreg->getIdResa(); $en_pret = Class_Pret::countBy(['id_notice_origine' => $enreg->getIdNoticeOrigine(), @@ -232,18 +228,15 @@ class Class_Systeme_PergameService { if ($nb >= $regles['Max_par_document']) return ['erreur' => 'La réservation est impossible car le nombre maximum de réservations pour ce document a été atteint (' . $regles["Max_par_document"] . ').']; - $time_source = self::getTimeSource(); - - Class_Reservation::newInstance([ - 'id_site' => $code_annexe, - 'id_pergame' => 0, - 'idabon' => $id_abon, - 'ordreabon' => $ordre_abon, - 'date_resa' => $time_source->dateYmd(), - 'support' => $support, - 'id_notice_origine' => $id_origine - ])->save(); + Class_Reservation::newInstance(['id_site' => $code_annexe, + 'id_pergame' => 0, + 'idabon' => $id_abon, + 'ordreabon' => $ordre_abon, + 'support' => $support, + 'id_notice_origine' => $id_origine]) + ->save(); + $time_source = self::getTimeSource(); $date = $time_source->dateFormat('Y-m-d H:i:s'); $heure = $time_source->dateFormat('H'); @@ -332,6 +325,9 @@ class Class_Systeme_PergameService { public function getReglesReservation($id_bib) { + + + if (!$id_bib) return false; @@ -343,6 +339,7 @@ class Class_Systeme_PergameService { $data["Max_par_carte"] = 3; if (!isset($data["Max_par_document"])) $data["Max_par_document"] = 3; + return $data; } } diff --git a/library/Class/Testing/FileSystem.php b/library/Class/Testing/FileSystem.php index 370eeee0b111562102d84363f05d11dc326185b9..dc119c43d378849304e031ecf763ffde68f7986a 100644 --- a/library/Class/Testing/FileSystem.php +++ b/library/Class/Testing/FileSystem.php @@ -26,7 +26,7 @@ class Class_Testing_FileSystem { 'filesize', 'fclose', 'ftell', 'fread', 'feof', 'getcwd', 'file_exists', 'scandir', 'is_dir', 'opendir', 'readdir', 'closedir', 'mkdir','glob','file', 'fwrite','rename', - 'getimagesize', 'file_get_contents', 'sha1_file' + 'getimagesize', 'file_get_contents', 'sha1_file', 'is_file' ]; diff --git a/library/Class/Users.php b/library/Class/Users.php index a1c1fd0bc80bf07d712eca1f54d1532ba2e45fb9..3e984898395158932e5f8939655bc1dea0fe36d3 100644 --- a/library/Class/Users.php +++ b/library/Class/Users.php @@ -20,10 +20,11 @@ */ class UsersLoader extends Storm_Model_Loader { - public function getNewslettersReceivers($id_newsletter,$recipient_size) { - $req = "select bib_admin_users.* from bib_admin_users join newsletters_users on bib_admin_users.id_user = newsletters_users.user_id where newsletter_id = ".$id_newsletter." and newsletters_users.send is false limit ".$recipient_size; - $users = Class_Users::findAll($req); - return $users; + public function getNewslettersReceivers($id_newsletter, $recipient_size) { + // do not use Storm as it must be ordered by mail AND filtered by joined column + $req = 'select bib_admin_users.* from bib_admin_users join newsletters_users on bib_admin_users.id_user = newsletters_users.user_id where newsletter_id = ' . $id_newsletter . ' and newsletters_users.send is false order by bib_admin_users.mail limit ' . $recipient_size; + + return Class_Users::findAll($req); } diff --git a/library/Class/WebService/BibNumerique/Abstract.php b/library/Class/WebService/BibNumerique/Abstract.php index 2e2306b2ebb9d5f64e93123e4d33f05790a33374..293bf3133d4ffbd22595c6501d37a18320ffe324 100644 --- a/library/Class/WebService/BibNumerique/Abstract.php +++ b/library/Class/WebService/BibNumerique/Abstract.php @@ -120,7 +120,7 @@ abstract class Class_WebService_BibNumerique_Abstract extends Class_WebService_A public function harvest() { $current_page = 1; $total_page = 0; - $this->_harvested_ids = array(); + $this->_harvested_ids = []; do { if (null == ($reader = $this->loadPage($current_page))) return; diff --git a/library/Class/WebService/BibNumerique/Numilog.php b/library/Class/WebService/BibNumerique/Numilog.php index 40f8ed19bfd678c5ce930032aed98940223b5d9b..e25c3f1f1f79ea58f929cd2869771e39d0fb008d 100644 --- a/library/Class/WebService/BibNumerique/Numilog.php +++ b/library/Class/WebService/BibNumerique/Numilog.php @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE * along with BOKEH; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ class Class_WebService_BibNumerique_Numilog extends Class_WebService_BibNumerique_Abstract { @@ -25,8 +25,6 @@ class Class_WebService_BibNumerique_Numilog extends Class_WebService_BibNumeriqu protected static $_harvested_ids_cache; protected $_albums; - protected $_harvested_ids = array(); - const BASE_URL = 'http://oai.numilog.com/oai.ashx'; const RESSOURCES = 'ressources'; const AUTHORS = 'authors'; @@ -57,47 +55,17 @@ class Class_WebService_BibNumerique_Numilog extends Class_WebService_BibNumeriqu Class_Album::getLoader() ->deleteBy(['where' => 'url_origine="'.self::BASE_URL.'" and id_origine not in (\'' . implode("', '", $this->getHarvestedIds()) . '\')']); } - + public function loadPage($page_number = 1) { $url = Class_AdminVar::get('NUMILOG_OAI_URL'); $id_bib = Class_AdminVar::get('NUMILOG_OAI_IDBIB'); - $content = $this->open_oai_url($url); - - $reader = $this->getRessourcesNumeriquesReader()->parse($content); - if (1 == $page_number) + $reader = $this->getRessourcesNumeriquesReader()->parse(); + if (1 == $page_number) $this->getLogger()->info($reader->getTotalCount() .' ressources dans la base'); return $reader; } - - public function loadRessource($ressource) { - $url = Class_AdminVar::get('NUMILOG_OAI_URL'); - $id_bib = Class_AdminVar::get('NUMILOG_OAI_IDBIB'); - $content = $this->open_oai_url($url); - if ('' == $content) { - $this->getLogger()->err(sprintf('Erreur de communication lors de la récupération du ressource %s', - $ressource->getId())); - return; - } - - $reader = $this->getRessourceNumeriqueReader(); - $reader->parseContentOn($content, $ressource); - } - - - public function open_oai_url($url) { - $attributes = ['verb' => 'ListRecords']; - $bib_id=Class_AdminVar::get('NUMILOG_OAI_IDBIB'); - $attributes[] = ['metadataPrefix' => 'oai_dc', - 'Set' =>':'.$bib_id]; - $params='?verb=ListRecords&metadataPrefix=oai_dc&Set=bib:'.$bib_id; - $http_client = self::getHttpClient(); - $content = $http_client->open_url(Class_AdminVar::get('NUMILOG_OAI_URL').$params);//'?'.http_build_query($attributes)); - return $content; -// return $this->getWebClient()->open_url($url.'?'.http_build_query($attributes)); - } - public function open_authenticated_url($url) { @@ -116,7 +84,7 @@ class Class_WebService_BibNumerique_Numilog extends Class_WebService_BibNumeriqu } - + public function getBaseUrl() { return self::BASE_URL; } diff --git a/library/Class/WebService/BibNumerique/Numilog/LivreNumerique.php b/library/Class/WebService/BibNumerique/Numilog/LivreNumerique.php index 50777a09a9d066600b30c2c2c573115f793e5c15..9458384464c192bdf90fc7d151460b84fa4e5c37 100644 --- a/library/Class/WebService/BibNumerique/Numilog/LivreNumerique.php +++ b/library/Class/WebService/BibNumerique/Numilog/LivreNumerique.php @@ -31,7 +31,6 @@ class Class_WebService_BibNumerique_Numilog_LivreNumerique extends Class_WebServ public function fillAlbum($album) { $album->beNumilog() - ->setDescription($this->getDescription()) ->setEditeur($this->getEditeur()); $this->addPoster('http://couverture.numilog.com/' . $this->_id.'_GRANDE.jpg'); diff --git a/library/Class/WebService/BibNumerique/Numilog/LivresNumeriquesReader.php b/library/Class/WebService/BibNumerique/Numilog/LivresNumeriquesReader.php index 768c68e3d81ba709ec9c692971699afc0f69a739..6bb3f26b58666be3117fa254daea4656c66bf417 100644 --- a/library/Class/WebService/BibNumerique/Numilog/LivresNumeriquesReader.php +++ b/library/Class/WebService/BibNumerique/Numilog/LivresNumeriquesReader.php @@ -16,25 +16,31 @@ * * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE * along with BOKEH; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -class Class_WebService_BibNumerique_Numilog_LivresNumeriquesReader extends Class_WebService_OAI { +class Class_WebService_BibNumerique_Numilog_LivresNumeriquesReader extends Class_WebService_OAI { protected $_xml_parser; protected $_total_count; protected $_page_number; protected $_page_size; + protected $_resumptionToken; protected $_ressourcesNumeriques; protected $livres; - public function parse($xml) { + public function parse() { $this->_total_count = $this->_page_number = 0; $this->_page_size = 1; - $this->_xml_parser = new Class_WebService_OAI(); - $records=$this->_xml_parser->parseListRecordsRessourcesNumeriqueXML($xml); - $this->livres = []; - foreach($records as $record) { - $this->livres[]=$record; - } + + $listsize = ($this->_resumptionToken) ? $this->_resumptionToken->getListSize() : '100'; + + $this->livres = $this + ->setOAIHandler(Class_AdminVar::get('NUMILOG_OAI_URL')) + ->setNumericResourceClass('Class_WebService_BibNumerique_Numilog_LivreNumerique') + ->getRecordsFromSetNumericResources('bib:'.Class_AdminVar::get('NUMILOG_OAI_IDBIB')); + + while ($this->hasNextRecords()) + $this->livres = array_merge($this->livres, $this->getNextNumericResources()); + $this->_total_count = sizeof($this->livres); $this->_page_number=1; $this->_page_size=$this->_total_count; @@ -42,12 +48,6 @@ class Class_WebService_BibNumerique_Numilog_LivresNumeriquesReader extends Class } - - public function endPk($data) { - $this->_current_film->setId($data); - } - - public function getTotalCount() { return $this->_total_count; } @@ -66,4 +66,6 @@ class Class_WebService_BibNumerique_Numilog_LivresNumeriquesReader extends Class public function getRessourcesNumeriques() { return $this->livres; } + + } diff --git a/library/Class/WebService/BibNumerique/RessourceNumerique.php b/library/Class/WebService/BibNumerique/RessourceNumerique.php index ec2f1b8bf64465362127598a5856fa072b2a9e29..d5054fbdfa68a2b80c0d453d031a14b43895f1b4 100644 --- a/library/Class/WebService/BibNumerique/RessourceNumerique.php +++ b/library/Class/WebService/BibNumerique/RessourceNumerique.php @@ -20,10 +20,6 @@ */ -/** - * Base class for all objects that may be converted - * and imported to a digital library Album - */ class Class_WebService_BibNumerique_RessourceNumerique { protected @@ -45,6 +41,7 @@ class Class_WebService_BibNumerique_RessourceNumerique { $_bibliotheques='', $_authors = []; + public function setId($id) { $this->_id = $id; return $this; diff --git a/library/Class/WebService/DublinCoreParser.php b/library/Class/WebService/DublinCoreParser.php index 5aea1b5b6a3bbcfd37c328c64ae895540217668d..37e744d9edd002f7329e445b9fcdf539fc13c6b7 100644 --- a/library/Class/WebService/DublinCoreParser.php +++ b/library/Class/WebService/DublinCoreParser.php @@ -27,14 +27,15 @@ * - getResumptionToken: retourne le token qui permet de rechercher * les enregistrements suivants */ -class Class_WebService_DublinCoreParser { - protected $_resumptionToken; - protected $ressource_numerique; - protected $_records_ressources; - protected $visitor; +class Class_WebService_DublinCoreParser extends Class_WebService_OAI_ParserAbstract { + protected + $ressource_numerique, + $_records_ressources, + $_record, + $visitor; public function __construct() { - $this->_records = []; + parent::__construct(); $this->_records_ressources = []; $this->class_ressource_numerique = new Class_WebService_BibNumerique_RessourceNumerique(); $this->visitor = $this; @@ -46,18 +47,22 @@ class Class_WebService_DublinCoreParser { public function parse($xml) { - $this->_records = []; $this->_records_ressources = []; - $this->_resumptionToken = null; - $this->parser = Class_WebService_XMLParser::newInstance(); - $this->parser->keepNameSpace(); - $this->parser->setElementHandler($this); - $this->parser->parse($xml); - return $this->_records; + return parent::parse($xml); } - public function startRecord($attributes) { + public function endns1_record($data) { + $this->endRecord($data); + } + + + public function startns1_record($attributes) { + $this->startRecord($attributes); + } + + + public function newRecord($attributes) { $this->_record=[]; $this->ressource_numerique = $this->visitor->getNewRessourceNumerique(); $this->_records_ressources[] = $this->ressource_numerique; @@ -69,11 +74,6 @@ class Class_WebService_DublinCoreParser { } - public function startns1_record() { - $this->_record=[]; - } - - public function enddc_identifier($data) { $this->ressource_numerique->setOaiId($data); $this->_record['id_oai']=$data; @@ -81,7 +81,6 @@ class Class_WebService_DublinCoreParser { public function enddc_title($data) { - $this->ressource_numerique->setTitle($data); $this->_record['titre']=$data; } @@ -122,37 +121,8 @@ class Class_WebService_DublinCoreParser { } - public function startResumptionToken($attributes) { - $this->_resumptionToken = new Class_WebService_ResumptionToken(); - if (isset($attributes['COMPLETELISTSIZE'])) - $this->_resumptionToken->setListSize($attributes['COMPLETELISTSIZE']); - if (isset($attributes['CURSOR'])) - $this->_resumptionToken->setCursor($attributes['CURSOR']); - } - - - public function endresumptiontoken($data) { - $this->_resumptionToken->setToken($data); - } - - - public function endns1_record() { - $this->endrecord(); - } - - - public function endrecord($data) { - $this->_records[] = $this->_record; - } - - - public function getResumptionToken() { - return $this->_resumptionToken; - } - - - public function getRecords() { - return $this->_records; + public function getLastRecord($data) { + return $this->_record; } diff --git a/library/Class/WebService/OAI.php b/library/Class/WebService/OAI.php index 263cdf916aeff11b503c48e4b420fb1122c0caa0..904899bf0dd00005a6f476ad919f43383ca9fa19 100644 --- a/library/Class/WebService/OAI.php +++ b/library/Class/WebService/OAI.php @@ -92,9 +92,10 @@ class Class_WebService_OAI extends Class_WebService_Abstract { public function oaiAsks($verb, $parameters) { - $url = $this->oai_handler.'?verb='.$verb; - foreach ($parameters as $name => $value) - $url .= '&'.$name.'='.urlencode($value); + unset($parameters['verb']); + $parameters = array_merge(['verb' => $verb], + $parameters); + $url = $this->oai_handler.'?'.http_build_query($parameters); return $this->getContent($url); } @@ -128,14 +129,24 @@ class Class_WebService_OAI extends Class_WebService_Abstract { return $this->getRecordsFromSet($set); } + public function setParser($parser) { $this->parser = $parser; return $this; } + public function getRecordsFromSetNumericResources($set) { + $xml_data = $this->oaiAsks(self::ListRecords, + ['metadataPrefix' => 'oai_dc', + 'set' => $set]); + + return $this->parseListRecordsRessourcesNumeriqueXML($xml_data); + } + + public function getRecordsResourcesNumerique($params = []) { - if(!$this->isFirstPage()) + if (!$this->isFirstPage()) return $this->getNextNumericResources(); $params = array_merge(['metadataPrefix' => $this->metadata_prefix], $params); @@ -147,15 +158,18 @@ class Class_WebService_OAI extends Class_WebService_Abstract { public function getRecordsFromSet($set) { - $xml_data = $this->oaiAsks(self::ListRecords, - array('metadataPrefix' => $this->metadata_prefix, - 'set' => $set)); + return $this->getRecords(['set' => $set]); + } + + + public function getRecords($params = []) { + $params = array_merge(['metadataPrefix' => $this->metadata_prefix], $params); + $xml_data = $this->oaiAsks(self::ListRecords, $params); return $this->parseListRecordsXML($xml_data); } public function parseListRecordsXML($xml_data) { - $this->parser->parse($xml_data); $this->setListRecordsResumptionToken($this->parser->getResumptionToken()); return $this->parser->getRecords(); @@ -184,22 +198,26 @@ class Class_WebService_OAI extends Class_WebService_Abstract { public function getNextRecords() { if (!$this->hasNextRecords()) return []; + $xml_data = $this->oaiAsks( self::ListRecords, - array('resumptionToken' => $this->getListRecordsResumptionToken()->getToken())); + ['resumptionToken' => $this->getListRecordsResumptionToken()->getToken()]); return $this->parseListRecordsXML($xml_data); } public function getNextNumericResources() { if (!$this->hasNextRecords()) - return array(); + return []; + $xml_data = $this->oaiAsks( self::ListRecords, - array('resumptionToken' => $this->getListRecordsResumptionToken()->getToken())); + ['resumptionToken' => $this->getListRecordsResumptionToken()->getToken()]); + return $this->parseListRecordsRessourcesNumeriqueXML($xml_data); } + public function setListRecordsResumptionToken($token) { $this->_listRecordsResumptionToken = $token; return $this; diff --git a/library/Class/WebService/OAI/MarcXMLParser.php b/library/Class/WebService/OAI/MarcXMLParser.php new file mode 100644 index 0000000000000000000000000000000000000000..37accfd6c8c08759685dbd06e1931f7f54b42086 --- /dev/null +++ b/library/Class/WebService/OAI/MarcXMLParser.php @@ -0,0 +1,77 @@ +<?php +/** + * Copyright (c) 2012, Agence Française Informatique (AFI). All rights reserved. + * + * BOKEH is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation. + * + * There are special exceptions to the terms and conditions of the AGPL as it + * is applied to this software (see README file). + * + * BOKEH is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with BOKEH; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +class Class_WebService_OAI_MarcXMLParser extends Class_WebService_OAI_ParserAbstract { + protected + $_record, + $_datafield, + $_ind1, + $_ind2, + $_subfield, + $_controlfield; + + public function newRecord($attributes) { + $this->_record = (new Class_NoticeUnimarc_Writer())->setNotice(''); + } + + + public function getLastRecord($data) { + $this->_record->update(); + return $this->_record; + } + + + public function endMarc_Leader($data) { + $this->_record->set_rs($data[0]) + ->set_dt($data[1]) + ->set_bl($data[2]) + ->set_hl($data[3]); + } + + public function startMarc_datafield($attributes) { + $this->_datafield = $attributes['TAG']; + $this->_ind1 = $attributes['IND1'] ? $attributes['IND1'] : ' '; + $this->_ind2 = $attributes['IND2'] ? $attributes['IND2'] : ' '; + } + + + public function startMarc_subfield($attributes) { + $this->_subfield = $attributes['CODE']; + } + + + public function endMarc_subfield($data) { + $this->_record->add_field($this->_datafield, + $this->_ind1.$this->_ind2, + $this->_subfield.$data); + } + + + public function startMarc_controlfield($attributes) { + $this->_controlfield = $attributes['TAG']; + } + + + public function endMarc_controlfield($data) { + $this->_record->add_field($this->_controlfield, '', $data); + } +} +?> \ No newline at end of file diff --git a/library/Class/WebService/OAI/ParserAbstract.php b/library/Class/WebService/OAI/ParserAbstract.php new file mode 100644 index 0000000000000000000000000000000000000000..bdeede5af9030dd2ab077b21f0e35ef09dbbf56c --- /dev/null +++ b/library/Class/WebService/OAI/ParserAbstract.php @@ -0,0 +1,81 @@ +<?php +/** + * Copyright (c) 2012, Agence Française Informatique (AFI). All rights reserved. + * + * BOKEH is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation. + * + * There are special exceptions to the terms and conditions of the AGPL as it + * is applied to this software (see README file). + * + * BOKEH is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with BOKEH; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +abstract class Class_WebService_OAI_ParserAbstract { + protected $_resumptionToken; + protected $_records; + + public function __construct() { + $this->_records = []; + } + + + public function parse($xml) { + $this->_records = []; + $this->_records_ressources = []; + $this->_resumptionToken = null; + $this->parser = Class_WebService_XMLParser::newInstance(); + $this->parser->keepNameSpace(); + $this->parser->setElementHandler($this); + $this->parser->parse($xml); + return $this->_records; + } + + + public function startResumptionToken($attributes) { + $this->_resumptionToken = new Class_WebService_ResumptionToken(); + if (isset($attributes['COMPLETELISTSIZE'])) + $this->_resumptionToken->setListSize($attributes['COMPLETELISTSIZE']); + if (isset($attributes['CURSOR'])) + $this->_resumptionToken->setCursor($attributes['CURSOR']); + } + + + public function endresumptiontoken($data) { + $this->_resumptionToken->setToken($data); + } + + + + public function getResumptionToken() { + return $this->_resumptionToken; + } + + + public function getRecords() { + return $this->_records; + } + + + public function startRecord($attributes) { + $this->newRecord($attributes); + } + + + public function endRecord($data) { + $this->_records[] = $this->getLastRecord($data); + } + + + abstract public function newRecord($attributes); + abstract public function getLastRecord($data); +} +?> \ No newline at end of file diff --git a/library/Class/WebService/ResumptionToken.php b/library/Class/WebService/ResumptionToken.php index 851d6253a86c1fa42288e1c0354c796f1a4e1ffe..0f1787a835927b6bab825ccd33d471bf5ac3ac2e 100644 --- a/library/Class/WebService/ResumptionToken.php +++ b/library/Class/WebService/ResumptionToken.php @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE * along with BOKEH; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* @@ -25,6 +25,13 @@ */ class Class_WebService_ResumptionToken { + protected $_token; + + public function __construct($token=null) { + $this->_token = $token; + } + + public function getToken() { return $this->_token; } @@ -54,7 +61,7 @@ class Class_WebService_ResumptionToken { public function toJSON() { return json_encode(array( - "token" => $this->getToken(), + "token" => $this->getToken(), "list_size" => $this->getListSize(), "cursor" => $this->getCursor())); } diff --git a/library/Class/WebService/SIGB/Pergame/Service.php b/library/Class/WebService/SIGB/Pergame/Service.php index b0e927fe225001896b8f263ae0a4da4c8a773b9f..a7a3887ee5a540afaeaee0be200e5ce7809ce280 100644 --- a/library/Class/WebService/SIGB/Pergame/Service.php +++ b/library/Class/WebService/SIGB/Pergame/Service.php @@ -91,18 +91,18 @@ class Class_WebService_SIGB_Pergame_Service extends Class_WebService_SIGB_Abstra public function getReservationsOf($emprunteur) { + $user = Class_Users::find($emprunteur->getId()); $reservations_db = Class_Reservation::findAllBy(['IDABON' => $user->getIdabon(), 'ORDREABON' => $user->getOrdreabon()]); $reservations = []; foreach($reservations_db as $reservation) { $bib = Class_Bib::find($reservation->getIdSite()); - $reservations []= Class_WebService_SIGB_Reservation::newInstanceWithEmptyExemplaire() ->setId($reservation->getId()) ->setNoticeOPAC($reservation->getNotice()) ->setBibliotheque($bib ? $bib->getLibelle() : '') - ->setRang($reservation->getRang()) + ->setRang($reservation->getDynamicRank()) ->setEtat($reservation->getEtat()); } diff --git a/library/ZendAfi/Form/Admin/AdminVar.php b/library/ZendAfi/Form/Admin/AdminVar.php index 1d9a09480367669b01ba12272a57cf1558d3b8d7..74579cd726e4ff9d162c4af113e5acacf6a10c78 100644 --- a/library/ZendAfi/Form/Admin/AdminVar.php +++ b/library/ZendAfi/Form/Admin/AdminVar.php @@ -26,6 +26,7 @@ class ZendAfi_Form_Admin_AdminVar extends ZendAfi_Form { Class_AdminVar::TYPE_MULTI_INPUT => 'ZendAfi_Form_Admin_AdminVar_MultiInput', Class_AdminVar::TYPE_DEFAULT => 'ZendAfi_Form_Admin_AdminVar', Class_AdminVar::TYPE_ENCODED_DATA => 'ZendAfi_Form_Admin_AdminVar_EncodedData', + Class_AdminVar::TYPE_RAW_TEXT => 'ZendAfi_Form_Admin_AdminVar_RawText', ]; diff --git a/cosmogramme/php/classes/trait_singleton.php b/library/ZendAfi/Form/Admin/AdminVar/RawText.php similarity index 72% rename from cosmogramme/php/classes/trait_singleton.php rename to library/ZendAfi/Form/Admin/AdminVar/RawText.php index a756f4a6ff597d05a63c166efcf3b0b8d383b791..60d890e71c63b00277f2364f34da0d5cc75c527c 100644 --- a/cosmogramme/php/classes/trait_singleton.php +++ b/library/ZendAfi/Form/Admin/AdminVar/RawText.php @@ -1,6 +1,6 @@ <?php /** - * Copyright (c) 2012, Agence Française Informatique (AFI). All rights reserved. + * Copyright (c) 2012-2014, Agence Française Informatique (AFI). All rights reserved. * * BOKEH is free software; you can redistribute it and/or modify * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by @@ -16,17 +16,13 @@ * * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE * along with BOKEH; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -trait trait_singleton { - static protected $_instance; - public static function getInstance() { - if (!isset(static::$_instance)) - static::$_instance = new static(); - return static::$_instance; +class ZendAfi_Form_Admin_AdminVar_RawText extends ZendAfi_Form_Admin_AdminVar { + public function getAdminVarValue() { + $values = $this->getValues(); + return trim($values['valeur']); } -} - -?> \ No newline at end of file +} \ No newline at end of file diff --git a/library/ZendAfi/View/Helper/Accueil/Kiosque.php b/library/ZendAfi/View/Helper/Accueil/Kiosque.php index d83e502455cad6943974235ef1a62da45c47d72b..f495170585b8023be20d1c8e93bb0711d554b85c 100644 --- a/library/ZendAfi/View/Helper/Accueil/Kiosque.php +++ b/library/ZendAfi/View/Helper/Accueil/Kiosque.php @@ -251,30 +251,43 @@ class ZendAfi_View_Helper_Accueil_Kiosque extends ZendAfi_View_Helper_Accueil_Ba } + protected function totalNotices($req) { + $nb_notices = isset($this->preferences['nb_analyse']) ? + $this->preferences['nb_analyse'] : 0; + + if (0 == $nb_notices) + return Class_Notice::countBySQLSelect($req); + + $total_count = Class_Notice::countBySQLSelect($req); + + return $nb_notices >= $total_count ? + $total_count : $nb_notices; + } + + public function getKiosqueHtml($page = 1) { $this->_nombre_notices_par_page = $this->preferences['nb_notices']; + $nombre_total_notices = 0; $this->preferences['nb_notices'] = 0; - $this->preferences['nb_analyse'] = 0; $requetes = Class_Catalogue::getRequetes($this->preferences, ['id_notice']); - - $nombre_total_notices = 0; $notices = []; if (isset($requetes['req_comptage'])) { - $nombre_total_notices = Class_Notice::countBySQLSelect($requetes['req_comptage']); + $nombre_total_notices = $this->totalNotices($requetes['req_comptage']); $notices = Class_Notice::findAllByRequeteRecherche($requetes['req_ids'], $this->_nombre_notices_par_page, $page); - } + } if(!$notices) return $this->view->tag('p',$this->view->_('Aucun résultat')); $html = $this->renderNoticesKiosqueHtml($notices); if (!$this->isModeChrono()) - $html = $this->getPagerHtml($page, - $this->_nombre_notices_par_page, - $nombre_total_notices) + $html = $this + ->getPagerHtml($page, + $this->_nombre_notices_par_page, + $nombre_total_notices) . $html; return $html; @@ -291,9 +304,17 @@ class ZendAfi_View_Helper_Accueil_Kiosque extends ZendAfi_View_Helper_Accueil_Ba public function getPagerHtml($page, $nombre_notices_par_page, $nombre_total_notices) { - $next_page = ($page * $nombre_notices_par_page < $nombre_total_notices) ? $page + 1 : 1; - $previous_page = ($page > 1) ? $page - 1 : (int)(($nombre_total_notices + $nombre_notices_par_page)/ max($nombre_notices_par_page, 1)); + if ($nombre_total_notices <= $nombre_notices_par_page) + return ''; + + $next_page = ($page * $nombre_notices_par_page) < $nombre_total_notices ? + $page + 1 : 1; + + $last_page = ($nombre_total_notices % max($nombre_notices_par_page, 1))>0 + ? (int)(($nombre_total_notices) / max($nombre_notices_par_page, 1))+1 + :(int)(($nombre_total_notices) / max($nombre_notices_par_page, 1)) ; + $previous_page = ($page > 1) ? $page - 1 : $last_page; $onclick = 'var contenu = $(this).parents(\'.contenu\');' .'contenu.animate({opacity:0});' diff --git a/library/ZendAfi/View/Helper/Admin/HelpLink.php b/library/ZendAfi/View/Helper/Admin/HelpLink.php index 8e636ece5b633249af07be040b61f292551a8bd3..2a89cf30601e81e703f1c0594198e42101d87ec2 100644 --- a/library/ZendAfi/View/Helper/Admin/HelpLink.php +++ b/library/ZendAfi/View/Helper/Admin/HelpLink.php @@ -135,7 +135,8 @@ class ZendAfi_View_Helper_Admin_HelpLinkBokehWiki 'catalogue' => ['index' => 'Gestions_des_domaines'], 'profil' => ['index' => 'Configurer_un_profil', 'menusindex' => 'Configurer_un_menu'], - 'accueil' => ['critiques' => 'Boite_Critiques'], + 'accueil' => ['critiques' => 'Boite_Critiques', + 'news' => 'Boite_Article'], 'harvest' => ['jamendo-browse' => 'Jamendo']]; } diff --git a/library/ZendAfi/View/Helper/Notice/Exemplaires.php b/library/ZendAfi/View/Helper/Notice/Exemplaires.php index 5bb31977de47bacf2cac9e784fdc8da6398952bc..56c0b88517265417be0586f93b35c785c0ca2638 100644 --- a/library/ZendAfi/View/Helper/Notice/Exemplaires.php +++ b/library/ZendAfi/View/Helper/Notice/Exemplaires.php @@ -333,6 +333,10 @@ class ZendAfi_View_Helper_Notice_Exemplaires_Dispo extends ZendAfi_View_Helper_N ? 'disponible' : ''; + if ($exemplaire['url']) + $libelle = $this->view->tagAnchor($exemplaire['url'], + $this->view->_('Description en ligne')); + if ( isset($exemplaire['nb_resas']) && $exemplaire['nb_resas']>0) $libelle.= '<span>' @@ -342,6 +346,7 @@ class ZendAfi_View_Helper_Notice_Exemplaires_Dispo extends ZendAfi_View_Helper_N $exemplaire['nb_resas']) .'</span>'; + return '<td class="dispo '.$class_dispo.'">'.$libelle.'</td>'; } } diff --git a/library/ZendAfi/View/Helper/RenderLieu.php b/library/ZendAfi/View/Helper/RenderLieu.php index e2f9dd6ea134734bd80c13ddbe6f23e6fa6c43e4..b7b96dafe391f6e54d3da703b8a38cc6ef9a80b0 100644 --- a/library/ZendAfi/View/Helper/RenderLieu.php +++ b/library/ZendAfi/View/Helper/RenderLieu.php @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE * along with BOKEH; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ class ZendAfi_View_Helper_RenderLieu extends Zend_View_Helper_HtmlElement { @@ -24,12 +24,27 @@ class ZendAfi_View_Helper_RenderLieu extends Zend_View_Helper_HtmlElement { if (!$lieu) return ''; - $adresse = nl2br($lieu->getAdresse()).'<br/>'.$lieu->getCodePostal().' '.$lieu->getVille(); - + + $adresse = array(); + + if (nl2br($lieu->getAdresse())) + $adresse[] = nl2br($lieu->getAdresse()); + + if ($lieu->getCodePostal() || $lieu->getVille()) + $adresse[] = $lieu->getCodePostal() . ' ' . $lieu->getVille(); + + if ($lieu->getTelephone()) + $adresse[] = $lieu->getTelephone(); + + if ($lieu->getMail()) + $adresse[] = $lieu->getMail(); + + $adresse_str = implode('<br />', $adresse); + return sprintf('<div class="lieu">%s %s <p>%s</p></div>', $this->view->mapForLieu($lieu, $map_options), $lieu->getLibelle(), - $adresse); + $adresse_str); } } diff --git a/library/fonctions/fonctions.php b/library/fonctions/fonctions.php index 91ce437bdd247b3da27fa8beffaee56918204839..1cf786c3fc463294d8b13c3470220573b863467d 100644 --- a/library/fonctions/fonctions.php +++ b/library/fonctions/fonctions.php @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE * along with BOKEH; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ include_once( "string.php" ); include_once( "error.php" ); @@ -24,4 +24,5 @@ include_once( "sql.php" ); include_once( "array.php" ); include_once( "useragent.php" ); include_once( "numbers.php" ); +include_once( 'cosmogramme/php/fonctions/date_heure.php'); ?> \ No newline at end of file diff --git a/library/fonctions/string.php b/library/fonctions/string.php index dcc43c7daf88bd99a3aef1b1d15689b076351f22..407ecf3727269eb4c97d4d134e2b03d2277077b7 100644 --- a/library/fonctions/string.php +++ b/library/fonctions/string.php @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE * along with BOKEH; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ ////////////////////////////////////////////////////////////////////////////////////// // FONCTIONS CHAINES DE CARACTERES @@ -104,41 +104,7 @@ function formatDate($date,$format) } return $date; } -// Ajoute ou soustrait des jours à une date et renvoie une date (format sql) -function ajouterJours( $date, $jours) -{ - if(!$date) return false; - if(!$jours) return $date; - $date=RendTimeStamp($date); - $jours=$jours*3600*24; - $new = $date+$jours; - $dt=getdate($new); - if( $dt["mon"] < 10 ) $dt["mon"] ="0".$dt["mon"]; - if( $dt["mday"] < 10 ) $dt["mday"] ="0".$dt["mday"]; - $new = $dt["year"]."-".$dt["mon"]."-".$dt["mday"]; - return $new; -} - -// Soustrait date1 par date2 et rend le nombre de jours -function ecartDates( $date1, $date2 ) -{ - $date1 = rendTimeStamp($date1); - $date2 = rendTimeStamp($date2); - $sec = $date1-$date2; - $heures = (int)($sec/3600); - $jours = (int)($heures/24); - return $jours; -} -// Rend un timestamp à partir d'une date (francais ou US) -function rendTimeStamp( $date ) -{ - if(! $date or substr($date,0,10) == "0000-00-00") return false; - $elem = explode( "-", $date ); - if(strlen($elem[0]) == 4) $new = mkTime(0,0,0,$elem[1],$elem[2],$elem[0]); - else $new = mkTime(0,0,0,$elem[1], $elem[0], $elem[2]); - return $new; -} ///////////////////////////////////////////////////////////////////////////////////// //////////////////// TOUT LE RESTE C'EST A VERIFIER ///////////////////////////////// @@ -188,15 +154,15 @@ function strMid( $chaine, $deb, $len ) return convertToUtf8($result); } -function strScan( $chaine, $cherche, $posDeb) +function strScan( $chaine, $cherche, $posDeb = 0) { $chaine = convertFromUtf8($chaine); $cherche = convertFromUtf8($cherche); - $posdeb=0; + $posDeb=0; if(!trim($cherche)) return -1; if( $posDeb >0 ) $chaine = strRight( $chaine, -$posDeb ); - $pos = strpos( $chaine, $cherche, $posdeb ); + $pos = strpos( $chaine, $cherche, $posDeb ); if( $pos > 0 ) return $pos + $posDeb; if( strLeft($chaine, strLen($cherche)) == $cherche) return $posDeb; return -1; @@ -208,10 +174,10 @@ function strScanReverse( $chaine, $cherche, $pos ) { $cherche = convertFromUtf8($cherche); $len = strLen($cherche); - if( $pos == -1 ) + if( $pos == -1 ) $pos = strLen($chaine); for( $i=$pos; $i>=0; $i-- ) { - if( substr( $chaine, $i, $len ) == $cherche ) + if( substr( $chaine, $i, $len ) == $cherche ) return $i; } return -1; @@ -279,5 +245,3 @@ function convertToUtf8($string){ return $string; } - - diff --git a/library/startup.php b/library/startup.php index 76ee458b29e0caf18bf71061e413c52464588c52..3c8f97de5157794e8dff8f502b98cace7233c632 100644 --- a/library/startup.php +++ b/library/startup.php @@ -64,7 +64,7 @@ function defineConstant($name, $value) { function setupConstants() { defineConstant('BOKEH_MAJOR_VERSION','7.1'); - defineConstant('BOKEH_RELEASE_NUMBER', BOKEH_MAJOR_VERSION . '.34'); + defineConstant('BOKEH_RELEASE_NUMBER', BOKEH_MAJOR_VERSION . '.36'); defineConstant('ROOT_PATH', realpath(dirname(__FILE__).'/..').'/'); diff --git a/library/storm b/library/storm index 6c0d145c72ad2ab90ec1fdadffe9eabb3a02d10b..55293638daa939e68641a8d03f40e3820ff12c56 160000 --- a/library/storm +++ b/library/storm @@ -1 +1 @@ -Subproject commit 6c0d145c72ad2ab90ec1fdadffe9eabb3a02d10b +Subproject commit 55293638daa939e68641a8d03f40e3820ff12c56 diff --git a/public/opac/css/global.css b/public/opac/css/global.css index f3a40dc555ab8217cf1d618017358ed573d56681..6b90dfcb56db75726c12b174418928070bfc9bb8 100644 --- a/public/opac/css/global.css +++ b/public/opac/css/global.css @@ -133,7 +133,7 @@ dl.article_info { .article .lieu { height: 200px; - width: 400px; + width: 800px; margin: 10px auto; font-size: 1.2em; } @@ -2978,4 +2978,4 @@ a.loan-export { .boite .contenu { min-height: 20px; -} \ No newline at end of file +} diff --git a/tests/application/modules/admin/controllers/AccueilControllerCmsTest.php b/tests/application/modules/admin/controllers/AccueilControllerCmsTest.php index 0732d5356891d70de1bd5e40ea165af9a2c98fac..3e5cc481d36c2eec43aeeec578d5269b6bfecd14 100644 --- a/tests/application/modules/admin/controllers/AccueilControllerCmsTest.php +++ b/tests/application/modules/admin/controllers/AccueilControllerCmsTest.php @@ -85,6 +85,13 @@ class Admin_AccueilControllerCmsTestWithDefaultDiaporamaNavigation extends Admin public function windowHeightShouldBeSetTo250px() { $this->assertXPath('//div[@id="objet_props"]//input[@name="op_navigation_window_height"][@value="250"]'); } + + + /** @test */ + public function displayOrderCommentCountShouldBePresent() { + $this->assertXPath('//input[@type="radio"][@name="display_order"][@value="CommentCount"]', + $this->_response->getBody()); + } } diff --git a/tests/application/modules/admin/controllers/AccueilControllerTest.php b/tests/application/modules/admin/controllers/AccueilControllerTest.php index 25620bc3fa7e73df35f7440d972d2cdaac66d2f1..f8e47d5a542e932b4ec4f55f49d34db84af87f8d 100644 --- a/tests/application/modules/admin/controllers/AccueilControllerTest.php +++ b/tests/application/modules/admin/controllers/AccueilControllerTest.php @@ -315,7 +315,6 @@ class AccueilControllerConfigSitothequeDefaultsTest extends Admin_AbstractContro public function displayOrderSelectionShouldBePresent() { $this->assertXPath('//input[@type="radio"][@name="display_order"][@value="Selection"]'); } - } diff --git a/tests/application/modules/admin/controllers/AdminIndexControllerTest.php b/tests/application/modules/admin/controllers/AdminIndexControllerTest.php index 7bf29ff1658647b47a4336dff95ea43601405c1a..5a9f43f2d13a85160abf7b87911f4b05eab0aa3e 100644 --- a/tests/application/modules/admin/controllers/AdminIndexControllerTest.php +++ b/tests/application/modules/admin/controllers/AdminIndexControllerTest.php @@ -40,13 +40,11 @@ class AdminIndexControllerIndexActionTest extends AdminIndexControllerTestCase { public function setUp() { parent::setUp(); - Class_AdminVar::getLoader() - ->newInstanceWithId('LANGUES') - ->setValeur(''); - + $this->fixture('Class_AdminVar', ['id' => 'LANGUES', 'valeur' => '']); $this->dispatch('/admin/index', true); } + /** @test */ function menuGaucheTraductionsShouldBeHidden() { $this->assertNotXPathContentContains('//a', 'Traductions'); @@ -173,12 +171,9 @@ class AdminIndexControllerAdminVarEditActionTest extends Admin_AbstractControlle public function setUp() { parent::setUp(); - $this->genre_facet = Storm_Test_ObjectWrapper::onLoaderOfModel('Class_AdminVar') - ->whenCalled('save') - ->answers('true') - ->getWrapper() - ->newInstanceWithId('FACETTE_GENRE_LIBELLE') - ->setValeur('1'); + $this->genre_facet = $this->fixture('Class_AdminVar', + ['id' => 'FACETTE_GENRE_LIBELLE', + 'valeur' => '1']); } @@ -370,27 +365,24 @@ class AdminIndexControllerAdminVarEditResaConditionActionTest extends Admin_Abst public function setUp() { parent::setUp(); - $this->_resa_condition = Class_AdminVar::getLoader() - ->newInstanceWithId('RESA_CONDITION') - ->setValeur('Mes+conditions+de+reservation'); - - Storm_Test_ObjectWrapper::onLoaderOfModel('Class_AdminVar') - ->whenCalled('save') - ->answers(true); + $this->_resa_condition = $this->fixture('Class_AdminVar', + ['id' => 'RESA_CONDITION', + 'valeur' => 'Mes+conditions+de+reservation']); } /** @test */ public function editResaConditionShouldDecodeItsValeur() { $this->dispatch('/admin/index/adminvaredit/cle/RESA_CONDITION', true); - $this->assertXPathContentContains('//textarea', 'Mes conditions de reservation', $this->_response->getBody()); + $this->assertXPathContentContains('//textarea', 'Mes conditions de reservation', + $this->_response->getBody()); } /** @test */ public function postResaConditionShouldEncodeItsValeur() { $this->postDispatch('/admin/index/adminvaredit/cle/RESA_CONDITION', - array('valeur' => 'Il faut demander')); + ['valeur' => 'Il faut demander']); $this->assertEquals('Il+faut+demander', $this->_resa_condition->getValeur()); } @@ -513,4 +505,20 @@ class AdminIndexControllerAdminVarDilicomDeclareIpPostTest extends AdminIndexCon } } -?> \ No newline at end of file + + +/** @see http://forge.afi-sa.fr/issues/24383 */ +class AdminIndexControllerAdminVarEditTextReplacementsActionTest extends Admin_AbstractControllerTestCase { + + /** @test */ + public function postShouldNotStripTags() { + $this->fixture('Class_AdminVar', + ['id' => 'TEXT_REPLACEMENTS', 'valeur' => '']); + + $value = 'Votre réservation est enregistrée.<br>Nous vous informerons quand le document%s sera disponible pour être retiré à : %s'; + $this->postDispatch('/admin/index/adminvaredit/cle/TEXT_REPLACEMENTS', + ['valeur' => $value]); + + $this->assertEquals($value, Class_AdminVar::get('TEXT_REPLACEMENTS')); + } +} diff --git a/tests/application/modules/opac/controllers/CmsControllerTest.php b/tests/application/modules/opac/controllers/CmsControllerTest.php index 393b1d8751f2f5464fb8bed06e7e593fc371cb35..7cc2d3f0979c8fe2db24720274ac5d94517bffa3 100644 --- a/tests/application/modules/opac/controllers/CmsControllerTest.php +++ b/tests/application/modules/opac/controllers/CmsControllerTest.php @@ -1343,6 +1343,7 @@ class CmsControllerViewSummaryTest extends CmsControllerListTestCase { + class CmsControllerArticleViewSelectionTest extends CmsControllerListTestCase { protected function _dispatchHook() { $this->dispatch('/cms/articleviewselection'); @@ -1369,6 +1370,14 @@ class CmsControllerArticleViewSelectionTest extends CmsControllerListTestCase { +class CmsControllerArticleViewSelectionRssBrokenLinkForwardTest extends CmsControllerArticleViewSelectionTest { + // forward to prevent broken link on rss, tix #25724 + protected function _dispatchHook() { + $this->dispatch('/cms/viewselection'); + } + +} + class CmsControllerArticleViewSelectionFromHorizontalMenuBoxTest extends AbstractControllerTestCase { public function setUp() { diff --git a/tests/application/modules/opac/controllers/NoticeAjaxControllerTest.php b/tests/application/modules/opac/controllers/NoticeAjaxControllerTest.php index 39dfdebdd0819ffafca85ecd116370d92274eec9..89f7a00b6f44250fdb2600d16fed6aaac70bc681 100644 --- a/tests/application/modules/opac/controllers/NoticeAjaxControllerTest.php +++ b/tests/application/modules/opac/controllers/NoticeAjaxControllerTest.php @@ -267,7 +267,8 @@ class NoticeAjaxControllerNoticeSimilairesSouleymaneTest extends NoticeAjaxContr class NoticeAjaxControllerResNumeriquesTest extends AbstractControllerTestCase { public function setup() { parent::setup(); - $this->fixture('Class_Notice', ['id' => 123]); + $this->fixture('Class_Notice', ['id' => 123, + 'type_doc' => Class_TypeDoc::LIVRE_NUM]); $this->fixture('Class_Exemplaire', ['id' => 34, 'id_origine' => 8, 'id_notice' => 123]); @@ -275,7 +276,7 @@ class NoticeAjaxControllerResNumeriquesTest extends AbstractControllerTestCase { /** @test */ - function bookletShouldBeLoadedWithAlbumTypeLivreNumerique() { + public function bookletShouldBeLoadedWithAlbumTypeLivreNumerique() { $album = $this->fixture('Class_Album', ['id' => 8, 'type_doc_id' => Class_TypeDoc::LIVRE_NUM]); @@ -286,7 +287,7 @@ class NoticeAjaxControllerResNumeriquesTest extends AbstractControllerTestCase { /** @test */ - function messageAucuneRessourceShouldBeDisplayedIfAlbumDoesNotExists() { + public function messageAucuneRessourceShouldBeDisplayedIfAlbumDoesNotExists() { Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Exemplaire') ->whenCalled('findFirstBy') ->answers(null); @@ -298,7 +299,7 @@ class NoticeAjaxControllerResNumeriquesTest extends AbstractControllerTestCase { /** @test */ - function diaporamaShouldBeLoadedWithAlbumTypeDiaporama() { + public function diaporamaShouldBeLoadedWithAlbumTypeDiaporama() { $album = $this->fixture('Class_Album', ['id' => 8, 'type_doc_id' => Class_TypeDoc::DIAPORAMA]); diff --git a/tests/fixtures/numilog_catalogue.xml b/tests/fixtures/numilog_catalogue.xml index 557c14a24e3dffb4e6bceb48742de4b9a511a593..69f7124a43701a87be0a7b8fade6517e750746df 100644 --- a/tests/fixtures/numilog_catalogue.xml +++ b/tests/fixtures/numilog_catalogue.xml @@ -1577,4 +1577,5 @@ </oai_dc:dc> </metadata> </record> +<resumptionToken completeListSize="75" cursor="71">769701498!500!oai_dc!bib:44!</resumptionToken> </ListRecords></OAI-PMH> diff --git a/tests/fixtures/numilog_end.xml b/tests/fixtures/numilog_end.xml new file mode 100644 index 0000000000000000000000000000000000000000..f945f11f63697e77c4d1a13d934a75e676bf920c --- /dev/null +++ b/tests/fixtures/numilog_end.xml @@ -0,0 +1,107 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> +<responseDate>2015-06-02T15:45:56Z</responseDate> +<request set="bib:47" verb="ListRecords">http://oai.numilog.com/OAI.ashx</request> +<ListRecords> +<record> +<header> +<identifier>oai:numilog.com:67078</identifier> +<datestamp>2010-12-17T14:59:48Z</datestamp> +</header> +<metadata> +<oai_dc:dc xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/"> +<dc:identifier>oai:numilog.com:9782212122657</dc:identifier> +<dc:title><![CDATA[Isoler écologique]]></dc:title> +<dc:creator><![CDATA[Vu, Brigitte]]></dc:creator> +<dc:publisher><![CDATA[Eyrolles]]></dc:publisher> +<dc:description><![CDATA[<p>Une mauvaise isolation pour une habitation standard, c'est 600€ de plus sur sa facture de chauffage et une tonne de CO<sub>2</sub> dans la nature... Cette estimation peut s'élever dans le cas de mauvaise rénovation ou de mauvais matériaux. Bien isoler sa maison, c'est avant tout économiser son chauffage, respecter son environnement, et s'offrir un lieu sain et confortable, dépourvu d'humidité, source d'allergies et de maladies respiratoires...</p> + +<p>Comment isoler et quels matériaux choisir ? Quelles caractéristiques privilégier ? Comment appliquer son isolant ? Autant de questions qui suscitent l'intérêt.</p> + +<p>Un isolant se choisit en fonction de différents critères : ses caractéristiques, sa résistance, son efficacité, certes, mais aussi en fonction du lieu où l'on souhaite le poser, et de son application par exemple. Ce guide prend en compte l'ensemble des paramètres indispensables au choix de son isolation, tant pour respecter la PI 2005 que pour réaliser des économies de chauffage et d'énergie !</p> + +<h4>Un guide pratique et sur-mesure pour réaliser de véritables économies</h4>]]></dc:description> +<dc:subject>Batiment</dc:subject> +<dc:language>fre</dc:language> +<dc:rights xml:lang="fre">sous droits</dc:rights> +<dc:rights xml:lang="eng">right protected</dc:rights> +<dc:format>application/PDF</dc:format> +<dc:relation>agglo-sqy/fiche_livre.asp?idprod=67078</dc:relation> +</oai_dc:dc> +</metadata> +</record> +<record> +<header> +<identifier>oai:numilog.com:67066</identifier> +<datestamp>2010-12-17T14:59:42Z</datestamp> +</header> +<metadata> +<oai_dc:dc xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/"> +<dc:identifier>oai:numilog.com:9782212158427</dc:identifier> +<dc:title><![CDATA[La boîte à outils du formateur]]></dc:title> +<dc:creator><![CDATA[Beau, Dominique]]></dc:creator> +<dc:publisher><![CDATA[Editions d'Organisation]]></dc:publisher> +<dc:date>2011-07-07</dc:date> +<dc:description><![CDATA[<h4>Concevoir, animer, évaluer une formation : comment faire ?</h4> + +<p>Conçu à l'origine comme un retour d'expérience, cet ouvrage est devenu une <strong>référence pour les professionnels de la formation</strong> qui ont assuré son succès depuis 1976. Ce véritable compagnon du formateur est une nouvelle fois <strong>actualisé et augmenté</strong>. Il vous aide au choix d'un mode personnel de lecture et vous accompagne, pas à pas, dans la réussite de vos objectifs :</p> + +<ul> +<li>construire une formation dès maintenant ?</li> +<li>prendre le temps de concevoir un programme ?</li> +<li>vous initier à la pédagogie des adultes ?</li> +<li>analyser votre pratique de formateur ?</li> +</ul> + +<p>À ces <strong>quatre objectifs</strong> correspondent <strong>quatre modes de navigation dans l'ouvrage.</strong></p> + +<p>Guy Le Boterf, dans la préface d'une édition précédente, disait : <em>"Il est heureux que ce livre rappelle quelques "fondamentaux" à une époque où l'intérêt légitime pour les nouvelles technologies de l'information et de la communication ne doit pas conduire à substituer une machinerie au professionnalisme nécessaire à la conception et à l'accompagnement des situations d'apprentissage."</em></p> + +<ul> +<li>100 fiches pour <strong>animer</strong> vos formations</li> +<li>14 nouvelles fiches sur <strong>l'environnement</strong> du formateur</li> +<li>4 modes de <strong>navigation</strong> dans l'ouvrage</li> +<li>de multiples <strong>renvois</strong> aux fiches entre elles</li> +</ul>]]></dc:description> +<dc:subject>Management</dc:subject> +<dc:language>fre</dc:language> +<dc:rights xml:lang="fre">sous droits</dc:rights> +<dc:rights xml:lang="eng">right protected</dc:rights> +<dc:format>application/PDF</dc:format> +<dc:relation>agglo-sqy/fiche_livre.asp?idprod=67066</dc:relation> +</oai_dc:dc> +</metadata> +</record> +<record> +<header> +<identifier>oai:numilog.com:67063</identifier> +<datestamp>2010-12-17T14:59:48Z</datestamp> +</header> +<metadata> +<oai_dc:dc xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/"> +<dc:identifier>oai:numilog.com:9782212540499</dc:identifier> +<dc:title><![CDATA[Guide de la maison économe]]></dc:title> +<dc:creator><![CDATA[Robert, Jérôme]]></dc:creator> +<dc:creator><![CDATA[Fabas, Laurent]]></dc:creator> +<dc:publisher><![CDATA[Eyrolles]]></dc:publisher> +<dc:description><![CDATA[<p>Confort, rénovation, construction... Quel que soit votre projet d'habitation, ce guide écologique vous donne tous les tuyaux pour faire des économies... d'énergie et d'argent ! Il commence par donner conseils, trucs et astuces pour réduire ses dépenses d'énergie au quotidien. Organisé ensuite par type d'énergie, il décrit de façon pédagogique les différentes innovations disponibles et il délivre pas à pas les démarches qui permettent d'en profiter.</p> + +<p>Conçu par des spécialistes, ce guide met leur savoir-faire à la portée de tous.</p> + +<ul> +<li>Guide de l'économie d'énergie</li> +<li>Guide des économies d'argent</li> +<li>Guide de la construction</li> +<li>Guide de la rénovation</li> +</ul>]]></dc:description> +<dc:subject>Guides pratiques et vie quotidienne</dc:subject> +<dc:language>fre</dc:language> +<dc:rights xml:lang="fre">sous droits</dc:rights> +<dc:rights xml:lang="eng">right protected</dc:rights> +<dc:format>application/PDF</dc:format> +<dc:relation>agglo-sqy/fiche_livre.asp?idprod=67063</dc:relation> +</oai_dc:dc> +</metadata> +</record> + +</ListRecords></OAI-PMH> diff --git a/tests/library/Class/ArticleLoaderTest.php b/tests/library/Class/ArticleLoaderTest.php index 68480d00c2bf8d8ebb7aaf2a21696051666bdaa4..00cb0668fde804ede9adfd33d2041bbe08dd7bac 100644 --- a/tests/library/Class/ArticleLoaderTest.php +++ b/tests/library/Class/ArticleLoaderTest.php @@ -308,6 +308,16 @@ class ArticleLoaderGetArticlesByPreferencesTest extends ModelTestCase { } + /** @test */ + public function withOrderCommentCountShouldJoinWithCmsRank() { + $articles = $this->getArticles(['display_order' => 'CommentCount', + 'id_items' => '', + 'id_categorie' => '4-2']); + $this->assertSelect(sprintf("INNER JOIN `cms_rank` ON cms_rank.ID_CMS = cms_article.ID_ARTICLE WHERE %s AND (`cms_article`.ID_CAT in (4,2)) ORDER BY (cms_rank.abon_nombre_avis + cms_rank.bib_nombre_avis) desc", + self::WHERE_VISIBLE_CLAUSE)); + } + + /** @test */ public function withStatusShouldFilterByStatus() { $articles = $this->getArticles(array('status' => Class_Article::STATUS_ARCHIVED)); diff --git a/tests/library/Class/CommSigbTest.php b/tests/library/Class/CommSigbTest.php index a21bf636de5b763494331f0802acc15e13a5398b..ba5e82d56e6ebd723ef16480934e2163b8c5f818 100644 --- a/tests/library/Class/CommSigbTest.php +++ b/tests/library/Class/CommSigbTest.php @@ -124,7 +124,8 @@ abstract class CommSigbTestCase extends Storm_Test_ModelTestCase { 'section' => '', 'genre' => null, 'date_nouveaute' => '', - 'id' => 10 + 'id' => 10, + 'url' => null ], ['id_origine' => '789', @@ -144,7 +145,8 @@ abstract class CommSigbTestCase extends Storm_Test_ModelTestCase { 'section' => '', 'genre' => null, 'date_nouveaute' => '', - 'id' => 12 + 'id' => 12, + 'url' => null ], ['id_origine' => '666', @@ -159,7 +161,8 @@ abstract class CommSigbTestCase extends Storm_Test_ModelTestCase { 'genre' => null, 'emplacement' => '', 'date_nouveaute' => '', - 'id' => 13], + 'id' => 13, + 'url' => null], ['id'=> 16, 'id_origine' => '999', @@ -173,7 +176,8 @@ abstract class CommSigbTestCase extends Storm_Test_ModelTestCase { 'emplacement' => '', 'date_nouveaute' => '', 'dispo' => 'Non disponible', - 'reservable' => false] + 'reservable' => false, + 'url' => null] ], $this->comm_sigb->getDispoExemplaires( @@ -649,7 +653,8 @@ class CommSigbWithNotAbonneTest extends Storm_Test_ModelTestCase { 'section' => '', 'genre' => null, 'emplacement' => '', - 'date_nouveaute' => '' + 'date_nouveaute' => '', + 'url' => null ] ], $this->comm_sigb->getDispoExemplaires([ diff --git a/tests/library/Class/Cosmogramme/Integration/PhaseDeleteItemsTest.php b/tests/library/Class/Cosmogramme/Integration/PhaseDeleteItemsTest.php new file mode 100644 index 0000000000000000000000000000000000000000..9dcbbc8355d4b007ae67605cdff9a4ea8de6f520 --- /dev/null +++ b/tests/library/Class/Cosmogramme/Integration/PhaseDeleteItemsTest.php @@ -0,0 +1,98 @@ +<?php +/** + * Copyright (c) 2012-2014, Agence Française Informatique (AFI). All rights reserved. + * + * BOKEH is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation. + * + * There are special exceptions to the terms and conditions of the AGPL as it + * is applied to this software (see README file). + * + * BOKEH is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with BOKEH; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +require_once('cosmogramme/php/fonctions/variables.php'); + +class PhaseDeleteItemsTest extends Class_Cosmogramme_Integration_PhaseTestCase { + protected $_phase; + + public function setUp() { + parent::setUp(); + + $this->_phase = $this->_buildPhase('DeleteItem')->run(); + } + + + protected function _prepareFixtures() { + $this->fixture('Class_IntProfilDonnees', + ['id' => 102, + 'libelle' => 'Suppression exemplaires', + 'rejet_periodiques' => 1, + 'id_article_periodique' => 0, + 'accents' => Class_IntProfilDonnees::ENCODING_UTF8, + 'type_fichier' => Class_IntProfilDonnees::FT_RECORDS, + 'format' => Class_IntProfilDonnees::FORMAT_SEMI_COLON_ASCII, + 'attributs' => [['type_doc' => [], + 'champ_cote' => ''], + [], + Class_IntProfilDonnees::FORMAT_SEMI_COLON_ASCII => ['champs' => 'code_barres']]]); + + $this->fixture('Class_IntBib', + ['id' => 2, + 'nom_court' => 'petit', + 'sigb' => 1]); + + + $this->fixture('Class_Cosmogramme_Integration', + ['id' => 2, + 'bib' => Class_IntBib::find(2), + 'profil_donnees' => Class_IntProfilDonnees::find(102), + 'type_operation' => Class_Cosmogramme_Integration::TYPE_OPERATION_ITEM_DELETE, + 'traite' => 'non', + 'fichier' => 'barcodes_deleted.txt', + 'pointeur_reprise' => 0]); + + $this->fixture('Class_Notice', + ['id' => 2, + 'clef_alpha' => 'TINTIN', + 'exemplaires' => [ + $this->fixture('Class_Exemplaire', + ['id' => 3, + 'id_int_bib' => 2, + 'code_barres' => 'P123']), + $this->fixture('Class_Exemplaire', + ['id' => 4, + 'id_int_bib' => 2, + 'code_barres' => 'X897']) + ] + ]); + } + + + /** @test */ + public function itemP123ShouldBeDeleted() { + Class_Exemplaire::clearCache(); + $this->assertNull(Class_Exemplaire::find(3)); + } + + + protected function _getPreviousPhase() { + return (new Class_Cosmogramme_Integration_Phase(1)) + ->beCron(); + } + + + /** @test */ + public function newPhaseShouldBe1Dot1() { + $this->assertTrue($this->_phase->isId(1.1)); + } + +} \ No newline at end of file diff --git a/tests/library/Class/Cosmogramme/Integration/PhaseNoticeOAITest.php b/tests/library/Class/Cosmogramme/Integration/PhaseNoticeOAITest.php new file mode 100644 index 0000000000000000000000000000000000000000..0a16898caa71ab60b413a6ee5569e4414d6b5430 --- /dev/null +++ b/tests/library/Class/Cosmogramme/Integration/PhaseNoticeOAITest.php @@ -0,0 +1,222 @@ +<?php +/** + * Copyright (c) 2012-2014, Agence Française Informatique (AFI). All rights reserved. + * + * BOKEH is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation. + * + * There are special exceptions to the terms and conditions of the AGPL as it + * is applied to this software (see README file). + * + * BOKEH is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with BOKEH; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +require_once('cosmogramme/php/fonctions/variables.php'); +require_once(__DIR__.'/PhaseNoticeTestCase.php'); + + + +abstract class PhaseNoticeOAITestCase extends PhaseNoticeTestCase { + protected function _prepareFixtures() { + parent::_prepareFixtures(); + Class_IntProfilDonnees::find(102) + ->setFormat(Class_IntProfilDonnees::FORMAT_UNIMARC_XML) + ->save(); + + Class_Cosmogramme_Integration::find(999) + ->setFichier('http://oai.sta/lavista?verb=ListRecords&metadataPrefix=marc21&set=SCD01') + ->save(); + + $xml = file_get_contents(__DIR__.'/oairesults.xml'); + $xml_page2 = file_get_contents(__DIR__.'/oairesults_page2.xml'); + $webclient = Storm_Test_ObjectWrapper::mock(); + $webclient->whenCalled('open_url') + ->with('http://oai.sta/lavista?verb=ListRecords&metadataPrefix=marc21&set=SCD01') + ->answers($xml) + ->whenCalled('open_url') + ->with('http://oai.sta/lavista?verb=ListRecords&resumptionToken=SCD01%40000505001000000008marc21') + ->answers($xml_page2) + ->beStrict(); + + Class_WebService_OAI::setDefaultHttpClient($webclient); + + + $this->fixture('Class_Notice', + ['id' => 1, + 'clef_alpha' => 'OLD_ONE', + 'exemplaires' => [ + $this->fixture('Class_Exemplaire', + ['id' => 1, + 'int_bib' => Class_IntBib::find(2), + 'code_barres' => '34567']) + ] + ]); + } + + + public function tearDown() { + Class_WebService_OAI::setDefaultHttpClient(null); + parent::tearDown(); + } +} + + + + +class PhaseNoticeOAITest extends PhaseNoticeOAITestCase { + public function _prepareFixtures() { + parent::_prepareFixtures(); + Class_IntProfilDonnees::find(102) + ->setBarCodeField('g') + ->setItemField('champ_url', ['zone' => '856', 'champ' => '4']) + ->save(); + } + + + /** @test */ + public function totalNumberOfRecordsFromOAIShouldBeFourteen() { + $this->assertEquals(14, Class_Notice::countBy([])); + } + + + /** @test */ + public function firstRecordTitleShouldBeSavoirsSecrets() { + $this->assertEquals('Savoirs secrets', + Class_Notice::find(2)->getTitrePrincipal()); + } + + + /** @test */ + public function sixthRecordTitleShouldContainsTrumanAndThe80th() { + $this->assertContains('Truman and the 80th', + Class_Notice::find(7)->getTitrePrincipal()); + } + + + /** @test */ + public function secondItemUrlShouldBeSudoc() { + $this->assertEquals('http://www.sudoc.fr/003498263', + Class_Exemplaire::find(2)->getUrl()); + } + + + /** @test */ + public function firstRecordTypeShouldBeBook() { + $this->assertEquals(Class_TypeDoc::LIVRE, + Class_Notice::find(2)->getTypeDoc()); + } + + /** @test */ + public function fifthRecordTypeShouldBeSerial() { + $this->assertEquals(Class_TypeDoc::PERIODIQUE, + Class_Notice::find(6)->getTypeDoc()); + } + + /** @test */ + public function oldItemShouldHaveBeenDeleted() { + $this->assertEmpty(Class_Notice::find(1)->getExemplaires()); + } + + + /** @test */ + public function logShouldNotContainsAucunFichier() { + $this->assertNotLogContains('aucun fichier traité'); + } +} + + + + +class PhaseNoticeOAIWithBarcodeOnFieldGTest extends PhaseNoticeOAITestCase { + protected function _prepareFixtures() { + parent::_prepareFixtures(); + Class_IntProfilDonnees::find(102) + ->setBarCodeField('g') + ->setItemField('champ_url', ['zone' => '003', 'champ' => '']) + ->save(); + } + + /** @test */ + public function totalNumberOfRecordsFromOAIShouldBeFourteen() { + $this->assertEquals(14, Class_Notice::countBy([])); + } + + + /** @test */ + public function firstNoticeItemZone995ShouldContainsPPN05884144X_InSubfieldG() { + $this->assertEquals('PPN05884144X', Class_Exemplaire::find(1)->getSubfield('g')); + } + + + /** @test */ + public function itemURLShouldBeSudocDotFr() { + $this->assertEquals('http://www.sudoc.fr/05884144X', + Class_Exemplaire::find(1)->getUrl()); + } +} + + + + +class PhaseNoticeOAIPartialImportTest extends PhaseNoticeOAITestCase { + protected function _prepareFixtures() { + parent::_prepareFixtures(); + + Class_Cosmogramme_Integration::find(999)->beIncrementImport()->save(); + $this->fixture('Class_Cosmogramme_Integration', + ['id' => 998, + 'bib' => Class_IntBib::find(2), + 'profil_donnees' => Class_IntProfilDonnees::find(102), + 'type_operation' => Class_Cosmogramme_Integration::TYPE_OPERATION_TOTAL, + 'traite' => 'oui', + 'date_transfert' => '2014-04-13', + 'fichier' => 'http://oai.sta/lavista?verb=ListRecords&metadataPrefix=marc21&set=SCD01', + 'pointeur_reprise' => 0]); + + $webclient = Storm_Test_ObjectWrapper::mock(); + $webclient->whenCalled('open_url') + ->with('http://oai.sta/lavista?verb=ListRecords&metadataPrefix=marc21&set=SCD01&dateFrom=2014-04-13') + ->answers(file_get_contents(__DIR__.'/oairesults_page2.xml')) + ->beStrict(); + Class_WebService_OAI::setDefaultHttpClient($webclient); + } + + + /** @test */ + public function totalNumberOfRecordsFromOAIShouldBeHeight() { + $this->assertEquals(8, Class_Notice::countBy([])); + } + + + /** @test */ + public function oldItemsShouldNotHaveBeenDeleted() { + $this->assertNotEmpty(Class_Notice::find(1)->getExemplaires()); + } + +} + + + +class PhaseNoticeOAIFullImportRepriseTest extends PhaseNoticeOAITestCase { + protected function _prepareFixtures() { + parent::_prepareFixtures(); + Class_Cosmogramme_Integration::find(999) + ->setPointeurReprise('SCD01@000505001000000008marc21-2'); + } + + + /** @test */ + public function totalNumberOfRecordsFromOAIShouldBeSix() { + $this->assertEquals(6, Class_Notice::countBy([])); + } +} + +?> \ No newline at end of file diff --git a/tests/library/Class/Cosmogramme/Integration/PhaseNoticeTest.php b/tests/library/Class/Cosmogramme/Integration/PhaseNoticeTest.php new file mode 100644 index 0000000000000000000000000000000000000000..44b7d12fa0d9a43c1c7efac4937429fb3da5aadb --- /dev/null +++ b/tests/library/Class/Cosmogramme/Integration/PhaseNoticeTest.php @@ -0,0 +1,74 @@ +<?php +/** + * Copyright (c) 2012-2014, Agence Française Informatique (AFI). All rights reserved. + * + * BOKEH is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation. + * + * There are special exceptions to the terms and conditions of the AGPL as it + * is applied to this software (see README file). + * + * BOKEH is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with BOKEH; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +require_once('cosmogramme/php/fonctions/variables.php'); +require_once(__DIR__.'/PhaseNoticeTestCase.php'); + +class PhaseNoticeImportTest extends PhaseNoticeTestCase { + protected function _prepareFixtures() { + parent::_prepareFixtures(); + $this->fixture('Class_CosmoVar', + ['id' => 'mode_doublon', + 'valeur' => Class_CosmoVar::DOUBLE_SEARCH_ALPHA_KEY]); + Class_Cosmogramme_Integration::find(999)->setFichier('records.txt')->save(); + } + + + /** @test */ + public function totalNumberOfRecordsShouldBe109() { + $this->assertEquals(109, Class_Notice::countBy([])); + } + + + /** @test */ + public function totalNumberOfItemsShouldBe109() { + $this->assertEquals(109, Class_Exemplaire::countBy([])); + } + + + /** @test */ + public function newPhaseShouldBe0() { + $this->assertTrue($this->_phase->isId(0)); + } +} + + +class PhaseNoticeImportWithResumptionPointerTest extends PhaseNoticeTestCase { + protected function _prepareFixtures() { + parent::_prepareFixtures(); + $this->fixture('Class_CosmoVar', + ['id' => 'mode_doublon', + 'valeur' => Class_CosmoVar::DOUBLE_SEARCH_ALPHA_KEY]); + + // 2389 resumption pointer skip the firts two records. + Class_Cosmogramme_Integration::find(999)->setFichier('records.txt') + ->setPointeurReprise(2389) + ->save(); + } + + + /** @test */ + public function totalNumberOfRecordsShouldBe107() { + $this->assertEquals(107, Class_Notice::countBy([])); + } +} + +?> \ No newline at end of file diff --git a/tests/library/Class/Cosmogramme/Integration/PhaseNoticeTestCase.php b/tests/library/Class/Cosmogramme/Integration/PhaseNoticeTestCase.php new file mode 100644 index 0000000000000000000000000000000000000000..ba0bb548774d87cb03e61ab4b6f3111307fb3d59 --- /dev/null +++ b/tests/library/Class/Cosmogramme/Integration/PhaseNoticeTestCase.php @@ -0,0 +1,100 @@ +<?php +/** + * Copyright (c) 2012-2014, Agence Française Informatique (AFI). All rights reserved. + * + * BOKEH is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation. + * + * There are special exceptions to the terms and conditions of the AGPL as it + * is applied to this software (see README file). + * + * BOKEH is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with BOKEH; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +require_once('cosmogramme/php/fonctions/variables.php'); + +class PhaseNoticeTestCase extends Class_Cosmogramme_Integration_PhaseTestCase { + protected $_phase; + + public function setUp() { + parent::setUp(); + + $this->_phase = $this->_buildPhase('Notice')->run(); + Class_Notice::clearCache(); + Class_Exemplaire::clearCache(); + } + + + protected function _prepareFixtures() { + $this->fixture('Class_IntProfilDonnees', + ['id' => 102, + 'libelle' => 'Unimarc Pergame', + 'accents' => Class_IntProfilDonnees::ENCODING_WINDOWS_ANSI, + 'rejet_periodiques' => 1, + 'id_article_periodique' => Class_IntProfilDonnees::SERIAL_FORMAT_PERGAME, + 'type_fichier' => Class_IntProfilDonnees::FT_RECORDS, + 'format' => Class_IntProfilDonnees::FORMAT_UNIMARC, + 'attributs' => [ + 0 => ['type_doc' => [ + [ 'code' => '0', 'label' => '', 'zone_995' => ''], + [ 'code' => '1', 'label' => 'am', 'zone_995' => ''], + [ 'code' => '2', 'label' => 'as', 'zone_995' => ''], + [ 'code' => '3', 'label' => 'je', 'zone_995' => ''], + [ 'code' => '4', 'label' => 'gd', 'zone_995' => ''], + [ 'code' => '5', 'label' => 'le', 'zone_995' => ''], + [ 'code' => '6', 'label' => '', 'zone_995' => ''], + [ 'code' => '7', 'label' => '', 'zone_995' => ''], + [ 'code' => '8', 'label' => '', 'zone_995' => ''], + [ 'code' => '9', 'label' => '', 'zone_995' => ''], + [ 'code' => '10', 'label' => ' ', 'zone_995' => ''] + ], + 'champ_code_barres' => 'f', + 'champ_cote' => 'k', + 'champ_type_doc' => '', + 'champ_genre' => '', + 'champ_section' => 'q', + 'champ_emplacement' => '6', + 'champ_annexe' => '8' + ], + 4 => ['zone' => '995', + 'champ' => '4', + 'format' => Class_IntProfilDonnees::NOVELTY_DATE_FORMAT_AAAA_MM_JJ, + 'jours' => '90', + 'valeurs' => ''], + 6 => ['zone' => '', + 'champ' => ''] + ] + ] + ); + + + $this->fixture('Class_IntBib', + ['id' => 2, + 'nom_court' => 'UPEC', + 'sigb' => 1]); + + + $this->fixture('Class_Cosmogramme_Integration', + ['id' => 999, + 'bib' => Class_IntBib::find(2), + 'profil_donnees' => Class_IntProfilDonnees::find(102), + 'type_operation' => Class_Cosmogramme_Integration::TYPE_OPERATION_TOTAL, + 'traite' => 'non', + 'fichier' => 'records.txt', + 'pointeur_reprise' => 0]); + } + + + protected function _getPreviousPhase() { + return (new Class_Cosmogramme_Integration_Phase(-1)) + ->beCron(); + } +} diff --git a/tests/library/Class/Cosmogramme/Integration/PhasePanierTest.php b/tests/library/Class/Cosmogramme/Integration/PhasePanierTest.php index 66960529113125c0c4db785f161031815320cc10..cd043db8020097beb0e8610fecd1536ee0896c3b 100644 --- a/tests/library/Class/Cosmogramme/Integration/PhasePanierTest.php +++ b/tests/library/Class/Cosmogramme/Integration/PhasePanierTest.php @@ -32,22 +32,6 @@ abstract class PhasePanierTestCase extends Class_Cosmogramme_Integration_PhaseTe public function _prepareFixtures() { - $this->fixture('Class_CosmoVar', - ['id' => 'traitement_phase', 'valeur' => 'Base bloquée']); - - $this->fixture('Class_CosmoVar', - ['id' => 'integration_path', 'valeur' => realpath(dirname(__FILE__)) . '/']); - - - $this->fixture('Class_CosmoVar', ['id' => 'import_type_operation', 'liste' => '']); - Class_CosmoVar::addLabelInList('import_type_operation', - Class_Cosmogramme_Integration::TYPE_OPERATION_TOTAL, - 'Import total'); - - Class_CosmoVar::addLabelInList('import_type_operation', - Class_Cosmogramme_Integration::TYPE_OPERATION_INCREMENT, - 'Import incrémentiel'); - $this->fixture('Class_CosmoVar', ['id' => 'import_format', 'liste' => '']); Class_CosmoVar::addLabelInList('import_format', Class_IntProfilDonnees::FORMAT_CSV, diff --git a/tests/library/Class/Cosmogramme/Integration/PhasePrepareIntegrationsTest.php b/tests/library/Class/Cosmogramme/Integration/PhasePrepareIntegrationsTest.php new file mode 100644 index 0000000000000000000000000000000000000000..7a79b3047bcdfd7ae81fec8001acb7be3b1d0aa1 --- /dev/null +++ b/tests/library/Class/Cosmogramme/Integration/PhasePrepareIntegrationsTest.php @@ -0,0 +1,207 @@ +<?php +/** + * Copyright (c) 2012-2014, Agence Française Informatique (AFI). All rights reserved. + * + * BOKEH is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation. + * + * There are special exceptions to the terms and conditions of the AGPL as it + * is applied to this software (see README file). + * + * BOKEH is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with BOKEH; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + +abstract class PhasePrepareIntegrationsWithOAITestCase extends Class_Cosmogramme_Integration_PhaseTestCase { + public function setUp() { + parent::setUp(); + + $file_system = Storm_Test_ObjectWrapper::mock(); + $file_system + ->whenCalled('is_file') + ->with ('ftp/my-library.net/transferts/foo/mylibrarytotal.txt') + ->answers(true) + ->whenCalled('is_file') + ->with ('ftp/my-library.net/transferts/foo/mylibraryincr.txt') + ->answers(false) + ->whenCalled('rename') + ->with('ftp/my-library.net/transferts/foo/mylibrarytotal.txt', + 'ftp/my-library.net/integration/integre1179.pan') + ->answers(true) + ->beStrict(); + + Class_Cosmogramme_Integration_PhasePrepareIntegrations::setFileSystem($file_system); + + $this->_phase = $this->_buildPhase('PrepareIntegrations')->run(); + } + + + protected function _prepareFixtures() { + $this->fixture('Class_CosmoVar', + ['id' => 'ID_upload', 'valeur' => 1178]); + + $this->fixture('Class_CosmoVar', + ['id' => 'integration_path', 'valeur' => 'ftp/my-library.net/integration/']); + + $this->fixture('Class_CosmoVar', + ['id' => 'ftp_path', 'valeur' => 'ftp/my-library.net/transferts/']); + + $this->fixture('Class_IntProfilDonnees', + ['id' => 102, + 'libelle' => 'Unimarc Pergame', + 'accents' => Class_IntProfilDonnees::ENCODING_WINDOWS_ANSI, + 'rejet_periodiques' => 1, + 'id_article_periodique' => Class_IntProfilDonnees::SERIAL_FORMAT_PERGAME, + 'type_fichier' => Class_IntProfilDonnees::FT_RECORDS, + 'format' => Class_IntProfilDonnees::FORMAT_UNIMARC, + 'attributs' => [] + ] + ); + + $this->fixture('Class_IntProfilDonnees', + ['id' => 103, + 'libelle' => 'OAI', + 'accents' => Class_IntProfilDonnees::ENCODING_WINDOWS_ANSI, + 'rejet_periodiques' => 1, + 'id_article_periodique' => Class_IntProfilDonnees::SERIAL_FORMAT_PERGAME, + 'type_fichier' => Class_IntProfilDonnees::FT_RECORDS, + 'format' => Class_IntProfilDonnees::FORMAT_UNIMARC_XML, + 'attributs' => [] + ] + ); + + $this->fixture('Class_IntBib', ['id' => 2, + 'nom_court' => 'My library', + 'sigb' => 1]); + + $this->fixture('Class_IntMajAuto', ['id' => 100, + 'id_prog' => 100, + 'id_bib' => 2, + 'libelle' => 'Notices - import total', + 'profil' => 102, + 'type_operation' => 2, + 'type_doc' => 0, + 'nom_fichier' => 'foo/mylibrarytotal.txt', + 'rang' => 100, + 'taille_min_import_total' => 0]); + + $this->fixture('Class_IntMajAuto', ['id' => 101, + 'id_prog' => 101, + 'id_bib' => 2, + 'libelle' => 'Notices - import incrémentiel', + 'profil' => 102, + 'type_operation' => 0, + 'type_doc' => 0, + 'nom_fichier' => 'foo/mylibraryincr.txt', + 'rang' => 101, + 'taille_min_import_total' => 0]); + + $this->fixture('Class_IntMajAuto', ['id' => 102, + 'id_prog' => 102, + 'id_bib' => 2, + 'libelle' => 'Notices OAI total', + 'profil' => 103, + 'type_operation' => 0, + 'type_doc' => 0, + 'nom_fichier' => 'http://oai-repository.fr/oai', + 'rang' => 102, + 'taille_min_import_total' => 0]); + + $this->fixture('Class_Cosmogramme_Integration', + ['id' => 1, + 'id_bib' => 2, + 'type_operation' => Class_Cosmogramme_Integration::TYPE_OPERATION_TOTAL, + 'profil' => 103, + 'traite' => 'oui', + 'fichier' => 'http://oai-repository.fr/oai', + 'pointeur_reprise' => 'SCD01@000195008000000979marc21-18]']); + } + + + + + protected function _getPreviousPhase() { + return (new Class_Cosmogramme_Integration_Phase(0)) + ->beCron(); + } +} + + + + +class PhasePrepareIntegrationsWithOAITest extends PhasePrepareIntegrationsWithOAITestCase { + /** @test */ + public function twoIntegrationsShouldHaveBeenCreated() { + $this->assertEquals(3, count(Class_Cosmogramme_Integration::findAll())); + } + + + /** @test */ + public function firstIntegrationURIShouldBeIntegre1179DotPan() { + $this->assertEquals('integre1179.pan', Class_Cosmogramme_Integration::find(2)->getFichier()); + } + + + /** @test */ + public function secondIntegrationURIShouldBeOAIRepository() { + $this->assertEquals('http://oai-repository.fr/oai', Class_Cosmogramme_Integration::find(3)->getFichier()); + } + + + /** @test */ + public function logShouldContainsPhaseLabel() { + $this->assertLogContains('<h4>Déplacement des intégrations en file d\'attente</h4>'); + } + + + /** + * @expectedException Class_Cosmogramme_Integration_PhasePrepareIntegrationsException + * @expectedExceptionMessage La variable ftp_path n'est pas définie + * @test + */ + public function withoutFTPPathShouldThrowException() { + Class_CosmoVar::setValueOf('ftp_path', ''); + $this->_phase = $this->_buildPhase('PrepareIntegrations')->run(); + } + + + /** + * @expectedException Class_Cosmogramme_Integration_PhasePrepareIntegrationsException + * @expectedExceptionMessage La variable integration_path n'est pas définie + * @test + */ + public function withoutIntegrationPathShouldThrowException() { + Class_CosmoVar::setValueOf('integration_path', ''); + $this->_phase = $this->_buildPhase('PrepareIntegrations')->run(); + } +} + + + +class PhasePrepareIntegrationsWithOAIIntegrationAlreadyRegisteredTest extends PhasePrepareIntegrationsWithOAITestCase { + protected function _prepareFixtures() { + parent::_prepareFixtures(); + $this->fixture('Class_Cosmogramme_Integration', + ['id' => 2, + 'id_bib' => 2, + 'type_operation' => Class_Cosmogramme_Integration::TYPE_OPERATION_TOTAL, + 'profil' => 103, + 'traite' => 'non', + 'fichier' => 'http://oai-repository.fr/oai', + 'pointeur_reprise' => 'SCD01@000195008000000979marc21-18]']); + } + + + /** @test */ + public function oneIntegrationShouldHaveBeenCreated() { + $this->assertEquals(3, count(Class_Cosmogramme_Integration::findAll())); + } +} diff --git a/tests/library/Class/Cosmogramme/Integration/PhaseReservationTest.php b/tests/library/Class/Cosmogramme/Integration/PhaseReservationTest.php index a8c0511ce1d782463dea3bfbd9064c52efd0dd00..8960d4e5374ebc6bc3c4154354cba377dc7a2681 100644 --- a/tests/library/Class/Cosmogramme/Integration/PhaseReservationTest.php +++ b/tests/library/Class/Cosmogramme/Integration/PhaseReservationTest.php @@ -32,18 +32,6 @@ abstract class PhaseReservationTestCase extends Class_Cosmogramme_Integration_Ph protected function _prepareFixtures() { - $this->fixture('Class_CosmoVar', - ['id' => 'traitement_phase', 'valeur' => 'Base bloquée']); - - $this->fixture('Class_CosmoVar', - ['id' => 'integration_path', 'valeur' => realpath(dirname(__FILE__)) . '/']); - - - $this->fixture('Class_CosmoVar', ['id' => 'import_type_operation', 'liste' => '']); - Class_CosmoVar::addLabelInList('import_type_operation', - Class_Cosmogramme_Integration::TYPE_OPERATION_TOTAL, - 'Import total'); - $this->fixture('Class_CosmoVar', ['id' => 'import_format', 'liste' => '']); Class_CosmoVar::addLabelInList('import_format', 3, 'Ascii séparé par des "|"'); @@ -301,4 +289,11 @@ class PhaseReservationValidCronFirstRunTest extends PhaseReservationTestCase { public function firstHoldDateShouldBeFebruary032015($hold) { $this->assertEquals('2015-02-03', $hold->getDateResa()); } + + + /** @test */ + public function holdRangShouldBe7() { + $hold = Class_Reservation::findFirstBy(['id_pergame' =>26831]); + $this->assertEquals('7', $hold->getRang()); + } } diff --git a/tests/library/Class/Cosmogramme/Integration/PhaseTestCase.php b/tests/library/Class/Cosmogramme/Integration/PhaseTestCase.php index d9d4320eaff3b6e0a488127b2302d287b55b0b7a..a55d980fffe006c1c95a902ccce60f216b8c9360 100644 --- a/tests/library/Class/Cosmogramme/Integration/PhaseTestCase.php +++ b/tests/library/Class/Cosmogramme/Integration/PhaseTestCase.php @@ -40,6 +40,21 @@ abstract class Class_Cosmogramme_Integration_PhaseTestCase extends ModelTestCase ->whenCalled('nextPutAll') ->willDo(function($content) { $this->_printer_content .= $content; }); + $this->fixture('Class_CosmoVar', + ['id' => 'traitement_phase', 'valeur' => 'Base bloquée']); + + $this->fixture('Class_CosmoVar', + ['id' => 'integration_path', 'valeur' => realpath(dirname(__FILE__)) . '/']); + + + $this->fixture('Class_CosmoVar', ['id' => 'import_type_operation', 'liste' => '']); + Class_CosmoVar::addLabelInList('import_type_operation', + Class_Cosmogramme_Integration::TYPE_OPERATION_TOTAL, + 'Import total'); + + Class_CosmoVar::addLabelInList('import_type_operation', + Class_Cosmogramme_Integration::TYPE_OPERATION_INCREMENT, + 'Import incrémentiel'); $this->_prepareFixtures(); } @@ -61,6 +76,11 @@ abstract class Class_Cosmogramme_Integration_PhaseTestCase extends ModelTestCase $this->assertContains($value, $this->_log_content); } + + protected function assertNotLogContains($value) { + $this->assertNotContains($value, $this->_log_content); + } + protected function _getPreviousPhase() { return null; } diff --git a/tests/library/Class/Cosmogramme/Integration/barcodes_deleted.txt b/tests/library/Class/Cosmogramme/Integration/barcodes_deleted.txt new file mode 100644 index 0000000000000000000000000000000000000000..ef8d1047485cf73d7209b459949db64ff804cba5 --- /dev/null +++ b/tests/library/Class/Cosmogramme/Integration/barcodes_deleted.txt @@ -0,0 +1 @@ +P123 diff --git a/tests/library/Class/Cosmogramme/Integration/oairesults.xml b/tests/library/Class/Cosmogramme/Integration/oairesults.xml new file mode 100644 index 0000000000000000000000000000000000000000..165f7b09ab2d66744d23a7bee2c74572003085ce --- /dev/null +++ b/tests/library/Class/Cosmogramme/Integration/oairesults.xml @@ -0,0 +1,1223 @@ +<?xml version="1.0" encoding="utf-8"?> +<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" +xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" +xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> + + <responseDate>2015-05-28T15:05:19Z</responseDate> + <request verb="ListRecords" from="2014-07-12" until="2014-07-20" + metadataPrefix="marc21"> + http://armada2.u-pec.fr/OAI-script</request> + <ListRecords> + <record> + <header> + <identifier>SCD01-151148</identifier> + <datestamp>2014-07-14</datestamp> + <setSpec>SCD01</setSpec> + </header> + <metadata> + <marc:record xmlns:marc="http://www.loc.gov/MARC21/slim" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"> + + <marc:leader>cam0 2200445 450</marc:leader> + <marc:controlfield tag="001"> + PPN05884144X</marc:controlfield> + <marc:controlfield tag="005"> + 20140711163420.000</marc:controlfield> + <marc:datafield tag="010" ind1="" ind2=""> + <marc:subfield code="a">2-0204-9604-6</marc:subfield> + <marc:subfield code="b">rel.</marc:subfield> + <marc:subfield code="d">69 EUR</marc:subfield> + </marc:datafield> + <marc:datafield tag="010" ind1="" ind2=""> + <marc:subfield code="a">2-02-049604-6</marc:subfield> + <marc:subfield code="b">rel</marc:subfield> + <marc:subfield code="d">69 EUR : 452,61 + F</marc:subfield> + </marc:datafield> + <marc:datafield tag="020" ind1="" ind2=""> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">00152558</marc:subfield> + </marc:datafield> + <marc:datafield tag="021" ind1="" ind2=""> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">DL 01-45911 + (D4)</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a"> + (OCoLC)154659530</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">frBN026916712</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">CRE0151148</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">50924</marc:subfield> + </marc:datafield> + <marc:datafield tag="073" ind1="" ind2="0"> + <marc:subfield code="a">9782020496049</marc:subfield> + </marc:datafield> + <marc:datafield tag="100" ind1="" ind2=""> + <marc:subfield code="a"> + 20011109d2001----m--y0frey50------ba</marc:subfield> + </marc:datafield> + <marc:datafield tag="101" ind1="1" ind2=""> + <marc:subfield code="a">fre</marc:subfield> + <marc:subfield code="c">eng</marc:subfield> + </marc:datafield> + <marc:datafield tag="102" ind1="" ind2=""> + <marc:subfield code="a">FR</marc:subfield> + </marc:datafield> + <marc:datafield tag="105" ind1="" ind2=""> + <marc:subfield code="a">a---z---001yd</marc:subfield> + </marc:datafield> + <marc:datafield tag="106" ind1="" ind2=""> + <marc:subfield code="a">r</marc:subfield> + </marc:datafield> + <marc:datafield tag="200" ind1="1" ind2=""> + <marc:subfield code="a">Savoirs secrets</marc:subfield> + <marc:subfield code="b">Texte imprimé</marc:subfield> + <marc:subfield code="e">les techniques perdues des + maîtres anciens</marc:subfield> + <marc:subfield code="f">David Hockney</marc:subfield> + <marc:subfield code="g">trad.de l'anglais par Pierre + Saint-Jean</marc:subfield> + </marc:datafield> + <marc:datafield tag="210" ind1="" ind2=""> + <marc:subfield code="a">Paris</marc:subfield> + <marc:subfield code="c">Seuil</marc:subfield> + <marc:subfield code="d">2001</marc:subfield> + </marc:datafield> + <marc:datafield tag="215" ind1="" ind2=""> + <marc:subfield code="a">1 vol. (296 p. dont 2 + dépl.)</marc:subfield> + <marc:subfield code="c">ill. en noir et en coul.; + jaquette ill.</marc:subfield> + <marc:subfield code="d">30 cm</marc:subfield> + </marc:datafield> + <marc:datafield tag="320" ind1="" ind2=""> + <marc:subfield code="a">Bibliogr. p. 287-288. + Index</marc:subfield> + </marc:datafield> + <marc:datafield tag="330" ind1="" ind2=""> + <marc:subfield code="a">Le peintre D. Hockney s'attache + ici à mettre au jour les techniques picturales de + peintres tels que Caravage, Vélasquez, Van Eyck, + Holbein, de Vinci et Ingres, consistant par exemple à + utiliser miroirs et lentilles dans la création + artistique.</marc:subfield> + </marc:datafield> + <marc:datafield tag="345" ind1="" ind2=""> + <marc:subfield code="b">9782020496049</marc:subfield> + </marc:datafield> + <marc:datafield tag="454" ind1="" ind2="1"> + <marc:subfield code="t">Secret + knowledge</marc:subfield> + </marc:datafield> + <marc:datafield tag="600" ind1="" ind2="1"> + <marc:subfield code="3">PPN026923068</marc:subfield> + <marc:subfield code="a">Hockney</marc:subfield> + <marc:subfield code="b">David</marc:subfield> + <marc:subfield code="f">1937-....</marc:subfield> + <marc:subfield code="3">PPN031863892</marc:subfield> + <marc:subfield code="x">Oeuvres</marc:subfield> + <marc:subfield code="x">Écrits</marc:subfield> + <marc:subfield code="2">rameau</marc:subfield> + </marc:datafield> + <marc:datafield tag="606" ind1="" ind2=""> + <marc:subfield code="3">PPN027230643</marc:subfield> + <marc:subfield code="a">Composition + (art)</marc:subfield> + <marc:subfield code="2">rameau</marc:subfield> + </marc:datafield> + <marc:datafield tag="606" ind1="" ind2=""> + <marc:subfield code="3">PPN027246221</marc:subfield> + <marc:subfield code="a">Peinture</marc:subfield> + <marc:subfield code="x">Technique</marc:subfield> + <marc:subfield code="3">PPN02726470X</marc:subfield> + <marc:subfield code="x">Histoire</marc:subfield> + <marc:subfield code="2">rameau</marc:subfield> + </marc:datafield> + <marc:datafield tag="700" ind1="" ind2="1"> + <marc:subfield code="3">PPN026923068</marc:subfield> + <marc:subfield code="a">Hockney</marc:subfield> + <marc:subfield code="b">David</marc:subfield> + <marc:subfield code="f">1937-....</marc:subfield> + <marc:subfield code="4">070</marc:subfield> + </marc:datafield> + <marc:datafield tag="702" ind1="" ind2="1"> + <marc:subfield code="3">PPN029640113</marc:subfield> + <marc:subfield code="a">Saint-Jean</marc:subfield> + <marc:subfield code="b">Pierre</marc:subfield> + <marc:subfield code="4">730</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="3"> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">Abes</marc:subfield> + <marc:subfield code="c">20140711</marc:subfield> + <marc:subfield code="g">AFNOR</marc:subfield> + </marc:datafield> + <marc:controlfield tag="003" ind1="" ind2=""> http://www.sudoc.fr/05884144X</marc:controlfield> + </marc:record> + </metadata> + </record> + <record> + <header> + <identifier>SCD01-104517</identifier> + <datestamp>2014-07-14</datestamp> + <setSpec>SCD01</setSpec> + </header> + <metadata> + <marc:record xmlns:marc="http://www.loc.gov/MARC21/slim" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"> + + <marc:leader>cam2 2200841 450</marc:leader> + <marc:controlfield tag="001"> + PPN003498263</marc:controlfield> + <marc:controlfield tag="005"> + 20140711113847.000</marc:controlfield> + <marc:datafield tag="010" ind1="" ind2=""> + <marc:subfield code="a"> + 978-2-253-90707-7</marc:subfield> + <marc:subfield code="b">br.</marc:subfield> + <marc:subfield code="d">11€</marc:subfield> + </marc:datafield> + <marc:datafield tag="010" ind1="" ind2=""> + <marc:subfield code="a">2-253-90707-3</marc:subfield> + <marc:subfield code="b">br.</marc:subfield> + <marc:subfield code="d">70 F</marc:subfield> + </marc:datafield> + <marc:datafield tag="020" ind1="" ind2=""> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">09511869</marc:subfield> + </marc:datafield> + <marc:datafield tag="021" ind1="" ind2=""> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">DL 94-46368</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">011717998</marc:subfield> + <marc:subfield code="9">sudoc</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">024674826</marc:subfield> + <marc:subfield code="9">sudoc</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">024146617</marc:subfield> + <marc:subfield code="9">sudoc</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">061242772</marc:subfield> + <marc:subfield code="9">sudoc</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">071649980</marc:subfield> + <marc:subfield code="9">sudoc</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">047755164</marc:subfield> + <marc:subfield code="9">sudoc</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">086747177</marc:subfield> + <marc:subfield code="9">sudoc</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a"> + (OCoLC)417235032</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a"> + DYNIX_BUPF_21145</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">sib0620884</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">ocm33828443</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">ocm32810370</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">ubs30378</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">ocm36537761</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a"> + DYNIX_BUFDF_108286</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">Evry18710</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a"> + DYNIX_BUNAN_377984</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">lm82888</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">frBN01877698X</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">sib1447633</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">urouen84795</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">ALP0104517</marc:subfield> + </marc:datafield> + <marc:datafield tag="073" ind1="" ind2="1"> + <marc:subfield code="a">9782253907077</marc:subfield> + </marc:datafield> + <marc:datafield tag="100" ind1="" ind2=""> + <marc:subfield code="a"> + 19950316d1994----k--y0frey50------ba</marc:subfield> + </marc:datafield> + <marc:datafield tag="101" ind1="0" ind2=""> + <marc:subfield code="a">frm</marc:subfield> + </marc:datafield> + <marc:datafield tag="102" ind1="" ind2=""> + <marc:subfield code="a">FR</marc:subfield> + </marc:datafield> + <marc:datafield tag="105" ind1="" ind2=""> + <marc:subfield code="a">y---z---000yd</marc:subfield> + </marc:datafield> + <marc:datafield tag="106" ind1="" ind2=""> + <marc:subfield code="a">r</marc:subfield> + </marc:datafield> + <marc:datafield tag="200" ind1="1" ind2=""> + <marc:subfield code="a">Histoire d'un voyage faict en + la terre du Bresil (1578)</marc:subfield> + <marc:subfield code="b">Texte imprimé</marc:subfield> + <marc:subfield code="f">Jean de Léry</marc:subfield> + <marc:subfield code="g">texte établi, présenté et + annoté par Frank Lestringant</marc:subfield> + <marc:subfield code="g">précédé d'un entretien avec + Claude Lévi-Strauss</marc:subfield> + </marc:datafield> + <marc:datafield tag="205" ind1="" ind2=""> + <marc:subfield code="a">2e éd.</marc:subfield> + </marc:datafield> + <marc:datafield tag="210" ind1="" ind2=""> + <marc:subfield code="a">Paris</marc:subfield> + <marc:subfield code="c">Librairie générale + française</marc:subfield> + <marc:subfield code="d">1994</marc:subfield> + <marc:subfield code="e">72-La Flèche</marc:subfield> + <marc:subfield code="g">Impr. Brodard et + Taupin</marc:subfield> + </marc:datafield> + <marc:datafield tag="215" ind1="" ind2=""> + <marc:subfield code="a">1 vol. (670 p.)</marc:subfield> + <marc:subfield code="c">couv. ill. en + coul.</marc:subfield> + <marc:subfield code="d">18 cm</marc:subfield> + </marc:datafield> + <marc:datafield tag="225" ind1="0" ind2=""> + <marc:subfield code="a">Bibliothèque + classique</marc:subfield> + </marc:datafield> + <marc:datafield tag="305" ind1="" ind2=""> + <marc:subfield code="a">Autres tirages : 1999, 2004, + 2007, 2008, 2013</marc:subfield> + </marc:datafield> + <marc:datafield tag="305" ind1="" ind2=""> + <marc:subfield code="a">Publié à l'origine à : A. + Chuppin, 1580</marc:subfield> + </marc:datafield> + <marc:datafield tag="308" ind1="" ind2=""> + <marc:subfield code="a">Coll. principale : "Le Livre de + poche" ; 707</marc:subfield> + </marc:datafield> + <marc:datafield tag="320" ind1="" ind2=""> + <marc:subfield code="a">Bibliogr. p. [631]-649. + Chronologie. Glossaire</marc:subfield> + </marc:datafield> + <marc:datafield tag="410" ind1="" ind2="1"> + <marc:subfield code="1">001PPN040211045</marc:subfield> + <marc:subfield code="t">Bibliothèque classique + (Paris)</marc:subfield> + <marc:subfield code="x">1251-5930</marc:subfield> + </marc:datafield> + <marc:datafield tag="410" ind1="" ind2="1"> + <marc:subfield code="1">001PPN00101790X</marc:subfield> + <marc:subfield code="t"><<Le >>Livre de + poche</marc:subfield> + <marc:subfield code="x">0248-3653</marc:subfield> + <marc:subfield code="v">707</marc:subfield> + </marc:datafield> + <marc:datafield tag="512" ind1="1" ind2=""> + <marc:subfield code="a">Histoire d'un voyage en terre + de Brésil</marc:subfield> + </marc:datafield> + <marc:datafield tag="600" ind1="" ind2="1"> + <marc:subfield code="3">PPN02698573X</marc:subfield> + <marc:subfield code="a">Léry</marc:subfield> + <marc:subfield code="b">Jean de</marc:subfield> + <marc:subfield code="f">1536?-1613?</marc:subfield> + <marc:subfield code="2">rameau</marc:subfield> + </marc:datafield> + <marc:datafield tag="600" ind1="" ind2="1"> + <marc:subfield code="3">PPN028182219</marc:subfield> + <marc:subfield code="a">Villegagnon</marc:subfield> + <marc:subfield code="b">Nicolas Durand</marc:subfield> + <marc:subfield code="f">1510-1571</marc:subfield> + <marc:subfield code="c">chevalier de</marc:subfield> + <marc:subfield code="2">rameau</marc:subfield> + </marc:datafield> + <marc:datafield tag="606" ind1="" ind2=""> + <marc:subfield code="3">PPN027325172</marc:subfield> + <marc:subfield code="a">Indiens + d'Amérique</marc:subfield> + <marc:subfield code="3">PPN02722953X</marc:subfield> + <marc:subfield code="y">Brésil</marc:subfield> + <marc:subfield code="3">PPN027239640</marc:subfield> + <marc:subfield code="x">Moeurs et + coutumes</marc:subfield> + <marc:subfield code="3">PPN027794520</marc:subfield> + <marc:subfield code="z">16e siècle</marc:subfield> + <marc:subfield code="2">rameau</marc:subfield> + </marc:datafield> + <marc:datafield tag="606" ind1="" ind2=""> + <marc:subfield code="3">PPN02767259X</marc:subfield> + <marc:subfield code="a">Récits de voyages + français</marc:subfield> + <marc:subfield code="3">PPN027794520</marc:subfield> + <marc:subfield code="z">16e siècle</marc:subfield> + <marc:subfield code="2">rameau</marc:subfield> + </marc:datafield> + <marc:datafield tag="607" ind1="" ind2=""> + <marc:subfield code="3">PPN02722953X</marc:subfield> + <marc:subfield code="a">Brésil</marc:subfield> + <marc:subfield code="3">PPN027652920</marc:subfield> + <marc:subfield code="x">Descriptions et + voyages</marc:subfield> + <marc:subfield code="3">PPN027794520</marc:subfield> + <marc:subfield code="z">16e siècle</marc:subfield> + <marc:subfield code="2">rameau</marc:subfield> + </marc:datafield> + <marc:datafield tag="686" ind1="" ind2=""> + <marc:subfield code="a">840 "15" LERY</marc:subfield> + <marc:subfield code="2">CDU-UPVM</marc:subfield> + </marc:datafield> + <marc:datafield tag="700" ind1="" ind2="1"> + <marc:subfield code="3">PPN02698573X</marc:subfield> + <marc:subfield code="a">Léry</marc:subfield> + <marc:subfield code="b">Jean de</marc:subfield> + <marc:subfield code="f">1536?-1613?</marc:subfield> + <marc:subfield code="4">070</marc:subfield> + </marc:datafield> + <marc:datafield tag="702" ind1="" ind2="1"> + <marc:subfield code="3">PPN026986744</marc:subfield> + <marc:subfield code="a">Lestringant</marc:subfield> + <marc:subfield code="b">Frank</marc:subfield> + <marc:subfield code="f">1951-....</marc:subfield> + <marc:subfield code="4">340</marc:subfield> + </marc:datafield> + <marc:datafield tag="702" ind1="" ind2="1"> + <marc:subfield code="3">PPN02698797X</marc:subfield> + <marc:subfield code="a">Lévi-Strauss</marc:subfield> + <marc:subfield code="b">Claude</marc:subfield> + <marc:subfield code="f">1908-2009</marc:subfield> + <marc:subfield code="4">080</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="3"> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">Abes</marc:subfield> + <marc:subfield code="c">20140711</marc:subfield> + <marc:subfield code="g">AFNOR</marc:subfield> + <marc:subfield code="h">011717998</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="3"> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">Abes</marc:subfield> + <marc:subfield code="c">20140711</marc:subfield> + <marc:subfield code="g">AFNOR</marc:subfield> + <marc:subfield code="h">024674826</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="3"> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">Abes</marc:subfield> + <marc:subfield code="c">20140711</marc:subfield> + <marc:subfield code="g">AFNOR</marc:subfield> + <marc:subfield code="h">024146617</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="3"> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">Abes</marc:subfield> + <marc:subfield code="c">20140711</marc:subfield> + <marc:subfield code="g">AFNOR</marc:subfield> + <marc:subfield code="h">061242772</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="3"> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">Abes</marc:subfield> + <marc:subfield code="c">20140711</marc:subfield> + <marc:subfield code="g">AFNOR</marc:subfield> + <marc:subfield code="h">071649980</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="3"> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">Abes</marc:subfield> + <marc:subfield code="c">20140711</marc:subfield> + <marc:subfield code="g">AFNOR</marc:subfield> + <marc:subfield code="h">047755164</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="3"> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">Abes</marc:subfield> + <marc:subfield code="c">20140711</marc:subfield> + <marc:subfield code="g">AFNOR</marc:subfield> + <marc:subfield code="h">086747177</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="1"> + <marc:subfield code="a">US</marc:subfield> + <marc:subfield code="b">OCLC</marc:subfield> + <marc:subfield code="g">AACR2</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="3"> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">SF</marc:subfield> + <marc:subfield code="c">19990209</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="2"> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">AUROC</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="1"> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">UBS</marc:subfield> + <marc:subfield code="c">20000626</marc:subfield> + <marc:subfield code="g">AFNOR</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="3"> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">BN</marc:subfield> + <marc:subfield code="c">19990129</marc:subfield> + <marc:subfield code="g">AFNOR</marc:subfield> + </marc:datafield> + <marc:datafield tag="856" ind1="" ind2=""> + <marc:subfield code="4"> + http://www.sudoc.fr/003498263</marc:subfield> + </marc:datafield> + <marc:datafield tag="900" ind1="" ind2=""> + <marc:subfield code="3">frBN001029161</marc:subfield> + <marc:subfield code="a">Lerius</marc:subfield> + <marc:subfield code="b">Joannes</marc:subfield> + <marc:subfield code="9">70001</marc:subfield> + </marc:datafield> + <marc:datafield tag="900" ind1="" ind2=""> + <marc:subfield code="3">frBN001029161</marc:subfield> + <marc:subfield code="a">Lerius</marc:subfield> + <marc:subfield code="b">Johannes</marc:subfield> + <marc:subfield code="9">70001</marc:subfield> + </marc:datafield> + <marc:datafield tag="900" ind1="" ind2=""> + <marc:subfield code="3">frBN001033487</marc:subfield> + <marc:subfield code="a">Strauss</marc:subfield> + <marc:subfield code="b">Claude Lévi-</marc:subfield> + <marc:subfield code="9">70202</marc:subfield> + </marc:datafield> + <marc:datafield tag="900" ind1="" ind2=""> + <marc:subfield code="3">frBN001033487</marc:subfield> + <marc:subfield code="a">Lévy-Strauss</marc:subfield> + <marc:subfield code="b">Claude</marc:subfield> + <marc:subfield code="9">70202</marc:subfield> + </marc:datafield> + <marc:datafield tag="900" ind1="" ind2=""> + <marc:subfield code="3">frBN001033487</marc:subfield> + <marc:subfield code="a">Strauss</marc:subfield> + <marc:subfield code="b">Claude Lévy-</marc:subfield> + <marc:subfield code="9">70202</marc:subfield> + </marc:datafield> + <marc:datafield tag="960" ind1="" ind2="1"> + <marc:subfield code="3">frBN008805525</marc:subfield> + <marc:subfield code="a">Lerius</marc:subfield> + <marc:subfield code="b">Joannes</marc:subfield> + <marc:subfield code="f">153.?-1613?</marc:subfield> + <marc:subfield code="9">60001</marc:subfield> + </marc:datafield> + <marc:datafield tag="960" ind1="" ind2="1"> + <marc:subfield code="3">frBN008805525</marc:subfield> + <marc:subfield code="a">Lerius</marc:subfield> + <marc:subfield code="b">Johannes</marc:subfield> + <marc:subfield code="f">153.?-1613?</marc:subfield> + <marc:subfield code="9">60001</marc:subfield> + </marc:datafield> + <marc:datafield tag="960" ind1="" ind2="1"> + <marc:subfield code="3">frBN00162743X</marc:subfield> + <marc:subfield code="a">Durand de + Villegagnon</marc:subfield> + <marc:subfield code="b">Nicolas</marc:subfield> + <marc:subfield code="9">60002</marc:subfield> + </marc:datafield> + <marc:datafield tag="960" ind1="" ind2="1"> + <marc:subfield code="3">frBN00162743X</marc:subfield> + <marc:subfield code="a">Villegaignon</marc:subfield> + <marc:subfield code="b">Nicolas Durand</marc:subfield> + <marc:subfield code="c">Chevalier de</marc:subfield> + <marc:subfield code="9">60002</marc:subfield> + </marc:datafield> + <marc:datafield tag="960" ind1="" ind2="1"> + <marc:subfield code="3">frBN00162743X</marc:subfield> + <marc:subfield code="a">Villagagno</marc:subfield> + <marc:subfield code="b">Nicolaus</marc:subfield> + <marc:subfield code="9">60002</marc:subfield> + </marc:datafield> + <marc:datafield tag="960" ind1="" ind2=""> + <marc:subfield code="3">frBN001618327</marc:subfield> + <marc:subfield code="a">Amérindiens</marc:subfield> + <marc:subfield code="9">60601</marc:subfield> + </marc:datafield> + <marc:datafield tag="960" ind1="" ind2=""> + <marc:subfield code="3">frBN001618327</marc:subfield> + <marc:subfield code="a">Autochtones</marc:subfield> + <marc:subfield code="y">Amérique</marc:subfield> + <marc:subfield code="9">60601</marc:subfield> + </marc:datafield> + <marc:datafield tag="960" ind1="" ind2=""> + <marc:subfield code="3">frBN001618327</marc:subfield> + <marc:subfield code="a">Civilisation indienne + d'Amérique</marc:subfield> + <marc:subfield code="9">60601</marc:subfield> + </marc:datafield> + <marc:datafield tag="960" ind1="" ind2=""> + <marc:subfield code="3">frBN001618327</marc:subfield> + <marc:subfield code="a">Civilisations indiennes + d'Amérique</marc:subfield> + <marc:subfield code="9">60601</marc:subfield> + </marc:datafield> + <marc:datafield tag="960" ind1="" ind2=""> + <marc:subfield code="3">frBN001618327</marc:subfield> + <marc:subfield code="a">Indiens</marc:subfield> + <marc:subfield code="x">Civilisation</marc:subfield> + <marc:subfield code="9">60601</marc:subfield> + </marc:datafield> + <marc:datafield tag="960" ind1="" ind2=""> + <marc:subfield code="3">frBN001618327</marc:subfield> + <marc:subfield code="a">Indiens + d'Amérique</marc:subfield> + <marc:subfield code="9">60601</marc:subfield> + </marc:datafield> + <marc:datafield tag="960" ind1="" ind2=""> + <marc:subfield code="3">frBN001618327</marc:subfield> + <marc:subfield code="a">Indiens + précolombiens</marc:subfield> + <marc:subfield code="9">60601</marc:subfield> + </marc:datafield> + <marc:datafield tag="960" ind1="" ind2=""> + <marc:subfield code="3">frBN001618327</marc:subfield> + <marc:subfield code="a">Peaux-Rouges</marc:subfield> + <marc:subfield code="9">60601</marc:subfield> + </marc:datafield> + <marc:datafield tag="960" ind1="" ind2=""> + <marc:subfield code="3">frBN001618327</marc:subfield> + <marc:subfield code="a">Précolombiens, + Indiens</marc:subfield> + <marc:subfield code="9">60601</marc:subfield> + </marc:datafield> + <marc:datafield tag="960" ind1="" ind2=""> + <marc:subfield code="3">frBN001618327</marc:subfield> + <marc:subfield code="a">Tribus indiennes + d'Amérique</marc:subfield> + <marc:subfield code="9">60601</marc:subfield> + </marc:datafield> + <marc:datafield tag="960" ind1="" ind2=""> + <marc:subfield code="3">frBN001523847</marc:subfield> + <marc:subfield code="a">Brasil</marc:subfield> + <marc:subfield code="9">60701</marc:subfield> + </marc:datafield> + </marc:record> + </metadata> + </record> + <record> + <header> + <identifier>SCD01-153586</identifier> + <datestamp>2014-07-14</datestamp> + <setSpec>SCD01</setSpec> + </header> + <metadata> + <marc:record xmlns:marc="http://www.loc.gov/MARC21/slim" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"> + + <marc:leader>cam2 2200517 450</marc:leader> + <marc:controlfield tag="005"> + 20140221154217.000</marc:controlfield> + </marc:record> + </metadata> + </record> + <record> + <header> + <identifier>SCD01-202899</identifier> + <datestamp>2014-07-14</datestamp> + <setSpec>SCD01</setSpec> + </header> + <metadata> + <marc:record xmlns:marc="http://www.loc.gov/MARC21/slim" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"> + + <marc:leader>cam2 2200421 450</marc:leader> + <marc:controlfield tag="001"> + PPN077113381</marc:controlfield> + <marc:controlfield tag="005"> + 20140711140925.000</marc:controlfield> + <marc:datafield tag="010" ind1="" ind2=""> + <marc:subfield code="a">2-7178-4776-6</marc:subfield> + <marc:subfield code="b">br.</marc:subfield> + </marc:datafield> + <marc:datafield tag="010" ind1="" ind2=""> + <marc:subfield code="a"> + 978-2-7178-4776-5</marc:subfield> + <marc:subfield code="b">br.</marc:subfield> + <marc:subfield code="d">39 EUR</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a"> + (OCoLC)300479437</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">elec2004010058</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">ALP0202899</marc:subfield> + </marc:datafield> + <marc:datafield tag="073" ind1="" ind2="1"> + <marc:subfield code="a">9782717847765</marc:subfield> + </marc:datafield> + <marc:datafield tag="100" ind1="" ind2=""> + <marc:subfield code="a"> + 20040324h20042004k--y0frey50------ba</marc:subfield> + </marc:datafield> + <marc:datafield tag="101" ind1="0" ind2=""> + <marc:subfield code="a">fre</marc:subfield> + <marc:subfield code="b">eng</marc:subfield> + </marc:datafield> + <marc:datafield tag="102" ind1="" ind2=""> + <marc:subfield code="a">FR</marc:subfield> + </marc:datafield> + <marc:datafield tag="105" ind1="" ind2=""> + <marc:subfield code="a">a---a---001yd</marc:subfield> + </marc:datafield> + <marc:datafield tag="106" ind1="" ind2=""> + <marc:subfield code="a">r</marc:subfield> + </marc:datafield> + <marc:datafield tag="200" ind1="1" ind2=""> + <marc:subfield code="a">Recherche en sciences de + gestion</marc:subfield> + <marc:subfield code="b">Texte imprimé</marc:subfield> + <marc:subfield code="e">approche + qualimétrique</marc:subfield> + <marc:subfield code="e">observer l'objet + complexe</marc:subfield> + <marc:subfield code="f">Henri Savall, Véronique + Zardet</marc:subfield> + <marc:subfield code="g">préface du Pr David + Boje,...</marc:subfield> + </marc:datafield> + <marc:datafield tag="210" ind1="" ind2=""> + <marc:subfield code="a">Paris</marc:subfield> + <marc:subfield code="c">Economica</marc:subfield> + <marc:subfield code="d">DL 2004, cop. + 2004</marc:subfield> + </marc:datafield> + <marc:datafield tag="215" ind1="" ind2=""> + <marc:subfield code="a">1 vol. (432 p.)</marc:subfield> + <marc:subfield code="c">graph., tabl.</marc:subfield> + <marc:subfield code="d">24 cm</marc:subfield> + </marc:datafield> + <marc:datafield tag="225" ind1="0" ind2=""> + <marc:subfield code="a">Recherche en + gestion</marc:subfield> + </marc:datafield> + <marc:datafield tag="320" ind1="" ind2=""> + <marc:subfield code="a">Bibliogr. p. [395]-418. Notes + bibliogr. Index</marc:subfield> + </marc:datafield> + <marc:datafield tag="330" ind1="" ind2=""> + <marc:subfield code="a">Propose des méthodes + quantitatives, qualitatives et combinées + (qualimétriques) de recherches en sciences de gestion + et en sciences sociales. Analyse chaque méthodologie, + propose des outils d'aide à la conduite de recherche, à + l'observation scientifique de l'objet et au traitement + des informations.</marc:subfield> + </marc:datafield> + <marc:datafield tag="410" ind1="" ind2="1"> + <marc:subfield code="1">001PPN003083845</marc:subfield> + <marc:subfield code="t">Recherche en gestion + (Paris)</marc:subfield> + <marc:subfield code="x">1248-8704</marc:subfield> + </marc:datafield> + <marc:datafield tag="453" ind1="" ind2="1"> + <marc:subfield code="1">001PPN154821675</marc:subfield> + <marc:subfield code="t"><<The + >>qualimetrics approach</marc:subfield> + <marc:subfield code="b">Texte imprimé</marc:subfield> + <marc:subfield code="o">observing the complex + object</marc:subfield> + <marc:subfield code="f">Henri Savall and Véronique + Zardet,...</marc:subfield> + <marc:subfield code="c">Charlotte + (N.C.)</marc:subfield> + <marc:subfield code="n">Information Age + publ.</marc:subfield> + <marc:subfield code="d">cop. 2011</marc:subfield> + <marc:subfield code="p">1 vol. (lii-387 + p.)</marc:subfield> + <marc:subfield code="s">Research in management + consulting</marc:subfield> + <marc:subfield code="y"> + 978-1-61735-476-2</marc:subfield> + </marc:datafield> + <marc:datafield tag="606" ind1="" ind2=""> + <marc:subfield code="3">PPN027467945</marc:subfield> + <marc:subfield code="a">Gestion</marc:subfield> + <marc:subfield code="3">PPN027315754</marc:subfield> + <marc:subfield code="x">Recherche</marc:subfield> + <marc:subfield code="3">PPN027239489</marc:subfield> + <marc:subfield code="x">Méthodologie</marc:subfield> + <marc:subfield code="2">rameau</marc:subfield> + </marc:datafield> + <marc:datafield tag="606" ind1="" ind2=""> + <marc:subfield code="3">PPN032026935</marc:subfield> + <marc:subfield code="a">Techniques quantitatives de + gestion</marc:subfield> + <marc:subfield code="2">rameau</marc:subfield> + </marc:datafield> + <marc:datafield tag="686" ind1="" ind2=""> + <marc:subfield code="a">65</marc:subfield> + <marc:subfield code="2">CDU-UPVM</marc:subfield> + </marc:datafield> + <marc:datafield tag="700" ind1="" ind2="1"> + <marc:subfield code="3">PPN027124533</marc:subfield> + <marc:subfield code="a">Savall</marc:subfield> + <marc:subfield code="b">Henri</marc:subfield> + <marc:subfield code="f">1941-....</marc:subfield> + <marc:subfield code="4">070</marc:subfield> + </marc:datafield> + <marc:datafield tag="701" ind1="" ind2="1"> + <marc:subfield code="3">PPN029299977</marc:subfield> + <marc:subfield code="a">Zardet</marc:subfield> + <marc:subfield code="b">Véronique</marc:subfield> + <marc:subfield code="f">1958-....</marc:subfield> + <marc:subfield code="4">070</marc:subfield> + </marc:datafield> + <marc:datafield tag="702" ind1="" ind2="1"> + <marc:subfield code="3">PPN03531754X</marc:subfield> + <marc:subfield code="a">Boje</marc:subfield> + <marc:subfield code="b">David M.</marc:subfield> + <marc:subfield code="4">080</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="3"> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">Abes</marc:subfield> + <marc:subfield code="c">20140711</marc:subfield> + <marc:subfield code="g">AFNOR</marc:subfield> + </marc:datafield> + <marc:datafield tag="003" ind1="" ind2=""> + <marc:subfield code="a"> + http://www.sudoc.fr/077113381</marc:subfield> + </marc:datafield> + </marc:record> + </metadata> + </record> + <record> + <header> + <identifier>SCD01-252407</identifier> + <datestamp>2014-07-14</datestamp> + <setSpec>SCD01</setSpec> + </header> + <metadata> + <marc:record xmlns:marc="http://www.loc.gov/MARC21/slim" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"> + + <marc:leader>cam2 2200433 450</marc:leader> + <marc:controlfield tag="001"> + PPN111365554</marc:controlfield> + <marc:controlfield tag="005"> + 20140711135347.000</marc:controlfield> + <marc:datafield tag="010" ind1="" ind2=""> + <marc:subfield code="a">2-84472-907-X</marc:subfield> + <marc:subfield code="b">br.</marc:subfield> + <marc:subfield code="d">11,95 EUR</marc:subfield> + </marc:datafield> + <marc:datafield tag="010" ind1="" ind2=""> + <marc:subfield code="a"> + 978-2-8447-2907-1</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a"> + (OCoLC)470658353</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a"> + FRBNF392832240000000</marc:subfield> + <marc:subfield code="z">FRBNF39283224</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">ALP000252407</marc:subfield> + </marc:datafield> + <marc:datafield tag="073" ind1="" ind2="1"> + <marc:subfield code="a">09782844729071</marc:subfield> + </marc:datafield> + <marc:datafield tag="100" ind1="" ind2=""> + <marc:subfield code="a"> + 20061215d2006----m--y0frey50------ba</marc:subfield> + </marc:datafield> + <marc:datafield tag="101" ind1="0" ind2=""> + <marc:subfield code="a">fre</marc:subfield> + </marc:datafield> + <marc:datafield tag="102" ind1="" ind2=""> + <marc:subfield code="a">FR</marc:subfield> + </marc:datafield> + <marc:datafield tag="105" ind1="" ind2=""> + <marc:subfield code="a">a---||||000yy</marc:subfield> + </marc:datafield> + <marc:datafield tag="106" ind1="" ind2=""> + <marc:subfield code="a">r</marc:subfield> + </marc:datafield> + <marc:datafield tag="200" ind1="1" ind2=""> + <marc:subfield code="a"><<Les >>métiers du + transport et de la logistique</marc:subfield> + <marc:subfield code="b">Texte imprimé</marc:subfield> + <marc:subfield code="f">Raphaëlle Giniès, Auriane + Vigny</marc:subfield> + </marc:datafield> + <marc:datafield tag="205" ind1="" ind2=""> + <marc:subfield code="a">[4e édition]</marc:subfield> + </marc:datafield> + <marc:datafield tag="210" ind1="" ind2=""> + <marc:subfield code="a"> + Levallois-Perret</marc:subfield> + <marc:subfield code="c">Studyrama</marc:subfield> + <marc:subfield code="d">impr. 2006</marc:subfield> + <marc:subfield code="e"> + 14-Condé-sur-Noireau</marc:subfield> + <marc:subfield code="g">Impr. Corlet</marc:subfield> + </marc:datafield> + <marc:datafield tag="215" ind1="" ind2=""> + <marc:subfield code="a">1 vol. (233 p.)</marc:subfield> + <marc:subfield code="c">couv. ill. en + coul.</marc:subfield> + <marc:subfield code="d">20 cm</marc:subfield> + </marc:datafield> + <marc:datafield tag="225" ind1="2" ind2=""> + <marc:subfield code="a">Guides J</marc:subfield> + <marc:subfield code="v">279</marc:subfield> + </marc:datafield> + <marc:datafield tag="312" ind1="" ind2=""> + <marc:subfield code="a">La couv. porte en plus : + "Aiguilleur du ciel, agent de transit, logisticien...", + "Les métiers sur terre, air et mer " et "Les formations + du CAP à Bac + 5"</marc:subfield> + </marc:datafield> + <marc:datafield tag="320" ind1="" ind2=""> + <marc:subfield code="a">Lexique</marc:subfield> + </marc:datafield> + <marc:datafield tag="410" ind1="" ind2="1"> + <marc:subfield code="1">001PPN013656848</marc:subfield> + <marc:subfield code="t">Guides J</marc:subfield> + <marc:subfield code="x">1635-9364</marc:subfield> + <marc:subfield code="v">279</marc:subfield> + </marc:datafield> + <marc:datafield tag="606" ind1="" ind2=""> + <marc:subfield code="3">PPN027803287</marc:subfield> + <marc:subfield code="a">Logistique + (organisation)</marc:subfield> + <marc:subfield code="3">PPN027244393</marc:subfield> + <marc:subfield code="x">Orientation + professionnelle</marc:subfield> + <marc:subfield code="3">PPN027226794</marc:subfield> + <marc:subfield code="y">France</marc:subfield> + <marc:subfield code="3">PPN027790045</marc:subfield> + <marc:subfield code="x">Guides pratiques et + mémentos</marc:subfield> + <marc:subfield code="2">rameau</marc:subfield> + </marc:datafield> + <marc:datafield tag="606" ind1="" ind2=""> + <marc:subfield code="3">PPN027296695</marc:subfield> + <marc:subfield code="a">Transport</marc:subfield> + <marc:subfield code="3">PPN027244393</marc:subfield> + <marc:subfield code="x">Orientation + professionnelle</marc:subfield> + <marc:subfield code="3">PPN027226794</marc:subfield> + <marc:subfield code="y">France</marc:subfield> + <marc:subfield code="3">PPN027790045</marc:subfield> + <marc:subfield code="x">Guides pratiques et + mémentos</marc:subfield> + <marc:subfield code="2">rameau</marc:subfield> + </marc:datafield> + <marc:datafield tag="686" ind1="0" ind2="1"> + <marc:subfield code="a">375</marc:subfield> + <marc:subfield code="2">CDU-UPVM</marc:subfield> + </marc:datafield> + <marc:datafield tag="700" ind1="" ind2="1"> + <marc:subfield code="3">PPN05769799X</marc:subfield> + <marc:subfield code="a">Giniès</marc:subfield> + <marc:subfield code="b">Raphaëlle</marc:subfield> + <marc:subfield code="4">070</marc:subfield> + </marc:datafield> + <marc:datafield tag="701" ind1="" ind2="1"> + <marc:subfield code="3">PPN111544548</marc:subfield> + <marc:subfield code="a">Vigny</marc:subfield> + <marc:subfield code="b">Auriane</marc:subfield> + <marc:subfield code="4">070</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="3"> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">Abes</marc:subfield> + <marc:subfield code="c">20140711</marc:subfield> + <marc:subfield code="g">AFNOR</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="0"> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">BNF</marc:subfield> + <marc:subfield code="c">20041124</marc:subfield> + <marc:subfield code="g">AFNOR</marc:subfield> + <marc:subfield code="2">intermrc</marc:subfield> + </marc:datafield> + <marc:datafield tag="003" ind1="" ind2=""> + <marc:subfield code="a"> + http://www.sudoc.fr/111365554</marc:subfield> + </marc:datafield> + </marc:record> + </metadata> + </record> + <record> + <header> + <identifier>SCD01-5536</identifier> + <datestamp>2014-07-14</datestamp> + <setSpec>SCD01</setSpec> + </header> + <metadata> + <marc:record xmlns:marc="http://www.loc.gov/MARC21/slim" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"> + + <marc:leader>cas0 2200373 450</marc:leader> + <marc:controlfield tag="001"> + PPN037573292</marc:controlfield> + <marc:controlfield tag="005"> + 20140711102957.000</marc:controlfield> + <marc:datafield tag="011" ind1="" ind2=""> + <marc:subfield code="a">0184-3311</marc:subfield> + <marc:subfield code="f">0184-3311</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">070534292</marc:subfield> + <marc:subfield code="9">sudoc</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">(OCoLC)18352509</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">ccn0184-3311</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">issn01843311</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">ALP000005536</marc:subfield> + </marc:datafield> + <marc:datafield tag="100" ind1="" ind2=""> + <marc:subfield code="a"> + 19960207b1978198-k--y0frey50------ba</marc:subfield> + </marc:datafield> + <marc:datafield tag="101" ind1="0" ind2=""> + <marc:subfield code="a">fre</marc:subfield> + </marc:datafield> + <marc:datafield tag="102" ind1="" ind2=""> + <marc:subfield code="a">FR</marc:subfield> + </marc:datafield> + <marc:datafield tag="105" ind1="" ind2=""> + <marc:subfield code="a">y---|||||||||</marc:subfield> + </marc:datafield> + <marc:datafield tag="106" ind1="" ind2=""> + <marc:subfield code="a">r</marc:subfield> + </marc:datafield> + <marc:datafield tag="110" ind1="" ind2=""> + <marc:subfield code="a">zuu|||||uu|</marc:subfield> + </marc:datafield> + <marc:datafield tag="200" ind1="1" ind2=""> + <marc:subfield code="a">Gynécologie</marc:subfield> + <marc:subfield code="b">Texte imprimé</marc:subfield> + <marc:subfield code="f">par André Cohen</marc:subfield> + </marc:datafield> + <marc:datafield tag="210" ind1="" ind2=""> + <marc:subfield code="a">Paris</marc:subfield> + <marc:subfield code="c">Maloine</marc:subfield> + <marc:subfield code="d">1978-[198.]</marc:subfield> + </marc:datafield> + <marc:datafield tag="530" ind1="1" ind2=""> + <marc:subfield code="a">Gynécologie ...</marc:subfield> + <marc:subfield code="b">(Paris. 1978)</marc:subfield> + </marc:datafield> + <marc:datafield tag="531" ind1="" ind2=""> + <marc:subfield code="a">Gynécol.</marc:subfield> + <marc:subfield code="b">(Paris, 1978)</marc:subfield> + </marc:datafield> + <marc:datafield tag="606" ind1="" ind2=""> + <marc:subfield code="3">PPN027228614</marc:subfield> + <marc:subfield code="a">Gynécologie</marc:subfield> + <marc:subfield code="2">rameau</marc:subfield> + </marc:datafield> + <marc:datafield tag="686" ind1="" ind2=""> + <marc:subfield code="a">61</marc:subfield> + <marc:subfield code="2">CDU-UPVM</marc:subfield> + </marc:datafield> + <marc:datafield tag="702" ind1="" ind2="1"> + <marc:subfield code="3">PPN113288611</marc:subfield> + <marc:subfield code="a">Cohen</marc:subfield> + <marc:subfield code="b">André</marc:subfield> + <marc:subfield code="f">19..-....</marc:subfield> + <marc:subfield code="c">gynécologue</marc:subfield> + <marc:subfield code="4">651</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="3"> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">Abes</marc:subfield> + <marc:subfield code="c">20140711</marc:subfield> + <marc:subfield code="g">AFNOR</marc:subfield> + <marc:subfield code="h">070534292</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="3"> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">ISSN</marc:subfield> + <marc:subfield code="c">20121122</marc:subfield> + </marc:datafield> + <marc:datafield tag="802" ind1="" ind2=""> + <marc:subfield code="a">07</marc:subfield> + </marc:datafield> + <marc:datafield tag="003" ind1="" ind2=""> + <marc:subfield code="a"> + http://www.sudoc.fr/037573292</marc:subfield> + </marc:datafield> + </marc:record> + </metadata> + </record> + <record> + <header> + <identifier>SCD01-253879</identifier> + <datestamp>2014-07-14</datestamp> + <setSpec>SCD01</setSpec> + </header> + <metadata> + <marc:record xmlns:marc="http://www.loc.gov/MARC21/slim" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"> + + <marc:leader>cam2 2200313 450</marc:leader> + <marc:controlfield tag="005"> + 20080227200044.000</marc:controlfield> + </marc:record> + </metadata> + </record> + <record> + <header> + <identifier>SCD01-11603</identifier> + <datestamp>2014-07-14</datestamp> + <setSpec>SCD01</setSpec> + </header> + <metadata> + <marc:record xmlns:marc="http://www.loc.gov/MARC21/slim" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"> + + <marc:leader>cam0 2200277 450</marc:leader> + <marc:controlfield tag="001"> + PPN052811204</marc:controlfield> + <marc:controlfield tag="005"> + 20140711120605.000</marc:controlfield> + <marc:datafield tag="010" ind1="" ind2=""> + <marc:subfield code="a">0-8262-0105-9</marc:subfield> + <marc:subfield code="b">rel.</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a"> + (OCoLC)301416365</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">sib1623803</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">ALP000011603</marc:subfield> + </marc:datafield> + <marc:datafield tag="100" ind1="" ind2=""> + <marc:subfield code="a"> + 20001003h19711971k--y0frey50------ba</marc:subfield> + </marc:datafield> + <marc:datafield tag="101" ind1="0" ind2=""> + <marc:subfield code="a">eng</marc:subfield> + </marc:datafield> + <marc:datafield tag="102" ind1="" ind2=""> + <marc:subfield code="a">US</marc:subfield> + </marc:datafield> + <marc:datafield tag="105" ind1="" ind2=""> + <marc:subfield code="a">y---||||001yy</marc:subfield> + </marc:datafield> + <marc:datafield tag="106" ind1="" ind2=""> + <marc:subfield code="a">r</marc:subfield> + </marc:datafield> + <marc:datafield tag="200" ind1="1" ind2=""> + <marc:subfield code="a">Truman and the 80th + congress</marc:subfield> + <marc:subfield code="b">Texte imprimé</marc:subfield> + <marc:subfield code="f">Susan M. + Hartmann</marc:subfield> + </marc:datafield> + <marc:datafield tag="210" ind1="" ind2=""> + <marc:subfield code="a">Columbia</marc:subfield> + <marc:subfield code="c">University of Missouri + press</marc:subfield> + <marc:subfield code="d">1971, cop. 1971</marc:subfield> + </marc:datafield> + <marc:datafield tag="215" ind1="" ind2=""> + <marc:subfield code="a">1 vol. (VIII-241 + p.)</marc:subfield> + <marc:subfield code="d">22 cm</marc:subfield> + </marc:datafield> + <marc:datafield tag="320" ind1="" ind2=""> + <marc:subfield code="a">Bibliogr.: p. 219-229. + Index</marc:subfield> + </marc:datafield> + <marc:datafield tag="700" ind1="" ind2="1"> + <marc:subfield code="3">PPN078026369</marc:subfield> + <marc:subfield code="a">Hartmann</marc:subfield> + <marc:subfield code="b">Susan M.</marc:subfield> + <marc:subfield code="4">070</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="3"> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">Abes</marc:subfield> + <marc:subfield code="c">20140711</marc:subfield> + <marc:subfield code="g">AFNOR</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="3"> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">SF</marc:subfield> + <marc:subfield code="c">20001207</marc:subfield> + </marc:datafield> + <marc:datafield tag="003" ind1="" ind2=""> + <marc:subfield code="a"> + http://www.sudoc.fr/052811204</marc:subfield> + </marc:datafield> + </marc:record> + </metadata> + </record> + <resumptionToken> + SCD01@000505001000000008marc21</resumptionToken> + </ListRecords> +</OAI-PMH> diff --git a/tests/library/Class/Cosmogramme/Integration/oairesults_page2.xml b/tests/library/Class/Cosmogramme/Integration/oairesults_page2.xml new file mode 100644 index 0000000000000000000000000000000000000000..f27360ac4fbe1ad9d65f22fea22fe5ea76a9eccf --- /dev/null +++ b/tests/library/Class/Cosmogramme/Integration/oairesults_page2.xml @@ -0,0 +1,1212 @@ +<?xml version="1.0" encoding="utf-8"?> +<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" +xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" +xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> + + <responseDate>2015-06-01T09:16:00Z</responseDate> + <request verb="ListRecords" from="2014-08-20" until="2014-08-30" + metadataPrefix="marc21"> + http://armada2.u-pec.fr/OAI-script</request> + <ListRecords> + <record> + <header> + <identifier>SCD01-67304</identifier> + <datestamp>2014-08-20</datestamp> + <setSpec>SCD01</setSpec> + </header> + <metadata> + <marc:record xmlns:marc="http://www.loc.gov/MARC21/slim" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"> + + <marc:leader>cam0 2200493 450</marc:leader> + <marc:controlfield tag="001"> + PPN003446875</marc:controlfield> + <marc:controlfield tag="005"> + 20140819165428.000</marc:controlfield> + <marc:datafield tag="010" ind1="" ind2=""> + <marc:subfield code="a">92-64-24257-0</marc:subfield> + <marc:subfield code="b">br.</marc:subfield> + </marc:datafield> + <marc:datafield tag="020" ind1="" ind2=""> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">29500378</marc:subfield> + </marc:datafield> + <marc:datafield tag="021" ind1="" ind2=""> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">DL 94-34622</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">(OCoLC)31918747</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">sib0591800</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">ocm31918747</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a"> + DYNIX_BUFDF_11323</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">urouen71196</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">frBN018298465</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">ALP67304</marc:subfield> + </marc:datafield> + <marc:datafield tag="073" ind1="" ind2="0"> + <marc:subfield code="a">9789264242579</marc:subfield> + </marc:datafield> + <marc:datafield tag="100" ind1="" ind2=""> + <marc:subfield code="a"> + 19950119d1994----m--f0frey50------ba</marc:subfield> + </marc:datafield> + <marc:datafield tag="101" ind1="0" ind2=""> + <marc:subfield code="a">fre</marc:subfield> + </marc:datafield> + <marc:datafield tag="102" ind1="" ind2=""> + <marc:subfield code="a">FR</marc:subfield> + </marc:datafield> + <marc:datafield tag="105" ind1="" ind2=""> + <marc:subfield code="a">a---p---000yy</marc:subfield> + </marc:datafield> + <marc:datafield tag="106" ind1="" ind2=""> + <marc:subfield code="a">r</marc:subfield> + </marc:datafield> + <marc:datafield tag="200" ind1="1" ind2=""> + <marc:subfield code="a"><<La + >>biotechnologie pour un environnement + propre</marc:subfield> + <marc:subfield code="b">Texte imprimé</marc:subfield> + <marc:subfield code="e">prévention, détection, + dépollution</marc:subfield> + <marc:subfield code="f">[rapport du Groupe ad hoc + d'experts gouvernementaux sur la biotechnologie pour un + environnement propre], Organisation de coopération et + de développement économiques</marc:subfield> + </marc:datafield> + <marc:datafield tag="210" ind1="" ind2=""> + <marc:subfield code="a">Paris</marc:subfield> + <marc:subfield code="c">OCDE</marc:subfield> + <marc:subfield code="d">1994</marc:subfield> + </marc:datafield> + <marc:datafield tag="215" ind1="" ind2=""> + <marc:subfield code="a">1 vol (217 p.)</marc:subfield> + <marc:subfield code="c">ill., couv. + ill.</marc:subfield> + <marc:subfield code="d">27 cm</marc:subfield> + </marc:datafield> + <marc:datafield tag="320" ind1="" ind2=""> + <marc:subfield code="a">Notes bibliogr. Résumé. + Glossaire</marc:subfield> + </marc:datafield> + <marc:datafield tag="451" ind1="" ind2="1"> + <marc:subfield code="1">001PPN179955403</marc:subfield> + <marc:subfield code="t">Biotechnology for a clean + environment</marc:subfield> + <marc:subfield code="b">Texte imprimé</marc:subfield> + <marc:subfield code="o">prevention, detection, + remediation</marc:subfield> + <marc:subfield code="f">Organisation for Economic + Co-operation and Development</marc:subfield> + <marc:subfield code="c">Paris</marc:subfield> + <marc:subfield code="n">OECD</marc:subfield> + <marc:subfield code="d">cop. 1994</marc:subfield> + <marc:subfield code="p">1 vol. (201 p.)</marc:subfield> + <marc:subfield code="y">92-64-14257-6</marc:subfield> + </marc:datafield> + <marc:datafield tag="606" ind1="" ind2=""> + <marc:subfield code="3">PPN027224090</marc:subfield> + <marc:subfield code="a">Environnement</marc:subfield> + <marc:subfield code="x">Protection</marc:subfield> + <marc:subfield code="3">PPN027306674</marc:subfield> + <marc:subfield code="y">Pays de l'OCDE</marc:subfield> + <marc:subfield code="2">rameau</marc:subfield> + </marc:datafield> + <marc:datafield tag="606" ind1="" ind2=""> + <marc:subfield code="3">PPN031989101</marc:subfield> + <marc:subfield code="a">Biotechnologie appliquée à + l'environnement</marc:subfield> + <marc:subfield code="2">rameau</marc:subfield> + </marc:datafield> + <marc:datafield tag="606" ind1="" ind2=""> + <marc:subfield code="3">PPN027358518</marc:subfield> + <marc:subfield code="a">Pollution</marc:subfield> + <marc:subfield code="x">Lutte contre</marc:subfield> + <marc:subfield code="3">PPN027306674</marc:subfield> + <marc:subfield code="y">Pays de l'OCDE</marc:subfield> + <marc:subfield code="2">rameau</marc:subfield> + </marc:datafield> + <marc:datafield tag="606" ind1="" ind2=""> + <marc:subfield code="3">PPN031989101</marc:subfield> + <marc:subfield code="a">Biotechnologie appliquée à + l'environnement</marc:subfield> + <marc:subfield code="3">PPN028644905</marc:subfield> + <marc:subfield code="x">Aspect + économique</marc:subfield> + <marc:subfield code="2">rameau</marc:subfield> + </marc:datafield> + <marc:datafield tag="710" ind1="0" ind2="2"> + <marc:subfield code="3">PPN033562679</marc:subfield> + <marc:subfield code="a">Organisation de coopération et + de développement économiques</marc:subfield> + <marc:subfield code="b">Groupe ad hoc d'experts + gouvernementaux sur la biotechnologie pour un + environnement propre</marc:subfield> + <marc:subfield code="4">070</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="3"> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">Abes</marc:subfield> + <marc:subfield code="c">20140819</marc:subfield> + <marc:subfield code="g">AFNOR</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="3"> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">BN</marc:subfield> + <marc:subfield code="c">19990129</marc:subfield> + <marc:subfield code="g">AFNOR</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="3"> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">SF</marc:subfield> + <marc:subfield code="c">19990209</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="1"> + <marc:subfield code="a">US</marc:subfield> + <marc:subfield code="b">OCLC</marc:subfield> + <marc:subfield code="g">AACR2</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="2"> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">AUROC</marc:subfield> + </marc:datafield> + <marc:datafield tag="003" ind1="" ind2=""> + <marc:subfield code="a"> + http://www.sudoc.fr/003446875</marc:subfield> + </marc:datafield> + </marc:record> + </metadata> + </record> + <record> + <header> + <identifier>SCD01-230945</identifier> + <datestamp>2014-08-20</datestamp> + <setSpec>SCD01</setSpec> + </header> + <metadata> + <marc:record xmlns:marc="http://www.loc.gov/MARC21/slim" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"> + + <marc:leader>cam2 2200337 450</marc:leader> + <marc:controlfield tag="001"> + PPN095041435</marc:controlfield> + <marc:controlfield tag="005"> + 20140819141454.000</marc:controlfield> + <marc:datafield tag="010" ind1="" ind2=""> + <marc:subfield code="a">2-84200-891-X</marc:subfield> + <marc:subfield code="b">br.</marc:subfield> + <marc:subfield code="d">16 EUR</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a"> + (OCoLC)420857858</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">ALP000230945</marc:subfield> + </marc:datafield> + <marc:datafield tag="073" ind1="" ind2="1"> + <marc:subfield code="a">9782842008918</marc:subfield> + </marc:datafield> + <marc:datafield tag="100" ind1="" ind2=""> + <marc:subfield code="a"> + 20060116h20052006k--y0frey50------ba</marc:subfield> + </marc:datafield> + <marc:datafield tag="101" ind1="0" ind2=""> + <marc:subfield code="a">fre</marc:subfield> + </marc:datafield> + <marc:datafield tag="102" ind1="" ind2=""> + <marc:subfield code="a">FR</marc:subfield> + </marc:datafield> + <marc:datafield tag="105" ind1="" ind2=""> + <marc:subfield code="a">a---ja--000yy</marc:subfield> + </marc:datafield> + <marc:datafield tag="106" ind1="" ind2=""> + <marc:subfield code="a">r</marc:subfield> + </marc:datafield> + <marc:datafield tag="200" ind1="1" ind2=""> + <marc:subfield code="a">Statistique + descriptive</marc:subfield> + <marc:subfield code="b">Texte imprimé</marc:subfield> + <marc:subfield code="e">séries statistiques à une et + deux variables, séries chronologiques, + indices</marc:subfield> + <marc:subfield code="f">Fabrice + Mazerolle</marc:subfield> + </marc:datafield> + <marc:datafield tag="210" ind1="" ind2=""> + <marc:subfield code="a">Paris</marc:subfield> + <marc:subfield code="c">Gualino</marc:subfield> + <marc:subfield code="d">DL 2005, cop. + 2006</marc:subfield> + </marc:datafield> + <marc:datafield tag="215" ind1="" ind2=""> + <marc:subfield code="a">1 vol. (172 p.)</marc:subfield> + <marc:subfield code="c">fig., tabl., + graph.</marc:subfield> + <marc:subfield code="d">24 cm</marc:subfield> + </marc:datafield> + <marc:datafield tag="225" ind1="0" ind2=""> + <marc:subfield code="a">Fac universités</marc:subfield> + <marc:subfield code="i">Mémentos LMD</marc:subfield> + </marc:datafield> + <marc:datafield tag="320" ind1="" ind2=""> + <marc:subfield code="a">Bibliogr. p. [173]. + Glossaire</marc:subfield> + </marc:datafield> + <marc:datafield tag="330" ind1="" ind2=""> + <marc:subfield code="a">Après avoir présenté le + vocabulaire de la statistique descriptive, expose de + façon synthétique tout ce qu'il faut savoir pour + maîtriser cette discipline et s'en servir pour décrire + et analyser de façon quantifiée les phénomènes repérés + par des éléments nombreux.</marc:subfield> + </marc:datafield> + <marc:datafield tag="333" ind1="" ind2=""> + <marc:subfield code="a">Licence et master Sciences + économiques, AES et AEJ, cursus universitaires de + gestion : économie et gestion, IAE, MSG et IUP, écoles + de commerce et gestion des entreprises</marc:subfield> + </marc:datafield> + <marc:datafield tag="410" ind1="" ind2="1"> + <marc:subfield code="1">001PPN040606325</marc:subfield> + <marc:subfield code="t">Fac universités. Série + Mémentos</marc:subfield> + <marc:subfield code="x">1288-9199</marc:subfield> + </marc:datafield> + <marc:datafield tag="452" ind1="" ind2="1"> + <marc:subfield code="1">001PPN123524334</marc:subfield> + <marc:subfield code="t">Statistique + descriptive</marc:subfield> + <marc:subfield code="b">Ressource + électronique</marc:subfield> + <marc:subfield code="o">séries statistiques à une et + deux variables, séries chronologiques, + indices</marc:subfield> + <marc:subfield code="f">Fabrice + Mazerolle</marc:subfield> + <marc:subfield code="c">Paris</marc:subfield> + <marc:subfield code="n">Gualino</marc:subfield> + <marc:subfield code="n">[diff.] Numilog</marc:subfield> + <marc:subfield code="d">2006</marc:subfield> + </marc:datafield> + <marc:datafield tag="606" ind1="" ind2=""> + <marc:subfield code="3">PPN027315800</marc:subfield> + <marc:subfield code="a">Statistique</marc:subfield> + <marc:subfield code="3">PPN03020934X</marc:subfield> + <marc:subfield code="x">Manuels d'enseignement + supérieur</marc:subfield> + <marc:subfield code="2">rameau</marc:subfield> + </marc:datafield> + <marc:datafield tag="606" ind1="" ind2=""> + <marc:subfield code="3">PPN027869970</marc:subfield> + <marc:subfield code="a">Séries + chronologiques</marc:subfield> + <marc:subfield code="3">PPN03020934X</marc:subfield> + <marc:subfield code="x">Manuels d'enseignement + supérieur</marc:subfield> + <marc:subfield code="2">rameau</marc:subfield> + </marc:datafield> + <marc:datafield tag="686" ind1="" ind2=""> + <marc:subfield code="a">519.4</marc:subfield> + <marc:subfield code="2">CDU-UPVM</marc:subfield> + </marc:datafield> + <marc:datafield tag="700" ind1="" ind2="1"> + <marc:subfield code="3">PPN028814266</marc:subfield> + <marc:subfield code="a">Mazerolle</marc:subfield> + <marc:subfield code="b">Fabrice</marc:subfield> + <marc:subfield code="f">1956-....</marc:subfield> + <marc:subfield code="4">070</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="3"> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">Abes</marc:subfield> + <marc:subfield code="c">20140819</marc:subfield> + <marc:subfield code="g">AFNOR</marc:subfield> + </marc:datafield> + <marc:datafield tag="003" ind1="" ind2=""> + <marc:subfield code="a"> + http://www.sudoc.fr/095041435</marc:subfield> + </marc:datafield> + </marc:record> + </metadata> + </record> + <record> + <header> + <identifier>SCD01-550764</identifier> + <datestamp>2014-08-20</datestamp> + <setSpec>SCD01</setSpec> + </header> + <metadata> + <marc:record xmlns:marc="http://www.loc.gov/MARC21/slim" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"> + + <marc:leader>cam2 2200469 450</marc:leader> + <marc:controlfield tag="001"> + PPN002891522</marc:controlfield> + <marc:controlfield tag="005"> + 20140819143436.000</marc:controlfield> + <marc:datafield tag="010" ind1="" ind2=""> + <marc:subfield code="a">2-253-06344-4</marc:subfield> + <marc:subfield code="b">br.</marc:subfield> + <marc:subfield code="d">3,00 EUR</marc:subfield> + </marc:datafield> + <marc:datafield tag="010" ind1="" ind2=""> + <marc:subfield code="a"> + 978-2-253-06344-5</marc:subfield> + <marc:subfield code="b">Br.</marc:subfield> + </marc:datafield> + <marc:datafield tag="020" ind1="" ind2=""> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">09320277</marc:subfield> + </marc:datafield> + <marc:datafield tag="021" ind1="" ind2=""> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">DL 93-17328</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">(OCoLC)31149952</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">ocm31149952</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">sib0479611</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">frBN015265321</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">ALP000550764</marc:subfield> + </marc:datafield> + <marc:datafield tag="073" ind1="" ind2="1"> + <marc:subfield code="a">9782253063445</marc:subfield> + </marc:datafield> + <marc:datafield tag="100" ind1="" ind2=""> + <marc:subfield code="a"> + 19930616h19931993m--y0frey50------ba</marc:subfield> + </marc:datafield> + <marc:datafield tag="101" ind1="1" ind2=""> + <marc:subfield code="a">fre</marc:subfield> + <marc:subfield code="c">ger</marc:subfield> + </marc:datafield> + <marc:datafield tag="102" ind1="" ind2=""> + <marc:subfield code="a">FR</marc:subfield> + </marc:datafield> + <marc:datafield tag="105" ind1="" ind2=""> + <marc:subfield code="a">y---zz--000ad</marc:subfield> + </marc:datafield> + <marc:datafield tag="106" ind1="" ind2=""> + <marc:subfield code="a">r</marc:subfield> + </marc:datafield> + <marc:datafield tag="200" ind1="1" ind2=""> + <marc:subfield code="a">Mademoiselle + Else</marc:subfield> + <marc:subfield code="b">Texte imprimé</marc:subfield> + <marc:subfield code="f">Arthur + Schnitzler</marc:subfield> + <marc:subfield code="g">texte français de Henri + Christophe</marc:subfield> + <marc:subfield code="g">préface de Roland + Jaccard</marc:subfield> + </marc:datafield> + <marc:datafield tag="210" ind1="" ind2=""> + <marc:subfield code="a">Paris</marc:subfield> + <marc:subfield code="c">Librairie générale + française</marc:subfield> + <marc:subfield code="d">cop. 1993</marc:subfield> + </marc:datafield> + <marc:datafield tag="215" ind1="" ind2=""> + <marc:subfield code="a">1 vol. (93 p.)</marc:subfield> + <marc:subfield code="c">couv. ill. en + coul.</marc:subfield> + <marc:subfield code="d">17 cm</marc:subfield> + </marc:datafield> + <marc:datafield tag="225" ind1="2" ind2=""> + <marc:subfield code="a"><<Le >>Livre de + poche</marc:subfield> + <marc:subfield code="h">Biblio</marc:subfield> + <marc:subfield code="v">3195</marc:subfield> + </marc:datafield> + <marc:datafield tag="305" ind1="" ind2=""> + <marc:subfield code="a">Réimpression : 2006, 2008, + 2013</marc:subfield> + </marc:datafield> + <marc:datafield tag="330" ind1="" ind2=""> + <marc:subfield code="a">Cette longue nouvelle en forme + de monologue met en scène le conflit intérieur d'une + jeune femme déchirée entre son amour filial et les + impératifs de la morale. Etude d'un cas clinique, ce + récit est aussi une peinture du climat culturel et + social de la vie viennoise de + l'après-guerre.</marc:subfield> + </marc:datafield> + <marc:datafield tag="410" ind1="" ind2="1"> + <marc:subfield code="1">001PPN00102714X</marc:subfield> + <marc:subfield code="t"><<Le >>Livre de + poche. Biblio</marc:subfield> + <marc:subfield code="x">0752-0387</marc:subfield> + <marc:subfield code="v">3195</marc:subfield> + </marc:datafield> + <marc:datafield tag="454" ind1="" ind2="1"> + <marc:subfield code="t">Fräulein Else</marc:subfield> + </marc:datafield> + <marc:datafield tag="608" ind1="" ind2=""> + <marc:subfield code="3">PPN028490215</marc:subfield> + <marc:subfield code="a">Nouvelles + autrichiennes</marc:subfield> + <marc:subfield code="z">1870-1914</marc:subfield> + <marc:subfield code="3">PPN029051428</marc:subfield> + <marc:subfield code="x">Traductions + françaises</marc:subfield> + <marc:subfield code="2">rameau</marc:subfield> + </marc:datafield> + <marc:datafield tag="608" ind1="" ind2=""> + <marc:subfield code="3">PPN028490215</marc:subfield> + <marc:subfield code="a">Nouvelles + autrichiennes</marc:subfield> + <marc:subfield code="z">1900-1945</marc:subfield> + <marc:subfield code="3">PPN029051428</marc:subfield> + <marc:subfield code="x">Traductions + françaises</marc:subfield> + <marc:subfield code="2">rameau</marc:subfield> + </marc:datafield> + <marc:datafield tag="686" ind1="" ind2=""> + <marc:subfield code="a">831 SCHN</marc:subfield> + <marc:subfield code="2">CDU-UPVM</marc:subfield> + </marc:datafield> + <marc:datafield tag="700" ind1="" ind2="1"> + <marc:subfield code="3">PPN027127869</marc:subfield> + <marc:subfield code="a">Schnitzler</marc:subfield> + <marc:subfield code="b">Arthur</marc:subfield> + <marc:subfield code="f">1862-1931</marc:subfield> + <marc:subfield code="4">070</marc:subfield> + </marc:datafield> + <marc:datafield tag="702" ind1="" ind2="1"> + <marc:subfield code="3">PPN026789035</marc:subfield> + <marc:subfield code="a">Christophe</marc:subfield> + <marc:subfield code="b">Henri</marc:subfield> + <marc:subfield code="f">1945-....</marc:subfield> + <marc:subfield code="4">730</marc:subfield> + </marc:datafield> + <marc:datafield tag="702" ind1="" ind2="1"> + <marc:subfield code="3">PPN026932369</marc:subfield> + <marc:subfield code="a">Jaccard</marc:subfield> + <marc:subfield code="b">Roland</marc:subfield> + <marc:subfield code="f">1941-....</marc:subfield> + <marc:subfield code="4">080</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="3"> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">Abes</marc:subfield> + <marc:subfield code="c">20140819</marc:subfield> + <marc:subfield code="g">AFNOR</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="3"> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">BN</marc:subfield> + <marc:subfield code="c">19990129</marc:subfield> + <marc:subfield code="g">AFNOR</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="3"> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">SF</marc:subfield> + <marc:subfield code="c">19990209</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="1"> + <marc:subfield code="a">US</marc:subfield> + <marc:subfield code="b">OCLC</marc:subfield> + <marc:subfield code="g">AACR2</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="2"> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">AUROC</marc:subfield> + </marc:datafield> + <marc:datafield tag="003" ind1="" ind2=""> + <marc:subfield code="a"> + http://www.sudoc.fr/002891522</marc:subfield> + </marc:datafield> + <marc:datafield tag="903" ind1="" ind2=""> + <marc:subfield code="a">Littérature Romans + étrangers</marc:subfield> + </marc:datafield> + <marc:datafield tag="903" ind1="" ind2=""> + <marc:subfield code="a">Livres en format + poche</marc:subfield> + </marc:datafield> + <marc:datafield tag="903" ind1="" ind2=""> + <marc:subfield code="a">Oeuvres littéraires + classiques</marc:subfield> + </marc:datafield> + <marc:datafield tag="947" ind1="" ind2=""> + <marc:subfield code="c">3.00</marc:subfield> + </marc:datafield> + </marc:record> + </metadata> + </record> + <record> + <header> + <identifier>SCD01-406309</identifier> + <datestamp>2014-08-20</datestamp> + <setSpec>SCD01</setSpec> + </header> + <metadata> + <marc:record xmlns:marc="http://www.loc.gov/MARC21/slim" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"> + + <marc:leader>cam2 2200385 450</marc:leader> + <marc:controlfield tag="001"> + PPN121800512</marc:controlfield> + <marc:controlfield tag="005"> + 20140819135834.000</marc:controlfield> + <marc:datafield tag="010" ind1="" ind2=""> + <marc:subfield code="a"> + 978-2-7117-7509-5</marc:subfield> + <marc:subfield code="b">br.</marc:subfield> + <marc:subfield code="d">23 €</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a"> + (OCoLC)423568671</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">ALP406309</marc:subfield> + </marc:datafield> + <marc:datafield tag="073" ind1="" ind2="1"> + <marc:subfield code="a">9782711775095</marc:subfield> + </marc:datafield> + <marc:datafield tag="100" ind1="" ind2=""> + <marc:subfield code="a"> + 20080226d2008----k--y0frey50------ba</marc:subfield> + </marc:datafield> + <marc:datafield tag="101" ind1="0" ind2=""> + <marc:subfield code="a">fre</marc:subfield> + </marc:datafield> + <marc:datafield tag="102" ind1="" ind2=""> + <marc:subfield code="a">FR</marc:subfield> + </marc:datafield> + <marc:datafield tag="105" ind1="" ind2=""> + <marc:subfield code="a">a---a---001yy</marc:subfield> + </marc:datafield> + <marc:datafield tag="106" ind1="" ind2=""> + <marc:subfield code="a">r</marc:subfield> + </marc:datafield> + <marc:datafield tag="200" ind1="1" ind2=""> + <marc:subfield code="a">Mathématiques pour économistes + débutants</marc:subfield> + <marc:subfield code="b">Texte imprimé</marc:subfield> + <marc:subfield code="f">Patricia + Martin-Wolczyk,...</marc:subfield> + </marc:datafield> + <marc:datafield tag="205" ind1="" ind2=""> + <marc:subfield code="a">2e édition</marc:subfield> + </marc:datafield> + <marc:datafield tag="210" ind1="" ind2=""> + <marc:subfield code="a">Paris</marc:subfield> + <marc:subfield code="c">Vuibert</marc:subfield> + <marc:subfield code="d">impr. 2008</marc:subfield> + </marc:datafield> + <marc:datafield tag="215" ind1="" ind2=""> + <marc:subfield code="a">1 vol. (V-241 + p.)</marc:subfield> + <marc:subfield code="c">graph., fig., couv. ill. en + coul.</marc:subfield> + <marc:subfield code="d">24 cm</marc:subfield> + </marc:datafield> + <marc:datafield tag="225" ind1="2" ind2=""> + <marc:subfield code="a">Dyna'sup</marc:subfield> + <marc:subfield code="i">Série Économie</marc:subfield> + </marc:datafield> + <marc:datafield tag="305" ind1="" ind2=""> + <marc:subfield code="a">Autre(s) tirage(s) : + 2011</marc:subfield> + </marc:datafield> + <marc:datafield tag="312" ind1="" ind2=""> + <marc:subfield code="a">La couverture porte en plus : + "Tout pour réussir : l'essentiel du cours, un QCM, des + conseils méthodologiques, des sujets, des plans, des + corrigés"</marc:subfield> + </marc:datafield> + <marc:datafield tag="320" ind1="" ind2=""> + <marc:subfield code="a">Bibliogr. p. [233]. Notes + bibliogr. Index</marc:subfield> + </marc:datafield> + <marc:datafield tag="330" ind1="" ind2=""> + <marc:subfield code="a">Présentation des outils + mathématiques de base nécessaires à l'apprentissage de + la microéconomie, de la macroéconomie et de l'économie + financière. Propose 40 applications corrigées, des + sujets d'examen et 100 questions de + QCM.</marc:subfield> + </marc:datafield> + <marc:datafield tag="410" ind1="" ind2="1"> + <marc:subfield code="1">001PPN057913722</marc:subfield> + <marc:subfield code="t">Dyna'sup. Série + Économie</marc:subfield> + <marc:subfield code="x">1622-6399</marc:subfield> + </marc:datafield> + <marc:datafield tag="606" ind1="" ind2=""> + <marc:subfield code="3">PPN02733743X</marc:subfield> + <marc:subfield code="a">Mathématiques + économiques</marc:subfield> + <marc:subfield code="2">rameau</marc:subfield> + </marc:datafield> + <marc:datafield tag="606" ind1="" ind2=""> + <marc:subfield code="3">PPN027232751</marc:subfield> + <marc:subfield code="a">Économétrie</marc:subfield> + <marc:subfield code="2">rameau</marc:subfield> + </marc:datafield> + <marc:datafield tag="606" ind1="" ind2=""> + <marc:subfield code="3">PPN027296539</marc:subfield> + <marc:subfield code="a">Statistique + mathématique</marc:subfield> + <marc:subfield code="2">rameau</marc:subfield> + </marc:datafield> + <marc:datafield tag="606" ind1="" ind2=""> + <marc:subfield code="3">PPN027241289</marc:subfield> + <marc:subfield code="a">Probabilités</marc:subfield> + <marc:subfield code="2">rameau</marc:subfield> + </marc:datafield> + <marc:datafield tag="686" ind1="" ind2=""> + <marc:subfield code="a">510</marc:subfield> + <marc:subfield code="2">CDU-UPVM</marc:subfield> + </marc:datafield> + <marc:datafield tag="700" ind1="" ind2="1"> + <marc:subfield code="3">PPN086325957</marc:subfield> + <marc:subfield code="a">Martin-Wolczyk</marc:subfield> + <marc:subfield code="b">Patricia</marc:subfield> + <marc:subfield code="4">070</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="3"> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">Abes</marc:subfield> + <marc:subfield code="c">20140819</marc:subfield> + <marc:subfield code="g">AFNOR</marc:subfield> + </marc:datafield> + <marc:datafield tag="003" ind1="" ind2=""> + <marc:subfield code="a"> + http://www.sudoc.fr/121800512</marc:subfield> + </marc:datafield> + </marc:record> + </metadata> + </record> + <record> + <header> + <identifier>SCD01-244322</identifier> + <datestamp>2014-08-20</datestamp> + <setSpec>SCD01</setSpec> + </header> + <metadata> + <marc:record xmlns:marc="http://www.loc.gov/MARC21/slim" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"> + + <marc:leader>cam0 2200361 450</marc:leader> + <marc:controlfield tag="001"> + PPN085276359</marc:controlfield> + <marc:controlfield tag="005"> + 20140819114507.000</marc:controlfield> + <marc:datafield tag="010" ind1="" ind2=""> + <marc:subfield code="a">2-7081-3304-7</marc:subfield> + <marc:subfield code="b">br.</marc:subfield> + <marc:subfield code="d">14 EUR</marc:subfield> + </marc:datafield> + <marc:datafield tag="010" ind1="" ind2=""> + <marc:subfield code="a"> + 978-2-7081-3304-4</marc:subfield> + <marc:subfield code="b">br.</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a"> + (OCoLC)420488591</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">ALP000244322</marc:subfield> + </marc:datafield> + <marc:datafield tag="073" ind1="" ind2="1"> + <marc:subfield code="a">9782708133044</marc:subfield> + </marc:datafield> + <marc:datafield tag="100" ind1="" ind2=""> + <marc:subfield code="a"> + 20050401d2005----k--y0frey50------ba</marc:subfield> + </marc:datafield> + <marc:datafield tag="101" ind1="0" ind2=""> + <marc:subfield code="a">fre</marc:subfield> + </marc:datafield> + <marc:datafield tag="102" ind1="" ind2=""> + <marc:subfield code="a">FR</marc:subfield> + </marc:datafield> + <marc:datafield tag="105" ind1="" ind2=""> + <marc:subfield code="a">a---a---001yy</marc:subfield> + </marc:datafield> + <marc:datafield tag="106" ind1="" ind2=""> + <marc:subfield code="a">r</marc:subfield> + </marc:datafield> + <marc:datafield tag="200" ind1="1" ind2=""> + <marc:subfield code="a"><<La >>note de + synthèse</marc:subfield> + <marc:subfield code="b">Texte imprimé</marc:subfield> + <marc:subfield code="f">Jean-François Guédon, Françoise + Laborde, Pierre-François Guédon</marc:subfield> + <marc:subfield code="g">[préface, Marie-Josèphe + Gourmelin-Berchoud]</marc:subfield> + </marc:datafield> + <marc:datafield tag="205" ind1="" ind2=""> + <marc:subfield code="a">Troisième + édition</marc:subfield> + <marc:subfield code="b">2e tirage 2009</marc:subfield> + </marc:datafield> + <marc:datafield tag="210" ind1="" ind2=""> + <marc:subfield code="a">Paris</marc:subfield> + <marc:subfield code="c">Éditions d' + Organisation</marc:subfield> + <marc:subfield code="d">DL 2005</marc:subfield> + </marc:datafield> + <marc:datafield tag="215" ind1="" ind2=""> + <marc:subfield code="a">1 vol. (XVI-316 + p.)</marc:subfield> + <marc:subfield code="c">tabl., couv. en + coul.</marc:subfield> + <marc:subfield code="d">20 cm</marc:subfield> + </marc:datafield> + <marc:datafield tag="320" ind1="" ind2=""> + <marc:subfield code="a">Bibliogr. p. 311-312. + Index</marc:subfield> + </marc:datafield> + <marc:datafield tag="606" ind1="" ind2=""> + <marc:subfield code="3">PPN033866864</marc:subfield> + <marc:subfield code="a">Synthèse de + textes</marc:subfield> + <marc:subfield code="3">PPN027790045</marc:subfield> + <marc:subfield code="x">Guides pratiques et + mémentos</marc:subfield> + <marc:subfield code="2">rameau</marc:subfield> + </marc:datafield> + <marc:datafield tag="606" ind1="" ind2=""> + <marc:subfield code="3">PPN027360059</marc:subfield> + <marc:subfield code="a">Rédaction de rapports, notes et + comptes rendus</marc:subfield> + <marc:subfield code="3">PPN027790045</marc:subfield> + <marc:subfield code="x">Guides pratiques et + mémentos</marc:subfield> + <marc:subfield code="2">rameau</marc:subfield> + </marc:datafield> + <marc:datafield tag="606" ind1="" ind2=""> + <marc:subfield code="3">PPN040685144</marc:subfield> + <marc:subfield code="a">Communication</marc:subfield> + <marc:subfield code="2">fmesh</marc:subfield> + </marc:datafield> + <marc:datafield tag="606" ind1="" ind2=""> + <marc:subfield code="3">PPN040800520</marc:subfield> + <marc:subfield code="a">Écriture</marc:subfield> + <marc:subfield code="2">fmesh</marc:subfield> + </marc:datafield> + <marc:datafield tag="686" ind1="" ind2=""> + <marc:subfield code="a">374.1</marc:subfield> + <marc:subfield code="2">CDU-UPVM</marc:subfield> + </marc:datafield> + <marc:datafield tag="700" ind1="" ind2="1"> + <marc:subfield code="3">PPN026905752</marc:subfield> + <marc:subfield code="a">Guédon</marc:subfield> + <marc:subfield code="b">Jean-François</marc:subfield> + <marc:subfield code="f">1942-....</marc:subfield> + <marc:subfield code="4">070</marc:subfield> + </marc:datafield> + <marc:datafield tag="701" ind1="" ind2="1"> + <marc:subfield code="3">PPN03011988X</marc:subfield> + <marc:subfield code="a">Laborde</marc:subfield> + <marc:subfield code="b">Françoise</marc:subfield> + <marc:subfield code="4">070</marc:subfield> + </marc:datafield> + <marc:datafield tag="701" ind1="" ind2="1"> + <marc:subfield code="3">PPN048926213</marc:subfield> + <marc:subfield code="a">Guédon</marc:subfield> + <marc:subfield code="b">Pierre-François</marc:subfield> + <marc:subfield code="4">070</marc:subfield> + </marc:datafield> + <marc:datafield tag="702" ind1="" ind2="1"> + <marc:subfield code="3">PPN029563054</marc:subfield> + <marc:subfield code="a">Berchoud</marc:subfield> + <marc:subfield code="b">Marie-Josèphe</marc:subfield> + <marc:subfield code="4">080</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="3"> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">Abes</marc:subfield> + <marc:subfield code="c">20140819</marc:subfield> + <marc:subfield code="g">AFNOR</marc:subfield> + </marc:datafield> + <marc:datafield tag="003" ind1="" ind2=""> + <marc:subfield code="a"> + http://www.sudoc.fr/085276359</marc:subfield> + </marc:datafield> + </marc:record> + </metadata> + </record> + <record> + <header> + <identifier>SCD01-241221</identifier> + <datestamp>2014-08-20</datestamp> + <setSpec>SCD01</setSpec> + </header> + <metadata> + <marc:record xmlns:marc="http://www.loc.gov/MARC21/slim" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"> + + <marc:leader>cam2 2200421 450</marc:leader> + <marc:controlfield tag="001"> + PPN112304680</marc:controlfield> + <marc:controlfield tag="005"> + 20140819101540.000</marc:controlfield> + <marc:datafield tag="010" ind1="" ind2=""> + <marc:subfield code="a">0-415-32733-4</marc:subfield> + <marc:subfield code="b">Rel.</marc:subfield> + </marc:datafield> + <marc:datafield tag="010" ind1="" ind2=""> + <marc:subfield code="a">0-415-32734-2</marc:subfield> + <marc:subfield code="b">Br.</marc:subfield> + </marc:datafield> + <marc:datafield tag="020" ind1="" ind2=""> + <marc:subfield code="a">US</marc:subfield> + <marc:subfield code="b">2005003655</marc:subfield> + </marc:datafield> + <marc:datafield tag="020" ind1="" ind2=""> + <marc:subfield code="a">GB</marc:subfield> + <marc:subfield code="b">A454660</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a"> + (OCoLC)232346232</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">ALP241221</marc:subfield> + </marc:datafield> + <marc:datafield tag="100" ind1="" ind2=""> + <marc:subfield code="a"> + 20070202d2006----k--y0frey50------ba</marc:subfield> + </marc:datafield> + <marc:datafield tag="101" ind1="0" ind2=""> + <marc:subfield code="a">eng</marc:subfield> + </marc:datafield> + <marc:datafield tag="102" ind1="" ind2=""> + <marc:subfield code="a">GB</marc:subfield> + </marc:datafield> + <marc:datafield tag="105" ind1="" ind2=""> + <marc:subfield code="a">a---z---001yy</marc:subfield> + </marc:datafield> + <marc:datafield tag="106" ind1="" ind2=""> + <marc:subfield code="a">r</marc:subfield> + </marc:datafield> + <marc:datafield tag="200" ind1="1" ind2=""> + <marc:subfield code="a">Cities and + consumption</marc:subfield> + <marc:subfield code="b">Texte imprimé</marc:subfield> + <marc:subfield code="f">Mark Jayne</marc:subfield> + </marc:datafield> + <marc:datafield tag="210" ind1="" ind2=""> + <marc:subfield code="a">London</marc:subfield> + <marc:subfield code="a">New York</marc:subfield> + <marc:subfield code="c">Routledge</marc:subfield> + <marc:subfield code="d">cop. 2006</marc:subfield> + </marc:datafield> + <marc:datafield tag="215" ind1="" ind2=""> + <marc:subfield code="a">1 vol. (XII, 244 + p.)</marc:subfield> + <marc:subfield code="c">ill., couv. + ill.</marc:subfield> + <marc:subfield code="d">24 cm</marc:subfield> + </marc:datafield> + <marc:datafield tag="225" ind1="2" ind2=""> + <marc:subfield code="a">Routledge critical + introductions to urbanism and the city</marc:subfield> + </marc:datafield> + <marc:datafield tag="320" ind1="" ind2=""> + <marc:subfield code="a">Bibliogr. p. [225]-239. + Index</marc:subfield> + </marc:datafield> + <marc:datafield tag="410" ind1="" ind2="1"> + <marc:subfield code="1">001PPN113306946</marc:subfield> + <marc:subfield code="t">Routledge critical + introductions to urbanism and the city</marc:subfield> + </marc:datafield> + <marc:datafield tag="606" ind1="" ind2=""> + <marc:subfield code="3">PPN027255034</marc:subfield> + <marc:subfield code="a">Urbanisation</marc:subfield> + <marc:subfield code="3">PPN03020934X</marc:subfield> + <marc:subfield code="x">Manuels d'enseignement + supérieur</marc:subfield> + <marc:subfield code="2">rameau</marc:subfield> + </marc:datafield> + <marc:datafield tag="606" ind1="" ind2=""> + <marc:subfield code="3">PPN027260593</marc:subfield> + <marc:subfield code="a">Consommation</marc:subfield> + <marc:subfield code="3">PPN03020934X</marc:subfield> + <marc:subfield code="x">Manuels d'enseignement + supérieur</marc:subfield> + <marc:subfield code="2">rameau</marc:subfield> + </marc:datafield> + <marc:datafield tag="606" ind1="" ind2=""> + <marc:subfield code="3">PPN027467368</marc:subfield> + <marc:subfield code="a">Économie + urbaine</marc:subfield> + <marc:subfield code="3">PPN03020934X</marc:subfield> + <marc:subfield code="x">Manuels d'enseignement + supérieur</marc:subfield> + <marc:subfield code="2">rameau</marc:subfield> + </marc:datafield> + <marc:datafield tag="606" ind1="" ind2=""> + <marc:subfield code="3">PPN027255204</marc:subfield> + <marc:subfield code="a">Vie urbaine</marc:subfield> + <marc:subfield code="3">PPN03020934X</marc:subfield> + <marc:subfield code="x">Manuels d'enseignement + supérieur</marc:subfield> + <marc:subfield code="2">rameau</marc:subfield> + </marc:datafield> + <marc:datafield tag="686" ind1="" ind2=""> + <marc:subfield code="a">305.71</marc:subfield> + <marc:subfield code="2">CDU-UPVM</marc:subfield> + </marc:datafield> + <marc:datafield tag="700" ind1="" ind2="1"> + <marc:subfield code="3">PPN086156489</marc:subfield> + <marc:subfield code="a">Jayne</marc:subfield> + <marc:subfield code="b">Mark</marc:subfield> + <marc:subfield code="f">1970-....</marc:subfield> + <marc:subfield code="4">070</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="3"> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">Abes</marc:subfield> + <marc:subfield code="c">20140819</marc:subfield> + <marc:subfield code="g">AFNOR</marc:subfield> + </marc:datafield> + <marc:datafield tag="003" ind1="" ind2=""> + <marc:subfield code="a"> + http://www.sudoc.fr/112304680</marc:subfield> + </marc:datafield> + </marc:record> + </metadata> + </record> + <record> + <header> + <identifier>SCD01-606714</identifier> + <datestamp>2014-08-20</datestamp> + <setSpec>SCD01</setSpec> + </header> + <metadata> + <marc:record xmlns:marc="http://www.loc.gov/MARC21/slim" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"> + + <marc:leader>cam0 2200457 450</marc:leader> + <marc:controlfield tag="001"> + PPN153680997</marc:controlfield> + <marc:controlfield tag="005"> + 20140819094838.000</marc:controlfield> + <marc:datafield tag="010" ind1="" ind2=""> + <marc:subfield code="a"> + 978-2-200-27265-4</marc:subfield> + <marc:subfield code="b">br.</marc:subfield> + <marc:subfield code="d">25 EUR</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a"> + (OCoLC)758552778</marc:subfield> + </marc:datafield> + <marc:datafield tag="035" ind1="" ind2=""> + <marc:subfield code="a">ALP000606714</marc:subfield> + </marc:datafield> + <marc:datafield tag="073" ind1="" ind2="1"> + <marc:subfield code="a">9782200272654</marc:subfield> + </marc:datafield> + <marc:datafield tag="100" ind1="" ind2=""> + <marc:subfield code="a"> + 20110718d2011----k--y0frey50------ba</marc:subfield> + </marc:datafield> + <marc:datafield tag="101" ind1="1" ind2=""> + <marc:subfield code="a">fre</marc:subfield> + <marc:subfield code="c">eng</marc:subfield> + <marc:subfield code="d">fre</marc:subfield> + </marc:datafield> + <marc:datafield tag="102" ind1="" ind2=""> + <marc:subfield code="a">FR</marc:subfield> + </marc:datafield> + <marc:datafield tag="105" ind1="" ind2=""> + <marc:subfield code="a">y---a---000cy</marc:subfield> + </marc:datafield> + <marc:datafield tag="106" ind1="" ind2=""> + <marc:subfield code="a">r</marc:subfield> + </marc:datafield> + <marc:datafield tag="200" ind1="1" ind2=""> + <marc:subfield code="a">Démocratie et + éducation</marc:subfield> + <marc:subfield code="b">Texte imprimé</marc:subfield> + <marc:subfield code="a">suivi de Expérience et + éducation</marc:subfield> + <marc:subfield code="f">John Dewey</marc:subfield> + <marc:subfield code="g">[publié sous la direction de + François de Singly]</marc:subfield> + <marc:subfield code="g">introduction de Denis + Meuret</marc:subfield> + <marc:subfield code="g">préface de Joëlle + Zask</marc:subfield> + <marc:subfield code="g">présentation de Gérard + Deledalle</marc:subfield> + </marc:datafield> + <marc:datafield tag="210" ind1="" ind2=""> + <marc:subfield code="a">Paris</marc:subfield> + <marc:subfield code="c">Armand Colin</marc:subfield> + <marc:subfield code="d">impr. 2011</marc:subfield> + </marc:datafield> + <marc:datafield tag="215" ind1="" ind2=""> + <marc:subfield code="a">1 vol. (518 p.)</marc:subfield> + <marc:subfield code="c">couv. ill. en + coul.</marc:subfield> + <marc:subfield code="d">20 cm</marc:subfield> + </marc:datafield> + <marc:datafield tag="304" ind1="" ind2=""> + <marc:subfield code="a">Traduit de : "Democracy and + education, an introduction to the philosophy of + education" et de "Experience and + education"</marc:subfield> + </marc:datafield> + <marc:datafield tag="305" ind1="" ind2=""> + <marc:subfield code="a">Autre tirage : 2013, + 2014</marc:subfield> + </marc:datafield> + <marc:datafield tag="320" ind1="" ind2=""> + <marc:subfield code="a">Bibliogr. à la fin de certains + chapitres. Notes bibliogr. en bas de + page</marc:subfield> + </marc:datafield> + <marc:datafield tag="330" ind1="" ind2=""> + <marc:subfield code="a">Cette édition rassemble + Démocratie et éducation, traité de pédagogie paru en + 1916 et Expérience et éducation paru en 1938. Ces + textes proposent un enseignement qui fait autant de + place aux activités manuelles qu'aux exercices de + l'esprit, et qui doit permettre à l'enfant de + poursuivre son éducation après l'école.</marc:subfield> + </marc:datafield> + <marc:datafield tag="423" ind1="" ind2="1"> + <marc:subfield code="t">Expérience et + éducation</marc:subfield> + </marc:datafield> + <marc:datafield tag="454" ind1="" ind2="1"> + <marc:subfield code="t">Democracy and + education</marc:subfield> + <marc:subfield code="o">an introduction to the + philosophy of education</marc:subfield> + </marc:datafield> + <marc:datafield tag="454" ind1="" ind2="1"> + <marc:subfield code="t">Experience and + education</marc:subfield> + </marc:datafield> + <marc:datafield tag="606" ind1="" ind2=""> + <marc:subfield code="3">PPN027225186</marc:subfield> + <marc:subfield code="a">Éducation</marc:subfield> + <marc:subfield code="x">Finalités</marc:subfield> + <marc:subfield code="2">rameau</marc:subfield> + </marc:datafield> + <marc:datafield tag="606" ind1="" ind2=""> + <marc:subfield code="3">PPN027278204</marc:subfield> + <marc:subfield code="a">Éducation</marc:subfield> + <marc:subfield code="x">Philosophie</marc:subfield> + <marc:subfield code="2">rameau</marc:subfield> + </marc:datafield> + <marc:datafield tag="606" ind1="" ind2=""> + <marc:subfield code="3">PPN027241688</marc:subfield> + <marc:subfield code="a">Psychologie de + l'éducation</marc:subfield> + <marc:subfield code="2">rameau</marc:subfield> + </marc:datafield> + <marc:datafield tag="686" ind1="" ind2=""> + <marc:subfield code="a">CDU-UPVM</marc:subfield> + <marc:subfield code="2">371</marc:subfield> + </marc:datafield> + <marc:datafield tag="700" ind1="" ind2="1"> + <marc:subfield code="3">PPN02728722X</marc:subfield> + <marc:subfield code="a">Dewey</marc:subfield> + <marc:subfield code="b">John</marc:subfield> + <marc:subfield code="f">1859-1952</marc:subfield> + <marc:subfield code="4">070</marc:subfield> + </marc:datafield> + <marc:datafield tag="702" ind1="" ind2="1"> + <marc:subfield code="3">PPN027140180</marc:subfield> + <marc:subfield code="a">Singly</marc:subfield> + <marc:subfield code="b">François de</marc:subfield> + <marc:subfield code="f">1948-...</marc:subfield> + <marc:subfield code="4">651</marc:subfield> + </marc:datafield> + <marc:datafield tag="702" ind1="" ind2="1"> + <marc:subfield code="3">PPN035200243</marc:subfield> + <marc:subfield code="a">Meuret</marc:subfield> + <marc:subfield code="b">Denis</marc:subfield> + <marc:subfield code="4">080</marc:subfield> + </marc:datafield> + <marc:datafield tag="702" ind1="" ind2="1"> + <marc:subfield code="3">PPN052495442</marc:subfield> + <marc:subfield code="a">Zask</marc:subfield> + <marc:subfield code="b">Joëlle</marc:subfield> + <marc:subfield code="4">080</marc:subfield> + </marc:datafield> + <marc:datafield tag="702" ind1="" ind2="1"> + <marc:subfield code="3">PPN026820269</marc:subfield> + <marc:subfield code="a">Deledalle</marc:subfield> + <marc:subfield code="b">Gérard</marc:subfield> + <marc:subfield code="f">1921-2003</marc:subfield> + <marc:subfield code="4">080</marc:subfield> + </marc:datafield> + <marc:datafield tag="801" ind1="" ind2="3"> + <marc:subfield code="a">FR</marc:subfield> + <marc:subfield code="b">Abes</marc:subfield> + <marc:subfield code="c">20140819</marc:subfield> + <marc:subfield code="g">AFNOR</marc:subfield> + </marc:datafield> + <marc:datafield tag="003" ind1="" ind2=""> + <marc:subfield code="a"> + http://www.sudoc.fr/153680997</marc:subfield> + </marc:datafield> + <marc:datafield tag="902" ind1="" ind2=""> + <marc:subfield code="a">Public spécifique - Public + motivé</marc:subfield> + </marc:datafield> + <marc:datafield tag="903" ind1="" ind2=""> + <marc:subfield code="a">Enseignement, Education - + Aspects philosophiques et pédagogiques - Méthodes + pédagogiques</marc:subfield> + </marc:datafield> + <marc:datafield tag="903" ind1="" ind2=""> + <marc:subfield code="a">Travaux universitaires ou + d'érudition - SHS</marc:subfield> + </marc:datafield> + <marc:datafield tag="947" ind1="" ind2=""> + <marc:subfield code="c">25.00</marc:subfield> + </marc:datafield> + <marc:datafield tag="969" ind1="" ind2=""> + <marc:subfield code="a">1</marc:subfield> + <marc:subfield code="h">1</marc:subfield> + </marc:datafield> + </marc:record> + </metadata> + </record> + + </ListRecords> +</OAI-PMH> diff --git a/tests/library/Class/Cosmogramme/Integration/records.txt b/tests/library/Class/Cosmogramme/Integration/records.txt new file mode 100644 index 0000000000000000000000000000000000000000..97b637a02cf022f000f5c91487aec21f07c31858 --- /dev/null +++ b/tests/library/Class/Cosmogramme/Integration/records.txt @@ -0,0 +1,105 @@ +01321nam0 22003011 450 00100090000001000250000910000260003410100130006010500650007320001220013821000270026021500140028721500450030122500170034667600060036368600110036970000170038070100460039770200440044380100510048783000210053883500060055993000250056593200160059093200160060693200110062299503860063300012445 a2-07-050157-4d10,06 a19991209 e 1frea01 ba0 afrecfre 1[1999-12-09-00.00.00.000000][2006-08-25-00.00.00.000000][][]1 aLe Portrait de Dorian GrayfOscar WILDEgTrad. de l'anglais par Edmond JALOUXgTrad. de l'anglais par Félix FRAPEREAU aPariscGallimardd1981 a1 vol.11 a253 p.3253ccouv. ill. en coul.d21 cm. 2a1000 Soleils 10 aRO WIL10aWILDEbOscar10aFRAPEREAUbFélixgTrad. de l'anglais5TRG10aJALOUXbEdmondgTrad. de l'anglais5TRG aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADO2adolescents aR aRoman adolescent4RO aPhilosophie aFantastique aVanité aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0113177*81gL-h011317kRO WILm20141104opqeram1[ALP][Librairie ALPHABET][ORLEANS][45000][14, Rue de la République][FABRICE, ISABELLE, MARYLE][38.54.17.59][0,00][][][][][][][][][][][][][][][][][]2[ARE][Roman Adolescent][0][1][Livre disponible - Romans Fonds Adolescent][0][0][0][0]310,0691993-05-27-00.00.00.0000005113176BIB01068nam0 22002531 450 00100090000001000180000910000260002710100130005310500650006620000780013121000240020921500070023321500580024022500170029830300190031567600060033470000290034070200380036980100510040783000230045883500060048193000130048799503140050000016448 a2-218-24667-8 a19991209 b 1frea01 ba0 afrecfre 1[1999-12-09-00.00.00.000000][2007-02-07-00.00.00.000000][][]1 aLes Trésors des cheminsfCatherine DOLTO-TOLITCHgIll. par Joëlle BOUCHER aPariscHatierd1989 4np anon paginécill. en coul. couv. ill. en coul.d19 cm. 2aMine de rien alivre cartonné 1010aDOLTO-TOLITCHbCatherine10aBOUCHERbJoëllegIllustré par5IL aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0149777*81gL-h014977m20141104opqbram1[DON][Don][][45][][][][0,00][][][][][][][][][mobilier bibliothèque][][][][][][][][]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]91995-11-29-00.00.00.0000005149776BIB01674nam0 22003611 450 00100090000001000250000910000260003410100130006010500650007320001630013821000180030121500590031961000160037861000140039461000140040861000160042261000280043861000250046661000170049161000130050867600470052168600140056870000380058270200380062070200380065870200400069670200400073680100510077683000230082783500060085093000300085699504260088600022315 a2-215-06225-8d10,51 a19991209 b 1frea01 ba0 afrecfre 1[1999-12-09-00.00.00.000000][2007-05-11-00.00.00.000000][][]1 aL'Imagerie de l'histoirefConcept. Emilie BEAUMONTgTexte de Marie-Renée PIMONTgIll. par Isabella MISSOgIll. par Sophie TOUSSAINTgIll. par Isabelle ROGNONI cFleurusd1999 a125 p.3125cIll. en coul. couv. ill. en coul.d23 cm. aPréhistoire aAntiquité aMoyen Age aRenaissance aHenri IV, roi de France aRévolution française aXXème siècle aHistoire a909tHistoire universelle. Civilisation11 a909 BEA B10aBEAUMONTbEmiliegConception5CON10aPIMONTbMarie-RenéegTexte de5TX10aMISSObIsabellagIllustré par5IL10aTOUSSAINTbSophiegIllustré par5IL10aROGNONIbIsabellegIllustré par5IL aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aD aDocumentaire jeunesse4DJ aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0207167*81gL-h020716k909 BEA Bm20141104opqbram1[LOD][Librairie LODDE][ORLEANS][45000][Rue Jeanne d'Arc][MARYLENE, ISABELLE][02.38.65.43.43][15,00][][][][][][][][][fournitures mat. audio][][][][][][][][]2[ADJM][Documentaire "Jardin des Mots"][0][1][Livre disponible : Fonds documentaire Au Jardin des Mots][0][0][0][0]310,5191999-11-19-00.00.00.0000005207166BIB01277oam2 22003011 450 00100090000001000250000902100070003410000260004110100080006710500650007520001160014021000130025621500070026921500580027646100190033467600060035368600060035970000180036570200430038370200410042680100510046783000230051883500060054193000130054793200100056093200090057099503960057900022329 a3-314-21211-9d12,04 aFR a19991209 b 1frea01 ba0 afre 1[1999-12-09-00.00.00.000000][2006-08-10-00.00.00.000000][][]1 aPlume et le chien de traîneaufHans de BEERgTrad. par Anne-Marie CHAPOUTONgTrad. par Géraldine ELSCHNERv232 cNord-Sud 4np anon paginécIll. en coul. couv. ill. en coul.d30 cm. tPlumev239031 10 aB10aBEERbHans de10aCHAPOUTONbAnne-MariegTraduit par5TR10aELSCHNERbGéraldinegTraduit par5TR aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aChien aOurs aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0207937*81gL-h020793kBm20141104opqbram1[LOD][Librairie LODDE][ORLEANS][45000][Rue Jeanne d'Arc][MARYLENE, ISABELLE][02.38.65.43.43][15,00][][][][][][][][][fournitures mat. audio][][][][][][][][]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]313,5691999-11-19-00.00.00.0000005207936BIB00771nam1 22002651 450 00100090000001000100000902100070001910000260002610100080005210500650006020000860012521000130021121500070022421500580023167600060028968600060029570000180030170200430031970200410036280100510040383000230045483500060047793000130048393200090049600009031 d12,04 aFR a19991209 b 1frea01 ba0 afre 1[1999-12-09-00.00.00.000000][1999-12-09-00.00.00.000000][][]1 aPlumefHans de BEERgTrad. par Anne-Marie CHAPOUTONgTrad. par Géraldine ELSCHNER cNord-Sud 4np anon paginécill. en coul. couv. ill. en coul.d30 cm. 10 aB10aBEERbHans de10aCHAPOUTONbAnne-MariegTraduit par5TR10aELSCHNERbGéraldinegTraduit par5TR aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aOurs01874nje0 22004331 450 00100090000001000240000907100270003310000240006010500650008420000710014921000190022021500390023922500170027830100130029546400420030846400260035046400430037646400400041946400350045946400270049446400410052146400280056246400380059046400250062846400240065346400250067746400300070246400310073246400250076346400310078867600060081968600130082571000490083880100510088783500060093893000140094493400780095899504040103600301892 a5030073020921d7,6200a302092bHallmark2HALL a19991209 1frea01 ba 1[1999-12-09-00.00.00.000000][2009-06-09-00.00.00.000000][][]1 aTangofOrchestre THE BALLROOM DANCE ORCHESTRAbDC : Disque Compact cHallmarkd1995 a1 DC11c, (43.54)5[43.54]d13/14 2aCome dancing aS-0016221 aSanta MonicabTraditionneld(4.58)v11 aBlue tangod(2.48)v11 aLa PassionarabTraditionneld(2.28)v11 aLa Cumparsitad(2.30)v1fRODRIGUEZ1 aHernando's Hideawayd(2.26)v11 aA Media luzd(2.14)v11 aEl ToreadorbTraditionneld(2.20)v11 aTango veranod(1.43)v11 aEl PoetabTraditionneld(3.35)v11 aLa Palomad(3.14)v11 aJealousyd(3.06)v11 aOle Guapad(3.11)v11 aTango Op.165/2d(2.09)v11 aTango del Amord(2.015)v11 aEl Choclod(2.06)v11 aAdios Muchachosd(2.05)v1 10 a5.63 TAN10aTHE BALLROOM DANCE ORCHESTRAgOrchestre5ORC aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN aC aTango4TA a<5><63><><"Danse de salon" (tango, valse, charleston, etc...)><TAN>< >< > aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfS-0016227*81gS-h001622k5.63 TANm20141104opqsrje1[CDD][CDD/Digital Concept][CARRY-LE-ROUET][13620][7 Allée des Tilleuls][MR BEGOND PATRICK][02.38.55.66.51][0,00][][][][][][][][][mobilier bibliothèque][][][][][][][][]2[ACD][Disque Compact Adulte][0][1][CD disponible : Fonds Sonore Adulte][0][0][0][0]37,6291998-02-17-00.00.00.000000516226BIB01237oam2 22002771 450 00100090000001000240000902100070003310000260004010100080006610501170007420000890019121000330028021500460031322500270035930300190038646100420040567600060044770000200045370200360047380100510050983000230056083500060058393000130058993200090060299503480061100401796 a2-227-70496-9d3,33 aFR a20000619 b 1frea01 ba0 afre 1[2000-06-19-00.00.00.000000][2006-09-26-00.00.00.000000][2000-06-19-00.00.00.000000][1997-09-01-00.00.00.000000]1 aLes Animaux préférés de Petit Ours BrunfMarie AUBINAISgIll. par Danièle BOURv131 aPariscBayard Editionsd1997 cill. en coul. couv. ill. en coul.d15 cm. 2aLes petits répertoires alivre cartonné tPetit Ours Brun (cartonné)v13401795 1010aAUBINAISbMarie10aBOURbDanièlegIllustré par5IL aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aOurs aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0334757*81gL-h033475m20141104opqbram1[DON][Don][][45][][][][0,00][][][][][][][][][mobilier bibliothèque][][][][][][][][]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]33,3392009-04-10-00.00.00.00000042000-06-19-00.00.00.0000005334756BIB00679nam1 22002291 450 00100090000001000090000910000260001810100080004410500650005220000700011721000330018721500070022021500580022767600060028570000200029170200360031180100510034783000230039883500060042193000130042793200090044000401795 d3,33 a20000619 b 0frea01 ba0 afre 1[2000-06-19-00.00.00.000000][][2000-06-19-00.00.00.000000][]1 aPetit Ours Brun (cartonné)fMarie AUBINAISgIll. par Danièle BOUR aPariscBayard Editionsd1997 4np anon paginécill. en coul. couv. ill. en coul.d15 cm. 1010aAUBINAISbMarie10aBOURbDanièlegIllustré par5IL aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aOurs01506oam2 22003251 450 00100090000001000240000902100070003310000260004010100130006610501170007920001220019621000470031821500140036521500570037922500270043646100200046367600060048368600130048970000260050270200500052870200390057880100510061783000230066883500060069193000230069793200080072093200130072893200210074199504180076200404959 a2-01-200238-2d4,26 aFR a20010514 c 1frea01 ba1 afrecger 1[2001-05-14-00.00.00.000000][2007-08-16-00.00.00.000000][2001-05-14-00.00.00.000000][2001-02-01-00.00.00.000000]1 aMini au bord de merfChristine NOSTLINGERgTrad. de l'allemand par Marie-Claude AUGERgIll. par Claire LE GRANDv534 aParisb43 Quai de GrenellecHachette Livre a1 vol.11 a93 p.393cill. en coul. couv. ill. en coul.d18 cm. 2aBibliothèque Rosev518 tMiniv53404561 10 aJR NOS J10aNOSTLINGERbChristine10aAUGERbMarie-ClaudegTrad. de l'allemand5TRD10aLE GRANDbClairegIllustré par5IL aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1J2jaune (5-8 ans) aR aRoman jeunesse4JR aMer aVacances aRoman d'aventure aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0233347*81gL-h023334kJR NOS Jm20141104opqjram1[LOD][Librairie LODDE][ORLEANS][45000][Rue Jeanne d'Arc][MARYLENE, ISABELLE][02.38.65.43.43][15,00][][][][][][][][][fournitures mat. audio][][][][][][][][]2[ARJ][Roman Jeunesse][0][1][Livre disponible : Fonds Roman Jeunesse][0][0][0][0]33,6292001-05-14-00.00.00.00000042001-05-14-00.00.00.0000005233346BIB00906nam1 22002651 450 00100090000001000090000902100070001810000260002510100130005110500910006420001010015521000470025621500570030322500220036067600060038268600130038870000260040170200500042770200390047780100510051683000230056783500060059093000230059693200210061900404561 d4,26 aFR a20010404 c 1frea01 ba1 afrecger 1[2001-04-04-00.00.00.000000][2007-08-16-00.00.00.000000][2001-04-04-00.00.00.000000][]1 aMinifChristine NOSTLINGERgTrad. de l'allemand par Marie-Claude AUGERgIll. par Claire LE GRAND aParisb43 Quai de GrenellecHachette Livre a90 p.390cill. en coul. couv. ill. en coul.d18 cm. 2aBibliothèque Rose 10 aJR NOS J10aNOSTLINGERbChristine10aAUGERbMarie-ClaudegTrad. de l'allemand5TRD10aLE GRANDbClairegIllustré par5IL aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1J2jaune (5-8 ans) aR aRoman jeunesse4JR aRoman d'aventure01143nam0 22002411 450 00100090000001000240000902100070003310000260004010100130006610200070007910501170008620000360020321000480023921500460028730300190033367600060035280100510035883000230040983500060043293000130043893200110045199504390046200406347 a2-8460-7015-6d3,65 aFR a20020108 b 1frea01 ba0 afrecfre aFR 1[2002-01-08-00.00.00.000000][2007-03-05-00.00.00.000000][2002-01-08-00.00.00.000000][2000-09-01-00.00.00.000000]1 aPatache et les objets du jardin aParisb33 Rue du Petit-MusccPlay Bacd2000 cill. en coul. couv. ill. en coul.d16 cm. aLivre cartonné 10 aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aJardin aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0238697*81gL-h023869m20141104opqbram1[SYL][Sylemma-Andrieu][BRETEUIL CEDEX][6012][BP 06 6BONNEUIL LES EAUX][44-80-68-68][Mr Funschilling][0,00][][][][][][][00358992][][fournitures livres//écoles][][][][][][][][]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]33,3592002-01-08-00.00.00.00000042002-01-08-00.00.00.0000005238696BIB01489nam0 22003251 450 00100090000001000240000902100070003310000260004010100130006610200070007910200070008610501170009320000370021021000480024721000440029521500070033921500580034622500260040422500180043030300190044833001110046767600060057870200370058480100510062183000230067283500060069593000130070193200100071499504390072400409782 a2-8460-7101-2d4,00 aFR a20021019 b 1frea01 ba0 afrecfre aFR aFR 1[2002-10-19-00.00.00.000000][2007-03-13-00.00.00.000000][2002-10-19-00.00.00.000000][2001-11-01-00.00.00.000000]1 aLa VachefIll. par Fred TREMBLAY aParisb33 Rue du Petit-MusccPlay Bacd2001 aParisb33 Rue du Petit-MusccPetit Musc 4np anon paginécill. en coul. couv. ill. en coul.d16 cm. 2aDe la tête aux pattes 2aLe Petit Musc aLivre cartonné aDécouvrez grâce à un jeu de questions-réponses les premières notions sur les animaux préférés des enfants. 1010aTREMBLAYbFredgIllustré par5IL aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aVache aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0254327*81gL-h025432m20141104opqbram1[SYL][Sylemma-Andrieu][BRETEUIL CEDEX][6012][BP 06 6BONNEUIL LES EAUX][44-80-68-68][Mr Funschilling][0,00][][][][][][][00358992][][fournitures livres//écoles][][][][][][][][]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]33,5592002-10-19-00.00.00.00000042002-10-19-00.00.00.0000005254326BIB01088nam0 22002651 450 00100090000001000250000902100070003410000260004110100130006710200070008010500910008720000450017821000480022321500590027122500220033067600060035268600060035880100510036483000230041583500060043893000130044493200120045793200080046999503450047700409815 a2-8420-3382-5d10,30 aFR a20021023 b 1frea01 ba0 afrecfre aFR 1[2002-10-23-00.00.00.000000][2011-03-05-00.00.00.000000][2002-10-23-00.00.00.000000][]1 aL'Imagerie photos de MoustiLou la souris aParisb33 Rue du Petit-MusccPlay Bacd2001 a144 p.3144cill. en coul. couv. ill. en coul.d21 cm. 2aL'Imagerie photos 10 aI aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aImagier aMot aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0353787*81gL-h035378kIm20141104opqbram1[DON][Don][][45][][][][0,00][][][][][][][][][mobilier bibliothèque][][][][][][][][]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]92011-03-05-00.00.00.00000042002-10-23-00.00.00.0000005353786BIB01417nam0 22002891 450 00100090000001000240000902100070003310000260004010100130006610501170007920000130019621000290020921500070023821500580024522500180030330300180032130300190033933001760035867600060053480100510054083000230059183500060061493000130062093200110063393200100064499504730065400411869 a0-7513-7416-4d5,95 aFR a20030630 b 1frea01 ba1 afreceng 1[2003-06-30-00.00.00.000000][2007-03-12-00.00.00.000000][2003-06-30-00.00.00.000000][2001-02-01-00.00.00.000000]1 aLa Ferme cDorling Kindersleyd1999 4np anon paginécill. en coul. couv. ill. en coul.d17 cm. 2aTouche à Tout aLivre tactile aLivre cartonné aOses-tu tapoter le groin rose du cochon ? +Un livre amusant et excitant. Découvre à travers les pages de nouvelles sensations en touchant tes animaux préférés de la ferme. 10 aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aAnimal aFerme aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0261617*81gL-h026161m20141104opqbram1[IDE][L'Idée Livres][VENDOME][41100][9 Avenue Gérard Yvon][][02 54 89 09 70][0,00][][][][][][][][REP][Documentaires Jeunesse][][][][Livres avec remise entre 30 et 60 %][9 Avenue Gérard Yvon][41100][VENDOME][]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]33,0092003-06-30-00.00.00.00000042003-06-30-00.00.00.0000005261616BIB01269oam2 22002891 450 00100090000001000240000902100070003310000260004010100130006610501170007920000650019621000170026121500570027822500170033530300190035246100280037167600060039970000210040570200390042680100510046583000230051683500060053993000130054593200110055893200110056999503990058000414967 a2-7404-1550-8d5,00 aFR a20040611 b 1frea01 ba0 afrecfre 1[2004-06-11-00.00.00.000000][2007-04-13-00.00.00.000000][2004-06-11-00.00.00.000000][2003-02-01-00.00.00.000000]1 aLa MaisonfOdile BAILLOEULgPhotogr. de Pierre TRESSOSv333 aPariscMango a1 vol.11cill. en coul. couv. ill. en coul.d14 cm. 2aLulu et Lili alivre cartonné tLulu et Liliv33415116 1010aBAILLOEULbOdile10aTRESSOSbPierregPhotographies5PH aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aMaison aSouris aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0277247*81gL-h027724m20141104opqbram1[SFL][SFL/ALIZE][Aubervilliers Cedex][93301][BP 03][M. Andrieu][01-53-56-95-00][25,00][][][01-53-56-95-09][][][][][][][][][][][][][][]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]34,4092004-06-11-00.00.00.00000042004-06-11-00.00.00.0000005277246BIB01487nam1 22002771 450 00100090000001000090000902100070001810000260002510100130005110500650006420000620012921000170019121500070020821500580021522500170027330300190029033007300030967600060103970000210104570200390106680100510110583000230115683500060117993000130118593200110119800415116 d5,00 aFR a20040611 b 0frea01 ba0 afrecfre 1[2004-06-11-00.00.00.000000][][2004-06-11-00.00.00.000000][]1 aLulu et LilifOdile BAILLOEULgPhotogr. de Pierre TRESSOS aPariscMango 4np anon paginécill. en coul. couv. ill. en coul.d14 cm. 2aLulu et Lili aLivre cartonné aLes aventures de Lulu et Lili ont la spécificité de se passer dans un monde réel - ou presque ! C'est de cette ambiguïté que naît la poésie de ces personnages. Sur un fond de couleur, deux petites souris plus vraies que nature évoluent au milieu d'objets du quotidien, les manipulent, les transforment et se les approprient de manière inventive. Les jeunes enfants s'y reconnaîtront, accompagnés par la voix off du texte qui interroge les souriceaux. Ils découvriront, au fil de l'histoire, la finalité du projet de Lulu et Lili jusqu'à la révélation de la dernière page. Des petites histoires toutes simples qui montrent qu'avec un peu d'imagination et d'humour, notre quotidien peut se transformer en un monde fantastique ! 1010aBAILLOEULbOdile10aTRESSOSbPierregPhotographies5PH aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aSouris01844nje0 22004091 450 00100090000001000250000907100310003410000240006510500650008920000550015421000360020921500640024530100130030946400360032246400310035846400290038946400260041846400290044446400270047346400350050046400270053546400350056246400290059746400270062646400310065346400280068446400260071246400250073867600060076368600140076971000140078380100510079783500060084893000160085493400390087099505250090900416835 a3700173648920d18,3900a364892bBackyard2BACKYARD a20050913 0frea01 ba 1[2005-09-13-00.00.00.000000][][2005-09-13-00.00.00.000000][]1 aBehind the counterfMACKA FATbDC : Disque Compact cMosaic Music Distributiond2004 a1 DC11c, (71:28)5[71:28]d13/14e1 Dépliant avec paroles aS-0029731 aOut of the concreted(03:46)v11 aFire and spiced(04:26)v11 aCome with med(02:38)v11 aFrom dustd(04:22)v11 aJust a pinchd(04:30)v11 aMacka funkd(04:19)v11 aBehind the counterd(05:03)v11 aHeavy loadd(05:38)v11 aHealing corruptiond(04:10)v11 aDark shelterd(04:52)v11 aTree chestd(07:02)v11 aOut of the dubd(03:46)v11 aHealing dubd(03:40)v11 aSpice dubd(04:24)v11 adust dubd(08:46)v1 10 a1.6 MAC 310aMACKA FAT aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN aC aReggae4REG a<1><63><><Reggae roots><MAC>< >< > aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfS-0029737*81gS-h002973k1.6 MAC 3m20141104opqsrje1[CDM][CD Mail][CERGY PONTOISE Cedex][95523][CD Mail - 9, Chaussée Jules César - B.P. 234 OSNY][Alexandre][01-30-75-11-55][20,00][][][01-30-38-61-26][][][][][CD][Disques compacts][][][][N° de client : DI56363S +Mot de passe : NRI 1335][][][][cdmail@cdmail.fr]2[ACD][Disque Compact Adulte][0][1][CD disponible : Fonds Sonore Adulte][0][0][0][0]314,7292005-03-10-00.00.00.00000042005-09-13-00.00.00.000000529736BIB01411nam0 22002771 450 00100090000001000250000902100070003410000260004110100130006710501170008020000370019721000370023421500180027121500580028922500170034730300190036433001970038367600060058070000190058680100510060583000230065683500060067993000130068593200110069899504240070900417719 a2-211-07961-Xd12,00 aFR a20050827 b 1frea01 ba0 afrecfre 1[2005-08-27-00.00.00.000000][2007-03-21-00.00.00.000000][2005-08-27-00.00.00.000000][2005-03-01-00.00.00.000000]1 aLe Livre des crisfSoledad BRAVI aPariscL'Ecole des loisirsd2005 a1 vol.114np anon paginécill. en coul. couv. ill. en coul.d14 cm. 2aLoulou & Cie aLivre cartonné aLa vache meugle et le veau beugle. Le renard glapit et la renarde glousse. Le lapin clapit, ses enfants couinent. Les cigognes claquettent. Tous les cris sont dans la nature… et dans ce livre. 1010aBRAVIbSoledad aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aAnimal aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0289717*81gL-h028971m20141104opqbram1[PRI][Librairie Chapitre][ORLEANS][45000][2 Place de la République][Amandine Groisil][02.38.65.43.43][9,00][][][02.38.65.43.44][][][][][LIB][][][][][][][][][]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]310,9292005-08-27-00.00.00.00000042005-08-27-00.00.00.0000005289716BIB01392nam0 22002771 450 00100090000001000250000902100070003410000260004110100130006710500910008020000440017121000370021521500180025221500570027033002090032767600060053668600060054270000180054880100510056683000230061783500060064093000130064693200160065993200120067599504270068700419067 a2-211-08201-7d12,50 aFR a20060303 b 1frea01 ba0 afrecfre 1[2006-03-03-00.00.00.000000][2006-08-09-00.00.00.000000][2006-03-03-00.00.00.000000][]1 aMille Secrets de poussinsfClaude PONTI aPariscL'Ecole des loisirsd2005 a1 vol.114np anon paginécill. en coul. couv. ill. en coul.d26x26 aCe livre répond de manière fantaisiste à toutes les questions que l'on peut se poser au sujet des poussins. Il révèle les secrets de leur vie : leur naissance, leur vie dans la coquille, etc... + + + + 10 aP10aPONTIbClaude aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aImagination aPoussin aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0295757*81gL-h029575kPm20141104opqbram1[PRI][Librairie Chapitre][ORLEANS][45000][2 Place de la République][Amandine Groisil][02.38.65.43.43][9,00][][][02.38.65.43.44][][][][][LIB][][][][][][][][][]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]311,3892006-03-03-00.00.00.00000042006-03-03-00.00.00.0000005295756BIB01637nam0 22002891 450 00100090000001000250000902100070003410000260004110100130006710500910008020000320017121000370020321500180024021500580025833004470031667600060076368600060076970000210077580100510079683000230084783500060087093000130087693200100088993200090089993200120090899504270092000419085 a2-211-08116-9d12,00 aFR a20060308 b 1frea01 ba0 afrecfre 1[2006-03-08-00.00.00.000000][2006-09-12-00.00.00.000000][2006-03-08-00.00.00.000000][]1 aSuperlapinfStéphanie BLAKE aPariscL'Ecole des loisirsd2005 a1 vol.114np anon paginécill. en coul. couv. ill. en coul.d28 cm. aIl était une fois un petit lapin qui se prenait pour Superlapin. Lorsque sa maman lui disait: «Que vas-tu faire aujourd’hui, mon petit lapin?», il répondait: «Mais enfin, chère mère, je ne suis pas un petit lapin, je suis SUPERLAPIN! Les Superlapins attrapent les méchants, vous le savez bien!» Et le petit lapin – pardon, Superlapin –, dans son costume de Superlapin, partait chasser les méchants. Superlapin n’a peur de rien... + + + + + 10 aB10aBLAKEbStéphanie aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aLapin aPeur aCourage aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0295997*81gL-h029599kBm20141104opqbram1[PRI][Librairie Chapitre][ORLEANS][45000][2 Place de la République][Amandine Groisil][02.38.65.43.43][9,00][][][02.38.65.43.44][][][][][LIB][][][][][][][][][]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]310,9292006-03-08-00.00.00.00000042006-03-08-00.00.00.0000005295996BIB01343nam0 22003011 450 00100090000001000240000902100070003310000260004010100130006610501170007920000790019621000240027521500180029921500580031722500220037533001020039767600060049968600060050570000150051170200500052680100510057683000230062783500060065093000130065693200090066993200100067899503530068800419484 a2-87142-472-1d5,20 aFR a20060421 b 1frea01 ba1 afreceng 1[2006-04-21-00.00.00.000000][2006-08-10-00.00.00.000000][2006-04-21-00.00.00.000000][2005-01-01-00.00.00.000000]1 aLa Soupe au cailloufTony ROSSgTrad. de l'anglais par Catherine DELORAINE aNamurcMijaded2005 a1 vol.114np anon paginécill. en coul. couv. ill. en coul.d19 cm. 2aLes Petits Mijade aLa mère Poule réussit à berner le loup qui veut la dévorer en lui préparant une soupe au caillou. 10 aR10aROSSbTony10aDELORAINEbCatherinegTrad. de l'anglais5TRG aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aLoup aPoule aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0296267*81gL-h029626kRm20141104opqbram1[REM][Remplacement][][][][][][0,00][][][][][][][][][fournitures mat. audio][][][][][][][][]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]92006-04-21-00.00.00.00000042006-04-21-00.00.00.0000005296266BIB01679nam0 22003251 450 00100090000001000240000902100070003310000260004010100130006610500910007920001460017021000180031621500070033421500580034122500250039930300190042433001520044367600060059570000400060170200380064170200460067970200390072580100510076483000230081583500060083893000130084493200110085793200120086899504730088000419692 a2-215-06966-Xd5,00 aFR a20060522 b 1frea01 ba0 afrecfre 1[2006-05-22-00.00.00.000000][2007-03-10-00.00.00.000000][2006-05-22-00.00.00.000000][]1 aLes Petits des animauxfConcept. Nathalie BELINEAUgConcept. Emilie BEAUMONTgPâte à modeler Christelle MEKDJIANgPrises de vue René BRASSART cFleurusd2003 4np anon paginécill. en coul. couv. ill. en coul.d14 cm. 2aL'Imagerie des Bébés alivre cartonné aUne nouvelle collection pour les bébés illustrée avec des images en pâte à modeler. Ces premiers livres leur font découvrir les petits des animaux. 1010aBELINEAUbNathaliegConception5CON10aBEAUMONTbEmiliegConception5CON10aMEKDJIANbChristellegPâte à modeler5PAM10aBRASSARTbRenégPrises de vue5PRI aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aAnimal aImagier aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0298827*81gL-h029882m20141104opqbram1[IDE][L'Idée Livres][VENDOME][41100][9 Avenue Gérard Yvon][][02 54 89 09 70][0,00][][][][][][][][REP][Documentaires Jeunesse][][][][Livres avec remise entre 30 et 60 %][9 Avenue Gérard Yvon][41100][VENDOME][]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]34,5592006-05-22-00.00.00.00000042006-05-22-00.00.00.0000005298826BIB01433nam0 22002771 450 00100090000001000240000902100070003310000260004010100130006610500910007920000270017021000320019721500070022921500580023622500440029433002580033867600060059668600060060270000180060880100510062683000230067783500060070093000130070693200100071999504260072900420018 a2-02-087242-0d8,50 aFR a20060721 b 0frea01 ba0 afrecfre 1[2006-07-21-00.00.00.000000][][2006-07-21-00.00.00.000000][2006-05-01-00.00.00.000000]1 aLa TaupefTatsu NAGATA aPariscSeuil Jeunessed2006 4np anon paginécill. en coul. couv. ill. en coul.d28 cm. 2aLes Sciences naturelles de Tatsu Nagata aTatsu Nagata, scientifique reconnu, expert mondial des mutations des batraciens, a décidé de mettre toute sa fougue et son enthousiasme au service des sciences naturelles pour faire aimer la nature aux tout-petits et leur donner l'envie de la préserver. 10 aN10aNAGATAbTatsu aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aTaupe aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0300597*81gL-h030059kNm20141104opqbram1[PRI][Librairie Chapitre][ORLEANS][45000][2 Place de la République][Amandine Groisil][02.38.65.43.43][9,00][][][02.38.65.43.44][][][][][LIB][][][][][][][][][]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]37,7492006-07-21-00.00.00.00000042006-07-21-00.00.00.0000005300596BIB02444nam0 22003011 450 00100090000001000290000902100070003810000260004510100130007110501170008420000850020121000300028621500140031621500450033022500080037533011130038367600060149668600110150270000190151370200470153280100510157983000210163083500060165193000250165793200210168293200140170399504250171700420491 a978-2-226-17018-7d17,00 aFR a20061011 e 1frea01 ba1 afrecesp 1[2006-10-11-00.00.00.000000][2011-08-30-00.00.00.000000][2007-01-26-00.00.00.000000][2006-09-01-00.00.00.000000]1 aGrimpow, l'élu des TempliersfRafael ABALOSgTrad. de l'esp. par Isabelle GUGNON aPariscAlbin Micheld2006 a1 vol.11 a506 p.3506ccouv. ill. en coul.d22 cm. 2aWiz aEn cet hiver de 1313, sur une route enneigée des Alpes, Grimpow, petit bandit des grands chemins, découvre un cadavre. +Aux côtés du mort, deux dagues aux manches incrustés de pierres précieuses, quelques pièces d'argent, une mystérieuse amulette, un sceau en or et un bout de parchemin avec des signes cabalistiques. Dans la main de Grimpow, l'amulette dégage une étrange chaleur et les signes sur le parchemin se révèlent à lui : " L'ombre et la lumière sont dans le ciel. Aidor Bilbicum. Strasbourg ", lit-il, stupéfait, alors qu'il n'a jamais su lire. +A cet instant, le cadavre disparaît comme par enchantement. Perdu et effrayé, Grimpow n'a qu'une certitude : il a été élu. Et l'amulette et le parchemin viennent de transformer sa vie en destin. Un monde d'inscriptions codées et de cartes énigmatiques, de jeux de mots et de cryptogrammes. Un chemin invisible qui prend sens à mesure que Grimpow s'approche du plus grand secret du Moyen Age : celui que détiennent les Templiers. +Un roman unanimement salué par la presse espagnole qui voit, en Grimpow, Le Nom de la rose de la littérature de jeunesse. 10 aRO ABA10aABALOSbRafael10aGUGNONbIsabellegTrad. de l'espagnol5TRE aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADO2adolescents aR aRoman adolescent4RO aRoman d'aventure aMoyen Age aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0302027*81gL-h030202kRO ABAm20141104opqeram1[PRI][Librairie Chapitre][ORLEANS][45000][2 Place de la République][Amandine Groisil][02.38.65.43.43][9,00][][][02.38.65.43.44][][][][][LIB][][][][][][][][][]2[ARE][Roman Adolescent][0][1][Livre disponible - Romans Fonds Adolescent][0][0][0][0]315,4792006-10-11-00.00.00.00000042007-01-26-00.00.00.0000005302026BIB01816oam2 22002771 450 00100090000001000250000902100070003410000260004110100130006710501170008020000620019721000380025921500450029722500120034233006050035446100330095967600060099268600130099870000230101180100510103483000170108583500060110293000130110893200170112199504000113800420895 a2-8401-1744-4d21,50 aFR a20061122 k 1frea01 ba0 afrecfre 1[2006-11-22-00.00.00.000000][2013-10-23-00.00.00.000000][2006-11-22-00.00.00.000000][2006-09-01-00.00.00.000000]1 aBerill ou la passion en héritagefFrançoise BOURDINv232 aVersaillesbBP 314cFeryaned2006 a403 p.3403ccouv. ill. en coul.d22 cm. 2aDétente aÀ la mort de son mari Tomas, Berill se retrouve à la tête d’un prestigieux empire financier. Elle souhaite se retirer des affaires, mais la succession s’annonce difficile. Maureen, sa fille, voudrait régner sur la banque, mais elle doit se plier aux directives de son oncle Mathias. Pourra-t-elle longtemps rester dans l’ombre ? Quant à Hugh, son fils, il préfère se consacrer au parc animalier qu’il a créé en Touraine et ne veut pas s’éloigner de la ravissante vétérinaire qui travaille avec lui. Au cœur de la tourmente, Berill fera tout pour préserver l’héritage et protéger le bonheur des siens. tUne Passion fauvev23420908 10 aR BOU LV10aBOURDINbFrançoise aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADU2adultes aR aRoman4R aLarge vision aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0304087*81gL-h030408kR BOU LVm20141104opqgram1[FER][FERYANE][Versailles cedex][78003][BP 314][][01.39.50.74.26][0,00][][][][][][][][][fournitures mat. audio][][][][][][][][]2[ALV][Livre Large Vision Adulte][0][1][Livre disponible : Fonds Large Vision][0][0][0][0]319,5792006-11-22-00.00.00.00000042006-11-22-00.00.00.0000005304086BIB00632nam1 22002411 450 00100090000001000100000902100070001910000260002610100130005210500650006520000410013021000320017121500290020322500120023267600060024468600130025070000230026380100510028683000170033783500060035493000130036093200170037300420908 d21,50 aFR a20061122 k 0frea01 ba0 afrecfre 1[2006-11-22-00.00.00.000000][][2006-11-22-00.00.00.000000][]1 aUne Passion fauvefFrançoise BOURDIN aVersaillesbBP 314cFeryane ccouv. ill. coul.d22 cm. 2aDétente 10 aR BOU LV10aBOURDINbFrançoise aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADU2adultes aR aRoman4R aLarge vision01425nam0 22002651 450 00100090000001000290000902100070003810000260004510100130007110500910008420000440017521000370021921500070025621500580026322500170032130300190033833002550035767600060061270000250061880100510064383000230069483500060071793000130072399504230073600421738 a978-2-211-05915-2d10,40 aFR a20070307 b 0frea01 ba0 afrecfre 1[2007-03-07-00.00.00.000000][][2007-03-07-00.00.00.000000][2004-05-01-00.00.00.000000]1 aOh ! C'est à qui ?fGrégoire SOLOTAREFF aPariscL'Ecole des loisirsd2000 4np anon paginécill. en coul. couv. ill. en coul.d26 cm. 2aLoulou & Cie aLivre cartonné aEt si ces deux pattes palmées n'étaient pas à la grenouille? Et si cette trompe n'appartenait pas à l'éléphant? Et si ces deux longues oreilles n'étaient pas celles du loup? Mais alors à qui? A une drôle de bête qui serait un peu tout ça à la fois... 1010aSOLOTAREFFbGrégoire aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0308147*81gL-h030814m20141104opqbram1[PRI][Librairie Chapitre][ORLEANS][45000][2 Place de la République][Amandine Groisil][02.38.65.43.43][9,00][][][02.38.65.43.44][][][][][LIB][][][][][][][][][]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]39,4692007-03-07-00.00.00.00000042007-03-07-00.00.00.0000005308146BIB01418nam0 22002891 450 00100090000001000280000902100070003710000260004410100130007010500910008320000610017421000260023521500070026121500580026822500260032630300190035233001750037167600060054670000260055270200230057880100510060183000230065283500060067593000130068193200110069499504230070500421748 a978-2-7459-2297-7d7,00 aFR a20070305 b 0frea01 ba0 afrecfre 1[2007-03-05-00.00.00.000000][][2007-03-05-00.00.00.000000][2007-01-01-00.00.00.000000]1 aPoil à l'animalfMarie-Hélène VERSINIgVincent BOUDGOURD aToulousecMiland2007 4np anon paginécill. en coul. couv. ill. en coul.d18 cm. 2aLa Mare aux histoires aLivre cartonné aDans ce « livre-ovni » au ton résolument décalé, les animaux nous présentent… leurs poils ! Des illustrations pleines d’humour, des petites maximes sorties de nulle part… 1010aVERSINIbMarie-Hélène10aBOUDGOURDbVincent aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aAnimal aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0308237*81gL-h030823m20141104opqbram1[PRI][Librairie Chapitre][ORLEANS][45000][2 Place de la République][Amandine Groisil][02.38.65.43.43][9,00][][][02.38.65.43.44][][][][][LIB][][][][][][][][][]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]36,3792007-03-05-00.00.00.00000042007-03-05-00.00.00.0000005308236BIB01422nam0 22003011 450 00100090000001000280000902100070003710000260004410100130007010500910008320000850017421000360025921500070029521500580030222500210036033001010038167600060048268600060048870000290049470100260052370200400054980100510058983000230064083500060066393000130066993200120068299504260069400421774 a978-2-07-057676-0d6,00 aFR a20070316 b 0frea01 ba0 afrecfre 1[2007-03-16-00.00.00.000000][][2007-03-16-00.00.00.000000][2006-09-01-00.00.00.000000]1 aProprefCatherine DOLTO-TOLITCHgColline FAURE-POIREEgIll. par Frédérick MANSOT aPariscGallimard Jeunessed2006 4np anon paginécill. en coul. couv. ill. en coul.d18 cm. 2aMine de rienv28 aMine de rien, devenir propre c'est formidable, mais quel plaisir de se salir de temps en temps ! 10 aD10aDOLTO-TOLITCHbCatherine10aFAURE-POIREEbColline10aMANSOTbFrédérickgIllustré par5IL aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aHygiène aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0308627*81gL-h030862kDm20141104opqbram1[PRI][Librairie Chapitre][ORLEANS][45000][2 Place de la République][Amandine Groisil][02.38.65.43.43][9,00][][][02.38.65.43.44][][][][][LIB][][][][][][][][][]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]35,4692007-03-16-00.00.00.00000042007-03-16-00.00.00.0000005308626BIB02609nam0 22002531 450 00100090000001000290000902100070003810000260004510100130007110501170008420000370020121000360023821500450027433012250031967600060154468600120155070000190156280100510158183000210163283500060165393000450165993200200170499506310172400421929 a978-2-258-06918-3d19,80 aFR a20070323 e 1frea01 ba0 afrecfre 1[2007-03-23-00.00.00.000000][2011-08-31-00.00.00.000000][2007-03-23-00.00.00.000000][2005-09-01-00.00.00.000000]1 aLa Nuit des tempsfRené BARJAVEL aPariscPresses de la Citéd2005 a297 p.3297ccouv. ill. en coul.d23 cm. aDans le grand silence blanc de l'Antarctique, les membres d'une mission des Expéditions polaires françaises s'activent à prélever des carottes de glace. +L'épaisseur de la banquise atteint plus de 1000 mètres, les couches les plus profondes remontant à 900 000 ans. C'est alors que l'incroyable intervient : les sondeurs enregistrent un signal provenant du niveau du sol. Aucun doute possible : il y a un émetteur sous la glace... La nouvelle éclate comme une bombe, et les journaux du monde entier rivalisent de titres en une : " Une ville sous la glace ", " Un cœur sous la banquise ", etc. +Que vont découvrir les savants et les techniciens qui forent la glace à la rencontre du mystère ? La Nuit des temps est à la fois un reportage, une épopée et un chant d'amour passionné. Le présent et le lointain passé s'y mêlent, les hommes y affrontent leurs espoirs et leurs craintes et y jouent le sort du monde. Traversant le drame universel comme un trait de feu, le destin d'Eléa et de Païkan, nos si lointains prédécesseurs, les emmène tout droit rejoindre la légende des amants bienheureux et maudits, aux côtés d'Orphée et Eurydice, Roméo et Juliette, Tristan et Iseut, tous ceux que la mort n'a pas réussi à séparer. 10 aRFO BAR10aBARJAVELbRené aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADO2adolescents aR aRoman de science-fiction adolescent4RFO aScience-Fiction aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0309107*81gL-h030910kRFO BARm20141104opqeram1[SIR][SIREGE][BONNEUIL LES EAUX][60121][Les Comptoirs de Bonneuil BP 40057][Mme Boiron Véronique Tél.06.18.72.38.57][03.44.80.29.29][40,00][][][03.44.15.41.16][][][][][REP][beaux livres + romans + Jeunesse][][][][N° CLIENT = 41529553 +Adresse : 10 Rue du Docteur Ferry +41200 ROMORANTIN - LANTHENAY][Les Comptoirs de Bonneuil BP 40057][60121][BONNEUIL LES EAUX][]2[ARE][Roman Adolescent][0][1][Livre disponible - Romans Fonds Adolescent][0][0][0][0]312,8592007-03-23-00.00.00.00000042007-03-23-00.00.00.0000005309106BIB01494nam0 22003011 450 00100090000001000290000902100070003810000260004510100080007110500650007920001280014421000330027221500070030521500580031233001720037067600060054268600060054870000180055470200340057270200460060680100510065283000230070383500060072693000130073293200090074593200110075499504270076500422429 a978-2-09-222408-3d13,90 aFR a20070606 b 0frea01 ba1 afre 1[2007-06-06-00.00.00.000000][][2007-06-06-00.00.00.000000][]1 aLa Vérité sur l'affaire des trois petits cochonsfJon SCIESZKAgIll. par Lane SMITHgTrad. de l'américain par Gilles LERGEN aPariscNathan Jeunessed1991 4np anon paginécill. en coul. couv. ill. en coul.d27 cm. aJon Scieszka et Lan Smith font enfin toute la vérité sur ce personnage incompris et mal aimé, L.E. Loup. +Grand et méchant ? Peut-être. +Désopilant ? A coup sûr. + + 10 aS10aSCIESZKAbJon10aSMITHbLanegIllustré par5IL10aLERGENbGillesgTrad. de l'américain5TRA aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aLoup aCochon aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0311507*81gL-h031150kSm20141104opqbram1[PRI][Librairie Chapitre][ORLEANS][45000][2 Place de la République][Amandine Groisil][02.38.65.43.43][9,00][][][02.38.65.43.44][][][][][LIB][][][][][][][][][]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]312,6592007-05-31-00.00.00.00000042007-06-06-00.00.00.0000005311506BIB01706nam0 22002651 450 00100090000001000280000902100070003710000260004410100130007010500910008320000790017421000370025321500570029022500110034733004820035867600060084068600130084670000180085970200390087780100510091683000230096783500060099093000230099699504210101900422818 a978-2-211-08519-9d7,50 aFR a20070719 c 1frea01 ba0 afrecfre 1[2007-07-19-00.00.00.000000][2007-08-11-00.00.00.000000][2007-08-11-00.00.00.000000][]1 aLes Chaussettes de l'archiduchessefColas GUTMANgIll. par Audrey POUSSIER aPariscL'Ecole des loisirsd2007 a67 p.367cill. en coul. couv. ill. en coul.d19 cm. 2aMouche aL'archiduchesse Sophie, qui est belle comme .une princesse, riche comme une reine, gentille comme un labrador, se demande pourquoi elle n'a pas de prince charmant pour lui tenir compagnie." C'est parce que tes chaussettes sont sales et archisales " lui dit un jour une sorcière. Tout d'abord, l'archiduchesse ne veut pas l'écouter car on lui a toujours dit de se méfier des sorcières. Mais si cette sorcière était tout à fait spéciale, si elle tenait vrai-ment à aider Sophie + 10 aJR GUT V10aGUTMANbColas10aPOUSSIERbAudreygIllustré par5IL aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1V2vert (8-10 ans) aR aRoman jeunesse4JR aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0314117*81gL-h031411kJR GUT Vm20141104opqjram1[PRI][Librairie Chapitre][ORLEANS][45000][2 Place de la République][Amandine Groisil][02.38.65.43.43][9,00][][][02.38.65.43.44][][][][][LIB][][][][][][][][][]2[ARJ][Roman Jeunesse][0][1][Livre disponible : Fonds Roman Jeunesse][0][0][0][0]36,8392007-07-19-00.00.00.00000042007-08-11-00.00.00.0000005314116BIB02005nam0 22002651 450 00100090000001000280000902100070003710000260004410100080007010500910007820000680016921000250023721500420026233008240030467600060112868600110113470000170114570200460116280100510120883000170125983500060127693000230128293200190130599504150132400422838 a978-2-290-00258-2d9,95 aFR a20070725 k 0frea01 ba1 afre 1[2007-07-25-00.00.00.000000][][2007-07-25-00.00.00.000000][2007-03-01-00.00.00.000000]1 aGarnethillfDenise MINAgTrad. de l'américain par Pascal LOUBET aPariscJ'ai lud2003 a479 p.3479ccouv. ill. coul.d20 cm. aMaureen est un suspect idéal : elle a retrouvé dans son appartement le corps mutilé de son amant, Douglas Brady, après être rentrée tard dans la nuit en état d'ébriété. +Qui peut croire à son innocence alors qu'elle a déjà été internée en hôpital psychiatrique ? Dès le début de l'enquête, Maureen se sent traquée par la police, trahie par sa mère alcoolique, sans compter le handicap d'un frère, trafiquant de drogue. Pire, elle est fragilisée par les attaques pernicieuses d'un ennemi invisible. Un vrai cauchemar pour elle, d'autant que ses investigations la mènent au sein du Northern Hospital, l'établissement où elle a séjourné et qui tente d'étouffer un horrible scandale : une affaire de viols. +Lorsqu'un second corps est découvert, Maureen comprend qu'elle doit trouver elle-même l'assassin. Sa vie en dépend. 10 aRS MIN10aMINAbDenise10aLOUBETbPascalgTrad. de l'américain5TRA aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADU2adultes aR aRoman suspense4RS aRoman Suspense aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0314367*81gL-h031436kRS MINm20141104opqaram1[PRI][Librairie Chapitre][ORLEANS][45000][2 Place de la République][Amandine Groisil][02.38.65.43.43][9,00][][][02.38.65.43.44][][][][][LIB][][][][][][][][][]2[ARA][Roman Adulte][0][1][Livre disponible - Fonds Roman Adulte][0][0][0][0]39,0592007-07-25-00.00.00.00000042007-07-25-00.00.00.0000005314366BIB01882nam0 22002771 450 00100090000001000290000902100070003810000260004510100130007110500910008420000680017521000330024321500070027621500580028333006630034167600060100468600060101070000180101670200400103480100510107483000230112583500060114893000130115493200100116799504270117700423558 a978-2-278-05879-2d11,90 aFR a20071119 b 0frea01 ba0 afrecfre 1[2007-11-19-00.00.00.000000][][2007-11-19-00.00.00.000000][2007-09-01-00.00.00.000000]1 aLa Petite Poule RoussefPierre DELYEgIll. par Cécile HUDRISIER aPariscDidier Jeunessed2007 4np anon paginécill. en coul. couv. ill. en coul.d26 cm. aUn jour, la petite poule rousse trouve un peu de blé et décide de le planter. Comme elle n'aime pas travailler seule ni être la seule à travailler, elle demande à ses trois amis le cochon, le chat et le canard de l'aider. Mais tous sont vraiment débordés, toujours plongés dans l'eau, la sieste ou la lecture de Gramour ou de Gras-là... Tout au long de la journée, la petite poule confiante ne cesse de solliciter les trois compères. Mais leur réponse est toujours la même. Pas le temps ! Et la poulette coupe, moissonne, récolte les épis et s'active... toute seule. En même temps que la colère monte, elle échafaude un plan pour punir les trois paresseux... 10 aD10aDELYEbPierre10aHUDRISIERbCécilegIllustré par5IL aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aPoule aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0317297*81gL-h031729kDm20141104opqbram1[PRI][Librairie Chapitre][ORLEANS][45000][2 Place de la République][Amandine Groisil][02.38.65.43.43][9,00][][][02.38.65.43.44][][][][][LIB][][][][][][][][][]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]310,8392007-11-19-00.00.00.00000042007-11-19-00.00.00.0000005317296BIB01625nam0 22002891 450 00100090000001000290000902100070003810000260004510100130007110500650008420000600014921000360020921500070024521500580025233004090031067600060071968600060072570000230073170200410075480100510079583000230084683500060086993000140087593200100088993200090089999504270090800424078 a978-2-01-391022-4d14,00 aFR a20080218 b 0frea01 ba0 afrecfre 1[2008-02-18-00.00.00.000000][][2008-04-29-00.00.00.000000][]1 aBabayagafTaï-Marc LE THANHgIll. par Rebecca DAUTREMER aPariscGautier-Languereaud2003 4np anon paginécill. en coul. couv. ill. en coul.d37 cm. aBabayaga n’avait qu’une seule dent. Et c’est probablement ça qui l’a rendu si méchante. Ogresse par vocation, elle n‘a q’une passion : manger, et de préférence les enfants bien dodus et bien gras. Alors, comment s’en sortir quand on est une fillette haute comme trois pommes et qu’on se retrouve coincée dans l’antre de Babayaga ? +Un conte russe traditionnel revisité par le talent de Rebecca Dautremer. 10 aL10aLE THANHbTaï-Marc10aDAUTREMERbRebeccagIllustré par5IL aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aContes4C aConte aOgre aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0319637*81gL-h031963kLm20141104opqbram1[PRI][Librairie Chapitre][ORLEANS][45000][2 Place de la République][Amandine Groisil][02.38.65.43.43][9,00][][][02.38.65.43.44][][][][][LIB][][][][][][][][][]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]312,7492008-02-18-00.00.00.00000042008-04-29-00.00.00.0000005319636BIB01470nam0 22002651 450 00100090000001000280000902100070003710000260004410100080007010500910007820000580016921000390022721500070026621500580027333003120033167600060064368600060064970000190065580100510067483000230072583500060074893000130075493200110076799504260077800425072 a978-2-226-17757-5d9,50 aFR a20080918 b 0frea01 ba1 afre 1[2008-09-18-00.00.00.000000][][2008-09-18-00.00.00.000000][2008-01-01-00.00.00.000000]1 aDevine qui se cache derrière le cochonfToshio FUKUDA aPariscAlbin Michel Jeunessed2008 4np anon paginécill. en coul. couv. ill. en coul.d26 cm. aDerrière le cochon – et derrière la page – se cache une belle ribambelle d’animaux. On tourne les pages et on joue à découvrir à qui est cette corne, à qui est ce bec, à qui sont ces fines ailes… +Les enfants reconnaîtront aisément les animaux et la lecture devient un jeu avec des textes amusants et rimés. 10 aF10aFUKUDAbToshio aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aAnimal aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0324787*81gL-h032478kFm20141104opqbram1[PRI][Librairie Chapitre][ORLEANS][45000][2 Place de la République][Amandine Groisil][02.38.65.43.43][9,00][][][02.38.65.43.44][][][][][LIB][][][][][][][][][]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]38,6592008-07-11-00.00.00.00000042008-09-18-00.00.00.0000005324786BIB01437nam0 22002891 450 00100090000001000290000902100070003810000260004510100130007110500910008420000830017521000370025821500070029521500620030222500170036430300190038133001250040067600060052570000450053170100400057680100510061683000230066783500060069093000130069693200140070999504240072300425079 a978-2-211-09189-3d11,00 aFR a20080919 b 0frea01 ba0 afrecfre 1[2008-09-19-00.00.00.000000][][2008-09-19-00.00.00.000000][2008-03-01-00.00.00.000000]1 aPop artistefTexte et dessins Pierrick BISINSKIgTexte et dessins Alex SANDERS aPariscL'Ecole des loisirsd2008 4np anon paginécill. en coul. couv. ill. en coul.d25 x 22 cm 2aLoulou & Cie alivre cartonné aAndy et Jasper, les deux dinosaures, voudraient bien être aussi colorés que Pop. +Et ça tombe bien ! Pop est un artiste. 1010aBISINSKIbPierrickgTexte et dessins5TD10aSANDERSbAlexgTexte et dessins5TD aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aDinosaure aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0324827*81gL-h032482m20141104opqbram1[PRI][Librairie Chapitre][ORLEANS][45000][2 Place de la République][Amandine Groisil][02.38.65.43.43][9,00][][][02.38.65.43.44][][][][][LIB][][][][][][][][][]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]310,0192008-07-11-00.00.00.00000042008-09-19-00.00.00.0000005324826BIB01930oam2 22002651 450 00100090000001000290000902100070003810000260004510100130007110500910008420000510017521000160022621500450024233007390028746100290102667600060105568600120106170000200107380100510109383000210114483500060116593000450117193200220121699504260123800425913 a978-2-259-20897-0d16,50 aFR a20081114 e 1frea01 ba0 afrecfre 1[2008-11-14-00.00.00.000000][2009-02-25-00.00.00.000000][2008-11-14-00.00.00.000000][]1 aA la poursuite du KrakenfAlexandre MOIXv131 aPariscPlon a403 p.3403ccouv. ill. en coul.d17 cm. aQuatre adolescents accompagnés d'un suricate surdoué viennent passer les vacances de Noël en Norvège dans le manoir de leur grand-père, le Dr Abelmans. Ce vieil homme farfelu est le père fondateur de la cryptozoologie, la science des Cryptides, ces créatures énigmatiques dont le monde rationnel réfute l'existence. Au même moment, en Bretagne, un chalutier fait naufrage dans des circonstances troublantes. Le lendemain, en plein océan Arctique, un pétrolier est attaqué par une force mystérieuse. À l'insu de tous, les quatre jeunes se lancent dans une aventure dangereuse et trépidante qui les conduira sur les traces d'une créature monstrueuse, le Kraken. Mais les services secrets tentent par tous les moyens d'étouffer l'affaire tLes Cryptidesv13426704 10 aRFO MOI10aMOIXbAlexandre aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADO2adolescents aR aRoman de science-fiction adolescent4RFO aRoman Fantastique aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0329777*81gL-h032977kRFO MOIm20141104opqeram1[PRI][Librairie Chapitre][ORLEANS][45000][2 Place de la République][Amandine Groisil][02.38.65.43.43][9,00][][][02.38.65.43.44][][][][][LIB][][][][][][][][][]2[ARE][Roman Adolescent][0][1][Livre disponible - Romans Fonds Adolescent][0][0][0][0]315,0292008-11-14-00.00.00.00000042008-11-14-00.00.00.0000005329776BIB00625nam1 22002291 450 00100090000001000100000902100070001910000260002610100130005210500650006520000340013021000160016421500320018067600060021268600120021870000200023080100510025083000210030183500060032293000450032893200220037300426704 d16,50 aFR a20090225 e 0frea01 ba0 afrecfre 1[2009-02-25-00.00.00.000000][][2009-02-25-00.00.00.000000][]1 aLes CryptidesfAlexandre MOIX aPariscPlon ccouv. ill. en coul.d17 cm. 10 aRFO MOI10aMOIXbAlexandre aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADO2adolescents aR aRoman de science-fiction adolescent4RFO aRoman Fantastique02229nam0 22002531 450 00100090000001000290000902100070003810000260004510100130007110501170008420000490020121000180025021500450026833010990031367600060141268600100141870000230142880100510145183000170150283500060151993000130152593200220153899504150156000426146 a978-2-7144-4354-0d19,00 aFR a20081205 k 1frea01 ba0 afrecfre 1[2008-12-05-00.00.00.000000][2013-10-15-00.00.00.000000][2008-12-05-00.00.00.000000][2008-09-01-00.00.00.000000]1 aDans le silence de l'aubefFrançoise BOURDIN cBelfondd2008 a310 p.3310ccouv. ill. en coul.d24 cm. aAxelle Montgomery a vingt-sept ans et tout semble lui réussir. +Issue d'une dynastie d'éleveurs et d'entraîneurs, elle dirige l'écurie familiale depuis que Ben Montgomery, son grand-père, lui en a confié les rênes après un grave accident qui l'a laissé paralysé. Grâce à l'éternel soutien et aux conseils avisés du vieil entraîneur, Axelle multiplie les triomphes. Mais son caractère bien trempé et son assurance ne sont pas du goût de tous. Entre son frère, ancien jockey, jaloux et prêt à tout pour l'évincer, et les propriétaires de chevaux de courses qui hésitent à lui accorder leur confiance, elle a fort à faire. +Sans compter les deux prétendants qui se disputent ses faveurs : Antonin, jockey vedette, qui l'attire mais dont elle se défend de tomber amoureuse, et Xavier, un séduisant informaticien, mais dont l'univers est fort éloigné du monde des courses. Face aux problèmes qui s'accumulent et menacent l'équilibre de l'entreprise familiale, Axelle devra faire des choix difficiles. Parviendra-t-elle à prouver qu'elle est la digne héritière des Montgomery et à forger son destin ? 10 aR BOU10aBOURDINbFrançoise aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADU2adultes aR aRoman4R aRoman Sentimental aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0330927*81gL-h033092kR BOUm20141104opqaram1[PRI][Librairie Chapitre][ORLEANS][45000][2 Place de la République][Amandine Groisil][02.38.65.43.43][9,00][][][02.38.65.43.44][][][][][LIB][][][][][][][][][]2[ARA][Roman Adulte][0][1][Livre disponible - Fonds Roman Adulte][0][0][0][0]317,2992008-12-03-00.00.00.00000042008-12-05-00.00.00.0000005330926BIB02184nam0 22002651 450 00100090000001000290000902100070003810000260004510100130007110500910008420000710017521000190024621500450026533009980031067600060130868600110131470000170132570200440134280100510138683000170143783500060145493000230146093200190148399504160150200426512 a978-2-355-84022-7d22,00 aFR a20090311 k 0frea01 ba1 afreceng 1[2009-03-11-00.00.00.000000][][2009-03-11-00.00.00.000000][2009-02-01-00.00.00.000000]1 aCeux qu'on aimefSteve MOSBYgTrad. de l'anglais par Clément BAUDE cSonatined2009 a350 p.3350ccouv. ill. en coul.d22 cm. aVous laissez un message à l'un de vos proches, dont vous n'avez pas de nouvelles. +Il ne vous répond que par mail ou par SMS. De nos jours, rien de plus normal. Vous inquiétez-vous ? Imaginez-vous une seconde que ce n'est pas lui qui vous a répondu, qu'il est séquestré, privé d'eau et de nourriture. et que vous n'entendrez plus jamais le son de sa voix ? Tel est le mode opératoire d'un tueur en série qui s'attaque à des jeunes femmes célibataires, les séquestre, endosse leur identité auprès de leurs proches et les laisse dépérir à petit feu, dans l'abandon le plus total. +Sam Currie est commissaire, Dave Lewis journaliste, tous deux ont sur la conscience la mort ancienne d'un parent, qu'ils auraient peut-être pu sauver s'ils avaient fait davantage attention à lui. Deux hommes hantés sur qui un piège infernal va se refermer, et qui devront trouver les ressources psychologiques nécessaires pour assumer leur passé, affronter le tueur et, cette fois, être là pour ceux qu'ils aiment. 10 aRS MOS10aMOSBYbSteve10aBAUDEbClémentgTrad. de l'anglais5TRG aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADU2adultes aR aRoman suspense4RS aRoman Suspense aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0332127*81gL-h033212kRS MOSm20141104opqaram1[PRI][Librairie Chapitre][ORLEANS][45000][2 Place de la République][Amandine Groisil][02.38.65.43.43][9,00][][][02.38.65.43.44][][][][][LIB][][][][][][][][][]2[ARA][Roman Adulte][0][1][Livre disponible - Fonds Roman Adulte][0][0][0][0]320,0292009-02-23-00.00.00.00000042009-03-11-00.00.00.0000005332126BIB01560oam2 22003011 450 00100090000001000280000902100070003710000260004410100130007010500910008320000650017421000180023921500570025722500150031433002570032946100290058667600060061568600130062170000290063470200270066380100510069083000230074183500060076493000230077093200260079393200110081999504280083000426589 a978-2-8001-4243-2d9,50 aFR a20090318 c 0frea01 ba0 afrecfre 1[2009-03-18-00.00.00.000000][][2009-03-18-00.00.00.000000][2008-10-01-00.00.00.000000]1 aPirates en vue !fdessins de BANNISTERgScén. de NYKKOv131 aPariscDupuis a30 p.330cill. en coul. couv. ill. en coul.d27 cm. 2aPuceronv1 aLe papa de Titoss est le gardien d'un formidable trésor de pièces d'or. La vie est simple sur cette petite île perdue, papa essaie de faire la sieste et Titoss passe son temps à lui faire des blagues. Jusqu'au jour où un navire de pirates est en vue... tTitoss & Ildav13426781 10 aBD TIT J10aBANNISTERgDessins de5D10aNYKKOgScénario de5SC aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1J2jaune (5-8 ans) aI aBande dessinée4BD aBande dessinée enfant aPirate aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0332897*81gL-h033289kBD TIT Jm20141104opqjram1[PRI][Librairie Chapitre][ORLEANS][45000][2 Place de la République][Amandine Groisil][02.38.65.43.43][9,00][][][02.38.65.43.44][][][][][LIB][][][][][][][][][]2[ABDJ][Bande Dessinée Jeunesse][0][1][Livre disponible : Fonds BD Jeunesse][0][0][0][0]38,6592009-02-23-00.00.00.00000042009-03-18-00.00.00.0000005332896BIB00742nam1 22002651 450 00100090000001000090000902100070001810000260002510100130005110500650006420000560012921000180018521500460020322500120024967600060026168600130026770000290028070200270030980100510033683000230038783500060041093000230041693200260043993200110046500426781 d8,65 aFR a20090318 c 0frea01 ba0 afrecfre 1[2009-03-18-00.00.00.000000][][2009-03-18-00.00.00.000000][]1 aTitoss & Ildafdessins de BANNISTERgScén. de NYKKO aPariscDupuis cill. en coul. couv. ill. en coul.d27 cm. 2aPuceron 10 aBD TIT J10aBANNISTERgDessins de5D10aNYKKOgScénario de5SC aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1J2jaune (5-8 ans) aI aBande dessinée4BD aBande dessinée enfant aPirate01146nam0 22002651 450 00100090000001000290000902100070003810000260004510100130007110500910008420000290017521000260020421500070023021500580023730300190029567600060031470000180032080100510033883000230038983500060041293000130041893200150043193200110044699504230045700426627 a978-2-354-81021-4d10,00 aFR a20090223 b 1frea01 ba0 afrecfre 1[2009-02-23-00.00.00.000000][2009-02-25-00.00.00.000000][2009-02-23-00.00.00.000000][]1 aAbécédairefSylvain DIEZ cTHOMAS jeunessed2008 4np anon paginécill. en coul. couv. ill. en coul.d14 cm. alivre cartonné 1010aDIEZbSylvain aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aAbécédaire aAnimal aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0333277*81gL-h033327m20141104opqbram1[PRI][Librairie Chapitre][ORLEANS][45000][2 Place de la République][Amandine Groisil][02.38.65.43.43][9,00][][][02.38.65.43.44][][][][][LIB][][][][][][][][][]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]39,1092009-02-23-00.00.00.00000042009-02-23-00.00.00.0000005333276BIB01988nje0 22003971 450 00100090000001000240000907100340003310000240006710500910009120001640018221000200034621500660036630100130043246400210044546400290046646400240049546400230051946400230054246400280056546400290059346400860062246400210070846400260072967600060075568600150076170000390077670100360081570200350085170200370088670200340092380100510095783500060100893000150101493400350102999505260106400427065 a600753085301d17,5900a5308530bUniversal2UNIVERSAL a20090506 1frea01 ba 1[2009-05-06-00.00.00.000000][2009-05-11-00.00.00.000000][2009-05-06-00.00.00.000000][]1 aKangabafCompositeur Lansiné KOUYATEgBalafon Lansiné KOUYATEgVibraphone David NEERMANgGuitare Basse Ira COLEMANgBatterie Laurent ROBINbDC : Disque Compact cUniversald2008 a1 DC11c, (53:13)5[53:13]d13x14cme1 Dépliant avec paroles aS-0038371 aHered(02:49)v11 aDjanfa magnid(03:54)v11 aNiokoméd(05:31)v11 aBolobad(03:39)v11 aTizirid(02:37)v11 aBamanan dond(05:02)v11 aLe Destin IId(03:37)v11 aToumad(04:05)v1fKEITAgMamani4Interprète5INTfKOITAgMoriba4Interprète5INT1 aMomod(02:58)v11 aKanga dubd(18:56)v1 10 a1.3 KOU 7110aKOUYATEbLansinégCompositeur5COM10aNEERMANbDavidgVibraphone5VIB10aKOUYATEbLansinégBalafon5BLF10aCOLEMANbIragGuitare Basse5GUB10aROBINbLaurentgBatterie5BAT aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN aC aJazz4JAZZ a<1><37><1><Afrique><KOU>< >< > aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfS-0038377*81gS-h003837k1.3 KOU 71m20141104opqsrje1[CDM][CD Mail][CERGY PONTOISE Cedex][95523][CD Mail - 9, Chaussée Jules César - B.P. 234 OSNY][Alexandre][01-30-75-11-55][20,00][][][01-30-38-61-26][][][][][CD][Disques compacts][][][][N° de client : DI56363S +Mot de passe : NRI 1335][][][][cdmail@cdmail.fr]2[ACD][Disque Compact Adulte][0][1][CD disponible : Fonds Sonore Adulte][0][0][0][0]317,5992009-05-06-00.00.00.00000042009-05-06-00.00.00.000000538376BIB01414nam0 22002891 450 00100090000001000280000902100070003710000260004410100130007010500910008320000810017421000240025521500070027921500580028622500210034430300190036533000760038467600060046070000200046670200350048670200370052180100510055883000230060983500060063293000130063899504730065100427278 a978-2-218-75474-6d5,00 aFR a20090530 b 0frea01 ba0 afrecfre 1[2009-05-30-00.00.00.000000][][2009-05-30-00.00.00.000000][2004-05-01-00.00.00.000000]1 aC'est doux !fFabienne RAICKgPhotogr. de Amiko YAGIgIll. par Philippe ROUX aPariscHatierd2004 4np anon paginécill. en coul. couv. ill. en coul.d13 cm. 2aPetites Mirettes alivre cartonné aDes livres d'images sur les sensations et les émotions des tout-petits. 1010aRAICKbFabienne10aYAGIbAmikogPhotographies5PH10aROUXbPhilippegIllustré par5IL aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0335667*81gL-h033566m20141104opqbram1[IDE][L'Idée Livres][VENDOME][41100][9 Avenue Gérard Yvon][][02 54 89 09 70][0,00][][][][][][][][REP][Documentaires Jeunesse][][][][Livres avec remise entre 30 et 60 %][9 Avenue Gérard Yvon][41100][VENDOME][]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]31,7092009-05-29-00.00.00.00000042009-05-30-00.00.00.0000005335666BIB01347oam2 22002891 450 00100090000001000290000902100070003810000270004510100080007210500650008020000860014521000490023121500450028022500260032546100440035167600060039568600110040170000240041270200450043680100510048183000350053283500060056793000330057393200220060693200130062899504160064100427471 a978-2-352-94219-1d22,00 aFR a20090710 ke 0frea01 ba1 afre 1[2009-07-10-00.00.00.000000][][2009-07-10-00.00.00.000000][]1 aLe Visage du malfRobert R. McCAMMONgTrad. de l'américain par Benoît DOMISv232 aParisb35 rue de la BienfaisancecBragelonne a400 p.3400ccouv. ill. en coul.d24 cm. 2aL'Ombre de Bragelonne tLe Chant de l'oiseau de nuitv23425290 10 aRF MCC10aMcCAMMONbRobert R.10aDOMISbBenoîtgTrad. de l'américain5TRA aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADU2adultes3ADO4adolescents aR aRoman de science-fiction4RF aRoman Fantastique aThriller aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0336277*81gL-h033627kRF MCCm20141104opqaram1[PRI][Librairie Chapitre][ORLEANS][45000][2 Place de la République][Amandine Groisil][02.38.65.43.43][9,00][][][02.38.65.43.44][][][][][LIB][][][][][][][][][]2[ARA][Roman Adulte][0][1][Livre disponible - Fonds Roman Adulte][0][0][0][0]320,0292009-07-01-00.00.00.00000042009-07-10-00.00.00.0000005336276BIB01451nam1 22002651 450 00100090000001000100000910000270001910100080004610500650005420000920011921000490021121500320026022500260029233006210031867600060093968600110094570000240095670200450098080100510102583000350107683500060111193000330111793200220115093200130117200425290 d20,02 a20080823 ke 0frea01 ba1 afre 1[2008-08-23-00.00.00.000000][][2008-08-23-00.00.00.000000][]1 aLe Chant de l'oiseau de nuitfRobert R. McCAMMONgTrad. de l'américain par Benoît DOMIS aParisb35 rue de la BienfaisancecBragelonne ccouv. ill. en coul.d24 cm. 2aL'Ombre de Bragelonne aLa Nouvelle-Angleterre, an de grâce 1699. Les citoyens de Fount Royal, petit village de Caroline, croient leur ville maudite par une sorcière. Comment expliquer autrement les incendies spontanés, les récoltes gâtées et les meurtres épouvantables? Persuadés que la trop belle Rachel Howarth, la veuve du pasteur récemment décédé, est responsable de ces maux, ils la jettent en prison en attendant son procès et son exécution. +Le juge itinérant Isaac Woodward vient bâcler l'enquête et présider un procès écrit d'avance, avec l'aide de son astucieux clerc Matthew, qui en dépit de tout, croit à l'innocence de Rachel. 10 aRF MCC10aMcCAMMONbRobert R.10aDOMISbBenoîtgTrad. de l'américain5TRA aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADU2adultes3ADO4adolescents aR aRoman de science-fiction4RF aRoman Fantastique aThriller01631nam0 22002771 450 00100090000001000290000902100070003810000260004510100080007110500910007920000300017021000260020021500070022621500570023330300280029033004770031867600060079570000170080180100510081883000230086983500060089293000130089893200160091193200130092799504130094000428043 a978-2-7459-3011-8d13,00 aFR a20091009 b 1frea01 ba0 afre 1[2009-10-09-00.00.00.000000][2009-12-02-00.00.00.000000][2009-12-02-00.00.00.000000][]1 aQui conduit?fLeo TIMMERS aToulousecMiland2008 4np anon paginécill. en coul. couv. ill. en coul.d26x30 alivre cartonné et animé aQui peut conduire un camion de pompiers ? Une voiture de course ? Un tracteur ? +Est-ce l'éléphant ? Le lièvre ? Le cochon ? +Mais où vont tous les animaux ? +Et surtout, qui arrivera le premier ? +Des couleurs vives qui raviront les tout-petits. +Un camion de pompiers, un tracteur, une voiture de course, un avion. Qui conduit ? plaira particulièrement aux petits garçons. +Un album-jeu dans lequel l'enfant pourra s'amuser à deviner quel animal conduit chaque véhicule. 1010aTIMMERSbLeo aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aLivre animé aVéhicule aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0338847*81gL-h033884m20141104opqbram1[TM][Lib. des Temps Modernes][ORLEANS][45000][57 rue N.D de Recouvrance][][02.38.53.94.35][9,00][][][02.38.62.54.20][][][][][LIB][][][][][][][][][]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]311,8392009-10-09-00.00.00.00000042009-12-02-00.00.00.0000005338846BIB01700nam0 22003131 450 00100090000001000290000902100070003810000260004510100130007110500910008420001040017521000260027921500070030521500570031230000330036933003680040267600060077068600060077670000230078270200350080580100510084083000230089183500060091493000130092093200150093393200130094893200090096199504160097000428064 a978-2-7459-3044-6d10,92 aFR a20091009 b 1frea01 ba0 afrecfre 1[2009-10-09-00.00.00.000000][2009-10-12-00.00.00.000000][2009-10-09-00.00.00.000000][]1 aL'Abécédaire à croqueremanuel à l'usage des petits loupsfAgnès de LESTRADEgIll. par DANKERLEROUX aToulousecMiland2008 4np anon paginécill. en coul. couv. ill. en coul.d21x24 aPrix des Incorruptibles 2010 aDe A comme ami à Z comme zut, Agnès de Lestrade et Dankerleroux nous livrent un abécédaire qui ne manque pas de croquant. Se jouant des poncifs, des contes célèbres ou des expressions, ils revisitent cet univers avec un humour des plus mordants. Petits cochons, chaperons rouges, princesses n’ont qu’à bien se tenir… Un vrai manuel à l’usage des apprentis loups ! 10 aL10aLESTRADEbAgnès de10aDANKERLEROUXgIllustré par5IL aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aAbécédaire aAlphabet aLoup aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0339037*81gL-h033903kLm20141104opqbram1[TM][Lib. des Temps Modernes][ORLEANS][45000][57 rue N.D de Recouvrance][][02.38.53.94.35][9,00][][][02.38.62.54.20][][][][][LIB][][][][][][][][][]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]310,9292009-10-09-00.00.00.00000042009-10-09-00.00.00.0000005339036BIB02181nam0 22003011 450 00100090000001000290000902100070003810000260004510100130007110200070008410500910009120000610018221000210024321500070026421500580027133009660032967600060129568600060130170000260130780100510133383000230138483500060140793000130141393200130142693200150143993200120145499504130146600428069 a978-2-8442-0672-5d16,50 aFR a20091009 b 1frea01 ba0 afrecfre aFR 1[2009-10-09-00.00.00.000000][2009-10-12-00.00.00.000000][2009-10-09-00.00.00.000000][]1 aL'Abécédaire illustré de StanislasfStanislas BARTHELEMY cT. Magnierd2008 4np anon paginécill. en coul. couv. ill. en coul.d31 cm. aPour la rentrée des classes Stanislas Barthélémy, le talentueux dessinateur de bandes dessinées (et co-fondateur de l'Association) a créé un magnifique abécédaire, ludique et graphique. Pour chaque lettre, Stanislas Barthélémy nous propose une longue liste de mots (écrits à la main) dont l'image est à retrouver dans des mises en scène drôles et inattendues : un Singe et un Squelette sur un Scooter, un Ange Arrosant une Autruche. L'ensemble est rythmé par de belles planches thématiques : E comme Écologie, L comme Loisirs, M comme Métiers, P comme Planisphère... Un abécédaire qui a le charme des dictionnaires et des livres de lecture d'autrefois... l'humour en plus ! + ++ un tiré-à-part : un plateau de «jeu de mots» inventé par Stanislas Barthélémy, mélange entre le «petit-bac» et le traditionnel jeu de l'oie. Dans chaque case sont indiqués une lettre et un nombre, et le joueur doit trouver le nombre de mots indiqués commençant par cette lettre... + 10 aB10aBARTHELEMYbStanislas aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aAlphabet aAbécédaire aImagier aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0339087*81gL-h033908m20141104opqbram1[TM][Lib. des Temps Modernes][ORLEANS][45000][57 rue N.D de Recouvrance][][02.38.53.94.35][9,00][][][02.38.62.54.20][][][][][LIB][][][][][][][][][]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]315,0292009-10-09-00.00.00.00000042009-10-09-00.00.00.0000005339086BIB01499nam0 22003011 450 00100090000001000290000902100070003810000260004510100130007110500910008420000750017521000260025021500070027621500580028333001870034167600060052868600060053470000210054070200340056170200230059580100510061883000230066983500060069293000130069893200090071193200190072099504580073900428478 a978-2-7459-3106-1d10,90 aFR a20091202 b 1frea01 ba1 afreceng 1[2009-12-02-00.00.00.000000][2009-12-08-00.00.00.000000][2009-12-08-00.00.00.000000][]1 aParce que c'est toi!fDavid VAN BURENgIll. par Tim WARNESgAdapt. MIM aToulousecMiland2008 4np anon paginécill. en coul. couv. ill. en coul.d29 cm. aC'est comme ça que je t'aime : Plus haut que les montagnes, plus chaud que le soleil, plus profond que la mer et plus fort que le vent ! Mais surtout, je t'aime parce que c'est toi ! 10 aV10aVAN BURENbDavid10aWARNESbTimgIllustré par5IL10aMIMgAdapté par5A aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aOurs aAmour maternel aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0341207*81gL-h034120kVm20141104opqbram1[LIBRALFA][Libralfa][Amiens Cedex][80084][17 Rue de Poulainville][Laurent FÜNFSCHILLING][02.47.56.11.49][][][][06.81.18.88.43][][][][][REP][][][][][][][][][laurent.funfschilling@wanadoo.fr]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]310,9092009-12-02-00.00.00.00000042009-12-08-00.00.00.0000005341206BIB01780nam0 22002771 450 00100090000001000280000902100070003710000260004410100130007010500910008320000570017421000370023121500570026822500110032533005530033667600060088968600130089570000230090870200390093180100510097083000230102183500060104493000230105093200080107399504210108100428922 a978-2-211-09724-6d8,50 aFR a20100223 c 1frea01 ba0 afrecfre 1[2010-02-23-00.00.00.000000][2010-05-12-00.00.00.000000][2010-05-12-00.00.00.000000][]1 aPunie !fNathalie KUPERMANgIll. par Anaïs VAUGELADE aPariscL'Ecole des loisirsd2009 a78 p.378cill. en coul. couv. ill. en coul.d19 cm. 2aMouche aUn jour, Olivia passe la récréation au coin, près des poubelles. +Mais ce n'est pas la maîtresse qui l'a punie, c'est Coralie, sa meilleure amie. Olivia est terrifiée. Si elle en parle à sa mère, celle-ci voudra savoir exactement ce qui s'est passé. C'est trop difficile. Comment lui expliquer le secret qui la lie à Coralie, comment lui faire admettre que les objets se transforment en monstres et que, la nuit, le lampadaire et la poupée complotent dans son dos ? Comment lui dire que, depuis qu'elle a deux maisons, rien n'est plus comme avant ? 10 aJR KUP V10aKUPERMANbNathalie10aVAUGELADEbAnaïsgIllustré par5IL aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1V2vert (8-10 ans) aR aRoman jeunesse4JR aMoi aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0343387*81gL-h034338kJR KUP Vm20141104opqjram1[PRI][Librairie Chapitre][ORLEANS][45000][2 Place de la République][Amandine Groisil][02.38.65.43.43][9,00][][][02.38.65.43.44][][][][][LIB][][][][][][][][][]2[ARJ][Roman Jeunesse][0][1][Livre disponible : Fonds Roman Jeunesse][0][0][0][0]37,7492010-02-23-00.00.00.00000042010-05-12-00.00.00.0000005343386BIB01192nam0 22002651 450 00100090000001000280000902100070003710000260004410100130007010500910008320000630017421000200023721500070025721500580026422500160032267600060033870000160034470200390036080100510039983000230045083500060047393000130047993200110049299504230050300428940 a978-2-352-41040-9d9,00 aFR a20100223 b 1frea01 ba0 afrecfre 1[2010-02-23-00.00.00.000000][2010-04-14-00.00.00.000000][2010-04-14-00.00.00.000000][]1 aQue fait la mouche ?fJean LEROYgIll. par Matthieu MAUDET cFrimoussed2009 4np anon paginécill. en coul. couv. ill. en coul.d19 cm. 2aPot d'colle 1010aLEROYbJean10aMAUDETbMatthieugIllustré par5IL aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aMouche aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0343657*81gL-h034365m20141104opqbram1[PRI][Librairie Chapitre][ORLEANS][45000][2 Place de la République][Amandine Groisil][02.38.65.43.43][9,00][][][02.38.65.43.44][][][][][LIB][][][][][][][][][]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]38,1992010-02-23-00.00.00.00000042010-04-14-00.00.00.0000005343656BIB01884oam2 22003011 450 00100090000001000290000902100070003810000260004510100130007110500910008420001430017521000300031821500500034833004290039846100240082767600060085168600120085770000200086970200340088970200380092370200500096180100510101183000210106283500060108393000450108993200220113499504260115600431267 a978-2-07-063477-4d13,65 aFR a20101006 e 1frea01 ba1 afrecger 1[2010-10-06-00.00.00.000000][2011-02-16-00.00.00.000000][2011-02-16-00.00.00.000000][]1 aLe Sortilège de pierrefCornelia FUNKEgCo-Auteur Lionel WIGRAMgIll. par Cornelia FUNKEgTrad. de l'allemand par Marie-Claude AUGERv131 aPariscGallimard Jeunesse a327 p.3327cill. couv. ill. en coul.d23 cm. aEn découvrant un monde extraordinaire derrière le miroir de leur appartement new-yorkais, Jacob Reckless pensait avoir trouvé la liberté. +Mais cet univers fascinant est aussi dangereux et, un jour, Will, son jeune frère, déjoue la vigilance de Jacob et le suit à travers le miroir. Victime d'un maléfice, il se transforme en monstre, brisant ainsi le coeur de celle qu'il aime... Reckless n'a que deux jours pour le sauver! tRecklessv13430347 10 aRFO FUN10aFUNKEbCornelia10aWIGRAMbLionelgCo-auteur5CA10aFUNKEbCorneliagIllustré par5IL10aAUGERbMarie-ClaudegTrad. de l'allemand5TRD aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADO2adolescents aR aRoman de science-fiction adolescent4RFO aRoman Fantastique aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0349147*81gL-h034914kRFO FUNm20141104opqeram1[PRI][Librairie Chapitre][ORLEANS][45000][2 Place de la République][Amandine Groisil][02.38.65.43.43][9,00][][][02.38.65.43.44][][][][][LIB][][][][][][][][][]2[ARE][Roman Adolescent][0][1][Livre disponible - Romans Fonds Adolescent][0][0][0][0]313,6592010-10-06-00.00.00.00000042011-02-16-00.00.00.0000005349146BIB00873nam1 22002531 450 00100090000001000100000902100070001910000260002610100130005210500650006520001230013021000300025321500370028367600060032068600120032670000200033870200340035870200380039270200500043080100510048083000210053193000450055293200220059700430347 d13,65 aFR a20101006 e 0frea01 ba1 afrecger 1[2010-10-06-00.00.00.000000][][2010-10-06-00.00.00.000000][]1 aRecklessfCornelia FUNKEgCo-Auteur Lionel WIGRAMgIll. par Cornelia FUNKEgTrad. de l'allemand par Marie-Claude AUGER aPariscGallimard Jeunesse cill. couv. ill. en coul.d23 cm. 10 aRFO FUN10aFUNKEbCornelia10aWIGRAMbLionelgCo-auteur5CA10aFUNKEbCorneliagIllustré par5IL10aAUGERbMarie-ClaudegTrad. de l'allemand5TRD aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADO2adolescents aRoman de science-fiction adolescent4RFO aRoman Fantastique01355nam0 22002531 450 00100090000001000290000902100070003810000260004510100130007110500650008420000540014921000270020321500070023021500580023733002810029567600060057668600060058270000210058880100510060983000230066083500060068393000130068999503990070200431303 a978-2-8486-5384-6d15,00 aFR a20110222 b 0frea01 ba0 afrecfre 1[2011-02-22-00.00.00.000000][][2011-03-18-00.00.00.000000][]1 aLe Grand Show des petites chosesfGilbert LEGRAND aPariscSarbacaned2010 4np anon paginécill. en coul. couv. ill. en coul.d26 cm. aUn écrou papillon pointe le bout de son bec par la porte d'un placard... et c'est toute une ribambelle de petites choses - clés à molette, scies à bois, embauchoirs, cintres, truelles, louches, passoires, robinets... - qui s'animent soudain et font le Grand Show de leur vie ! 10 aL10aLEGRANDbGilbert aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0352717*81gL-h035271kLm20141104opqbram1[CHA][Chantelivre][Orléans][45000][15 Place du Martroi][][02.38.68.06.00][9,00][][][][][][][][LIB][][][][][][][][][02.38.21.84.32]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]313,6592011-02-22-00.00.00.00000042011-03-18-00.00.00.0000005352716BIB01556nam0 22002891 450 00100090000001000280000902100070003710000260004410100080007010500650007820000820014321000240022521500570024922500280030633003000033467600060063468600060064070000290064670200390067580100510071483000230076583500060078893000140079493200100080893200220081899504260084000431374 a978-2-09-251152-7d4,55 aFR a20110302 b 0frea01 ba0 afre 1[2011-03-02-00.00.00.000000][][2011-04-20-00.00.00.000000][]1 aLa Princesse au petit poisfHans Christian ANDERSENgIll. par Camille SEMELET aPariscNathand2009 a29 p.329cill. en coul. couv. ill. en coul.d20 cm. 2aLes petits caillouxv13 al était une fois "... +un prince qui voulait se marier. Hélas, aucune des jeunes filles qu'on lui présentait ne trouvait grâce à ses yeux. Un soir, par un terrible orage, une jeune fille frappa à la porte du château. S'agissait-il, enfin, de la princesse que le prince avait tant cherchée ?... " 10 aA10aANDERSENbHans Christian10aSEMELETbCamillegIllustré par5IL aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aContes4C aConte aPrince, Princesse aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0353227*81gL-h035322kAm20141104opqbram1[PRI][Librairie Chapitre][ORLEANS][45000][2 Place de la République][Amandine Groisil][02.38.65.43.43][9,00][][][02.38.65.43.44][][][][][LIB][][][][][][][][][]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]34,5592011-03-02-00.00.00.00000042011-04-20-00.00.00.0000005353226BIB01881nje0 22003971 450 00100090000001000250000907100260003410000240006010500910008420000690017521000260024421500550027030100130032546400310033846400380036946400500040746400250045746400360048246400340051846400220055246400610057446400280063546400920066346400230075546400250077846400650080346400590086867600060092768600120093370000380094580100510098383500060103493000160104093400320105699503950108800431572 a3341348162102d17,1000a816210bSocadisc2SOC a20110406 0frea01 ba 1[2011-04-06-00.00.00.000000][][2011-04-20-00.00.00.000000][2011-04-06-00.00.00.000000]1 aEchos du tempsfaut. compos. interp DANAKILbDC : Disque Compact aPariscSocadiscd2011 a1 DC11c, (66:54)5[66:54]e1 Livret avec paroles aS-0043191 aQuitter Panamed(03:57)v11 aLes Pages se tournentd(03:18)v11 aFreed(06:00)v1fNATTY JEAN4Interprète5INT1 aL'Avenird(04:25)v11 aLa Route des songesd(06:48)v11 aHéritiers du sortd(04:42)v11 aObéird(03:20)v11 aRegards croisésd(04:56)v1fNATTY JEAN4Interprète5INT1 aA tes côtésd(04:27)v11 aMediad(05:32)v1fMC ANUFF Winston4Interprète5INTfMC ANUFF Matthew4Interprète5INT1 aPasserd(05:11)v11 aTimelined(04:41)v11 aNon, je ne regrette riend(04:52)v1fU ROY4Interprète5INT1 aDub poetry mediad(04:38)v1fDJ LION4Interprète5INT 10 a1.6 DAN10aDANAKILgaut. compos. interp5ACI aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN aC aReggae4REG a<1><6><><Reggae><DAN>< >< > aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfS-0043197*81gS-h004319k1.6 DANm20141104opqsrje1[FNAC][FNAC][ORLEANS][45000][16 rue de la République][][38.53.10.10][0,00][][][][][][][][][fournitures mat. audio][][][][][][][][]2[ACD][Disque Compact Adulte][0][1][CD disponible : Fonds Sonore Adulte][0][0][0][0]317,1092011-04-06-00.00.00.00000042011-04-20-00.00.00.000000543196BIB01346nam0 22003011 450 00100090000001000280000902100070003710000260004410100130007010500650008320000600014821000320020821500070024021500620024722500160030930300190032533001170034467600060046170000270046770200360049480100510053083000230058183500060060493000130061093200100062393200160063399503950064900432024 a978-2-7404-2867-2d7,95 aFR a20110531 b 0frea01 ba0 afrecfre 1[2011-05-31-00.00.00.000000][][2011-06-01-00.00.00.000000][]1 aA l'écolefElisabeth de LAMBILLYgIll. par Marie MAHLER aPariscMango Jeunessed2011 4np anon paginécill. en coul. couv. ill. en coul.d22 x 19 cm 2aTirelirette alivre cartonné aCe matin, tout le monde part à l'école. Patou et ses amis sont très excités : qu'allons-nous faire aujourd'hui ? 1010aLAMBILLYbElisabeth de10aMAHLERbMariegIllustré par5IL aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aEcole aLivre animé aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0356167*81gL-h035616m20141104opqbram1[CHA][Chantelivre][Orléans][45000][15 Place du Martroi][][02.38.68.06.00][9,00][][][][][][][][LIB][][][][][][][][][02.38.21.84.32]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]37,2392011-05-31-00.00.00.00000042011-06-01-00.00.00.0000005356166BIB01195nam0 22002891 450 00100090000001000290000902100070003810000260004510100130007110500650008420000430014921000330019221500070022521500570023222500140028933000840030367600060038768600060039370200370039980100510043683000230048783500060051093000130051693200130052993200110054299503520055300432087 a978-2-278-06160-0d11,00 aFR a20110608 b 0frea01 ba0 afrecfre 1[2011-06-08-00.00.00.000000][][2011-06-08-00.00.00.000000][]1 aA la volette !fIll. par Cécile BONBON aPariscDidier Jeunessed2008 4np anon paginécill. en coul. couv. ill. en coul.d23x24 2aPirouette aMon petit oiseau a pris sa volée, a pris sa... +à la volette, a pris sa volée ! 10 aA10aBONBONbCécilegIllustré par5IL aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aComptine aOiseau aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0356647*81gL-h035664kAm20141104opqbram1[DON][Don][][45][][][][0,00][][][][][][][][][mobilier bibliothèque][][][][][][][][]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]311,0092011-06-08-00.00.00.00000042011-06-08-00.00.00.0000005356646BIB01487nam0 22002891 450 00100090000001000280000902100070003710000260004410100130007010500650008320000550014821000360020321500070023921500580024622500180030433003290032267600060065168600060065770000240066380100510068783000230073883500060076193000130076793200080078093200110078899503980079900433294 a978-2-07-063729-4d5,01 aFR a20111220 b 0frea01 ba0 afrecfre 1[2011-12-20-00.00.00.000000][][2012-03-08-00.00.00.000000][]1 aL'Ane Trotro fait un spectaclefBénédicte GUETTIER aPariscGallimard Jeunessed2011 4np anon paginécill. en coul. couv. ill. en coul.d19 cm. 2aGibouléesv23 aL’âne Trotro est de retour. Jamais à court d’idées pour inventer de nouveaux jeux et s’amuser, il a aujourd’hui décidé de faire un spectacle pour ses parents. Avec ses deux fidèles amies, Lili et Nana, ils imaginent différentes scènes rigolotes, d’acrobaties, de dressage de tigre. Mais le moment venu, tout part de travers. 10 aG10aGUETTIERbBénédicte aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aAne aCirque aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0361747*81gL-h036174kGm20141104opqbram1[CHA][Chantelivre][Orléans][45000][15 Place du Martroi][][02.38.68.06.00][9,00][][][][][][][][LIB][][][][][][][][][02.38.21.84.32]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]35,0192011-12-20-00.00.00.00000042012-03-08-00.00.00.0000005361746BIB01807nam0 22003251 450 00100090000001000280000902100070003710000260004410100130007010500650008320001100014821000360025821500070029421500580030122500180035933004570037767600060083468600060084070000290084670200410087570200400091680100510095683000230100783500060103093000130103693200130104993200110106293200100107399503980108300433296 a978-2-07-064169-7d5,46 aFR a20111220 b 0frea01 ba0 afrecfre 1[2011-12-20-00.00.00.000000][][2012-03-08-00.00.00.000000][]1 aLa Rue, mode d'emploifCatherine DOLTO-TOLITCHgCo-Auteur Colline FAURE-POIREEgIll. par Frédérick MANSOT aPariscGallimard Jeunessed2011 4np anon paginécill. en coul. couv. ill. en coul.d18 cm. 2aGibouléesv66 aDans la ville et sur la route, il y a beaucoup de dangers pour les petits enfants. +C'est long d'apprendre la prudence et la patience qui permettent de se promener sans se mettre dans une situation dangereuse. C'est pourquoi il faut bien écouter et observer les grandes personnes quand elles vous montrent ce qu'il faut faire ou ne pas faire. Pour les piétons, il y a des règles comme pour les automobilistes. En les respectant, on évite les accidents. 10 aD10aDOLTO-TOLITCHbCatherine10aFAURE-POIREEbCollinegCo-auteur5CA10aMANSOTbFrédérickgIllustré par5IL aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aAccident aDanger aVille aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0361767*81gL-h036176kDm20141104opqbram1[CHA][Chantelivre][Orléans][45000][15 Place du Martroi][][02.38.68.06.00][9,00][][][][][][][][LIB][][][][][][][][][02.38.21.84.32]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]35,4692011-12-20-00.00.00.00000042012-03-08-00.00.00.0000005361766BIB01444nam0 22002891 450 00100090000001000280000902100070003710000260004410100130007010500650008320000650014821000370021321500070025021500580025722500170031530300190033233002320035167600060058370000210058970200400061080100510065083000230070183500060072493000130073093200160074399503950075900433311 a978-2-211-20770-6d9,10 aFR a20111220 b 0frea01 ba0 afrecfre 1[2011-12-20-00.00.00.000000][][2012-02-08-00.00.00.000000][]1 aMais il est où ?fCédric RAMADIERgIll. par Vincent BOURGEAU aPariscL'Ecole des loisirsd2011 4np anon paginécill. en coul. couv. ill. en coul.d20 cm. 2aLoulou & Cie alivre cartonné aMais il est où, le petit canari que l’on cherche partout ? Sous les feuilles mortes, il y a des champignons, et sous les champignons ? Une fourmi ! Et ainsi de suite, avec deux flaps à chaque page pour encore plus de surprises. 1010aRAMADIERbCédric10aBOURGEAUbVincentgIllustré par5IL aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aLivre animé aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0361907*81gL-h036190m20141104opqbram1[CHA][Chantelivre][Orléans][45000][15 Place du Martroi][][02.38.68.06.00][9,00][][][][][][][][LIB][][][][][][][][][02.38.21.84.32]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]39,1092011-12-20-00.00.00.00000042012-02-08-00.00.00.0000005361906BIB01856oam2 22002771 450 00100090000001000290000902100070003810000260004510100080007110500650007920000870014421000160023121500450024733006370029246100310092967600060096068600110096670000230097770200430100080100510104383000170109483500060111193000330111793200120115099504160116200433339 a978-2-360-51013-9d25,90 aFR a20111220 k 0frea01 ba1 afre 1[2011-12-20-00.00.00.000000][][2012-01-03-00.00.00.000000][]1 aLe Héros des sièclesfBrandon SANDERSONgTrad. de l'anglais par Mélanie FAZIv333 cOrbitd2011 a690 p.3690ccouv. ill. en coul.d24 cm. aQui sera le Héros des Siècles? +Pour mettre fin à la tyrannie, Vin a tué le Seigneur Maître. Mais en essayant de fermer le Puits de l’Ascension, elle a laissé s’échapper une des formes maléfiques de l’Insondable. Depuis, les Inquisiteurs et les brumes font toujours plus de victimes, tandis que les cendres qui tombent du ciel menacent d’affamer les hommes et d’ensevelir le pays. Vin et Elend tentent de sauver ce qui peut encore l’être. Pour cela, ils doivent à tout prix découvrir les derniers secrets du Seigneur Maître : l’ultime cachette d’atium, le plus puissant métal des Fils-des-Brumes… et l’identité du Héros des Siècles. tFils des brumesv33431671 10 aRF SAN10aSANDERSONbBrandon10aFAZIbMélaniegTrad. de l'anglais5TRG aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADU2adultes aR aRoman de science-fiction4RF aFantasy aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0362187*81gL-h036218kRF SANm20141104opqaram1[PRI][Librairie Chapitre][ORLEANS][45000][2 Place de la République][Amandine Groisil][02.38.65.43.43][9,00][][][02.38.65.43.44][][][][][LIB][][][][][][][][][]2[ARA][Roman Adulte][0][1][Livre disponible - Fonds Roman Adulte][0][0][0][0]323,5792011-12-20-00.00.00.00000042012-01-03-00.00.00.0000005362186BIB00595nam1 22002291 450 00100090000001000100000902100070001910000260002610100080005210500650006020000390012521000100016421500320017467600060020668600110021270000230022380100510024683000170029783500060031493000330032093200120035300431671 d22,75 aFR a20110412 k 0frea01 ba1 afre 1[2011-04-12-00.00.00.000000][][2011-04-12-00.00.00.000000][]1 aFils des brumesfBrandon SANDERSON cOrbit ccouv. ill. en coul.d24 cm. 10 aRF SAN10aSANDERSONbBrandon aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADU2adultes aR aRoman de science-fiction4RF aFantasy01792oam2 22002771 450 00100090000001000290000902100070003810000260004510100130007110500650008420000920014921000160024121500450025733005610030246100310086367600060089468600110090070000230091170200450093480100510097983000170103083500060104793000330105393200120108699504160109800433378 a978-2-360-51012-2d25,90 aFR a20111223 k 0frea01 ba1 afreceng 1[2011-12-23-00.00.00.000000][][2011-12-23-00.00.00.000000][]1 aLe Puits de l'AscensionfBrandon SANDERSONgTrad. de l'américain par Mélanie FAZIv232 cOrbitd2010 a725 p.3725ccouv. ill. en coul.d24 cm. aEn mettant fin au règne brutal et millénaire du tyran, ils ont réalisé l’impossible. À présent, Vin la gamine des rues devenue Fille-des-Brumes, et Elend Venture, le jeune noble idéaliste, doivent construire un nouveau gouvernement sur les cendres de l’Empire. Mais trois armées menées par des factions hostiles, dont celle des monstrueux koloss, font le siège de Luthadel. Alors que l’étau se resserre, une légende évoquant le mystérieux Puits de l’Ascension leur offre une lueur d’espoir. Et si tuer le Seigneur Maître avait été la partie la plus facile? tFils des brumesv23431671 10 aRF SAN10aSANDERSONbBrandon10aFAZIbMélaniegTrad. de l'américain5TRA aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADU2adultes aR aRoman de science-fiction4RF aFantasy aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0362547*81gL-h036254kRF SANm20141104opqaram1[PRI][Librairie Chapitre][ORLEANS][45000][2 Place de la République][Amandine Groisil][02.38.65.43.43][9,00][][][02.38.65.43.44][][][][][LIB][][][][][][][][][]2[ARA][Roman Adulte][0][1][Livre disponible - Fonds Roman Adulte][0][0][0][0]323,5792011-12-23-00.00.00.00000042011-12-23-00.00.00.0000005362546BIB01261nam0 22002771 450 00100090000001000240000902100070003310000260004010100130006610500650007920000380014421000370018221500070021921500580022633002030028467600060048768600060049370000180049980100510051783000230056883500060059193000130059793200100061093200120062099503510063200433649 a2-211-05413-7d5,50 aFR a20120312 b 0frea01 ba0 afrecfre 1[2012-03-12-00.00.00.000000][][2012-03-12-00.00.00.000000][]1 aToutes les couleursfAlex SANDERS aPariscL'Ecole des loisirsd1998 4np anon paginécill. en coul. couv. ill. en coul.d22 cm. aA force de jouer dans la nature, ce petit lapin a le derrière tout vert, la bouche toute rouge et les pieds tout marron et les bras tout jaunes! Pour nettoyer tout ça: vive le bleu de l'eau du bain! 10 aS10aSANDERSbAlex aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aLapin aCouleur aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0362587*81gL-h036258kSm20141104opqbram1[DON][Don][][45][][][][0,00][][][][][][][][][mobilier bibliothèque][][][][][][][][]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]35,5092012-03-12-00.00.00.00000042012-03-12-00.00.00.0000005362586BIB01527nam0 22002771 450 00100090000001000290000902100210003810000260005910100080008510500910009320000380018421000330022221500070025521500580026222500140032033003780033467600060071268600060071870000200072480100510074483000230079583500060081893000130082493200130083799503990085000433883 a978-2-278-06749-7d11,50 aFRbDLE-20111219 a20120406 b 1frea01 ba0 afre 1[2012-04-06-00.00.00.000000][2012-05-02-00.00.00.000000][2012-05-02-00.00.00.000000][]1 aPomme de reinettefMartine BOURRE aPariscDidier Jeunessed2012 4np anon paginécill. en coul. couv. ill. en coul.d23 cm. 2aPirouette aPomme de reinette et pomme d'api , la célèbre comptine revisitée aux couleurs tendres de l'automne. Au fil des pages, le lecteur suit une petite fille coiffée d'une charlotte rouge et blanche qui joue, grimpe aux arbres et mord dans la vie à belles dents. Les collages de Martine Bourre montrent les compagnons du jardin : le raton-laveur chapardeur, le chaton, l'oiseau... 10 aB10aBOURREbMartine aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aComptine aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0364417*81gL-h036441kBm20141104opqbram1[CHA][Chantelivre][Orléans][45000][15 Place du Martroi][][02.38.68.06.00][9,00][][][][][][][][LIB][][][][][][][][][02.38.21.84.32]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]310,4792012-04-07-00.00.00.00000042012-05-02-00.00.00.0000005364416BIB01439nam0 22002771 450 00100090000001000290000902100210003810000260005910100130008510500910009820000680018921000300025721500070028721500580029433002310035267600060058368600060058970000180059570200460061380100510065983000230071083500060073393000130073993200100075299503990076200433885 a978-2-87767-734-9d13,50 aFRbDLE-20120301 a20120406 b 1frea01 ba1 afreceng 1[2012-04-06-00.00.00.000000][2012-05-02-00.00.00.000000][2012-05-02-00.00.00.000000][]1 aÀ table !fRebecca COBBgTrad. de l'anglais par Elisabeth DUVAL aPariscKaleidoscoped2012 4np anon paginécill. en coul. couv. ill. en coul.d28 cm. aLe déjeuner est prêt mais l'enfant n'a pas faim, elle est bien trop occupée pour venir manger. Et puisque maman l'y oblige, la fillette décide de bouder son assiette... pour la plus grande joie de trois surprenants gourmands ! 10 aC10aCOBBbRebecca10aDUVALbElisabethgTrad. de l'anglais5TRG aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aRepas aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0364327*81gL-h036432kCm20141104opqbram1[CHA][Chantelivre][Orléans][45000][15 Place du Martroi][][02.38.68.06.00][9,00][][][][][][][][LIB][][][][][][][][][02.38.21.84.32]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]312,2992012-04-07-00.00.00.00000042012-05-02-00.00.00.0000005364326BIB02068nam0 22002531 450 00100090000001000290000910000260003810100130006410500910007720000680016821000590023621500450029533008820034067600060122268600110122870000180123970200470125780100510130483000210135583500060137693000250138293200100140799503970141700433953 a978-2-7485-1179-6d16,90 a20120406 e 1frea01 ba1 afreceng 1[2012-04-06-00.00.00.000000][2012-05-23-00.00.00.000000][2012-05-23-00.00.00.000000][]1 aDoglandsfTim WILLOCKSgTrad. de l'anglais par Benjamin LEGRAND aParisb9 bis, rue Abel HovelaquecSyros Jeunessed2012 a343 p.3343ccouv. ill. en coul.d22 cm. aFurgul est un jeune chiot né dans une sorte d’enfer où sont élevés les lévriers de course. +Maltraités, affamés, ces lévriers ne sont là que pour gagner des courses et enrichir leur éleveur, un dénommé Dedbone, une brute malfaisante. +La mère de Furgul, la belle et rapide Keeva lui confie bientôt qu’il est en danger. +En effet, il n’est pas de race pure. +Son père Argal est un grand chien loup qui a réussi à s’enfuir. +Une seule solution pour Furgul, quitter cet endroit invivable, même si pour cela il doit abandonner sa mère. +Il va se confronter au monde des hommes afin de rejoindre un jour les « Dog lands » un lieu mythique dont le souvenir imprègne l’âme des chiens. Ce vaste espace où vivaient en toute liberté lévriers et chiens loups bien avant l’apparition de l’homme… + +Un beau roman d’aventures, de réflexions et d’émotions où la parole est donnée aux chiens. 10 aRO WIL10aWILLOCKSbTim10aLEGRANDbBenjamingTrad. de l'anglais5TRG aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADO2adolescents aR aRoman adolescent4RO aChien aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0364097*81gL-h036409kRO WILm20141104opqeram1[CHA][Chantelivre][Orléans][45000][15 Place du Martroi][][02.38.68.06.00][9,00][][][][][][][][LIB][][][][][][][][][02.38.21.84.32]2[ARE][Roman Adolescent][0][1][Livre disponible - Romans Fonds Adolescent][0][0][0][0]315,3892012-04-07-00.00.00.00000042012-05-23-00.00.00.0000005364096BIB01177nam0 22002411 450 00100090000001000290000910000260003810100080006410500910007220000440016321000180020721500590022522500150028467600920029968600170039170000210040880100510042983000230048083500060050393000300050993200110053999503850055000434676 a978-2-215-08830-1d11,50 a20120829 b 0frea01 ba0 afre 1[2012-08-29-00.00.00.000000][][2012-08-29-00.00.00.000000][2012-08-29-00.00.00.000000]1 aL'Imagerie des piratesfEmilie BEAUMONT cFleurusd2007 a124 p.3124cill. en coul. couv. ill. en coul.d23 cm. 2aL'imagerie a910.45tAventures maritimes (naufrages, expéditions de pirates, trésors sous-marins)11 a910.45 BEA B10aBEAUMONTbEmilie aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aD aDocumentaire jeunesse4DJ aPirate aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0366317*81gL-h036631k910.45 BEA Bm20141104opqbram1[DON][Don][][45][][][][0,00][][][][][][][][][mobilier bibliothèque][][][][][][][][]2[ADJM][Documentaire "Jardin des Mots"][0][1][Livre disponible : Fonds documentaire Au Jardin des Mots][0][0][0][0]311,5092012-08-29-00.00.00.00000042012-08-29-00.00.00.0000005366316BIB01511nam0 22002771 450 00100090000001000290000902100070003810000260004510100130007110500910008420000440017521000350021921500450025422500210029933002870032067600060060768600140061370000280062780100510065583000170070683500060072393000230072993200170075293200190076999504450078800434956 a978-2-366-37045-4d18,00 aFR a20121031 k 1frea01 ba0 afrecfre 1[2012-10-31-00.00.00.000000][2014-09-04-00.00.00.000000][2012-10-23-00.00.00.000000][]1 aL'Ouest barbarefJean-François COATMEUR aLa Roque-sur-PernescVDBd2012 a318 p.3318ccouv. ill. en coul.d23 cm. 2aSpécial Suspense aEn juin 1940, lors d'un transfert, Jérôme, prisonnier qui clame son innocence, parvient à s'évader de la prison de Poissy avec Jean-Paul. Jérôme, qui souhaite rejoindre sa femme près de Douarnenez, propose à ce dernier de l'accompagner avant de tenter un passage en Grande-Bretagne. 10 aRS COA LV10aCOATMEURbJean-François aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADU2adultes aR aRoman suspense4RS aLarge vision aRoman Suspense aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0367507*81gL-h036750kRS COA LVm20141104opqaram1[VDB][Ed. V.D.B. SARL][La Roque-sur-Pernes][84210]['Les Restanques' F.][16.90.66.50.03][01.90.66.550.03][9,00][][][][][][][][EDI][Livres grands caractères][][][][][][][][]2[ALV][Livre Large Vision Adulte][0][1][Livre disponible : Fonds Large Vision][0][0][0][0]316,3892012-10-23-00.00.00.00000042012-10-23-00.00.00.0000005367506BIB01214nam0 22002891 450 00100090000001000290000902100070003810000260004510100130007110500910008420000300017521000260020521500070023121500580023822500260029630300190032233000470034167600060038870000190039480100510041383000230046483500060048793000130049393200120050693200100051899503960052800435104 a978-2-7459-5373-5d13,90 aFR a20121114 b 0frea01 ba0 afrecfre 1[2012-11-14-00.00.00.000000][][2013-02-15-00.00.00.000000][2012-09-01-00.00.00.000000]1 aLes FormesfXavier DENEUX aToulousecMiland2012 4np anon paginécill. en coul. couv. ill. en coul.d19 cm. 2aLes Imagiers gigognes aLivre cartonné aAlbum tactile pour apprendre les formes... 1010aDENEUXbXavier aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aImagier aForme aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0368377*81gL-h036837m20141104opqbram1[CHA][Chantelivre][Orléans][45000][15 Place du Martroi][][02.38.68.06.00][9,00][][][][][][][][LIB][][][][][][][][][02.38.21.84.32]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]312,6592012-11-14-00.00.00.00000042013-02-15-00.00.00.0000005368376BIB01583oam2 22003011 450 00100090000001000290000902100070003810000260004510100130007110500650008420000800014921000470022921500590027622500140033522500120034933002480036146100210060967600060063068600130063670000350064970200390068480100510072383000230077483500060079793000230080393200260082699504290085200435509 a978-2-7470-3907-9d11,50 aFR a20130102 c 0frea01 ba0 afrecfre 1[2013-01-02-00.00.00.000000][][2012-12-17-00.00.00.000000][]1 aLe Maître chienfdessins de Marc BOUTAVANTgScén. de Emmanuel GUIBERTv738 aParisb3 Rue BayardcBayard Jeunessed2011 a124 p.3124cill. en coul. couv. ill. en coul.d21 cm. 2aBayard BD 2aBD kids aCe nouveau volume met en avant la figure de monsieur Blount, maitre d'école à la fois attentif et exigeant. Rarement rasé mais jamais rasoir, il se montre fin pédagogue en apprenant notamment aux élèves à dessiner un visage avec des chiffres ! tAriolv73422538 10 aBD ARI J10aBOUTAVANTbMarcgDessins de5D10aGUIBERTbEmmanuelgScénario de5SC aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1J2jaune (5-8 ans) aI aBande dessinée4BD aBande dessinée enfant aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0371297*81gL-h037129kBD ARI Jm20141104opqjram1[PRI][Librairie Chapitre][ORLEANS][45000][2 Place de la République][Amandine Groisil][02.38.65.43.43][9,00][][][02.38.65.43.44][][][][][LIB][][][][][][][][][]2[ABDJ][Bande Dessinée Jeunesse][0][1][Livre disponible : Fonds BD Jeunesse][0][0][0][0]310,4792012-12-17-00.00.00.00000042012-12-17-00.00.00.0000005371296BIB00794nam1 22002651 450 00100090000001000090000902100070001810000260002510100130005110500650006420000640012921000410019321500460023422500140028022500120029467600060030668600130031270000350032570200390036080100510039983000230045083500060047393000230047993200260050200422538 d9,90 aFR a20070606 c 0frea01 ba0 afrecfre 1[2007-06-06-00.00.00.000000][][2007-06-06-00.00.00.000000][]1 aAriolfdessins de Marc BOUTAVANTgScén. de Emmanuel GUIBERT aParisb3 Rue BayardcBayard Jeunesse cill. en coul. couv. ill. en coul.d21 cm. 2aBayard BD 2aBD kids 10 aBD ARI J10aBOUTAVANTbMarcgDessins de5D10aGUIBERTbEmmanuelgScénario de5SC aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1J2jaune (5-8 ans) aI aBande dessinée4BD aBande dessinée enfant01458oam2 22002891 450 00100090000001000280000902100070003710000260004410100130007010500650008320000740014821000140022221500610023633001830029746100330048067600060051368600130051970000390053270200300057180100510060183000230065283500060067593000230068193200260070493200100073099504280074000435887 a978-2-359-66026-5d8,90 aFR a20130301 c 0frea01 ba0 afrecfre 1[2013-03-01-00.00.00.000000][][2013-03-01-00.00.00.000000][]1 aLa PrisonnièrefScén. de Jean-Marie OMONTgdessins de Golo ZHAOv232 cFeid2011 a94 p.394cill. en coul. couv. ill. en coul.d13 x 18 cm aYaya et Tuduo sont les otages de Zhu, le parrain des bas quartiers de Shanghai. Il force Yaya à exécuter les travaux qu'il demande et oblige Tuduo à cambrioler de riches maisons. tLa Balade de Yayav23435888 10 aBD BAL V10aOMONTbJean-MariegScénario de5SC10aZHAObGologDessins de5D aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1V2vert (8-10 ans) aI aBande dessinée4BD aBande dessinée enfant aManga aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0371837*81gL-h037183kBD BAL Vm20141104opqjram1[PRI][Librairie Chapitre][ORLEANS][45000][2 Place de la République][Amandine Groisil][02.38.65.43.43][9,00][][][02.38.65.43.44][][][][][LIB][][][][][][][][][]2[ABDJ][Bande Dessinée Jeunesse][0][1][Livre disponible : Fonds BD Jeunesse][0][0][0][0]38,1092013-03-01-00.00.00.00000042013-03-01-00.00.00.0000005371836BIB00739nam1 22002531 450 00100090000001000090000902100070001810000260002510100130005110500650006420000710012921000080020021500500020867600060025868600130026470000390027770200300031680100510034683000230039783500060042093000230042693200260044993200100047500435888 d8,10 aFR a20130301 c 0frea01 ba0 afrecfre 1[2013-03-01-00.00.00.000000][][2013-03-01-00.00.00.000000][]1 aLa Balade de YayafScén. de Jean-Marie OMONTgdessins de Golo ZHAO cFei cill. en coul. couv. ill. en coul.d13 x 18 cm 10 aBD BAL V10aOMONTbJean-MariegScénario de5SC10aZHAObGologDessins de5D aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1V2vert (8-10 ans) aI aBande dessinée4BD aBande dessinée enfant aManga01491oam2 22002891 450 00100090000001000280000902100070003710000260004410100130007010500650008320000680014821000140021621500610023033002220029146100330051367600060054668600130055270000390056570200300060480100510063483000230068583500060070893000230071493200260073793200100076399504280077300435927 a978-2-359-66025-8d8,90 aFR a20130301 c 0frea01 ba0 afrecfre 1[2013-03-01-00.00.00.000000][][2013-03-01-00.00.00.000000][]1 aLa FuguefScén. de Jean-Marie OMONTgdessins de Golo ZHAOv131 cFeid2011 a93 p.393cill. en coul. couv. ill. en coul.d13 x 18 cm aDans le climat tragique de la Seconde Guerre mondiale en Chine, deux enfants se lient d'une amitié profonde alors que tout semblait les séparer : Yaya est une petite fille de bonne famille et Tuduo, un gamin des rues. tLa Balade de Yayav13435888 10 aBD BAL V10aOMONTbJean-MariegScénario de5SC10aZHAObGologDessins de5D aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1V2vert (8-10 ans) aI aBande dessinée4BD aBande dessinée enfant aManga aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0371827*81gL-h037182kBD BAL Vm20141104opqjram1[PRI][Librairie Chapitre][ORLEANS][45000][2 Place de la République][Amandine Groisil][02.38.65.43.43][9,00][][][02.38.65.43.44][][][][][LIB][][][][][][][][][]2[ABDJ][Bande Dessinée Jeunesse][0][1][Livre disponible : Fonds BD Jeunesse][0][0][0][0]38,1092013-03-01-00.00.00.00000042013-03-01-00.00.00.0000005371826BIB01412nam0 22002891 450 00100090000001000280000902100070003710000260004410100130007010500650008320000590014821000200020721500070022721500580023422500240029230300190031633002250033567600060056070000410056680100510060783000230065883500060068193000130068793200160070093200110071699503950072700436127 a978-2-352-41063-8d6,60 aFR a20130403 b 0frea01 ba0 afrecfre 1[2013-04-03-00.00.00.000000][][2013-08-09-00.00.00.000000][]1 aZouik le rouge-gorgefTexte et ill. de Edouard MANCEAU cFrimoussed2010 4np anon paginécill. en coul. couv. ill. en coul.d14 cm. 2aLa P'tite étincelle aLivre cartonné aDans cette collection, des histoires décalées, pleines d'humour et de poésie, présentées comme des légendes, expliquent pourquoi les animaux ont telle ou telle apparence : où l'on apprend pourquoi Zouik a la gorge rouge. 1010aMANCEAUbEdouardgTexte et ill.5TIL aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aRouge-gorge aOiseau aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0372807*81gL-h037280m20141104opqbram1[CHA][Chantelivre][Orléans][45000][15 Place du Martroi][][02.38.68.06.00][9,00][][][][][][][][LIB][][][][][][][][][02.38.21.84.32]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]36,0192013-04-03-00.00.00.00000042013-08-09-00.00.00.0000005372806BIB01969nam0 22002651 450 00100090000001000280000902100070003710000260004410100130007010500910008320000710017421000370024521500570028222500110033933007740035067600060112468600130113070000230114370200410116680100510120783000230125883500060128193000230128799503930131000436584 a978-2-211-21216-8d9,00 aFR a20130625 c 1frea01 ba0 afrecfre 1[2013-06-25-00.00.00.000000][2013-07-15-00.00.00.000000][2013-06-25-00.00.00.000000][]1 aMa mère est partoutfNathalie KUPERMANgIll. par Aurélie GUILLEREY aPariscL'Ecole des loisirsd2013 a94 p.394cill. en coul. couv. ill. en coul.d19 cm. 2aMouche aUn matin pendant la classe, Joseph entend de drôles de bruits dans son cartable. Ça fait cratch critch et strompf. Serait-ce une souris ? un rat ? un monstre bizarre qui ne vit que dans les cartables ? + +À la récréation, Joseph décide d’en avoir le coeur net. Il emporte son cartable dans un coin à l’abri des regards, et, très courageusement, il l’ouvre. À l’intérieur, ce n’est pas une souris, ni un rat. Ce n’est pas non plus un monstre. C’est sa mère, qui est là, un peu coincée entre le cahier de textes et le cahier de français. + +– Maman, qu’est-ce que tu fais là ? + +– Je suis venue t’apporter ton goûter. Tu l’avais oublié ce matin en partant. Non, Joseph n’est pas en train de rêver, et le problème pour lui, c’est que cette histoire ne fait que commencer. 10 aJR KUP V10aKUPERMANbNathalie10aGUILLEREYbAuréliegIllustré par5IL aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1V2vert (8-10 ans) aR aRoman jeunesse4JR aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0374527*81gL-h037452kJR KUP Vm20141104opqjram1[CHA][Chantelivre][Orléans][45000][15 Place du Martroi][][02.38.68.06.00][9,00][][][][][][][][LIB][][][][][][][][][02.38.21.84.32]2[ARJ][Roman Jeunesse][0][1][Livre disponible : Fonds Roman Jeunesse][0][0][0][0]38,1992013-06-25-00.00.00.00000042013-06-25-00.00.00.0000005374526BIB01458nam0 22002891 450 00100090000001000280000902100070003710000260004410100130007010500910008320000490017421000370022321500070026021500580026722500170032530300190034233002480036167600060060970000410061580100510065683000230070783500060073093000130073693200110074993200130076099503950077300436601 a978-2-211-20781-2d9,20 aFR a20130625 b 0frea01 ba0 afrecfre 1[2013-06-25-00.00.00.000000][][2013-06-26-00.00.00.000000][2012-12-01-00.00.00.000000]1 aJ'y vais !fTexte et ill. de Matthieu MAUDET aPariscL'Ecole des loisirsd2011 4np anon paginécill. en coul. couv. ill. en coul.d19 cm. 2aLoulou & Cie aLivre cartonné aEnfin, petit oiseau se décide à quitter son nid ! Toutes sortes de recommandations lui sont faites par maman, papa, mamy… « Prends une petite laine, emporte des biscuits, n’oublie pas ta casquette… » En route vers l’aventure, petit oiseau ! + 1010aMAUDETbMatthieugTexte et ill.5TIL aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aOiseau aPropreté aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0374697*81gL-h037469m20141104opqbram1[CHA][Chantelivre][Orléans][45000][15 Place du Martroi][][02.38.68.06.00][9,00][][][][][][][][LIB][][][][][][][][][02.38.21.84.32]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]38,3792013-06-25-00.00.00.00000042013-06-26-00.00.00.0000005374696BIB01406nam0 22002891 450 00100090000001000290000902100070003810000260004510100130007110500650008420000360014921000370018521500070022221500580022922500110028730000190029833002650031767600060058270000210058880100510060983000230066083500060068393000130068993200090070293200090071199503960072000436605 a978-2-211-21114-7d11,20 aFR a20130625 b 0frea01 ba0 afrecfre 1[2013-06-25-00.00.00.000000][][2013-10-04-00.00.00.000000][]1 aQui dort ici ?fSabine de GREEF aPariscL'Ecole des loisirsd2013 4np anon paginécill. en coul. couv. ill. en coul.d24 cm. 2aPastel aLivre cartonné aQui se cache sous la couette moelleuse ? Une oreille qui dépasse, un museau qui pointe et des pattes agrippées au drap fleuri. Va-t-on oser tourner les pages ? Oui, mais tout doucement car il ne faudrait pas réveiller le petit loup qui dort d’un sommeil agité. 1010aGREEFbSabine de aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aLoup aPeur aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0374737*81gL-h037473m20141104opqbram1[CHA][Chantelivre][Orléans][45000][15 Place du Martroi][][02.38.68.06.00][9,00][][][][][][][][LIB][][][][][][][][][02.38.21.84.32]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]310,1992013-06-25-00.00.00.00000042013-10-04-00.00.00.0000005374736BIB02131nje0 22004451 450 00100090000001000250000907100410003410000260007510500910010120001530019221000320034521500490037730100130042646400350043946400400047446400330051446400290054746400250057646400410060146400240064246400230066646400490068946400200073846400330075846400170079146400170080860600090082567600060083468600140084070000430085470200370089770200330093470200380096780100510100583000210105683500060107793000150108393400620109899505250116000437188 a3149027002325d23,0300aJV570027bHarmonia Mundi2HARMONIA M a20131025 m 1frea01 ba 1[2013-10-25-00.00.00.000000][2014-01-22-00.00.00.000000][2014-01-22-00.00.00.000000][]1 aSaturday morningfaut. compos. interp Ahmad JAMALgContrebasse Reginald VEALgBatterie Herlin RILEYgPercussions Manolo BADRENAbDC : Disque Compact aArlescHarmonia Mundid2013 a1 DC11c, (62:35)5[62:35]d13/14e1 Livret aS-0046911 aBack to the futured(04:11)v11 aI'll always be with youd(04:36)v11 aSaturday morningd(10:23)v11 aEdith's caked(04:49)v11 aThe Lined(07:16)v11 aI'm in the mood for loved(06:39)v11 aFireflyd(04:05)v11 aSilverd(04:42)v11 aI got it bad and that ain't goodd(05:37)v11 aOned(06:30)v11 aSaturday morningd(03:41)v11 aGyroscopev11 aArabesquev1 aJazz 10 a1.3 JAM 510aJAMALbAhmadgaut. compos. interp5ACI10aVEALbReginaldgContrebasse5CON10aRILEYbHerlingBatterie5BAT10aBADRENAbManologPercussions5PER aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1TP2Tous publics aC aJazz4JAZZ a<1><35><><Cool Jazz, West-coast, Third stream><JAM>< >< > aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfS-0046917*81gS-h004691k1.3 JAM 5m20141104opqsrje1[CDM][CD Mail][CERGY PONTOISE Cedex][95523][CD Mail - 9, Chaussée Jules César - B.P. 234 OSNY][Alexandre][01-30-75-11-55][20,00][][][01-30-38-61-26][][][][][CD][Disques compacts][][][][N° de client : DI56363S +Mot de passe : NRI 1335][][][][cdmail@cdmail.fr]2[ACD][Disque Compact Adulte][0][1][CD disponible : Fonds Sonore Adulte][0][0][0][0]318,4292013-12-03-00.00.00.00000042014-01-22-00.00.00.000000546916BIB01349nam0 22003011 450 00100090000001000280000902100070003710000260004410100130007010500650008320000680014821000370021621500070025321500570026030300190031733001240033667600060046070000210046670200400048780100510052783000230057883500060060193000130060793200090062093200090062993200140063899503950065200437232 a978-2-211-20042-4d9,80 aFR a20131029 b 0frea01 ba0 afrecfre 1[2013-10-29-00.00.00.000000][][2013-12-12-00.00.00.000000][]1 aAu creux de la mainfCédric RAMADIERgIll. par Vincent BOURGEAU aPariscL'Ecole des loisirsd2010 4np anon paginécill. en coul. couv. ill. en coul.d15x21 aLivre cartonné aCe livre en forme de main, plein de poésie et de tendresse, nous montre comment un petit geste peut être plein d'amour. 1010aRAMADIERbCédric10aBOURGEAUbVincentgIllustré par5IL aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aMain aSens aTendresse aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0376747*81gL-h037674m20141104opqbram1[CHA][Chantelivre][Orléans][45000][15 Place du Martroi][][02.38.68.06.00][9,00][][][][][][][][LIB][][][][][][][][][02.38.21.84.32]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]38,8392013-10-29-00.00.00.00000042013-12-12-00.00.00.0000005376746BIB01540nam0 22003011 450 00100090000001000280000902100070003710000260004410100080007010200070007810500650008520000600015021000290021021500070023921500580024630300190030433003340032367600060065770000200066370200350068380100510071883000230076983500060079293000130079893200130081193200190082499503950084300437236 a978-2-354-13208-8d9,00 aFR a20131029 b 0frea01 ba0 afre aSU 1[2013-10-29-00.00.00.000000][][2013-12-12-00.00.00.000000][]1 aMa Maman et moifYasushi MURAKIgTrad. par Julie DUTEIL aZurichcMineditiond2011 4np anon paginécill. en coul. couv. ill. en coul.d17 cm. aLivre cartonné aUne histoire simple sur l’amour entre la mère et l’enfant dans laquelle l’émotion entoure le petit lecteur. Une confiance sans limite et la certitude que maman sera toujours là pour aider, rassurent l’enfant sur sa propre relation avec sa maman. +Et ce qui est sûr, c’est que maman aime son enfant tout comme Jumbo aime sa maman. 1010aMURAKIbYasushi10aDUTEILbJuliegTraduit par5TR aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aEléphant aAmour maternel aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0376787*81gL-h037678m20141104opqbram1[CHA][Chantelivre][Orléans][45000][15 Place du Martroi][][02.38.68.06.00][9,00][][][][][][][][LIB][][][][][][][][][02.38.21.84.32]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]38,1992013-10-29-00.00.00.00000042013-12-12-00.00.00.0000005376786BIB01747nam0 22002771 450 00100090000001000290000902100070003810000260004510100080007110500650007920000780014421000300022221500450025222500210029733006240031867600060094268600110094870000170095970200430097680100510101983000170107083500060108793000230109393200190111699503340113500437439 a978-2-226-24975-3d20,90 aFR a20131127 k 0frea01 ba1 afre 1[2013-11-27-00.00.00.000000][][2013-11-27-00.00.00.000000][]1 aLa Reine de la BaltiquefViveca STENgTrad. du suédois par Rémi CASSAIGNE aPariscAlbin Micheld2013 a387 p.3387ccouv. ill. en coul.d23 cm. 2aSpécial Suspense aUn corps est retrouvé sur une plage de l'île de Sandhamn dans l'archipel de Stockholm, en pleine saison estivale. L'inspecteur Thomas Andreasson de la brigade criminelle de Stockholm est chargé de l'enquête. Habitué des lieux, il va se voir proposer une aide inattendue, celle de Nora, son amie d'enfance, jeune avocate d'une perspicacité redoutable. L'été vire au cauchemar quand un second cadavre est découvert dans une chambre d'hôtel. +Et si, désormais, plus personne n'était à l'abri ? L'inspecteur Andreasson, qui croyait tout savoir de sa petite île paradisiaque, n'est pas au bout de ses lugubres découvertes... 10 aRP STE10aSTENbViveca10aCASSAIGNEbRémigTrad. du suédois5TRS aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADU2adultes aR aRoman policier4RP aRoman policier aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0378387*81gL-h037838kRP STEm20141104opqaram1[PASS][Passion Culture][][][][][][9,00][][][][][][][][LIB][][][][][][][][][]2[ARA][Roman Adulte][0][1][Livre disponible - Fonds Roman Adulte][0][0][0][0]319,0292013-11-18-00.00.00.00000042013-11-27-00.00.00.0000005378386BIB00502oas2 22000971 450 00100090000010000240000920000460003321000590007946100190013899502470015700437467 a20131201 1frea01 ba aLe merveilleux Noël de Samuelbpériodique d2013-12-01-00.00.00.000000h2013-12-31-00.00.00.000000 tPicotiv2904N aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfP-000198627*81gP-h00019862m20141104opppqbras2[APJM][Périodiques "Jardin des mots"][0][1][Périodique disponible - Fonds "Jardin des Mots"][0][0][0][0]35,9592013-11-18-00.00.00.0000006BIB01897oam2 22002891 450 00100090000001000290000902100070003810000270004510100080007210500650008020000860014521000240023121500450025522500080030033006790030846100300098767600060101768600120102370000210103570200500105680100510110683000350115783500060119293000450119893200200124399503440126300437473 a978-2-7024-4020-9d17,00 aFR a20131118 ek 0frea01 ba1 afre 1[2013-11-18-00.00.00.000000][][2013-11-18-00.00.00.000000][]1 aLes FragmentésfNeal SHUSTERMANgTrad. de l'américain par Emilie PASSERIEUXv131 aPariscMasqued2013 a462 p.3462ccouv. ill. en coul.d22 cm. 2aMsK aDans une société traumatisée par la Seconde Guerre civile, une loi autorisant la fragmentation a été votée. Celle-ci stipule qu'il est interdit d'attenter à la vie d'un enfant de sa conception jusqu'à son treizième anniversaire. Passée cette date, tout parent peut décider de « résilier » son enfant en ayant recours à la fragmentation, processus qui permet de renoncer à son enfant rétroactivement. Une seule exigence : réutiliser 99 % des organes du fragmenté pour qu'il continue à « vivre » à travers d autres. Lorsque Connor, Lev et Risa apprennent qu'ils vont être fragmentés, ils savent ce qu'il leur reste à faire : fuir et tenter de survivre jusqu'à leur majorité... tLes Fragmentésv13437481 10 aRFO SHU10aSHUSTERMANbNeal10aPASSERIEUXbEmiliegTrad. de l'américain5TRA aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADO2adolescents3ADU4adultes aR aRoman de science-fiction adolescent4RFO aScience-Fiction aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0378657*81gL-h037865kRFO SHUm20141104opqeram1[PASS][Passion Culture][][][][][][9,00][][][][][][][][LIB][][][][][][][][][]2[ARE][Roman Adolescent][0][1][Livre disponible - Romans Fonds Adolescent][0][0][0][0]315,4792013-11-18-00.00.00.00000042013-11-18-00.00.00.0000005378656BIB00665nam1 22002291 450 00100090000001000100000910000270001910100080004610500910005420000360014521000180018121500320019922500080023167600060023968600120024570000210025780100510027883000350032983500060036493000450037093200200041500437481 d15,47 a20131119 ek 0frea01 ba1 afre 1[2013-11-19-00.00.00.000000][][2013-11-19-00.00.00.000000][2013-11-19-00.00.00.000000]1 aLes FragmentésfNeal SHUSTERMAN aPariscMasque ccouv. ill. en coul.d22 cm. 2aMsK 10 aRFO SHU10aSHUSTERMANbNeal aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADO2adolescents3ADU4adultes aR aRoman de science-fiction adolescent4RFO aScience-Fiction01652nam0 22003131 450 00100090000001000220000910000260003110100130005710200070007010500910007720000870016821000440025521500070029921500580030622500110036433003830037551700390075867600060079768600060080370000220080970200430083180100510087483000230092583500060094893000130095493200110096793200150097899503450099300437820 a978-2-367-73031-8 a20140124 b 0frea01 ba0 afrecfre aFR 1[2014-01-24-00.00.00.000000][][2014-01-24-00.00.00.000000][2014-01-24-00.00.00.000000]1 aAu secours ! J'ai perdu mon slip !fChristophe LOUPYgIll. par Bérengère DELAPORTE aLa CrèchecMarmaille et compagnied2014 4np anon paginécill. en coul. couv. ill. en coul.d25 cm. 2aJungle aAu secours ! Tarzan a perdu son slip ! Perdu ? Ou volé... Les animaux de la savane rêvent de posséder un slip de chef, de devenir le roi de la forêt, d’être adulés. Mais l’apparence n’a jamais donné les compétences. A travers un récit burlesque, Christophe Loupy s’amuse à brosser le portrait de ceux qui croient devenir célèbres avec pour seul talent le fait d’être... culotté.0 aou la véritable histoire de Tarzan 10 aL10aLOUPYbChristophe10aDELAPORTEbBérengèregIllustré par5IL aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aJungle aRoi, reine aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0379647*81gL-h037964kLm20141104opqbram1[DON][Don][][45][][][][0,00][][][][][][][][][mobilier bibliothèque][][][][][][][][]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]92014-01-24-00.00.00.00000042014-01-24-00.00.00.0000005379646BIB01376nam0 22002411 450 00100090000001000290000902100070003810000260004510100130007110500650008420000440014921000170019321500450021033003550025567600060061068600100061670000170062680100510064383000170069483500060071193000130071799504040073000438139 a978-2-213-65514-7d18,00 aFR a20140401 k 0frea01 ba0 afrecfre 1[2014-04-01-00.00.00.000000][][2014-04-04-00.00.00.000000][]1 aUn Homme, ça ne pleure pasfFaïza GUENE cFayardd2014 a314 p.3314ccouv. ill. en coul.d22 cm. aNé à Nice de parents algériens, Mourad voudrait se forger un destin. Son pire cauchemar : devenir un vieux garçon obèse aux cheveux poivre et sel, nourri à base d'huile de friture par sa mère. Pour éviter d'en arriver là, il lui faudra se défaire d'un héritage familial pesant. Mais est-ce vraiment dans la rupture qu'on devient pleinement soi-même ? 10 aR GUE10aGUENEbFaïza aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADU2adultes aR aRoman4R aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0380667*81gL-h038066kR GUEm20141104opqaram1[TM][Lib. des Temps Modernes][ORLEANS][45000][57 rue N.D de Recouvrance][][02.38.53.94.35][9,00][][][02.38.62.54.20][][][][][LIB][][][][][][][][][]2[ARA][Roman Adulte][0][1][Livre disponible - Fonds Roman Adulte][0][0][0][0]316,3892014-04-01-00.00.00.00000042014-04-04-00.00.00.0000005380666BIB01476nam0 22002771 450 00100090000001000290000902100070003810000260004510100130007110500650008420000740014921000360022321500460025933003080030567600060061368600060061970000180062570200360064380100510067983000230073083500060075393000130075993200160077293200110078899503990079900438201 a978-2-352-90111-2d22,00 aFR a20140414 b 0frea01 ba0 afrecfre 1[2014-04-14-00.00.00.000000][][2014-08-30-00.00.00.000000][]1 aLouise de New York, la détectivefJean PODEROSgIll. par Gaia GUARINO aPariscCourtes et longuesd2013 cill. en coul. couv. ill. en coul.d33 cm. aMais qui a coupé l'électricité dans tout le quartier ? Pas d'affolement, Louise est sur le coup. Quoi ? Vous ne connaissez pas Louise de New York ? Louise, c'est une grande détective... Et elle en a résolu des affaires ! Avec son chat Clairon, au milieu des immeubles de New York, Louise mène l'enquête. 10 aP10aPODEROSbJean10aGUARINObGaiagIllustré par5IL aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aImagination aEnigme aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0380907*81gL-h038090kPm20141104opqbram1[CHA][Chantelivre][Orléans][45000][15 Place du Martroi][][02.38.68.06.00][9,00][][][][][][][][LIB][][][][][][][][][02.38.21.84.32]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]320,0292014-04-14-00.00.00.00000042014-08-30-00.00.00.0000005380906BIB01476nam0 22002891 450 00100090000001000290000902100070003810000260004510100130007110500650008420000540014921000150020321500070021821500580022533003280028367600060061168600060061770000400062380100510066383000230071483500060073793000130074393200110075693200110076793200090077899503990078700438225 a978-2-352-89075-1d14,20 aFR a20140414 b 0frea01 ba0 afrecfre 1[2014-04-14-00.00.00.000000][][2014-06-20-00.00.00.000000][]1 aPremiers printempsfTexte et dessins Anne CRAUSAZ cMeMod2013 4np anon paginécill. en coul. couv. ill. en coul.d23 cm. aUne petite fille découvre ses cinq sens au fil des saisons : le goût des cerises, la contemplation d’une nuit d’été, la douceur de l’intérieur d’une bogue de marron, le silence de la neige... une année pour goûter, regarder, toucher, écouter et sentir, une année pour grandir et tout redécouvrir quand revient le printemps. 10 aC10aCRAUSAZbAnnegTexte et dessins5TD aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1B2blanc (0-5 ans) aF aAlbum4A aSaison aNature aSens aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0381167*81gL-h038116kCm20141104opqbram1[CHA][Chantelivre][Orléans][45000][15 Place du Martroi][][02.38.68.06.00][9,00][][][][][][][][LIB][][][][][][][][][02.38.21.84.32]2[AJM][Album "Jardin des mots"][0][1][Livre disponible : Fonds "Jardin des Mots"][0][0][0][0]312,9292014-04-14-00.00.00.00000042014-06-20-00.00.00.0000005381166BIB01953oam2 22003251 450 00100090000001000290000902100070003810000260004510100130007110500650008420001390014921000360028821500500032433004990037446100240087367600060089768600120090370000200091570200340093570200380096970200500100780100510105783000210110883500060112993000450113593200220118093200150120293200120121799503980122900438248 a978-2-07-069514-0d19,50 aFR a20140414 e 0frea01 ba1 afrecger 1[2014-04-14-00.00.00.000000][][2014-06-25-00.00.00.000000][]1 aLe Retour de JacobfCornelia FUNKEgCo-Auteur Lionel WIGRAMgIll. par Cornelia FUNKEgTrad. de l'allemand par Marie-Claude AUGERv232 aPariscGallimard Jeunessed2013 a446 p.3446cill. couv. ill. en coul.d23 cm. aDe l'autre côté du miroir : un univers fascinant, où se trouvent créatures fantastiques et objets aux pouvoirs prodigieux, mais aussi pièges et cruels sortilèges. Jacob Reckless le sait bien : pour sauver son frère et le ramener dans leur monde, le jeune homme a attiré sur lui une malédiction mortelle. Depuis, il parcourt inlassablement les royaumes, à la recherche d'un antidote. Fox, la belle et troublante fille-renarde, est son alliée... Mais comment aimer lorsque la mort vous poursuit ? tRecklessv23430347 10 aRFO FUN10aFUNKEbCornelia10aWIGRAMbLionelgCo-auteur5CA10aFUNKEbCorneliagIllustré par5IL10aAUGERbMarie-ClaudegTrad. de l'allemand5TRD aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADO2adolescents aR aRoman de science-fiction adolescent4RFO aRoman Fantastique aLoup-garou aMonstre aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0381407*81gL-h038140kRFO FUNm20141104opqjram1[CHA][Chantelivre][Orléans][45000][15 Place du Martroi][][02.38.68.06.00][9,00][][][][][][][][LIB][][][][][][][][][02.38.21.84.32]2[ARE][Roman Adolescent][0][1][Livre disponible - Romans Fonds Adolescent][0][0][0][0]317,7592014-04-14-00.00.00.00000042014-06-25-00.00.00.0000005381406BIB00492oas2 22000971 450 00100090000010000240000920000360003321000590006946100190012899502470014700438313 a20140501 1frea01 ba aEn voiture, Guili !bpériodique d2014-05-01-00.00.00.000000h2014-05-31-00.00.00.000000 tPicotiv2954N aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfP-000202017*81gP-h00020201m20141104opppqbras2[APJM][Périodiques "Jardin des mots"][0][1][Périodique disponible - Fonds "Jardin des Mots"][0][0][0][0]35,9592014-04-15-00.00.00.0000006BIB02782nje0 22005531 450 00100090000001000250000907100290003410000260006310500650008920001000015421000150025421500490026930100130031846400210033146400620035246400220041446400380043646400580047446400260053246400400055846400280059846400280062646400350065446400310068946400750072046400610079546400580085646400620091446400540097646401230103046400780115346400690123146400310130046400380133146400960136946400400146546400500150551700280155567600060158368600130158970000360160270200390163880100510167783000210172883500060174993000240175593400530177999503960183200438482 a3700551756179d13,9900a849.A016.020bIdol2IDOL a20140513 m 0frea01 ba 1[2014-05-13-00.00.00.000000][][2014-06-24-00.00.00.000000][]1 aYves Saint LaurentfRéalisateur Jalil LESPERTgCompositeur Ibrahim MAALOUFbDC : Disque Compact cIdold2013 a1 DC11c, (78:09)5[78:09]d13/14e1 Livret aS-0047391 aOrand(01:17)v11 aFor One Momentd(04:11)v1fROCHEgBrisa4Interprète5INT1 aParisd(03:14)v11 aDéfilé Christian Diord(02:46)v11 aStaying Ind(04:16)v1fROCHEgBrisa4Interprète5INT1 aLes quaisd(01:54)v11 aVisite de l'appartementd(01:24)v11 aParis Matchd(02:16)v11 aDéfilé 1962d(04:00)v11 aPierre et Victoired(01:16)v11 aSous les pontsd(02:29)v11 aTime Has Come Todayd(04:50)v1fTHE CHAMBER BROTHERS4Interprète5INT1 aLighthoused(04:48)v1fWATSONgPatrick4Interprète5INT1 aOn The Roadd(02:50)v1fTHE BOSSMEN4Interprète5INT1 aLooking for Loved(05:31)v1fCHROMATICS4Interprète5INT1 aBlind Alleyd(03:06)v1fTHE EMOTIONS4Groupe5GR1 aLa Traviata : Act 1, "Libiam ne' lieti calici (Alfredo, Chorus, Violetta)"d(04:11)v1fCALLASgMaria4Interprète5INT1 aTosca : Act 2, "Vissi d'arte"d(03:18)v1fCALLASgMaria4Interprète5INT1 aFunction Undergroundd(02:45)v1fWE THE PEOPLE4Interprète5INT1 aPierre et Yvesd(04:35)v11 aBackstage défilé 1976d(02:44)v11 aLa Wally : Act 1, " Ebben?... Ne Andro Lontana"d(04:51)v1fCALLASgMaria4Interprète5INT1 aGénérique fin "My Name"d(03:03)v11 aGénérique fin Paris Match versiond(02:25)v10 aBande originale de film 10 a6 YVE 1110aLESPERTbJalilgRéalisateur5RE10aMAALOUFbIbrahimgCompositeur5COM aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1TP2Tous publics aC aMusique de film4MF a<6><11><><Bandes originales de films><YVE>< >< > aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfS-0047397*81gS-h004739k6 YVE 11m20141104opqsrje1[FNAC][FNAC][ORLEANS][45000][16 rue de la République][][38.53.10.10][0,00][][][][][][][][][fournitures mat. audio][][][][][][][][]2[ACD][Disque Compact Adulte][0][1][CD disponible : Fonds Sonore Adulte][0][0][0][0]313,9992014-05-13-00.00.00.00000042014-06-24-00.00.00.000000547396BIB02369nje0 22004211 450 00100090000001000240000907100400003310000240007310500910009720000450018821000210023321500490025430100130030346400700031646400560038646400820044246400530052446400580057746400680063546400960070346400600079946400700085946400590092946400510098846400870103946400560112646400690118246400750125146400630132651700300138967600060141968600120142580100510143783500060148893000250149493400330151999503950155200438494 a888837057424d20,0000a88883705742bWeedoo Publishing2WEE a20140701 0frea01 ba 1[2014-07-01-00.00.00.000000][][2014-07-01-00.00.00.000000][2014-05-13-00.00.00.000000]1 aL'Afrique enchantéebDC : Disque Compact cSony Musicd2013 a1 DC11c, (73:21)5[73:21]d13/14e1 Livret aS-0047631 aLes Jaloux saboteursd(08:29)v1fMAITRE GAZONGA4Interprète5INT1 aAkampanyed(04:29)v1fSWEET TALKS4Interprète5INT1 aMabeled(07:27)v1fLUAMBOgFranco4Interprète5INTfOK JAZZ4Interprète5INT1 aManad(03:24)v1fNUNESgArthur4Interprète5INT1 aMar azuld(03:40)v1fEVORAgCesaria4Interprète5INT1 aCes petits riensd(02:16)v1fKIDJOgAngélique4Interprète5INT1 aLes Jeunes de Beguend(02:57)v1fDEPIANO4Interprète5INTfLE BEGUEN BAND4Interprète5INT1 aTwist à Léod(02:39)v1fDIBANGOgManu4Interprète5INT1 aJet Biguined(03:27)v1fLES LOUPS NOIRS D'HAITI4Interprète5INT1 aYaye boyd(03:53)v1fORQUESTA ARAGON4Interprète5INT1 aApollod(04:29)v1fAFRICANDO4Interprète5INT1 aTirei o chapeaud(03:37)v1fBATIDA4Interprète5INTfIKONOKLASTA4Interprète5INT1 aAncien combattantd(09:35)v1fZAO4Interprète5INT1 aFanta bouramad(05:49)v1fTOUNKARAgDjély mady4Interprète5INT1 aAux dieux de ce monded(04:40)v1fAKENDENGUEgPierre4Interprète5INT1 aCousin Assinid(02:24)v1fBEBEYgFrancis4Interprète5INT0 aentrez dans le bois sacré 10 a9.1 AFR aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN aC aMusique du Monde4MM a<9><1><><Afrique><AFR>< >< > aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfS-0047637*81gS-h004763k9.1 AFRm20141104opqsrje1[FNAC][FNAC][ORLEANS][45000][16 rue de la République][][38.53.10.10][0,00][][][][][][][][][fournitures mat. audio][][][][][][][][]2[ACD][Disque Compact Adulte][0][1][CD disponible : Fonds Sonore Adulte][0][0][0][0]320,0092014-05-13-00.00.00.00000042014-07-01-00.00.00.000000547636BIB02201nje0 22004331 450 00100090000001000240000907100320003310000260006510500910009120000660018221000200024821500490026830100130031746400390033046400260036946400420039546400350043746400590047246400520053146400220058346400260060546400500063146400380068146400550071946400800077446400530085446400230090746400330093046400220096367600060098568600130099170000470100480100510105183000210110283500060112393000250112993400890115499505240124300438651 a795041796820d18,3900a4179682bCaroline2CAROLINE a20140618 m 1frea01 ba 1[2014-06-18-00.00.00.000000][2014-09-13-00.00.00.000000][2014-09-13-00.00.00.000000][]1 aEvefaut. compos. interp Angélique KIDJObDC : Disque Compact cUniversald2014 a1 DC11c, (44:52)5[44:52]d13/14e1 Livret aS-0047901 aM'baamba (Kenyan song)d(03:40)v11 aShango wad(03:49)v11 aEvad(03:21)v1fASA4Interprète5INT1 aInterlude : agbaded(00:20)v11 aBombad(03:44)v1fBATMANGLIJgRostam4Interprète5INT1 aHellod(03:28)v1fTRIO TERIBA4Interprète5INT1 aBlewud(02:50)v11 aKamoushoud(03:13)v11 aKulumbud(03:42)v1fDR JOHN4Interprète5INT1 aInterlude : kletedjand(00:22)v11 aEbiled(03:02)v1fKRONOS QUARTET4Interprète5INT1 aAwaloled(03:39)v1fORCHESTRE PHILARMONIQUE DU LUXEMBOURG4Interprète5INT1 aBanad(02:45)v1fKIDJOgYvonne4Interprète5INT1 aOrishad(03:26)v11 aInterlude : wayid(00:44)v11 aCaurid(02:40)v1 10 a9.16 KID10aKIDJObAngéliquegaut. compos. interp5ACI aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1TP2Tous publics aC aMusique du Monde4MM a<9><16><><Afrique de l'Ouest - Bénin, Ghana, Nigeria, Sierra Leone, Togo><KID>< >< > aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfS-0047907*81gS-h004790k9.16 KIDm20141104opqsrje1[CDM][CD Mail][CERGY PONTOISE Cedex][95523][CD Mail - 9, Chaussée Jules César - B.P. 234 OSNY][Alexandre][01-30-75-11-55][20,00][][][01-30-38-61-26][][][][][CD][Disques compacts][][][][N° de client : DI56363S +Mot de passe : NRI 1335][][][][cdmail@cdmail.fr]2[ACD][Disque Compact Adulte][0][1][CD disponible : Fonds Sonore Adulte][0][0][0][0]317,6592014-06-23-00.00.00.00000042014-09-13-00.00.00.000000547906BIB01689nam0 22002651 450 00100090000001000290000902100070003810000270004510100130007210500650008520000440015021000270019421500450022133005660026667600060083268600100083870000270084880100510087583000350092683500060096193000130096793200290098093200100100999504040101900438743 a978-2-07-013797-8d15,90 aFR a20140708 ke 0frea01 ba0 afrecfre 1[2014-07-08-00.00.00.000000][][2014-07-08-00.00.00.000000][]1 aLe Collier rougefJean-Christophe RUFIN aPariscGallimardd2014 a155 p.3155ccouv. ill. en coul.d21 cm. aDans une petite ville du Berry, écrasée par la chaleur de l'été, en 1919, un héros de la guerre est retenu prisonnier au fond d'une caserne déserte. +Devant la porte, son chien tout cabossé aboie jour et nuit. +Non loin de là, dans la campagne, une jeune femme usée par le travail de la terre, trop instruite cependant pour être une simple paysanne, attend et espère. +Le juge qui arrive pour démêler cette affaire est un aristocrate dont la guerre a fait vaciller les principes. +Trois personnages et, au milieu d'eux, un chien, qui détient la clef du drame... 10 aR RUF10aRUFINbJean-Christophe aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADU2adultes3ADO4adolescents aR aRoman4R aPremière guerre mondiale aChien aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0383017*81gL-h038301kR RUFm20141104opqaram1[TM][Lib. des Temps Modernes][ORLEANS][45000][57 rue N.D de Recouvrance][][02.38.53.94.35][9,00][][][02.38.62.54.20][][][][][LIB][][][][][][][][][]2[ARA][Roman Adulte][0][1][Livre disponible - Fonds Roman Adulte][0][0][0][0]314,2092014-07-08-00.00.00.00000042014-07-08-00.00.00.0000005383016BIB00495oas2 22000971 450 00100090000010000240000920000560003321000590008946100260014899502230017400438816 a20140801 1frea01 ba aLes Trésors cachés de la France sauvagebpériodique d2014-08-01-00.00.00.000000h2014-08-31-00.00.00.000000 tTerre sauvagev3074N aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfP-000204017*81gP-h00020401m20141104opppqaras2[APA][Périodique Adulte][0][1][Périodique disponible : Fonds Adulte][0][0][0][0]35,9592014-07-22-00.00.00.0000006BIB00359oaa2 22001331 450 00100090000010000240000920000520003321000590008521500070014446100230015161000210017461000190019561000110021400438816 a20140801 1frea01 ba aFrance sauvage : l'autre patrimoinebpériodique d2014-08-01-00.00.00.000000h2014-08-31-00.00.00.000000 a20 tTerre sauvagev307 aFrancextourisme aFrancexnature aNature01771oam2 22002891 450 00100090000001000290000910000260003810100130006410500910007720000600016821000260022821500450025430000450029933006030034446100180094767600060096568600110097170000180098270100180100080100510101883000170106983500060108693000230109293200190111593200130113499503340114700438944 a978-2-298-06933-4d21,00 a20140905 k 0frea01 ba0 afrecfre 1[2014-09-05-00.00.00.000000][][2014-09-05-00.00.00.000000][2014-09-05-00.00.00.000000]1 aLe Sourire des pendusfJérôme CAMUTgNathalie HUGv131 cEd. de Noyellesd2013 a750 p.3750ccouv. ill. en coul.d23 cm. aPrix des lecteurs du Livre de Poche 2014 aLara Mendès, jeune chroniqueuse télé, enquête sur le marché du sexe et ses déviances. Elle disparaît sur un parking d’autoroute... Désemparés par la lenteur de l’enquête, ses proches reçoivent le soutien de Léon Castel, fondateur d’une association de victimes. Sa fille, Sookie, policière hors norme, a enquêté sur une triple pendaison qui semble liée à cette affaire. Qui a enlevé Lara ? Pourquoi ? Où sont passés ces enfants et ces jeunes femmes dont les portraits s’affichent depuis des mois, parfois des années, sur les murs des gares et des commissariats ? Réseaux criminels ou tueurs isolés ? tW3v13438943 10 aRS CAM10aCAMUTbJérôme10aHUGbNathalie aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADU2adultes aR aRoman suspense4RS aRoman Suspense aThriller aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0383327*81gL-h038332kRS CAMm20141104opqaram1[DON][Don][][45][][][][0,00][][][][][][][][][mobilier bibliothèque][][][][][][][][]2[ARA][Roman Adulte][0][1][Livre disponible - Fonds Roman Adulte][0][0][0][0]92014-09-05-00.00.00.00000042014-09-05-00.00.00.0000005383326BIB00638nam1 22002291 450 00100090000010000260000910100130003510500910004820000350013921000200017421500320019467600060022668600110023270000180024370100180026180100510027983000170033083500060034793000230035393200190037693200130039500438943 a20140905 k 0frea01 ba0 afrecfre 1[2014-09-05-00.00.00.000000][][2014-09-05-00.00.00.000000][2014-09-05-00.00.00.000000]1 aW3fJérôme CAMUTgNathalie HUG cEd. de Noyelles ccouv. ill. en coul.d23 cm. 10 aRS CAM10aCAMUTbJérôme10aHUGbNathalie aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADU2adultes aR aRoman suspense4RS aRoman Suspense aThriller01862nam0 22002531 450 00100090000001000290000902100070003810000260004510100130007110500650008420000450014921000230019421500240021733009000024167600060114168600100114770000200115780100510117783000170122883500060124593000130125193200110126499503330127500439053 a978-2-362-79121-5d18,00 aFR a20141001 k 0frea01 ba0 afrecfre 1[2014-10-01-00.00.00.000000][][2014-11-04-00.00.00.000000][]1 aLa Fractale des raviolisfPierre RAUFAST cAlma éditeurd2014 a263 p.3263d19 cm. aIl était une fois une épouse bien décidée à empoisonner son mari volage avec des raviolis. Mais, alors que s’approche l’instant fatal, un souvenir interrompt le cours de l’action. Une nouvelle intrigue commence aussitôt et il en sera ainsi tout au long de ces récits gigognes. + +Tout ébaubi de voir tant de pays, on découvre les aventures extraordinaires d’un jeune garçon solitaire qui, parce qu’il voyait les infrarouges, fut recruté par le gouvernement ; les inventions stratégiques d’un gardien de moutons capable de gagner la guerre d’Irak ; les canailleries d’un détrousseur pendant l’épidémie de la peste à Marseille en 1720 ou encore la méthode mise au point par un adolescent sociopathe pour exterminer le fléau des rats-taupes. + +Véritable pochette surprise, ce premier roman ajoute à la géométrie rigoureusement scientifique, la collision jubilatoire du probable et de l’improbable. 10 aR RAU10aRAUFASTbPierre aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADU2adultes aR aRoman4R aHumour aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0383647*81gL-h038364kR RAUm20141104opqaram1[PASS][Passion Culture][][][][][][9,00][][][][][][][][LIB][][][][][][][][][]2[ARA][Roman Adulte][0][1][Livre disponible - Fonds Roman Adulte][0][0][0][0]316,3892014-10-01-00.00.00.00000042014-11-04-00.00.00.0000005383646BIB01967nam0 22003011 450 00100090000001000290000902100070003810000260004510100080007110500650007920001100014421000180025421500450027230000290031733007160034651700290106267600060109168600100109770000180110770200480112570200460117380100510121983000170127083500060128793000130129393200260130699503330133200439065 a978-2-371-19000-9d17,00 aFR a20141001 k 0frea01 ba1 afre 1[2014-10-01-00.00.00.000000][][2014-11-04-00.00.00.000000][]1 aCarambolefJens STEINERgTrad. de l'allemand par François MATHIEUgTrad. de l'allemand par Régine MATHIEU cPiranhad2014 a188 p.3188ccouv. ill. en coul.d22 cm. aPrix Schweizer Buchpreis aUn village écrasé par une chaleur estivale précoce. Trois adolescents se lamentent qu'il ne s'y passe jamais rien ; une mystérieuse troïka se réunit régulièrement pour jouer au carambole... Chacun des douze tableaux qui composent ce roman suit un ou plusieurs personnages. Leurs histoires anodines font apparaître la torpeur et l'indolence des habitants du village. Pourtant, les événements s'enchaînent : une explosion de voiture dans une usine, une star du tennis qui disparaît, un terrible accident de voiture, un flirt entre adolescents qui tourne mal, une mort inexpliquée... Maître de l'illusion, Jens Steiner réussit dans ce roman existentiel à dire notre monde en racontant des vies apparemment simples.0 aun roman en douze rounds 10 aR STE10aSTEINERbJens10aMATHIEUbFrançoisgTrad. de l'allemand5TRD10aMATHIEUbRéginegTrad. de l'allemand5TRD aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADU2adultes aR aRoman4R aLittérature étrangère aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0383687*81gL-h038368kR STEm20141104opqaram1[PASS][Passion Culture][][][][][][9,00][][][][][][][][LIB][][][][][][][][][]2[ARA][Roman Adulte][0][1][Livre disponible - Fonds Roman Adulte][0][0][0][0]315,4792014-10-01-00.00.00.00000042014-11-04-00.00.00.0000005383686BIB01664nam0 22002651 450 00100090000001000290000902100070003810000260004510100130007110500910008420000520017521000290022721500450025633006220030167600060092368600100092970000200093980100510095983000170101083500060102793000130103393200100104693200090105699503330106500439068 a978-2-7096-4655-0d19,50 aFR a20141001 k 1frea01 ba0 afrecfre 1[2014-10-01-00.00.00.000000][2014-11-03-00.00.00.000000][2014-11-03-00.00.00.000000][]1 aToute ressemblance avec le pèrefFranck COURTES aPariscJ.C. Lattèsd2014 a439 p.3439ccouv. ill. en coul.d21 cm. aComment se défait-on des fantômes du passé? +Ils sont trois personnages, une mère et ses deux enfants, Mathis et Vinciane, à tenter de survivre après la mort accidentelle de Jacques. Si Mireille, inconsolable, s’est figée dans son destin de veuve d’un héros magnifié, Vinciane, elle, traverse les océans pour oublier. Quant à Mathis, prisonnier de l’image paternelle, il enchaîne les conquêtes et s’abîme dans la séduction. Tous se débattent mais le fantôme de Jacques rôde, un fantôme qui épouserait les fantasmes et les culpabilités de chacun. +Mais vient un jour où il faut solder les comptes et songer à l’avenir. 10 aR COU10aCOURTESbFranck aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADU2adultes aR aRoman4R aDeuil aPère aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0383547*81gL-h038354kR COUm20141104opqaram1[PASS][Passion Culture][][][][][][9,00][][][][][][][][LIB][][][][][][][][][]2[ARA][Roman Adulte][0][1][Livre disponible - Fonds Roman Adulte][0][0][0][0]317,7592014-10-01-00.00.00.00000042014-11-03-00.00.00.0000005383546BIB01786nam0 22002651 450 00100090000001000290000902100070003810000260004510100130007110500650008420000310014921000270018021500450020722500080025233007750026067600060103568600100104170000210105180100510107283000170112383500060114093000130114693200280115999503330118700439070 a978-2-07-014568-3d18,50 aFR a20141001 k 0frea01 ba0 afrecfre 1[2014-10-01-00.00.00.000000][][2014-11-04-00.00.00.000000][]1 aCharlottefDavid FOENKINOS aPariscGallimardd2014 a220 p.3220ccouv. ill. en coul.d21 cm. 2aNrf aCe roman retrace la vie de Charlotte Salomon, artiste peintre morte à vingt-six ans alors qu'elle était enceinte. Après une enfance à Berlin marquée par une tragédie familiale, Charlotte est exclue progressivement par les nazis de toutes les sphères de la société allemande. Elle vit une passion amoureuse fondatrice, avant de devoir tout quitter pour se réfugier en France. Exilée, elle entreprend la composition d'une œuvre picturale autobiographique d'une modernité fascinante. Se sachant en danger, elle confie ses dessins à son médecin en lui disant: "C'est toute ma vie." Portrait saisissant d'une femme exceptionnelle, évocation d'un destin tragique, Charlotte est aussi le récit d'une quête. Celle d'un écrivain hanté par une artiste, et qui part à sa recherche. 10 aR FOE10aFOENKINOSbDavid aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADU2adultes aR aRoman4R aSeconde guerre mondiale aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0383697*81gL-h038369kR FOEm20141104opqaram1[PASS][Passion Culture][][][][][][9,00][][][][][][][][LIB][][][][][][][][][]2[ARA][Roman Adulte][0][1][Livre disponible - Fonds Roman Adulte][0][0][0][0]316,8492014-10-01-00.00.00.00000042014-11-04-00.00.00.0000005383696BIB01632nam0 22002891 450 00100090000001000290000902100070003810000260004510100080007110500910007920000710017021000180024121500450025933004650030461000270076967600060079668600100080270000220081270200500083480100510088483000170093583500060095293000130095893200260097193200120099799503330100900439072 a978-2-7144-5595-6d21,50 aFR a20141001 k 1frea01 ba1 afre 1[2014-10-01-00.00.00.000000][2014-10-31-00.00.00.000000][2014-10-31-00.00.00.000000][]1 aWashfMargaret WRINKLEgTrad. de l'américain par Anne-Laure TISSUT cBelfondd2014 a413 p.3413ccouv. ill. en coul.d23 cm. aWash est un roman porté par une construction où s'enchevêtrent les voix de trois personnages, éclairant un épisode méconnu de l’histoire du Sud esclavagiste, à l’issue de la guerre anglo-américaine de 1812 : l’exploitation par les Blancs de la "reproduction" des esclaves. Une écriture subtile, sensible, poétique y donne voix à des personnages inoubliables. Ce roman violent, poignant et original, émeut autant qu’il interroge la mémoire collective. + + + + + aLittérature américaine 10 aR WRI10aWRINKLEbMargaret10aTISSUTbAnne-LauregTrad. de l'américain5TRA aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADU2adultes aR aRoman4R aLittérature étrangère aRacisme aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0383417*81gL-h038341kR WRIm20141104opqaram1[PASS][Passion Culture][][][][][][9,00][][][][][][][][LIB][][][][][][][][][]2[ARA][Roman Adulte][0][1][Livre disponible - Fonds Roman Adulte][0][0][0][0]319,5792014-10-01-00.00.00.00000042014-10-31-00.00.00.0000005383416BIB01796nam0 22003011 450 00100090000001000290000902100070003810000260004510100130007110500650008420000740014921000200022321500360024322500160027933006260029561000260092167600060094768600100095370000230096370200430098680100510102983000170108083500060109793000130110393200260111693200190114299503330116100439074 a978-2-8499-0286-8d20,00 aFR a20141001 k 0frea01 ba1 afrecpol 1[2014-10-01-00.00.00.000000][][2014-11-04-00.00.00.000000][]1 aAmour de pierrefGrazyna JAGIELSKAgTrad. du polonais par Anna SMOLAR cEquateursd2014 a233 p.3233ccouv. ill.d21 cm. 2aLittérature aGrazyna est mariée à Wojtek, grand reporter de guerre. Ils vivent une histoire d’amour fusionnelle. Mais elle ne supporte plus les séparations, le danger encouru par son mari et développe, à l’image d’un soldat au front, un stress post-traumatique. Admise dans une maison de repos, elle va se confier à Lucjan, un autre patient, qui revendique l’assassinat de son gendre. +Leurs échanges permettent de découvrir leur vie respective et la teneur de cet amour de pierre qui enfonce Grazyna et Wojtek. Ce récit est d’abord celui d’un mystère : comment Grazyna en est-elle arrivée là, alors que tout la destinait au bonheur ? aLittérature polonaise 10 aR JAG10aJAGIELSKAbGrazyna10aSMOLARbAnnagTraduit du polonais5TPL aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADU2adultes aR aRoman4R aLittérature étrangère aAutobiographie aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0383787*81gL-h038378kR JAGm20141104opqaram1[PASS][Passion Culture][][][][][][9,00][][][][][][][][LIB][][][][][][][][][]2[ARA][Roman Adulte][0][1][Livre disponible - Fonds Roman Adulte][0][0][0][0]318,2092014-10-01-00.00.00.00000042014-11-04-00.00.00.0000005383786BIB01479nam0 22002531 450 00100090000001000290000902100070003810000260004510100080007110500650007920000880014421000450023221500450027733003960032267600060071868600100072470000190073470200520075380100510080583000170085683500060087393000130087999503330089200439076 a978-2-8487-6414-6d18,20 aFR a20141001 k 0frea01 ba1 afre 1[2014-10-01-00.00.00.000000][][2014-10-31-00.00.00.000000][]1 aL'Homme de la montagnefJoyce MAYNARDgTrad. de l'américain par Françoise ADELSTAIN aParisb15 Rue de la BanquecP. REYd2014 a318 p.3318ccouv. ill. en coul.d23 cm. aJuin 1979, Californie du Nord. Rachel, 13 ans, et sa soeur Patty, 11 ans, sont délaissées par leurs parents : une mère souvent absente et un père volage. Leur quotidien ennuyeux est soudain interrompu par une affaire de meurtre en série que leur père, l'inspecteur Torricelli, est chargé de résoudre. Trente ans plus tard, Rachel, devenue romancière, raconte l'été qui a bouleversé leur vie. 10 aR MAY10aMAYNARDbJoyce10aADELSTAINbFrançoisegTrad. de l'américain5TRA aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADU2adultes aR aRoman4R aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0383797*81gL-h038379kR MAYm20141104opqaram1[PASS][Passion Culture][][][][][][9,00][][][][][][][][LIB][][][][][][][][][]2[ARA][Roman Adulte][0][1][Livre disponible - Fonds Roman Adulte][0][0][0][0]318,2092014-10-01-00.00.00.00000042014-10-31-00.00.00.0000005383796BIB02213nam0 22003011 450 00100090000001000290000902100070003810000260004510100130007110200070008410500910009120000670018221000280024921500450027733010330032261000250135567600060138068600090138670000130139570200440140880100510145283000170150383500060152093000130152693200260153993200140156599503320157900439080 a978-2-08-130888-6d22,00 aFR a20141001 k 1frea01 ba1 afreceng aFR 1[2014-10-01-00.00.00.000000][2014-10-31-00.00.00.000000][2014-10-31-00.00.00.000000][]1 aLa Route sombrefJian MAgTrad. de l'anglais par Pierre MENARD aPariscFlammariond2014 a441 p.3441ccouv. ill. en coul.d24 cm. aJeune paysanne née au coeur de la Chine rurale, Meili est mariée à Kongzi, l'instituteur du village, lointain descendant de Confucius. Ensemble, ils ont une fille, mais Kongzi, qui veut à tout prix un fils pour poursuivre la lignée de sa célèbre famille, met à nouveau Meili enceinte, sans attendre la permission légale. Lorsque les agents de contrôle des naissances envahissent le village pour arrêter ceux qui ont transgressé les règles, père, mère et fille fuient vers le fleuve Yangtze. Ils commencent alors une longue cavale vers le Sud, à travers les paysages dévastés de la Chine, trouvant de menus travaux au passage, parfois réduits à mendier et obligés de se cacher des forces de l'ordre. Alors que le corps de Meili continue d'être pris d'assaut par son mari et que l'Etat cherche à le contrôler, elle se bat pour reprendre en main sa vie et celle de l'enfant à naître. Avec La route sombre, Ma Jian, célèbre dissident chinois, signe un roman bouleversant où la violence du contrôle social vous saisit de plein fouet. aLittérature chinoise 10 aR MA10aMAbJian10aMENARDbPierregTrad. de l'anglais5TRG aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADU2adultes aR aRoman4R aLittérature étrangère aNaissance aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0383747*81gL-h038374kR MAm20141104opqaram1[PASS][Passion Culture][][][][][][9,00][][][][][][][][LIB][][][][][][][][][]2[ARA][Roman Adulte][0][1][Livre disponible - Fonds Roman Adulte][0][0][0][0]320,0292014-10-01-00.00.00.00000042014-10-31-00.00.00.0000005383746BIB01542nam0 22002531 450 00100090000001000290000902100070003810000260004510100080007110500910007920000620017021000290023221500450026133004830030667600060078968600100079570000150080570200480082080100510086883000170091983500060093693000130094299503330095500439087 a978-2-8097-1029-8d19,50 aFR a20141001 k 1frea01 ba1 afre 1[2014-10-01-00.00.00.000000][2014-11-04-00.00.00.000000][2014-11-04-00.00.00.000000][]1 aLe RubanfIto OGAWAgTrad. du jap. par Myriam DARTOIS-AKO aArlescP. Picquierd2014 a282 p.3282ccouv. ill. en coul.d21 cm. aSumire est passionnée par les oiseaux. Quand elle trouve un oeuf tombé du nid, elle le met à couver et offre l'oisillon à sa petite-fille Hibari, en lui expliquant qu'il est le ruban les reliant à jamais. Mais un jour l'oiseau s'enfuit de sa cage, apportant joie et réconfort partout où il passe. Roman des possibles, ce livre lumineux, tout de douceur, de fantaisie et de poésie, célèbre le retour à soi. Le Ruban est assurément le livre à lire pour se donner du baume au cœur. 10 aR OGA10aOGAWAbIto10aDARTOIS-AKObMyriamgTrad. du japonais5TRJ aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADU2adultes aR aRoman4R aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0383847*81gL-h038384kR OGAm20141104opqaram1[PASS][Passion Culture][][][][][][9,00][][][][][][][][LIB][][][][][][][][][]2[ARA][Roman Adulte][0][1][Livre disponible - Fonds Roman Adulte][0][0][0][0]317,7592014-10-01-00.00.00.00000042014-11-04-00.00.00.0000005383846BIB01936nam0 22002891 450 00100090000001000290000902100070003810000260004510100130007110500650008420000850014921000290023421500450026322500250030833007520033367600060108568600110109170000220110270200480112480100510117283000170122383500060124093000330124693200130127993200200129299503340131200439109 a978-2-8417-2647-9d25,00 aFR a20141002 k 0frea01 ba1 afrecger 1[2014-10-02-00.00.00.000000][][2014-11-04-00.00.00.000000][]1 aMaître de la matièrefAndreas ESCHBACHgTrad. de l'allemand par Pascale HERVIEUX aNantescL'Atalanted2013 a638 p.3638ccouv. ill. en coul.d20 cm. 2aLa Dentelle du cygne aIls ont dix ans et se rencontrent à Tokyo : Je sais comment faire pour que tout le monde soit riche. — N’importe quoi, dit Charlotte. C’est impossible. — Si, c’est possible, insista-t-il. Quand je serai grand, c’est ce que je ferai. Parce que c’est d’une simplicité étonnante ! » Plongés dans le tourbillon de la vie, ils ne cesseront de se perdre et de se retrouver, lui le génie de la robotique qui n’a pas oublié son serment, elle et son étrange faculté de connaître l’histoire des objets par leur contact. +Thriller économique et écologique, confrontation entre l’humanisme et l’évolution technologique, recours au fantastique spéculatif, voyages et archéologie, Maître de la matière reprend avec bonheur les grands thèmes d’Andreas Eschbach. 10 aRF ESC10aESCHBACHbAndreas10aHERVIEUXbPascalegTrad. de l'allemand5TRD aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADU2adultes aR aRoman de science-fiction4RF aThriller aScience-Fiction aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0384017*81gL-h038401kRF ESCm20141104opqaram1[PASS][Passion Culture][][][][][][9,00][][][][][][][][LIB][][][][][][][][][]2[ARA][Roman Adulte][0][1][Livre disponible - Fonds Roman Adulte][0][0][0][0]322,7592014-10-02-00.00.00.00000042014-11-04-00.00.00.0000005384016BIB01665nam0 22002531 450 00100090000001000290000902100070003810000260004510100130007110500910008420000590017521000230023421500450025733005460030267600060084868600130085470000280086780100510089583000170094683500060096393000130096993200170098299504120099900439131 a978-2-8466-6857-6d21,00 aFR a20141003 k 1frea01 ba0 afrecfre 1[2014-10-03-00.00.00.000000][2014-11-04-00.00.00.000000][2014-11-04-00.00.00.000000][]1 aLe Petit bonnet de laine rougefCatherine ECOLE-BOIVIN cA Vue d'oeild2014 a400 p.3400ccouv. ill. en coul.d24 cm. aVert comme la presqu'île du Cotentin alentour. Bleu comme les terres à l'infini baignées par la mer. Rouge comme le petit bonnet de laine dont est affublée, été comme hiver, Margriette parce que sa mère le veut ainsi. +Grandir, être choyée par les proches quand sa propre mère, plus absente que tendre, fait défaut, épouser un jour Agricol... Margriette n'aspire qu'au bonheur. Mais il est des blessures d'enfance dont on ne guérit pas. + +Le portrait vrai et bouleversant d'une femme débordant d'espérance entre Normandie et Pays lauragais. 10 aR ECO LV10aECOLE-BOIVINbCatherine aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADU2adultes aR aRoman4R aLarge vision aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0384217*81gL-h038421kR ECO LVm20141104opqgram1[AVUE][A vue d'oeil][Cergy Pontoise cedex][95801][BP78264 27 av de la Constellation][][01.30.36.75.69][][][][][][][][][ ][][][][][][][][][]2[ALV][Livre Large Vision Adulte][0][1][Livre disponible : Fonds Large Vision][0][0][0][0]319,1192014-10-03-00.00.00.00000042014-11-04-00.00.00.0000005384216BIB02063oam2 22003011 450 00100090000001000290000902100070003810000260004510100130007110500650008420000470014921000350019621500450023133007830027646100310105951700350109067600060112568600140113170000200114580100510116583000170121683500060123393000250123993200170126493200210128193200140130299504450131600439298 a978-2-366-37174-1d23,50 aFR a20141021 k 0frea01 ba0 afrecfre 1[2014-10-21-00.00.00.000000][][2014-10-21-00.00.00.000000][]1 aDe taille et d'estocfJean d' AILLONv131 aLa Roque-sur-PernescVDBd2014 a705 p.3705ccouv. ill. en coul.d23 cm. aMarseille, 1187. Antoine, orphelin de treize ans recherché pour meurtre, se retrouve seul sur les routes infestées de bandits, de mercenaires mais aussi de quelques belles âmes. L’adolescent, qui dorénavant se fait appeler Guilhem, va au hasard d’étonnantes rencontres, être initié à l’art des troubadours tout comme à celui de la coutellerie, du lancer de couteau et du duel. +Son chemin croise, un jour, celui de Joceran d’Oc et de Jeanne de Chandieu qui, pour vivre leur passion, ont quitté l’habit et les ordres religieux. Ils n’en sont pas moins accusés d’avoir dérobé la Sainte Lance, inestimable relique rapportée des croisés de la Terre Sainte. +Amour et honneur, quête de la vérité et vengeance : la grande saga du chevalier troubadour, Guilhem d’Ussel, peut commencer. tGuilhem d'Usselv134393660 ala jeunesse de Guilhem d'Ussel 10 aRH AIL LV10aAILLONbJean d' aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADU2adultes aR aRoman historique4RH aLarge vision aRoman historique aMoyen Age aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0385517*81gL-h038551kRH AIL LVm20141104opqgram1[VDB][Ed. V.D.B. SARL][La Roque-sur-Pernes][84210]['Les Restanques' F.][16.90.66.50.03][01.90.66.550.03][9,00][][][][][][][][EDI][Livres grands caractères][][][][][][][][]2[ALV][Livre Large Vision Adulte][0][1][Livre disponible : Fonds Large Vision][0][0][0][0]321,3992014-10-21-00.00.00.00000042014-10-21-00.00.00.0000005385516BIB00679nam1 22002411 450 00100090000001000100000910000260001910100130004510500910005820000360014921000290018521500320021467600060024668600140025270000200026680100510028683000170033783500060035493000250036093200170038593200210040293200140042300439366 d21,39 a20141104 k 0frea01 ba0 afrecfre 1[2014-11-04-00.00.00.000000][][2014-11-04-00.00.00.000000][2014-11-04-00.00.00.000000]1 aGuilhem d'UsselfJean d' AILLON aLa Roque-sur-PernescVDB ccouv. ill. en coul.d23 cm. 10 aRH AIL LV10aAILLONbJean d' aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADU2adultes aR aRoman historique4RH aLarge vision aRoman historique aMoyen Age02473oam2 22002891 450 00100090000001000290000902100070003810000260004510100130007110500910008420000960017521000350027121500450030633011310035146100350148267600060151768600140152370000200153770200480155780100510160583000170165683500060167393000230167993200190170293200170172199504450173800439303 a978-2-366-37180-2d18,85 aFR a20141021 k 1frea01 ba1 afrecger 1[2014-10-21-00.00.00.000000][2014-11-04-00.00.00.000000][2014-11-04-00.00.00.000000][]1 aLa Vallée du renard. Tome 1fCharlotte LINKgTrad. de l'allemand par Catherine BARRETv131 aLa Roque-sur-PernescVDBd2014 a384 p.3384ccouv. ill. en coul.d23 cm. aPar une belle journée d’aout, sur la côte sud du Pays de Galles, Matthew Willard revient avec son chien sur le parking, perdu au milieu des champs, où sa femme l’attend. Si la voiture est toujours là, Vanessa, elle, a disparu. Sans laisser de traces. Convaincu qu’elle n’est pas partie de son plein gré, Matthew ne peut imaginer la terrible vérité : Vanessa a été enlevée, enfermée dans une malle et cachée dans une grotte, avec de l’eau et de la nourriture pour une semaine. + +Son ravisseur, Ryan Lee, a déjà plusieurs fois été condamné pour des délits mineurs. Son passé de petite frappe le rattrape au plus mauvais moment. Il est mis en détention et écope de quatre ans de prison. Kidnappée pour faire l’objet d’une rançon qui aurait permis à Ryan de rembourser 20 000 £, Vanessa est abandonnée à son triste sort… + +Près de trois ans plus tard, l’histoire semble se répéter. Une autre femme disparaît dans des circonstances mystérieuses. La police n’a aucune piste. Ryan, récemment libéré, n’a jamais révélé son terrible secret. Mais cette fois-ci, il semble que ce soit dans son entourage que sont choisies les victimes… tLa Vallée du renardv13439367 10 aRS LIN LV10aLINKbCharlotte10aBARRETbCatherinegTrad. de l'allemand5TRD aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADU2adultes aR aRoman suspense4RS aRoman Suspense aLarge vision aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0385587*81gL-h038558kRS LIN LVm20141104opqgram1[VDB][Ed. V.D.B. SARL][La Roque-sur-Pernes][84210]['Les Restanques' F.][16.90.66.50.03][01.90.66.550.03][9,00][][][][][][][][EDI][Livres grands caractères][][][][][][][][]2[ALV][Livre Large Vision Adulte][0][1][Livre disponible : Fonds Large Vision][0][0][0][0]317,1592014-10-21-00.00.00.00000042014-11-04-00.00.00.0000005385586BIB00714nam1 22002171 450 00100090000001000100000910000260001910100130004510500910005820000820014921000350023121500320026667600060029868600140030470000200031870200480033880100510038683000170043793000230045493200190047700439367 d17,15 a20141104 k 0frea01 ba1 afrecger 1[2014-11-04-00.00.00.000000][][2014-11-04-00.00.00.000000][2014-11-04-00.00.00.000000]1 aLa Vallée du renardfCharlotte LINKgTrad. de l'allemand par Catherine BARRET aLa Roque-sur-PernescVDBd2014 ccouv. ill. en coul.d23 cm. 10 aRS LIN LV10aLINKbCharlotte10aBARRETbCatherinegTrad. de l'allemand5TRD aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADU2adultes aRoman suspense4RS aRoman Suspense02467oam2 22002891 450 00100090000001000290000902100070003810000260004510100130007110500910008420000960017521000290027121500450030033011310034546100350147667600060151168600140151770000200153170200480155180100510159983000170165083500060166793000230167393200190169693200170171599504450173200439304 a978-2-366-37180-2d18,85 aFR a20141021 k 1frea01 ba1 afrecger 1[2014-10-21-00.00.00.000000][2014-11-04-00.00.00.000000][2014-11-04-00.00.00.000000][]1 aLa Vallée du renard. Tome 2fCharlotte LINKgTrad. de l'allemand par Catherine BARRETv232 aLa Roque-sur-PernescVDB a387 p.3387ccouv. ill. en coul.d23 cm. aPar une belle journée d’aout, sur la côte sud du Pays de Galles, Matthew Willard revient avec son chien sur le parking, perdu au milieu des champs, où sa femme l’attend. Si la voiture est toujours là, Vanessa, elle, a disparu. Sans laisser de traces. Convaincu qu’elle n’est pas partie de son plein gré, Matthew ne peut imaginer la terrible vérité : Vanessa a été enlevée, enfermée dans une malle et cachée dans une grotte, avec de l’eau et de la nourriture pour une semaine. + +Son ravisseur, Ryan Lee, a déjà plusieurs fois été condamné pour des délits mineurs. Son passé de petite frappe le rattrape au plus mauvais moment. Il est mis en détention et écope de quatre ans de prison. Kidnappée pour faire l’objet d’une rançon qui aurait permis à Ryan de rembourser 20 000 £, Vanessa est abandonnée à son triste sort… + +Près de trois ans plus tard, l’histoire semble se répéter. Une autre femme disparaît dans des circonstances mystérieuses. La police n’a aucune piste. Ryan, récemment libéré, n’a jamais révélé son terrible secret. Mais cette fois-ci, il semble que ce soit dans son entourage que sont choisies les victimes… tLa Vallée du renardv23439367 10 aRS LIN LV10aLINKbCharlotte10aBARRETbCatherinegTrad. de l'allemand5TRD aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADU2adultes aR aRoman suspense4RS aRoman Suspense aLarge vision aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0385597*81gL-h038559kRS LIN LVm20141104opqgram1[VDB][Ed. V.D.B. SARL][La Roque-sur-Pernes][84210]['Les Restanques' F.][16.90.66.50.03][01.90.66.550.03][9,00][][][][][][][][EDI][Livres grands caractères][][][][][][][][]2[ALV][Livre Large Vision Adulte][0][1][Livre disponible : Fonds Large Vision][0][0][0][0]317,1592014-10-21-00.00.00.00000042014-11-04-00.00.00.0000005385596BIB00491oas2 22000971 450 00100090000010000240000920000430003321000590007646100350013599502230017000439312 a20141101 1frea01 ba a8 Petites surfaces styléesbpériodique d2014-11-01-00.00.00.000000h2014-11-30-00.00.00.000000 tLe Journal de la Maisonv144H aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfP-000205657*81gP-h00020565m20141104opppqaras2[APA][Périodique Adulte][0][1][Périodique disponible : Fonds Adulte][0][0][0][0]33,5092014-10-21-00.00.00.0000006BIB00492oas2 22000971 450 00100090000010000240000920000450003321000590007846100340013799502230017100439330 a20141101 1frea01 ba aSexe : que dire, que taire ?bpériodique d2014-11-01-00.00.00.000000h2014-11-30-00.00.00.000000 tPsychologies Magazinev3454N aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfP-000205827*81gP-h00020582m20141104opppqaras2[APA][Périodique Adulte][0][1][Périodique disponible : Fonds Adulte][0][0][0][0]34,0092014-10-22-00.00.00.0000006BIB02113oam2 22002651 450 00100090000001000290000902100070003810000260004510100130007110500650008420000720014921000270022121500570024833008910030546100200119667600440121668600140126070000430127480100510131783000170136883500060138593000230139193200260141499504070144000439334 a978-2-203-05057-0d16,00 aFR a20141024 k 0frea01 ba0 afrecfre 1[2014-10-24-00.00.00.000000][][2014-11-04-00.00.00.000000][]1 aLa Colère blanche de l'oragefScénario et Dessin Benoit SOKALv333 aPariscCastermand2014 a68 p.368cill. en coul. couv. ill. en coul.d31 cm. aDans l’un des hôpitaux de la ville de Klowtown, au début des années soixante, une femme médecin qui n’est plus toute jeune, Emily, se souvient de l’époque enfuie de sa jeunesse… +Flash-back : en ces temps lointains, au coeur de la vallée sauvage menacée par la poussée urbaine de Klowtown en plein essor, la jeune Emily a appris à vivre en autarcie avec Yuma, l’indien mutique, et son inquiétant compagnon ailé, l’aigle Kraa, avec lequel s’est instauré un lien d’essence chamanique. Au prix de bien des souffrances, paix et tranquillité semblent enfin régner. Hélas, ce n’est qu’un leurre. Les travaux de construction du futur barrage viennent juste de commencer ; une menace directe et immédiate pour le paradis jusqu’alors inaccessible d’Emily, Yuma et Kraa. Il est temps pour le rapace et son compagnon de reprendre l’offensive contre les envahisseurs. Et tous les coups sont permis… tKraav33431451 a741.5tCaricatures, Bandes dessinées10 a741.5 KRA10aSOKALbBenoitgScénario et Dessin5SCD aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADU2adultes aI aBande dessinée4BD aBande dessinée adulte aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfL-0385627*81gL-h038562k741.5 KRAm20141104opqaram1[LEG BD][Legend BD][ORLEANS][45000][39 Place du Chatelet][][02.38.53.78.63][9,00][][][][][][][][LIB][BD][][][][][][][][legendbd@wanadoo.fr]2[ABDA][Bande dessinée Adulte][0][1][Livre disponible : Fonds BD Adulte][0][0][0][0]314,5692014-10-24-00.00.00.00000042014-11-04-00.00.00.0000005385626BIB01501nam1 22002411 450 00100090000001000100000902100070001910000260002610100130005210500650006520000420013021000210017221500460019333007960023967600440103568600140107970000430109380100510113683000170118783500060120493000230121093200260123300431451 d14,56 aFR a20110307 k 0frea01 ba0 afrecfre 1[2011-03-07-00.00.00.000000][][2011-03-07-00.00.00.000000][]1 aKraafScénario et Dessin Benoit SOKAL aPariscCasterman cill. en coul. couv. ill. en coul.d31 cm. aC’est une vallée très reculée, quelque part au fin fond d’un pays froid qui pourrait être l’Alaska ou la Sibérie. Presque personne n’y vit, hormis la faune sauvage et un peuple autochtone discret. + +Hélas, le sous-sol regorge de matières premières et bientôt les affairistes déferlent, pressés d’y construire une ville, des mines, un barrage… Les premières exactions surviennent ; personne ne doit faire obstacle au « progrès ». Mais il y a pourtant un témoin silencieux à cet immense désordre : Kraa, un jeune aigle très puissant qui a appris la survie, maître secret de la vallée. + +Avec Yuma, un adolescent indien dont on vient de massacrer la famille, et avec lequel il a développé un lien d’essence chamanique, Kraa, dont la voix off sert de fil rouge au récit, entre en résistance… + a741.5tCaricatures, Bandes dessinées10 a741.5 KRA10aSOKALbBenoitgScénario et Dessin5SCD aFRbBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMIN 1ADU2adultes aI aBande dessinée4BD aBande dessinée adulte00493oas2 22000971 450 00100090000010000240000920000520003321000590008546100280014499502230017200439368 a20141103 1frea01 ba a60 idées pour passer un super hiverbpériodique d2014-11-03-00.00.00.000000h2014-11-09-00.00.00.000000 tFemme Actuellev15714N aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfP-000206037*81gP-h00020603m20141104opppqaras2[APA][Périodique Adulte][0][1][Périodique disponible : Fonds Adulte][0][0][0][0]31,6092014-11-04-00.00.00.0000006BIB00497oas2 22000971 450 00100090000010000240000920000530003321000590008646100310014599502230017600439369 a20141101 1frea01 ba a150 créations pour un Noël magique !bpériodique d2014-11-01-00.00.00.000000h2014-12-31-00.00.00.000000 tMarie-Claire idéesv1054N aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfP-000206047*81gP-h00020604m20141104opppqaras2[APA][Périodique Adulte][0][1][Périodique disponible : Fonds Adulte][0][0][0][0]34,9092014-11-04-00.00.00.0000006BIB00506oas2 22000971 450 00100090000010000240000920000730003321000590010646100200016599502230018500439370 a20141101 1frea01 ba aImpôts : les 600 000 Français qui paient pour les autresbpériodique d2014-11-01-00.00.00.000000h2014-11-30-00.00.00.000000 tCapitalv2784N aBIBLIOTHEQUE MUNICIPALE ST-PRYVE ST-MESMINfP-000206057*81gP-h00020605m20141104opppqaras2[APA][Périodique Adulte][0][1][Périodique disponible : Fonds Adulte][0][0][0][0]33,8092014-11-04-00.00.00.0000006BIB \ No newline at end of file diff --git a/tests/library/Class/MockMailTransport.php b/tests/library/Class/MockMailTransport.php index 8fd521bf31db1a54f1b9dd2282590239f019ca8f..04d454d6945981512f2e2bbc7585ed415f9c069c 100644 --- a/tests/library/Class/MockMailTransport.php +++ b/tests/library/Class/MockMailTransport.php @@ -16,32 +16,32 @@ * * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE * along with BOKEH; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ class MockMailTransport extends Zend_Mail_Transport_Abstract { public $sent_mail = null; protected $_send_block; - protected $_sent_mails = array(); + protected $_sent_mails = []; public function send(Zend_Mail $mail) { $this->sent_mail = $mail; - $this->_sent_mails []= $mail; + $this->_sent_mails[] = $mail; - if (isset($this->_send_block)) { + if (isset($this->_send_block)) call_user_func($this->_send_block); - } } + public function onSendDo($block) { $this->_send_block = $block; } + protected function _sendMail() {} + public function getSentMails() { return $this->_sent_mails; } -} - -?> \ No newline at end of file +} \ No newline at end of file diff --git a/tests/library/Class/ModelTestCase.php b/tests/library/Class/ModelTestCase.php index 047fb681beab0449985643c58de29c8ae2da8e26..1cb3a2cd70e9bac26c83b39665b573aeaa0f082c 100644 --- a/tests/library/Class/ModelTestCase.php +++ b/tests/library/Class/ModelTestCase.php @@ -40,64 +40,75 @@ abstract class ModelTestCase extends Storm_Test_ModelTestCase { use Storm_Test_THelpers; protected - $_storm_default_to_volatile = false; + $_storm_default_to_volatile = false, + $_registry_sql; + protected function _buildTableMock($model, $methods) { $table = $this->getMock('Storm_Model_Table'.$model,$methods); - $loader = call_user_func(array($model, 'getLoader')); + $loader = call_user_func([$model, 'getLoader']); $loader->setTable($table); return $table; } + protected function _buildRowset($data) { - return new Zend_Db_Table_Rowset(array('data' => $data)); + return new Zend_Db_Table_Rowset(['data' => $data]); } protected function _setFindExpectation($model, $fixture, $id) { - $mock_results = $this->_buildRowset(array($fixture)); + $mock_results = $this->_buildRowset([$fixture]); - $this->_buildTableMock($model, array('find')) + $this->_buildTableMock($model, ['find']) ->expects($this->once()) ->method('find') ->with($id) ->will($this->returnValue($mock_results)); } + protected function setUp() { Storm_Model_Abstract::unsetLoaders(); if($this->_storm_default_to_volatile) Storm_Model_Loader::defaultToVolatile(); + + $this->_registry_sql = Zend_Registry::get('sql'); } + protected function tearDown() { if($this->_storm_default_to_volatile) Storm_Model_Loader::defaultToDb(); Storm_Model_Abstract::unsetLoaders(); + + if ($this->_registry_sql) + Zend_Registry::set('sql', $this->_registry_sql); } + protected function _setFindAllExpectation($model, $fixtures) { if (!is_array($fixtures)) { - $finst = new $fixtures; + $finst = new $fixtures(); $fixtures = $finst->all(); } + $mock_results = $this->_buildRowset($fixtures); - $tbl_newsletters = $this->_buildTableMock($model, - array('fetchAll')); + $tbl_newsletters = $this->_buildTableMock($model, ['fetchAll']); $tbl_newsletters ->expects($this->once()) ->method('fetchAll') ->will($this->returnValue($mock_results)); + return $tbl_newsletters; } + protected function _generateLoaderFor($model, $methods) { $loader = $this->getMock('Mock'.$model, $methods); Storm_Model_Abstract::setLoaderFor($model, $loader); return $loader; } -} - -?> \ No newline at end of file +} \ No newline at end of file diff --git a/tests/library/Class/NewsletterMailingTest.php b/tests/library/Class/NewsletterMailingTest.php index 3cfdefe6b1ffa52371711f6b93c135dd8be2f62b..bd68b5f6febb8f24effeee82050f6a1e4b478543 100644 --- a/tests/library/Class/NewsletterMailingTest.php +++ b/tests/library/Class/NewsletterMailingTest.php @@ -33,9 +33,9 @@ abstract class NewsletterMailingTestCase extends ModelTestCase { Class_Systeme_TimeLimit::setInstance( $this->mock() - ->whenCalled('set')->with(30)->answers(null) - ->whenCalled('reset')->answers(null) - ->beStrict()); + ->whenCalled('set')->with(30)->answers(null) + ->whenCalled('reset')->answers(null) + ->beStrict()); $profil_portail = $this->fixture('Class_Profil', ['id' => 1, @@ -114,7 +114,7 @@ abstract class NewsletterMailingTestCase extends ModelTestCase { ->beStrict(); - Storm_Test_ObjectWrapper::onLoaderOfModel('Class_NewsletterSubscription') + $this->onLoaderOfModel('Class_NewsletterSubscription') ->whenCalled('clearCache') ->answers(true) @@ -139,7 +139,7 @@ abstract class NewsletterMailingTestCase extends ModelTestCase { ->beStrict(); - Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Notice') + $this->onLoaderOfModel('Class_Notice') ->whenCalled('getNoticesFromPreferences') ->willDo(function() {return $this->notices;}); @@ -153,30 +153,45 @@ abstract class NewsletterMailingTestCase extends ModelTestCase { protected function getReceivers() { - if ($this->user_model->methodCallCount('getNewslettersReceivers')>1) + if ($this->user_model->methodCallCount('getNewslettersReceivers') > 1) return []; - return [$this->rdubois, - $this->mduchamp, - $this->zork, - $this->zorkglub]; + + return [$this->rdubois, $this->mduchamp, $this->zork, $this->zorkglub]; + } + + + protected function assertMIMEPartContains($needle, $text) { + $decoded_text = quoted_printable_decode($text->getContent()); + $this->assertContains($needle, + $decoded_text, + $needle . ' not found in ' . $decoded_text); + } + + + protected function assertBodyHTMLContains($needle) { + $this->assertMIMEPartContains($needle, $this->mail->getBodyHTML()); + } + + + protected function assertBodyTextContains($needle) { + $this->assertMIMEPartContains($needle, $this->mail->getBodyText()); } } -class NewsletterMailingAnimationsTestSendMail extends NewsletterMailingTestCase { +class NewsletterMailingAnimationsSendMailTest extends NewsletterMailingTestCase { public function setUp() { parent::setup(); - $this->animations->generateMails(20); - $this->mail = $this->mock_transport->sent_mail; $this->batch_send = new Class_Batch_SendNewsletters($this->animations); } /** @test */ public function batchSendParamsShouldBeAsExpected() { - $this->assertEquals('"'.$_SERVER['HTTP_HOST'].'" "'.$_SERVER['SERVER_NAME'].'" "'.BASE_URL.'" "1"', $this->batch_send->getExecParams()); + $this->assertEquals('"'.$_SERVER['HTTP_HOST'].'" "'.$_SERVER['SERVER_NAME'].'" "'.BASE_URL.'" "1"', + $this->batch_send->getExecParams()); } @@ -186,131 +201,257 @@ class NewsletterMailingAnimationsTestSendMail extends NewsletterMailingTestCase } - public function testToArrayContainsAdminPortailAsExpediteur() { - $this->assertContains('flo@afi-sa.fr', - $this->mail->getFrom()); + /** @test */ + public function mailShouldBeSendFromPortalAdmin() { + $this->assertContains('flo@afi-sa.fr', $this->mail->getFrom()); } - public function testSubjectIsAnimationsDuMois() { + + /** @test */ + public function subjectShouldBeAnimationsDuMois() { $this->assertEquals('Animations du mois', $this->mail->getSubject()); } - public function testBodyTextIsDecouverteCuisineDuMonde() { + + /** @test */ + public function bodyTextShouldBeDecouverteCuisineDuMonde() { $this->assertContains('Découverte des cuisines du monde', quoted_printable_decode($this->mail->getBodyText()->getContent())); } - public function testBccIncludesRduboisAtFreeDotFr() { - $this->assertContains('rdubois@afi-sa.fr', - implode(',',$this->mail->getRecipients())); - } - public function testBccIncludesMduchampAtHotmailDotCom() { - $this->assertContains('mduchamp@afi-sa.fr', - $this->mail->getRecipients()); + /** @test */ + public function bccShouldContainsRduboisAtFreeDotFr() { + $this->assertContains('rdubois@afi-sa.fr', implode(',',$this->mail->getRecipients())); } - public function testBccShouldNotIncludeZork() { - $this->assertNotContains('zork', - $this->mail->getRecipients()); + /** @test */ + public function bccShouldContainsMduchampAtHotmailDotCom() { + $this->assertContains('mduchamp@afi-sa.fr', $this->mail->getRecipients()); } - public function testToIsAdminPortail() { - $this->assertContains('flo@afi-sa.fr', - $this->mail->getRecipients()); + /** @test */ + public function bccShouldNotContainsZork() { + $this->assertNotContains('zork', $this->mail->getRecipients()); } - public function mailRecipientSizeShouldBe3() { - $this->assertEquals(4, count($this->mail->getRecipients())); + /** @test */ + public function recipientsShouldContainsPortalAdmin() { + $this->assertContains('flo@afi-sa.fr', $this->mail->getRecipients()); } - public function testSenderIsAdminPortail() { - $this->assertEquals('flo@afi-sa.fr', $this->mail->getFrom()); + /** @test */ + public function mailShouldHave3Recipients() { + $this->assertEquals(3, count($this->mail->getRecipients())); } - public function testNewsletterLastDistributionDateIsNow() { - $this->assertEquals('23/05/2014 14:30', DateTime::createFromFormat("Y-m-d H:i:s", ($this->animations->getLastDistributionDate()))->format("d/m/Y H:i")); + /** @test */ + public function newsletterLastDistributionDateShouldBeNow() { + $this->assertEquals('23/05/2014 14:30', + DateTime::createFromFormat('Y-m-d H:i:s', + ($this->animations->getLastDistributionDate())) + ->format("d/m/Y H:i")); } } -class NewsletterMailingConcertsTestPanier extends NewsletterMailingTestCase { - public function setUp() { - parent::setup(); - $this->animations->generateMails(20); - $this->mail = $this->mock_transport->sent_mail; +class NewsletterMailingConcertsPanierTextTest extends NewsletterMailingTestCase { + /** @test */ + public function shouldContainsMillenium() { + $this->assertBodyTextContains("Les hommes qui n'aimaient pas les femmes (Stieg Larsson, 2005)"); } - public function assertMIMEPartContains($needle, $text) { - $decoded_text = quoted_printable_decode($text->getContent()); - parent::assertContains($needle, $decoded_text, - $needle.' not found in '.$decoded_text); - } - - public function assertBodyHTMLContains($needle) { - $this->assertMIMEPartContains($needle, - $this->mail->getBodyHTML()); + /** @test */ + public function shouldContainsResumeMillenium() { + $this->assertBodyTextContains('Polard du nord'); } - public function assertBodyTextContains($needle) { - $this->assertMIMEPartContains($needle, - $this->mail->getBodyText()); - } - public function testBodyTextContainsMillenium() { - $this->assertBodyTextContains("Les hommes qui n'aimaient pas les femmes (Stieg Larsson, 2005)"); - } - - public function testBodyTextContainsResumeMillenium() { - $this->assertBodyTextContains("Polard du nord"); + /** @test */ + public function shouldContainsURLMillenium() { + $this->assertBodyTextContains('http://localhost' . BASE_URL . '/recherche/viewnotice/id/345'); } - public function testBodyTextContainsURLMillenium() { - $this->assertBodyTextContains("http://localhost" . BASE_URL . "/recherche/viewnotice/id/345"); - } - public function testBodyTextContainsPotter() { + /** @test */ + public function shouldContainsPotter() { $this->assertBodyTextContains("Harry Potter à l'école des sorciers (J.K. Rowling, 1998)"); } - public function testBodyTextContainsResumePotter() { + + /** @test */ + public function shouldContainsResumePotter() { $this->assertBodyTextContains("L'histoire d'un sorcier"); } - public function testBodyTextContainsURLPotter() { - $this->assertBodyTextContains("http://localhost" . BASE_URL . "/recherche/viewnotice/id/987"); + + /** @test */ + public function shouldContainsURLPotter() { + $this->assertBodyTextContains('http://localhost' . BASE_URL . "/recherche/viewnotice/id/987"); } +} + + + - public function testVignetteMilleniumInHTML() { +class NewsletterMailingConcertsPanierHtmlTest extends NewsletterMailingTestCase { + /** @test */ + public function shouldContainsVignetteMillenium() { $this->assertBodyHTMLContains('<img src="http://afi-sa.fr/millenium.png"'); } - public function testLinkMillenium() { + + /** @test */ + public function shouldContainsLinkMillenium() { $this->assertBodyHTMLContains('<a href="http://localhost' . BASE_URL . '/recherche/viewnotice?id=345"'); } - public function testBodyHTMLContainsPotter() { + + /** @test */ + public function shouldContainsPotter() { $this->assertBodyHTMLContains("Harry Potter à l'école des sorciers (J.K. Rowling, 1998)"); } - public function testBodyHTMLContainsResumePotter() { + + /** @test */ + public function shouldContainsResumePotter() { $this->assertBodyHTMLContains("L'histoire d'un sorcier..."); } - public function testVignettePotterInHTML() { + + /** @test */ + public function shouldContainsVignettePotter() { $this->assertBodyHTMLContains('<img src="http://afi-sa.fr/potter.gif"'); } - public function testLinkPotter() { + + /** @test */ + public function shouldContainsPotterLink() { $this->assertBodyHTMLContains('<a href="http://localhost' . BASE_URL . '/recherche/viewnotice?id=987"'); } } -?> \ No newline at end of file + + + +/** @see http://forge.afi-sa.fr/issues/18661 */ +class NewsletterMailingDedupTest extends ModelTestCase { + protected + $_fetch_users_calls = 0, + $_letter; + + public function setUp() { + parent::setUp(); + Storm_Model_Loader::defaultToVolatile(); + + $this->mock_transport = new MockMailTransport(); + Zend_Mail::setDefaultTransport($this->mock_transport); + + $time_source = new TimeSourceForTest('2014-05-23 14:30:00'); + Class_Newsletter::setTimeSource($time_source); + + Class_Systeme_TimeLimit::setInstance($this->mock() + ->whenCalled('set')->with(30)->answers(null) + ->whenCalled('reset')->answers(null) + ->beStrict()); + + $this->alcor = $this->fixture('Class_Users', + ['id' => 120, + 'login' => 'alc', + 'password' => 'or', + 'mail' => 'procyon@centre-de-recherche.fr']); + + $this->actarus = $this->fixture('Class_Users', + ['id' => 121, + 'login' => 'acta', + 'password' => 'rus', + 'mail' => 'procyon@centre-de-recherche.fr']); + + $this->_letter = $this->fixture('Class_Newsletter', + ['id' => 23, + 'titre' => 'Alerte vega', + 'id_panier' => 0, + 'id_catalogue' => 0, + 'expediteur' => 'professeur@centre-de-recherche.fr', + 'contenu' => 'Golgoth aperçu azimut 234.53', + 'last_distribution_date' => '', + 'users' => [$this->alcor, $this->actarus]]); + + Zend_Registry::set('sql', $sql = $this->mock()); + $sql->whenCalled('execute') + ->with('update newsletters_users set send=false where newsletter_id=23') + ->answers(null) + + ->beStrict(); + + $this->onLoaderOfModel('Class_Users'); + } + + + public function tearDown() { + Storm_Model_Loader::defaultToDb(); + parent::tearDown(); + } + + + /** @test */ + public function procyonInOnePageShouldNotReceiveTwoMails() { + $this->expectUserFetchAndDo( + function() { + $this->_fetch_users_calls++; + if (1 == $this->_fetch_users_calls) + return [$this->alcor, $this->actarus]; + + return []; + }); + + $this->_letter->generateMails(20); + + $this->assertProcyonNotDuplicatedIn($this->mock_transport->getSentMails()); + } + + + /** @test */ + public function procyonInTwoPagesShouldNotReceiveTwoMails() { + $this->expectUserFetchAndDo( + function() { + $this->_fetch_users_calls++; + if (1 == $this->_fetch_users_calls) + return [$this->alcor]; + + if (2 == $this->_fetch_users_calls) + return [$this->actarus]; + + return []; + }); + + $this->_letter->generateMails(20); + + $this->assertProcyonNotDuplicatedIn($this->mock_transport->getSentMails()); + } + + + protected function assertProcyonNotDuplicatedIn($mails) { + $sent = 0; + foreach ($mails as $mail) + foreach ($mail->getHeaders()['Bcc'] as $recipient) + if ('<procyon@centre-de-recherche.fr>' === $recipient) + $sent++; + + $this->assertEquals(1, $sent); + } + + + protected function expectUserFetchAndDo($closure) { + Class_Users::whenCalled('findAll') + ->with('select bib_admin_users.* from bib_admin_users join newsletters_users on bib_admin_users.id_user = newsletters_users.user_id where newsletter_id = 23 and newsletters_users.send is false order by bib_admin_users.mail limit 20') + ->willDo($closure); + } +} \ No newline at end of file diff --git a/tests/library/Class/ProfilModulesPreferencesTest.php b/tests/library/Class/ProfilModulesPreferencesTest.php new file mode 100644 index 0000000000000000000000000000000000000000..8ed4a2e308ce52fdfbeb7712a654096a804e6d13 --- /dev/null +++ b/tests/library/Class/ProfilModulesPreferencesTest.php @@ -0,0 +1,46 @@ +<?php +/** + * Copyright (c) 2012-2014, Agence Française Informatique (AFI). All rights reserved. + * + * BOKEH is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation. + * + * There are special exceptions to the terms and conditions of the AGPL as it + * is applied to this software (see README file). + * + * BOKEH is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with BOKEH; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + +/** @see http://afi-forge.afi-sa.fr/issues/25404 */ +class ProfilModulesPreferencesDefaultTest extends ModelTestCase { + public function setUp() { + parent::setUp(); + Storm_Model_Loader::defaultToVolatile(); + + $this->profil = $this->fixture('Class_Profil', + ['id' => 1, + 'cfg_modules' => 'a:3:{s:9:"recherche";a:9:{s:14:"resultatsimple";a:18:{s:5:"titre";s:0:"";s:5:"boite";s:0:"";s:16:"suggestion_achat";s:1:"1";s:12:"liste_format";s:1:"3";s:17:"liste_nb_par_page";s:1:"8";s:11:"liste_codes";s:3:"EN9";s:11:"zones_titre";s:12:"200$e;200$h;";s:14:"facettes_actif";s:1:"1";s:15:"facettes_nombre";s:1:"3";s:14:"facettes_codes";s:5:"BAFGM";s:16:"facettes_message";s:22:"Affiner la recherche :";s:10:"tags_actif";s:1:"1";s:13:"tags_position";s:1:"2";s:11:"tags_calcul";s:1:"0";s:11:"tags_nombre";s:2:"20";s:10:"tags_codes";s:6:"AMDPZF";s:12:"tags_message";s:23:"Elargir la recherche...";s:6:"submit";s:7:"Valider";}s:11:"viewnotice1";a:6:{s:7:"onglets";a:16:{s:6:"detail";a:4:{s:3:"aff";s:1:"1";s:5:"ordre";s:1:"1";s:5:"titre";s:23:"Description du document";s:7:"largeur";s:1:"0";}s:4:"avis";a:4:{s:3:"aff";s:1:"1";s:5:"ordre";s:1:"3";s:5:"titre";s:9:"Critiques";s:7:"largeur";s:1:"0";}s:11:"exemplaires";a:4:{s:3:"aff";s:1:"1";s:5:"ordre";s:1:"2";s:5:"titre";s:11:"Exemplaires";s:7:"largeur";s:1:"0";}s:6:"resume";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:1:"4";s:5:"titre";s:9:"Résumés";s:7:"largeur";s:1:"0";}s:4:"tags";a:4:{s:3:"aff";s:1:"1";s:5:"ordre";s:1:"6";s:5:"titre";s:26:"Rebondir dans le catalogue";s:7:"largeur";s:1:"0";}s:10:"biographie";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"8";s:5:"titre";s:22:"Biographie de l\'auteur";s:7:"largeur";s:1:"0";}s:6:"series";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"7";s:5:"titre";s:28:"Documents de la même série";s:7:"largeur";s:1:"0";}s:10:"similaires";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"5";s:5:"titre";s:20:"Documents similaires";s:7:"largeur";s:1:"0";}s:13:"bibliographie";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"16";s:5:"titre";s:12:"Discographie";s:7:"largeur";s:1:"0";}s:8:"morceaux";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"10";s:5:"titre";s:8:"Morceaux";s:7:"largeur";s:1:"0";}s:12:"bandeAnnonce";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"11";s:5:"titre";s:13:"Bande-annonce";s:7:"largeur";s:1:"0";}s:6:"photos";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"12";s:5:"titre";s:6:"Photos";s:7:"largeur";s:1:"0";}s:6:"videos";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"9";s:5:"titre";s:15:"Archives vidéo";s:7:"largeur";s:1:"0";}s:13:"resnumeriques";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"14";s:5:"titre";s:22:"Ressources numériques";s:7:"largeur";s:1:"0";}s:11:"babeltheque";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"15";s:5:"titre";s:12:"Babelthèque";s:7:"largeur";s:1:"0";}s:4:"frbr";a:4:{s:3:"aff";s:1:"1";s:5:"ordre";s:2:"13";s:5:"titre";s:14:"Notices liées";s:7:"largeur";s:1:"0";}}s:6:"entete";s:4:"ECND";s:9:"analytics";s:1:" ";s:15:"analytics_title";s:0:"";s:17:"analytics_authors";s:0:"";s:5:"boite";s:0:"";}s:11:"viewnotice4";a:6:{s:7:"onglets";a:16:{s:6:"detail";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:1:"1";s:5:"titre";s:23:"Description du document";s:7:"largeur";s:1:"0";}s:4:"avis";a:4:{s:3:"aff";s:1:"1";s:5:"ordre";s:1:"4";s:5:"titre";s:9:"Critiques";s:7:"largeur";s:1:"0";}s:11:"exemplaires";a:4:{s:3:"aff";s:1:"1";s:5:"ordre";s:1:"2";s:5:"titre";s:11:"Exemplaires";s:7:"largeur";s:1:"0";}s:6:"resume";a:4:{s:3:"aff";s:1:"1";s:5:"ordre";s:1:"3";s:5:"titre";s:9:"Résumés";s:7:"largeur";s:1:"0";}s:4:"tags";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"6";s:5:"titre";s:26:"Rebondir dans le catalogue";s:7:"largeur";s:1:"0";}s:10:"biographie";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"7";s:5:"titre";s:22:"Biographie de l\'auteur";s:7:"largeur";s:1:"0";}s:6:"series";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:1:"8";s:5:"titre";s:28:"Documents de la même série";s:7:"largeur";s:1:"0";}s:10:"similaires";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"5";s:5:"titre";s:20:"Documents similaires";s:7:"largeur";s:1:"0";}s:13:"bibliographie";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"9";s:5:"titre";s:12:"Discographie";s:7:"largeur";s:1:"0";}s:8:"morceaux";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"10";s:5:"titre";s:8:"Morceaux";s:7:"largeur";s:1:"0";}s:12:"bandeAnnonce";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:2:"11";s:5:"titre";s:13:"Bande-annonce";s:7:"largeur";s:1:"0";}s:6:"photos";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"12";s:5:"titre";s:6:"Photos";s:7:"largeur";s:1:"0";}s:6:"videos";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:2:"13";s:5:"titre";s:15:"Archives vidéo";s:7:"largeur";s:1:"0";}s:13:"resnumeriques";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:2:"14";s:5:"titre";s:22:"Ressources numériques";s:7:"largeur";s:1:"0";}s:11:"babeltheque";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"15";s:5:"titre";s:12:"Babelthèque";s:7:"largeur";s:1:"0";}s:4:"frbr";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"16";s:5:"titre";s:14:"Notices liées";s:7:"largeur";s:1:"0";}}s:6:"entete";s:6:"ENGAMF";s:9:"analytics";s:4:" 464";s:15:"analytics_title";s:2:" t";s:17:"analytics_authors";s:1:"f";s:5:"boite";s:0:"";}s:11:"viewnotice3";a:6:{s:7:"onglets";a:16:{s:6:"detail";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:1:"1";s:5:"titre";s:23:"Description du document";s:7:"largeur";s:1:"0";}s:4:"avis";a:4:{s:3:"aff";s:1:"1";s:5:"ordre";s:1:"4";s:5:"titre";s:9:"Critiques";s:7:"largeur";s:1:"0";}s:11:"exemplaires";a:4:{s:3:"aff";s:1:"1";s:5:"ordre";s:1:"2";s:5:"titre";s:11:"Exemplaires";s:7:"largeur";s:1:"0";}s:6:"resume";a:4:{s:3:"aff";s:1:"1";s:5:"ordre";s:1:"3";s:5:"titre";s:9:"Résumés";s:7:"largeur";s:1:"0";}s:4:"tags";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"6";s:5:"titre";s:26:"Rebondir dans le catalogue";s:7:"largeur";s:1:"0";}s:10:"biographie";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"7";s:5:"titre";s:22:"Biographie de l\'auteur";s:7:"largeur";s:1:"0";}s:6:"series";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:1:"8";s:5:"titre";s:28:"Documents de la même série";s:7:"largeur";s:1:"0";}s:10:"similaires";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"5";s:5:"titre";s:20:"Documents similaires";s:7:"largeur";s:1:"0";}s:13:"bibliographie";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"9";s:5:"titre";s:12:"Discographie";s:7:"largeur";s:1:"0";}s:8:"morceaux";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:2:"10";s:5:"titre";s:8:"Morceaux";s:7:"largeur";s:1:"0";}s:12:"bandeAnnonce";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"13";s:5:"titre";s:13:"Bande-annonce";s:7:"largeur";s:1:"0";}s:6:"photos";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"11";s:5:"titre";s:6:"Photos";s:7:"largeur";s:1:"0";}s:6:"videos";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:2:"12";s:5:"titre";s:15:"Archives vidéo";s:7:"largeur";s:1:"0";}s:13:"resnumeriques";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"14";s:5:"titre";s:22:"Ressources numériques";s:7:"largeur";s:1:"0";}s:11:"babeltheque";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"15";s:5:"titre";s:12:"Babelthèque";s:7:"largeur";s:1:"0";}s:4:"frbr";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:2:"16";s:5:"titre";s:14:"Notices liées";s:7:"largeur";s:1:"0";}}s:6:"entete";s:6:"ENGAMF";s:9:"analytics";s:3:"464";s:15:"analytics_title";s:1:"t";s:17:"analytics_authors";s:1:"f";s:5:"boite";s:0:"";}s:11:"viewnotice2";a:6:{s:7:"onglets";a:16:{s:6:"detail";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"2";s:5:"titre";s:23:"Description du document";s:7:"largeur";s:1:"0";}s:4:"avis";a:4:{s:3:"aff";s:1:"1";s:5:"ordre";s:1:"4";s:5:"titre";s:9:"Critiques";s:7:"largeur";s:1:"0";}s:11:"exemplaires";a:4:{s:3:"aff";s:1:"1";s:5:"ordre";s:1:"1";s:5:"titre";s:11:"Exemplaires";s:7:"largeur";s:1:"0";}s:6:"resume";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:1:"8";s:5:"titre";s:9:"Résumés";s:7:"largeur";s:1:"0";}s:4:"tags";a:4:{s:3:"aff";s:1:"1";s:5:"ordre";s:1:"5";s:5:"titre";s:26:"Rebondir dans le catalogue";s:7:"largeur";s:1:"0";}s:10:"biographie";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"7";s:5:"titre";s:22:"Biographie de l\'auteur";s:7:"largeur";s:1:"0";}s:6:"series";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"6";s:5:"titre";s:28:"Documents de la même série";s:7:"largeur";s:1:"0";}s:10:"similaires";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"3";s:5:"titre";s:20:"Documents similaires";s:7:"largeur";s:1:"0";}s:13:"bibliographie";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"9";s:5:"titre";s:12:"Discographie";s:7:"largeur";s:1:"0";}s:8:"morceaux";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"10";s:5:"titre";s:8:"Morceaux";s:7:"largeur";s:1:"0";}s:12:"bandeAnnonce";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"11";s:5:"titre";s:13:"Bande-annonce";s:7:"largeur";s:1:"0";}s:6:"photos";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"12";s:5:"titre";s:6:"Photos";s:7:"largeur";s:1:"0";}s:6:"videos";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"13";s:5:"titre";s:15:"Archives vidéo";s:7:"largeur";s:1:"0";}s:13:"resnumeriques";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"14";s:5:"titre";s:22:"Ressources numériques";s:7:"largeur";s:1:"0";}s:11:"babeltheque";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"15";s:5:"titre";s:12:"Babelthèque";s:7:"largeur";s:1:"0";}s:4:"frbr";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"16";s:5:"titre";s:14:"Notices liées";s:7:"largeur";s:1:"0";}}s:6:"entete";s:3:"ECN";s:9:"analytics";s:0:"";s:15:"analytics_title";s:0:"";s:17:"analytics_authors";s:0:"";s:5:"boite";s:0:"";}s:12:"viewnotice12";a:6:{s:5:"boite";s:0:"";s:6:"entete";s:3:"ECN";s:9:"analytics";s:0:"";s:15:"analytics_title";s:0:"";s:17:"analytics_authors";s:0:"";s:7:"onglets";a:16:{s:6:"detail";a:4:{s:3:"aff";s:1:"1";s:5:"ordre";s:1:"1";s:5:"titre";s:23:"Description du document";s:7:"largeur";s:1:"0";}s:4:"avis";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:1:"3";s:5:"titre";s:9:"Critiques";s:7:"largeur";s:1:"0";}s:11:"exemplaires";a:4:{s:3:"aff";s:1:"1";s:5:"ordre";s:1:"2";s:5:"titre";s:11:"Exemplaires";s:7:"largeur";s:1:"0";}s:6:"resume";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:1:"4";s:5:"titre";s:9:"Résumés";s:7:"largeur";s:1:"0";}s:4:"tags";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"5";s:5:"titre";s:26:"Rebondir dans le catalogue";s:7:"largeur";s:1:"0";}s:10:"biographie";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"6";s:5:"titre";s:22:"Biographie de l\'auteur";s:7:"largeur";s:1:"0";}s:6:"series";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"8";s:5:"titre";s:28:"Documents de la même série";s:7:"largeur";s:1:"0";}s:10:"similaires";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"7";s:5:"titre";s:20:"Documents similaires";s:7:"largeur";s:1:"0";}s:13:"bibliographie";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:1:"9";s:5:"titre";s:12:"Discographie";s:7:"largeur";s:1:"0";}s:8:"morceaux";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"10";s:5:"titre";s:8:"Morceaux";s:7:"largeur";s:1:"0";}s:12:"bandeAnnonce";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"11";s:5:"titre";s:13:"Bande-annonce";s:7:"largeur";s:1:"0";}s:6:"photos";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:2:"16";s:5:"titre";s:6:"Photos";s:7:"largeur";s:1:"0";}s:6:"videos";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"13";s:5:"titre";s:15:"Archives vidéo";s:7:"largeur";s:1:"0";}s:13:"resnumeriques";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:2:"14";s:5:"titre";s:22:"Ressources numériques";s:7:"largeur";s:1:"0";}s:11:"babeltheque";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"15";s:5:"titre";s:12:"Babelthèque";s:7:"largeur";s:1:"0";}s:4:"frbr";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:2:"12";s:5:"titre";s:14:"Notices liées";s:7:"largeur";s:1:"0";}}}s:11:"viewnotice7";s:0:"";s:7:"avancee";a:4:{s:5:"boite";s:0:"";s:9:"barre_nav";s:18:"Recherche avancée";s:5:"titre";s:18:"Recherche avancée";s:10:"select_bib";s:1:"1";}s:11:"viewnotice5";a:6:{s:5:"boite";s:0:"";s:6:"entete";s:3:"ECN";s:9:"analytics";s:0:"";s:15:"analytics_title";s:0:"";s:17:"analytics_authors";s:0:"";s:7:"onglets";a:16:{s:6:"detail";a:4:{s:3:"aff";s:1:"1";s:5:"ordre";s:1:"1";s:5:"titre";s:23:"Description du document";s:7:"largeur";s:1:"0";}s:4:"avis";a:4:{s:3:"aff";s:1:"1";s:5:"ordre";s:1:"3";s:5:"titre";s:9:"Critiques";s:7:"largeur";s:1:"0";}s:11:"exemplaires";a:4:{s:3:"aff";s:1:"1";s:5:"ordre";s:1:"2";s:5:"titre";s:11:"Exemplaires";s:7:"largeur";s:1:"0";}s:6:"resume";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:1:"4";s:5:"titre";s:9:"Résumés";s:7:"largeur";s:1:"0";}s:4:"tags";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"5";s:5:"titre";s:26:"Rebondir dans le catalogue";s:7:"largeur";s:1:"0";}s:10:"biographie";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:1:"6";s:5:"titre";s:22:"Biographie de l\'auteur";s:7:"largeur";s:1:"0";}s:6:"series";a:4:{s:3:"aff";s:1:"3";s:5:"ordre";s:1:"7";s:5:"titre";s:28:"Documents de la même série";s:7:"largeur";s:1:"0";}s:10:"similaires";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:1:"8";s:5:"titre";s:20:"Documents similaires";s:7:"largeur";s:1:"0";}s:13:"bibliographie";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:1:"9";s:5:"titre";s:12:"Discographie";s:7:"largeur";s:1:"0";}s:8:"morceaux";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:2:"10";s:5:"titre";s:8:"Morceaux";s:7:"largeur";s:1:"0";}s:12:"bandeAnnonce";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"11";s:5:"titre";s:13:"Bande-annonce";s:7:"largeur";s:1:"0";}s:6:"photos";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"12";s:5:"titre";s:6:"Photos";s:7:"largeur";s:1:"0";}s:6:"videos";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"13";s:5:"titre";s:15:"Archives vidéo";s:7:"largeur";s:1:"0";}s:13:"resnumeriques";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:2:"14";s:5:"titre";s:22:"Ressources numériques";s:7:"largeur";s:1:"0";}s:11:"babeltheque";a:4:{s:3:"aff";s:1:"0";s:5:"ordre";s:2:"15";s:5:"titre";s:12:"Babelthèque";s:7:"largeur";s:1:"0";}s:4:"frbr";a:4:{s:3:"aff";s:1:"2";s:5:"ordre";s:2:"16";s:5:"titre";s:14:"Notices liées";s:7:"largeur";s:1:"0";}}}}s:3:"cms";a:2:{s:11:"articleview";a:2:{s:5:"boite";s:0:"";s:9:"barre_nav";s:7:"Article";}s:22:"articleviewpreferences";a:2:{s:5:"boite";s:0:"";s:9:"barre_nav";s:7:"Article";}}s:4:"blog";a:2:{s:12:"lastcritique";a:2:{s:5:"boite";s:0:"";s:9:"barre_nav";s:8:"Critique";}s:13:"viewcritiques";a:2:{s:5:"boite";s:0:"";s:9:"barre_nav";s:8:"Critique";}}}']); + } + + + public function tearDown() { + Storm_Model_Loader::defaultToDb(); + parent::tearDown(); + } + + + /** @test */ + public function viewnoticeTypeSevenPrefShouldNotBeNull() { + $this->assertNotNull($this->profil + ->getCfgModulesPreferences('recherche', 'viewnotice', '7')); + } +} \ No newline at end of file diff --git a/tests/library/Class/StatsNoticesTest.php b/tests/library/Class/StatsNoticesTest.php index fa1e8f908214e39f50a839f67e49eda46b352836..2210403d662d33c6e3f0f87c3704e0e4e62cc8fc 100644 --- a/tests/library/Class/StatsNoticesTest.php +++ b/tests/library/Class/StatsNoticesTest.php @@ -69,17 +69,6 @@ class Class_StatsNoticesTest extends Storm_Test_ModelTestCase { } - /** - * @test - * @see http://forge.afi-sa.fr/issues/23151 - */ - public function notBlackListedShouldNotAddVisuNotice() { - $_SERVER['REMOTE_ADDR'] = '192.168.2.12'; - $this->_model->addStatVisu(12); - $this->assertFalse($this->_sql->methodHasBeenCalled('execute')); - } - - protected function assertNoExecute() { $this->assertFalse($this->_sql->methodHasBeenCalled('execute')); } diff --git a/tests/library/Class/Systeme/PergameServiceTest.php b/tests/library/Class/Systeme/PergameServiceTest.php index f65ad1d8a10c5b3048b45f84112e9e6fa6a46207..3b7a2a061f30010be4ec328edc09109e67e464c6 100644 --- a/tests/library/Class/Systeme/PergameServiceTest.php +++ b/tests/library/Class/Systeme/PergameServiceTest.php @@ -20,14 +20,12 @@ */ abstract class PergameServiceTestCase extends ModelTestCase { - protected $pergame, $mock_sql, $old_sql, $time_source; + protected $pergame, $mock_sql, $time_source; public function setUp() { parent::setUp(); $this->mock_sql = Storm_Test_ObjectWrapper::mock(); - - $this->old_sql = Zend_Registry::get('sql'); Zend_Registry::set('sql', $this->mock_sql); $user = $this->fixture('Class_Users', ['id' => 3, @@ -40,12 +38,6 @@ abstract class PergameServiceTestCase extends ModelTestCase { $this->time_source = new PergameServiceTestingTimeSource(); Class_Systeme_PergameService::setTimeSource($this->time_source); } - - - public function tearDown() { - Zend_Registry::set('sql', $this->old_sql); - parent::tearDown(); - } } @@ -117,6 +109,16 @@ class PergameServiceRegleReservationTest extends PergameServiceTestCase { public function setUp() { parent::setUp(); + Class_Reservation::setTimeSource(new TimeSourceForTest('2015-20-05 12:30:00')); + + $user = $this->fixture('Class_Users', ['id' => 3, + 'login' => 'gaz', + 'password' => 'toto', + 'id_abon' => 'A-01', + 'ordreabon' => 2]); + + $this->pergame = new Class_Systeme_PergameService($user); + $data = 'a:8:{s:26:"Autoriser_docs_disponibles";s:1:"1";s:13:"Max_par_carte";s:1:"3";s:16:"Max_par_document";s:1:"4";s:23:"Autoriser_prolongations";s:0:"";s:24:"Interdire_si_reservation";s:0:"";s:23:"Nombre_max_par_document";s:0:"";s:14:"Duree_en_jours";s:0:"";s:24:"Anteriorite_max_en_jours";s:0:"";}'; $this->mock_sql @@ -192,6 +194,8 @@ class PergameServiceReserverExemplaireValidationsTest extends Storm_Test_ModelTe abstract class PergameServiceReserverExemplaireValidUserTestCase extends Storm_Test_ModelTestCase { public function setUp() { parent::setUp(); + Class_Reservation::beVolatile(); + Class_Reservation::setTimeSource(new TimeSourceForTest('2015-20-05 12:30:00')); $this->user = $this->fixture('Class_Users', [ 'id' => 23, @@ -222,7 +226,7 @@ abstract class PergameServiceReserverExemplaireValidUserTestCase extends Storm_T ]); Class_Transaction::beVolatile(); - Class_Reservation::beVolatile(); + $this->time_source = new PergameServiceTestingTimeSource(); Class_Systeme_PergameService::setTimeSource($this->time_source); @@ -304,7 +308,6 @@ class PergameServiceReserverExemplaireValidUserMaxHoldOnItemTest extends PergameServiceReserverExemplaireValidUserTestCase { public function setUp() { parent::setUp(); - Class_Reservation::beVolatile(); $this->onLoaderOfModel('Class_Reservation') ->whenCalled('countBy') @@ -329,6 +332,9 @@ extends PergameServiceReserverExemplaireValidUserTestCase { public function setUp() { parent::setUp(); + + Class_Reservation::setTimeSource(new TimeSourceForTest('2015-05-20 12:30:00')); + $this->response = (new Class_Systeme_PergameService($this->user)) ->reserverExemplairePergame(0, $this->item, ''); @@ -369,7 +375,7 @@ extends PergameServiceReserverExemplaireValidUserTestCase { /** @test */ public function holdDateShouldBeOk() { - $this->assertEquals('2012-09-23', $this->hold->getDateResa()); + $this->assertEquals('2015-05-20 12:30:00', $this->hold->getDateResa()); } diff --git a/tests/library/Class/WebService/NumilogTest.php b/tests/library/Class/WebService/NumilogTest.php index 97c76f5b45c5d3f37040863f146be3355a8222d7..15df0598301bbc14daeb7d62219ebab4c7ddf979 100644 --- a/tests/library/Class/WebService/NumilogTest.php +++ b/tests/library/Class/WebService/NumilogTest.php @@ -16,52 +16,58 @@ * * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE * along with BOKEH; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ class NumilogTest extends Storm_Test_ModelTestCase{ public function setUp() { parent::setUp(); - Class_AdminVar::newInstanceWithId('NUMILOG_OAI_URL', ['valeur' => 'http://numilog-oai-url']); - + Class_AdminVar::newInstanceWithId('NUMILOG_OAI_URL', ['valeur' => 'http://numilog-oai-url']); + Class_AdminVar::newInstanceWithId('NUMILOG_URL', ['valeur' => 'http://numilog-oai-url']); + Class_AdminVar::newInstanceWithId('NUMILOG_OAI_IDBIB', ['valeur' => '44']); $catalogue_xml = file_get_contents(realpath(dirname(__FILE__)). '/../../../fixtures/numilog_catalogue.xml'); + $catalogue_end_xml = file_get_contents(realpath(dirname(__FILE__)). '/../../../fixtures/numilog_end.xml'); $this->_http_client = Storm_Test_ObjectWrapper::mock(); $this->_http_client ->whenCalled('open_url') -// ->with('http://numilog-oai-url/oai.ashx?verb=ListIdentifiers&metadataPrefix=oai_dc&Set=bib:495') - ->answers($catalogue_xml); - + ->with('http://numilog-oai-url?verb=ListRecords&metadataPrefix=oai_dc&set=bib%3A44') + ->answers($catalogue_xml) + ->whenCalled('open_url') + ->with('http://numilog-oai-url?verb=ListRecords&resumptionToken=769701498%21500%21oai_dc%21bib%3A44%21') + ->answers($catalogue_end_xml) + ->beStrict(); + Class_WebService_BibNumerique_Numilog::setDefaultHttpClient($this->_http_client); Class_WebService_BibNumerique_Vignette::setInstance(Storm_Test_ObjectWrapper::mock() ->whenCalled('updateAlbum') ->answers(true)); - $codif_type_doc=$this->fixture('Class_CodifTypeDoc', + $codif_type_doc=$this->fixture('Class_CodifTypeDoc', ['id' => Class_TypeDoc::NUMILOG, 'famille_id' => Class_CodifTypeDoc::INCONNU, 'bibliotheques' => '1;8', 'annexes' => '10;12', 'sections' => '18;19']); - $this->fixture('Class_TypeDoc', ['id'=>Class_TypeDoc::NUMILOG, + $this->fixture('Class_TypeDoc', ['id'=>Class_TypeDoc::NUMILOG, 'codif_type_doc' => $codif_type_doc, 'label'=> 'Livres Numériques']); Class_Album::beVolatile(); $this->fixture('Class_CodifMatiere', ['id' => '132', - 'libelle'=>'Management']); + 'libelle'=>'Management']); $this->fixture('Class_CodifMatiere', ['id' => '133', - 'libelle'=> 'Métiers et Formations']); + 'libelle'=> 'Métiers et Formations']); $this->fixture('Class_CodifMatiere', ['id' => '134', 'libelle'=>'Psychologie']); - + Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Album') ->whenCalled('deleteBy') ->answers(true); $this->_numilog = new Class_WebService_BibNumerique_Numilog(); - + Class_WebService_BibNumerique_Numilog::setDefaultHttpClient($this->_http_client); $this->_numilog->harvest(''); @@ -73,8 +79,8 @@ class NumilogTest extends Storm_Test_ModelTestCase{ } - /** - * @test + /** + * @test */ public function secondNumilogLivresTitreShouldBeChroniquesDeNewYork() { $this->assertEquals("Chroniques de New York", $this->_second_album->getTitre()); @@ -82,8 +88,8 @@ class NumilogTest extends Storm_Test_ModelTestCase{ /** @test */ - public function numberfLivresShouldBe71OnFirstPage() { - $this->assertEquals(71, count($this->_numilog->loadPage(1)->getRessourcesNumeriques())); + public function numberfLivresShouldBe75OnFirstPage() { + $this->assertEquals(74, count($this->_numilog->loadPage(1)->getRessourcesNumeriques())); } @@ -98,29 +104,23 @@ class NumilogTest extends Storm_Test_ModelTestCase{ $this->assertEquals('http://oai.numilog.com/oai.ashx',$this->_first_album->getUrlOrigine()); } - + /** @test */ public function firstAlbumExternalURIShouldBeSet() { $this->assertEquals('http://www.numilog.com/bibliotheque/BM-Enghien-les-Bains/fiche_livre.asp?idprod=330541',$this->_first_album->getExternalUri()); } - + /** @test */ public function firstAlbumDescriptionShouldBeSet() { + $this->assertEquals("<p align='justify'>Une île privée des Seychelles. Tatiana, « bécasse sentimentale », rencontre Philip, un garçon bien de sa personne ; ils sont beaux, elle est riche, ils s'aiment et décident de se marier. Leur histoire a tout du conte de fées, oui... mais celui-ci est écrit par Saphia Azzeddine, experte en démolitions.<br/>Des plages de sable fin aux coulisses du mariage, de Los Angeles à Paris, et de la meilleure copine à la femme de ménage, chaque personnage prend la parole, comme un chÅ“ur de pleureuses, et décrit ce couple en chemin vers l'autel. Sur la scène mondaine, les acteurs de cet univers d'ultra-riches et d'égoïstes liftés s'affrontent et s'esquivent dans une satire sociale aussi drôle que cruelle.</p>",$this->_first_album->getDescription()); } - + /** @test */ public function thirdAlbumDescriptionShouldBeSet() { - $this->assertEquals("<h4>Stressé, harcelé, \"burnouté\" ? -<br />26 questionnaires pour faire le point</h4> - -<p><strong>Trois salariés français sur quatre se disent stressés. Il est aujourd'hui reconnu que le travail est une source de stress. Mais que désigne le stress exactement ? Pourquoi survient-il ? Quand devient-il nocif ?</strong></p> - -<p>Ce guide dresse un état des lieux du stress au travail : ce qu'il est, ce qu'il n'est pas, ses manifestations, son coût pour l'entreprise, l'individu et la société... Il propose au lecteur un ensemble de questionnaires pour identifier son profil de stressé et l'invite notamment à distinguer le stress professionnel géré sainement de celui qui conduit au <em>burnout</em> ou au harcèlement moral.</p> - -<p>À l'entreprise, il suggère des pistes d'action pour mettre en place des modes d'organisation favorables à la santé physique et mentale des salariés. Au salarié stressé, il prescrit diverses techniques individuelles pour modérer son stress : la relaxation, l'exposition, la restructuration cognitive, etc.</p>",$this->_third_album->getDescription()); + $this->assertContains("<h4>Stressé, harcelé, \"burnouté\" ?",$this->_third_album->getDescription()); } @@ -149,24 +149,24 @@ class NumilogTest extends Storm_Test_ModelTestCase{ public function firstAlbumIdLangueShouldBeFre() { $this->assertEquals('fre',$this->_first_album->getIdLangue()); } - + /** @test */ public function firstAlbumAnneeShouldBe2013 (){ $this->assertEquals('2013',$this->_first_album->getAnnee()); - } + } /** @test */ public function firstAlbumAuteurShouldBeAzzedine (){ $this->assertContains('Saphia Azzeddine', $this->_first_album->getAuthorsNames()); - } + } /** @test */ public function firstAlbumAuteurShouldBeEditeur (){ $this->assertEquals('Grasset', $this->_first_album->getEditeur()); - } + } /** @test */ @@ -180,6 +180,11 @@ class NumilogTest extends Storm_Test_ModelTestCase{ $this->assertEquals('Numilog',$this->_first_album->getCategorie()->getLibelle()); } + /** @test */ + public function lastAlbumShouldBeGuideDeLaMaisonEconome() { + $this->assertEquals('Eyrolles',Class_Album::findFirstBy(['titre' => 'Guide de la maison économe'])->getEditeur()); + } + /** @test */ public function posterShouldBeURIJacketURL(){ diff --git a/tests/library/Class/WebService/SIGB/PergameTest.php b/tests/library/Class/WebService/SIGB/PergameTest.php index 4a76abf48f730aaa30362f5f5ebaae28d9243e48..8bfd7ce03445ea859ed5a52ca3b464b4fe2e4780 100644 --- a/tests/library/Class/WebService/SIGB/PergameTest.php +++ b/tests/library/Class/WebService/SIGB/PergameTest.php @@ -117,14 +117,15 @@ class PergameServiceGetEmprunteurTest extends PergameTestCase { 'idabon' => 23, 'ordreabon' => 2]); - $this->fixture('Class_Reservation', - ['id' => 76, - 'id_notice_origine' => '1HP', - 'id_pergame' => '1HP', - 'date_resa' => '2011-12-25', - 'id_site' => 2, - 'idabon' => 23, - 'ordreabon' => 2]); + $resa1=$this->fixture('Class_Reservation', + ['id' => 76, + 'id_notice_origine' => '1HP', + 'id_pergame' => '1HP', + 'date_resa' => '2011-12-25', + 'id_site' => 2, + 'idabon' => 23, + 'ordreabon' => 2, + 'rang' => 2]); $this->fixture('Class_Reservation', ['id' => 77, @@ -133,13 +134,9 @@ class PergameServiceGetEmprunteurTest extends PergameTestCase { 'date_resa' => '2011-12-25', 'id_site' => 0, 'idabon' => 23, - 'ordreabon' => 2]); + 'ordreabon' => 2, + 'rang' => 1]); - Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Reservation') - ->whenCalled('countBy') - ->with(['ID_NOTICE_ORIGINE' => 1, - 'where' => sprintf('DATE_RESA<"%s"', '2011-12-25')]) - ->answers(2); $jc = $this->fixture('Class_Users', ['id' => 23, @@ -221,8 +218,8 @@ class PergameServiceGetEmprunteurTest extends PergameTestCase { /** @test */ - public function firstReservationRangShouldBeThree() { - $this->assertEquals(3, $this->_first_reservation->getRang()); + public function firstReservationRangShouldBeTwo() { + $this->assertEquals(2, $this->_first_reservation->getRang()); } diff --git a/tests/library/ZendAfi/View/Helper/Accueil/KiosqueTest.php b/tests/library/ZendAfi/View/Helper/Accueil/KiosqueTest.php index d3bd2a613e3ae31824d3d31af6e7d0af840de5c1..8145cac406c76248143370e62e2ba618f8ff62df 100644 --- a/tests/library/ZendAfi/View/Helper/Accueil/KiosqueTest.php +++ b/tests/library/ZendAfi/View/Helper/Accueil/KiosqueTest.php @@ -20,7 +20,7 @@ */ -abstract class ZendAfi_View_Helper_Accueil_KiosqueTestCase extends ViewHelperTestCase { + abstract class ZendAfi_View_Helper_Accueil_KiosqueTestCase extends ViewHelperTestCase { protected $_html; public function setUp() { @@ -31,30 +31,28 @@ abstract class ZendAfi_View_Helper_Accueil_KiosqueTestCase extends ViewHelperTes Zend_Registry::set('sql', $this->mock_sql); defineConstant("PATH_SKIN", "./public/opac/skins/original/"); + $this->_helper = new ZendAfi_View_Helper_Accueil_Kiosque(3, $this->getPreferences()); $this->_helper->setView(new ZendAfi_Controller_Action_Helper_View()); - $this->_notices = [$this->fixture('Class_Notice', - ['id' => 2, - 'unimarc' => "00627nam0 22002291 450 00100080000001000180000802100070002610000410003310100130007410500390008720000690012621000360019521500290023122500230026067600060028368600100028970000290029983000270032883500060035593000140036193200220037500028922 a2-07-052818-9 aFR a20010130 d 0frea01 ba1 afreceng 1[2001-01-30-00.00.00.000000][][][]1 aHarry Potter et le prisonnier d'AzkabanfJoanne Kathleen Rowling aPariscGallimard jeunessed2000 a465 p.3465cill.d18 cm 2aFolio juniorv1006 10 aR ROW1 aRowlingbJoanne Kathleen 1A32A partir de 10 ans aJ aRomans4R aSorcier-Sorcière", - 'url_vignette' => 'hp.png', - 'url_image' => 'hp_big.png', - 'facettes' => 'D123 A400 Y2', - 'clef_oeuvre' => 'HPELPA', - 'clef_alpha' => 'POTTER', - 'exemplaires' => []]), - - $this->fixture('Class_Notice', - ['id' => 45, - 'unimarc' => "01328ngm0 2200265 450 0010007000001000041000071010013000481020007000611150025000682000071000932100022001642150053001863000035002393000045002743300454003193450027007735100018008006060027008186060039008457000042008847020043009267020033009697020032010028010028010342247456 a20021213i20041975u y0frey0103 ba0 abamjfre aFR ac086baz|zba zz c1 aLa jeune fillebDVDdDen MusofSouleymane Cisse, réal., scénario cPathédcop. 2004 a1 DVD vidéo monoface zone 2 (1 h 26 min)ccoul. aDate de sortie du film : 1975. aFilm en bambara sous-titré en français aSékou est renvoyé de l'usine parce qu'il a osé demander une augmentation. Chômeur, il sort avec Ténin, une jeune fille muette ; il ignore qu'elle est la fille de son ancien patron. Ténin, qui sera violée par Sékou lors d'une sortie entre jeunes, se retrouve enceinte et subit la colère de ses parents. Elle se trouve alors confrontée brutalement à la morale de sa famille et à la lâcheté de Sékou, qui refuse de reconnaiîre l'enfant. b3388334509824d14.00 ?1 aDen Musozbam| 31070135aCinémayMali| 32243367aCinéma30076549yAfrique 131070144aCissébSouleymane43704690 132247457aCoulibalibDounamba Dani4590 132247458aDiabatebFanta4590 132247459aDiarrabOumou4590 0aFRbBNc20011120gAFNOR", - 'url_vignette' => 'jeune_fille.png', - 'url_image' => 'jeune_fille_big.png', - 'facettes' => 'D13 A10 Y1', - 'clef_oeuvre' => 'JF', - 'clef_alpha' => 'JF', - 'exemplaires' => []]) - + $this->_notices = [$this->fixture('Class_Notice' , ['id' => 2, + 'unimarc' => "00627nam0 22002291 450 00100080000001000180000802100070002610000410003310100130007410500390008720000690012621000360019521500290023122500230026067600060028368600100028970000290029983000270032883500060035593000140036193200220037500028922 a2-07-052818-9 aFR a20010130 d 0frea01 ba1 afreceng 1[2001-01-30-00.00.00.000000][][][]1 aHarry Potter et le prisonnier d'AzkabanfJoanne Kathleen Rowling aPariscGallimard jeunessed2000 a465 p.3465cill.d18 cm 2aFolio juniorv1006 10 aR ROW1 aRowlingbJoanne Kathleen 1A32A partir de 10 ans aJ aRomans4R aSorcier-Sorcière", + 'url_vignette' => 'hp.png', + 'url_image' => 'hp_big.png', + 'facettes' => 'D123 A400 Y2', + 'clef_oeuvre' => 'HPELPA', + 'clef_alpha' => 'POTTER', + 'exemplaires' => []]), + + $this->fixture('Class_Notice' , ['id' => 45, + 'unimarc' => "01328ngm0 2200265 450 0010007000001000041000071010013000481020007000611150025000682000071000932100022001642150053001863000035002393000045002743300454003193450027007735100018008006060027008186060039008457000042008847020043009267020033009697020032010028010028010342247456 a20021213i20041975u y0frey0103 ba0 abamjfre aFR ac086baz|zba zz c1 aLa jeune fillebDVDdDen MusofSouleymane Cisse, réal., scénario cPathédcop. 2004 a1 DVD vidéo monoface zone 2 (1 h 26 min)ccoul. aDate de sortie du film : 1975. aFilm en bambara sous-titré en français aSékou est renvoyé de l'usine parce qu'il a osé demander une augmentation. Chômeur, il sort avec Ténin, une jeune fille muette ; il ignore qu'elle est la fille de son ancien patron. Ténin, qui sera violée par Sékou lors d'une sortie entre jeunes, se retrouve enceinte et subit la colère de ses parents. Elle se trouve alors confrontée brutalement à la morale de sa famille et à la lâcheté de Sékou, qui refuse de reconnaiîre l'enfant. b3388334509824d14.00 ?1 aDen Musozbam| 31070135aCinémayMali| 32243367aCinéma30076549yAfrique 131070144aCissébSouleymane43704690 132247457aCoulibalibDounamba Dani4590 132247458aDiabatebFanta4590 132247459aDiarrabOumou4590 0aFRbBNc20011120gAFNOR", + 'url_vignette' => 'jeune_fille.png', + 'url_image' => 'jeune_fille_big.png', + 'facettes' => 'D13 A10 Y1', + 'clef_oeuvre' => 'JF', + 'clef_alpha' => 'JF', + 'exemplaires' => []]), ]; } @@ -120,7 +118,9 @@ class ZendAfi_View_Helper_Accueil_KiosqueMurWithCatalogueTest extends ZendAfi_Vi class ZendAfi_View_Helper_Accueil_KiosqueVignettesWithCatalogueTest extends ZendAfi_View_Helper_Accueil_KiosqueMurTestCase { public function getExtraPreferences() { return ['id_catalogue' => 12, - 'style_liste' => 'vignettes']; + 'style_liste' => 'vignettes', + 'nb_notices' => 1 + ]; } @@ -138,6 +138,8 @@ class ZendAfi_View_Helper_Accueil_KiosqueVignettesWithCatalogueTest extends Zend '//div[@class="vignette_img"]//a[contains(@href, "recherche/viewnotice/clef/POTTER/id/2/tri/1/id_catalogue/12")]//img', $this->_html); } + + } @@ -151,11 +153,14 @@ class ZendAfi_View_Helper_Accueil_KiosqueCubeAsRedacteurWithCatalogueTest extend ->beModoBib()); - Class_Catalogue::newInstanceWithId(12, - ['libelle' => 'Classique', - 'domaine_parent' => Class_Catalogue::newInstanceWithId(89, - ['libelle' => 'Musique'])]); + $this->mock_sql + ->whenCalled('query') + ->answers(null); + $this->fixture('Class_Catalogue',['id'=> 12, + 'libelle' => 'Classique', + 'domaine_parent' => $this->fixture('Class_Catalogue',['id' => 89, + 'libelle' => 'Musique'])]); $this->_html = $this->_helper->getBoite(); } @@ -240,17 +245,23 @@ abstract class ZendAfi_View_Helper_Accueil_KiosqueRequetesTestCase extends ZendA public function setUp() { parent::setUp(); - $this->panier_livres = Class_PanierNotice::newInstanceWithId(43, ['libelle' => 'Livres', - 'date_maj' => '10/10/2013']) - ->addNotice($this->_notices[0]); + $this->panier_livres = $this->fixture('Class_PanierNotice', + ['id' => 43, + 'libelle' => 'Livres', + 'date_maj' => '10/10/2013']) + ->addNotice($this->_notices[0]); - $this->panier_films = Class_PanierNotice::newInstanceWithId(44, ['libelle' => 'Films', - 'date_maj' => '09/10/2013']) - ->addNotice($this->_notices[1]); + $this->panier_films = $this->fixture('Class_PanierNotice', + ['id' => 44, + 'libelle' => 'Films', + 'date_maj' => '09/10/2013']) + ->addNotice($this->_notices[1]); - $this->panier_musique = Class_PanierNotice::newInstanceWithId(45, ['libelle' => 'Musique']) - ->addNotice(Class_Notice::newInstanceWithId(96, ['titre_principal' => 'Bitches Brew', - 'clef_alpha' => 'BB'])); + $this->panier_musique = $this->fixture('Class_PanierNotice', + ['id' => 45, 'libelle' => 'Musique']) + ->addNotice($this->fixture('Class_Notice', ['id' => 96, + 'titre_principal' => 'Bitches Brew', + 'clef_alpha' => 'BB'])); $this->mock_sql ->whenCalled('fetchOne') @@ -258,10 +269,11 @@ abstract class ZendAfi_View_Helper_Accueil_KiosqueRequetesTestCase extends ZendA ->answers(10) ->whenCalled('fetchAllByColumn') - ->with("select notices.id_notice from notices where notices.clef_alpha in('BB') and url_vignette > '' and url_vignette != 'NO' order by date_creation DESC ") + ->with("select notices.id_notice from notices where notices.clef_alpha in('BB') and url_vignette > '' and url_vignette != 'NO' order by date_creation DESC LIMIT 0,50") ->answers([2, 45]) ->beStrict(); + Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Notice') ->whenCalled('findAllBy') ->with(['id_notice' => [2, 45], @@ -291,9 +303,9 @@ class ZendAfi_View_Helper_Accueil_KiosqueRequetesAsRedacteurTest extends ZendAfi public function setUp() { parent::setUp(); - Storm_Test_ObjectWrapper::onLoaderOfModel('Class_PanierNotice') - ->whenCalled('findAllBy') - ->answers([$this->panier_films, $this->panier_livres]); +// Storm_Test_ObjectWrapper::onLoaderOfModel('Class_PanierNotice') +// ->whenCalled('findAllBy') +// ->answers([$this->panier_films, $this->panier_livres]); $redacteur = Class_Users::newInstanceWithId(54) ->beModoBib() @@ -365,35 +377,35 @@ class ZendAfi_View_Helper_Accueil_KiosqueChangeSelectRequetesTest extends ZendAf public function setup() { parent::setup(); - $panier_du_kiosque = Class_PanierNotice::newInstanceWithId(15, ['libelle' => 'J\'étais là avant !', + $panier_du_kiosque = $this->fixture('Class_PanierNotice',['id'=>15, 'libelle' => 'J\'étais là avant !', 'date_maj' => '4/09/2013']); - $series = Class_PanierNotice::newInstanceWithId(789, ['libelle' => 'Series', + $series = $this->fixture('Class_PanierNotice',['id'=>789, 'libelle' => 'Series', 'date_maj' => '11/10/2013']); - $photos = Class_PanierNotice::newInstanceWithId(456, ['libelle' => 'Photos', + $photos = $this->fixture('Class_PanierNotice',['id'=>456, 'libelle' => 'Photos', 'date_maj' => '11/10/2013']); - $custom_roms = Class_PanierNotice::newInstanceWithId(123, ['libelle' => 'Custom Roms', + $custom_roms = $this->fixture('Class_PanierNotice',['id'=>123, 'libelle' => 'Custom Roms', 'date_maj' => '11/10/2013']); - $custom_kernels = Class_PanierNotice::newInstanceWithId(147, ['libelle' => 'Custom Kernels', + $custom_kernels = $this->fixture('Class_PanierNotice',['id'=>147, 'libelle' => 'Custom Kernels', 'date_maj' => '11/10/2013']); - $mes_livres = Class_PanierNotice::newInstanceWithId(48, ['libelle' => 'Mes livres', + $mes_livres = $this->fixture('Class_PanierNotice',['id'=>48, 'libelle' => 'Mes livres', 'date_maj' => '11/10/2013']); - $mes_musiques = Class_PanierNotice::newInstanceWithId(78, ['libelle' => 'Mes musiques', + $mes_musiques = $this->fixture('Class_PanierNotice',['id'=>78, 'libelle' => 'Mes musiques', 'date_maj' => '10/10/2013']); - $mes_bd = Class_PanierNotice::newInstanceWithId(47, ['libelle' => 'Mes BD', + $mes_bd = $this->fixture('Class_PanierNotice',['id'=>47, 'libelle' => 'Mes BD', 'date_maj' => '09/10/2013']); - $mes_partitions = Class_PanierNotice::newInstanceWithId(65, ['libelle' => 'Mes partitions', + $mes_partitions = $this->fixture('Class_PanierNotice',['id'=>65, 'libelle' => 'Mes partitions', 'date_maj' => '08/10/2013']); - $mes_jeux = Class_PanierNotice::newInstanceWithId(18, ['libelle' => 'Mes jeux', + $mes_jeux = $this->fixture('Class_PanierNotice',['id'=>18, 'libelle' => 'Mes jeux', 'date_maj' => '07/10/2013']); - $mes_recettes = Class_PanierNotice::newInstanceWithId(178, ['libelle' => 'Mes recettes', + $mes_recettes = $this->fixture('Class_PanierNotice',['id'=>178, 'libelle' => 'Mes recettes', 'date_maj' => '06/10/2013']); $redacteur = Class_Users::newInstanceWithId(54) @@ -405,16 +417,18 @@ class ZendAfi_View_Helper_Accueil_KiosqueChangeSelectRequetesTest extends ZendAf $mes_jeux, $mes_bd]); - $domaine_printemps = Class_Catalogue::newInstanceWithId(1338, ['libelle' => 'Catalogue pour le printemps']); + $this->mock_sql->whenCalled('query')->answers(null); - $domaine_ete = Class_Catalogue::newInstanceWithId(1339, ['libelle' => 'Catalogue pour l\'été']); + $domaine_printemps = $this->fixture('Class_Catalogue',['id' => 1338, 'libelle' => 'Catalogue pour le printemps']); - $domaine_automne = Class_Catalogue::newInstanceWithId(1340, ['libelle' => 'Catalogue pour l\'automne']); + $domaine_ete = $this->fixture('Class_Catalogue',['id' => 1339, 'libelle' => 'Catalogue pour l\'été']); - $domaine_hiver = Class_Catalogue::newInstanceWithId(1341, ['libelle' => 'Catalogue pour l\'hiver']); + $domaine_automne = $this->fixture('Class_Catalogue',['id' => 1340, 'libelle' => 'Catalogue pour l\'automne']); - $catalogue_saison = Class_Catalogue::newInstanceWithId(1337, - ['libelle' => 'Catalogue pour chaque saison']) + $domaine_hiver = $this->fixture('Class_Catalogue',['id' => 1341, 'libelle' => 'Catalogue pour l\'hiver']); + + $catalogue_saison = $this->fixture('Class_Catalogue',['id' => 1337, + 'libelle' => 'Catalogue pour chaque saison']) ->setSousDomaines([$domaine_printemps, $domaine_ete, $domaine_automne, @@ -424,34 +438,15 @@ class ZendAfi_View_Helper_Accueil_KiosqueChangeSelectRequetesTest extends ZendAf $custom_roms, $custom_kernels]); - + $catalogue_saison->save(); ZendAfi_Auth::getInstance()->logUser($redacteur); - Storm_Test_ObjectWrapper::onLoaderOfModel('Class_PanierNotice') - ->whenCalled('findAllBy') - ->with(['id_user' => 54, - 'order' => 'date_maj DESC', - 'limit' => 5]) - ->answers(array_slice($redacteur->getPaniers(),0,5,true)) - - ->whenCalled('findAllBy') - ->answers($catalogue_saison->getPanierNotices()) - - ->whenCalled('find') - ->with(15) - ->answers($panier_du_kiosque) - - ->beStrict(); - Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Catalogue') ->whenCalled('findWithSamePathAs') - ->answers($catalogue_saison) + ->answers($catalogue_saison); - ->whenCalled('findAllBy') - ->answers($catalogue_saison->getSousDomaines()) - ; $this->_html = $this->_helper->getChangeKiosqueData(); } @@ -498,19 +493,10 @@ class ZendAfi_View_Helper_Accueil_KiosqueTitle extends ViewHelperTestCase { -class ZendAfi_View_Helper_Accueil_KiosqueProfileRedirectTest extends ZendAfi_View_Helper_Accueil_KiosqueTestCase { +class ZendAfi_View_Helper_Accueil_KiosqueProfileRedirectTest extends ViewHelperTestCase { public function setUp() { parent::setUp(); - $this->mock_sql - ->whenCalled('fetchOne') - ->with("select count(*) from notices Where url_vignette > '' and url_vignette != 'NO'") - ->answers(2) - - ->whenCalled('fetchAllByColumn') - ->with("select notices.id_notice from notices Where url_vignette > '' and url_vignette != 'NO' order by date_creation DESC LIMIT 5000") - ->answers([2, 45]) - - ->beStrict(); + defineConstant("PATH_SKIN", "./public/opac/skins/original/"); } diff --git a/tests/library/ZendAfi/View/Helper/Notice/ExemplairesTest.php b/tests/library/ZendAfi/View/Helper/Notice/ExemplairesTest.php index 8259b96c9fda4659b696886c0d2cf7b82264d813..fd9b2bc3b7e68d8b15ec54ae7f2991ad21a3a308 100644 --- a/tests/library/ZendAfi/View/Helper/Notice/ExemplairesTest.php +++ b/tests/library/ZendAfi/View/Helper/Notice/ExemplairesTest.php @@ -59,6 +59,7 @@ class NoticeHtmlGetExemplairesWithOneExemplaireNoWebServiceTest extends ZendAfi_ 'cote' => 'DSEM', 'dispo' => "Disponible", 'code_barres' => "12345"]), + $this->fixture('Class_Exemplaire', ['id' => 11, 'id_bib' => -1, @@ -67,8 +68,20 @@ class NoticeHtmlGetExemplairesWithOneExemplaireNoWebServiceTest extends ZendAfi_ 'annexe' => 'MOUL', 'cote' => 'DSEM', 'dispo' => "Disponible", - 'code_barres' => "12346"]) + 'code_barres' => "12346"]), + + $this->fixture('Class_Exemplaire', + ['id' => 12, + 'id_bib' => -1, + 'id_int_bib' => 0, + 'id_notice' => '24766', + 'annexe' => 'UPEC', + 'cote' => '', + 'dispo' => '', + 'code_barres' => '12347', + 'url' => 'http://www.sudoc.fr/05884144X']) ]; + $this->html = $this->_helper->Notice_Exemplaires($exemplaires, 2); } @@ -92,6 +105,14 @@ class NoticeHtmlGetExemplairesWithOneExemplaireNoWebServiceTest extends ZendAfi_ } + /** @test */ + public function thirdItemAvailabilityShouldDisplayLinkToSudoc() { + $this->assertXPathContentContains($this->html, + '//td/a[@href="http://www.sudoc.fr/05884144X"]', + 'Description en ligne'); + } + + /** @test */ public function reservationLinkShouldBeRechercheReservation() { $this->assertXPath( diff --git a/tests/library/ZendAfi/View/Helper/RenderLieuTest.php b/tests/library/ZendAfi/View/Helper/RenderLieuTest.php index ec9f3e4cab6bfe4d1ca6dfd93d6a4ffde2d364f9..fe51545ec39726c3613815024163a5e7dc510284 100644 --- a/tests/library/ZendAfi/View/Helper/RenderLieuTest.php +++ b/tests/library/ZendAfi/View/Helper/RenderLieuTest.php @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE * along with BOKEH; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ class ZendAfi_View_Helper_RenderLieuTest extends ViewHelperTestCase { @@ -35,6 +35,26 @@ class ZendAfi_View_Helper_RenderLieuTest extends ViewHelperTestCase { public function withLieuNullShouldRenderEmptyString() { $this->assertEquals('', $this->_helper->renderLieu(null)); } + + /** @test */ + public function withLieuShouldRenderEmail() { + $this->assertContains('toto@example.com', $this->_helper->renderLieu($this->fixture( + 'Class_Lieu', + ['id' => 4, + 'libelle' => 'Mon lieu', + 'mail' => 'toto@example.com']))); + } + + /** @test */ + public function withLieuShouldRenderPhoneNumber() { + $this->assertContains('010203040506', $this->_helper->renderLieu($this->fixture( + 'Class_Lieu', + ['id' => 4, + 'libelle' => 'Mon lieu', + 'telephone' => '010203040506']))); + } + + }