diff --git a/INSTALL.en.md b/INSTALL.en.md index c040accb5ce8c3f219d4bc9fbfab1249295a5d15..edb4925f31ed7598c5f154f8af649df3b7ee7521 100644 --- a/INSTALL.en.md +++ b/INSTALL.en.md @@ -66,6 +66,9 @@ Modify /etc/httpd/conf/http.conf and add the line: LoadModule php5_module modules/libphp5.so ``` +Activate mod_mpm_prefork (see https://wiki.archlinux.org/index.php/Apache_HTTP_Server#PHP). + + Deactivate negotiation module which is in conflict with Zend Framework on index/index urls: ``` @@ -86,6 +89,8 @@ Activate the following extensions if they are not already actived (they should b php5enmod calendar curl gd gettext iconv mcrypt mysql pdo_mysql openssl soap imagick ``` +On Archinux uncomment the corresponding lines. + ## Configure Apache In Apache conf, delete indexes option (file list) and authorise .htaccess: @@ -117,7 +122,14 @@ chmod -R 777 opacce/temp ``` # MySQL config - + +## Finalise the installation (ArchLinux) + +See https://wiki.archlinux.org/index.php/MySQL#Installation + + +# Configuration + Edit /etc/mysql/my.cnf and add to the [mysqld] section the following line (in order to force fulltext indexation from the first letter) ``` diff --git a/INSTALL.fr.md b/INSTALL.fr.md index 49b163deefc3ccfb7789347bd4f10790f3b7bb26..f53c07dd14a862338067297d1cbb1668b1908e09 100644 --- a/INSTALL.fr.md +++ b/INSTALL.fr.md @@ -15,7 +15,7 @@ apt-get install php5 php5-gd php5-imagick php5-xdebug php-pear php5-mysql graphv ## ArchLinux ``` -yaourt -S php php-gd php-imagick xdebug php-pear apache mysql php-apache php-xhprof graphviz git +yaourt -S php php-gd php-imagick xdebug php-pear apache mariadb php-apache php-xhprof graphviz git php-mcrypt binutils automake autoconf gcc make fakeroot ``` ## CentOS @@ -24,7 +24,7 @@ rpm -Uvh http://repo.webtatic.com/yum/el6/latest.rpm yum install php54w php54w-gd php54w-pear php54w-mysql php54w-pecl-xdebug php54w-xml php54w-soap php54w-mbstring ``` -You need to build Imagick extension from scratch +Il est nécessaire de compiler Imagick extension à partir des sources. # Installer PHPUnit (en compte root / sudo): @@ -66,6 +66,9 @@ Modifiez /etc/httpd/conf/http.conf et ajoutez la ligne: LoadModule php5_module modules/libphp5.so ``` +Activer mod_mpm_prefork (voir https://wiki.archlinux.org/index.php/Apache_HTTP_Server#PHP). + + Désactivez le module negotiation qui pose problème avec Zend Framework sur les urls index/index: ``` @@ -86,6 +89,8 @@ Activez les extensions suivantes si elles ne le sont pas déjà (elles devraient php5enmod calendar curl gd gettext iconv mcrypt mysql pdo_mysql openssl soap imagick ``` +Sur ArchLinux décommenter les lignes correspondantes. + ## Configurer Apache Dans la conf Apache (/etc/apache2/sites-available/votre-site.conf), supprimer l'option Indexes (listing des fichiers) et autoriser les .htaccess: @@ -115,9 +120,16 @@ Note: pour apache 2.4 ``` chmod -R 777 opacce/temp ``` - + # Configuration MySQL +## Finaliser l'installation (ArchLinux) + +Voir https://wiki.archlinux.org/index.php/MySQL#Installation + + +## Configuration + Modifier /etc/mysql/my.cnf pour forcer l'indexation fulltext à partir de 1 lettre : ajouter dans la section [mysqld] : ``` diff --git a/VERSIONS b/VERSIONS index b334bdd929510471b4bd91a0ec3c085dc89159a8..bdeb4b2e47f391e77a32366a23995693ff61bcce 100644 --- a/VERSIONS +++ b/VERSIONS @@ -1,8 +1,41 @@ +22/09/2015 - v7.3.12 + + - ticket #29622 : Correction compatibilité explorateur de fichier / hébergement mutualisé sans sous-répertoire + + - ticket #29633 : Correction de la validation des emails avant envoi des lettres d'information pour les emails finissant en .ch + + - ticket #29412 : correction du vignettage des articles dans le résultat de recherche. + + - ticket #29371 : Admin Bokeh : lien N° de version pointe vers le fichier stable ou master + + - ticket #29345 : Correction d'un blocage possible de l'envoi des lettres d'information lorsqu'une erreur survient à la validation d'un mail + + - ticket #29226 : Correction de dédoublonnage Karvi + + - ticket #29758 : correction de la boite calendrier en mode responsive + + - ticket #29825 : suppression des facettes thesaurus erronnées dans le phase "clean" de l'intégration des notices + + +17/09/2015 - v7.3.11 + + - ticket #29441 : newsletter qui ne part pas + + - ticket #29689 : Correction d'une erreur à l'intégration des articles de dépouillement dans cosmogramme + + - ticket #28958 : Le lien pour ouvrir la ressource 1dtouch devrait ouvrir un nouvel onglet + + - ticket #26993 : PB Affichage incorrect dans Bokeh des notices de dépouillement + + - ticket #29472 : L'Identification des usagers de type abonnés SIGB provenant de la base Koha de la BDM aboutit à une page blanche + + 15/09/2015 - v7.3.10 - correction compatibilité PHP 5.4 + 14/09/2015 - v7.3.9 - sandbox : ajout de l'icône type doc sur les vignettes des avis diff --git a/VERSIONS_WIP/21441 b/VERSIONS_WIP/21441 new file mode 100644 index 0000000000000000000000000000000000000000..ba39aec731a9a21274c74fc1c3a7de41d70ba006 --- /dev/null +++ b/VERSIONS_WIP/21441 @@ -0,0 +1 @@ + - ticket #21441 : Créer des facettes à partir des champs personnalisés \ No newline at end of file diff --git a/VERSIONS_WIP/25584 b/VERSIONS_WIP/25584 new file mode 100644 index 0000000000000000000000000000000000000000..9fb2a817ea427e38f2bd8cfafc7e5c794a0ca4e1 --- /dev/null +++ b/VERSIONS_WIP/25584 @@ -0,0 +1 @@ + - ticket #25584 : Ajout de formulaires qui s'envoient par mail \ No newline at end of file diff --git a/application/modules/admin/controllers/CmsController.php b/application/modules/admin/controllers/CmsController.php index 0fd612d0efa6d9d623ea5f1fa203e5a9341a6de4..66d2bcc98328ce489415244c46aa825d4eac5c5a 100644 --- a/application/modules/admin/controllers/CmsController.php +++ b/application/modules/admin/controllers/CmsController.php @@ -48,6 +48,8 @@ class Admin_CmsController extends ZendAfi_Controller_Action { protected function _postEditAction($article) { $article->index(); + if($record = $article->getNotice()) + (new Class_WebService_Vignette())->updateUrlsFromCacheServer($record); } diff --git a/application/modules/admin/controllers/CustomFieldsMetaController.php b/application/modules/admin/controllers/CustomFieldsMetaController.php index bb40a95e5da14b85a0c4e0bf2da43a4df3da3ed3..0408445d8941ce96db40fff1c6385031d1d3d161 100644 --- a/application/modules/admin/controllers/CustomFieldsMetaController.php +++ b/application/modules/admin/controllers/CustomFieldsMetaController.php @@ -34,8 +34,7 @@ class Admin_CustomFieldsMetaController extends ZendAfi_Controller_Action { 'edit' => ['title' => $this->_('Modifier un champ personnalisé')], 'index' => ['title' => $this->_('Champs personnalisés')]], - 'form_class_name' => 'ZendAfi_Form_Admin_CustomFields_CustomFieldMeta']; + 'form_class_name' => 'ZendAfi_Form_Admin_CustomFields']; } - } ?> \ No newline at end of file diff --git a/application/modules/admin/views/scripts/custom-fields-meta/index.phtml b/application/modules/admin/views/scripts/custom-fields-meta/index.phtml index 4bd5eb058b98f1a881c6afb74253e9be66f85725..5aacf9a6523c3a5b44091babdd7d7fd42362be62 100644 --- a/application/modules/admin/views/scripts/custom-fields-meta/index.phtml +++ b/application/modules/admin/views/scripts/custom-fields-meta/index.phtml @@ -13,14 +13,27 @@ echo $this->bouton('id=add_meta', 'largeur=250px;' ); -echo $this->tagModelTable($this->custom_fields_metas, - - [$this->_('Libellé'), $this->_('Type')], +$indexable_renderer = function($model, $attrib) { + return $model->getIndexable() ? + $this->tagImg(URL_ADMIN_IMG . '/ico/coche_verte.gif', ['alt' => $this->_('Oui')]): + $this->tagImg(URL_ADMIN_IMG . '/ico/del.gif', ['alt' => $this->_('Non')]); +}; - ['label', 'field_type_label'], +echo $this + ->tagModelTable($this->custom_fields_metas, - [ ['action' => 'edit', 'content' => $this->boutonIco('type=edit')], - ['action' => 'delete', 'content' => $this->boutonIco('type=del')] ], + [$this->_('Libellé'), + $this->_('Type'), + $this->_('Indexable ?')], - 'custom-fields-meta'); -?> + ['label', + 'field_type_label', + 'indexable'], + + [ ['action' => 'edit', 'content' => $this->boutonIco('type=edit')], + ['action' => 'delete', 'content' => $this->boutonIco('type=del')] ], + + 'custom-fields-meta', + null, + + ['indexable' => $indexable_renderer]); diff --git a/application/modules/admin/views/scripts/head.phtml b/application/modules/admin/views/scripts/head.phtml index 7dc7a91b5a1a24abf89f2f7134c9c5583b403b06..d4be8a72cd1d7fb5efb35574dbc53e42ea06f9cf 100644 --- a/application/modules/admin/views/scripts/head.phtml +++ b/application/modules/admin/views/scripts/head.phtml @@ -23,6 +23,7 @@ ->loadPrettyPhoto(); $script_loader = Class_ScriptLoader::getInstance(); + $script_loader->addJQueryReady('setupAnchorsTarget();'); $head_scripts->renderStyleSheets(); $script_loader->renderStyleSheets(); diff --git a/application/modules/admin/views/scripts/index/index.phtml b/application/modules/admin/views/scripts/index/index.phtml index 4846df71ac9e134520e6052a9b2adfd9327736c5..4ed4d8fa28aa3d11df8d7f631d38597a8928e828 100644 --- a/application/modules/admin/views/scripts/index/index.phtml +++ b/application/modules/admin/views/scripts/index/index.phtml @@ -1,6 +1,9 @@ -<h2><?php echo $this->traduire('Version');?> : -<a href='http://git.afi-sa.fr/afi/opacce/blob/master/VERSIONS'><?php echo BOKEH_RELEASE_NUMBER ?></a> - </h2> +<?php +echo $this->tag('h2', + $this->_('Version') . ' : ' . $this->tag('a', + BOKEH_RELEASE_NUMBER, + ['href' => BOKEH_REMOTE_FILES . 'blob/' . BOKEH_VERSION . '/VERSIONS'])); +?> <h2><?php echo $this->traduire('Paramètres du site');?> :</h2> diff --git a/application/modules/admin/views/scripts/modules/recherche_resultat.phtml b/application/modules/admin/views/scripts/modules/recherche_resultat.phtml index 714e21e5aa575cf14c389b09ccef8b419d8aa41e..47c319ed000c021f7af4ea420f3684d915ce2455 100644 --- a/application/modules/admin/views/scripts/modules/recherche_resultat.phtml +++ b/application/modules/admin/views/scripts/modules/recherche_resultat.phtml @@ -1,23 +1,17 @@ -<?php -echo '<script src="'.URL_ADMIN_JS.'drag_and_drop.js'.'" type="text/javascript"> </script>'; -echo '<script src="'.URL_ADMIN_JS.'selection_champs.js'.'" type="text/javascript"> </script>'; -echo '<link rel="stylesheet" type="text/css" media="screen" href="'.URL_ADMIN_CSS.'drag_and_drop.css" />'; -echo $this->tagSelectionChamps("libelles"); - -?> <center> - <h1>Propriétés de la liste : <?php echo $this->titre ?></h1> + <h1><?php echo $this->_('Propriétés de la liste : %s', $this->titre); ?></h1> <div class="formTable"> - <?php if($this->erreur) echo '<p class="erreur">'.$this->erreur.'</p>'; - $form = + <?php + if ($this->erreur) + echo $this->tag('p', $this->erreur, ['class' => 'erreur']); + + $form = ZendAfi_Form_Configuration_SearchResult::newConfigurationWith( Class_Profil::getCurrentProfil()->getConfigurationOf('recherche', 'resultat', 'simple')); $form->setAction($this->url()); - $form->isValid($this->preferences -); - echo $this->renderForm($form); - ?> + $form->isValid($this->preferences); + echo $this->renderForm($form);?> </div> </center> diff --git a/application/modules/admin/views/scripts/modules/recherche_viewnotice.phtml b/application/modules/admin/views/scripts/modules/recherche_viewnotice.phtml index c831e8b8685853502eef65bf3b9f7815760ac3f3..8d52df50aaedad4cd9a9bbe55afd5dd225e57f7a 100644 --- a/application/modules/admin/views/scripts/modules/recherche_viewnotice.phtml +++ b/application/modules/admin/views/scripts/modules/recherche_viewnotice.phtml @@ -1,14 +1,10 @@ -<script src="<?php echo URL_ADMIN_JS;?>drag_and_drop.js" type="text/javascript"></script> -<script src="<?php echo URL_ADMIN_JS;?>selection_champs.js" type="text/javascript"></script> -<link rel="stylesheet" type="text/css" media="screen" href="<?php echo URL_ADMIN_CSS;?>drag_and_drop.css" /> - <?php $codif = Class_Codification::getInstance(); -echo $this->tagSelectionChamps('libelles').NL; ?> <center> - <h1><?php echo $this->_('Propriétés d\'affichage des notices');?><br> + <h1> + <?php echo $this->_('Propriétés d\'affichage des notices');?><br> <?php echo $this->_('Type de document : %s', $codif->getLibelleFacette('T' . $this->type_doc));?> </h1> @@ -29,12 +25,15 @@ echo $this->tagSelectionChamps('libelles').NL; <?php foreach($this->preferences['onglets'] as $clef => $valeurs) { $nom_onglet = $codif->getNomOnglet($clef); - if(!$valeurs['titre']) + if (!$valeurs['titre']) $valeurs['titre'] = $nom_onglet; $input = function($name, $size) use ($clef, $valeurs) { - return sprintf('<input type="text" name="%s" size="%s" value="%s">', - $clef . '_' . $name, $size, $valeurs[$name]); + return $this->tag('input', null, + ['type' => 'text', + 'name' => $clef . '_' . $name, + 'size' => $size, + 'value' => $valeurs[$name]]); }; ?> <tr> @@ -59,12 +58,8 @@ echo $this->tagSelectionChamps('libelles').NL; <table cellspacing="2"> <tr> <td class="droite" valign="top"><?php echo $this->_('Champs à afficher');?> </td> - <?php - $data = $this->tagSelectionChamps('champs', - $this->preferences['entete']); - echo $data['codes_dispo'];?> <td class="gauche"> - <?php echo $data['liste_codes'] . $data['champ_libelle'] . $data['bloc_saisie'];?> + <?php echo $this->tagSelectionChamps('champs', $this->preferences['entete']);?> </td> </tr> </table> diff --git a/application/modules/admin/views/scripts/modules/search-result.phtml b/application/modules/admin/views/scripts/modules/search-result.phtml index 17f03c9ba8fe80831d8ca283673d0a9807839718..15472500c4ec3a9e34e43dbf89ad0f99fc412172 100644 --- a/application/modules/admin/views/scripts/modules/search-result.phtml +++ b/application/modules/admin/views/scripts/modules/search-result.phtml @@ -1,13 +1,6 @@ -<?php -echo '<script src="'.URL_ADMIN_JS.'drag_and_drop.js'.'" type="text/javascript"> </script>'; -echo '<script src="'.URL_ADMIN_JS.'selection_champs.js'.'" type="text/javascript"> </script>'; -echo '<link rel="stylesheet" type="text/css" media="screen" href="'.URL_ADMIN_CSS.'drag_and_drop.css" />'; -echo $this->tagSelectionChamps("libelles"); - -?> <center> - <h1>Propriétés de la liste : <?php echo $this->titre ?></h1> + <h1><?php echo $this->_('Propriétés de la liste : %s', $this->titre); ?></h1> <div class="formTable"> - <?php echo $this->renderForm($this->form); ?> + <?php echo $this->renderForm($this->form); ?> </div> </center> diff --git a/application/modules/opac/controllers/FormulaireController.php b/application/modules/opac/controllers/FormulaireController.php index 1ec97963448bb61a8d2a2b18b73ece46b49c5e91..e6ced064ebbd47db10fa1595e95b3264b12e0f7d 100644 --- a/application/modules/opac/controllers/FormulaireController.php +++ b/application/modules/opac/controllers/FormulaireController.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 FormulaireController extends ZendAfi_Controller_Action { public function addAction() { @@ -30,8 +30,36 @@ class FormulaireController extends ZendAfi_Controller_Action { $this->view->datas = $formulaire->getDatas(); $this->view->article = $article; + + if ($address = $article->getDestinationEmail()) { + $this->_sendFormEmail($address, $formulaire->dataAsBodyText()); + $this->view->email_sent = true; + } + } + + protected function _sendFormEmail($address, $body) { + $mail = new ZendAfi_Mail('utf8'); + $mail->setFrom(Class_Profil::getCurrentProfil()->getMailSiteOrPortail()) + ->addTo($address) + ->setSubject('[Bokeh] ' . $this->_('Envoi d\'un formulaire')) + ->setBodyText($body); + + $this->_sendMail($mail); + return $this; } + protected function _sendMail($mail) { + try { + $mail->send(); + return true; + + } catch (Exception $e) { + $this->_helper->notify($this->_('Mail non envoyé: vérifier la configuration du serveur de mail.')); + return false; + } + } + + } ?> \ No newline at end of file diff --git a/application/modules/opac/controllers/NoticeajaxController.php b/application/modules/opac/controllers/NoticeajaxController.php index 8b7b20fad1b858fb2d7a0256cd5168bc996f317a..910806f7f3d69a54719255e576b448eca259578c 100644 --- a/application/modules/opac/controllers/NoticeajaxController.php +++ b/application/modules/opac/controllers/NoticeajaxController.php @@ -82,8 +82,7 @@ class NoticeAjaxController extends Zend_Controller_Action { $tags=$this->notice->getTags($this->id_notice); $html=$this->notice_html->getTags($tags, $this->id_notice, $this->view); - $this->getResponse()->setHeader('Content-Type', 'text/html;charset=utf-8'); - $this->getResponse()->setBody($html . Class_ScriptLoader::getInstance()->html()); + $this->_sendResponseWithScripts($html); } @@ -165,7 +164,7 @@ class NoticeAjaxController extends Zend_Controller_Action { $data = Class_Localisation::getLocFromExemplaire($bib,$cote,$code_barres); // Retour - $ret =json_encode($data); + $ret = json_encode($data); $this->_sendResponse($ret); } @@ -177,24 +176,24 @@ class NoticeAjaxController extends Zend_Controller_Action { } if ('' != ($html = $this->view->Notice_Analytics($notice))) { - $this->_sendResponse($html); + $this->_sendResponseWithScripts($html); return; } if ($notice->isPeriodique()) { $periodiques = $this->notice->getArticlesPeriodique($this->id_notice); - $this->_sendResponse($this->notice_html->getArticlesPeriodique($periodiques)); + $this->_sendResponseWithScripts($this->notice_html->getArticlesPeriodique($periodiques)); return; } - $this->_sendResponse($this->view->notice_Entete($notice, ['entete' => Class_Codification::CHAMPS])); + $this->_sendResponseWithScripts($this->view->notice_Entete($notice, ['entete' => Class_Codification::CHAMPS])); } public function similairesAction() { $notices = $this->notice->getNoticesSimilaires(); $html = $this->notice_html->getListeNotices($notices, $this->view); - $this->_sendResponse($html); + $this->_sendResponseWithScripts($html); } @@ -202,23 +201,15 @@ class NoticeAjaxController extends Zend_Controller_Action { $this->notice = Class_Notice::find($this->id_notice); $notices=$this->notice->getNoticesMemeSeries(); $html = $this->notice_html->getListeNotices($notices, $this->view); - $this->_sendResponse($html); + $this->_sendResponseWithScripts($html); } -/* public function auteurAction() { - $this->notice = Class_Notice::find($this->id_notice); - $notices = $this->notice->getNoticesMemeAuteur(); - $html = $this->notice_html->getListeNotices($notices, $this->view); - $this->_sendResponse($html); - }*/ - - public function resumeAction() { session_write_close(); $avis = $this->notice->findAllResumes(); $html=$this->notice_html->getResume($avis); - $this->_sendResponse($html); + $this->_sendResponseWithScripts($html); } @@ -226,18 +217,18 @@ class NoticeAjaxController extends Zend_Controller_Action { session_write_close(); if (!$resume = $this->notice->getResume()) $resume = $this->_('Aucun résumé'); - $this->_sendResponse($resume); + $this->_sendResponseWithScripts($resume); } public function dispoNoticeAction() { session_write_close(); - $this->_sendResponse($this->notice->hasExemplaireDisponible() ? 'true' : 'false'); + $this->_sendResponseWithScripts($this->notice->hasExemplaireDisponible() ? 'true' : 'false'); } public function biographieAction() { session_write_close(); - $this->_sendResponse($this->view->biographie($this->notice)); + $this->_sendResponseWithScripts($this->view->biographie($this->notice)); } @@ -259,7 +250,7 @@ class NoticeAjaxController extends Zend_Controller_Action { $html=$this->notice_html->getBandeAnnonce($source,$bo); } else $html= $html=$this->notice_html->getNonTrouve($this->view->_("Service non disponible"),true); - $this->_sendResponse($html); + $this->_sendResponseWithScripts($html); } @@ -272,7 +263,7 @@ class NoticeAjaxController extends Zend_Controller_Action { : []; $html = $this->notice_html->getPhotos($photos); - $this->_sendResponse($html); + $this->_sendResponseWithScripts($html); } @@ -285,7 +276,7 @@ class NoticeAjaxController extends Zend_Controller_Action { : []; $html = $this->notice_html->getBibliographie($biblio, $notice["A"]); - $this->_sendResponse($html); + $this->_sendResponseWithScripts($html); } @@ -311,7 +302,8 @@ class NoticeAjaxController extends Zend_Controller_Action { $html = sprintf('<p>%s</p>', $this->view->_('Aucune ressource correspondante')); $html = $add_album_tag . $html; - $this->_sendResponse($html . Class_ScriptLoader::getInstance()->html()); + + $this->_sendResponseWithScripts($html); } @@ -344,7 +336,7 @@ class NoticeAjaxController extends Zend_Controller_Action { if (!$morceaux["nb_resultats"]) $source=""; $morceaux["auteur"] = $notice->getAuteurPrincipal(); $html=$this->notice_html->getMorceaux($morceaux,$source); - $this->_sendResponse(Class_ScriptLoader::getInstance()->html().$html); + $this->_sendResponseWithScripts($html); } public function videomorceauAction() { @@ -364,14 +356,14 @@ class NoticeAjaxController extends Zend_Controller_Action { } else $html= $html=$this->notice_html->getNonTrouve($this->view->_("Service non disponible"),true); - $this->_sendResponse($html); + $this->_sendResponseWithScripts($html); } public function playerlastfmAction() { $lastfm=new Class_WebService_Lastfm(); $html=$lastfm->getPlayer($_REQUEST["url"]); - $this->_sendResponse($html); + $this->_sendResponseWithScripts($html); } @@ -382,7 +374,7 @@ class NoticeAjaxController extends Zend_Controller_Action { if ($num_video = $this->_getParam("num_video", 0)) { $num_video = $num_video-1; $html.=$_SESSION["video_interview"][$num_video]["player"]; - $this->_sendResponse('<style>*{margin:0;padding:0}</style>'.$html); + $this->_sendResponseWithScripts('<style>*{margin:0;padding:0}</style>'.$html); return; } @@ -390,7 +382,7 @@ class NoticeAjaxController extends Zend_Controller_Action { $notice=$this->notice->getNotice("JA"); if(!trim($notice["A"])) { $html=$this->notice_html->getNonTrouve($this->view->_("Cette notice n'a pas d'auteur."),true); - $this->_sendResponse($html); + $this->_sendResponseWithScripts($html); return; } @@ -405,26 +397,26 @@ class NoticeAjaxController extends Zend_Controller_Action { $videos = $data["videos"]; $_SESSION["video_interview"]=$videos; $html=$this->notice_html->getInterviews($source, $videos, $width, $height); - $this->_sendResponse($html); + $this->_sendResponseWithScripts($html); return; } $html = $this->notice_html->getNonTrouve($this->view->_("Service non disponible"),true); - $this->_sendResponse($html); + $this->_sendResponseWithScripts($html); } public function avisAction() { session_write_close(); // Lire la notice - if (!$notice = Class_Notice::getLoader()->find($this->id_notice)) { + if (!$notice = Class_Notice::find($this->id_notice)) { $this->_sendResponse(''); return; } $all_avis = $notice->getAllAvisPerSource($this->_getParam("page", 0)); - $this->_sendResponse($this->view->Notice_Avis($notice,$all_avis, $this->_request->getParams())); + $this->_sendResponseWithScripts($this->view->Notice_Avis($notice,$all_avis, $this->_request->getParams())); } @@ -443,11 +435,12 @@ class NoticeAjaxController extends Zend_Controller_Action { $notice = Class_Notice::getLoader()->find($this->id_notice); $html = $this->view->getHelper('Avis')->getAvisPopup($notice, $notice->getAvisAbonne()); - $this->_sendResponse(Class_ScriptLoader::getInstance() - ->addOPACStyleSheet('global') - ->addSkinStyleSheet('global') - ->html() - .$html); + + Class_ScriptLoader::getInstance() + ->addOPACStyleSheet('global') + ->addSkinStyleSheet('global'); + + $this->_sendResponseWithScripts($html); } @@ -455,11 +448,11 @@ class NoticeAjaxController extends Zend_Controller_Action { session_write_close(); $notice = Class_Notice::getLoader()->find($this->id_notice); $html = $this->view->getHelper('Avis')->getAvisPopup($notice, $notice->getAvisBibliothecaire()); - $this->_sendResponse(Class_ScriptLoader::getInstance() - ->addOPACStyleSheet('global') - ->addSkinStyleSheet('global') - ->html() - .$html); + + Class_ScriptLoader::getInstance() + ->addOPACStyleSheet('global') + ->addSkinStyleSheet('global'); + $this->_sendResponseWithScripts($html); } @@ -477,7 +470,7 @@ class NoticeAjaxController extends Zend_Controller_Action { foreach($blocs as $bloc) $html .= sprintf('<div id="BW_%s"></div>', $bloc); - $this->_sendResponse($html); + $this->_sendResponseWithScripts($html); } @@ -528,7 +521,7 @@ class NoticeAjaxController extends Zend_Controller_Action { $this->view->url(['controller' => 'noticeajax', 'action' => 'cvs-search'])); $html .= '</div>'; - $this->_sendResponse($html); + $this->_sendResponseWithScripts($html); } @@ -543,12 +536,21 @@ class NoticeAjaxController extends Zend_Controller_Action { return; } - $this->_sendResponse($this->view->frbr($model)); + $this->_sendResponseWithScripts($this->view->frbr($model)); + } + + + protected function _sendResponseWithScripts($html) { + Class_ScriptLoader::getInstance() + ->addAdminScript('onload_utils') + ->addJQueryReady('setupAnchorsTarget();'); + + $this->_sendResponse(Class_ScriptLoader::getInstance()->html() . $html); } - protected function _sendResponse($html) { + protected function _sendResponse($data) { $this->getResponse()->setHeader('Content-Type', 'text/html;charset=utf-8'); - $this->getResponse()->setBody($html); + $this->getResponse()->setBody($data); } } diff --git a/application/modules/opac/views/scripts/formulaire/add.phtml b/application/modules/opac/views/scripts/formulaire/add.phtml index 0f524caa04bc6470daf775eea2116125a3c87890..92741cd730e721fbeb4204560b58570aed4611f4 100644 --- a/application/modules/opac/views/scripts/formulaire/add.phtml +++ b/application/modules/opac/views/scripts/formulaire/add.phtml @@ -10,6 +10,10 @@ foreach ($this->datas as $key => $value) echo '</ul>'; +if ($this->email_sent == true) { + echo $this->_('Un courriel a été envoyé.'); +} + echo $this->closeBoite(); ?> diff --git a/ckeditor/core_five_filemanager/connectors/php/filemanager.php b/ckeditor/core_five_filemanager/connectors/php/filemanager.php index 482c7ca1a7291fd715cd69129990f8e2716bd2d8..b0084555db47f7c60c501197ac2dd439d3105100 100644 --- a/ckeditor/core_five_filemanager/connectors/php/filemanager.php +++ b/ckeditor/core_five_filemanager/connectors/php/filemanager.php @@ -23,19 +23,15 @@ header('Content-type: application/json'); * @author Patrick Barroca * @param string $path */ -function opacTraversalProtect ($path) { - $path = (string)$path; - $parts = explode('/', $path); - array_shift($parts); - if (2 > count($parts)) { - exit(); - } - if ('userfiles' != $parts[1]) { - exit(); - } - if (in_array('..', $parts)) { - exit(); - } +function opacTraversalProtect($path) { + $path = (string)$path; + $parts = explode('/', $path); + array_shift($parts); + + if (in_array('..', $parts) + || 2 > count($parts) + || !in_array('userfiles', $parts)) + exit(); } @@ -64,7 +60,7 @@ if(!isset($_GET)) { } else { if(isset($_GET['mode']) && $_GET['mode']!='') { switch($_GET['mode']) { - + default: opacTraversalProtect($_GET['path']); $fm->error($fm->lang('MODE_ERROR')); @@ -78,7 +74,7 @@ if(!isset($_GET)) { break; case 'getfolder': - opacTraversalProtect($_GET['path']); + opacTraversalProtect($_GET['path']); if($fm->getvar('path')) { $response = $fm->getfolder(); } @@ -121,12 +117,12 @@ if(!isset($_GET)) { } else if(isset($_POST['mode']) && $_POST['mode']!='') { switch($_POST['mode']) { - + default: $fm->error($fm->lang('MODE_ERROR')); break; - + case 'add': if($fm->postvar('currentpath')) { opacTraversalProtect($_POST['currentpath']); diff --git a/cosmogramme/php/_init.php b/cosmogramme/php/_init.php index 4eae961811709376e71a8e060e1e3599df9eac50..2d7987f87753a8a5a3d44597e81a240ce59a93c7 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","267"); +define("PATCH_LEVEL","268"); define("APPLI","cosmogramme"); define("COSMOPATH", "/var/www/html/vhosts/opac2/www/htdocs"); @@ -73,4 +73,4 @@ if (!session_id()) if (isset($_REQUEST["action"]) && $_REQUEST['action'] == "logout") unset($_SESSION["passe"]); if (!isset($_SESSION["passe"])) include("_identification.php"); -?> \ No newline at end of file +?> diff --git a/cosmogramme/php/classes/classe_notice_integration.php b/cosmogramme/php/classes/classe_notice_integration.php index 50db23218933302cc565b939f81a42f60b5e7e6b..aed9609ac8f23eca8c6488e3ad81815859f09875 100644 --- a/cosmogramme/php/classes/classe_notice_integration.php +++ b/cosmogramme/php/classes/classe_notice_integration.php @@ -919,8 +919,6 @@ class notice_integration { // Ecrit une notice : article de périodique // -------------------------------------------------------------------------------- private function ecrireArticlePeriodique() { - global $sql; - if( 1 == $this->notice["statut"]) return $this->deleteRecordArticles(); @@ -980,6 +978,8 @@ class notice_integration { protected function deleteRecordArticles() { + global $sql; + $this->statut = self::RECORD_DELETE; if($this->notice["clef_unimarc"]) @@ -988,9 +988,9 @@ class notice_integration { $controle = $sql->execute("delete from notices_articles where clef_chapeau='$clef_chapeau' and clef_numero='$clef_numero' and clef_article='$clef_article'" ); if(!$controle) { - $this->statut = 0; - $this->erreur = "notice à supprimer non reconnue"; - } + $this->statut = 0; + $this->erreur = "notice à supprimer non reconnue"; + } } diff --git a/cosmogramme/sql/patch/patch_265.php b/cosmogramme/sql/patch/patch_265.php index 79af65cba287f5bd2463c72980718b705250bb91..f77c8e09eb4ec4d3506ad3e0090f65787d3bdb8c 100644 --- a/cosmogramme/sql/patch/patch_265.php +++ b/cosmogramme/sql/patch/patch_265.php @@ -11,4 +11,4 @@ foreach([['table' => 'album', 'id' => 'notice_id'], $adapter->query(sprintf('UPDATE `%s` SET `%s`=null WHERE `%s`=0', $params['table'], $params['id'], $params['id'])); -} \ No newline at end of file +} diff --git a/cosmogramme/sql/patch/patch_267.php b/cosmogramme/sql/patch/patch_267.php index d2d1d008cf3be5a9c5932ac3a81035623e9fd91e..d46e3ad56c003f7be0000240a6154dd94fb91c79 100644 --- a/cosmogramme/sql/patch/patch_267.php +++ b/cosmogramme/sql/patch/patch_267.php @@ -2,15 +2,9 @@ $adapter = Zend_Db_Table::getDefaultAdapter(); try { - $adapter->query('select type from modele_fusion limit 1'); + $adapter->query('select destination_email from cms_article limit 1;'); } catch (Exception $e) { - $adapter->query('alter table modele_fusion add column type varchar(255) NULL'); + $adapter->query('alter table cms_article add column destination_email varchar(255);'); } -try { - $adapter->query('select profil_ids from modele_fusion limit 1'); -} catch (Exception $e) { - $adapter->query("alter table modele_fusion add column profil_ids varchar(255) NULL default ''"); -} - ?> diff --git a/cosmogramme/sql/patch/patch_268.php b/cosmogramme/sql/patch/patch_268.php new file mode 100644 index 0000000000000000000000000000000000000000..86a3375b7e993e0f51bc22a4a8323d28048a0f61 --- /dev/null +++ b/cosmogramme/sql/patch/patch_268.php @@ -0,0 +1,14 @@ +<?php +$adapter = Zend_Db_Table::getDefaultAdapter(); + +try { + $adapter->query('select type from modele_fusion limit 1'); +} catch (Exception $e) { + $adapter->query('alter table modele_fusion add column type varchar(255) NULL'); +} +try { + $adapter->query('select profil_ids from modele_fusion limit 1'); +} catch (Exception $e) { + $adapter->query("alter table modele_fusion add column profil_ids varchar(255) NULL default ''"); +} +?> diff --git a/cosmogramme/tests/php/classes/NanookRecordsIntegrationTest.php b/cosmogramme/tests/php/classes/NanookRecordsIntegrationTest.php index 325a27b8c420da98d5cafdc6f323c5525efaa0e7..e960244e090f0235105c8db837c52c2102239c55 100644 --- a/cosmogramme/tests/php/classes/NanookRecordsIntegrationTest.php +++ b/cosmogramme/tests/php/classes/NanookRecordsIntegrationTest.php @@ -482,3 +482,27 @@ class NanookRecordsIntegrationSerialDroitDeVivreEnFamilleTest extends NanookReco 'clef_unimarc' => $clef_unimarc])); } } + + + +class NanookRecordsIntegrationSerialLiensFamiliauxTest extends NanookRecordsIntegrationTestCase { + public function setUp() { + parent::setUp(); + + $this->fixture('Class_Notice_SerialArticles', + ['id' => 1, + 'clef_chapeau' => 'REVUE QUART MONDE', + 'clef_numero' => '231', + 'clef_article' => 'SORTIR D UNE TRANSMI', + 'clef_unimarc' => '']); + + $this->loadRecordsFromFile("unimarc_liens_familiaux"); + $this->notice = Class_Notice::find(1); + } + + + /** @test */ + public function firstArticleShouldBeOnEstPasDesChiens() { + $this->assertEquals("Revue Quart Monde n° 231<br /> «On n’est pas des chiens !» : Editorial", $this->notice->getArticlesPeriodique()[0]['titre']); + } +} \ No newline at end of file diff --git a/cosmogramme/tests/php/classes/NoticeIntegrationDedupTest.php b/cosmogramme/tests/php/classes/NoticeIntegrationDedupTest.php index e0274469b744326392ff8c3ff9c61f8378176ef6..263b45d1ffed2bb12d69c7412081defd84dde4d3 100644 --- a/cosmogramme/tests/php/classes/NoticeIntegrationDedupTest.php +++ b/cosmogramme/tests/php/classes/NoticeIntegrationDedupTest.php @@ -21,12 +21,14 @@ require_once 'NoticeIntegrationTest.php'; -/** @see http://forge.afi-sa.fr/issues/17196 */ + class NoticeIntegrationDedupWithoutIsbnTest extends NoticeIntegrationTestCase { public function getProfilDonnees() { return Class_IntProfilDonnees::forALOES()->setIdProfil(113) ->getRawAttributes(); } + + public function setUp() { parent::setUp(); $this->fixture('Class_Notice', ['id' => 15824768, @@ -74,3 +76,59 @@ class NoticeIntegrationDedupWithoutIsbnTest extends NoticeIntegrationTestCase { $this->assertEquals(2, Class_Notice::count()); } } + + + +/** @see http://forge.afi-sa.fr/issues/29226 */ +class NoticeIntegrationDedupCaliceWithoutIsbnTest extends NoticeIntegrationTestCase { + public function getProfilDonnees() { + return Class_IntProfilDonnees::forKarvi() + ->setIdProfil(113) + ->getRawAttributes(); + } + + + public function setUp() { + parent::setUp(); + + $this->fixture('Class_Notice', + ['id' => 30, + 'type_doc' => 5, + 'alpha_titre' => 'ACTUALITE DU VIRTUEL', + 'alpha_auteur' => 'FR BNF', + 'titres' => 'ACTUALITE AKTUALIT VIRTUEL', + 'auteurs' => 'BNF', + 'editeur' => '[Centre national d\'art et de culture Georges-Pompidou (Paris)]', + 'isbn' => '', + 'ean' => null, + 'id_commerciale' => '', + 'id_bnf' => '', + 'clef_alpha' => 'ACTUALITEDUVIRTUEL--FRB--CENTRENATIONALDARTETDECULTUREGEORGESPOMPIDOUPARIS-1997-5', + 'clef_oeuvre' => 'ACTUALITEDUVIRTUEL--FRB-', + 'clef_chapeau' => '', + 'qualite' => 10, + 'date_creation' => '2015-05-02 00:00:00', + 'date_maj' => '2015-09-13 13:22:53', + 'url_vignette' => 'NO', + 'url_image' => 'NO']); + + VariableCache::getInstance() + ->setValeurCache(['filtrer_fulltext' => 1, + 'mode_doublon'=> 0, + 'tracer_accents_iso' => 0, + 'non_exportable'=> 'electre;decitre;gam;zebris', + 'controle_codes_barres' => 1, + 'unimarc_zone_titre' => '200$a;461$t', + 'unicite_code_barres' => 0, + 'champs_sup' => '', + 'ean_345' => 1]); + + $this->loadNotice('unimarc_mulhouse_remanence'); + } + + + /** @test */ + public function thereShouldHave2Records() { + $this->assertEquals(2, Class_Notice::count()); + } +} diff --git a/cosmogramme/tests/php/classes/unimarc_liens_familiaux.txt b/cosmogramme/tests/php/classes/unimarc_liens_familiaux.txt new file mode 100644 index 0000000000000000000000000000000000000000..a3480025c722d4d1d7895bd2937eea7b0b10cf70 --- /dev/null +++ b/cosmogramme/tests/php/classes/unimarc_liens_familiaux.txt @@ -0,0 +1 @@ +01172nas2 2200205 450 0010005000001000013000051010008000182000040000262100041000662150017001073300324001244610064004487000020005128010017005329320012005499930014005619950159005759950116007349950116008501165 a20150513 aFRE1 aLiens familiaux : que transmettre ? a[Paris]cÉditions Quart Monded2014 d24 cma64 p. aCellule de base qui permet aux petits d’hommes, quand l’environnement est favorable, de s’enraciner dans un monde de pairs et de se créer une identité personnelle, la famille est dans certains contextes oblitérée par des difficultés qui pèsent très lourdement sur la transmission de valeurs et de repères. c[Paris]nÉditions Quart MondetRevue Quart Mondev2310282 1aATD Quart Monde 2aFrc20150915 aFamille 43aAdulte aATD MontreuilfATD1-01756kPa 2014 231Cm20150915qurpzppocv12[CSP][A consulter sur place][0][0][A consulter sur place][0][0][1][0]42015-07-018193 aATD MontreuilfATD1-01757kPa 2014 231P1m20150915qurpzppopv12[DIS][Disponible][0][1][][0][0][0][0]8193 aATD MontreuilfATD1-01758kPa 2014 231P2m20150915qurpzppopv12[DIS][Disponible][0][1][][0][0][0][0]819300182naa2 2200073 450 00100050000020000470000546100270005270000290007911711 a«On n’est pas des chiens !»eEditorial tRevue Quart Mondev231 1aIsabelle Pypaert Perrin00192naa2 2200073 450 00100050000020000540000546100270005970000320008611701 aLiens familiaux : que transmettre ?eIntroduction tRevue Quart Mondev231 1aMartine Hosselet Herbignat00166naa2 2200073 450 00100050000020000360000546100270004170000240006811731 aUn puits sans fond de questions tRevue Quart Mondev231 1aMaryvonne Caillaux00153naa2 2200073 450 00100050000020000280000546100270003370000190006011771 aLe bon goût du partage tRevue Quart Mondev231 1aClaude Farrer00170naa2 2200073 450 00100050000020000440000546100270004970000200007611791 aSortir d’une transmission paralysante tRevue Quart Mondev231 1aJérémy Ianni00166naa2 2200073 450 00100050000020000410000546100270004670000190007311741 a«Personne n’était avec nous…» tRevue Quart Mondev231 1aIngrid Hutter00255naa2 2200085 450 00100050000020000830000546100270008870000290011593200250014411671 aEnseigner l’art de la différenciation et de la conformité aux enfants roms tRevue Quart Mondev231 1aAlice Sophie Sarcinelli aMigration-Minorités00135naa2 2200073 450 00100050000020000090000546100270001470000200004111681 aErna tRevue Quart Mondev231 1aMieke Van Dyck00214naa2 2200073 450 00100050000020000890000546100270009470000190012111801 aLégitimité de tous les parents pour contribuer à la réussite de tous les enfants tRevue Quart Mondev231 1aBruno Masurel00208naa2 2200073 450 00100050000020000600000546100270006570000420009211761 aFamilles pauvres : soutenir le lien dans la séparation tRevue Quart Mondev231 1aATD Quart Monde, Lst, Pivot Belgique00164naa2 2200073 450 00100050000020000240000546100270002970000340005611721 aAu balcon de la vie tRevue Quart Mondev231 1aMarie-Hélène Dacos Burgues00171naa2 2200073 450 00100050000020000430000546100270004870000220007511751 aL'exil forcé des enfants réunionnais tRevue Quart Mondev231 1aColette Duquesne00169naa2 2200073 450 00100050000020000400000546100270004570000230007211781 aLes liens familiaux, une boussole ? tRevue Quart Mondev231 1aPerrine Levasseur00170naa2 2200073 450 00100050000020000450000546100270005070000190007711661 aLa culture, une arme contre la pauvreté tRevue Quart Mondev231 1aLaurens Umans00167naa2 2200073 450 00100050000020000450000546100270005070000160007711691 aCe que j’ai appris d’ATD Quart Monde tRevue Quart Mondev231 1aS M Miller \ No newline at end of file diff --git a/cosmogramme/tests/php/classes/unimarc_mulhouse_remanence.txt b/cosmogramme/tests/php/classes/unimarc_mulhouse_remanence.txt new file mode 100644 index 0000000000000000000000000000000000000000..bc682c0ced99d7c8e463554f2657d24b5e49d26a --- /dev/null +++ b/cosmogramme/tests/php/classes/unimarc_mulhouse_remanence.txt @@ -0,0 +1 @@ +01265nam 2200277 4500001001200000005001700012010001300029100003500042101000800077102000700085200006000092210002900152215001900181219000900200606005700209606005100266676001100317679000900328700003200337801003000369993001900399995020700418995016900625995016800794999002500962DOC0011089020150907174443.0 d29 Euros a20031209 20 m 0101 aFre aFR aRemanences : Mulhouse au travailbLivrefPierre Dolivet aMulhouse (68)cJDMd2003 a224 p.d30 cm cREM: aClasse ouvrièreyFranceyMulhouse (Haut-Rhin)379180 aIndustrieyFranceyMulhouse (Haut-Rhin)346860 a338.09 aFcM aDolivetbPierre3833864070 aFRbMD68-Colmarc20130827 aremanences.jpg aMD68-ColmarbMD68-ColmarcPFASTATTd68256-1f00100005888712h30588871jakAL 338.09 DOLm20150421n20170421oPqaraztFC79D1FAlsatiquesFAlsatiquesGBH12249819I20040415J29,00L338.09Q7R20150421 aMD68-ColmarbMD68-Colmarf00100005890635h30589063jakAL 338.09 DOLoPqaraztFC79D1FAlsatiquesFAlsatiquesGBH12249820I20040504J29,00L338.09Q17R20150115 aMD68-ColmarbMD68-Colmarf00100005890643h30589064jakAL 338.09 DOLoPqaraztFC79D1FAlsatiquesFAlsatiquesGBH12249821I20040504J29,00L338.09Q3R20111205 zpatchImportOrpheeBdp \ No newline at end of file diff --git a/library/Class/AdminVar.php b/library/Class/AdminVar.php index dbfc7f0e30e1e33a1ae2d7c459dfc25d7604a060..963c5629b7cb8137a9f9ae71e371690a36c16513 100644 --- a/library/Class/AdminVar.php +++ b/library/Class/AdminVar.php @@ -151,7 +151,7 @@ class Class_AdminVarLoader extends Storm_Model_Loader { 'FACETTE_INTERET_LIBELLE' => Class_AdminVar_Meta::newDefault('Libellé de la facette centres d\'intérêt'), 'FACETTE_MATIERE_LIBELLE' => Class_AdminVar_Meta::newDefault('Libellé de la facette matière'), 'FACETTE_TAG_LIBELLE' => Class_AdminVar_Meta::newDefault('Libellé de la facette tag'), - 'UNLEASHED_FACETS' => Class_AdminVar_Meta::newMultiInput($this->_('Liste des codes des facettes qui ne sont pas limitées à l\'affichage dans le résultat de recherche<br/>Exemple : T => Type de doc, Y => Annexe, B => Bibliothèque, ... (Voir <a href="http://git.afi-sa.fr/afi/opacce/blob/master/library/Class/Codification.php#L24">la liste complète</a>)')), + 'UNLEASHED_FACETS' => Class_AdminVar_Meta::newMultiInput($this->_('Liste des codes des facettes qui ne sont pas limitées à l\'affichage dans le résultat de recherche<br/>Exemple : T => Type de doc, Y => Annexe, B => Bibliothèque, ... (Voir <a href="' . BOKEH_REMOTE_FILES . 'blob/' . BOKEH_VERSION . '/library/Class/Codification.php#L24">la liste complète</a>)')), 'AFFICHER_DISPONIBILITE_SUR_RECHERCHE' => Class_AdminVar_Meta::newOnOff($this->_('Activation de la disponibilite dans le resultat de recherche.')), 'NOM_DOMAINE' => Class_AdminVar_Meta::newDefault($this->_('Nom de domaine principal de l\'OPAC, ex: monopac.macommune.fr')), 'DATE_LAST_FULL_INTEGRATION_USERS' => Class_AdminVar_Meta::newDefault($this->_('Date du dernier import total des abonnés (modifié par cosmogramme)')), diff --git a/library/Class/Article.php b/library/Class/Article.php index 0b95f11d77a0e86d280a44ebd1f52a8ea755a698..a6ea95d829edc10f1e990c2598927912c4d443c1 100644 --- a/library/Class/Article.php +++ b/library/Class/Article.php @@ -534,6 +534,7 @@ class Class_Article extends Storm_Model_Abstract { 'domaine_ids' => '', 'id_origine' => 0, 'refus_message' => '', + 'destination_email' => '', 'all_day' => FALSE]; diff --git a/library/Class/CodifThesaurus.php b/library/Class/CodifThesaurus.php index d40e68c3596e89712e96a6f671f0a491296641f6..32a67a0f977c177b8e20b5bd54760eac583d33f6 100644 --- a/library/Class/CodifThesaurus.php +++ b/library/Class/CodifThesaurus.php @@ -21,8 +21,46 @@ class Class_CodifThesaurusLoader extends Storm_Model_Loader { public function findThesaurusForCatalogue($catalogue_id) { - return Class_CodifThesaurus::getLoader()->findFirstBy(['id_origine'=> $catalogue_id, - 'code' => Class_CodifThesaurus::CODE_CATALOGUE]); + return Class_CodifThesaurus::getLoader() + ->findFirstBy(['id_origine'=> $catalogue_id, + 'code' => Class_CodifThesaurus::CODE_CATALOGUE]); + } + + + public function findForCustomField($field) { + return Class_CodifThesaurus::findForCustomFieldMeta($field->getMeta()); + } + + + public function getOrCreateForCustomField($field) { + return Class_CodifThesaurus::getOrCreateForCustomFieldMeta($field->getMeta()); + } + + + public function findForCustomFieldMeta($meta) { + return Class_CodifThesaurus::getLoader() + ->findFirstBy(['id_origine' => $meta->getId(), + 'code' => Class_CodifThesaurus::CODE_CUSTOMFIELDS]); + } + + + public function getOrCreateForCustomFieldMeta($meta) { + return Class_CodifThesaurus::findCustomFieldsRoot() + ->getOrCreateChild($meta->getId(), $meta->getLabel()); + } + + + public function findCustomFieldsRoot() { + if ($root = Class_CodifThesaurus::getLoader() + ->findFirstBy(['id_thesaurus' => Class_CodifThesaurus::ROOT_CUSTOMFIELD_ID])) + return $root; + + $attributes = ['id_thesaurus' => Class_CodifThesaurus::ROOT_CUSTOMFIELD_ID, + 'libelle' => 'Champs personnalisés', + 'code' => Class_CodifThesaurus::CODE_CUSTOMFIELDS]; + $root = Class_CodifThesaurus::newInstance($attributes); + + return $root->save() ? $root : null; } @@ -40,15 +78,14 @@ class Class_CodifThesaurusLoader extends Storm_Model_Loader { public function getLibelleHierarchique($enreg) { if (!$enreg) return ''; - $parent = Class_CodifThesaurus::findParent($enreg->getIdThesaurus()); - if (!$parent) + + if (!$parent = Class_CodifThesaurus::findParent($enreg->getIdThesaurus())) return $enreg->getLibelle(); - if (strlen($parent->getIdThesaurus()) <= 8) { - return $parent->getLibelle().' : '.$enreg->getLibelle(); - } + if (strlen($parent->getIdThesaurus()) <= 8) + return $parent->getLibelle() . ' : ' . $enreg->getLibelle(); - return $this->getLibelleHierarchique($parent).' : '.$enreg->getLibelle(); + return $this->getLibelleHierarchique($parent) . ' : ' . $enreg->getLibelle(); } @@ -74,8 +111,10 @@ class Class_CodifThesaurusLoader extends Storm_Model_Loader { 'order' => 'id_thesaurus desc']); if (!$last_thesaurus) return $parentid_thesaurus.'0001'; + if (strlen($parentid_thesaurus) >=strlen($last_thesaurus->getIdThesaurus())) return $parentid_thesaurus.'0001'; + return $this->incrementId(substr($last_thesaurus->getIdThesaurus(),0, strlen($parentid_thesaurus)+4)) ; } @@ -92,20 +131,24 @@ class Class_CodifThesaurusLoader extends Storm_Model_Loader { $last_thesaurus = Class_CodifThesaurus::findFirstBy(['where' => 'code like "catalogue" and LENGTH(id_thesaurus) in (1,8)', 'order' => 'id_thesaurus desc']); if (!$last_thesaurus) { - return 'CCCC0001'; + return Class_CodifThesaurus::ROOT_DOMAINS_ID . '0001'; } return $this->incrementId($last_thesaurus->getIdThesaurus()); } - public function deleteAllWithIdOrigineAndCode($id_origine,$code_thesaurus) { - if ($thesauri = Class_CodifThesaurus::findAllBy(['id_origine' => $id_origine, - 'code' => $code_thesaurus ])) - foreach ($thesauri as $thesaurus) { - if ($thesaurus->getIdThesaurus()!='') - sqlExecute('delete from codif_thesaurus where id_thesaurus like "'.$thesaurus->getIdThesaurus().'%"'); - } + public function deleteAllWithIdOrigineAndCode($id_origine, $code_thesaurus) { + foreach (Class_CodifThesaurus::findAllBy(['id_origine' => $id_origine, + 'code' => $code_thesaurus ]) + as $thesaurus) + Class_CodifThesaurus::deleteAllFrom($thesaurus); + } + + + public function deleteAllFrom($thesaurus) { + if ($thesaurus && '' != $thesaurus->getIdThesaurus()) + sqlExecute('delete from codif_thesaurus where id_thesaurus like "' . $thesaurus->getIdThesaurus() . '%"'); } @@ -133,29 +176,75 @@ class Class_CodifThesaurusLoader extends Storm_Model_Loader { } - public function getIndices($pere,$with_catalogue_dynamique=false) { + public function getIndices($pere, $with_catalogue_dynamique=false) { if ($pere == "root") { $where=''; - if (!$with_catalogue_dynamique) $where='code not like "catalogue" and'; + if (!$with_catalogue_dynamique) + $where='code not like "catalogue" and'; $where .= ' LENGTH(id_thesaurus) in (1,4)'; + return Class_CodifThesaurus::findAllBy(['where' => $where, 'order' => 'id_thesaurus']); } $pere = $this->getCodeSur4Chiffres($pere); $length = strlen($pere); + return Class_CodifThesaurus::findAllBy(['where' => 'id_thesaurus like "'.$pere.'%" and LENGTH(id_thesaurus) in ('.($length+1).','.($length+4).')', - 'order'=> 'id_thesaurus']); + 'order'=> 'id_thesaurus']); } public function getFacettesIndex() { - $thesauri = Class_CodifThesaurus::getIndices('root',true); - $facettes_index = ''; - foreach ($thesauri as $thesaurus) { - $facettes_index.=$thesaurus->getFacetteIndex(); - } - return $facettes_index; + return array_map(function($item) { return $item->getFacetteIndex(); }, + Class_CodifThesaurus::getFacettesThesauri()); + } + + + public function getFacettesThesauri() { + $filter = function($item) { + return Class_CodifThesaurus::ROOT_CUSTOMFIELD_ID != $item->getIdThesaurus(); + }; + + $thesauri = array_filter(Class_CodifThesaurus::getIndices('root', true), $filter); + + foreach(Class_CodifThesaurus::findCustomFieldsRoot()->getChildren() as $item) + $thesauri[] = $item; + + return $thesauri; + } + + + public function findChildrenOf($parent) { + if (!$parent || !$id_thesaurus = $parent->getIdThesaurus()) + return []; + + $where = sprintf('id_thesaurus like "%s%%" and LENGTH(id_thesaurus) = %s', + $id_thesaurus, strlen($id_thesaurus) + 4); + + return Class_CodifThesaurus::findAllBy(['where' => $where, + 'order' => 'libelle']); + } + + + public function getFacetGroup($facet) { + return substr($facet, 0, $this->isCustomFieldsFacet($facet) ? 9 : 5); + } + + + protected function isCustomFieldsFacet($facet) { + return $this->startsWith($facet, $this->getCustomFieldsFacetPrefix()); + } + + + protected function startsWith($value, $prefix) { + return $prefix == substr($value, 0, strlen($prefix)); + } + + + protected function getCustomFieldsFacetPrefix() { + return Class_CodifThesaurus::CODE_FACETTE + . Class_CodifThesaurus::ROOT_CUSTOMFIELD_ID; } } @@ -163,11 +252,16 @@ class Class_CodifThesaurusLoader extends Storm_Model_Loader { class Class_CodifThesaurus extends Storm_Model_Abstract { + use Trait_Translator; + const COLUMN_ORIGIN_SIZE = 20, CODE_FACETTE = 'H', CODE_CATALOGUE = 'Catalogue', + ROOT_DOMAINS_ID = 'CCCC', + CODE_CUSTOMFIELDS = 'Custom fields', + ROOT_CUSTOMFIELD_ID = 'CFCF', MODE_HIERARCHY_CONTAINS = 1, MODE_LABEL_STARTS_WITH = 2, @@ -181,26 +275,26 @@ class Class_CodifThesaurus extends Storm_Model_Abstract { 'id_thesaurus' =>null, 'rules' => null]; - public function getListeSuggestion($recherche,$mode,$limite_resultat,$theme) { - + public function getListeSuggestion($recherche, $mode, $limite_resultat, $theme) { switch ((int) $mode) { - case self::MODE_HIERARCHY_CONTAINS: - if (strlen($recherche)<3) - return []; - $req = "select distinct(id),id_thesaurus,id_origine from codif_thesaurus where id_thesaurus regexp (select group_concat(concat(id_thesaurus,'.*') separator '|') from codif_thesaurus where id_thesaurus like '".$theme."%' and id_origine is not null and libelle like '%".$recherche."%') order by id_thesaurus"; - break; + case self::MODE_HIERARCHY_CONTAINS: + if (strlen($recherche) < 3) + return []; - case self::MODE_LABEL_STARTS_WITH: - $req="select id,id_thesaurus,libelle,id_origine from codif_thesaurus where id_thesaurus like '".$theme."%' and libelle like'".addslashes($recherche)."%' order by id_thesaurus limit ".$limite_resultat; - break; + $req = "select distinct(id),id_thesaurus,id_origine from codif_thesaurus where id_thesaurus regexp (select group_concat(concat(id_thesaurus,'.*') separator '|') from codif_thesaurus where id_thesaurus like '".$theme."%' and id_origine is not null and libelle like '%".$recherche."%') order by id_thesaurus"; + break; - case self::MODE_LABEL_CONTAINS: - $req="select id,libelle,id_origine from codif_thesaurus where id_thesaurus like '".$theme."%' and libelle like'%".addslashes($recherche)."%' order by id_thesaurus limit ".$limite_resultat; - break; + case self::MODE_LABEL_STARTS_WITH: + $req="select id,id_thesaurus,libelle,id_origine from codif_thesaurus where id_thesaurus like '".$theme."%' and libelle like'".addslashes($recherche)."%' order by id_thesaurus limit ".$limite_resultat; + break; - case self::MODE_INDEX_STARTS_WITH: - $req="select id,id_thesaurus,libelle,id_origine from codif_thesaurus where id_thesaurus like '".$theme."%' and id_origine like '".$recherche."%' order by id_thesaurus limit ".$limite_resultat; - break; + case self::MODE_LABEL_CONTAINS: + $req="select id,libelle,id_origine from codif_thesaurus where id_thesaurus like '".$theme."%' and libelle like'%".addslashes($recherche)."%' order by id_thesaurus limit ".$limite_resultat; + break; + + case self::MODE_INDEX_STARTS_WITH: + $req="select id,id_thesaurus,libelle,id_origine from codif_thesaurus where id_thesaurus like '".$theme."%' and id_origine like '".$recherche."%' order by id_thesaurus limit ".$limite_resultat; + break; } $resultat=fetchAll($req); @@ -215,20 +309,18 @@ class Class_CodifThesaurus extends Storm_Model_Abstract { $enreg["id_origine"]." : ".$libelle]; } - return $liste; } public function getLibelleFacette() { - if ($this->_get('libelle_facette') && $this->_get('libelle_facette')!='') - return $this->_get('libelle_facette'); - return $this->getLibelle(); + return $this->_get('libelle_facette') && $this->_get('libelle_facette') != '' ? + $this->_get('libelle_facette') : $this->getLibelle(); } public function getFacetteIndex() { - return self::CODE_FACETTE.$this->getIdThesaurus(); + return self::CODE_FACETTE . $this->getIdThesaurus(); } @@ -243,15 +335,21 @@ class Class_CodifThesaurus extends Storm_Model_Abstract { public function getOrCreateChild($id_origine, $label) { - if (!$entry = $this->getLoader() - ->findFirstBy(['code' => $this->getCode(), - 'id_origine' => mb_substr($id_origine, 0, self::COLUMN_ORIGIN_SIZE, 'UTF-8')])) { - $entry = $this - ->newChildEntry() - ->updateAttributes(['id_origine' => $id_origine, + $entry = $this->getLoader() + ->findFirstBy(['code' => $this->getCode(), + 'id_origine' => mb_substr($id_origine, + 0, + self::COLUMN_ORIGIN_SIZE, + 'UTF-8')]); + if ($entry) + return $entry; + + $entry = $this + ->newChildEntry() + ->updateAttributes(['id_origine' => $id_origine, 'libelle' => $label]); - $entry->save(); - } + $entry->save(); + return $entry; } @@ -263,22 +361,31 @@ class Class_CodifThesaurus extends Storm_Model_Abstract { trim($subfield)); } + public function getRulesLabel() { return json_decode($this->getRules())->label; - } + public function validate() { - $this->check('' != $this->getLibelle(), 'Vous devez définir le libellé'); + $this->check('' != $this->getLibelle(), $this->_('Vous devez définir le libellé')); if (!$this->getRules()) return true; - $this->check('' != $this->getRules(), 'Vous devez définir au moins une règle'); + $this->check('' != $this->getRules(), $this->_('Vous devez définir au moins une règle')); $regles = str_replace(' ', '', $this->getRulesLabel()); $this->check(preg_match('/^[0-9]{1,3}\$[a-z0-9]$/', $regles), - 'La règle n\'est pas de la forme 686$a'); + $this->_('La règle n\'est pas de la forme 686$a')); + } + + public function deleteMeAndMyChildren() { + $this->getLoader()->deleteAllFrom($this); + return $this; } -} -?> \ No newline at end of file + + public function getChildren() { + return $this->getLoader()->findChildrenOf($this); + } +} \ No newline at end of file diff --git a/library/Class/Codification.php b/library/Class/Codification.php index 02f630037f01dd17884f87072b07754ff5b19f4d..647bde19676b148c3ba53fa5dada902ac8b8fd18 100644 --- a/library/Class/Codification.php +++ b/library/Class/Codification.php @@ -106,19 +106,7 @@ class Class_Codification { public function getCodesLibellesFacette($concatenated_facettes) { - $codes_libelles=[]; - for($i=0; $i<strlen($concatenated_facettes); $i++) { - - if($concatenated_facettes[$i]=='H') { - $code=substr($concatenated_facettes,$i,5); - $i=$i+4; - } - else - $code=substr($concatenated_facettes,$i,1); - $nom_facette= Class_Codification::getNomChamp($code); - $codes_libelles[$code]=$nom_facette; - } - return $codes_libelles; + return Class_Notice_RubriqueFacette::parseRubriquesFromPreferenceField($concatenated_facettes); } @@ -157,31 +145,31 @@ class Class_Codification { if (isset($this->_nom_champs)) return; - $this->_nom_champs = [ - Class_CodifAuteur::CODE_FACETTE => [ $this->_("Auteur"), $this->_( "Auteur(s)")], - Class_IntBib::CODE_FACETTE => [ $this->_("Bibliothèque"), $this->_("Bibliothèque(s)")], - Class_Codification::CODE_COLLECTION => [ $this->_("Collection"), $this->_("Collection(s)")], - Class_CodifDewey::CODE_FACETTE => [ $this->_("Livres et Vidéos"), $this->_("Livres et Vidéos")], - Class_Codification::CODE_EDITEUR => [ $this->_("Editeur"), $this->_("Editeur(s)")], - Class_CodifCentreInteret::CODE_FACETTE => [ $this->_("Centre d'intérêt"), $this->_("Centre(s) d'intérêt")], - Class_CodifGenre::CODE_FACETTE => [ $this->_("Genre"), $this->_("Genre")], - Class_Codification::CODE_IDENTIFIANT => [ $this->_("Identifiant"), $this->_("Identifiant")], - Class_Codification::CODE_TITRE => [ $this->_("Titre"), $this->_("Titre(s)")], - Class_Codification::CODE_COLLATION => [ $this->_("Collation"), $this->_("Collation")], - Class_CodifLangue::CODE_FACETTE => [ $this->_("Langue"), $this->_("Langue(s)")], - Class_CodifMatiere::CODE_FACETTE => [ $this->_("Sujet"), $this->_("Sujet(s)")], - Class_Codification::CODE_ANNEE => [ $this->_("Année"), $this->_("Année")], - Class_Codification::CODE_NOTES => [ $this->_("Notes"), $this->_("Notes")], - Class_CodifPcdm4::CODE_FACETTE => [ $this->_("Musique"), $this->_("Musique")], - Class_Codification::CODE_RESUME => [ $this->_("Résumé"), $this->_("Résumé")], - Class_CodifSection::CODE_FACETTE => [ $this->_("Section"), $this->_("Section")], - Class_TypeDoc::CODE_FACETTE => [ $this->_("Type de document"), $this->_("Types de documents")], - Class_CodifAnnexe::CODE_FACETTE => [ $this->_("Site"), $this->_("Site")], - Class_CodifTags::CODE_FACETTE => [ $this->_("Tag"), $this->_("Tag(s)")], - Class_Codification::CODE_URL => [ $this->_("Lien internet"), $this->_("Liens internet")], - Class_Codification::CODE_AVAILABILITY => [ $this->_("En rayon"), $this->_("En rayon")], - Class_Codification::CODE_NOUVEAUTE => [ $this->_("Nouveauté"), $this->_("Nouveauté")], - Class_Codification::CODE_PRIX => [ $this->_("Prix"), $this->_("Prix")]]; + $this->_nom_champs = + [Class_CodifAuteur::CODE_FACETTE => [ $this->_("Auteur"), $this->_( "Auteur(s)")], + Class_IntBib::CODE_FACETTE => [ $this->_("Bibliothèque"), $this->_("Bibliothèque(s)")], + Class_Codification::CODE_COLLECTION => [ $this->_("Collection"), $this->_("Collection(s)")], + Class_CodifDewey::CODE_FACETTE => [ $this->_("Livres et Vidéos"), $this->_("Livres et Vidéos")], + Class_Codification::CODE_EDITEUR => [ $this->_("Editeur"), $this->_("Editeur(s)")], + Class_CodifCentreInteret::CODE_FACETTE => [ $this->_("Centre d'intérêt"), $this->_("Centre(s) d'intérêt")], + Class_CodifGenre::CODE_FACETTE => [ $this->_("Genre"), $this->_("Genre")], + Class_Codification::CODE_IDENTIFIANT => [ $this->_("Identifiant"), $this->_("Identifiant")], + Class_Codification::CODE_TITRE => [ $this->_("Titre"), $this->_("Titre(s)")], + Class_Codification::CODE_COLLATION => [ $this->_("Collation"), $this->_("Collation")], + Class_CodifLangue::CODE_FACETTE => [ $this->_("Langue"), $this->_("Langue(s)")], + Class_CodifMatiere::CODE_FACETTE => [ $this->_("Sujet"), $this->_("Sujet(s)")], + Class_Codification::CODE_ANNEE => [ $this->_("Année"), $this->_("Année")], + Class_Codification::CODE_NOTES => [ $this->_("Notes"), $this->_("Notes")], + Class_CodifPcdm4::CODE_FACETTE => [ $this->_("Musique"), $this->_("Musique")], + Class_Codification::CODE_RESUME => [ $this->_("Résumé"), $this->_("Résumé")], + Class_CodifSection::CODE_FACETTE => [ $this->_("Section"), $this->_("Section")], + Class_TypeDoc::CODE_FACETTE => [ $this->_("Type de document"), $this->_("Types de documents")], + Class_CodifAnnexe::CODE_FACETTE => [ $this->_("Site"), $this->_("Site")], + Class_CodifTags::CODE_FACETTE => [ $this->_("Tag"), $this->_("Tag(s)")], + Class_Codification::CODE_URL => [ $this->_("Lien internet"), $this->_("Liens internet")], + Class_Codification::CODE_AVAILABILITY => [ $this->_("En rayon"), $this->_("En rayon")], + Class_Codification::CODE_NOUVEAUTE => [ $this->_("Nouveauté"), $this->_("Nouveauté")], + Class_Codification::CODE_PRIX => [ $this->_("Prix"), $this->_("Prix")]]; $this->addThesauriToNomChamps(); $this->setFacetDisplayNames(); @@ -212,31 +200,31 @@ class Class_Codification { } - function addThesauriToNomChamps() { - $thesauri=Class_CodifThesaurus::getIndices('root',true); - foreach ($thesauri as $thesaurus) { - $this->_nom_champs[Class_CodifThesaurus::CODE_FACETTE.$thesaurus->getIdThesaurus()]=[$thesaurus->getLibelleFacette(),$thesaurus->getLibelleFacette()]; + public function addThesauriToNomChamps() { + foreach (Class_CodifThesaurus::getFacettesThesauri() as $model) { + $this->_nom_champs[$model->getFacetteIndex()] = [$model->getLibelleFacette(), + $model->getLibelleFacette()]; } - } function getNomChamp($code,$pluriel=0) { - if ($code[0]==Class_CodifThesaurus::CODE_FACETTE) - $type=$code; + if ($code[0] == Class_CodifThesaurus::CODE_FACETTE) + $type = $code; else - if (!$type=$code[0]) + if (!$type = $code[0]) return ''; self::genereNomsChamps(); - if($code=="tous") { + if ($code == 'tous') { foreach($this->_nom_champs as $key => $valeur) $lib[$key]=$valeur[0]; return $lib; } - return isset($this->_nom_champs[$type][$pluriel]) ? $this->_nom_champs[$type][$pluriel] : ''; + return isset($this->_nom_champs[$type][$pluriel]) ? + $this->_nom_champs[$type][$pluriel] : ''; } @@ -318,13 +306,15 @@ class Class_Codification { public function cleanDeletedFacets($concat_facets) { - $facets=''; - foreach ($this->getCodesLibellesFacette($concat_facets) as $code => $libelle) { - if ($libelle=='') + $codes = []; + $facets = $this->getCodesLibellesFacette($concat_facets); + foreach ($facets as $facet) { + if (!$label = $facet->getLibelle()) continue; - $facets.=$code; + + $codes[] = $facet->getCode(); } - return $facets; - } + return implode(';', $codes); + } } \ No newline at end of file diff --git a/library/Class/CosmoVar.php b/library/Class/CosmoVar.php index 4f9b0673355409ce8d6db0a8f89d4c00abafebd1..17294b02acb6d1507bda707e04cfe55ed6a2272c 100644 --- a/library/Class/CosmoVar.php +++ b/library/Class/CosmoVar.php @@ -107,6 +107,7 @@ class Class_CosmoVar extends Storm_Model_Abstract { protected $_loader_class = 'Class_CosmoVarLoader'; const DOUBLE_SEARCH_ALPHA_KEY = 1; + const DOUBLE_SEARCH_IDS = 0; /** * @param string $name diff --git a/library/Class/Cosmogramme/Integration/PhaseNotice.php b/library/Class/Cosmogramme/Integration/PhaseNotice.php index fd36087a107b131ed3b75e0209b6e02e185b20bb..bb2799ae99f8d8d841f7d2c833067cca155a0631 100644 --- a/library/Class/Cosmogramme/Integration/PhaseNotice.php +++ b/library/Class/Cosmogramme/Integration/PhaseNotice.php @@ -64,6 +64,9 @@ class Class_Cosmogramme_Integration_PhaseNotice extends Class_Cosmogramme_Integr $nb1 = Class_NoticeSuccincte::countBy(['id_bib' => $id_int_bib]); Class_NoticeSuccincte::deleteBy(['id_bib' => $id_int_bib]); + Class_CodifThesaurus::deleteBy(['code' => null, + 'rules' => null]); + $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); diff --git a/library/Class/CustomField.php b/library/Class/CustomField.php index 888822702559b45f628d844d8ecacfc52b279b4a..b78f29c634ab4f5250f49db2e0579bc936c4b687 100644 --- a/library/Class/CustomField.php +++ b/library/Class/CustomField.php @@ -29,7 +29,6 @@ class CustomFieldsLoader extends Storm_Model_Loader { 'model' => $model]); if (!array_filter($custom_fields)) $availables_meta[] = $custom_field_meta; - } return $availables_meta; @@ -55,7 +54,35 @@ class Class_CustomField extends Storm_Model_Abstract { $_has_many = ['values' => ['model' => 'Class_CustomField_Value', 'role' => 'field', 'dependents' => 'delete']], - $_default_attribute_values = ['priority' => 0]; + $_default_attribute_values = ['priority' => 0], + $_forwarded_to_meta = ['label', 'field_type', 'options_list', 'indexable']; + + + public function __call($method, $args) { + if ($this->_shouldBeForwardedToMeta($method)) { + $result = call_user_func_array([$this->getMeta(), $method], $args); + return $this->_isGetter($method) ? $result : $this; + } + + return parent::__call($method, $args); + } + + + protected function _shouldBeForwardedToMeta($method) { + return preg_match('/(get|set)(\w+)/', $method, $matches) + && ($attribute = $this->_accessorToAttributeName($matches[2])) + && in_array($attribute, $this->_forwarded_to_meta); + } + + + protected function _isGetter($method) { + return $this->_startsWith($method, 'get'); + } + + + protected function _startsWith($method, $value) { + return $value == substr($method, 0, strlen($value)); + } public function getMeta() { @@ -76,11 +103,6 @@ class Class_CustomField extends Storm_Model_Abstract { return $this->getTitre(); } - public function setLabel($value) { - $this->getMeta()->setLabel($value); - return $this; - } - public function getLabel() { return $this->getTitre(); @@ -92,44 +114,23 @@ class Class_CustomField extends Storm_Model_Abstract { } - public function setFieldType($value) { - $this->getMeta()->setFieldType($value); - return $this; - } - - - public function getFieldType() { - return $this->getMeta()->getFieldType(); - } - - - public function setOptionsList($options) { - $this->getMeta()->setOptionsList($options); - return $this; - } - + public function toArray() { + $from_meta = []; + foreach($this->_forwarded_to_meta as $property) { + $method = 'get' . $this->attributeNameToAccessor($property); + $from_meta[$property] = $this->$method(); + } - public function getOptionsList() { - return $this->getMeta()->getOptionsList(); + return array_merge(parent::toArray(), $from_meta); } - public function getOptionsListAsArray() { - return $this->getMeta()->getOptionsListAsArray(); - } - - - public function toArray() { - return array_merge(parent::toArray(), ['label' => $this->getLabel(), - 'field_type' => $this->getFieldType(), - 'options_list' => $this->getOptionsList()]); - } - public function getFieldsOfSameModel() { - return Class_CustomField::getLoader()->findAllBy(['model' => $this->getModel(), - 'order' => 'priority']); + return $this->getLoader()->findAllBy(['model' => $this->getModel(), + 'order' => 'priority']); } + public function movePriorityUp() { $this ->getLoader() @@ -164,5 +165,19 @@ class Class_CustomField extends Storm_Model_Abstract { return array_values(array_filter($new_order)); } -} -?> \ No newline at end of file + + + public function getOptionsListAsArray() { + return $this->getMeta()->getOptionsListAsArray(); + } + + + public function isIndexable() { + return 1 == $this->getIndexable(); + } + + + public function getThesaurusIdOrigine() { + return $this->getMeta()->getId(); + } +} \ No newline at end of file diff --git a/library/Class/CustomField/Meta.php b/library/Class/CustomField/Meta.php index 797b497f039edce5a37b6b918b8064c7f153ae52..583f680baa48fdf3c5b5a61c9b643c6faba125f8 100644 --- a/library/Class/CustomField/Meta.php +++ b/library/Class/CustomField/Meta.php @@ -27,35 +27,40 @@ class Class_CustomField_Meta extends Storm_Model_Abstract { TEXT_INPUT = 'text', TEXT_AREA = 'textarea', CKEDITOR = 'ckeditor', - SELECT = 'select'; + SELECT = 'select', + SELECT_SEPARATOR = ';'; protected static $_models = []; protected $_table_name = 'custom_field_meta', + $_has_many = ['custom_fields' => ['model' => 'Class_CustomField', 'role' => 'meta', 'dependents' => 'delete']], + $_default_attribute_values = ['label' => '', 'field_type' => self::TEXT_INPUT, - 'options_list' => '']; + 'options_list' => '', + 'indexable' => 0]; public function getLibelle() { return $this->getLabel(); } + public function getFieldTypes() { return - [Class_CustomField_Meta::TEXT_INPUT => $this->_('Texte'), - Class_CustomField_Meta::TEXT_AREA => $this->_('Zone de texte simple'), - Class_CustomField_Meta::CKEDITOR => $this->_('Zone de texte HTML'), - Class_CustomField_Meta::SELECT => $this->_("Liste d'options")]; + [self::TEXT_INPUT => $this->_('Texte'), + self::TEXT_AREA => $this->_('Zone de texte simple'), + self::CKEDITOR => $this->_('Zone de texte HTML'), + self::SELECT => $this->_("Liste d'options")]; } public function getOptionsListAsArray() { - $options = explode(';',$this->getOptionsList()); + $options = explode(self::SELECT_SEPARATOR, $this->getOptionsList()); $options = array_map(function($option) {return trim($option);}, $options); return array_filter($options); } @@ -64,5 +69,50 @@ class Class_CustomField_Meta extends Storm_Model_Abstract { public function getFieldTypeLabel() { return $this->getFieldTypes()[$this->getFieldType()]; } -} -?> \ No newline at end of file + + + public function getThesaurus() { + return Class_CodifThesaurus::findForCustomFieldMeta($this); + } + + + public function afterSave() { + $this->_instrumentThesaurus(); + } + + + public function afterDelete() { + if ($thesaurus = $this->getThesaurus()) + $thesaurus->deleteMeAndMyChildren(); + } + + + protected function _instrumentThesaurus() { + $thesaurus = $this->getThesaurus(); + + if ($this->_thesaurusIsMissing($thesaurus)) { + Class_CodifThesaurus::getOrCreateForCustomFieldMeta($this); + return; + } + + if ($this->_thesaurusShouldNotBeThere($thesaurus)) { + $thesaurus->deleteMeAndMyChildren(); + return; + } + + if ($thesaurus) + $thesaurus->setLibelle($this->getLabel()) + ->setLibelleFacette($this->getLabel()) + ->save(); + } + + + protected function _thesaurusIsMissing($thesaurus) { + return $this->getIndexable() && !$thesaurus; + } + + + protected function _thesaurusShouldNotBeThere($thesaurus) { + return !$this->getIndexable() && $thesaurus; + } +} \ No newline at end of file diff --git a/library/Class/CustomField/Value.php b/library/Class/CustomField/Value.php index 2c5fa4cdfadf0798109e96e6a6f21150c96100d9..8bd29280d432ca959fc4c9193097561dfda8ea03 100644 --- a/library/Class/CustomField/Value.php +++ b/library/Class/CustomField/Value.php @@ -52,14 +52,17 @@ class Class_CustomField_Value extends Storm_Model_Abstract { 'referenced_in' => 'custom_field_id']], $_default_attribute_values = ['value' => '']; + public function getFieldType() { return $this->getField()->getFieldType(); } + public function getLabel() { return $this->getField()->getLabel(); } + public function getOptionsListAsArray() { return $this->getField()->getOptionsListAsArray(); } diff --git a/library/Class/Formulaire.php b/library/Class/Formulaire.php index e0b5256485f9436d80adf50285ad6fe8f35745b9..e8dcffa769e0d05c6fee1cc78cf25de729184d40 100644 --- a/library/Class/Formulaire.php +++ b/library/Class/Formulaire.php @@ -111,6 +111,15 @@ class Class_Formulaire extends Storm_Model_Abstract { } + public function dataAsBodyText() { + $body = ''; + foreach ($this->getDatas() as $name => $value) + $body .= "$name: $value\n"; + + return $body; + } + + public function _get($attribute) { try { return parent::_get($attribute); diff --git a/library/Class/Indexation/PseudoNotice.php b/library/Class/Indexation/PseudoNotice.php index d53710d75793e55dbd04acf39978131dfcb7fdcf..7718d0a942539b9f45b4d4854c766ba68b1312e4 100644 --- a/library/Class/Indexation/PseudoNotice.php +++ b/library/Class/Indexation/PseudoNotice.php @@ -321,12 +321,19 @@ class Class_Indexation_PseudoNotice { ->visitOrigin($this->_datas['provenance']) ->visitUrl($this->_datas['url']) ->visitNotes($this->_datas['notes']) - ->visitNatures($this->_datas['nature_doc']); + ->visitNatures($this->_datas['nature_doc']) + ->visitCustomFieldsValues($this->getCustomFieldsValues()); $this->_modelIdAcceptVisitor($visitor); } + protected function getCustomFieldsValues() { + $custom_model = Class_CustomField_Model::getModel(get_class($this->_model)); + return $custom_model->find($this->_model->getId()); + } + + protected function _modelIdAcceptVisitor($visitor) { $visitor->visitModelId($this->_model->getId()); } diff --git a/library/Class/Indexation/PseudoNotice/FacettesVisitor.php b/library/Class/Indexation/PseudoNotice/FacettesVisitor.php index 5197b4751e45c9d55f7aaae906c9833c896878c7..a1f7d69408c3e9ba023a1c8d7a827bbedf2cde86 100644 --- a/library/Class/Indexation/PseudoNotice/FacettesVisitor.php +++ b/library/Class/Indexation/PseudoNotice/FacettesVisitor.php @@ -16,11 +16,11 @@ * * 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_Indexation_PseudoNotice_FacettesVisitor extends Class_Indexation_PseudoNotice_Visitor { - protected + protected $_facettes = [], $_indexation; @@ -59,17 +59,17 @@ class Class_Indexation_PseudoNotice_FacettesVisitor extends Class_Indexation_Pse return $this; } - + public function visitGenre($genre) { $this->visitCodeFacetteWithValues('G',$genre); return $this; } public function visitPcdm4($pcdm4) { - $this->visitCodeFacetteWithValues('P',$pcdm4); + $this->visitCodeFacetteWithValues('P',$pcdm4); return $this; } - + public function visitAuteur($auteurs) { foreach((array)$auteurs as $auteur) { @@ -83,19 +83,22 @@ class Class_Indexation_PseudoNotice_FacettesVisitor extends Class_Indexation_Pse public function visitTagFacettes($tags) { - $tags = explode(';', $tags); foreach($tags as $tag) { $code_alpha = $this->_indexation->alphamaj($tag); - if (!$code_alpha) continue; + if (!$code_alpha) + continue; + if (!$existing = Class_TagNotice::findFirstBy(['code_alpha' => $code_alpha])) { $existing = Class_TagNotice::newInstance(['libelle' => $tag, 'code_alpha' => $code_alpha]); $existing->save(); } + $this->_facettes[]= 'Z' . $existing->getId(); } + return $this; } @@ -105,33 +108,68 @@ class Class_Indexation_PseudoNotice_FacettesVisitor extends Class_Indexation_Pse return $this; } - public function visitMatiere($matiere) { - $matieres = array_filter(explode(';', $matiere)); - foreach($matieres as $matiere) { + public function visitMatiere($matiere) { + foreach(array_filter(explode(';', $matiere)) as $matiere) $this->_facettes[]= 'M' . $matiere; - } + return $this; } + public function visitLangue($id_langue) { if ($id_langue) $this->_facettes[]='L' . $id_langue; + return $this; } + public function visitDomaine($domaine_ids) { foreach(explode(';', $domaine_ids) as $domaine) { if (!$thesaurus = Class_CodifThesaurus::findThesaurusForCatalogue($domaine)) continue; + $this->_facettes[]= $thesaurus->getFacetteIndex(); } return $this; } + + /** + * @param $custom_values Class_CustomField_ModelValues + */ + public function visitCustomFieldsValues($custom_values) { + foreach($custom_values->getFields() as $field) + $this->_visitCustomField($custom_values, $field); + + return $this; + } + + + protected function _visitCustomField($custom_values, $field) { + if (!($value = $custom_values->getFieldValue($field->getId())) + || !$value->getValue()) + return; + + $thesaurus = $this + ->_ensureThesaurusUnderWithValue($this->_ensureThesaurusFor($field), + $value->getValue()); + $this->_facettes[] = $thesaurus->getFacetteIndex(); + } + + + protected function _ensureThesaurusFor($field) { + return Class_CodifThesaurus::getOrCreateForCustomField($field); + } + + + protected function _ensureThesaurusUnderWithValue($parent, $value) { + return $parent->getOrCreateChild(hash('crc32b', $value), $value); + } + + public function getFacettes() { return $this->_facettes; } -} - -?> \ No newline at end of file +} \ No newline at end of file diff --git a/library/Class/MoteurRecherche/Facettes.php b/library/Class/MoteurRecherche/Facettes.php index ddbe150435d96f2e9333eb347c9b458cd4f436d5..955961fc9262da58044ecf094a8d87a41ee4c980 100644 --- a/library/Class/MoteurRecherche/Facettes.php +++ b/library/Class/MoteurRecherche/Facettes.php @@ -18,53 +18,65 @@ * along with BOKEH; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + class Class_MoteurRecherche_Facettes { protected $_facettes_par_cle = [], $_nb_facettes_par_cle = []; - public function getFacettes($req, $preferences){ + public function getFacettes($req, $preferences) { return (new Storm_Cache()) - ->memoize([$req,$preferences,__CLASS__,__FUNCTION__], + ->memoize( + [$req, $preferences, __CLASS__, __FUNCTION__], function() use($req, $preferences) { - return $this->_getFacettes($req, $preferences); + return $this->_getFacettes($req, $preferences); } - ); + ); } - protected function _getFacettes($req,$preferences) { - $result = ['facettes' => [], - 'tags' => []]; - - $p_facette = array("nombre" => $preferences["facettes_nombre"], - "actif" => $preferences["facettes_actif"], - "types" => "T".$preferences["facettes_codes"]); - - $p_facette["nombre"]=$p_facette["nombre"]*2; // pour afficher les n suivants - $p_tag=array("actif" => $preferences["tags_actif"], - "types" => $preferences["tags_codes"], - "nombre" => $preferences["tags_nombre"]); - if(!$p_facette["actif"] and !$p_tag["actif"]) - return $result; + protected function _getFacettes($req, $preferences) { + if (!$preferences['facettes_actif'] && !$preferences['tags_actif']) + return ['facettes' => [], + 'tags' => []]; - // Lecture des notices $codes_count = $this->fetchFacetsRows($req); - $result['facettes'] = $facettes = $this->groupAndOrderFacets($codes_count, - $p_facette['types'], - $p_facette['nombre']); - if(!$p_tag["actif"]) - return $result; + $result = ['facettes' => $this->_getFacets($preferences, $codes_count), + 'tags' => $this->_getTags($preferences, $codes_count)]; - // Constituer le tableau des tags - $result['tags'] = $this->extractTags($p_tag['types'], $p_tag['nombre'], $codes_count); return $result; } + protected function _getFacets($prefs, $codes_count) { + if (!$prefs['facettes_actif']) + return []; + + $facet_separator = preg_match('/;/', $prefs['facettes_codes']) ? ';' : ''; + $facet_codes = 'T' . $facet_separator . $prefs['facettes_codes']; + + return $this->groupAndOrderFacets($codes_count, + $this->_sanitizeCodes($facet_codes), + $prefs['facettes_nombre'] * 2); + } + + + protected function _getTags($prefs, $codes_count) { + return !$prefs['tags_actif'] ? + [] : $this->extractTags($this->_sanitizeCodes($prefs['tags_codes']), + $prefs['tags_nombre'], + $codes_count); + } + + + protected function _sanitizeCodes($codes) { + return implode(';', array_filter(array_unique(explode(';', $codes)))); + } + + public function fetchFacetsRows($req) { $all = array_count_values( array_filter( @@ -80,52 +92,53 @@ class Class_MoteurRecherche_Facettes { public function groupAndOrderFacets($codes, $rubriques, $nombre) { $facets = []; - $rubriques_to_display = array_keys(Class_Codification::getInstance() - ->getCodesLibellesFacette($rubriques)); - + $to_display = $this->_groupCodesFrom($rubriques); $admin_var_unleashed = new Class_AdminVar_UnleashedFacets(); foreach($codes as $code => $count) { - $facette = Class_Notice_Facette::find($code); - $rubrique = $facette->getCodeRubrique(); + $rubrique = Class_Notice_Facette::find($code)->getCodeRubrique(); - if (!in_array($rubrique, $rubriques_to_display)) + if (!in_array($rubrique, $to_display)) continue; if (!isset($facets[$rubrique])) $facets[$rubrique] = []; if ((count($facets[$rubrique]) >= $nombre) - && - !$admin_var_unleashed->isUnleashed($rubrique)) + && !$admin_var_unleashed->isUnleashed($rubrique)) continue; $facets[$rubrique][$code] = $count; } + return $facets; } public function extractTags($rubriques, $nombre_tags, $facettes) { - $table_tags = []; - $codification = Class_Codification::getInstance(); - $rubriques_to_display = array_keys($codification->getCodesLibellesFacette($rubriques)); + $tags = []; + $to_display = $this->_groupCodesFrom($rubriques); foreach($facettes as $code => $count) { - if (!in_array(Class_Notice_Facette::find($code)->getCodeRubrique(), - $rubriques_to_display)) + $facet = Class_Notice_Facette::find($code); + if (!in_array($facet->getCodeRubrique(), $to_display)) continue; - $table_tags[] = ['id' => $code, - 'nombre' => $count, - 'libelle' => $codification->getLibelleFacette($code)]; - if (count($table_tags) >= $nombre_tags) + $tags[] = ['id' => $code, + 'nombre' => $count, + 'libelle' => $facet->getLibelleFacette($code)]; + + if (count($tags) >= $nombre_tags) break; } - return $table_tags; + return $tags; } -} -?> \ No newline at end of file + + protected function _groupCodesFrom($spec) { + return array_map(function($item) { return $item->getCode(); }, + Class_Notice_RubriqueFacette::parseRubriquesFromPreferenceField($spec)); + } +} \ No newline at end of file diff --git a/library/Class/Newsletter.php b/library/Class/Newsletter.php index 93dc1eb538b891eb150370ef3123fc85809c00c3..a991af74386d4637f4361547be93c8ab592f7a1a 100644 --- a/library/Class/Newsletter.php +++ b/library/Class/Newsletter.php @@ -187,26 +187,36 @@ class Class_Newsletter extends Storm_Model_Abstract { } - protected function _getBodyText($notices) { - $lines = array($this->_htmlToText($this->getContenu())); + protected function _getBodyText($records) { + $lines = [$this->_htmlToText($this->getContenu())]; - foreach($notices as $notice) { - $url_notice = sprintf('http://%s/recherche/viewnotice/id/%d', - $_SERVER['SERVER_NAME'].BASE_URL, - $notice->getId()); - - $lines []= '- '.$this->_getTitleForNotice($notice); - $lines []= $notice->getResume(); - $lines []= "Lien: $url_notice"; - $lines []= "\n"; - - } + foreach($records as $record) + $this->_addBodyTextRecordInto($record, $lines); $lines[] = $this->_getUnsubscribeText(); + return implode("\n", $lines); } + protected function _addBodyTextRecordInto($record, &$data) { + if (!$record) + return; + + $data[] = '- ' . $this->_getTitleForNotice($record); + $data[] = $record->getResume(); + $data[] = 'Lien: ' . $this->_getRecordUrlWithoutRouter($record); + $data[] = "\n"; + } + + + protected function _getRecordUrlWithoutRouter($record) { + return sprintf('http://%s/recherche/viewnotice/id/%d', + $_SERVER['SERVER_NAME'].BASE_URL, + $record->getId()); + } + + /** * @return string */ @@ -216,42 +226,42 @@ class Class_Newsletter extends Storm_Model_Abstract { /** - * @param array $notices + * /!\ maybe in cli context : cannot rely on view helpers + * @see scripts/sendNewsletter.php + * + * @param array $records * @return string */ - protected function _getBodyHTML($notices) { - $view = new ZendAfi_Controller_Action_Helper_View(); - + protected function _getBodyHTML($records) { $html = $this->getContenu(); - foreach($notices as $notice) { - $title = $this->_getTitleForNotice($notice); - $vignette = $notice->fetchUrlVignette(); - $resume = $notice->getResume(); - - - $anchor_notice = $view - ->tagAnchor($view->absoluteUrl( - [ 'controller' => 'recherche', - 'action' => 'viewnotice', - 'id' => $notice->getId()], - null, true - ), - $view->tagImg($vignette, - ['style' => 'float:left;width:50px;vertical-align:top;padding:5px', - 'alt' => 'vignette'] - ) . $title); - - $html.= - '<div style="padding:5px">' . - $anchor_notice . - '<div>' . $resume . '</div>' . - '<div style="clear:both"></div>'. - '</div>'; - } - $html.=$this->_getUnsubscribeHTML(); + foreach($records as $record) + $html .= $this->_getBodyHTMLRecord($record); + + $html .= $this->_getUnsubscribeHTML(); + return $html; + } + + + protected function _getBodyHTMLRecord($record) { + $title = $this->_getTitleForNotice($record); + + $anchor = '<a href="' . $this->_getRecordUrlWithoutRouter($record) . '">' + . $this->_getRecordThumbWithoutRouter($record) . $title . '</a>'; + + return '<div style="padding:5px">' . + $anchor . + '<div>' . $record->getResume() . '</div>' . + '<div style="clear:both"></div>'. + '</div>'; + } + + protected function _getRecordThumbWithoutRouter($record) { + return $record->hasVignette() ? + '<img src="' . $record->getUrlVignette() . '" style="float:left;width:50px;vertical-align:top;padding:5px" alt="" />' + : ''; } diff --git a/library/Class/Notice.php b/library/Class/Notice.php index 9fd23d2bc5440f46484c92d4968a25e7f30599f4..918e8724ff3abbee80dad84da3baa088a0de00bf 100644 --- a/library/Class/Notice.php +++ b/library/Class/Notice.php @@ -72,6 +72,11 @@ class NoticeLoader extends Storm_Model_Loader { } + public function findAllByFacetRequest($req) { + return Zend_Registry::get('sql')->fetchAll($req); + } + + public function countBySQLSelect($req) { return fetchOne($req); } @@ -334,38 +339,41 @@ class Class_Notice extends Storm_Model_Abstract { } - public function getAvisBibliothecaires() { + public function getAvisBibliothecaires() { return Class_AvisNotice::filterByBibliothecaire($this->getAvis()); } + public function numberOfAvisBibliothecaire() { return Class_AvisNotice::countBy(['abon_ou_bib' => 1, 'clef_oeuvre' => $this->getClefOeuvre()]); } - public function getAvisAbonnes() - { + + public function getAvisAbonnes() { return Class_AvisNotice::filterByAbonne($this->getAvis()); } + public function numberOfAvisAbonne() { return Class_AvisNotice::countBy(['abon_ou_bib' => 0, 'clef_oeuvre' => $this->getClefOeuvre()]); } - public function getNoteMoyenneAvisBibliothecaires() - { + + public function getNoteMoyenneAvisBibliothecaires() { return Class_AvisNotice::getNoteAverage($this->getAvisBibliothecaires()); } - public function getNoteMoyenneAvisAbonnes() - { + + public function getNoteMoyenneAvisAbonnes() { return Class_AvisNotice::getNoteAverage($this->getAvisAbonnes()); } - public function setAvis($list_avis) - { + + public function setAvis($list_avis) { $this->_avis = $list_avis; } + public function setUnimarc($unimarc) { $this->getNoticeUnimarc()->setNotice($unimarc); return parent::setUnimarc($unimarc); @@ -458,14 +466,17 @@ class Class_Notice extends Storm_Model_Abstract { return ($this->getTypeDoc() == Class_TypeDoc::ARTICLE); } + public function isRSS() { return ($this->getTypeDoc() == Class_TypeDoc::RSS); } + public function isAudioRecord() { return ($this->getTypeDoc() == Class_TypeDoc::AUDIO_RECORD); } + public function isSite() { return ($this->getTypeDoc() == Class_TypeDoc::SITE); } @@ -585,7 +596,8 @@ class Class_Notice extends Storm_Model_Abstract { public function getArticlesPeriodique() { // lire dans la base $datas = Class_Notice_SerialArticles::findAllBy(['clef_chapeau' => $this->getClefChapeau(), - 'clef_numero' => $this->getTomeAlpha()]); + 'clef_numero' => $this->getTomeAlpha(), + 'order' => 'id_article asc']); $articles = []; diff --git a/library/Class/Notice/Facette.php b/library/Class/Notice/Facette.php index 329df81c06fff799f9cfb1845aca69eff39f5c61..60a01536726a63dd0eef96579269df8f37279eff 100644 --- a/library/Class/Notice/Facette.php +++ b/library/Class/Notice/Facette.php @@ -19,73 +19,76 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ class Class_Notice_Facette { - const NB_CHAR_THESAURUS=4; - protected static $_instances=[]; + const NB_CHAR_THESAURUS = 4; + + protected static $_instances = []; protected $_cle, $_rubrique; public static function parseFacettesFromNoticeField($str_facettes) { - $items = array_filter(explode(" ",trim($str_facettes))); - $facettes=[]; - foreach($items as $item) { + $items = array_filter(explode(' ', trim($str_facettes))); + $facettes = []; + foreach($items as $item) $facettes[] = static::find($item); - } + return $facettes; } public static function find($cle) { - if (isset(static::$_instances[$cle])) - return static::$_instances[$cle]; - - return static::$_instances[$cle] = new static($cle); + return (array_key_exists($cle, static::$_instances)) ? + static::$_instances[$cle]: + static::$_instances[$cle] = new static($cle); } public function __construct($cle) { - $this->_cle=$cle; - $this->_rubrique = Class_Notice_RubriqueFacette::find($this->getCodeRubriqueFromCle($cle)); + $this->_cle = $cle; } - /** - * @return String exemple : Y - */ + public function getCodeRubrique() { - return $this->_rubrique->getCode(); + return $this->getRubrique()->getCode(); } - /** - * @return int example : 8 - */ + public function getValue() { return substr($this->_cle, 1); } - public function getCodeRubriqueFromCle($cle) { - if ($cle[0] !== 'H') - return $cle[0]; - return substr($cle,0,self::NB_CHAR_THESAURUS+1); + protected function getGroupCodeFromKey() { + return $this->isThesaurus() ? + Class_CodifThesaurus::getFacetGroup($this->_cle) : + substr($this->_cle, 0, 1); + } + + + public function isThesaurus() { + return Class_CodifThesaurus::CODE_FACETTE == substr($this->_cle, 0, 1); } + public function getCodeRubriqueLibelle() { - return $this->_rubrique->getLibelle(); + return $this->getRubrique()->getLibelle(); } - /** - * @return String exemple : Y88 - */ + public function getCle() { return $this->_cle; } - /** - * @return String exemple : Comédie dramatique - */ + + public function getRubrique() { + return $this->_rubrique ? + $this->_rubrique : + $this->_rubrique = Class_Notice_RubriqueFacette::find($this->getGroupCodeFromKey()); + } + + public function getLibelleFacette() { - return Class_Codification::getInstance()->getLibelleFacette($this->_cle); + return Class_Codification::getInstance()->getLibelleFacette($this->_cle); } -} -?> \ No newline at end of file +} \ No newline at end of file diff --git a/library/Class/Notice/RubriqueFacette.php b/library/Class/Notice/RubriqueFacette.php index bec9b9d5a2463d4f460ba845e67c3563888913d3..de33bab69426147b236e89491e8d09298d1735d1 100644 --- a/library/Class/Notice/RubriqueFacette.php +++ b/library/Class/Notice/RubriqueFacette.php @@ -34,38 +34,68 @@ class Class_Notice_RubriqueFacette { public function __construct($code) { - $this->_code=$code; + $this->_code = $code; } - public static function parseRubriquesFromPreferenceField($str_rubriques) { - $instances = []; + public static function parseRubriquesFromPreferenceField($facets_codes) { + if (!$facets_codes) + return []; - for($i=0; $i<strlen($str_rubriques); $i++) { + return is_array($facets_codes) ? + static::settingArrayToFacet($facets_codes) : + static::settingStringToFacet($facets_codes); + } + + + public static function settingStringToFacet($codes) { + if (false === strpos($codes, ';')) + $codes = static::translateStringToCodes($codes); + + $codes = array_filter(array_unique(explode(';', $codes))); + + return static::settingArrayToFacet($codes); + } - if($str_rubriques[$i]=='H') { - $code=substr($str_rubriques,$i,5); - $i=$i+4; - } - else - $code=substr($str_rubriques,$i,1); - $instances []= new Class_Notice_RubriqueFacette($code); - } - return $instances; + protected static function settingArrayToFacet($codes) { + return array_map(function($facet) { return new static($facet); }, + $codes); + } + + + protected static function translateStringToCodes($codes) { + if (!$codes) + return ''; + + $code = static::extractCodeFromString($codes); + $codes = preg_replace('/^' . $code . '/', '', $codes); + + return $code . ';' . static::translateStringToCodes($codes); + } + + + protected static function extractCodeFromString($codes) { + if (preg_match('/^' . Class_CodifThesaurus::CODE_FACETTE . '\S{4}/', + $codes, + $matches)) + return $matches[0]; + + preg_match('/^\S/', $codes, $matches); + + return $matches ? $matches[0] : ''; } public function getLibelle() { if (!isset($this->_libelle)) - $this->_libelle = $this->_libelle = Class_Codification::getInstance()->getNomFacette($this->_code); + $this->_libelle = Class_Codification::getInstance()->getNomFacette($this->_code); return $this->_libelle; } + public function getCode() { return $this->_code; } - - } \ No newline at end of file diff --git a/library/Class/WebService/SIGB/Koha/PatronInfoReader.php b/library/Class/WebService/SIGB/Koha/PatronInfoReader.php index 6e2f1ff11f4f0417035138420b436344de67278c..5bd30a214123c16f0e1d9b9aca706d1dffcb4d10 100644 --- a/library/Class/WebService/SIGB/Koha/PatronInfoReader.php +++ b/library/Class/WebService/SIGB/Koha/PatronInfoReader.php @@ -77,7 +77,8 @@ class Class_WebService_SIGB_Koha_PatronInfoReader extends Class_WebService_SIGB_ public function updateBibliothequeWith($data) { - $site = $this->findSite($data); + if(!$site = $this->findSite($data)) + return; $this->_current_operation->getExemplaire()->setBibliotheque($site->getLibelle()); diff --git a/library/ZendAfi/Controller/Action.php b/library/ZendAfi/Controller/Action.php index c022e3e4b44b725d7ba2a9c6a5cd7bcecec3927b..e06fb3782d966a38ca809bc43fe9f92340bed2ea 100644 --- a/library/ZendAfi/Controller/Action.php +++ b/library/ZendAfi/Controller/Action.php @@ -280,13 +280,13 @@ class ZendAfi_Controller_Action extends Zend_Controller_Action { if (!$model->save()) return false; - $this->_doAfterSave($model); - $model_values = $this->_getCustomFieldModelValues($model); $custom_form = $this->_getCustomFieldForm($model_values); $custom_form->populate($custom_values); $custom_form->updateModelValues(); $model_values->save(); + + $this->_doAfterSave($model); return true; } diff --git a/library/ZendAfi/Form/Admin/CustomFields.php b/library/ZendAfi/Form/Admin/CustomFields.php index b16393ca1810b0b368b8ddccba39435f3ffc93fb..d40ef57718b8b66804da0baf04fdcf5cc613bd19 100644 --- a/library/ZendAfi/Form/Admin/CustomFields.php +++ b/library/ZendAfi/Form/Admin/CustomFields.php @@ -24,42 +24,61 @@ class ZendAfi_Form_Admin_CustomFields extends ZendAfi_Form { public function init() { parent::init(); - $this->_toggleOptionsList(); + $checkbox = $this->createElement('checkbox', + 'indexable', + ['label' => $this->_('Indexer dans les notices ?') . '<br/>' + . '<span class="element-description">' + . $this->_("Attention, l'activation ou la désactivation de cette case nécessite une réindexation du contenu") + . '</span>', + 'required' => true, + 'allowEmpty' => false]); + + $checkbox->getDecorator('label')->setOption('escape', false); $this + ->_toggleOptionsList() + ->setAttrib('id', 'custom_field') ->setAttrib('action', '') + ->addElement('text', 'label', ['label' => $this->_('Libellé du champ'), 'size' => 50, 'required' => true, 'allowEmpty' => false]) + ->addElement('select', 'field_type', ['label' => $this->_('Type de champ'), 'multioptions' => (new Class_CustomField_Meta())->getFieldTypes(), 'required' => true, 'allowEmpty' => false]) + + ->addElement($checkbox) + ->addElement('text', 'options_list', ['label' => $this->_('Options pour le type "liste d\'options"'), 'size' => 50, - 'placeholder' => $this->_('option 1; option 2; option 3')]); + 'placeholder' => $this->_('option 1; option 2; option 3')]) + + ->addDisplayGroup(['label', 'field_type', 'indexable'], 'base', ['legend' => '']) + ->addDisplayGroup(['options_list'], 'options', ['legend' => $this->_('Options')]); } protected function _toggleOptionsList() { - return Class_ScriptLoader::getInstance() - ->addJQueryBackEnd('formSelectToggleVisibilityForElement("#field_type", "#fieldset-options", "'.Class_CustomField_Meta::SELECT.'");'); + Class_ScriptLoader::getInstance() + ->addJQueryBackEnd('formSelectToggleVisibilityForElement("#field_type", "#fieldset-options", "' . Class_CustomField_Meta::SELECT . '");'); + return $this; } + public function getFieldTypeLabel($fieldType) { return (new Class_CustomField_Meta())->getFieldTypes()[$fieldType]; } - -} -?> \ No newline at end of file +} \ No newline at end of file diff --git a/library/ZendAfi/Form/Admin/CustomFields/CustomFieldModel.php b/library/ZendAfi/Form/Admin/CustomFields/CustomFieldModel.php index 4398b8ee56b37c6118e98a365b245770264d1ee2..e0676be37750f3a6a70b8663c141f8d435629ad0 100644 --- a/library/ZendAfi/Form/Admin/CustomFields/CustomFieldModel.php +++ b/library/ZendAfi/Form/Admin/CustomFields/CustomFieldModel.php @@ -21,16 +21,8 @@ class ZendAfi_Form_Admin_CustomFields_CustomFieldModel extends ZendAfi_Form_Admin_CustomFields { - - public static function newWith($custom_field_array=[], $custom_form=null) { - $form = new self(); - $form - ->addElement('hidden', 'model') - ->populate($custom_field_array) - ->addDisplayGroup(['label', 'field_type', 'model'],'base',['legend' => '']) - ->addDisplayGroup(['options_list'], 'options', ['legend' => $form->_('Options'), - 'class' => 'invisible']); - return $form; + public function init() { + parent::init(); + $this->addElement('hidden', 'model'); } -} -?> \ No newline at end of file +} \ No newline at end of file diff --git a/library/ZendAfi/Form/Admin/News.php b/library/ZendAfi/Form/Admin/News.php index 3874c5ee8828104f2670158591fe596860e112ff..4ebe5318d05398b699057faec87e0b775c5471de 100644 --- a/library/ZendAfi/Form/Admin/News.php +++ b/library/ZendAfi/Form/Admin/News.php @@ -28,7 +28,8 @@ class ZendAfi_Form_Admin_News extends ZendAfi_Form { ->addWorkflow(isset($datas['status']) ? $datas['status'] : '', isset($datas['id_cat']) ? $datas['id_cat'] : '') ->addPublication($datas['debut'], $datas['fin']) - ->addAgenda($datas['all_day'], $datas['events_debut'], $datas['events_fin']); + ->addAgenda($datas['all_day'], $datas['events_debut'], $datas['events_fin']) + ->addEmail($datas['contenu'], $datas['destination_email']); return $form; } @@ -96,7 +97,6 @@ class ZendAfi_Form_Admin_News extends ZendAfi_Form { ['label' => $this->_('Autoriser les commentaires d\'internautes (Mode blog) ?')]) ->addElement('checkbox', 'indexation', ['label' => $this->_('Indexer l\'article dans le catalogue ?')]) - ->addDisplayGroup([ 'titre', 'cacher_titre', @@ -147,6 +147,19 @@ class ZendAfi_Form_Admin_News extends ZendAfi_Form { } + protected function addEmail($contenu, $email) { + if (Class_AdminVar::isCmsFormulairesEnabled() && + preg_match('/<form/', $contenu)) { + $this->addElement('email', 'destination_email', + ['label' => $this->_('Email du modérateur'), + 'value' => $email, + 'order' => 4]); + $this->updateDisplayGroup('publication', ['destination_email']); + } + return $this; + } + + protected function addWorkflow($status, $id_cat) { if(!Class_AdminVar::isWorkFlowEnabled()) return $this; @@ -201,7 +214,6 @@ class ZendAfi_Form_Admin_News extends ZendAfi_Form { $current_elements = array_map(function($element) {return $element->getName();}, $display_group->getElements()); $current_elements = array_merge($current_elements, $elements); - return $this->addDisplayGroup($current_elements, $display_group_name, ['legend' => $display_group->getLegend(), 'order' => $display_group->getOrder()]); } diff --git a/library/ZendAfi/Form/Configuration/SearchResult.php b/library/ZendAfi/Form/Configuration/SearchResult.php index f96133b544d1b872f089abcaf654e030c5c11b32..50d0f42e79e38a480196a2912b5a9aa1a8b7f5b5 100644 --- a/library/ZendAfi/Form/Configuration/SearchResult.php +++ b/library/ZendAfi/Form/Configuration/SearchResult.php @@ -30,29 +30,39 @@ class ZendAfi_Form_Configuration_SearchResult extends ZendAfi_Form { public static function newConfigurationWith($conf) { $form = new self(); - $facets_codes=(new Class_Codification())->cleanDeletedFacets($conf['facettes_codes']);//array_filter($conf['facettes_codes'],function($code) { return true;}) + $codification = new Class_Codification(); + + $facets_codes = $codification->cleanDeletedFacets($conf['facettes_codes']); + $list_codes = $codification->cleanDeletedFacets($conf['liste_codes']); + $tags_codes = $codification->cleanDeletedFacets($conf['tags_codes']); + $form ->populate($conf) - ->addSelectedFieldFor('liste_codes', $conf['liste_codes']) - ->addSelectedFieldFor('tags_codes', $conf['tags_codes']) + + ->addSelectedFieldFor('liste_codes', $list_codes) + ->addSelectedFieldFor('tags_codes', $tags_codes) ->addSelectedFieldFor('facettes_codes', $facets_codes) + ->addDisplayGroup(['titre', 'boite', 'suggestion_achat'], 'Generalites', ['legend' => $form->_('Généralités')]) + ->addDisplayGroup(['liste_format', 'liste_nb_par_page', 'liste_codes', 'zones_titre'], 'liste', ['legend' => $form->_('Liste')]) + ->addDisplayGroup(['facettes_actif', 'facettes_nombre', 'facettes_codes', 'facettes_message'], 'facettes', ['legend' => $form->_('Facettes')]) + ->addDisplayGroup(['tags_actif', 'tags_position', 'tags_calcul', @@ -61,6 +71,7 @@ class ZendAfi_Form_Configuration_SearchResult extends ZendAfi_Form { 'tags_message'], 'tags', ['legend' => $form->_('Nuage de tags')]) + ->addCvsGroup() ->addDisplayGroup(['submit'], 'submit', @@ -75,15 +86,18 @@ class ZendAfi_Form_Configuration_SearchResult extends ZendAfi_Form { $this ->setAttrib('id', 'configuration_searchResult') + ->addElement('text', 'titre', ['label' => $this->_('Titre'), 'size' => $this->_text_size]) + ->addElement('select', 'boite', ['label' => $this->_('Style de boite'), 'multiOptions' => (new Class_Profil_Templates( Class_Profil::getCurrentProfil()))->toArray()]) + ->addElement('checkbox', 'suggestion_achat', ['label' => $this->_('Lien "Suggérer un achat"')]) @@ -92,19 +106,18 @@ class ZendAfi_Form_Configuration_SearchResult extends ZendAfi_Form { 'liste_format', ['label' => $this->_('Format'), 'multiOptions' => Class_Systeme_ModulesAppli::getAvailableListeNoticeFormat()]) + ->addElement('text', 'liste_nb_par_page', ['label' => $this->_('Nombre de notices par page'), 'size' => $this->_num_size, - 'validators' => [ - ['name' => 'Between', - 'value' => true, - 'options' => [ - 'min' => 3, - 'max' => 50, - 'messages' => 'Le nombre de notices par page doit être compris entre 3 et 50']] - - ]]) + 'validators' => [['name' => 'Between', + 'value' => true, + 'options' => ['min' => 3, + 'max' => 50, + 'messages' => $this->_('Le nombre de notices par page doit être compris entre %s et %s', + 3, 50)]] + ]]) ->addElement('codeList', 'liste_codes', @@ -112,15 +125,13 @@ class ZendAfi_Form_Configuration_SearchResult extends ZendAfi_Form { 'field' => 'liste', 'values' => '', 'required' => true, - 'validators' => [ - ['name' => 'notEmpty', - 'value' => false, - 'options' => [ 'messages' => 'Indiquez au moins 1 champ à afficher pour la liste']] + 'validators' => [['name' => 'notEmpty', + 'value' => false, + 'options' => [ 'messages' => $this->_('Indiquez au moins 1 champ à afficher pour la liste')]]]]) - ]]) ->addElement('text' , 'zones_titre', - ['label' => $this->_('Zones de titre(séparées par ;)'), + ['label' => $this->_('Zones de titre (séparées par ;)'), 'size' => $this->_text_size]) ->addElement('select', @@ -132,15 +143,12 @@ class ZendAfi_Form_Configuration_SearchResult extends ZendAfi_Form { 'facettes_nombre', ['label' => $this->_("Nombre d'éléments par facette"), 'size' => $this->_num_size, - 'validators' => [ - ['name' => 'Between', - 'value' => true, - 'options' => [ - 'min' => 2, - 'max' => 10, - 'messages' => 'Le nombre de facettes doit être compris entre 2 et 10'] - - ]]]) + 'validators' => [['name' => 'Between', + 'value' => true, + 'options' => ['min' => 2, + 'max' => 10, + 'messages' => $this->_('Le nombre de facettes doit être compris entre %s et %s', + 2, 10)]]]]) ->addElement('codeList', 'facettes_codes', @@ -148,61 +156,60 @@ class ZendAfi_Form_Configuration_SearchResult extends ZendAfi_Form { 'field' => 'facettes', 'values' => '', 'required' => true, - 'validators' => [ - ['name' => 'notEmpty', - 'value' => false, - 'options' => [ 'messages' => 'Indiquez au moins 1 facette à afficher'] - ]]]) + 'validators' => [['name' => 'notEmpty', + 'value' => false, + 'options' => [ 'messages' => $this->_('Indiquez au moins 1 facette à afficher')]]]]) + ->addElement('text', 'facettes_message', ['label' => $this->_('Message au dessus de la boite'), 'size' => $this->_text_size]) + ->addElement('select' , 'tags_actif', ['label' => $this->_('Affichage'), - 'multiOptions' => ['0' => 'Ne pas afficher les tags', - '1'=>'Afficher les tags']]) + 'multiOptions' => ['0' => $this->_('Ne pas afficher les tags'), + '1' => $this->_('Afficher les tags')]]) + ->addElement('select' , 'tags_position', ['label' => $this->_('Position'), - 'multiOptions' => ['2' => 'A côté de la liste', - '1'=>'Sous la liste']]) + 'multiOptions' => ['2' => $this->_('A côté de la liste'), + '1' => $this->_('Sous la liste')]]) ->addElement('select' , 'tags_calcul', ['label' => $this->_('Mode de calcul des tranches'), - 'multiOptions' => ['0' => 'Par répartition', - '1'=>'Par écart à la moyenne', - '2' => 'Par écart à la moyenne pondéré']]) + 'multiOptions' => ['0' => $this->_('Par répartition'), + '1' => $this->_('Par écart à la moyenne'), + '2' => $this->_('Par écart à la moyenne pondéré')]]) ->addElement('text', 'tags_nombre', ['label' => $this->_('Nombre de tags à afficher'), 'size' => $this->_num_size, - 'validators' => [ - ['name' => 'Between', - 'value' => true, - 'options' => [ - 'min' => 5, - 'max' => 1000, - 'messages' =>'Le nombre de tags doit être compris entre 5 et 1000'] - - ]]]) + 'validators' => [['name' => 'Between', + 'value' => true, + 'options' => ['min' => 5, + 'max' => 1000, + 'messages' => $this->_('Le nombre de tags doit être compris entre %s et %s', + 5, 1000)]]]]) + ->addElement('codeList', 'tags_codes', ['label' => $this->_('Types de tags'), 'field' => 'tags', 'values' => '', 'required' => true, - 'validators' => [ - ['name' => 'notEmpty', - 'value' => false, - 'options' => [ 'messages' => $this->_('Indiquez au moins 1 type de tag à afficher')]] + 'validators' => [['name' => 'notEmpty', + 'value' => false, + 'options' => [ 'messages' => $this->_('Indiquez au moins 1 type de tag à afficher')]]]]) - ]]) ->addElement('text', 'tags_message', ['label' => $this->_('Message au dessus de la boite'), 'size' => $this->_text_size]) + ->addCvsElement() + ->addElement('submit', 'submit', ['label' => $this->_('Valider')]); @@ -210,15 +217,16 @@ class ZendAfi_Form_Configuration_SearchResult extends ZendAfi_Form { public function addSelectedFieldFor($element, $values) { - $this->$element->setValues($values); return $this; } public function addCvsElement() { - if(Class_AdminVar::isCVSEnabled()) - $this + if (!Class_AdminVar::isCVSEnabled()) + return $this; + + $this ->addElement('select' , 'cvs_display_position', ['label' => $this->_('Affichage'), @@ -231,18 +239,22 @@ class ZendAfi_Form_Configuration_SearchResult extends ZendAfi_Form { 'cvs_resultat_titre', ['label' => $this->_('Titre de la boîte'), 'size' => $this->_text_size]) + ->addElement('text', 'cvs_autres_resultats', ['label' => $this->_('Titre résultat recherche'), 'size' => $this->_text_size]) + ->addElement('text', 'cvs_nb_result', ['label' => $this->_('Nombre de résultats à afficher'), 'size' => $this->_num_size]) + ->addElement('text', 'cvs_msg_deco', ['label' => $this->_('Message utilisateur déconnecté'), 'size' => $this->_text_size]) + ->addElement('text', 'cvs_msg_droit', ['label' => $this->_("Message utilisateur sans droit d'accès"), @@ -253,17 +265,18 @@ class ZendAfi_Form_Configuration_SearchResult extends ZendAfi_Form { public function addCvsGroup() { - if(Class_AdminVar::isCVSEnabled()) - $this->addDisplayGroup(['cvs_display_position', - 'cvs_resultat_titre', - 'cvs_autres_resultats', - 'cvs_nb_result', - 'cvs_msg_deco', - 'cvs_msg_droit'], - 'cvs', - ['legend' => $this->_('Résultats CVS')]); + if (!Class_AdminVar::isCVSEnabled()) + return $this; + + $this->addDisplayGroup(['cvs_display_position', + 'cvs_resultat_titre', + 'cvs_autres_resultats', + 'cvs_nb_result', + 'cvs_msg_deco', + 'cvs_msg_droit'], + 'cvs', + ['legend' => $this->_('Résultats CVS')]); return $this; } - } ?> \ No newline at end of file diff --git a/library/ZendAfi/Form/Decorator/CodeList.php b/library/ZendAfi/Form/Decorator/CodeList.php index 19d0f905991d9e751f6f443b8fa43b71f52da2c4..9b92272631de1f885fb3393fe4b46c6d41d1e2cb 100644 --- a/library/ZendAfi/Form/Decorator/CodeList.php +++ b/library/ZendAfi/Form/Decorator/CodeList.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_Form_Decorator_CodeList extends Zend_Form_Decorator_Abstract { /** @@ -24,8 +24,8 @@ class ZendAfi_Form_Decorator_CodeList extends Zend_Form_Decorator_Abstract { * @return string */ public function render($content) { - $data = $this->_element->getView()->tagSelectionChamps($this->_element->getField(), $this->_element->getValues()); - return $data['codes_dispo'].$data["liste_codes"].$data["champ_libelle"].$data["bloc_saisie"]; + return $this->_element->getView() + ->tagSelectionChamps($this->_element->getField(), $this->_element->getValues()); } } ?> \ No newline at end of file diff --git a/library/ZendAfi/Mail.php b/library/ZendAfi/Mail.php index b1592a045c1b2b2df55f8009be9343279e9f60fb..fc8ab96a5d515226fd111a3767a757d5b35d109e 100644 --- a/library/ZendAfi/Mail.php +++ b/library/ZendAfi/Mail.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_Mail extends Zend_Mail { @@ -24,15 +24,22 @@ class ZendAfi_Mail extends Zend_Mail { parent::__construct($charset); } + public function addTo($email, $name='') { - $validator = new Zend_Validate_EmailAddress(); - $mails = array_filter(preg_split('/\s*[,;]\s*/', $email), + $validator = $this->_getValidator(); + $mails = array_filter( + preg_split('/\s*[,;]\s*/', $email), function($value) use ($validator) { - return $validator->isValid($value); + try { + return $validator->isValid($value); + } catch(Zend_Validate_Exception $e) { + return false; + } }); foreach ($mails as $recipient) parent::addTo($recipient, $name); + return $this; } @@ -43,7 +50,7 @@ class ZendAfi_Mail extends Zend_Mail { public function addBcc($email) { - $validator = new Zend_Validate_EmailAddress(); + $validator = $this->_getValidator(); try { if ($validator->isValid($email)) @@ -54,34 +61,37 @@ class ZendAfi_Mail extends Zend_Mail { return $this; } - /** - * Sets the subject of the message - * - * @param string $subject - * @return Zend_Mail Provides fluent interface - * @throws Zend_Mail_Exception - */ - public function setSubject($subject) - { - if ($this->_subject === null) { - $subject = strtr($subject,"\r\n\t",'???'); - $this->_subject = $subject; - $this->_storeHeader('Subject', $this->_subject); - } else { - /** - * @see Zend_Mail_Exception - */ - require_once 'Zend/Mail/Exception.php'; - throw new Zend_Mail_Exception('Subject set twice'); - } - return $this; - } - - - public function setBodyText($txt, $charset = null, $encoding = Zend_Mime::ENCODING_QUOTEDPRINTABLE) { - parent::setBodyText($txt,'utf-8',Zend_Mime::ENCODING_8BIT); + + protected function _getValidator() { + return new Zend_Validate_EmailAddress(); + } + + + /** + * @param string $subject + * @return Zend_Mail Provides fluent interface + * @throws Zend_Mail_Exception + */ + public function setSubject($subject) { + if ($this->_subject === null) { + $subject = strtr($subject, "\r\n\t", '???'); + $this->_subject = $subject; + $this->_storeHeader('Subject', $this->_subject); return $this; } + + /** + * @see Zend_Mail_Exception + */ + require_once 'Zend/Mail/Exception.php'; + throw new Zend_Mail_Exception('Subject set twice'); + } + + + public function setBodyText($txt, $charset = null, $encoding = Zend_Mime::ENCODING_QUOTEDPRINTABLE) { + parent::setBodyText($txt, 'utf-8', Zend_Mime::ENCODING_8BIT); + return $this; + } } ?> \ No newline at end of file diff --git a/library/ZendAfi/Validate/Facette.php b/library/ZendAfi/Validate/Facette.php index aa9a24af1f78ed3ec1b91912bbb344c69e290533..f058e873e326047ddfe5a301b59354ff8a6f8fed 100644 --- a/library/ZendAfi/Validate/Facette.php +++ b/library/ZendAfi/Validate/Facette.php @@ -16,11 +16,12 @@ * * 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_Validate_Facette extends Zend_Validate_Abstract { const INVALID_FACETTE = 'invalidFacette'; - + + protected $_messageTemplates = [self::INVALID_FACETTE => "'%value%' n'est pas une facette valide"]; public function isValid($value) { @@ -28,7 +29,7 @@ class ZendAfi_Validate_Facette extends Zend_Validate_Abstract { $this->_setValue($value); /** Facettes valides: YMET Lfre S234*/ - if (preg_match('/^(Y\w+)|(L\w+)|([A-Z]+\d+)$/', $value)) + if (preg_match('/^(Y\w+)|(L\w+)|([A-Z]+\d+)|([A-Z]+\d+\S+\d+)$/', $value)) return true; $this->_error(self::INVALID_FACETTE); diff --git a/library/ZendAfi/View/Helper/Admin/TagSelectionChamps.php b/library/ZendAfi/View/Helper/Admin/TagSelectionChamps.php index 8845f55d8c2427e426ecb88d41951f099e90de80..cc07c8bf76fb33f2f91247fd853e062c7541a372 100644 --- a/library/ZendAfi/View/Helper/Admin/TagSelectionChamps.php +++ b/library/ZendAfi/View/Helper/Admin/TagSelectionChamps.php @@ -18,106 +18,117 @@ * along with BOKEH; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -////////////////////////////////////////////////////////////////////////////////////////// -// OPAC3 : Tag de selection de champs -// fonctionne avec les scripts drag_and_drop.js et selection_champs.js -////////////////////////////////////////////////////////////////////////////////////////// -class ZendAfi_View_Helper_Admin_TagSelectionChamps extends ZendAfi_View_Helper_BaseHelper -{ - - public function TagSelectionChamps($rubrique,$valeurs='') { - $ret=[]; - $champs=''; - - if($rubrique == "libelles") - return $this->getInitLibelles(); - if($rubrique == "liste") - $champs="JTANECR9F"; - if($rubrique == "facettes") { - $champs="AFMDPLGSBYZV"; - $champs.=Class_CodifThesaurus::getFacettesIndex(); - } - - if($rubrique == "tags") - $champs="AFMDPZ"; - if($rubrique == "champs") - $champs="TJAMDPLGSBECNR9F"; - if($rubrique == "type_tags") - $champs="AMDPZY"; - if($rubrique == "champs_tags") - $champs="AMDPZY"; - - // Champs code et libelle - $ret["codes_dispo"]='<script>codes_champ["'.$rubrique.'"]="'.$champs.'";</script>'; - $ret["liste_codes"]='<input id="'.$rubrique.'_codes" type="hidden" name="'.$rubrique.'_codes" value="'.$valeurs.'">'; - $libelles = ''; - - $rubriques_selectionnees=Class_Notice_RubriqueFacette::parseRubriquesFromPreferenceField($valeurs); - foreach ($rubriques_selectionnees as $rubrique_facette) - { - if (strlen($rubrique_facette->getLibelle())==0) - continue; - $code_rubrique=$rubrique_facette->getCode(); - if($libelles) $libelles.=", "; - - $libelles.= $rubrique_facette->getLibelle();//Class_Codification::getInstance()->getNomChamp($valeurs[$i]); - } - $ret["champ_libelle"]='<div id="'.$rubrique.'_libelle" class="drag_libelle" style="min-height:15px" onclick="afficherRubrique(\''.$rubrique.'\');">'.$libelles.'</div>'; - - // Bloc de sélection - $bloc='<div id="'.$rubrique.'_mainDiv" class="drag_container">'; - $hauteur=(strlen($champs) * 26)."px"; - // Items selectionnés - $bloc.='<table><tr><td><div id="'.$rubrique.'_leftColumn" class="titre_colonne">'.$this->translate()->_('Champs sélectionnés'); - $bloc.='<div id="'.$rubrique.'_dropContent" class="drop_box" style="height:'.$hauteur.'">'; - - foreach ($rubriques_selectionnees as $rubrique_facette) { - - $code_facette=$rubrique_facette->getCode(); - $nom_facette= $rubrique_facette->getLibelle(); - if ($nom_facette=='') - continue; - $bloc.='<div class="drag_item" id="'.$rubrique.'_box_'.$code_facette.'" code="'.$code_facette.'">'.$nom_facette.'</div>'; - - } - $bloc.='</div></td>'; - // Items non selectionnes - $bloc.='<td><div id="'.$rubrique.'_rightColumn" class="titre_colonne">'.$this->translate()->_('Champs disponibles'); - $bloc.='<div id="'.$rubrique.'_dropBox" class="drop_box" style="height:'.$hauteur.'">'; - $rubriques= Class_Notice_RubriqueFacette::parseRubriquesFromPreferenceField($champs); - foreach ($rubriques as $rubrique_facette) { - $found=false; - foreach ($rubriques_selectionnees as $rubrique_facette_selectionnes) { - if ($rubrique_facette_selectionnes->getCode()==$rubrique_facette->getCode()) { - $found=true; - break; - } - } - - if($found) continue; - $code=$rubrique_facette->getCode(); - $nom_facette= $rubrique_facette->getLibelle();//Class_Codification::getInstance()->getNomChamp($code); - - $bloc.='<div class="drag_item" id="'.$rubrique.'_box_'.$code.'" code="'.$code.'">'.$nom_facette.'</div>'; - - } - $bloc.='</div></div></td>'; - // fin - $bloc.='</tr></table></div>'; - $ret["bloc_saisie"]=$bloc; - return $ret; + +class ZendAfi_View_Helper_Admin_TagSelectionChamps extends ZendAfi_View_Helper_BaseHelper { + + public function tagSelectionChamps($heading, $facets='') { + $existing = Class_Notice_RubriqueFacette::parseRubriquesFromPreferenceField($facets); + $available = Class_Notice_RubriqueFacette::parseRubriquesFromPreferenceField(array_diff($this->getAvailableFieldsFor($heading), + $this->facetCodesFrom($existing))); + + return $this->dragAndDropFacets($heading, $existing, $available); + } + + + protected function getAvailableFieldsFor($heading) { + if ('libelles' == $heading) + return (new Class_Codification)->getNomChamp('tous'); + + if ('liste' == $heading) + return ['J', 'T', 'A', 'N', 'E', 'C', 'R', '9', 'F']; + + if ('facettes' == $heading) + return array_merge(['A', 'F', 'M', 'D', 'P', 'L', 'G', 'S', 'B', 'Y', 'Z', 'V'], + Class_CodifThesaurus::getFacettesIndex()); + + if ('tags' == $heading) + return ['A', 'F', 'M', 'D', 'P', 'Z']; + + if ('champs' == $heading) + return ['T', 'J', 'A', 'M', 'D', 'P', 'L', 'G', 'S', 'B', 'E', 'C', 'N', 'R', '9', 'F']; + + if (in_array($heading, ['type_tags', 'champs_tags'])) + return ['A', 'M', 'D', 'P', 'Z', 'Y']; + + return []; + } + + + protected function dragAndDropFacets($heading, $existing, $available) { + $jq_selector = '[data-heading=' . $heading . ']'; + Class_ScriptLoader::getInstance() + ->loadJQuery() + ->loadJQueryUI() + ->addJQueryReady('$(".show_drag_and_drop").click(function() {$(this).siblings("div").toggle()});') + ->addJQueryReady('$("' . $jq_selector . ' ul").sortable({ +connectWith: "' . $jq_selector . ' ul", +update: function() { +var facets_values = ""; +var facets_labels = ""; +$("' . $jq_selector . ' .selected_facets").find("li").each(function() { + facets_values += $(this).data("code") + ";"; + facets_labels += $(this).data("label") + ","; +}); +$("' . $jq_selector . '").find("input").val(facets_values); +$("' . $jq_selector . '").find("p").text(facets_labels);}}); +$("' . $jq_selector . ' ul").disableSelection();'); + + return $this->_tag('div', + $this->selectedFacets($existing) + . $this->listFacets($this->_('Facettes sélectionnées'), $existing, ['class' => 'selected_facets']) + . $this->listFacets($this->_('Facettes disponibles'), $available, ['class' => 'available_facets']) + . $this->_tag('input' , '', ['type' => 'hidden', + 'value' => $this->recordableFacets($existing), + 'name' => $heading . '_codes']), + ['data-heading' => $heading, + 'class' => 'drag_and_drop_widget']); + } + + + protected function selectedFacets($facets) { + return $this->_tag('p', implode(',', $this->facetLabelsFrom($facets)), + ['class' => 'show_drag_and_drop']); + } + + + protected function listFacets($heading, $facets, $settings=[]) { + return $this + ->_tag('div', + $this->_tag('h4', $heading) . ' ' . $this->listFacetsBody($facets), + $settings); + } + + + protected function listFacetsBody($facets) { + $renderer = function($facet) { + return $this->_tag('li', $facet->getLibelle(), + ['data-code' => $facet->getCode(), + 'data-label' => $facet->getLibelle()]); + }; + + return $this->_tag('ul', implode('', $this->collectFromFacets($facets, $renderer)), + ['class' => 'drag_and_drop']); + } + + + protected function recordableFacets($facets) { + return implode(';', $this->facetCodesFrom($facets)); } - private function getInitLibelles() - { - $js='<script>'; - $libs=Class_Codification::getInstance()->getNomChamp("tous"); + protected function facetCodesFrom($facets) { + return $this->collectFromFacets($facets, + function($facet) { return $facet->getCode(); }); + } + - foreach($libs as $key => $libelle) $js.='libelle_champ["'.$key.'"]="'.$libelle.'";'; - $js.='</script>'; - return $js; + protected function facetLabelsFrom($facets) { + return $this->collectFromFacets($facets, + function($facet) { return $facet->getLibelle(); }); } -} -?> \ No newline at end of file + + protected function collectFromFacets($facets, $closure) { + return array_unique(array_map($closure, $facets)); + } +} \ No newline at end of file diff --git a/library/ZendAfi/View/Helper/Facettes.php b/library/ZendAfi/View/Helper/Facettes.php index 894440616b0e1336971126e2725ec2d4b0092b42..f46781df59161a1dde479658f5912542b2a793ba 100644 --- a/library/ZendAfi/View/Helper/Facettes.php +++ b/library/ZendAfi/View/Helper/Facettes.php @@ -45,13 +45,13 @@ class ZendAfi_View_Helper_Facettes extends ZendAfi_View_Helper_BaseHelper { 'action' => 'simple', 'page' => null]); + $codes = $this->_preferences['facettes_codes']; + $separator = preg_match('/;/', $codes) ? ';' : ''; + $codes = 'T' . $separator . $codes; - return $this - ->_tag('div', - $this->listeFacettesHTML('T' . $this->_preferences['facettes_codes'], - $facets, - $url), - ['class' => 'facette']); + return $this->_tag('div', + $this->listeFacettesHTML($codes, $facets, $url), + ['class' => 'facette']); } diff --git a/library/ZendAfi/View/Helper/RenderForm.php b/library/ZendAfi/View/Helper/RenderForm.php index e0e333e060ccd2ed3d440e6e3d1a9933adca0265..d7847952eec5473f009cc6522732b1503dac1c4f 100644 --- a/library/ZendAfi/View/Helper/RenderForm.php +++ b/library/ZendAfi/View/Helper/RenderForm.php @@ -80,7 +80,6 @@ class ZendAfi_View_Helper_RenderForm extends ZendAfi_View_Helper_BaseHelper { protected function _decoratorsForTableRendering($element) { $newDecorators = array(); $decorators = $element->getDecorators(); - foreach ($decorators as $name => $decorator) { $name = explode('_', $name); $name = end($name); diff --git a/library/ZendAfi/View/Helper/TagOneDTouch.php b/library/ZendAfi/View/Helper/TagOneDTouch.php index 6e0fcdde074b9594d5dd100edb54a05be8b23c58..195ee426e26e22d8d3960baa660e60b5e36e7858 100644 --- a/library/ZendAfi/View/Helper/TagOneDTouch.php +++ b/library/ZendAfi/View/Helper/TagOneDTouch.php @@ -24,7 +24,7 @@ class ZendAfi_View_Helper_TagOneDTouch extends ZendAfi_View_Helper_BaseHelper { public function tagOneDTouch($album) { return $this->_tag('a', $this->_('Écouter l\'album sur 1DTouch'), - [ 'href' => Class_OneDTouchLink::urlFor($album) ]); + ['href' => Class_OneDTouchLink::urlFor($album)]); } } ?> \ No newline at end of file diff --git a/library/startup.php b/library/startup.php index c4851a1ea0a7724554c1cf85a58bb00abe5de02d..0ba62bea3b1305e6e7759eb4faa2b7a381fad539 100644 --- a/library/startup.php +++ b/library/startup.php @@ -21,336 +21,340 @@ if (!function_exists('xdebug_break')) { - function xdebug_break(){}; + function xdebug_break(){}; } function setupOpac() { - require_once('Class/Url.php'); + require_once('Class/Url.php'); - defineConstant('ROOT_URL', Class_Url::rootUrl()); - defineConstant('BASE_URL', Class_Url::baseUrl()); + defineConstant('ROOT_URL', Class_Url::rootUrl()); + defineConstant('BASE_URL', Class_Url::baseUrl()); - require_once "Zend/Loader.php"; - Zend_Loader::registerAutoload(); + require_once "Zend/Loader.php"; + Zend_Loader::registerAutoload(); - setupConstants(); - require_once('requires.php'); + setupConstants(); + require_once('requires.php'); - $cfg = loadConfig(); - setupSession($cfg); - setupDatabase($cfg); - Class_AdminVar::findAll(); - setupLanguage(); - setupDevOptions($cfg); - setupControllerActionHelper(); - setupHTTPClient($cfg); - setupCache($cfg); - setupMail($cfg); + $cfg = loadConfig(); + setupSession($cfg); + setupDatabase($cfg); + Class_AdminVar::findAll(); + setupLanguage(); + setupDevOptions($cfg); + setupControllerActionHelper(); + setupHTTPClient($cfg); + setupCache($cfg); + setupMail($cfg); - $front_controller = setupFrontController($cfg); - setupPagination(); - setupRestful(); + $front_controller = setupFrontController($cfg); + setupPagination(); + setupRestful(); - return $front_controller; + return $front_controller; } function defineConstant($name, $value) { - if (!defined($name)) - define($name, $value); + if (!defined($name)) + define($name, $value); } function setupConstants() { - defineConstant('BOKEH_MAJOR_VERSION','7.3'); - defineConstant('BOKEH_RELEASE_NUMBER', BOKEH_MAJOR_VERSION . '.10'); + defineConstant('BOKEH_MAJOR_VERSION','7.3'); + defineConstant('BOKEH_RELEASE_NUMBER', BOKEH_MAJOR_VERSION . '.12'); - defineConstant('ROOT_PATH', realpath(dirname(__FILE__).'/..').'/'); + defineConstant('BOKEH_REMOTE_FILES', 'http://git.afi-sa.fr/afi/opacce/'); - defineConstant('ZEND_FRAMEWORK_PATH', ROOT_PATH . 'library/storm/zf/library/'); + defineConstant('BOKEH_VERSION', (substr(BOKEH_MAJOR_VERSION, -1) % 2) ? 'master' : 'stable'); - defineConstant('MODULEDIRECTORY', ROOT_PATH . 'application/modules'); - defineConstant('LANG_DIR', ROOT_PATH . 'library/translation/'); + defineConstant('ROOT_PATH', realpath(dirname(__FILE__).'/..').'/'); - defineConstant('USERFILESPATH', './userfiles'); - defineConstant('USERFILESURL', BASE_URL . '/userfiles/'); - defineConstant('PATH_TEMP', ROOT_PATH . 'temp/'); + defineConstant('ZEND_FRAMEWORK_PATH', ROOT_PATH . 'library/storm/zf/library/'); - defineConstant('CKBASEPATH', 'ckeditor/'); - defineConstant('CKBASEURL', BASE_URL . '/ckeditor/'); + defineConstant('MODULEDIRECTORY', ROOT_PATH . 'application/modules'); + defineConstant('LANG_DIR', ROOT_PATH . 'library/translation/'); - defineConstant('AMBERURL', BASE_URL . '/amber/'); + defineConstant('USERFILESPATH', './userfiles'); + defineConstant('USERFILESURL', BASE_URL . '/userfiles/'); + defineConstant('PATH_TEMP', ROOT_PATH . 'temp/'); - defineConstant('URL_ADMIN_CSS', BASE_URL . '/public/admin/css/'); - defineConstant('URL_ADMIN_IMG', BASE_URL . '/public/admin/images/'); - defineConstant('URL_ADMIN_JS', BASE_URL . '/public/admin/js/'); + defineConstant('CKBASEPATH', 'ckeditor/'); + defineConstant('CKBASEURL', BASE_URL . '/ckeditor/'); - defineConstant('JQUERY', URL_ADMIN_JS . 'jquery-1.8.3.js'); - defineConstant('JQUERYMOBILE_VERSION', '1.4.5'); - defineConstant('JQUERYUI', URL_ADMIN_JS . 'jquery_ui/jquery-ui-1.10.3.full.js'); - defineConstant("URL_JS", BASE_URL . "/public/opac/js/"); - defineConstant("URL_EPUB", BASE_URL . "/temp/epub/"); - defineConstant("URL_SHARED_IMG", BASE_URL . "/public/opac/images/"); + defineConstant('AMBERURL', BASE_URL . '/amber/'); - // il y a des autre define URL dans ZendAfi_Controller_Plugin_DefineURLs - // par exemple URL_IMG, URL_CSS, URL_HTML et URL_JS va chercher dans 'URL_SKIN . 'nom de le module' . /html' etc. - defineConstant('BR','<br />'); - defineConstant('NL',"\n"); - defineConstant('CRLF', chr(13).chr(10)); + defineConstant('URL_ADMIN_CSS', BASE_URL . '/public/admin/css/'); + defineConstant('URL_ADMIN_IMG', BASE_URL . '/public/admin/images/'); + defineConstant('URL_ADMIN_JS', BASE_URL . '/public/admin/js/'); - defineConstant('URL_FLASH', BASE_URL . '/public/opac/flash/'); - defineConstant('PATH_FLASH', ROOT_PATH . 'public/opac/flash/'); - defineConstant('URL_JAVA', BASE_URL . '/public/opac/java/'); - defineConstant('PATH_JAVA', ROOT_PATH . 'public/opac/java/'); - defineConstant('PATH_ADMIN_SUPPORTS', ROOT_PATH . 'public/admin/images/supports/'); + defineConstant('JQUERY', URL_ADMIN_JS . 'jquery-1.8.3.js'); + defineConstant('JQUERYMOBILE_VERSION', '1.4.5'); + defineConstant('JQUERYUI', URL_ADMIN_JS . 'jquery_ui/jquery-ui-1.10.3.full.js'); + defineConstant("URL_JS", BASE_URL . "/public/opac/js/"); + defineConstant("URL_EPUB", BASE_URL . "/temp/epub/"); + defineConstant("URL_SHARED_IMG", BASE_URL . "/public/opac/images/"); - defineConstant('PATH_FONTS', ROOT_PATH . 'public/opac/fonts/'); - defineConstant('URL_CAPTCHA', BASE_URL . '/public/captcha/'); - defineConstant('PATH_CAPTCHA', ROOT_PATH . 'public/captcha/'); - defineConstant('CACHE_LIFETIME', 3600); - defineConstant('MEMCACHED_ENABLE', false); - defineConstant('MEMCACHED_HOST', 'localhost'); - defineConstant('MEMCACHED_PORT', '11211'); + // il y a des autre define URL dans ZendAfi_Controller_Plugin_DefineURLs + // par exemple URL_IMG, URL_CSS, URL_HTML et URL_JS va chercher dans 'URL_SKIN . 'nom de le module' . /html' etc. + defineConstant('BR','<br />'); + defineConstant('NL',"\n"); + defineConstant('CRLF', chr(13).chr(10)); - defineConstant('IMAGE_MAGICK_PATH', 'convert'); + defineConstant('URL_FLASH', BASE_URL . '/public/opac/flash/'); + defineConstant('PATH_FLASH', ROOT_PATH . 'public/opac/flash/'); + defineConstant('URL_JAVA', BASE_URL . '/public/opac/java/'); + defineConstant('PATH_JAVA', ROOT_PATH . 'public/opac/java/'); + defineConstant('PATH_ADMIN_SUPPORTS', ROOT_PATH . 'public/admin/images/supports/'); - defineConstant('PATCH_PATH', ROOT_PATH . '/cosmogramme/sql/patch/'); + defineConstant('PATH_FONTS', ROOT_PATH . 'public/opac/fonts/'); + defineConstant('URL_CAPTCHA', BASE_URL . '/public/captcha/'); + defineConstant('PATH_CAPTCHA', ROOT_PATH . 'public/captcha/'); + defineConstant('CACHE_LIFETIME', 3600); + defineConstant('MEMCACHED_ENABLE', false); + defineConstant('MEMCACHED_HOST', 'localhost'); + defineConstant('MEMCACHED_PORT', '11211'); + + defineConstant('IMAGE_MAGICK_PATH', 'convert'); + + defineConstant('PATCH_PATH', ROOT_PATH . '/cosmogramme/sql/patch/'); } function loadConfig($config_init_file_path = './config.ini') { - // load configuration (local ou production) - if(array_isset('REMOTE_ADDR', $_SERVER) and $_SERVER['REMOTE_ADDR'] == '127.0.0.1') - $serveur='local'; - else - $serveur='production'; - $cfg = new Zend_Config_Ini($config_init_file_path, $serveur); - Zend_Registry::set('cfg', $cfg); + // load configuration (local ou production) + if(array_isset('REMOTE_ADDR', $_SERVER) and $_SERVER['REMOTE_ADDR'] == '127.0.0.1') + $serveur='local'; + else + $serveur='production'; + $cfg = new Zend_Config_Ini($config_init_file_path, $serveur); + Zend_Registry::set('cfg', $cfg); - setlocale(LC_TIME, 'fr_FR.UTF-8'); - date_default_timezone_set($cfg->timeZone); + setlocale(LC_TIME, 'fr_FR.UTF-8'); + date_default_timezone_set($cfg->timeZone); - return $cfg; + return $cfg; } function setupCache($cfg) { - if (Class_Users::isCurrentUserCanAccesBackend()) - return; - - $frontendOptions = ['lifetime' => CACHE_LIFETIME, // durée du cache: 1h - 'automatic_serialization' => false, - 'caching' => true]; - - $use_memcached = (MEMCACHED_ENABLE === true); - $backendOptions = $use_memcached - ? ['servers' => [ ['host' => MEMCACHED_HOST, - 'port' => MEMCACHED_PORT] ]] - : ['cache_dir' => PATH_TEMP ]; - - // getting a Zend_Cache_Core object - $cache = Zend_Cache::factory('Core', - $use_memcached ? 'Memcached' : 'File', - $frontendOptions, - $backendOptions); - // $cache->clean(Zend_Cache::CLEANING_MODE_ALL); - - Storm_Cache::setDefaultZendCache($cache); - Storm_Cache::setSeed($cfg->sgbd->config->dbname); + if (Class_Users::isCurrentUserCanAccesBackend()) + return; + + $frontendOptions = ['lifetime' => CACHE_LIFETIME, // durée du cache: 1h + 'automatic_serialization' => false, + 'caching' => true]; + + $use_memcached = (MEMCACHED_ENABLE === true); + $backendOptions = $use_memcached + ? ['servers' => [ ['host' => MEMCACHED_HOST, + 'port' => MEMCACHED_PORT] ]] + : ['cache_dir' => PATH_TEMP ]; + + // getting a Zend_Cache_Core object + $cache = Zend_Cache::factory('Core', + $use_memcached ? 'Memcached' : 'File', + $frontendOptions, + $backendOptions); + // $cache->clean(Zend_Cache::CLEANING_MODE_ALL); + + Storm_Cache::setDefaultZendCache($cache); + Storm_Cache::setSeed($cfg->sgbd->config->dbname); } function setupSession($cfg) { - // Start Session - $session = new Zend_Session_Namespace(md5(BASE_URL)); - if (!isset($session->initialized)) - { - Zend_Session::regenerateId(); - $session->initialized = true; - } - if (!isset($session->baseUrl)) $session->baseUrl = BASE_URL; - Zend_Registry::set('session', $session); + // Start Session + $session = new Zend_Session_Namespace(md5(BASE_URL)); + if (!isset($session->initialized)) + { + Zend_Session::regenerateId(); + $session->initialized = true; + } + if (!isset($session->baseUrl)) $session->baseUrl = BASE_URL; + Zend_Registry::set('session', $session); } function setupLanguage() { - Zend_Locale::setDefault(Class_AdminVar::getDefaultLanguage()); - Zend_Registry::set('locale', new Zend_Locale()); - - $translate = new ZendAfi_Translate('gettext', LANG_DIR.'fr.mo', 'fr'); - foreach (Class_AdminVar::getLanguesWithoutDefault() as $language) { - $filename = LANG_DIR.$language.'.mo'; - if (file_exists($filename)) - $translate->addTranslation($filename, $language); - } - Zend_Registry::set('translate', $translate); - - Zend_Validate_Abstract::setDefaultTranslator($translate); + Zend_Locale::setDefault(Class_AdminVar::getDefaultLanguage()); + Zend_Registry::set('locale', new Zend_Locale()); + + $translate = new ZendAfi_Translate('gettext', LANG_DIR.'fr.mo', 'fr'); + foreach (Class_AdminVar::getLanguesWithoutDefault() as $language) { + $filename = LANG_DIR.$language.'.mo'; + if (file_exists($filename)) + $translate->addTranslation($filename, $language); + } + Zend_Registry::set('translate', $translate); + + Zend_Validate_Abstract::setDefaultTranslator($translate); } function setupDatabase($cfg) { - // setup database - $sql = Zend_Db::factory($cfg->sgbd->adapter, $cfg->sgbd->config->toArray()); - $sql->usePrepared(false); - Zend_Db_Table::setDefaultAdapter($sql); + // setup database + $sql = Zend_Db::factory($cfg->sgbd->adapter, $cfg->sgbd->config->toArray()); + $sql->usePrepared(false); + Zend_Db_Table::setDefaultAdapter($sql); - $afi_sql = new Class_Systeme_Sql(); - Zend_Registry::set('sql', $afi_sql); + $afi_sql = new Class_Systeme_Sql(); + Zend_Registry::set('sql', $afi_sql); - Zend_Db_Table::getDefaultAdapter()->query('set names "UTF8"'); + Zend_Db_Table::getDefaultAdapter()->query('set names "UTF8"'); } function setupDevOptions($cfg) { - //permet d'activer les fonctions en développement - if (null !== $experimental_dev = $cfg->get('experimental_dev')) - defineConstant('DEVELOPMENT', $experimental_dev); + //permet d'activer les fonctions en développement + if (null !== $experimental_dev = $cfg->get('experimental_dev')) + defineConstant('DEVELOPMENT', $experimental_dev); } function setupControllerActionHelper() { - Zend_Controller_Action_HelperBroker::resetHelpers(); - Zend_Controller_Action_HelperBroker::addHelper(new ZendAfi_Controller_Action_Helper_ViewRenderer()); - Zend_Controller_Action_HelperBroker::addPrefix('ZendAfi_Controller_Action_Helper'); + Zend_Controller_Action_HelperBroker::resetHelpers(); + Zend_Controller_Action_HelperBroker::addHelper(new ZendAfi_Controller_Action_Helper_ViewRenderer()); + Zend_Controller_Action_HelperBroker::addPrefix('ZendAfi_Controller_Action_Helper'); } function setupHTTPClient($cfg) { - //set up HTTP Client to use proxy settings - $httpClient = new Zend_Http_Client(); - if ( (isset ($cfg->proxy->host) ) || ($cfg->proxy->host != '') ){ - $proxyConfig = array( - 'adapter' => 'Zend_Http_Client_Adapter_Proxy', - 'proxy_host' => $cfg->proxy->host, - 'proxy_port' => $cfg->proxy->port, - 'proxy_user' => $cfg->proxy->user, - 'proxy_pass' => $cfg->proxy->pass - ); - Zend_Registry::set('http_proxy',$proxyConfig); - - $proxy_adapter = new Zend_Http_Client_Adapter_Proxy(); - $proxy_adapter->setConfig($proxyConfig); - $httpClient->setAdapter($proxy_adapter); - }else{ - $proxyConfig = null; - } - - $httpClient->setConfig(array('timeout' => 2)); - Zend_Registry::set('httpClient',$httpClient); + //set up HTTP Client to use proxy settings + $httpClient = new Zend_Http_Client(); + if ( (isset ($cfg->proxy->host) ) || ($cfg->proxy->host != '') ){ + $proxyConfig = array( + 'adapter' => 'Zend_Http_Client_Adapter_Proxy', + 'proxy_host' => $cfg->proxy->host, + 'proxy_port' => $cfg->proxy->port, + 'proxy_user' => $cfg->proxy->user, + 'proxy_pass' => $cfg->proxy->pass + ); + Zend_Registry::set('http_proxy',$proxyConfig); + + $proxy_adapter = new Zend_Http_Client_Adapter_Proxy(); + $proxy_adapter->setConfig($proxyConfig); + $httpClient->setAdapter($proxy_adapter); + }else{ + $proxyConfig = null; + } + + $httpClient->setConfig(array('timeout' => 2)); + Zend_Registry::set('httpClient',$httpClient); } function setupMail($cfg) { - if (isset($cfg->mail->transport->smtp)) { - ZendAfi_Mail::setDefaultTransport(new Zend_Mail_Transport_Smtp($cfg->mail->transport->smtp->host, - $cfg->mail->transport->smtp->toArray())); - return; - } - - if (defined('SMTP_HOST')) - ZendAfi_Mail::setDefaultTransport(new Zend_Mail_Transport_Smtp(SMTP_HOST)); + if (isset($cfg->mail->transport->smtp)) { + ZendAfi_Mail::setDefaultTransport(new Zend_Mail_Transport_Smtp($cfg->mail->transport->smtp->host, + $cfg->mail->transport->smtp->toArray())); + return; + } + + if (defined('SMTP_HOST')) + ZendAfi_Mail::setDefaultTransport(new Zend_Mail_Transport_Smtp(SMTP_HOST)); } function newFrontController() { - return Zend_Controller_Front::getInstance() - ->setDispatcher(new ZendAfi_Controller_Dispatcher_Standard()) - ->addModuleDirectory(MODULEDIRECTORY) - ->setDefaultModule('opac') - ->registerPlugin(new ZendAfi_Controller_Plugin_SetupDomain()) - ->registerPlugin(new ZendAfi_Controller_Plugin_AdminAuth()) - ->registerPlugin(new ZendAfi_Controller_Plugin_SetupLocale()) - ->registerPlugin(new ZendAfi_Controller_Plugin_DefineURLs()) - ->registerPlugin(new ZendAfi_Controller_Plugin_InitModule()) - ->registerPlugin(new ZendAfi_Controller_Plugin_SelectionBib()) - ->registerPlugin(new ZendAfi_Controller_Plugin_System()) - ->registerPlugin(new ZendAfi_Controller_Plugin_Popup()) - ->registerPlugin(new ZendAfi_Controller_Plugin_TogetherJS()) - ->registerPlugin(new ZendAfi_Controller_Plugin_CustomFields()) - ->registerPlugin(new ZendAfi_Controller_Plugin_Lectura()) - ->registerPlugin(new ZendAfi_Controller_Plugin_InspectorGadget()) - ->setParam('useDefaultControllerAlways', false); + return Zend_Controller_Front::getInstance() + ->setDispatcher(new ZendAfi_Controller_Dispatcher_Standard()) + ->addModuleDirectory(MODULEDIRECTORY) + ->setDefaultModule('opac') + ->registerPlugin(new ZendAfi_Controller_Plugin_SetupDomain()) + ->registerPlugin(new ZendAfi_Controller_Plugin_AdminAuth()) + ->registerPlugin(new ZendAfi_Controller_Plugin_SetupLocale()) + ->registerPlugin(new ZendAfi_Controller_Plugin_DefineURLs()) + ->registerPlugin(new ZendAfi_Controller_Plugin_InitModule()) + ->registerPlugin(new ZendAfi_Controller_Plugin_SelectionBib()) + ->registerPlugin(new ZendAfi_Controller_Plugin_System()) + ->registerPlugin(new ZendAfi_Controller_Plugin_Popup()) + ->registerPlugin(new ZendAfi_Controller_Plugin_TogetherJS()) + ->registerPlugin(new ZendAfi_Controller_Plugin_CustomFields()) + ->registerPlugin(new ZendAfi_Controller_Plugin_Lectura()) + ->registerPlugin(new ZendAfi_Controller_Plugin_InspectorGadget()) + ->setParam('useDefaultControllerAlways', false); } function setupFrontController($cfg) { - $front_controller = newFrontController() - ->addControllerDirectory(ROOT_PATH.'afi/application/modules/opacpriv/controllers','opacpriv') - ->setBaseURL(BASE_URL); - - setupRoutes($front_controller, $cfg); - - if (!Class_Users::isCurrentUserSuperAdmin()) - return $front_controller; - - $front_controller->registerPlugin(new ZendAfi_Controller_Plugin_XHProfile()); - return $front_controller; - set_include_path(get_include_path() . PATH_SEPARATOR . ROOT_PATH.'library/ZFDebug/library'); - return $front_controller - ->registerPlugin(new ZFDebug_Controller_Plugin_Debug(['plugins' => - [ - 'Variables', - 'Constants', - 'Html', - 'Database', - 'Memory', - 'Time', - 'Exception'] - ] - )); + $front_controller = newFrontController() + ->addControllerDirectory(ROOT_PATH.'afi/application/modules/opacpriv/controllers','opacpriv') + ->setBaseURL(BASE_URL); + + setupRoutes($front_controller, $cfg); + + if (!Class_Users::isCurrentUserSuperAdmin()) + return $front_controller; + + $front_controller->registerPlugin(new ZendAfi_Controller_Plugin_XHProfile()); + return $front_controller; + set_include_path(get_include_path() . PATH_SEPARATOR . ROOT_PATH.'library/ZFDebug/library'); + return $front_controller + ->registerPlugin(new ZFDebug_Controller_Plugin_Debug(['plugins' => + [ + 'Variables', + 'Constants', + 'Html', + 'Database', + 'Memory', + 'Time', + 'Exception'] + ] + )); } function setupRoutes($front_controller, $cfg) { - if ('1' == $cfg->get('enable_rewriting')) { - $front_controller - ->setBaseUrl('') - ->setRouter(new ZendAfi_Controller_Router_RewriteWithoutBaseUrl()); - - Class_Url::doNotAddBaseUrl(); - } - - $front_controller - ->getRouter() - ->addRoute('embed', - new Zend_Controller_Router_Route( - 'embed/:controller/:action/*', - ['module' => 'telephone', - 'controller' => 'index', - 'action' => 'index'])) - ->addRoute('flash', - new Zend_Controller_Router_Route('flash/:action/*', - ['module' => 'opacpriv', - 'controller' => 'flash', - 'action' => 'index'])) - ->addRoute('sitemap', - new Zend_Controller_Router_Route_Static('sitemap.xml', - ['module' => 'opac', - 'controller' => 'index', - 'action' => 'sitemap'])); - return $front_controller; + if ('1' == $cfg->get('enable_rewriting')) { + $front_controller + ->setBaseUrl('') + ->setRouter(new ZendAfi_Controller_Router_RewriteWithoutBaseUrl()); + + Class_Url::doNotAddBaseUrl(); + } + + $front_controller + ->getRouter() + ->addRoute('embed', + new Zend_Controller_Router_Route( + 'embed/:controller/:action/*', + ['module' => 'telephone', + 'controller' => 'index', + 'action' => 'index'])) + ->addRoute('flash', + new Zend_Controller_Router_Route('flash/:action/*', + ['module' => 'opacpriv', + 'controller' => 'flash', + 'action' => 'index'])) + ->addRoute('sitemap', + new Zend_Controller_Router_Route_Static('sitemap.xml', + ['module' => 'opac', + 'controller' => 'index', + 'action' => 'sitemap'])); + return $front_controller; } function setupPagination() { - Zend_Paginator::setDefaultScrollingStyle('Sliding'); - Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml'); + Zend_Paginator::setDefaultScrollingStyle('Sliding'); + Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml'); } function setupRestful() { - if (!(new Class_Testing_FileSystem())->file_exists(ROOT_PATH . 'restful.php')) - return; + if (!(new Class_Testing_FileSystem())->file_exists(ROOT_PATH . 'restful.php')) + return; - set_include_path(ROOT_PATH . '/restful/library' . PATH_SEPARATOR . - get_include_path()); + set_include_path(ROOT_PATH . '/restful/library' . PATH_SEPARATOR . + get_include_path()); - $config = new Zend_Config(include ROOT_PATH . 'restful.php'); - Restful_Model_Configuration::setConfig($config); - Restful_Bootstrap::asPlugin(Zend_Controller_Front::getInstance(), - 'rest', - Zend_Controller_Action_HelperBroker::getExistingHelper('ViewRenderer')); + $config = new Zend_Config(include ROOT_PATH . 'restful.php'); + Restful_Model_Configuration::setConfig($config); + Restful_Bootstrap::asPlugin(Zend_Controller_Front::getInstance(), + 'rest', + Zend_Controller_Action_HelperBroker::getExistingHelper('ViewRenderer')); } diff --git a/library/storm b/library/storm index 6a2a4b4d149401ecef5f8a51963cecfc6cc91fa8..90b5177c9fa1d3f553f6abe858baba74f8dca8d6 160000 --- a/library/storm +++ b/library/storm @@ -1 +1 @@ -Subproject commit 6a2a4b4d149401ecef5f8a51963cecfc6cc91fa8 +Subproject commit 90b5177c9fa1d3f553f6abe858baba74f8dca8d6 diff --git a/public/admin/css/global.css b/public/admin/css/global.css index 6c276f4f7512c5f62057067e6ddb62ab94c7dead..9f9f905d05456f767906560f0a6632a41f226707 100644 --- a/public/admin/css/global.css +++ b/public/admin/css/global.css @@ -120,6 +120,7 @@ option {font-weight:normal; color:#666;} .form div.tag_saisie{border:1px solid #C8C8C8;min-height:15px;border-top:none;padding:5px;margin-left:5px;display:none;width:auto;background-color:#ffffff;overflow:auto;max-height:244px} .form div.tag_liste{padding:1px 3px 1px 3px;margin-left:5px;} .form div.tag_liste:hover{background-color:#FFFF99;cursor:pointer} +.form span.element-description {color: #999999;} div.bouton {max-width: 300px} div.bouton td {color:#575757;font-size:10pt;font-weight:bold; background-repeat: repeat-x; padding: 0px; border:0; cursor: pointer} @@ -1230,6 +1231,60 @@ span.ui-dialog-title { /** monocle preview epub */ div#reader { - min-width: 700px; + min-width: 700px; } + +.drag_and_drop, +.show_drag_and_drop { + border: 1px solid grey; + border-radius: 2px; + padding: 0; + margin: 0; + list-style: none; +} + + +.drag_and_drop { + min-height: 3em; +} + + +.show_drag_and_drop { + line-height: 2em; + min-height: 2em; + padding: 0 5px; +} + + +.drag_and_drop_widget > div { + float: left; + width: 45%; + text-wrap: word; + display: none; + margin-right: 15px; +} + +.drag_and_drop_widget h4 { + font-size: 0.7em; + text-transform: uppercase; +} + + +.drag_and_drop_widget li { + cursor: move; + line-height: 1.3em; + padding: 0 5px; + margin-bottom: 2px; + border-radius: 5px; +} + + +.drag_and_drop_widget ul { + background: white; +} + + +.drag_and_drop_widget li:hover { + background: #eee; +} diff --git a/public/opac/js/responsive.js b/public/opac/js/responsive.js index b6366b026b335e46a68fea0a74fbfe3781154169..00d211c7b7f4020ea73d136fe9542bb4990b793c 100644 --- a/public/opac/js/responsive.js +++ b/public/opac/js/responsive.js @@ -13,11 +13,11 @@ $(document).ready(function() { var enableWidgetButton = function() { $("#col_wrapper .colGauche div.boite, .facette_outer").click(function(e) { - $(this).toggleClass('show_content'); + $("#col_wrapper .colGauche div.boite, .facette_outer").toggleClass('show_content'); }); $("#col_wrapper .colGauche div.boite *").click(function(e) { - e.stopImmediatePropagation(); + e.stopPropagation(); }); } diff --git a/scripts/sendNewsletter.php b/scripts/sendNewsletter.php index 7356481814db85af13d2022fffe397b2cea1e8ed..070baeb2dd7aa82092cc78abd02cac1956c12dde 100644 --- a/scripts/sendNewsletter.php +++ b/scripts/sendNewsletter.php @@ -18,7 +18,8 @@ * along with BOKEH; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -define("BASE_URL", $argv[3]); + +define('BASE_URL', $argv[3]); $_SERVER['SERVER_NAME'] = $argv[2]; $_SERVER['HTTP_HOST'] = $argv[1]; diff --git a/tests/application/modules/admin/controllers/CmsControllerCustomFieldsTest.php b/tests/application/modules/admin/controllers/CmsControllerCustomFieldsTest.php new file mode 100644 index 0000000000000000000000000000000000000000..919516723f2b64210b214a59f73d333eb89b4f64 --- /dev/null +++ b/tests/application/modules/admin/controllers/CmsControllerCustomFieldsTest.php @@ -0,0 +1,171 @@ +<?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 CmsControllerCustomFieldsTestCase extends AbstractControllerTestCase { + protected + $_storm_default_to_volatile = true, + $_article, + $_custom_field; + + public function setUp() { + parent::setUp(); + + $this->fixture('Class_CodifThesaurus', + ['id' => 45, + 'id_thesaurus' => Class_CodifThesaurus::ROOT_CUSTOMFIELD_ID, + 'code' => Class_CodifThesaurus::CODE_CUSTOMFIELDS, + 'libelle' => 'Champs personnalisés']); + + $meta = $this->fixture('Class_CustomField_Meta', + ['id' => 3, + 'label' => 'Public', + 'field_type' => Class_CustomField_Meta::SELECT, + 'options_list' => 'Hardcore gamers; newbies',]); + + $this->_custom_field = $this->fixture('Class_CustomField', + ['id' => 5, + 'priority' => 3, + 'meta' => $meta, + 'model' => 'Article']); + + $this->_article = $this->fixture('Class_Article', + ['id' => 1, + 'titre' => 'News Article', + 'contenu' => 'Welcome']); + } +} + + + +class CmsControllerCustomFieldsEditActionTest extends CmsControllerCustomFieldsTestCase { + public function setUp() { + parent::setUp(); + $this->dispatch('admin/cms/edit/id/1' ,true); + } + + + /** @test */ + public function fieldsetCustomFieldsShouldBePresent() { + $this->assertXPathContentContains('//form//fieldset//legend', 'Champs personnalisés'); + } + + + /** @test */ + public function publicNewsbiesShouldBePresent() { + $this->assertXPathContentContains('//select[@name="field_5"]//option', 'newbies'); + } +} + + + +class CmsControllerCustomFieldsAndIndexationPostEditActionTest + extends CmsControllerCustomFieldsTestCase { + protected + $_record, + $_field_thesaurus, + $_value_thesaurus; + + + public function setUp() { + parent::setUp(); + $this->postDispatch('admin/cms/edit/id/1', + ['titre' => 'News Article', + 'contenu' => 'Welcome', + 'indexation' => 1, + 'status' => Class_Article::STATUS_VALIDATED, + 'field_5' => 'Hardcore gamers', + 'debut' => '', + 'fin' => '', + 'events_debut' => '', + 'events_fin' => '']); + + $this->_record = $this->_article->getNotice(); + $this->_field_thesaurus = Class_CodifThesaurus::findForCustomField($this->_custom_field); + $this->_value_thesaurus = Class_CodifThesaurus::findFirstBy(['libelle' => 'Hardcore gamers']); + } + + + /** @test */ + public function shouldHaveCreatedCustomValue() { + $this->assertNotNull(Class_CustomField_Value::findFirstBy(['value' => 'Hardcore gamers'])); + } + + + /** @test */ + public function shouldHaveCreatedCustomFieldThesaurus() { + $this->assertNotNull($this->_field_thesaurus); + } + + + /** @test */ + public function fieldIdThesaurusShouldBeCfcf0001() { + $this->assertEquals('CFCF0001', $this->_field_thesaurus->getIdThesaurus()); + } + + + /** @test */ + public function fieldIdOrigineShouldBe3() { + $this->assertEquals(3, $this->_field_thesaurus->getIdOrigine()); + } + + + /** @test */ + public function fieldLabelShouldBePublic() { + $this->assertEquals('Public', $this->_field_thesaurus->getLibelle()); + } + + + /** @test */ + public function shouldHaveCreatedCustomValueThesaurus() { + $this->assertNotNull($this->_value_thesaurus); + } + + + /** @test */ + public function valueIdThesaurusShouldBeCfcf00010001() { + $this->assertEquals('CFCF00010001', $this->_value_thesaurus->getIdThesaurus()); + } + + + /** @test */ + public function valueIdOrigineShouldBeB040ebd6() { + $this->assertEquals('b040ebd6', $this->_value_thesaurus->getIdOrigine()); + } + + + /** @test */ + public function valueLabelShouldBeHardcoreGamers() { + $this->assertEquals('Hardcore gamers', $this->_value_thesaurus->getLibelle()); + } + + + /** @test */ + public function shouldHaveRecord() { + $this->assertNotNull($this->_record); + } + + + /** @test */ + public function recordShouldHaveCustomFieldFacet() { + $this->assertContains('HCFCF00010001', $this->_record->getFacettes()); + } +} \ No newline at end of file diff --git a/tests/application/modules/admin/controllers/CmsControllerTest.php b/tests/application/modules/admin/controllers/CmsControllerTest.php index 30811d21ce7d3cb6c74f4282a22a6f2f3a1fbe1c..005b58f004b66ea8006c306bdfc9bca62522f8ea 100644 --- a/tests/application/modules/admin/controllers/CmsControllerTest.php +++ b/tests/application/modules/admin/controllers/CmsControllerTest.php @@ -709,6 +709,11 @@ class CmsControllerArticleConcertEditActionTest extends CmsControllerWithPermiss public function checkBoxShouldCheckedDomaineArtEtHistoire() { $this->assertXPath("//input[@name='domaine_ids'][@value='11-12']"); } + + /** @test */ + public function emailShouldNotBePresent() { + $this->assertNotXPath("//input[@name='destination_email']"); + } } @@ -844,6 +849,29 @@ class CmsControllerArticleConcertEditActionPostTest extends CmsControllerWithPer public function setUp() { parent::setUp(); + $filesystem = new Storm_FileSystem_Volatile(); + $thumbnail_paths = PATH_TEMP .'vignettes_titre/'; + $filesystem + ->mkdir($thumbnail_paths) + ->cd($thumbnail_paths); + + Class_WebService_Vignette::setFileSystem($filesystem); + + $image = Storm_Test_ObjectWrapper::mock(); + Class_WebService_Thumbnail_Provider_Article::setDefaultImageFactory( + Storm_Test_ObjectWrapper::mock() + ->whenCalled('newImage') + ->answers($image)); + + $image + ->whenCalled('thumbnailImage') + ->with(160, 220, true, true) + ->answers(null) + ->whenCalled('writeImage') + ->with(PATH_TEMP . 'vignettes_titre/ERIKTRUFFAZLADYLANDQUARTETENCONCERT-4-TOM----8.jpg') + ->answers(null) + ->beStrict(); + Class_Notice::beVolatile(); Class_NoticeDomain::beVolatile(); Class_IntBib::beVolatile(); @@ -892,6 +920,13 @@ class CmsControllerArticleConcertEditActionPostTest extends CmsControllerWithPer } + public function tearDown() { + Class_WebService_Vignette::setFileSystem(null); + Class_WebService_Thumbnail_Provider_Article::setDefaultImageFactory(null); + parent::tearDown(); + } + + /** @test */ public function erikTruffazShouldBeIndexed() { $this->assertNotNull(Class_Notice::findFirstBy(['alpha_titre' =>'ERIK TRUFFAZ LADYLAND QUARTET EN CONCERT'])); @@ -1019,6 +1054,12 @@ class CmsControllerArticleConcertEditActionPostTest extends CmsControllerWithPer public function flashMessengerShouldNotContainsPopup() { $this->assertNotFlashMessengerPopup(); } + + + /** @test */ + public function articleRecordThumbnailShouldBeSet() { + $this->assertContains('temp/vignettes_titre/ERIKTRUFFAZLADYLANDQUARTETENCONCERT-4-TOM----8.jpg', Class_Article::find(4)->getNotice()->getUrlVignette()); + } } @@ -1858,6 +1899,96 @@ class CmsControllerNewsAddActionWithSimpleWorkflowTest extends CmsControllerWith } +class CmsControllerArticleEditActionWithFormTest extends CmsControllerWithPermissionTestCase { + public function setUp() { + parent::setUp(); + + $this->articleWithForm = $this->fixture('Class_Article', + ['id' => 5, + 'categorie' => $this->cat_evenements, + 'titre' => 'Mon article avec formulaire', + 'auteur' => $this->fixture('Class_Users', + ['id' => 2, + 'Nom' => 'Tom et Jerry', + 'password'=>'toto', + 'login'=>'tom']), + 'description' => 'Mon article avec formulaire', + 'contenu' => '<form action="/formulaire/add/id_article/5" method="POST" name="mon form">', + 'debut' => '2011-03-20', + 'fin' => '2011-03-28', + 'events_debut' => '2011-03-27 21:00', + 'events_fin' => '2011-03-28 22:30', + 'cacher_titre' => 1, + 'langue' => 'fr', + 'tags' => 'concert;jazz', + 'avis' => true, + 'indexation' => false, + 'date_creation' => '2010-12-25 10:23:23', + 'date_maj' => '2010-12-26 11:12:34', + 'domaine_ids' => [11,12], + 'avis_users' => []]); + + + Class_AdminVar::getLoader()->newInstanceWithId('CMS_FORMULAIRES')->setValeur('1'); + $this->dispatch('/admin/cms/edit/id/5'); + } + + + /** @test */ + public function emailShouldBePresentOnFourthPosition() { + $this->assertXPath("//table//tr[4]//input[@name='destination_email'][@type='email']", + $this->_response->getBody()); + } +} + + + + +class CmsControllerArticleEditActionWithFormAndEmailFilledTest extends CmsControllerWithPermissionTestCase { + public function setUp() { + parent::setUp(); + + $this->articleWithForm = $this->fixture('Class_Article', + ['id' => 5, + 'categorie' => $this->cat_evenements, + 'titre' => 'Mon article avec formulaire', + 'auteur' => $this->fixture('Class_Users', + ['id' => 2, + 'Nom' => 'Tom et Jerry', + 'password'=>'toto', + 'login'=>'tom']), + 'description' => 'Mon article avec formulaire', + 'contenu' => '<form action="/formulaire/add/id_article/5" method="POST" name="mon form">', + 'debut' => '2011-03-20', + 'fin' => '2011-03-28', + 'events_debut' => '2011-03-27 21:00', + 'events_fin' => '2011-03-28 22:30', + 'cacher_titre' => 1, + 'langue' => 'fr', + 'tags' => 'concert;jazz', + 'avis' => true, + 'indexation' => false, + 'date_creation' => '2010-12-25 10:23:23', + 'date_maj' => '2010-12-26 11:12:34', + 'domaine_ids' => [11,12], + 'avis_users' => [], + 'destination_email' => 'william@dlaton.com']); + + + Class_AdminVar::getLoader()->newInstanceWithId('CMS_FORMULAIRES')->setValeur('1'); + $this->dispatch('/admin/cms/edit/id/5'); + } + + + /** @test */ + public function emailFieldShouldBeFilled() { + Class_Article::find(5)->setDestinationEmail('william@dalton.com')->save(); + $this->dispatch('/admin/cms/edit/id/5'); + $this->assertXpath('//input[@name="destination_email"][@value="william@dalton.com"]'); + } +} + + class CmsControllerArticleConcertEditActionWithoutWorkflowTest extends CmsControllerWithPermissionTestCase { public function setUp() { @@ -2124,11 +2255,12 @@ class CmsControllerArticleWithUnknownLangueTraductionEditTest extends CmsControl public function setUp() { parent::setUp(); - Class_Article::getLoader() - ->newInstanceWithId(8) - ->setIdCat(23) - ->setLangue(null) - ->setTitre('Langue non spécifiée'); + $this->fixture('Class_Article', + ['id' => 8, + 'id_cat' => 23, + 'langue' => null, + 'titre' => 'Langue non spécifiée', + 'contenu' => 'unknown']); $this->dispatch('/admin/cms/edit/id/8/lang/fr'); } @@ -2599,44 +2731,6 @@ class CmsControllerCategoriesActionTest extends AbstractControllerTestCase { -class CmsControllerEditActionWithCustomFieldsTest extends AbstractControllerTestCase { - public function setUp() { - parent::setUp(); - - Class_Exemplaire::beVolatile(); - Class_CustomField_Meta::beVolatile(); - - $this->fixture('Class_CustomField', - ['id' => 5, - 'priority' => 3, - 'label' => 'Public', - 'field_type' => Class_CustomField_Meta::SELECT, - 'options_list' => 'Harcore gamers; newbies', - 'model' => 'Article']); - - $this->fixture('Class_Article', - ['id' => 1, - 'titre' => 'News Article', - 'contenu' => 'Welcome']); - - $this->dispatch('admin/cms/edit/id/1' ,true); - } - - - /** @test */ - public function fieldsetCustomFieldsShouldBePresent() { - $this->assertXPathContentContains('//form//fieldset//legend', 'Champs personnalisés', $this->_response->getBody()); - } - - - /** @test */ - public function publicNewsbiesShouldBePresent() { - $this->assertXPathContentContains('//select[@name="field_5"]//option', 'newbies'); - } -} - - - class CmsControllerEditArticleWithDate30December2014Test extends CmsControllertestCase { @@ -2654,5 +2748,4 @@ class CmsControllerEditArticleWithDate30December2014Test extends CmsControllerte public function inputFinShouldContains30_12_2014() { $this->assertXPath('//input[@name="fin"][@value="30/12/2014"]'); } -} -?> +} \ No newline at end of file diff --git a/tests/application/modules/admin/controllers/CustomFieldsControllerTest.php b/tests/application/modules/admin/controllers/CustomFieldsControllerTest.php index fac69bfe980c204a0ac672c7a03b7dee3d931825..8c96b0d8745318a6cdf3fd97cab00e39b54938c5 100644 --- a/tests/application/modules/admin/controllers/CustomFieldsControllerTest.php +++ b/tests/application/modules/admin/controllers/CustomFieldsControllerTest.php @@ -18,20 +18,20 @@ * along with BOKEH; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -require_once 'AbstractControllerTestCase.php'; - abstract class CustomFieldControllerTestCase extends AbstractControllerTestCase { + protected $_storm_default_to_volatile = true; + public function setUp() { parent::setUp(); $this->fixture('Class_CustomField_Meta', - ['id' => 1, - 'label' => 'Address', - 'field_type' => Class_CustomField_Meta::TEXT_INPUT, - 'options_list' => '']); - + ['id' => 1, + 'label' => 'Address', + 'field_type' => Class_CustomField_Meta::TEXT_INPUT, + 'options_list' => '', + 'indexable' => 1]); $this->fixture('Class_CustomField', ['id' => 1, @@ -39,7 +39,6 @@ abstract class CustomFieldControllerTestCase extends AbstractControllerTestCase 'priority' => 1, 'model' => 'Article']); - $this->fixture('Class_CustomField', ['id' => 2, 'meta_id' => 1, @@ -81,12 +80,10 @@ abstract class CustomFieldControllerTestCase extends AbstractControllerTestCase 'field_type' => Class_CustomField_Meta::CKEDITOR, 'model' => 'UserGroup']); - $this->fixture('Class_UserGroup', ['id' => 1, 'libelle' => 'Teachers']); - $this->fixture('Class_CustomField_Value', //teachers address ['id' => 23, 'custom_field_id' => 3, @@ -104,7 +101,6 @@ abstract class CustomFieldControllerTestCase extends AbstractControllerTestCase 'custom_field_id' => 5, 'model_id' => 1, 'value' => 'enabled']); - } } @@ -229,6 +225,12 @@ class CustomFieldsControllerAddIndexTest extends CustomFieldControllerTestCase { } + /** @test */ + public function indexableShouldBeDisplay() { + $this->assertXPath('//form//input[@name="indexable"]'); + } + + /** @test */ public function hiddenInputModelValueShouldBeUserGroup() { $this->assertXPath('//form//input[@name="model"][@value="UserGroup"]'); @@ -264,41 +266,49 @@ class CustomFieldsControllerAddIndexTest extends CustomFieldControllerTestCase { class CustomFieldsControllerPostAddActionTest extends AbstractControllerTestCase { + protected $_storm_default_to_volatile = true; + public function setup() { parent::setup(); - Class_CustomField::beVolatile(); - Class_CustomField_Meta::beVolatile(); - $this->postDispatch('admin/custom-fields/add/model/Article', ['label' => 'public', - 'field_type' => 'text', - 'model' => 'Article']); + 'field_type' => 'text', + 'indexable' => 1, + 'model' => 'Article']); + + $this->field = Class_CustomField::find(1); } /** @test */ public function customFieldMetaShouldHaveBeenCreated() { - $this->assertEquals('public', Class_CustomField::find(1)->getLabel()); + $this->assertEquals('public', $this->field->getLabel()); } /** @test */ public function customFieldShouldNotHaveAttributFieldType() { - $attributes = Class_CustomField::find(1)->getRawAttributes(); + $attributes = $this->field->getRawAttributes(); $this->assertFalse(isset($attributes['field_type'])); } /** @test */ public function customFieldMetaShouldBeText() { - $this->assertEquals('text', Class_CustomField_Meta::find(1)->getFieldType()); + $this->assertEquals('text', $this->field->getFieldType()); } /** @test */ public function customFieldModelShouldBeClassArticle() { - $this->assertEquals('Article', Class_CustomField::find(1)->getModel()); + $this->assertEquals('Article', $this->field->getModel()); + } + + + /** @test */ + public function shouldBeIndexable() { + $this->assertEquals(1, $this->field->getIndexable()); } } @@ -323,6 +333,12 @@ class CustomFieldsControllerEditIndexTest extends CustomFieldControllerTestCase } + /** @test */ + public function shouldBeIndexable() { + $this->assertXPath('//input[@name="indexable"][@checked="checked"]'); + } + + /** @test */ public function optionsListShouldBeEmpty() { $this->assertXPath('//input[@name="options_list"][@value=""]'); @@ -341,10 +357,11 @@ class CustomFieldsControllerPostEditActionTest extends CustomFieldControllerTest public function setUp() { parent::setUp(); - $this->postDispatch('admin/custom-fields/edit/model/Article/id/1', ['label' => 'public', - 'field_type' => 'SELECT', - 'options_list' => 'all; teens', - 'model' => 'Article']); + $this->postDispatch('admin/custom-fields/edit/model/Article/id/1', + ['label' => 'public', + 'field_type' => 'SELECT', + 'options_list' => 'all; teens', + 'model' => 'Article']); } @@ -433,7 +450,6 @@ class CustomFieldsControllerValuesForUserGroupWithMetaDeletedTest extends Custom public function setUp() { parent::setUp(); Class_CustomField_Meta::deleteBy([]); - } @@ -504,6 +520,7 @@ class CustomFieldsControllerValuesForUserGroupTeachersTest extends CustomFieldCo $this->assertXPath('//form//fieldset//select//option[@value="enabled"][@selected="selected"]',$this->_response->getBody()); } + /** @test */ public function backButtonShouldLinkToUsergroupsEditTeachers() { $this->assertXPathContentContains('//div[contains(@onclick, "admin/usergroup/edit/id/1")]//td', 'Retour'); diff --git a/tests/application/modules/admin/controllers/CustomFieldsMetaControllerTest.php b/tests/application/modules/admin/controllers/CustomFieldsMetaControllerTest.php index 0744275c3cd7b2c1679cce96d56282f3c5b540d4..82ed5f6c1e84c7c4ddc7b2b0f99adcf5f9ea8426 100644 --- a/tests/application/modules/admin/controllers/CustomFieldsMetaControllerTest.php +++ b/tests/application/modules/admin/controllers/CustomFieldsMetaControllerTest.php @@ -20,26 +20,35 @@ */ abstract class CustomFieldsMetaControllerTestCase extends AbstractControllerTestCase { + protected $_storm_default_to_volatile = true; + public function setUp() { parent::setUp(); - $this->fixture('Class_CustomField_Meta', [ - 'id' => 1, - 'label' => 'Address', - 'field_type' => Class_CustomField_Meta::TEXT_INPUT, - 'options_list' => '']); - - $this->fixture('Class_CustomField_Meta', [ - 'id' => 2, - 'label' => 'Status', - 'field_type' => Class_CustomField_Meta::SELECT]); - - - $this->fixture('Class_CustomField', [ - 'id' => 1, - 'meta_id' => 1, - 'priority' => 2, - 'model' => 'Article']); + $this->fixture('Class_CodifThesaurus', + ['id' => 34, + 'id_thesaurus' => Class_CodifThesaurus::ROOT_CUSTOMFIELD_ID, + 'code' => Class_CodifThesaurus::CODE_CUSTOMFIELDS, + 'libelle' => 'Champs personnalisés']); + + $this->fixture('Class_CustomField_Meta', + ['id' => 1, + 'label' => 'Address', + 'field_type' => Class_CustomField_Meta::TEXT_INPUT, + 'options_list' => '', + 'indexable' => 0]); + + $this->fixture('Class_CustomField_Meta', + ['id' => 2, + 'label' => 'Status', + 'field_type' => Class_CustomField_Meta::SELECT, + 'indexable' => 1]); + + $this->fixture('Class_CustomField', + ['id' => 1, + 'meta_id' => 1, + 'priority' => 2, + 'model' => 'Article']); } } @@ -53,45 +62,76 @@ class CustomFieldsMetaControllerIndexActionTest extends CustomFieldsMetaControll } + public function columnsProvider() { + return [ ['Libellé', 'Type', 'Indexable'] ]; + } + + + /** + * @test + * @dataProvider columnsProvider + */ + public function columnShouldBePresent($header) { + $this->assertXPathContentContains('//table[@id="custom-fields-meta"]//th', $header); + } + + + /** @test */ + public function shouldListAddress() { + $this->assertXPathContentContains('//table[@id="custom-fields-meta"]//tr[1]/td', + 'Address'); + } + + + /** @test */ + public function addressShouldBeChampTexte() { + $this->assertXPathContentContains('//table[@id="custom-fields-meta"]//tr[1]//td', + 'Texte'); + } + + /** @test */ - public function tableCustomFieldsMetaShouldListAddress() { - $this->assertXPathContentContains('//table[@id="custom-fields-meta"]//td', 'Address'); + public function addressShouldNotBeIndexable() { + $this->assertXPath('//table[@id="custom-fields-meta"]//tr[1]//td//img[@alt="Non"]'); } /** @test */ - public function fieldTypeForAddressShouldBeChampTexte() { - $this->assertXPathContentContains('//table[@id="custom-fields-meta"]//td', 'Texte'); + public function shouldListStatus() { + $this->assertXPathContentContains('//table[@id="custom-fields-meta"]//tr[2]//td', 'Status'); } /** @test */ - public function tableCustomFieldsMetaShouldListStatus() { - $this->assertXPathContentContains('//table[@id="custom-fields-meta"]//td', 'Status'); + public function statusShouldBeListeDOptions() { + $this->assertXPathContentContains('//table[@id="custom-fields-meta"]//tr[2]//td', 'Liste d\'options'); } /** @test */ - public function fieldTypeForStatusShouldBeListeDOptions() { - $this->assertXPathContentContains('//table[@id="custom-fields-meta"]//td', 'Liste d\'options'); + public function statusShouldBeIndexable() { + $this->assertXPath('//table[@id="custom-fields-meta"]//tr[2]//td//img[@alt="Oui"]'); } /** @test */ public function linkToAddNewShouldBePresent() { - $this->assertXPathContentContains('//div[contains(@onclick, "/admin/custom-fields-meta/add")]//td', 'Nouveau type de champ'); + $this->assertXPathContentContains('//div[contains(@onclick, "/admin/custom-fields-meta/add")]//td', + 'Nouveau type de champ'); } + /** @test */ public function backToCustomFieldsLinkShouldBePresent() { - $this->assertXPathContentContains('//div[contains(@onclick, "/admin/custom-fields\'")]', 'Retour à la liste'); + $this->assertXPathContentContains('//div[contains(@onclick, "/admin/custom-fields\'")]', + 'Retour à la liste'); } } -class CustomFieldsMetaControllerEditActionTest extends CustomFieldsMetaControllerTestCase { +class CustomFieldsMetaControllerEditAddressActionTest extends CustomFieldsMetaControllerTestCase { public function setUp() { parent::setUp(); $this->dispatch('admin/custom-fields-meta/edit/id/1', true); @@ -108,6 +148,39 @@ class CustomFieldsMetaControllerEditActionTest extends CustomFieldsMetaControlle public function fieldTypeShouldBeText() { $this->assertXPath('//select/option[@value="text"][@selected="selected"]'); } + + + /** @test */ + public function shouldNotBeIndexable() { + $this->assertNotXPath('//input[@name="indexable"][@checked="checked"]'); + } +} + + + +class CustomFieldsMetaControllerEditStatusActionTest extends CustomFieldsMetaControllerTestCase { + public function setUp() { + parent::setUp(); + $this->dispatch('admin/custom-fields-meta/edit/id/2', true); + } + + + /** @test */ + public function inputLabelShouldContainsStatus() { + $this->assertXPath('//input[@name="label"][@value="Status"]'); + } + + + /** @test */ + public function fieldTypeShouldBeSelect() { + $this->assertXPath('//select/option[@value="select"][@selected="selected"]'); + } + + + /** @test */ + public function shouldBeIndexable() { + $this->assertXPath('//input[@name="indexable"][@checked="checked"]'); + } } @@ -115,7 +188,7 @@ class CustomFieldsMetaControllerEditActionTest extends CustomFieldsMetaControlle class CustomFieldsMetaControllerAddActionTest extends CustomFieldsMetaControllerTestCase { public function setUp() { parent::setUp(); - $this->dispatch('admin/custom-fields-meta/add/id/1', true); + $this->dispatch('admin/custom-fields-meta/add', true); } @@ -124,6 +197,11 @@ class CustomFieldsMetaControllerAddActionTest extends CustomFieldsMetaController $this->assertXPath('//input[@name="label"][@value=""]'); } + + /** @test */ + public function shouldNotBeIndexable() { + $this->assertNotXPath('//input[@name="indexable"][@checked="checked"]'); + } } @@ -135,13 +213,16 @@ class CustomFieldsMetaControllerPostEditActionTest extends CustomFieldsMetaContr $this->postDispatch('admin/custom-fields-meta/edit/id/1', ['label' => 'public', 'field_type' => Class_CustomField_Meta::SELECT, - 'options_list' => 'teens; parents ; all public ; ']); + 'options_list' => 'teens; parents ; all public ; ', + 'indexable' => 1]); + + $this->meta = Class_CustomField_Meta::find(1); } /** @test */ public function labelShouldBePublic() { - $this->assertEquals('public', Class_CustomField_Meta::find(1)->getLabel()); + $this->assertEquals('public', $this->meta->getLabel()); } @@ -149,7 +230,7 @@ class CustomFieldsMetaControllerPostEditActionTest extends CustomFieldsMetaContr public function fieldTypeShouldBeSelect() { $this->assertEquals( Class_CustomField_Meta::SELECT, - Class_CustomField_Meta::find(1)->getFieldType()); + $this->meta->getFieldType()); } @@ -157,7 +238,22 @@ class CustomFieldsMetaControllerPostEditActionTest extends CustomFieldsMetaContr public function optionsListShouldBeTeensAndParents() { $this->assertEquals( ['teens', 'parents', 'all public'], - Class_CustomField_Meta::find(1)->getOptionsListAsArray()); + $this->meta->getOptionsListAsArray()); + } + + + /** @test */ + public function shouldBecomeIndexable() { + $this->assertEquals(1, $this->meta->getIndexable()); + } + + + /** @test */ + public function shouldHaveCreatedThesaurus() { + $this->assertNotNull(Class_CodifThesaurus::findFirstBy(['id_origine' => $this->meta->getId(), + 'code' => Class_CodifThesaurus::CODE_CUSTOMFIELDS, + 'libelle' => 'public', + 'libelle_facette' => 'public'])); } } @@ -166,22 +262,36 @@ class CustomFieldsMetaControllerPostEditActionTest extends CustomFieldsMetaContr class CustomFieldsMetaControllerDeleteAddressFieldTest extends CustomFieldsMetaControllerTestCase { public function setUp() { parent::setUp(); + $this->fixture('Class_CodifThesaurus', + ['id' => 42, + 'id_origine' => 1, + 'id_thesaurus' => 'CFCF0001', + 'code' => Class_CodifThesaurus::CODE_CUSTOMFIELDS, + 'libelle' => 'public', + 'libelle_facette' => 'public']); + + $this->onLoaderOfModel('Class_CodifThesaurus') + ->whenCalled('deleteAllFrom') + ->answers(true); + $this->dispatch('admin/custom-fields-meta/delete/id/1', true); - Class_CustomField_Meta::clearCache(); - Class_CustomField::clearCache(); } /** @test */ public function metaAddressShouldBeDeleted() { - $this->assertEmpty(Class_CustomField_Meta::find(1)); + $this->assertNull(Class_CustomField_Meta::find(1)); } /** @test */ public function customFieldAddressShouldBeDeleted() { - $this->assertEmpty(Class_CustomField::find(1)); + $this->assertNull(Class_CustomField::find(1)); } -} -?> \ No newline at end of file + + /** @test */ + public function shouldHaveDeletedThesaurus() { + $this->assertTrue(Class_CodifThesaurus::methodHasBeenCalled('deleteAllFrom')); + } +} \ No newline at end of file diff --git a/tests/application/modules/admin/controllers/IndexControllerTest.php b/tests/application/modules/admin/controllers/IndexControllerTest.php index 1f0c909b3ad32a04f909133dec227ceb32ff033e..41c78b0d873d73087d5ac05cffb1a8e9643808e6 100644 --- a/tests/application/modules/admin/controllers/IndexControllerTest.php +++ b/tests/application/modules/admin/controllers/IndexControllerTest.php @@ -56,6 +56,24 @@ class IndexControllerIndexTest extends Admin_AbstractControllerTestCase { public function editDomaineNameLinkShouldBePresent() { $this->assertXPathContentContains('//a[contains(@href, "/admin/index/adminvaredit/cle/NOM_DOMAINE")]','Modifier', $this->_response->getBody()); } + + + /** @test */ + public function linkToDocShouldBePresent() { + $this->assertXPathContentContains('//h2/a[contains(@href, "/blob/' . BOKEH_VERSION . '/VERSIONS")]', BOKEH_RELEASE_NUMBER); + } + + + /** @test */ + public function onloadUtilsJsShouldBeLoaded() { + $this->assertXPath('//script[contains(@src, "onload_utils.js")]'); + } + + + /** @test */ + public function setupAnchorTargetShouldBePresent() { + $this->assertXPathContentContains('//script', 'setupAnchorsTarget();'); + } } diff --git a/tests/application/modules/admin/controllers/ModulesControllerTest.php b/tests/application/modules/admin/controllers/ModulesControllerTest.php index 744b5748ae0b0c3dd335d9aa65fa2d873c169cda..88becf5094303456e499daf163d54e8837642d58 100644 --- a/tests/application/modules/admin/controllers/ModulesControllerTest.php +++ b/tests/application/modules/admin/controllers/ModulesControllerTest.php @@ -19,15 +19,17 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -require_once 'AdminAbstractControllerTestCase.php'; - class ModulesControllerRechercheTest extends Admin_AbstractControllerTestCase { + protected $_storm_default_to_volatile = true; + public function setUp() { parent::setUp(); + $_SESSION["recherche"] = ['mode' => '']; $this->dispatch('/admin/modules/recherche?id_profil=2&action1=viewnotice&type_module=recherche&config=site', true); } + /** @test */ public function titleShouldBeRecordDisplayProperty() { $this->assertXPathContentContains('//h1', 'Propriétés d\'affichage des notices'); @@ -81,41 +83,51 @@ class ModulesControllerRechercheTest extends Admin_AbstractControllerTestCase { $this->assertXPath('//input[@name="analytics_authors"]'); } + /** @test */ public function headerConfigShouldContainsFacetInterests() { - $this->assertXPath('//div[@id="champs_mainDiv"]//div[@id="champs_box_F"][@code="F"]'); + $this->assertXPath('//div[@data-heading="champs"]//li[@data-code="F"]'); } } class ModulesControllerRechercheViewnoticeTest extends Admin_AbstractControllerTestCase { + protected $_storm_default_to_volatile = true; + public function setUp() { parent::setUp(); - Class_Profil::getCurrentProfil()->setCfgModules(['recherche' => ['viewnotice1' => ['links_zones' => '888-3-a;923-1-b']]]); + Class_Profil::getCurrentProfil() + ->setCfgModules(['recherche' => ['viewnotice1' => ['links_zones' => '888-3-a;923-1-b']]]); $this->dispatch('/admin/modules/recherche?config=site&type_module=recherche&id_profil=2&action1=viewnotice&action2=1'); } + /** @test */ public function linkFieldSetShouldBeDisplayed() { $this->assertXPathContentContains('//fieldset/legend', "Zones de liens"); } + /** @test */ public function multiInputsJsShouldBeLoaded() { $this->assertXPath('//script[contains(@src,"multi_inputs.js")]'); } + /** @test */ public function multiInputLinksZonesValuesShouldBeDisplayed() { - $this->assertXPathContentContains('//script','"link_zone":["888","923"],"link_url":["3","1"],"link_label":["a","b"]',$this->_response->getBody()); + $this->assertXPathContentContains('//script','"link_zone":["888","923"],"link_url":["3","1"],"link_label":["a","b"]', + $this->_response->getBody()); } } abstract class ModulesControllerRechercheViewnoticePostTestCase extends Admin_AbstractControllerTestCase { + protected $_storm_default_to_volatile = true; + public function setUp() { parent::setUp(); $this->postDispatch('/admin/modules/recherche?config=site&type_module=recherche&id_profil=2&action1=viewnotice&action2=1', @@ -202,7 +214,9 @@ abstract class ModulesControllerRechercheViewnoticePostTestCase extends Admin_Ab -class ModulesControllerRechercheViewnoticeValidPostTest extends ModulesControllerRechercheViewnoticePostTestCase { +class ModulesControllerRechercheViewnoticeValidPostTest + extends ModulesControllerRechercheViewnoticePostTestCase { + public function setUp() { parent::setUp(); $this->viewnotice_pref = Class_Profil::getCurrentProfil() @@ -239,6 +253,7 @@ class ModulesControllerRechercheViewnoticeValidPostTest extends ModulesControlle $this->assertEquals('f', $this->viewnotice_pref['analytics_authors']); } + /** @test */ public function preferencesShouldContainsZone944() { $this->assertEquals('944-3-a;455-6-b', $this->viewnotice_pref['links_zones']); @@ -247,7 +262,9 @@ class ModulesControllerRechercheViewnoticeValidPostTest extends ModulesControlle -class ModulesControllerRechercheViewnoticeInvalidPostTest extends ModulesControllerRechercheViewnoticePostTestCase { +class ModulesControllerRechercheViewnoticeInvalidPostTest + extends ModulesControllerRechercheViewnoticePostTestCase { + protected function getDatas() { $datas = parent::getDatas(); $datas['link_zone'] = ['aaa', '455', '933']; @@ -282,7 +299,8 @@ class ModulesControllerRechercheViewnoticeInvalidPostTest extends ModulesControl -class ModulesControllerRechercheViewnoticeEmptyLinksZonesPostTest extends ModulesControllerRechercheViewnoticePostTestCase { +class ModulesControllerRechercheViewnoticeEmptyLinksZonesPostTest + extends ModulesControllerRechercheViewnoticePostTestCase { protected function getDatas() { $datas = parent::getDatas(); $datas['link_zone'] = ['']; @@ -302,6 +320,8 @@ class ModulesControllerRechercheViewnoticeEmptyLinksZonesPostTest extends Module class ModulesControllerVariousConfigTest extends Admin_AbstractControllerTestCase { + protected $_storm_default_to_volatile = true; + public function setUp() { parent::setUp(); $this->dispatch('/admin/modules/auth?config=site&type_module=auth&id_profil=1&action1=boitelogin&action2='); @@ -317,6 +337,8 @@ class ModulesControllerVariousConfigTest extends Admin_AbstractControllerTestCas class ModulesControllerRegisterConfigTest extends Admin_AbstractControllerTestCase { + protected $_storm_default_to_volatile = true; + public function setUp() { parent::setUp(); $this->dispatch('/admin/modules/auth?config=site&type_module=auth&id_profil=1&action1=register&action2=', true); @@ -345,19 +367,19 @@ class ModulesControllerRegisterConfigTest extends Admin_AbstractControllerTestCa /** @test */ public function modulesAuthRegisterTextareaRegisterConfirmShouldContainsDefautMessage() { - $this->assertXPathContentContains('//textarea[@name="register_confirm"]', 'Cher Internaute,'); } - } class ModulesControllerBibIndexTest extends Admin_AbstractControllerTestCase { + protected $_storm_default_to_volatile = true; + /** @test */ - function optionCacherArticlesShouldBePresentOnIndex() { + public function optionCacherArticlesShouldBePresentOnIndex() { $this->dispatch('/admin/modules/bib?id_profil=2&action1=index&type_module=bib&config=site'); $this->assertXPath('//input[@type="checkbox"][@name="hide_news"]'); $this->assertNotXPath('//input[@type="checkbox"][@name="hide_news"][@checked]'); @@ -365,14 +387,14 @@ class ModulesControllerBibIndexTest extends Admin_AbstractControllerTestCase { /** @test */ - function optionCacherArticlesShouldBePresentOnZoneView() { + public function optionCacherArticlesShouldBePresentOnZoneView() { $this->dispatch('/admin/modules/bib?id_profil=2&action1=zoneview&type_module=bib&config=site'); $this->assertXPath('//input[@type="checkbox"][@name="hide_news"]'); } /** @test */ - function optionCacherArticleShouldBeCheckedWhenSetToOne() { + public function optionCacherArticleShouldBeCheckedWhenSetToOne() { Class_Profil::getCurrentProfil()->setCfgModules(array("bib" => array("index" => array("hide_news" => 1)))); $this->dispatch('/admin/modules/bib?id_profil=2&action1=index&type_module=bib&config=site'); $this->assertXPath('//input[@type="checkbox"][@name="hide_news"][@checked="checked"]', $this->_response->getBody()); @@ -380,7 +402,7 @@ class ModulesControllerBibIndexTest extends Admin_AbstractControllerTestCase { /** @test */ - function postOptionCacherArticleShouldUpdateCfgModules() { + public function postOptionCacherArticleShouldUpdateCfgModules() { $this->postDispatch('/admin/modules/bib?id_profil=2&action1=index&type_module=bib&config=site', array("hide_news" => 1)); $cfg_modules = Class_Profil::getCurrentProfil()->getCfgModulesAsArray(); @@ -391,37 +413,91 @@ class ModulesControllerBibIndexTest extends Admin_AbstractControllerTestCase { -class ModulesControllerConfigRechercheResultatTest extends Admin_AbstractControllerTestCase { +class ModulesControllerConfigRechercheResultatTest + extends Admin_AbstractControllerTestCase { + + protected $_storm_default_to_volatile = true; public function setUp() { parent::setUp(); + + $domaine = $this->fixture('Class_CodifThesaurus', + ['id' => 1, + 'code' => 'Catalogue', + 'libelle' => 'Domaine', + 'id_thesaurus' => 'CCCC']); + + $custom_root = $this->fixture('Class_CodifThesaurus', + ['id' => 2, + 'code' => 'Custom fields', + 'libelle' => 'Champs personnalisés', + 'id_thesaurus' => 'CFCF']); + + $custom_public = $this->fixture('Class_CodifThesaurus', + ['id' => 3, + 'code' => 'Custom fields', + 'libelle' => 'Custom public', + 'id_thesaurus' => 'CFCF0001']); + + $this + ->onLoaderOfModel('Class_CodifThesaurus') + ->whenCalled('getIndices') + ->with('root', true) + ->answers([$domaine, $custom_root]) + + ->whenCalled('findChildrenOf') + ->with($custom_root) + ->answers([$custom_public]); + Class_Profil::getCurrentProfil()->setCfgModules([]); + $this->dispatch('/admin/modules/recherche?config=site&type_module=recherche&id_profil=2&action1=resultat&action2=simple', true); } + /** @test */ public function checkboxSuggestionAchatShouldBeCheckedByDefault() { $this->assertXPath('//input[@type="checkbox"][@name="suggestion_achat"][@checked="checked"]'); } + /** @test */ public function listDisplayConfigShouldContainsFacetsInterests() { - $this->assertXPath('//div[@id="liste_mainDiv"]//div[@id="liste_box_F"][@code="F"]'); + $this->assertXPath('//div[@data-heading="liste"]//li[@data-code="F"]'); } -} + /** @test */ + public function shouldDisplayDomainChoice() { + $this->assertXPath('//div[@data-heading="facettes"]//li[@data-code="HCCCC"]'); + } -class ModulesControllerConfigViewCritiquesResultatTest extends Admin_AbstractControllerTestCase { - public function setUp() { - parent::setUp(); - Class_Profil::getCurrentProfil()->setCfgModules([]); - $this->dispatch('/admin/modules/blog?config=site&type_module=blog&id_profil=2&action1=viewcritiques&action2=', true); + /** @test */ + public function shouldDisplayRootCustomFieldsChoice() { + $this->assertNotXPath('//div[@data-heading="facettes"]//li[@data-code="HCFCF"]'); + } + + + /** @test */ + public function shouldDisplayCustomPublicChoice() { + $this->assertXPath('//div[@data-heading="facettes"]//li[@data-code="HCFCF0001"][@data-label="Custom public"]'); } +} + + + +class ModulesControllerConfigViewCritiquesResultatTest + extends Admin_AbstractControllerTestCase { + + protected $_storm_default_to_volatile = true; + /** @test */ public function inputNumberOfCriticsDisplayOnPageShouldBe50() { + Class_Profil::getCurrentProfil()->setCfgModules([]); + $this->dispatch('/admin/modules/blog?config=site&type_module=blog&id_profil=2&action1=viewcritiques&action2=', true); + $this->assertXPath('//input[@name="nb_display"][@value="50"]'); } } @@ -430,21 +506,22 @@ class ModulesControllerConfigViewCritiquesResultatTest extends Admin_AbstractCon class ModulesControllerRechercheSaisieTest extends Admin_AbstractControllerTestCase { - public function setUp() { - parent::setUp(); - $this->dispatch('/admin/modules/recherche?id_profil=2&action1=saisie&type_module=recherche&config=site', true); - } - + protected $_storm_default_to_volatile = true; /** @test */ public function inputMessageShouldBeVisible() { + $this->dispatch('/admin/modules/recherche?id_profil=2&action1=saisie&type_module=recherche&config=site', true); $this->assertXPath('//input[@name="message"]'); } } -class ModulesControllerConfigRechercheResultatWithPreferencesWithPreferencesTest extends Admin_AbstractControllerTestCase { +class ModulesControllerConfigRechercheResultatWithPreferencesWithPreferencesTest + extends Admin_AbstractControllerTestCase { + + protected $_storm_default_to_volatile = true; + public function setUp() { parent::setUp(); @@ -479,12 +556,15 @@ class ModulesControllerConfigRechercheResultatWithPreferencesWithPreferencesTest public function checkboxSuggestionAchatShouldBeChecked() { $this->assertXPath('//input[@type="checkbox"][@name="suggestion_achat"][@checked="checked"]'); } - } -class ModulesControllerConfigRechercheResultatWithPreferencesTest extends Admin_AbstractControllerTestCase { +class ModulesControllerConfigRechercheResultatWithPreferencesTest + extends Admin_AbstractControllerTestCase { + + protected $_storm_default_to_volatile = true; + public function setUp() { parent::setUp(); $this->fixture('Class_CodifThesaurus',['id' => 5, @@ -492,33 +572,34 @@ class ModulesControllerConfigRechercheResultatWithPreferencesTest extends Admin_ 'libelle' => 'Custum Facet ', 'libelle_facette' => 'New Facet']); - Class_Profil::getCurrentProfil() ->setCfgModules( - ['recherche' => ['resultatsimple' => ['suggestion_achat' => 0, - 'zones_titre' => '200$e;200$f', - 'titre' => 'ok', - 'liste_format' => 1, - 'liste_nb_par_page' => 50, - 'liste_codes' => 'TAENR', - 'facettes_actif' => '1', - 'facettes_nombre' => '6', - 'facettes_codes' => 'SAMDLHDELFHNEWF', - 'facettes_message' => 'Affiner le résultat...', - 'tags_actif' => '1', - 'tags_position' => '2', - 'tags_calcul' => '0', - 'tags_nombre' => '30', - 'tags_codes' => 'AMDPZ', - 'tags_message' => 'Elargir la recherche...', - 'cvs_display_position' => '0', - 'cvs_resultat_titre' => 'Ressources numériques CVS', - 'cvs_autres_resultats' => 'Autres documents', - 'cvs_nb_result' => '5', - 'cvs_msg_deco' => 'Vous devez etre connecté', - 'cvs_msg_droit' => 'Merci de contacter la médiathèque pour obtenir un accès.']]]); - $this->dispatch('/admin/modules/recherche?config=site&type_module=recherche&id_profil=2&action1=resultat&action2=simple', true); + ['recherche' => + ['resultatsimple' => + ['suggestion_achat' => 0, + 'zones_titre' => '200$e;200$f', + 'titre' => 'ok', + 'liste_format' => 1, + 'liste_nb_par_page' => 50, + 'liste_codes' => 'TAENR', + 'facettes_actif' => '1', + 'facettes_nombre' => '6', + 'facettes_codes' => 'S;A;M;D;L;HDELF;HNEWF', + 'facettes_message' => 'Affiner le résultat...', + 'tags_actif' => '1', + 'tags_position' => '2', + 'tags_calcul' => '0', + 'tags_nombre' => '30', + 'tags_codes' => 'AMDPZ', + 'tags_message' => 'Elargir la recherche...', + 'cvs_display_position' => '0', + 'cvs_resultat_titre' => 'Ressources numériques CVS', + 'cvs_autres_resultats' => 'Autres documents', + 'cvs_nb_result' => '5', + 'cvs_msg_deco' => 'Vous devez etre connecté', + 'cvs_msg_droit' => 'Merci de contacter la médiathèque pour obtenir un accès.']]]); + $this->dispatch('/admin/modules/recherche?config=site&type_module=recherche&id_profil=2&action1=resultat&action2=simple', true); } @@ -534,11 +615,10 @@ class ModulesControllerConfigRechercheResultatWithPreferencesTest extends Admin_ } - - /** @test */ public function facettesCodesShouldNotContainsDeletedFacet() { - $this->assertXPath('//input[@id="facettes_codes"][@value="SAMDLHNEWF"]'); + $this->assertXPath('//input[@name="facettes_codes"][@value="S;A;M;D;L;HNEWF"]', + $this->_response->getBody()); } @@ -568,27 +648,25 @@ class ModulesControllerConfigRechercheResultatWithPreferencesTest extends Admin_ /** @test */ public function champTitreShouldBeAvailableForDisplayModeTable() { - $this->assertXPathContentContains('//div[@code="J"]', 'Titre', $this->_response->getBody()); + $this->assertXPathContentContains('//li[@data-code="J"]', 'Titre', $this->_response->getBody()); } - /** @test */ public function deletedFacetShouldNotAppearInDragAndDrop() { - $this->assertNotXPath('//div[@code="HDELF"]', $this->_response->getBody()); + $this->assertNotXPath('//li[@data-code="HDELF"]', $this->_response->getBody()); } - /** @test */ public function customFacetShouldAppearInDragAndDrop() { - $this->assertXPathContentContains('//div[@code="HNEWF"]', 'New Facet',$this->_response->getBody()); + $this->assertXPathContentContains('//li[@data-code="HNEWF"]', 'New Facet', $this->_response->getBody()); } /** @test */ public function champDisponibiliteShouldBeAvailableForDisplayModeTable() { - $this->assertXPathContentContains('//div[@code="V"]', 'En rayon', $this->_response->getBody()); + $this->assertXPathContentContains('//li[@data-code="V"]', 'En rayon', $this->_response->getBody()); } @@ -596,15 +674,18 @@ class ModulesControllerConfigRechercheResultatWithPreferencesTest extends Admin_ public function zoneFacetteShouldContainsAfficherLesFacettes() { $this->assertXPathContentContains('//select[@name="facettes_actif"]//option', 'Afficher les facettes'); } - } -class ModulesControllerCmsArticleViewByDateTest extends Admin_AbstractControllerTestCase { +class ModulesControllerCmsArticleViewByDateTest + extends Admin_AbstractControllerTestCase { + + protected $_storm_default_to_volatile = true; + /** @test */ - function inputForTitreShouldBePresent() { + public function inputForTitreShouldBePresent() { $this->dispatch('/admin/modules/cms?config=site&id_profil=2&type_module=cms&action1=articleviewbydate&action2=', true); $this->assertXPath('//input[@type="text"][@name="titre"]'); } @@ -613,7 +694,11 @@ class ModulesControllerCmsArticleViewByDateTest extends Admin_AbstractController -class ModulesControllerChangeKiosqueSelectionPostSaveIdPanierTest extends Admin_AbstractControllerTestCase { +class ModulesControllerChangeKiosqueSelectionPostSaveIdPanierTest + extends Admin_AbstractControllerTestCase { + + protected $_storm_default_to_volatile = true; + public function setUp() { parent::setUp(); @@ -651,7 +736,11 @@ class ModulesControllerChangeKiosqueSelectionPostSaveIdPanierTest extends Admin_ -abstract class ModulesControllerChangeKiosqueSelectionTestCase extends Admin_AbstractControllerTestCase { +abstract class ModulesControllerChangeKiosqueSelectionTestCase + extends Admin_AbstractControllerTestCase { + + protected $_storm_default_to_volatile = true; + public function setUp() { parent::setUp(); @@ -679,16 +768,12 @@ abstract class ModulesControllerChangeKiosqueSelectionTestCase extends Admin_Abs -class ModulesControllerChangeKiosqueSelectionDataActionTest extends ModulesControllerChangeKiosqueSelectionTestCase{ - public function setUp() { - parent::setUp(); - - $this->dispatch('/admin/modules/kiosque-change-data/id_module/3'); - } - +class ModulesControllerChangeKiosqueSelectionDataActionTest + extends ModulesControllerChangeKiosqueSelectionTestCase{ /** @test */ public function titleShouldSelectionnerUnPanierOuDomainePourKiosque() { + $this->dispatch('/admin/modules/kiosque-change-data/id_module/3'); $this->assertXPathContentContains('//title', 'Sélectionnez un panier ou un domaine', $this->_response->getBody()); } } @@ -696,7 +781,9 @@ class ModulesControllerChangeKiosqueSelectionDataActionTest extends ModulesContr -class ModulesControllerChangeKiosqueSelectionPostSaveIdCatalogueTest extends ModulesControllerChangeKiosqueSelectionTestCase{ +class ModulesControllerChangeKiosqueSelectionPostSaveIdCatalogueTest + extends ModulesControllerChangeKiosqueSelectionTestCase{ + public function setUp() { parent::setUp(); @@ -718,13 +805,14 @@ class ModulesControllerChangeKiosqueSelectionPostSaveIdCatalogueTest extends Mod public function idCatalogueShouldBeResetToZero() { $this->assertEquals(0, $this->saved_preferences['id_panier']); } - } -class ModulesControllerChangeKiosqueSelectionPostSaveNullPanierTest extends ModulesControllerChangeKiosqueSelectionTestCase { +class ModulesControllerChangeKiosqueSelectionPostSaveNullPanierTest + extends ModulesControllerChangeKiosqueSelectionTestCase { + public function setUp() { parent::setUp(); @@ -750,7 +838,8 @@ class ModulesControllerChangeKiosqueSelectionPostSaveNullPanierTest extends Modu -class ModulesControllerRechercheWithCVSActivateTest extends Admin_AbstractControllerTestCase { +class ModulesControllerRechercheWithCVSActivateTest + extends Admin_AbstractControllerTestCase { public function setup() { parent::setup(); @@ -780,7 +869,10 @@ class ModulesControllerRechercheWithCVSActivateTest extends Admin_AbstractContro -class ModulesControllerRechercheWithCVSActivatePostTest extends Admin_AbstractControllerTestCase { +class ModulesControllerRechercheWithCVSActivatePostTest + extends Admin_AbstractControllerTestCase { + + protected $_storm_default_to_volatile = true; public function setup() { parent::setup(); @@ -845,22 +937,17 @@ class ModulesControllerRechercheWithCVSActivatePostTest extends Admin_AbstractCo } - /** @test */ public function afterSaveCvsDisplayPositionShouldBe0() { $this->assertEquals(0, $this->saved_preferences['cvs_display_position']); } - } class ModulesControllerSearchPostValidationTest extends Admin_AbstractControllerTestCase { - public function setup() { - parent::setup(); - } - + protected $_storm_default_to_volatile = true; public function expectedError() { $default_search_conf = @@ -926,6 +1013,8 @@ class ModulesControllerSearchPostValidationTest extends Admin_AbstractController class ModulesControllerFormulaireContactTest extends Admin_AbstractControllerTestCase { + protected $_storm_default_to_volatile = true; + public function setUp() { parent::setUp(); @@ -945,6 +1034,9 @@ class ModulesControllerFormulaireContactTest extends Admin_AbstractControllerTes class ModulesControllerFormulaireContactPostTest extends Admin_AbstractControllerTestCase { + + protected $_storm_default_to_volatile = true; + public function setUp() { parent::setUp(); @@ -962,6 +1054,8 @@ class ModulesControllerFormulaireContactPostTest extends Admin_AbstractControlle class ModulesControllerFormulaireContactDefaultSettingsTest extends Admin_AbstractControllerTestCase { + protected $_storm_default_to_volatile = true; + public function setUp() { parent::setUp(); @@ -979,6 +1073,4 @@ class ModulesControllerFormulaireContactDefaultSettingsTest extends Admin_Abstra public function bibSelectorCheckboxShouldNotBeChecked() { $this->assertXPath('//input[@name="bib_selector"][not(@checked)]'); } -} - -?> \ No newline at end of file +} \ No newline at end of file diff --git a/tests/application/modules/admin/controllers/SitothequeControllerTest.php b/tests/application/modules/admin/controllers/SitothequeControllerTest.php index 83b1ea18c4b0eaa6cda52291b7dc38f03cedc382..eeaa0bb5e3ca855c9eec0bf95602d6737daae7ef 100644 --- a/tests/application/modules/admin/controllers/SitothequeControllerTest.php +++ b/tests/application/modules/admin/controllers/SitothequeControllerTest.php @@ -70,6 +70,8 @@ abstract class SitothequeControllerTestCase extends Admin_AbstractControllerTest 'options_list' => 'web links;livres', 'model' => 'Sitotheque']); + $theme->getMeta()->setIndexable(true)->save(); + } @@ -284,6 +286,7 @@ class SitothequeControllerPostAddActionTest extends SitothequeControllerTestCase ['titre' => 'google', 'url' => 'http://www.google.fr', 'id_items' => '23-23', + 'field_2' => 'livres', 'domaine_ids' => 10], true); } @@ -319,6 +322,12 @@ class SitothequeControllerPostAddActionTest extends SitothequeControllerTestCase $this->assertContains('T10 HC0001', Class_Notice::find(1)->getFacettes()); } + + /** @test */ + public function pseudoNoticeShouldHaveIndexForCustomFieldTheme() { + $this->assertContains('HCFCF0001', Class_Notice::find(1)->getFacettes()); + } + /** @test */ public function cacheShouldHaveBeenCleaned() { $this->assertTrue($this->cache->methodHasBeenCalled('clean')); diff --git a/tests/application/modules/opac/controllers/DatasControllerTest.php b/tests/application/modules/opac/controllers/DatasControllerTest.php index c10d5b86701115056eb8167f8c3e1788dfd8048e..2a339913fa036a526e4ef90e2c75307e84017ca3 100644 --- a/tests/application/modules/opac/controllers/DatasControllerTest.php +++ b/tests/application/modules/opac/controllers/DatasControllerTest.php @@ -16,65 +16,72 @@ * * 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 DatasControllerTest extends AbstractControllerTestCase { + protected $_storm_default_to_volatile = true; + public function setUp() { parent::setUp(); - $this->fixture('Class_Formation', [ - 'id'=> 22, - 'sessions' => [ - $this->fixture('Class_SessionFormation', ['id'=>88, - 'date_debut' => '2014-12-12', - 'date_fin' => '2015-01-25']), - $this->fixture('Class_SessionFormation', ['id'=>89, - 'date_debut' => '2014-12-12', - 'date_fin' => '2015-01-25']), - $this->fixture('Class_SessionFormation', ['id'=>90, - 'date_debut' => '2014-12-12', - 'date_fin' => '2015-01-25']), - $this->fixture('Class_SessionFormation', ['id'=>91, - 'date_debut' => '2014-12-12', - 'date_fin' => '2015-01-25']) - ] - ]); - - $this->fixture('Class_CustomField', [ - 'id' => 19, - 'model' => 'SessionFormation', - 'meta' => $this->fixture('Class_CustomField_Meta', ['id' => 1, 'label' => 'thématique'])]); + $this->fixture('Class_Formation', + ['id'=> 22, + 'sessions' => [$this->fixture('Class_SessionFormation', + ['id'=>88, + 'date_debut' => '2014-12-12', + 'date_fin' => '2015-01-25']), + $this->fixture('Class_SessionFormation', + ['id'=>89, + 'date_debut' => '2014-12-12', + 'date_fin' => '2015-01-25']), + $this->fixture('Class_SessionFormation', + ['id'=>90, + 'date_debut' => '2014-12-12', + 'date_fin' => '2015-01-25']), + $this->fixture('Class_SessionFormation', + ['id'=>91, + 'date_debut' => '2014-12-12', + 'date_fin' => '2015-01-25']) + ] + ]); + + $this->fixture('Class_CustomField', + ['id' => 19, + 'model' => 'SessionFormation', + 'meta' => $this->fixture('Class_CustomField_Meta', + ['id' => 1, + 'label' => 'thématique'])]); + + $this->fixture('Class_CustomField_Value', + ['id' => 23, + 'custom_field_id' => 19, + 'value' => 'Macramé']); + } + - $this->fixture('Class_CustomField_Value', [ - 'id' => 23, - 'custom_field_id' => 19, - 'value' => 'Macramé' - ]); + protected function assertBody($content) { + $this->assertEquals($content, $this->_response->getBody()); } /** @test */ public function fieldsOfSessionFormationShouldReturnJson() { $this->dispatch('/opac/datas/fields/model/SessionFormation'); - $this->assertEquals( - '[{"priority":0,"id":19,"model":"SessionFormation","meta_id":1,"label":"th\u00e9matique","field_type":"text","options_list":""}]', - $this->_response->getBody()); + $this->assertBody('[{"priority":0,"id":19,"model":"SessionFormation","meta_id":1,"label":"th\u00e9matique","field_type":"text","options_list":"","indexable":0}]'); } /** @test */ public function valuesOfFieldThematiqueShouldReturnJson() { $this->dispatch('/opac/datas/values/field/19'); - $this->assertEquals( - '[{"value":"Macram\u00e9","id":23,"custom_field_id":19}]', - $this->_response->getBody()); + $this->assertBody('[{"value":"Macram\u00e9","id":23,"custom_field_id":19}]'); } + /** @test */ public function numberOfSessionForFormationShouldReturnJson() { $this->dispatch('/opac/datas/numberof/model/Class_Formation/id/22/children/Sessions'); - $this->assertEquals('4', $this->_response->getBody()); + $this->assertBody('4'); } -} -?> \ No newline at end of file +} \ No newline at end of file diff --git a/tests/application/modules/opac/controllers/FormulaireControllerTest.php b/tests/application/modules/opac/controllers/FormulaireControllerTest.php index 90677cb49ee0cb845deeec78f97a5f5ea0a20a83..b65b5f84ee547b5a62707d79c8248688d22a2500 100644 --- a/tests/application/modules/opac/controllers/FormulaireControllerTest.php +++ b/tests/application/modules/opac/controllers/FormulaireControllerTest.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 */ abstract class FormulaireControllerPostActionTestCase extends AbstractControllerTestCase { @@ -39,8 +39,63 @@ abstract class FormulaireControllerPostActionTestCase extends AbstractController } } +class FormulaireControllerWithEmailPostActionTest extends FormulaireControllerPostActionTestCase { + protected $_user; + + public function setUp() { + parent::setUp(); + + Class_Article::find(45)->setDestinationEmail('recipient@example.com'); + + Class_Profil::getCurrentProfil()->setMailSite('sender@example.com'); + + $user = Class_Users::newInstanceWithId(23, ['nom' => 'Mas', + 'prenom' => 'Fanto', + 'login' => 'fantomas']); + ZendAfi_Auth::getInstance()->logUser($user); + + $this->mock_transport = new MockMailTransport(); + Zend_Mail::setDefaultTransport($this->mock_transport); + $this->postDispatch('/formulaire/add/id_article/45', + ['nom' => 'Tinguette' , + 'prenom' => 'Quentin' ] + ,true); + + $this->new_formulaire = Class_Formulaire::find(2); + } + + /** @test */ + public function postFormulaireShouldReturnEmail() { + $this->assertXpathContentContains('//div','courriel',true ); + } + + + /** @test */ + public function mailContentShouldContainData() { + $this->assertContains('nom: Tinguette', quoted_printable_decode($this->mock_transport->getSentMails()[0]->getBodyText()->getContent())); + } + + + /** @test */ + public function emailFromShouldBeSender() { + $this->assertEquals('sender@example.com', $this->mock_transport->getSentMails()[0]->getFrom()); + } + + /** @test */ + public function emailToShouldBeRecipient() { + $this->assertEquals('recipient@example.com', $this->mock_transport->getSentMails()[0]->getRecipients()[0]); + } + + /** @test */ + public function emailSubjectShouldBeFormSent() { + $this->assertEquals('[Bokeh] Envoi d\'un formulaire', $this->mock_transport->getSentMails()[0]->getSubject()); + } + + +} + class FormulaireControllerPostActionTest extends FormulaireControllerPostActionTestCase { protected $_user; @@ -48,13 +103,13 @@ class FormulaireControllerPostActionTest extends FormulaireControllerPostActionT public function setUp() { parent::setUp(); - $user = Class_Users::newInstanceWithId(23, ['nom' => 'Mas', - 'prenom' => 'Fanto', + $user = Class_Users::newInstanceWithId(23, ['nom' => 'Mas', + 'prenom' => 'Fanto', 'login' => 'fantomas']); ZendAfi_Auth::getInstance()->logUser($user); - $this->postDispatch('/formulaire/add/id_article/45', + $this->postDispatch('/formulaire/add/id_article/45', ['nom' => 'Tinguette' , 'prenom' => 'Quentin' ] ,true); @@ -62,13 +117,12 @@ class FormulaireControllerPostActionTest extends FormulaireControllerPostActionT $this->new_formulaire = Class_Formulaire::find(2); } - /** @test */ public function saveFormulaireShouldHaveNomTinguette() { $this->assertEquals('Tinguette', $this->new_formulaire->getNom()); } - + /** @test */ public function dateCreationShouldBeNow() { $this->assertEquals('2012-10-23 12:32:00', $this->new_formulaire->getDateCreation()); @@ -123,7 +177,7 @@ class FormulaireControllerWithoutConnectedUserPostActionTest extends FormulaireC ZendAfi_Auth::getInstance()->clearIdentity(); - $this->postDispatch('/formulaire/add/id_article/45', + $this->postDispatch('/formulaire/add/id_article/45', ['nom' => 'Tinguette' , 'prenom' => 'Quentin' ] ,true); @@ -135,7 +189,7 @@ class FormulaireControllerWithoutConnectedUserPostActionTest extends FormulaireC /** @test */ public function saveFormulaireShouldNotHaveAnyUsers() { $this->assertEmpty($this->new_formulaire->getUser()); - + } } diff --git a/tests/application/modules/opac/controllers/NoticeAjaxControllerTest.php b/tests/application/modules/opac/controllers/NoticeAjaxControllerTest.php index 8abcfa74c5769cdccb914b95598d66d99f9fe6e3..d9bacbdebb48590f993af01c7e79eed544173f79 100644 --- a/tests/application/modules/opac/controllers/NoticeAjaxControllerTest.php +++ b/tests/application/modules/opac/controllers/NoticeAjaxControllerTest.php @@ -291,7 +291,7 @@ class NoticeAjaxController1DTouchTest extends AbstractControllerTestCase { 'type_doc_id' => Class_TypeDoc::ONEDTOUCH]); $album->index(); - $this->dispatch('noticeajax/resnumeriques?id_notice=' . $album->getNoticeId(), true); + $this->dispatch('noticeajax/ resnumeriques?id_notice=' . $album->getNoticeId(), true); } @@ -300,6 +300,12 @@ class NoticeAjaxController1DTouchTest extends AbstractControllerTestCase { $this->assertXPathContentContains('//a[@href="http://music.1dtouch.com/users/auth/my_bib?dest=albums/9"]', 'l\'album sur 1DTouch', $this->_response->getBody()); } + + + /** @test */ + public function onloadUtilShouldBeLoaded() { + $this->assertXPath('//script[contains(@src, "onload_util")]'); + } } @@ -1520,6 +1526,12 @@ class NoticeAjaxControllerNoticeWithAvisAvisAbonneTest extends NoticeAjaxControl } + /** @test */ + public function globalCsssShouldBePresent() { + $this->assertXPath('//link[contains(@href, "global.css")]', $this->_response->getBody()); + } + + /** @test */ public function answerShouldContainsAvisDePaul() { $this->assertXPathContentContains('//body', 'Tres Bien'); @@ -1780,6 +1792,12 @@ class NoticeAjaxControllerBiographieTest extends NoticeAjaxControllerBiographieT $this->dispatch('/opac/noticeajax/biographie/id_notice/23', true); $this->assertNotXPathContentContains('//a', 'Modifier la biographie'); } + + + /** @test */ + public function onloadUtilShouldBeLoaded() { + $this->assertXPath('//script[contains(@src, "onload_util")]', $this->_response->getBody()); + } } @@ -1930,7 +1948,6 @@ class NoticeAjaxControllerWithLocalisationTest extends NoticeAjaxControllerLocal /** @test */ public function urlShoudlBeAsExpected() { - $this->assertContains('/userfiles/photobib/plans/bib_0_plan_1.png', $this->_json->url); } diff --git a/tests/application/modules/opac/controllers/RechercheControllerTest.php b/tests/application/modules/opac/controllers/RechercheControllerTest.php index 54a0af65f466769aed184138388edb16722cc1f7..e95baf61dc4afc8bd7e536014a4999b3a75b0026 100644 --- a/tests/application/modules/opac/controllers/RechercheControllerTest.php +++ b/tests/application/modules/opac/controllers/RechercheControllerTest.php @@ -184,6 +184,7 @@ class RechercheControllerPagerTest extends RechercheControllerNoticeTestCase { ->with("Select id_notice, type_doc, facettes from notices Where MATCH(titres, auteurs, editeur, collection, matieres, dewey) AGAINST('+(POMME POMMES POM)' IN BOOLEAN MODE) and MATCH(facettes) AGAINST('+T3' IN BOOLEAN MODE) limit 15000", true, false) ->answers([]) + ->beStrict(); Zend_Registry::set('sql', $mock_sql); @@ -208,6 +209,7 @@ class RechercheControllerPagerTest extends RechercheControllerNoticeTestCase { ->with("Select id_notice, MATCH(alpha_titre) AGAINST(' POMME') as rel1, MATCH(alpha_auteur) AGAINST(' POMME') as rel2 from notices Where MATCH(titres, auteurs, editeur, collection, matieres, dewey) AGAINST('+(POMME POMMES POM)' IN BOOLEAN MODE) and MATCH(facettes) AGAINST('+T3' IN BOOLEAN MODE) order by (rel1 * 1.5) + (rel2) desc", 50, null) ->answers([$this->_notice]) + ->beStrict(); } @@ -607,15 +609,11 @@ class RechercheControllerVignetteTest extends RechercheControllerNoticeTestCase class RechercheControllerVignetteEmptyTest extends AbstractControllerTestCase { - public function tearDown() { - Storm_Model_Loader::defaultToDb(); - } + protected $_storm_default_to_volatile = true; public function setUp() { parent::setUp(); - Storm_Model_Loader::defaultToVolatile(); - $article = $this->fixture('Class_Article', ['id' => 123, 'titre' => 'An article with img', @@ -624,12 +622,11 @@ class RechercheControllerVignetteEmptyTest extends AbstractControllerTestCase { $this->dispatch('recherche/vignette/id_notice/1', true); } + /** @test */ public function responseShouldRedirectToVignetteUrl() { $this->assertContains('/temp/vignettes_titre/notice_1.png', $this->getResponseLocation()); - - } } diff --git a/tests/bootstrap.php b/tests/bootstrap.php index e35202db3fcf20d1f28d8ff15449a34c09032b29..ba842159d211a2970845302981e76143cc240479 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -82,9 +82,6 @@ $translate->addTranslation(LANG_DIR.'ro.mo', 'ro'); $translate->addTranslation(LANG_DIR.'en.mo', 'en'); $translate->setLocale('fr'); -//Initialize the router for tests that do not rely on dispatch -Zend_Controller_Front::getInstance()->getRouter()->route(new Zend_Controller_Request_Http('http://localhost/')); - require_once 'tests/library/ZendAfi/View/Helper/ViewHelperTestCase.php'; require_once 'tests/application/modules/admin/controllers/AdminAbstractControllerTestCase.php'; require_once 'tests/fixtures/RessourcesNumeriquesFixtures.php'; diff --git a/tests/library/Class/AdminVarTest.php b/tests/library/Class/AdminVarTest.php index 21236ddc4978c199bb40eaf0a9c66e096f33480f..ddbceaeda930a1cdd47121610058b274a54055ba 100644 --- a/tests/library/Class/AdminVarTest.php +++ b/tests/library/Class/AdminVarTest.php @@ -92,6 +92,16 @@ class AdminVarTestGet extends AdminVarTestCase { $this->assertEquals('<script type="text/javascript">\'test\'', Class_AdminVar::get('JS_STAT')); } + + + /** @test */ + public function unleashFacetDescriptionShouldContainsLinkToRemoteFiles() { + $this->fixture('Class_AdminVar', + ['id' => 'UNLEASHED_FACETS', + 'valeur' => '']); + + $this->assertContains('/blob/' . BOKEH_VERSION . '/library/Class/Codification.php', Class_AdminVar::getStaticMeta('UNLEASHED_FACETS')->getDescription()); + } } diff --git a/tests/library/Class/Cosmogramme/Integration/PhaseNoticeTest.php b/tests/library/Class/Cosmogramme/Integration/PhaseNoticeTest.php index b2c762854efe722d9defdce8303d60f1f9ea0ba4..57d486e32ef6905a6c0fc1b91797368d741d663a 100644 --- a/tests/library/Class/Cosmogramme/Integration/PhaseNoticeTest.php +++ b/tests/library/Class/Cosmogramme/Integration/PhaseNoticeTest.php @@ -25,10 +25,24 @@ 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]); + $this->fixture('Class_IntBib', + ['id' => 1, + 'comm_sigb' => Class_IntBib::COM_NANOOK, + 'comm_params' => ['url_serveur' => 'http://bib.valensol.net']]); + + $this->fixture('Class_CodifThesaurus', + ['id' => 1, + 'libelle' => 'AGE', + 'code' => null, + 'rules' => null]); + + Class_CodifThesaurus::addFacetForSigb('Public' , '993$a',Class_IntBib::COM_NANOOK); + $this->fixture('Class_Exemplaire', ['id' => 889039, 'id_int_bib' => 2]); @@ -76,6 +90,12 @@ class PhaseNoticeImportTest extends PhaseNoticeTestCase { } + /** @test */ + public function onlyPublicFacetShouldBeInDb() { + $this->assertSame([Class_CodifThesaurus::findFirstBy(['libelle_facette' => 'Public'])], Class_CodifThesaurus::findAll()); + } + + /** * @test * @see http://forge.afi-sa.fr/issues/26261 diff --git a/tests/library/Class/MoteurRecherche/MoteurRechercheFacettesTest.php b/tests/library/Class/MoteurRecherche/MoteurRechercheFacettesTest.php index d1e6b4735aadc86039a0f573754ac6841498bd11..86d8ad1fff68a3edd0ba78a69a23d9d4e40125dc 100644 --- a/tests/library/Class/MoteurRecherche/MoteurRechercheFacettesTest.php +++ b/tests/library/Class/MoteurRecherche/MoteurRechercheFacettesTest.php @@ -48,6 +48,7 @@ class MoteurRechercheFacettesTest extends ModelTestCase { $this->moteur_recherche = new Class_MoteurRecherche(); $this->_requete = "Select id_notice,type_doc,facettes from notices Where MATCH(titres,auteurs,editeur,collection,matieres,dewey) AGAINST('+(POMME POMMES POM)' IN BOOLEAN MODE) limit 15000"; + $this->mock_sql ->whenCalled('fetchAll') ->with($this->_requete, true, false) @@ -76,24 +77,25 @@ class MoteurRechercheFacettesTest extends ModelTestCase { $this->fixture('Class_Bib', ['id' => 1, - 'libelle' => 'Annecy']); + 'libelle' => 'Annecy']); $this->fixture('Class_Bib', ['id' => 2, - 'libelle' => 'Seynod']); + 'libelle' => 'Seynod']); $this->fixture('Class_Bib', ['id' => 3, - 'libelle' => 'Cran']); - - $this->facettes = $this->moteur_recherche->getFacettes($this->_requete, - ['facettes_nombre' => 5, - 'tags_actif' => 1, - 'tags_codes'=> 'MDPZAHTES1', - 'tags_nombre' => 30, - 'facettes_codes'=>'MFSABZLYHTHEMHTES1V', - 'facettes_actif' => 1 - ]); + 'libelle' => 'Cran']); + + $this->facettes = $this->moteur_recherche + ->getFacettes($this->_requete, + ['facettes_nombre' => 5, + 'tags_actif' => 1, + 'tags_codes'=> 'MDPZAHTES1', + 'tags_nombre' => 30, + 'facettes_codes'=>'MFSABZLYHTHEMHTES1V', + 'facettes_actif' => 1 + ]); } @@ -103,7 +105,6 @@ class MoteurRechercheFacettesTest extends ModelTestCase { } - /** @test */ public function facettesCountShouldBeNine() { $this->assertEquals(9, count($this->facettes['facettes'])); @@ -121,7 +122,8 @@ class MoteurRechercheFacettesTest extends ModelTestCase { $this->assertEquals(['id' => 'M6567', 'libelle' => 'Pommes : albums', 'nombre' => 22], - $this->facettes['tags'][3]); + $this->facettes['tags'][3], + json_encode($this->facettes['tags'])); } @@ -169,11 +171,16 @@ class MoteurRechercheFacettesTest extends ModelTestCase { } - /** @test */ public function otherFacetteThesauriShouldBeCulture() { $this->assertEquals('HTES10002', array_keys($this->facettes['facettes']['HTES1'])[0]); - $this->assertEquals(23, $this->facettes['facettes']['HTES1']['HTES10002']); + $this->assertEquals(23, $this->facettes['facettes']['HTES1']['HTES10002']); + } + + + /** @test */ + public function firstFacetMatiereShouldBePomme() { + $this->assertEquals(22, $this->facettes['facettes']['M']['M6567']); } @@ -185,7 +192,7 @@ class MoteurRechercheFacettesTest extends ModelTestCase { /** @test */ - public function WithCacheShouldNotExecuteSQL(){ + public function withCacheShouldNotExecuteSQL(){ $cache = Storm_Test_ObjectWrapper::mock(); Storm_Cache::setDefaultZendCache($cache); $cache @@ -193,32 +200,33 @@ class MoteurRechercheFacettesTest extends ModelTestCase { ->answers(true) ->whenCalled('load') ->answers(serialize($this->facettes)); + $this->mock_sql->clearAllRedirections(); - $this->assertEquals( $this->facettes, - $this->moteur_recherche->getFacettes($this->_requete, - ['facettes_nombre' => 4, - 'tags_actif' => 1, - 'tags_codes'=> 'MDPZAHTES1', - 'tags_nombre' => 30, - 'facettes_codes'=>'MFGSBZLYHTHEMHTES1', - 'facettes_actif' => 1 - ])); + + $this->assertEquals($this->facettes, + $this->moteur_recherche + ->getFacettes($this->_requete, + ['facettes_nombre' => 4, + 'tags_actif' => 1, + 'tags_codes'=> 'MDPZAHTES1', + 'tags_nombre' => 30, + 'facettes_codes'=>'MFGSBZLYHTHEMHTES1', + 'facettes_actif' => 1])); } /** @test */ public function whenAuthorsUnleashedNumberOfFacetsShouldBe813() { Class_AdminVar::set('UNLEASHED_FACETS', 'A'); - $this->facettes = $this->moteur_recherche->getFacettes($this->_requete, - ['facettes_nombre' => 5, - 'tags_actif' => 1, - 'tags_codes'=> 'MDPZAHTES1', - 'tags_nombre' => 30, - 'facettes_codes'=>'MFSABZLYHTHEMHTES1V', - 'facettes_actif' => 1 - ]); + $this->facettes = $this->moteur_recherche + ->getFacettes($this->_requete, + ['facettes_nombre' => 5, + 'tags_actif' => 1, + 'tags_codes'=> 'MDPZAHTES1', + 'tags_nombre' => 30, + 'facettes_codes'=>'MFSABZLYHTHEMHTES1V', + 'facettes_actif' => 1]); $this->assertEquals(813, count($this->facettes['facettes']['A'])); - } } @@ -227,4276 +235,2849 @@ class MoteurRechercheFacettesTest extends ModelTestCase { class MoteurRechercheFacettesFixtures { public function resultatPomme() { - return array ( - 0 => - array ( - '157', - '1', - ' A200 A201 M124 Lfre T1 B1 HTES10002', - ), - 1 => - array ( - '367', - '1', - ' A444 A445 A446 M297 M298 Lfre T1 B1 V1', - ), - 2 => - array ( - '656', - '1', - ' A800 A801 M515 M516 M505 M517 Lfre T1 B1 V1', - ), - 3 => - array ( - '2027', - '1', - ' A2183 Lfre T1 B1 V2 V3', - ), - 4 => - array ( - '2396', - '1', - ' A2525 T1 B1', - ), - 5 => - array ( - '2553', - '1', - ' A2694 A2695 A2696 Lfre T1 B1', - ), - 6 => - array ( - '3048', - '3', - ' A3181 M208 M1763 Lfre T3 B1 HTES1000100003', - ), - 7 => - array ( - '359779', - '4', - ' T4 B1 G22 S26 Y7MA 2030-12', - ), - 8 => - array ( - '4102', - '1', - ' A4339 Lfre T1 B1', - ), - 9 => - array ( - '4222', - '1', - ' A3109 M2413 M12003 Lfre T1 B1', - ), - 10 => - array ( - '4330', - '1', - ' A4569 A4570 M2458 Lfre T1 B1', - ), - 11 => - array ( - '4347', - '1', - ' A69 A2696 Lfre T1 B1', - ), - 12 => - array ( - '4419', - '2', - ' T2 B1', - ), - 13 => - array ( - '4444', - '2', - ' T2 B1', - ), - 14 => - array ( - '5136', - '1', - ' D79143 A5421 M2947 M2948 M2949 M2950 Lfre T1 B1', - ), - 15 => - array ( - '5266', - '1', - ' D3637 A5566 M2619 M2617 Lfre T1 B1', - ), - 16 => - array ( - '5335', - '1', - ' D6128 A5633 A5634 M3094 Lfre T1 B1', - ), - 17 => - array ( - '5404', - '1', - ' A5730 M3113 Lfre T1 B1', - ), - 18 => - array ( - '5477', - '1', - ' A2897 A771 A4820 M3150 Lfre T1 B1', - ), - 19 => - array ( - '5677', - '4', - ' A5945 M212 M2188 Lfre T4 B1 G18', - ), - 20 => - array ( - '5775', - '4', - ' A6051 M2188 T4 B1 G18', - ), - 21 => - array ( - '6005', - '4', - ' A6323 A6324 T4 B1 G2', - ), - 22 => - array ( - '7567', - '1', - ' D521 A7966 M4094 M4095 Lfre T1 B1', - ), - 23 => - array ( - '312878', - '2', - ' T2 B1', - ), - 24 => - array ( - '9263', - '3', - ' M1277 T3 B1', - ), - 25 => - array ( - '10403', - '1', - ' A10690 A10691 Lfre T1 B1', - ), - 26 => - array ( - '10971', - '1', - ' A317 Lfre T1 B1 G57', - ), - 27 => - array ( - '11908', - '1', - ' A12072 A12073 Lfre T1 B1', - ), - 28 => - array ( - '12093', - '1', - ' A12214 A12215 A446 M2632 Lfre T1 B1', - ), - 29 => - array ( - '12213', - '1', - ' A12309 A4656 Lfre T1 B1', - ), - 30 => - array ( - '12255', - '1', - ' A12309 A4656 Lfre T1 B1', - ), - 31 => - array ( - '12261', - '1', - ' A12309 A4656 Lfre T1 B1', - ), - 32 => - array ( - '12746', - '1', - ' A12742 Lfre T1 B1', - ), - 33 => - array ( - '13442', - '1', - ' A9545 M6567 HTES10002 M2805 Lfre T1 B1', - ), - 34 => - array ( - '14795', - '1', - ' A965 A14276 M7073 Lfre T1 B1', - ), - 35 => - array ( - '15412', - '3', - ' A14742 M1758 Lfre T3 B1', - ), - 36 => - array ( - '36964', - '1', - ' D6138 A29211 M3744 Lfre T1 B1', - ), - 37 => - array ( - '18290', - '3', - ' M1955 Lfre T3 B1', - ), - 38 => - array ( - '18809', - '1', - ' D5397 A17183 A17184 M8533 Lfre T1 B1 S26 S27 YCRPE YMDE', - ), - 39 => - array ( - '18964', - '1', - ' A8474 M1962 Lfre T1 B1 G57', - ), - 40 => - array ( - '19084', - '1', - ' A14479 A17381 Lfre T1 B1 G57', - ), - 41 => - array ( - '19098', - '3', - ' A605 Lfre T3 B1 S26 Y7MA YVOI', - ), - 42 => - array ( - '19332', - '1', - ' A1363 A1748 Lfre T1 B1', - ), - 43 => - array ( - '19918', - '1', - ' D823 A18024 A18025 Lfre T1 B1 G57', - ), - 44 => - array ( - '20098', - '1', - ' D5516 A18186 M8877 M4526 Lfre T1 B1', - ), - 45 => - array ( - '20359', - '1', - ' A18378 M9034 M9037 M9036 M9035 Lfre Lger Leng T1 B1', - ), - 46 => - array ( - '20550', - '2', - ' T2 B1', - ), - 47 => - array ( - '21661', - '1', - ' D79373 A19352 M9420 Lfre T1 B1', - ), - 48 => - array ( - '22344', - '1', - ' A19857 Lfre T1 B1 G57', - ), - 49 => - array ( - '22363', - '5', - ' M9721 Lfre T5 B1', - ), - 50 => - array ( - '22367', - '1', - ' A4320 A4321 M746 M876 Lfre T1 B1', - ), - 51 => - array ( - '22783', - '1', - ' D577 A20160 M3228 M2098 M3456 Lfre T1 B1 S27 Y7MA', - ), - 52 => - array ( - '24706', - '1', - ' M10393 M1277 Lfre T1 B1', - ), - 53 => - array ( - '25068', - '1', - ' D3389 A18696 M1178 Lfre T1 B1', - ), - 54 => - array ( - '25388', - '1', - ' A22169 A22176 A15365 M7073 Lfre T1 B1', - ), - 55 => - array ( - '26904', - '1', - ' A13074 A13075 M6567 HTES10002 M3549 Lfre T1 B1', - ), - 56 => - array ( - '26927', - '2', - ' T2 B1', - ), - 57 => - array ( - '27106', - '1', - ' A3468 A23426 Lfre T1 B1 G57', - ), - 58 => - array ( - '28544', - '4', - ' A24360 A24361 Lrum T4 B1 G13', - ), - 59 => - array ( - '28684', - '1', - ' A24442 Lfre T1 B1', - ), - 60 => - array ( - '29046', - '4', - ' A6752 T4 B1 G18', - ), - 61 => - array ( - '29113', - '4', - ' M55187 M55188 M55189 T4 B1', - ), - 62 => - array ( - '29830', - '1', - ' A4656 A4657 M861 Lfre T1 B1', - ), - 63 => - array ( - '29833', - '1', - ' A4656 A4657 Lfre T1 B1', - ), - 64 => - array ( - '29835', - '1', - ' A4656 A4657 Lfre T1 B1', - ), - 65 => - array ( - '29837', - '1', - ' A4656 A4657 M2324 Lfre T1 B1', - ), - 66 => - array ( - '29840', - '1', - ' A4656 A4657 Lfre T1 B1', - ), - 67 => - array ( - '29842', - '1', - ' A4656 A4657 M562 Lfre T1 B1', - ), - 68 => - array ( - '30227', - '3', - ' A1379 M26 Lfre T3 B1', - ), - 69 => - array ( - '336855', - '3', - ' P85 A6051 T3 B1', - ), - 70 => - array ( - '31013', - '2', - ' T2 B1', - ), - 71 => - array ( - '31313', - '4', - ' A26010 M55197 T4 B1 G18', - ), - 72 => - array ( - '31404', - '1', - ' D113 A26058 M8778 M8284 M1932 Lfre T1 B1', - ), - 73 => - array ( - '32708', - '3', - ' A26796 Lfre T3 B1', - ), - 74 => - array ( - '33547', - '1', - ' A10437 M846 T1 B1 G8', - ), - 75 => - array ( - '33604', - '1', - ' A24442 M12755 Lfre T1 B1', - ), - 76 => - array ( - '33857', - '1', - ' M170 Lfre T1 B1', - ), - 77 => - array ( - '34499', - '1', - ' A27868 M12924 M1478 Lfre T1 B1', - ), - 78 => - array ( - '34557', - '3', - ' A27552 M985 Lgre T3 B1', - ), - 79 => - array ( - '35997', - '3', - ' A28704 Lfre T3 B1', - ), - 80 => - array ( - '36435', - '2', - ' T2 B1', - ), - 81 => - array ( - '36899', - '3', - ' P85 A29183 A34600 M212 T3 B1 S21 Y7MA', - ), - 82 => - array ( - '37056', - '1', - ' A29259 M6201 Lfre T1 B1', - ), - 83 => - array ( - '37293', - '5', - ' M13503 Lfre T5 B1', - ), - 84 => - array ( - '38119', - '1', - ' A11438 A2699 M2558 Lfre T1 B1 G57', - ), - 85 => - array ( - '39117', - '1', - ' D5765 A30374 M13962 Lfre T1 B1', - ), - 86 => - array ( - '39126', - '1', - ' D523 A17354 M13964 Lfre T1 B1', - ), - 87 => - array ( - '39130', - '1', - ' D5516 A30379 M13965 M13966 Lfre T1 B1', - ), - 88 => - array ( - '39489', - '3', - ' M2596 T3 B1', - ), - 89 => - array ( - '40076', - '0', - ' A246 Lfre T0 B1', - ), - 90 => - array ( - '40297', - '3', - ' A31030 Lfre T3 B1', - ), - 91 => - array ( - '40419', - '4', - ' M428 T4 B1 G18', - ), - 92 => - array ( - '40682', - '1', - ' A31206 A4281 M205 Lfre T1 B1', - ), - 93 => - array ( - '41400', - '4', - ' A6752 T4 B1', - ), - 94 => - array ( - '41648', - '3', - ' A10960 Lfre T3 B1', - ), - 95 => - array ( - '42301', - '1', - ' A7371 M11757 M2398 Lfre T1 B1', - ), - 96 => - array ( - '42483', - '1', - ' D1742 A32254 M14673 M2693 M2601 Lfre T1 B1', - ), - 97 => - array ( - '42503', - '0', - ' A6051 M13448 T0 B1', - ), - 98 => - array ( - '42522', - '1', - ' A4657 A4656 Lfre T1 B1', - ), - 99 => - array ( - '42737', - '1', - ' A4656 A4657 M4096 Lfre T1 B1', - ), - 100 => - array ( - '42764', - '1', - ' A4656 A4657 M1314 Lfre T1 B1', - ), - 101 => - array ( - '42841', - '1', - ' A4656 A4657 M14758 Lfre T1 B1', - ), - 102 => - array ( - '42955', - '1', - ' A4656 A4657 M5780 Lfre T1 B1', - ), - 103 => - array ( - '42971', - '1', - ' A4656 A4657 M6222 Lfre T1 B1', - ), - 104 => - array ( - '42994', - '1', - ' A4656 A4657 M3192 Lfre T1 B1', - ), - 105 => - array ( - '43823', - '1', - ' A4656 M2008 Lfre T1 B1', - ), - 106 => - array ( - '43836', - '1', - ' A4656 M4896 Lfre T1 B1', - ), - 107 => - array ( - '44403', - '2', - ' T2 B1', - ), - 108 => - array ( - '44625', - '1', - ' D5391 A33469 M99 Lfre T1 B1', - ), - 109 => - array ( - '44629', - '1', - ' D5768 A33471 M12674 Lfre T1 B1', - ), - 110 => - array ( - '44630', - '1', - ' D1521 A9321 M15170 M6645 Lfre T1 B1', - ), - 111 => - array ( - '44631', - '1', - ' D523 A33472 M5461 M7378 Lfre T1 B1', - ), - 112 => - array ( - '44635', - '1', - ' D5999 A4146 M15171 M2625 M7378 Lfre T1 B1', - ), - 113 => - array ( - '44636', - '1', - ' D6132 A9321 M15172 Lfre T1 B1', - ), - 114 => - array ( - '44637', - '1', - ' D523 A22411 M15173 Lfre T1 B1', - ), - 115 => - array ( - '44638', - '1', - ' D535 A9321 M2466 Lfre T1 B1', - ), - 116 => - array ( - '44806', - '3', - ' T3 B1', - ), - 117 => - array ( - '46924', - '1', - ' A20874 M746 Lfre T1 B1', - ), - 118 => - array ( - '49490', - '1', - ' D530 A35817 M4874 M2731 M7378 Lfre T1 B1', - ), - 119 => - array ( - '336537', - '3', - ' P98423 A24005 M896 T3 B1 S27 S4 YCANAL Y7MA', - ), - 120 => - array ( - '51390', - '3', - ' A36784 A20527 Lfre T3 B1', - ), - 121 => - array ( - '52297', - '1', - ' A37297 A37298 M865 M854 Lfre T1 B1', - ), - 122 => - array ( - '52844', - '1', - ' A4657 A12309 A4656 Lfre T1 B1', - ), - 123 => - array ( - '53134', - '1', - ' A11318 A10073 M16931 M1900 M5611 M2054 Lfre T1 B1', - ), - 124 => - array ( - '54901', - '1', - ' A4656 A4657 Lfre T1 B1', - ), - 125 => - array ( - '55010', - '2', - ' T2 B1', - ), - 126 => - array ( - '55873', - '4', - ' M3865 T4 B1', - ), - 127 => - array ( - '55892', - '2', - ' T2 B1', - ), - 128 => - array ( - '55937', - '1', - ' A25131 M129 M746 M6567 HTES10002 Lfre T1 B1', - ), - 129 => - array ( - '56491', - '1', - ' A13948 M17923 M17924 M17925 Lfre T1 B1', - ), - 130 => - array ( - '56876', - '3', - ' P593 A39966 A39967 T3 B1 G57 S1 YTRA Y7MA YCANAL', - ), - 131 => - array ( - '56988', - '1', - ' A40037 M1277 Lfre T1 B1', - ), - 132 => - array ( - '57445', - '3', - ' A6752 Lfre T3 B1', - ), - 133 => - array ( - '57645', - '3', - ' A40436 Lfre T3 B1', - ), - 134 => - array ( - '58103', - '3', - ' A40741 T3 B1 S26 YCANAL', - ), - 135 => - array ( - '58175', - '1', - ' D64165 A40794 M7073 Lfre T1 B1', - ), - 136 => - array ( - '59013', - '1', - ' A40680 A40681 Lfre T1 B1', - ), - 137 => - array ( - '59088', - '4', - ' A26010 M55197 T4 B1 G18', - ), - 138 => - array ( - '59351', - '1', - ' A11316 A10001 M6567 HTES10002 M6222 Lfre T1 B1', - ), - 139 => - array ( - '59808', - '4', - ' A41623 A23719 A41624 A41625 Lfre T4 B1', - ), - 140 => - array ( - '61304', - '4', - ' A42498 T4 B1', - ), - 141 => - array ( - '61532', - '1', - ' D530 A42612 M2732 Lfre T1 B1', - ), - 142 => - array ( - '61916', - '1', - ' D6352 A12306 A42796 M2413 Lfre T1 B1', - ), - 143 => - array ( - '62684', - '1', - ' D560 A39786 M8140 M2625 Lfre T1 B1', - ), - 144 => - array ( - '63179', - '1', - ' A15075 A747 Lfre T1 B1 G19', - ), - 145 => - array ( - '63314', - '1', - ' A43499 M975 Lfre T1 B1', - ), - 146 => - array ( - '63372', - '1', - ' D580 A29259 M18198 M19456 Lfre T1 B1', - ), - 147 => - array ( - '63401', - '1', - ' D521 A22411 M6602 M8778 Lfre T1 B1', - ), - 148 => - array ( - '64219', - '3', - ' A600 A5127 A4573 Lfre T3 B1', - ), - 149 => - array ( - '65349', - '2', - ' T2 B1', - ), - 150 => - array ( - '336445', - '3', - ' P811 A6752 T3 B1', - ), - 151 => - array ( - '66324', - '1', - ' A19185 A44957 M297 M7540 M9257 Lfre T1 B1', - ), - 152 => - array ( - '66508', - '1', - ' A4292 A8371 Lfre T1 B1 G57', - ), - 153 => - array ( - '66509', - '1', - ' A9402 A16706 Lfre T1 B1 G57', - ), - 154 => - array ( - '67169', - '1', - ' D64186 M2458 Lfre T1 B1', - ), - 155 => - array ( - '67385', - '1', - ' D634 A45443 M11757 Lfre T1 B1', - ), - 156 => - array ( - '67537', - '2', - ' T2 B1', - ), - 157 => - array ( - '68064', - '4', - ' A45744 A3702 T4 B1 G21', - ), - 158 => - array ( - '68275', - '1', - ' D1742 A45863 M60 Lfre T1 B1', - ), - 159 => - array ( - '68278', - '1', - ' D6132 A32254 M7257 Lfre T1 B1', - ), - 160 => - array ( - '68369', - '3', - ' M17256 Lara T3 B1', - ), - 161 => - array ( - '68794', - '3', - ' A21138 A1869 A131480 A26699 A3600 A26397 A3301 A46126 A25905 A46127 A34738 A46128 Lfre T3 B1', - ), - 162 => - array ( - '69826', - '1', - ' M2413 Lfre T1 B1', - ), - 163 => - array ( - '69992', - '4', - ' T4 B1 G22', - ), - 164 => - array ( - '70996', - '1', - ' A3749 A771 M382 Lfre T1 B1', - ), - 165 => - array ( - '71137', - '1', - ' D833 A39966 A39968 Lfre T1 B1 G57', - ), - 166 => - array ( - '71368', - '2', - ' T2 B1', - ), - 167 => - array ( - '71477', - '3', - ' A18847 Lfre T3 B1', - ), - 168 => - array ( - '71676', - '5', - ' M13503 Lfre T5 B1', - ), - 169 => - array ( - '71772', - '1', - ' D73523 M16846 Lfre T1 B1', - ), - 170 => - array ( - '73153', - '1', - ' A1185 A31503 M6567 HTES10002 M7540 M2319 Lfre T1 B1', - ), - 171 => - array ( - '74496', - '1', - ' A4656 A48777 Lfre T1 B1', - ), - 172 => - array ( - '324628', - '3', - ' P593 A1820 A18583 M2742 T3 B1', - ), - 173 => - array ( - '75327', - '1', - ' A9977 M4896 M6567 HTES10002 Lfre T1 B1', - ), - 174 => - array ( - '76014', - '1', - ' D64165 A49441 M7073 Lfre T1 B1', - ), - 175 => - array ( - '76662', - '1', - ' D796342 M22375 Lfre T1 B1', - ), - 176 => - array ( - '77437', - '1', - ' A1106 M6567 HTES10002 M2007 Lfre T1 B1', - ), - 177 => - array ( - '77657', - '3', - ' A6051 M212 Lfre T3 B1', - ), - 178 => - array ( - '315810', - '1', - ' Lfre T1 B1', - ), - 179 => - array ( - '78516', - '1', - ' D3337 A114 A50510 M1604 M3016 Lfre T1 B1', - ), - 180 => - array ( - '79238', - '2', - ' T2 B1', - ), - 181 => - array ( - '79403', - '1', - ' D6111 A50875 M20858 Lfre T1 B1', - ), - 182 => - array ( - '79407', - '1', - ' D540 A50877 M22805 Lfre T1 B1', - ), - 183 => - array ( - '79409', - '1', - ' D61284 A5633 A5634 M22806 M22807 Lfre T1 B1', - ), - 184 => - array ( - '79411', - '1', - ' D5397 A17354 M22808 Lfre T1 B1', - ), - 185 => - array ( - '79413', - '1', - ' D61282 A19403 M22809 Lfre T1 B1', - ), - 186 => - array ( - '79526', - '1', - ' D6416 A50923 M824 M11757 Lfre T1 B1', - ), - 187 => - array ( - '79550', - '1', - ' A50931 A9375 A9376 M2413 Lfre T1 B1', - ), - 188 => - array ( - '79883', - '1', - ' D8111 D803 A4657 A4656 Lfre T1 B1', - ), - 189 => - array ( - '81367', - '3', - ' A5900 A5899 M1277 M2596 Lfre T3 B1', - ), - 190 => - array ( - '82774', - '5', - ' M9721 Lfre T5 B1', - ), - 191 => - array ( - '84173', - '1', - ' A52952 A52953 A31715 M4313 M8645 Lfre T1 B1 G57', - ), - 192 => - array ( - '84764', - '1', - ' Lfre T1 B1', - ), - 193 => - array ( - '85285', - '1', - ' A7392 A647 M56889 M11757 Lfre T1 B1', - ), - 194 => - array ( - '87085', - '1', - ' D333792 A17355 Lfre T1 B1', - ), - 195 => - array ( - '87977', - '1', - ' A16318 A54829 M22580 M24406 Lfre T1 B1', - ), - 196 => - array ( - '88079', - '1', - ' Lfre T1 B1', - ), - 197 => - array ( - '88888', - '1', - ' A4656 A4657 M3976 Lfre T1 B1', - ), - 198 => - array ( - '89608', - '1', - ' A55627 M24796 M3456 Lfre T1 B1', - ), - 199 => - array ( - '89618', - '1', - ' A37671 M24804 M24805 M24803 Lfre T1 B1', - ), - 200 => - array ( - '89629', - '1', - ' A55652 M24810 Lfre T1 B1', - ), - 201 => - array ( - '90211', - '1', - ' A12309 A4656 Lfre T1 B1', - ), - 202 => - array ( - '90223', - '1', - ' A12309 A4656 Lfre T1 B1', - ), - 203 => - array ( - '90558', - '1', - ' A4292 A8371 Lfre T1 B1 G57', - ), - 204 => - array ( - '90759', - '4', - ' T4 B1', - ), - 205 => - array ( - '91665', - '2', - ' T2 B1 S8 YAIM YMAG', - ), - 206 => - array ( - '93119', - '3', - ' M1277 M9115 Lfre T3 B1', - ), - 207 => - array ( - '93624', - '1', - ' D417 A57465 M18316 M4940 Lfre T1 B1', - ), - 208 => - array ( - '94660', - '3', - ' P811 A57822 T3 B1', - ), - 209 => - array ( - '96306', - '1', - ' A9986 M6567 HTES10002 M7540 Lfre T1 B1', - ), - 210 => - array ( - '96632', - '1', - ' A1323 A1340 A1325 M7540 M6567 HTES10002 Lfre T1 B1', - ), - 211 => - array ( - '97363', - '3', - ' A59329 A59330 T3 B1', - ), - 212 => - array ( - '97665', - '3', - ' A35950 A9308 Lfre T3 B1', - ), - 213 => - array ( - '97998', - '1', - ' D64165 A22057 M7073 Lfre T1 B1', - ), - 214 => - array ( - '98241', - '1', - ' D1555 A59709 M40 Lfre T1 B1', - ), - 215 => - array ( - '98496', - '1', - ' A59862 A59863 Lfre T1 B1', - ), - 216 => - array ( - '99193', - '2', - ' T2 B1', - ), - 217 => - array ( - '99706', - '1', - ' D843 A40390 Lfre T1 B1 G17', - ), - 218 => - array ( - '100670', - '1', - ' A4571 A12256 M6567 HTES10002 M6222 M7540 Lfre T1 B1', - ), - 219 => - array ( - '102050', - '1', - ' D64165 M7073 Lfre T1 B1', - ), - 220 => - array ( - '102094', - '1', - ' A9875 A61494 Lfre T1 B1', - ), - 221 => - array ( - '334683', - '3', - ' P81 A530 T3 B1 S26 S4 YVOI YBUS', - ), - 222 => - array ( - '102223', - '1', - ' D1553 A1914 M5842 M24757 Lfre T1 B1', - ), - 223 => - array ( - '102624', - '2', - ' T2 B1', - ), - 224 => - array ( - '316214', - '1', - ' D501 A9564 M36055 M24533 M15508 Lfre T1 B1', - ), - 225 => - array ( - '103523', - '1', - ' D6132 A62170 M16836 Lfre T1 B1', - ), - 226 => - array ( - '104052', - '1', - ' D823 A62367 A19481 Lfre T1 B1 G17', - ), - 227 => - array ( - '105372', - '3', - ' A62914 T3 B1', - ), - 228 => - array ( - '106050', - '1', - ' D70904 A63246 A63247 M27875 Lfre T1 B1', - ), - 229 => - array ( - '107652', - '1', - ' D521 A7966 M6628 Lfre T1 B1', - ), - 230 => - array ( - '108039', - '1', - ' A7817 A30 M4280 M204 Lfre T1 B1', - ), - 231 => - array ( - '108041', - '1', - ' Lfre T1 B1', - ), - 232 => - array ( - '108406', - '3', - ' A64209 A41511 A26198 A25394 A33995 A18376 A64210 A25908 A1734 A64211 A34037 A58230 A25852 A64212 A64213 A64214 A64215 A64216 A57385 A27139 A64217 Lfre T3 B1', - ), - 233 => - array ( - '108417', - '1', - ' M495 M515 M1886 Lfre T1 B1', - ), - 234 => - array ( - '109392', - '1', - ' A4656 A4657 Lfre T1 B1', - ), - 235 => - array ( - '109395', - '1', - ' A4656 A4657 Lfre T1 B1', - ), - 236 => - array ( - '109463', - '1', - ' A64662 A33805 Lfre T1 B1 G57', - ), - 237 => - array ( - '109818', - '1', - ' D572 A64823 M1265 Lfre T1 B1', - ), - 238 => - array ( - '109873', - '1', - ' D5768 A33471 M12674 Lfre T1 B1', - ), - 239 => - array ( - '109877', - '1', - ' D5999 A4146 M2244 Lfre T1 B1', - ), - 240 => - array ( - '110740', - '4', - ' A6752 Lfre Leng Lbre T4 B1', - ), - 241 => - array ( - '111554', - '1', - ' D64165 A65604 M7073 Lfre T1 B1', - ), - 242 => - array ( - '112429', - '2', - ' T2 B1', - ), - 243 => - array ( - '113182', - '4', - ' A8918 M2641 T4 B1', - ), - 244 => - array ( - '113819', - '1', - ' A25156 M1142 Lfre T1 B1 G13', - ), - 245 => - array ( - '114209', - '1', - ' D577 A23684 M1128 Lfre T1 B1', - ), - 246 => - array ( - '316387', - '1', - ' Lfre T1 B1 G31', - ), - 247 => - array ( - '116257', - '1', - ' D535 A67674 M22126 Lfre T1 B1', - ), - 248 => - array ( - '116259', - '1', - ' D62148 A67675 M17087 Lfre T1 B1', - ), - 249 => - array ( - '116445', - '1', - ' D7596 D750 M29709 M2898 Lfre T1 B1', - ), - 250 => - array ( - '116677', - '1', - ' A17430 M1277 M920 Lfre T1 B1', - ), - 251 => - array ( - '119180', - '1', - ' M495 M2095 M2037 Lfre T1 B1', - ), - 252 => - array ( - '119626', - '1', - ' D5999 A69127 M13221 M105 M2996 Lfre T1 B1', - ), - 253 => - array ( - '119869', - '1', - ' A15418 A17642 M2456 M1314 Lfre T1 B1', - ), - 254 => - array ( - '119977', - '0', - ' M9240 T0 B1', - ), - 255 => - array ( - '120856', - '2', - ' T2 B1', - ), - 256 => - array ( - '121239', - '1', - ' A4292 A8371 M2181 Lfre T1 B1 G57', - ), - 257 => - array ( - '121672', - '1', - ' A7194 A69964 A14355 Lfre T1 B1 G57', - ), - 258 => - array ( - '122013', - '1', - ' A2183 M6567 HTES10002 Lfre T1 B1', - ), - 259 => - array ( - '122141', - '3', - ' A24096 A70170 Lfre T3 B1', - ), - 260 => - array ( - '316528', - '4', - ' A131824 Lzxx T4 B1 G18', - ), - 261 => - array ( - '123396', - '1', - ' A11271 A59702 M6979 Lfre T1 B1 G57', - ), - 262 => - array ( - '123480', - '1', - ' D3637 A70724 M111 Lfre T1 B1', - ), - 263 => - array ( - '123613', - '2', - ' T2 B1', - ), - 264 => - array ( - '123831', - '5', - ' M52 Lfre T5 B1', - ), - 265 => - array ( - '125005', - '1', - ' A18736 A47861 M9202 Lfre T1 B1 G57', - ), - 266 => - array ( - '125704', - '1', - ' D75906 A71662 A63246 M14373 Lfre T1 B1', - ), - 267 => - array ( - '126126', - '1', - ' D75906 A63246 M4838 Lfre T1 B1', - ), - 268 => - array ( - '126753', - '1', - ' A14861 A32283 M297 M6567 HTES10002 M4570 Lfre T1 B1', - ), - 269 => - array ( - '127652', - '3', - ' A6752 T3 B1 S8 S4 YVOI YAIM Y7MA YCANAL', - ), - 270 => - array ( - '127995', - '1', - ' D779 M31749 Lfre T1 B1', - ), - 271 => - array ( - '128323', - '1', - ' A72817 A72818 M3150 Lfre T1 B1', - ), - 272 => - array ( - '128894', - '1', - ' D712 A24599 M30872 Lfre T1 B1', - ), - 273 => - array ( - '130367', - '1', - ' A4656 A4657 Lfre T1 B1', - ), - 274 => - array ( - '130373', - '1', - ' A4656 A4657 M124 Lfre T1 B1', - ), - 275 => - array ( - '131683', - '3', - ' A604 M2464 T3 B1', - ), - 276 => - array ( - '134016', - '1', - ' D843 A40390 Lfre T1 B1 G17', - ), - 277 => - array ( - '135038', - '1', - ' D841 A33995 Lfre T1 B1', - ), - 278 => - array ( - '135103', - '2', - ' T2 B1', - ), - 279 => - array ( - '136866', - '2', - ' T2 B1', - ), - 280 => - array ( - '137259', - '1', - ' A76377 A5005 M11757 Lfre T1 B1', - ), - 281 => - array ( - '137822', - '1', - ' D843 A76834 Lfre T1 B1', - ), - 282 => - array ( - '139403', - '3', - ' P137 A70408 A148070 A148071 A148072 A48753 A148073 T3 B1', - ), - 283 => - array ( - '139808', - '1', - ' D813 A16118 A27424 A14229 Lfre T1 B1 G57', - ), - 284 => - array ( - '139984', - '1', - ' D510 A138 M55799 Lfre T1 B1', - ), - 285 => - array ( - '140211', - '1', - ' D61204 A77857 M33919 M23690 Lfre T1 B1', - ), - 286 => - array ( - '140257', - '1', - ' D530 A13380 M6612 M2556 M7877 Lfre T1 B1', - ), - 287 => - array ( - '140718', - '2', - ' T2 B1', - ), - 288 => - array ( - '140734', - '2', - ' T2 B1', - ), - 289 => - array ( - '141093', - '1', - ' A78178 A15172 A3906 A78179 M2082 Lfre T1 B1', - ), - 290 => - array ( - '141776', - '3', - ' P93 A142217 T3 B1', - ), - 291 => - array ( - '142121', - '1', - ' D64165 A78604 M7073 Lfre T1 B1', - ), - 292 => - array ( - '142733', - '2', - ' T2 B1', - ), - 293 => - array ( - '142872', - '3', - ' P811 A1869 T3 B1', - ), - 294 => - array ( - '143221', - '4', - ' T4 B1', - ), - 295 => - array ( - '143829', - '1', - ' A79305 M8017 M1003 M21235 Lfre T1 B1', - ), - 296 => - array ( - '144221', - '1', - ' D75906 M10456 Lfre T1 B1', - ), - 297 => - array ( - '145814', - '1', - ' D64165 A44650 A14276 M7073 Lfre T1 B1', - ), - 298 => - array ( - '145819', - '1', - ' D64165 A38154 M7073 Lfre T1 B1', - ), - 299 => - array ( - '146066', - '1', - ' A8492 A8524 Lfre T1 B1', - ), - 300 => - array ( - '147312', - '2', - ' T2 B1', - ), - 301 => - array ( - '147485', - '1', - ' A80735 A9417 A28576 M2413 Lfre T1 B1', - ), - 302 => - array ( - '148171', - '3', - ' A13599 A4573 A2089 A10010 T3 B1', - ), - 303 => - array ( - '148689', - '3', - ' A81138 A24358 T3 B1', - ), - 304 => - array ( - '148748', - '1', - ' A63246 A57933 A62401 M33206 Lfre T1 B1', - ), - 305 => - array ( - '149266', - '1', - ' M2095 M495 Lfre T1 B1', - ), - 306 => - array ( - '149294', - '4', - ' A81336 Lara T4 B1', - ), - 307 => - array ( - '149382', - '1', - ' A25416 M611 M9622 M3945 Lfre T1 B1', - ), - 308 => - array ( - '149616', - '1', - ' A4820 M3017 Lfre T1 B1', - ), - 309 => - array ( - '150813', - '2', - ' T2 B1', - ), - 310 => - array ( - '152674', - '1', - ' D759 A9464 Lfre T1 B1 G57', - ), - 311 => - array ( - '153057', - '1', - ' A8401 M12862 Lfre T1 B1', - ), - 312 => - array ( - '153061', - '1', - ' A29455 M4854 M3335 Lfre T1 B1', - ), - 313 => - array ( - '153328', - '4', - ' A23003 T4 B1', - ), - 314 => - array ( - '153377', - '5', - ' A45768 M5812 Lfre T5 B1', - ), - 315 => - array ( - '153805', - '1', - ' D74156 A83075 A59379 M2413 Lfre T1 B1 G44', - ), - 316 => - array ( - '154274', - '1', - ' A4656 A4657 M1521 Lfre T1 B1', - ), - 317 => - array ( - '154759', - '1', - ' D64165 A45062 A45063 M7073 Lfre T1 B1', - ), - 318 => - array ( - '154862', - '4', - ' A83407 Lfre T4 B1', - ), - 319 => - array ( - '155453', - '1', - ' A33189 A63246 M34751 Lfre T1 B1', - ), - 320 => - array ( - '155491', - '2', - ' T2 B1', - ), - 321 => - array ( - '155662', - '1', - ' A4656 A4657 M298 Lfre T1 B1', - ), - 322 => - array ( - '155664', - '1', - ' A4656 A4657 Lfre T1 B1', - ), - 323 => - array ( - '155666', - '1', - ' A4656 A4657 M920 Lfre T1 B1', - ), - 324 => - array ( - '155669', - '1', - ' A4656 Lfre T1 B1', - ), - 325 => - array ( - '155670', - '1', - ' A4656 A4657 M2037 Lfre T1 B1', - ), - 326 => - array ( - '155671', - '1', - ' A4656 A4657 M2082 Lfre T1 B1', - ), - 327 => - array ( - '156036', - '2', - ' T2 B1', - ), - 328 => - array ( - '156273', - '1', - ' A9986 Lfre T1 B1', - ), - 329 => - array ( - '156342', - '1', - ' A21798 M36535 Lfre T1 B1', - ), - 330 => - array ( - '156592', - '1', - ' A14051 A83969 A28576 A69139 M11757 Lfre T1 B1', - ), - 331 => - array ( - '156897', - '0', - ' A246 M1370 M9242 M13448 T0 B1', - ), - 332 => - array ( - '157647', - '1', - ' A69990 Lfre T1 B1', - ), - 333 => - array ( - '158009', - '1', - ' A63529 M7540 M6567 HTES10002 Lfre T1 B1', - ), - 334 => - array ( - '160738', - '1', - ' D569 A13340 M10418 M6599 Lfre T1 B1', - ), - 335 => - array ( - '160740', - '1', - ' D598 A84197 M3833 M37235 M37236 Lfre T1 B1', - ), - 336 => - array ( - '160744', - '1', - ' D523 A22411 M37237 Lfre T1 B1', - ), - 337 => - array ( - '162228', - '3', - ' A9308 A35950 T3 B1', - ), - 338 => - array ( - '163582', - '1', - ' A280 A9884 Lfre T1 B1', - ), - 339 => - array ( - '163730', - '4', - ' A1379 A9414 A241 M3514 T4 B1 G18', - ), - 340 => - array ( - '164241', - '1', - ' D523 A86709 M3006 Lfre T1 B1', - ), - 341 => - array ( - '164287', - '3', - ' A86735 A11481 M298 Lfre T3 B1', - ), - 342 => - array ( - '164752', - '4', - ' A6752 Lfre Leng Lbre T4 B1', - ), - 343 => - array ( - '164875', - '1', - ' Lfre T1 B1', - ), - 344 => - array ( - '165235', - '1', - ' A16727 M1312 Lfre T1 B1', - ), - 345 => - array ( - '165412', - '1', - ' A1307 M1181 M2939 M3093 Lfre T1 B1', - ), - 346 => - array ( - '165654', - '1', - ' D636089 A87154 M38011 Lfre T1 B1', - ), - 347 => - array ( - '165671', - '1', - ' D813 A87161 A35747 Lfre T1 B1 G19', - ), - 348 => - array ( - '166714', - '1', - ' D5515 A18186 M1907 Lfre T1 B1', - ), - 349 => - array ( - '166905', - '1', - ' D823 A12135 Lfre T1 B1 G57', - ), - 350 => - array ( - '167581', - '1', - ' A1346 M3018 M6567 HTES10002 Lfre T1 B1', - ), - 351 => - array ( - '168761', - '1', - ' A2694 A88283 A88284 M1183 Lfre T1 B1', - ), - 352 => - array ( - '168795', - '2', - ' T2 B1', - ), - 353 => - array ( - '168815', - '1', - ' A88300 M854 Lfre T1 B1', - ), - 354 => - array ( - '168818', - '1', - ' A88301 A88302 Lfre T1 B1', - ), - 355 => - array ( - '169040', - '1', - ' D577 A88356 A88357 M101 Lfre T1 B1', - ), - 356 => - array ( - '169070', - '1', - ' D590 A8246 M9422 Lfre T1 B1', - ), - 357 => - array ( - '169213', - '1', - ' D75906 A63246 M38495 Lfre T1 B1', - ), - 358 => - array ( - '169298', - '2', - ' T2 B1', - ), - 359 => - array ( - '170303', - '1', - ' A9299 M2413 Lfre T1 B1', - ), - 360 => - array ( - '171658', - '1', - ' A63246 M33085 Lfre T1 B1', - ), - 361 => - array ( - '171659', - '1', - ' A63246 A55399 M33085 Lfre T1 B1', - ), - 362 => - array ( - '171780', - '1', - ' A88944 A6795 M5045 M854 M5780 Lfre T1 B1', - ), - 363 => - array ( - '172058', - '1', - ' A24689 A44345 M2458 Lfre T1 B1', - ), - 364 => - array ( - '172392', - '1', - ' A89477 A2696 M505 M491 M1394 Lfre T1 B1 S8 S15 S18 YMAG YJAU YCRPE YTRA YCANAL YVOI', - ), - 365 => - array ( - '317263', - '1', - ' Lfre T1 B1 G31', - ), - 366 => - array ( - '172494', - '1', - ' A8540 A63450 A446 M171 Lfre T1 B1 G57', - ), - 367 => - array ( - '317275', - '1', - ' D74156 A4691 Lfre T1 B1 G8', - ), - 368 => - array ( - '173391', - '1', - ' A35189 M6567 HTES10002 Lfre T1 B1', - ), - 369 => - array ( - '173614', - '1', - ' D847 A87712 A89892 A78179 Lfre T1 B1', - ), - 370 => - array ( - '173778', - '1', - ' D843 A89947 A89948 Lfre T1 B1 G57', - ), - 371 => - array ( - '174386', - '3', - ' A85980 A11992 A6752 A41113 A5018 A66641 A5429 A605 A24031 A72753 Lfre T3 B1', - ), - 372 => - array ( - '175983', - '1', - ' A22356 M20235 Lfre T1 B1', - ), - 373 => - array ( - '176026', - '1', - ' A8401 M4361 Lfre T1 B1', - ), - 374 => - array ( - '177404', - '1', - ' A3598 A14492 M4738 M495 Lfre T1 B1 G31', - ), - 375 => - array ( - '178032', - '2', - ' T2 B1', - ), - 376 => - array ( - '178771', - '1', - ' A3915 M2413 Lfre T1 B1', - ), - 377 => - array ( - '179475', - '3', - ' A12168 T3 B1', - ), - 378 => - array ( - '179493', - '4', - ' A12168 A42659 M3514 T4 B1 G18', - ), - 379 => - array ( - '179599', - '2', - ' T2 B1 S8 YAIM YROU YCANAL', - ), - 380 => - array ( - '180144', - '1', - ' A660 A12309 A4656 M11453 Lfre T1 B1', - ), - 381 => - array ( - '180750', - '1', - ' A9737 M39926 M4900 Lfre T1 B1', - ), - 382 => - array ( - '181195', - '1', - ' A4320 A4321 M39981 M5780 Lfre T1 B1', - ), - 383 => - array ( - '181366', - '0', - ' A5945 M2956 Lfre T0 B1', - ), - 384 => - array ( - '181581', - '1', - ' A4342 A4656 M298 Lfre T1 B1', - ), - 385 => - array ( - '182448', - '3', - ' A25907 A92895 A25500 A1612 A92896 A1751 A14053 A4496 A4550 A280 A167 A1420 Lfre T3 B1', - ), - 386 => - array ( - '182994', - '1', - ' M495 M431 M23964 M3453 M13794 M5206 M1183 Lfre T1 B1', - ), - 387 => - array ( - '183075', - '3', - ' M1498 Lfre T3 B1', - ), - 388 => - array ( - '183384', - '4', - ' A6752 Lfre T4 B1', - ), - 389 => - array ( - '184441', - '1', - ' D36361 A114 A50510 M1604 M3016 Lfre T1 B1', - ), - 390 => - array ( - '184947', - '3', - ' A42528 A82675 A77720 M1277 T3 B1', - ), - 391 => - array ( - '185447', - '1', - ' D73523 A63246 M5210 Lfre T1 B1', - ), - 392 => - array ( - '185657', - '3', - ' P511 A7649 A23694 A8301 A5033 A8553 A4591 A28616 M2527 Lfre T3 B1 S4 YMAG', - ), - 393 => - array ( - '185857', - '1', - ' D74156 A94029 A17821 A94032 Lfre T1 B1 G15', - ), - 394 => - array ( - '186523', - '1', - ' A10437 Lfre T1 B1', - ), - 395 => - array ( - '188543', - '1', - ' A4657 A4656 Lfre T1 B1', - ), - 396 => - array ( - '189726', - '1', - ' A13075 M6567 HTES10002 M3549 Lfre T1 B1', - ), - 397 => - array ( - '189909', - '4', - ' A63678 T4 B1 G21', - ), - 398 => - array ( - '190636', - '1', - ' D5518 A95603 M3263 M15582 Lfre T1 B1', - ), - 399 => - array ( - '190645', - '1', - ' D3637 A37671 M12461 M13838 Lfre T1 B1', - ), - 400 => - array ( - '191588', - '4', - ' T4 B1 G11', - ), - 401 => - array ( - '191859', - '3', - ' M10396 T3 B1', - ), - 402 => - array ( - '191941', - '3', - ' P133 A5481 A21806 A8631 A32770 A104304 A110577 A47132 A42150 A48992 A47131 A13188 A151903 M1504 T3 B1', - ), - 403 => - array ( - '192222', - '1', - ' D3339 A29259 M4523 Lfre T1 B1', - ), - 404 => - array ( - '192239', - '1', - ' D15463 A96133 M27281 M14787 Lfre T1 B1', - ), - 405 => - array ( - '192345', - '3', - ' A2169 A96163 A96164 M1277 Lfre T3 B1', - ), - 406 => - array ( - '192942', - '1', - ' A89830 Lfre T1 B1 G57', - ), - 407 => - array ( - '193177', - '1', - ' D6118 A96404 M9747 Lfre T1 B1', - ), - 408 => - array ( - '193182', - '1', - ' D0063 A96408 M14620 Lfre T1 B1', - ), - 409 => - array ( - '193575', - '1', - ' A96551 A201 A446 M1314 M868 Lfre T1 B1', - ), - 410 => - array ( - '194039', - '2', - ' T2 B1', - ), - 411 => - array ( - '194198', - '1', - ' D521 A13380 M6612 M41634 Lfre T1 B1', - ), - 412 => - array ( - '194941', - '3', - ' A96974 Lfre T3 B1', - ), - 413 => - array ( - '195076', - '1', - ' A1106 M7540 M6567 HTES10002 Lfre T1 B1', - ), - 414 => - array ( - '195475', - '2', - ' T2 B1', - ), - 415 => - array ( - '195808', - '3', - ' A97204 M220 Lfre T3 B1', - ), - 416 => - array ( - '196438', - '1', - ' A3749 A771 M1510 Lfre T1 B1', - ), - 417 => - array ( - '197701', - '1', - ' A4657 A4656 M2419 Lfre T1 B1', - ), - 418 => - array ( - '198053', - '1', - ' A97847 A97848 M11358 Lfre T1 B1', - ), - 419 => - array ( - '198123', - '1', - ' A30427 M6051 M3004 M7540 Lfre T1 B1', - ), - 420 => - array ( - '198333', - '1', - ' D75906 A63246 M4839 Lfre T1 B1', - ), - 421 => - array ( - '198506', - '1', - ' A4656 A4657 Lfre T1 B1', - ), - 422 => - array ( - '198508', - '1', - ' A4656 Lfre T1 B1', - ), - 423 => - array ( - '198953', - '1', - ' A2025 M7540 M5780 M2419 M6222 Lfre T1 B1', - ), - 424 => - array ( - '199876', - '3', - ' P811 A28203 A31267 A54493 A3302 A152433 T3 B1 S26 S4 YVOI YAIM YCANAL YTRA Y7MA YMAG YBUS', - ), - 425 => - array ( - '199932', - '1', - ' A42256 A13072 M6172 M5321 Lfre T1 B1', - ), - 426 => - array ( - '200250', - '5', - ' A116 A15418 M42238 Lfre T5 B1', - ), - 427 => - array ( - '200571', - '3', - ' A12168 T3 B1', - ), - 428 => - array ( - '200746', - '5', - ' M19037 Lfre T5 B1', - ), - 429 => - array ( - '201873', - '3', - ' A98934 M896 T3 B1', - ), - 430 => - array ( - '201942', - '3', - ' P511 A7649 A23694 A5219 A5033 A4591 A8553 M2527 M896 T3 B1 G53', - ), - 431 => - array ( - '202332', - '1', - ' D843 A99132 Lfre T1 B1', - ), - 432 => - array ( - '202602', - '3', - ' A29282 T3 B1', - ), - 433 => - array ( - '202664', - '1', - ' A14251 M6567 HTES10002 Lfre T1 B1', - ), - 434 => - array ( - '202730', - '1', - ' A781 A2696 Lfre T1 B1', - ), - 435 => - array ( - '202766', - '1', - ' A99303 A99304 Lfre T1 B1', - ), - 436 => - array ( - '203885', - '2', - ' T2 B1', - ), - 437 => - array ( - '204684', - '1', - ' D8111 A4657 A4656 Lfre T1 B1', - ), - 438 => - array ( - '204687', - '1', - ' A4657 A4656 Lfre T1 B1', - ), - 439 => - array ( - '204688', - '1', - ' A4657 A4656 Lfre T1 B1', - ), - 440 => - array ( - '205281', - '1', - ' A79965 M5131 M5132 M5033 M6051 Lfre T1 B1', - ), - 441 => - array ( - '205514', - '1', - ' D64186 A4586 M11757 M2458 Lfre T1 B1', - ), - 442 => - array ( - '205784', - '4', - ' A6752 Lfre Leng Lbre T4 B1', - ), - 443 => - array ( - '207774', - '1', - ' M6567 HTES10002 M7540 M3985 Lfre T1 B1', - ), - 444 => - array ( - '208254', - '1', - ' A53412 M1495 M388 M16931 M15286 Lfre T1 B1', - ), - 445 => - array ( - '317879', - '1', - ' D89563 A13168 A19496 A69153 Lfre T1 B1 G19', - ), - 446 => - array ( - '209412', - '3', - ' A101306 A99512 M9115 M10396 M170 M1277 Lfre T3 B1', - ), - 447 => - array ( - '209546', - '1', - ' M7073 Lfre T1 B1', - ), - 448 => - array ( - '210175', - '1', - ' D5517 D550 A101495 A101496 M23350 Lfre T1 B1', - ), - 449 => - array ( - '210215', - '1', - ' A1106 M1312 Lfre T1 B1', - ), - 450 => - array ( - '210246', - '4', - ' A101511 A10766 A82477 A101512 Lfre T4 B1', - ), - 451 => - array ( - '210511', - '3', - ' A4510 A101592 M1731 T3 B1', - ), - 452 => - array ( - '210529', - '3', - ' A5945 T3 B1', - ), - 453 => - array ( - '211305', - '1', - ' A4656 A4342 Lfre T1 B1', - ), - 454 => - array ( - '211724', - '1', - ' D73523 M26489 Lfre T1 B1', - ), - 455 => - array ( - '211949', - '1', - ' A10437 M7540 Lfre T1 B1', - ), - 456 => - array ( - '213337', - '1', - ' A4854 A36045 M3106 Lfre T1 B1 S8 YAIM YVOI Y7MA', - ), - 457 => - array ( - '213596', - '1', - ' D75906 A21798 A49145 M43629 M952 Lfre T1 B1', - ), - 458 => - array ( - '214016', - '4', - ' A25259 A548 A7649 A23694 A5219 A5033 A8553 M2970 T4 B1 G53', - ), - 459 => - array ( - '214206', - '1', - ' D75906 M26164 Lfre T1 B1', - ), - 460 => - array ( - '214873', - '4', - ' A10839 A10838 Lfre T4 B1', - ), - 461 => - array ( - '215497', - '2', - ' T2 B1', - ), - 462 => - array ( - '215577', - '3', - ' A26249 M1277 Lfre T3 B1', - ), - 463 => - array ( - '216382', - '4', - ' A6752 Lfre T4 B1', - ), - 464 => - array ( - '216669', - '1', - ' A103514 A446 M26454 Lfre T1 B1', - ), - 465 => - array ( - '217929', - '1', - ' D6298 A96408 M6082 M14897 Lfre T1 B1', - ), - 466 => - array ( - '218786', - '1', - ' D89563 A104143 A3680 Lfre T1 B1 G57', - ), - 467 => - array ( - '220702', - '5', - ' M44324 Lfre T5 B1', - ), - 468 => - array ( - '221001', - '3', - ' A2169 A62233 A104868 M10396 Lfre T3 B1', - ), - 469 => - array ( - '221818', - '3', - ' M44452 T3 B1', - ), - 470 => - array ( - '221936', - '1', - ' A63246 M5210 M23989 M4836 Lfre T1 B1', - ), - 471 => - array ( - '222616', - '1', - ' A88302 A105358 M11407 Lfre T1 B1', - ), - 472 => - array ( - '223673', - '1', - ' A105600 A12215 A46188 M3106 Lfre T1 B1', - ), - 473 => - array ( - '224861', - '2', - ' T2 B1', - ), - 474 => - array ( - '225442', - '3', - ' A25212 T3 B1', - ), - 475 => - array ( - '225536', - '1', - ' D6416 A96805 A106113 M10613 M2458 Lfre T1 B1', - ), - 476 => - array ( - '226810', - '1', - ' D8111 D804 A56856 Lfre T1 B1', - ), - 477 => - array ( - '227124', - '2', - ' T2 B1', - ), - 478 => - array ( - '227634', - '4', - ' A82477 T4 B1 G40', - ), - 479 => - array ( - '227841', - '3', - ' P85 A5945 M212 T3 B1 S4 S27 YBUS YAIM YCANAL YMAG Y7MA YROU YTRA YVOI', - ), - 480 => - array ( - '227982', - '3', - ' A50364 A47507 A20888 A55229 M1731 Lfre T3 B1', - ), - 481 => - array ( - '228694', - '1', - ' A6079 M1291 Lfre T1 B1', - ), - 482 => - array ( - '228889', - '1', - ' A88300 A107115 M1495 Lfre T1 B1', - ), - 483 => - array ( - '229341', - '1', - ' A107218 M2325 M116 Lfre T1 B1', - ), - 484 => - array ( - '229374', - '1', - ' A63451 A63450 A60144 M2335 Lfre T1 B1', - ), - 485 => - array ( - '230458', - '1', - ' A69419 Lfre T1 B1', - ), - 486 => - array ( - '231649', - '1', - ' A105358 A446 M854 Lfre T1 B1', - ), - 487 => - array ( - '232032', - '1', - ' A36701 A107840 M9061 Lfre T1 B1', - ), - 488 => - array ( - '232445', - '1', - ' A9730 Lfre T1 B1 G57', - ), - 489 => - array ( - '232625', - '1', - ' D580 A108065 M2686 Lfre T1 B1', - ), - 490 => - array ( - '233098', - '2', - ' T2 B1', - ), - 491 => - array ( - '233136', - '1', - ' A26832 M43215 Lfre T1 B1', - ), - 492 => - array ( - '233470', - '2', - ' T2 B1', - ), - 493 => - array ( - '233824', - '1', - ' D77092 M35468 Lfre T1 B1', - ), - 494 => - array ( - '234820', - '3', - ' M6845 T3 B1', - ), - 495 => - array ( - '235729', - '5', - ' A109078 A35055 M9721 Lfre T5 B1', - ), - 496 => - array ( - '236137', - '1', - ' D501 A38138 A35908 M2242 Lfre T1 B1', - ), - 497 => - array ( - '237090', - '1', - ' D779 A109459 A109460 M24427 Lfre T1 B1', - ), - 498 => - array ( - '237251', - '1', - ' A12126 A12127 A12128 M846 Lfre T1 B1', - ), - 499 => - array ( - '237502', - '4', - ' A105709 T4 B1 G22', - ), - 500 => - array ( - '237543', - '1', - ' D0063 A14590 A14591 M9523 M17293 Lfre T1 B1', - ), - 501 => - array ( - '237793', - '1', - ' D73523 A63246 M46455 Lfre T1 B1', - ), - 502 => - array ( - '238426', - '2', - ' T2 B1', - ), - 503 => - array ( - '239509', - '3', - ' A1379 M26 T3 B1', - ), - 504 => - array ( - '240408', - '2', - ' T2 B1', - ), - 505 => - array ( - '241692', - '3', - ' A27518 T3 B1 S4 YCANAL', - ), - 506 => - array ( - '242799', - '1', - ' D74156 A111726 Lfre T1 B1', - ), - 507 => - array ( - '243246', - '2', - ' T2 B1', - ), - 508 => - array ( - '245477', - '1', - ' A27740 A112746 M2386 Lfre T1 B1', - ), - 509 => - array ( - '245698', - '1', - ' A97847 A97848 M849 Lfre T1 B1', - ), - 510 => - array ( - '245753', - '1', - ' A43499 M21701 Lfre T1 B1', - ), - 511 => - array ( - '245963', - '1', - ' Lfre T1 B1', - ), - 512 => - array ( - '246341', - '1', - ' A2545 M1327 T1 B1', - ), - 513 => - array ( - '246856', - '1', - ' D74156 A113115 Lfre T1 B1', - ), - 514 => - array ( - '247368', - '4', - ' A113327 T4 B1 G22', - ), - 515 => - array ( - '247546', - '3', - ' A12086 A12648 Lfre T3 B1', - ), - 516 => - array ( - '247735', - '4', - ' A1379 M9266 T4 B1 G18', - ), - 517 => - array ( - '247769', - '3', - ' A604 T3 B1', - ), - 518 => - array ( - '247813', - '1', - ' A61494 Lfre T1 B1', - ), - 519 => - array ( - '247888', - '1', - ' A71918 M7540 M6567 HTES10002 M2319 M958 Lfre T1 B1', - ), - 520 => - array ( - '247900', - '1', - ' A800 A801 M4401 M515 M37339 Lfre T1 B1', - ), - 521 => - array ( - '247902', - '1', - ' A800 A14034 Lfre T1 B1', - ), - 522 => - array ( - '247905', - '1', - ' A800 A801 Lfre T1 B1', - ), - 523 => - array ( - '248029', - '1', - ' A800 Lfre T1 B1', - ), - 524 => - array ( - '249046', - '1', - ' A50931 A9375 A9376 M2413 Lfre T1 B1', - ), - 525 => - array ( - '249526', - '3', - ' P813 A155578 A532 A751 A155579 A215 A155580 A148968 A531 A31033 A2287 A538 A399 A155581 A155582 A12596 A16151 A155583 A155584 A23287 A155585 A155586 A4783 T3 B1', - ), - 526 => - array ( - '250299', - '1', - ' D796342 A114200 M48646 M11226 Lfre T1 B1', - ), - 527 => - array ( - '250384', - '3', - ' A70408 M1504 M1996 Lfre T3 B1', - ), - 528 => - array ( - '250494', - '1', - ' A9875 A61494 M846 Lfre T1 B1', - ), - 529 => - array ( - '250497', - '1', - ' A9875 A61494 M846 Lfre T1 B1', - ), - 530 => - array ( - '351895', - '3', - ' P81 A12168 T3 B1', - ), - 531 => - array ( - '251119', - '1', - ' D4014 A114431 M46 Lfre T1 B1', - ), - 532 => - array ( - '252539', - '3', - ' A26249 M1277 T3 B1', - ), - 533 => - array ( - '252556', - '3', - ' P81 A21141 T3 B1 S26 YVOI YCANAL YROU', - ), - 534 => - array ( - '252617', - '4', - ' A13106 T4 B1 G15', - ), - 535 => - array ( - '253285', - '4', - ' A10512 A15836 A18547 M56328 M48870 M56329 Lfre T4 B1', - ), - 536 => - array ( - '318756', - '3', - ' A94226 T3 B1', - ), - 537 => - array ( - '253527', - '3', - ' A106363 A33322 Lfre T3 B1', - ), - 538 => - array ( - '253615', - '2', - ' T2 B1', - ), - 539 => - array ( - '254434', - '3', - ' P81 A12168 T3 B1', - ), - 540 => - array ( - '254798', - '1', - ' M495 Lfre T1 B1', - ), - 541 => - array ( - '255235', - '1', - ' D779 A42634 A116007 M49414 Lfre T1 B1', - ), - 542 => - array ( - '255329', - '3', - ' A116042 M6200 Lfre T3 B1', - ), - 543 => - array ( - '255646', - '1', - ' A4656 M1277 Lfre T1 B1 G57', - ), - 544 => - array ( - '256372', - '3', - ' A36439 Lfre T3 B1', - ), - 545 => - array ( - '318810', - '1', - ' D1742 A8561 M4509 M60 Lfre T1 B1', - ), - 546 => - array ( - '256510', - '1', - ' D61532 A59886 M11657 M3465 Lfre T1 B1', - ), - 547 => - array ( - '256515', - '1', - ' D5397 A49905 M2618 Lfre T1 B1', - ), - 548 => - array ( - '256529', - '3', - ' M1277 Lfre T3 B1', - ), - 549 => - array ( - '257007', - '1', - ' A3862 M846 Lfre T1 B1', - ), - 550 => - array ( - '257440', - '1', - ' A1459 M171 Lfre T1 B1', - ), - 551 => - array ( - '258182', - '1', - ' A4656 A75751 Lfre T1 B1', - ), - 552 => - array ( - '258186', - '1', - ' A4656 A4657 Lfre T1 B1', - ), - 553 => - array ( - '318854', - '1', - ' A1857 M49865 M49866 M47573 Lfre T1 B1', - ), - 554 => - array ( - '259549', - '3', - ' A36809 A5053 Lfre T3 B1', - ), - 555 => - array ( - '259586', - '3', - ' A226 A31766 A11738 A20194 A156506 A142209 M6854 T3 B1', - ), - 556 => - array ( - '261007', - '1', - ' D595 A35510 M90 Lfre T1 B1', - ), - 557 => - array ( - '261240', - '1', - ' A12309 Lfre T1 B1', - ), - 558 => - array ( - '261241', - '1', - ' A117669 A87852 M1865 M2625 Lfre T1 B1', - ), - 559 => - array ( - '261278', - '1', - ' A9875 Lfre T1 B1', - ), - 560 => - array ( - '261291', - '1', - ' A24442 Lfre T1 B1', - ), - 561 => - array ( - '261953', - '1', - ' A69782 A2699 Lfre T1 B1 G57', - ), - 562 => - array ( - '262019', - '4', - ' A5945 A117848 A7389 M2188 Lfre T4 B1 G18', - ), - 563 => - array ( - '262455', - '1', - ' A117962 A105358 A446 Lfre T1 B1', - ), - 564 => - array ( - '335022', - '3', - ' P811 A6752 M1541 T3 B1 S8 YAIM', - ), - 565 => - array ( - '262808', - '2', - ' T2 B1', - ), - 566 => - array ( - '263663', - '1', - ' A6054 A28777 M11757 Lfre T1 B1', - ), - 567 => - array ( - '264061', - '1', - ' D30223 A19352 M26221 Lfre T1 B1', - ), - 568 => - array ( - '264159', - '1', - ' A12742 Lfre T1 B1', - ), - 569 => - array ( - '264162', - '1', - ' A12742 Lfre T1 B1', - ), - 570 => - array ( - '264164', - '1', - ' A12742 Lfre T1 B1', - ), - 571 => - array ( - '264260', - '2', - ' T2 B1', - ), - 572 => - array ( - '264864', - '1', - ' A27216 A70358 A3622 M2383 Lfre T1 B1 G9', - ), - 573 => - array ( - '266049', - '1', - ' A13433 M6567 HTES10002 M2939 T1 B1', - ), - 574 => - array ( - '266213', - '3', - ' A6752 T3 B1', - ), - 575 => - array ( - '266238', - '1', - ' A19403 M3702 M24507 Lfre T1 B1', - ), - 576 => - array ( - '266247', - '1', - ' A43499 M3980 M3985 Lfre T1 B1', - ), - 577 => - array ( - '266382', - '1', - ' A1910 A21426 M3150 Lfre T1 B1', - ), - 578 => - array ( - '266990', - '1', - ' M1277 M170 Lfre T1 B1', - ), - 579 => - array ( - '267049', - '1', - ' Lfre T1 B1', - ), - 580 => - array ( - '267289', - '3', - ' A12168 T3 B1', - ), - 581 => - array ( - '267920', - '3', - ' A396 A33123 T3 B1', - ), - 582 => - array ( - '268912', - '1', - ' A17921 M9295 Lfre T1 B1', - ), - 583 => - array ( - '269347', - '1', - ' A4854 M6567 HTES10002 Lfre T1 B1', - ), - 584 => - array ( - '270120', - '1', - ' A120169 M3550 M3549 Lfre T1 B1 S8 S18 YCANAL YTRA Y7MA YROU', - ), - 585 => - array ( - '270202', - '2', - ' T2 B1', - ), - 586 => - array ( - '271535', - '1', - ' A99619 M11716 M47634 M2785 M12267 Lfre T1 B1', - ), - 587 => - array ( - '272041', - '1', - ' D74156 A120630 Lfre T1 B1', - ), - 588 => - array ( - '272433', - '1', - ' A9875 M7621 M5134 M920 Lfre T1 B1', - ), - 589 => - array ( - '273787', - '1', - ' A22357 A5392 M1142 Lfre T1 B1 G57', - ), - 590 => - array ( - '273916', - '2', - ' T2 B1', - ), - 591 => - array ( - '274310', - '1', - ' A800 A103811 Lfre T1 B1 G57', - ), - 592 => - array ( - '275129', - '3', - ' A114933 A114934 Lfre T3 B1 S8 S4 YCANAL YBUS Y7MA 2030-12', - ), - 593 => - array ( - '275738', - '4', - ' A113327 T4 B1 G22', - ), - 594 => - array ( - '275743', - '4', - ' A6752 Lfre Leng Lbre T4 B1', - ), - 595 => - array ( - '276324', - '1', - ' A121834 A121835 Lfre T1 B1', - ), - 596 => - array ( - '276578', - '1', - ' A4656 A4657 M854 Lfre T1 B1', - ), - 597 => - array ( - '277041', - '2', - ' T2 B1', - ), - 598 => - array ( - '277260', - '1', - ' A13097 A13098 M920 M6051 Lfre Leng T1 B1', - ), - 599 => - array ( - '278468', - '1', - ' D598 A122381 M14759 M3261 Lfre T1 B1', - ), - 600 => - array ( - '279049', - '2', - ' T2 B1', - ), - 601 => - array ( - '280603', - '4', - ' A118262 Lfre T4 B1', - ), - 602 => - array ( - '281633', - '3', - ' A103336 A103337 Lfre T3 B1', - ), - 603 => - array ( - '281735', - '3', - ' A33567 A4573 A23719 M2687 Lfre T3 B1', - ), - 604 => - array ( - '282747', - '1', - ' D635 A37582 M52099 Lfre T1 B1', - ), - 605 => - array ( - '283159', - '3', - ' A115340 A62233 Lfre T3 B1', - ), - 606 => - array ( - '283399', - '1', - ' D843 A108335 Lfre T1 B1', - ), - 607 => - array ( - '283728', - '1', - ' A800 A801 M9044 M13794 Lfre T1 B1', - ), - 608 => - array ( - '284256', - '1', - ' A12742 Lfre T1 B1', - ), - 609 => - array ( - '284720', - '2', - ' T2 B1 S8 YVOI YROU YAIM YMAG', - ), - 610 => - array ( - '285076', - '1', - ' A3740 A14695 Lfre T1 B1', - ), - 611 => - array ( - '285225', - '2', - ' T2 B1', - ), - 612 => - array ( - '285232', - '1', - ' A13293 M56305 Lfre T1 B1', - ), - 613 => - array ( - '287115', - '1', - ' A23260 M3017 Lfre T1 B1', - ), - 614 => - array ( - '286505', - '4', - ' A9497 M3514 M2188 T4 B1 G18', - ), - 615 => - array ( - '286530', - '1', - ' A3740 Lfre T1 B1', - ), - 616 => - array ( - '286828', - '1', - ' A23320 M8867 M52537 M36387 Lfre T1 B1', - ), - 617 => - array ( - '287702', - '2', - ' T2 B1', - ), - 618 => - array ( - '288208', - '1', - ' D70904 M15136 M4836 M52678 Lfre T1 B1', - ), - 619 => - array ( - '288860', - '1', - ' A22169 A22176 A64859 M2458 Lfre T1 B1', - ), - 620 => - array ( - '289394', - '1', - ' A22092 A20733 A22094 M2941 Lfre T1 B1', - ), - 621 => - array ( - '289749', - '4', - ' A65252 A65253 A65254 T4 B1', - ), - 622 => - array ( - '289996', - '1', - ' D62148 A49905 M8634 M2619 M7378 Lfre T1 B1', - ), - 623 => - array ( - '321736', - '4', - ' A133472 A133473 M56868 T4 B1', - ), - 624 => - array ( - '290994', - '1', - ' A4657 A4656 M858 Lfre T1 B1', - ), - 625 => - array ( - '291623', - '1', - ' A126006 A126007 M16931 Lfre T1 B1', - ), - 626 => - array ( - '292338', - '1', - ' A126174 A20733 A22094 M7073 Lfre T1 B1', - ), - 627 => - array ( - '293792', - '1', - ' D621042 A126576 M6047 M53246 Lfre T1 B1', - ), - 628 => - array ( - '294188', - '2', - ' T2 B1 S8 YVOI YMAG YAIM YROU', - ), - 629 => - array ( - '294492', - '3', - ' Lfre T3 B1', - ), - 630 => - array ( - '294755', - '4', - ' T4 B1 G22', - ), - 631 => - array ( - '295267', - '1', - ' D843 A19989 Lfre T1 B1 G57', - ), - 632 => - array ( - '295312', - '1', - ' D8943 A126988 A68401 Lfre T1 B1 G57', - ), - 633 => - array ( - '319952', - '1', - ' A12309 A4656 A48777 Lfre T1 B1', - ), - 634 => - array ( - '296275', - '4', - ' A6752 Lfre Leng Lbre T4 B1', - ), - 635 => - array ( - '296427', - '2', - ' T2 B1', - ), - 636 => - array ( - '296672', - '4', - ' A127331 M13630 T4 B1', - ), - 637 => - array ( - '297722', - '1', - ' D64165 M7073 Lfre T1 B1', - ), - 638 => - array ( - '298186', - '2', - ' T2 B1', - ), - 639 => - array ( - '320209', - '1', - ' A51866 A85563 M2387 Lfre T1 B1 S5 S8 YCRPE YVOI YCANAL YROU', - ), - 640 => - array ( - '300599', - '1', - ' A4657 A4656 Lfre T1 B1', - ), - 641 => - array ( - '300604', - '1', - ' A4657 A4656 Lfre T1 B1', - ), - 642 => - array ( - '300606', - '1', - ' A12309 A4656 M20206 Lfre T1 B1', - ), - 643 => - array ( - '300608', - '1', - ' A4657 A4656 Lfre T1 B1', - ), - 644 => - array ( - '300907', - '1', - ' D833 A39966 A39968 Lfre T1 B1 G57', - ), - 645 => - array ( - '300993', - '3', - ' M1277 Lfre T3 B1', - ), - 646 => - array ( - '302144', - '1', - ' D6291 A128629 M18788 M2049 Lfre T1 B1', - ), - 647 => - array ( - '303060', - '1', - ' D530 A26058 M4177 Lfre T1 B1', - ), - 648 => - array ( - '320961', - '1', - ' D5397 A55652 M19071 Lfre T1 B1', - ), - 649 => - array ( - '304413', - '1', - ' D6126 A5972 M54320 Lfre T1 B1', - ), - 650 => - array ( - '304428', - '1', - ' D55146 A114 M32017 M77 Lfre T1 B1', - ), - 651 => - array ( - '304575', - '2', - ' T2 B1', - ), - 652 => - array ( - '304993', - '3', - ' A670 Lfre T3 B1', - ), - 653 => - array ( - '305830', - '3', - ' P511 A7649 A23694 M2527 M896 T3 B1 G53', - ), - 654 => - array ( - '311424', - '1', - ' D78242 A5369 Lfre T1 B1', - ), - 655 => - array ( - '311795', - '2', - ' T2 B1', - ), - 656 => - array ( - '312663', - '1', - ' D525 A7946 M54882 Lfre T1 B1', - ), - 657 => - array ( - '313172', - '1', - ' D115 A9564 M4875 Lfre T1 B1', - ), - 658 => - array ( - '314083', - '4', - ' D79143 A130952 A130953 A130954 A49329 A20260 A130955 A78105 Lfre T4 B1 G20', - ), - 659 => - array ( - '314395', - '2', - ' T2 B1', - ), - 660 => - array ( - '314403', - '1', - ' D512 A138 M55103 M10123 Lfre T1 B1', - ), - 661 => - array ( - '315254', - '1', - ' D5514 A30379 M55231 Lfre T1 B1', - ), - 662 => - array ( - '317413', - '1', - ' A4656 A48777 Lfre T1 B1', - ), - 663 => - array ( - '317739', - '1', - ' A4656 A4657 A48777 Lfre T1 B1', - ), - 664 => - array ( - '318654', - '1', - ' A647 A7392 M56305 M54672 Lfre T1 B1', - ), - 665 => - array ( - '319256', - '1', - ' D5516 A18186 M3456 Lfre T1 B1', - ), - 666 => - array ( - '319734', - '1', - ' D813 A736 A132637 Lfre T1 B1', - ), - 667 => - array ( - '319968', - '1', - ' D843 A92625 Lfre T1 B1 G57 S27 YCANAL YTRA', - ), - 668 => - array ( - '320854', - '1', - ' D55146 A101495 A101496 M23350 Lfre T1 B1', - ), - 669 => - array ( - '320860', - '1', - ' D577 A88356 A88357 M56724 Lfre T1 B1', - ), - 670 => - array ( - '321596', - '2', - ' T2 B1', - ), - 671 => - array ( - '387878', - '10', - ' T10 B1', - ), - 672 => - array ( - '336955', - '3', - ' P85 A20299 A139071 A139072 A139073 A139074 A38267 A2801 A5780 A22402 A131183 A11207 A26255 A139075 A30984 A18834 A110266 A3052 A139076 A131184 A949 A107 A5750 A152 A46330 A5297 A30983 A139077 A134436 A139078 A139079 A117350 M150 M26 T3 B1', - ), - 673 => - array ( - '337510', - '3', - ' P811 A5055 A136653 M6363 T3 B1 S4 S18 S8 YBUS Y7MA YCANAL YMAG YROU YVOI', - ), - 674 => - array ( - '338660', - '3', - ' P85 A604 T3 B1', - ), - 675 => - array ( - '338902', - '3', - ' P593 A6752 Lfre T3 B1', - ), - 676 => - array ( - '339282', - '3', - ' A5458 A100741 T3 B1 S27 YCANAL', - ), - 677 => - array ( - '339729', - '3', - ' P593 A6752 Lfre T3 B1 S26 YCANAL', - ), - 678 => - array ( - '339908', - '3', - ' A478 T3 B1 S27 Y7MA', - ), - 679 => - array ( - '339985', - '3', - ' A1379 A107 A5208 T3 B1', - ), - 680 => - array ( - '341203', - '3', - ' P99121 A144393 M15942 M5891 T3 B1', - ), - 681 => - array ( - '341277', - '3', - ' A56618 A57087 A136057 A144442 T3 B1', - ), - 682 => - array ( - '342043', - '3', - ' P85 A11935 T3 B1', - ), - 683 => - array ( - '342143', - '3', - ' P85 A142566 M2974 T3 B1', - ), - 684 => - array ( - '342637', - '3', - ' P85 A146143 M145 T3 B1 S4 YCANAL', - ), - 685 => - array ( - '343093', - '3', - ' P518 A113440 M1277 M2596 Lfre T3 B1', - ), - 686 => - array ( - '344210', - '3', - ' P273 A75526 T3 B1 S4 Y7MA', - ), - 687 => - array ( - '344334', - '3', - ' P91423 A76134 M10688 T3 B1', - ), - 688 => - array ( - '362091', - '1', - ' A31326 A16515 Lfre T1 B1 S8 YCANAL 2030-12', - ), - 689 => - array ( - '344503', - '3', - ' P518 A556 A5242 A37135 M2776 T3 B1 S26 S4 YVOI YTRA YCANAL YMAG', - ), - 690 => - array ( - '344755', - '3', - ' P566 A604 T3 B1', - ), - 691 => - array ( - '345466', - '3', - ' P593 A6752 M1541 T3 B1 S8 YROU', - ), - 692 => - array ( - '345471', - '3', - ' P593 A6752 M1541 Lfre T3 B1 S8 YROU', - ), - 693 => - array ( - '345472', - '3', - ' P593 A6752 M1541 Lfre T3 B1 S8 YROU', - ), - 694 => - array ( - '346411', - '3', - ' A4573 A104609 A28146 A26960 A6664 A246 M16396 T3 B1', - ), - 695 => - array ( - '366783', - '1', - ' D64165 M7073 Lfre T1 B1 S1 Y7MA 2030-12', - ), - 696 => - array ( - '346994', - '3', - ' P811 A2487 M1550 T3 B1', - ), - 697 => - array ( - '348208', - '3', - ' P165 A149890 A7606 A136334 A151873 A151874 A151875 A151876 A151877 A131165 A151878 A130303 A66821 A151879 A139019 A151880 A151881 A141774 A29610 A151882 A107402 A3270 A28396 A16924 A4690 A8466 A10475 A24028 A141840 A103391 A54269 A136305 A151883 A109058 A134578 A8464 A68280 A151884 A151885 A151886 A364 A136832 A151887 A136677 A50934 A136333 A151888 A65461 A136684 A151889 M1805 M4047 T3 B1', - ), - 698 => - array ( - '348236', - '3', - ' P541 A104989 A15043 A137696 A140007 A151955 A141067 A151956 A151957 A51257 A123642 A151958 A151959 A26922 A90355 A37251 A151960 A151961 A151962 A151963 A151964 A134701 A151965 A151966 A19984 A29344 A135737 A140443 A4934 A27177 A151967 A73054 A151968 A137175 A151969 A151970 M208 T3 B1 S4 YCANAL', - ), - 699 => - array ( - '348257', - '3', - ' P85 A5137 M100 M896 T3 B1 S27 YROU', - ), - 700 => - array ( - '348658', - '3', - ' P139 A151903 M1996 T3 B1 S4 Y7MA', - ), - 701 => - array ( - '349860', - '3', - ' P811 A104313 T3 B1 S8 YCANAL', - ), - 702 => - array ( - '351033', - '3', - ' P81 A13899 M1550 T3 B1', - ), - 703 => - array ( - '351100', - '3', - ' P334 A18808 A36323 A154841 M11049 T3 B1', - ), - 704 => - array ( - '351917', - '1', - ' A86735 A11481 Lfre T1 B1', - ), - 705 => - array ( - '352670', - '3', - ' P85 A146143 T3 B1 S27 YROU', - ), - 706 => - array ( - '352916', - '3', - ' P593 A6752 Lfre T3 B1 S26 S4 YVOI YAIM YCANAL Y7MA', - ), - 707 => - array ( - '354475', - '3', - ' P593 A9307 M2776 T3 B1', - ), - 708 => - array ( - '354492', - '3', - ' P811 A2828 A2829 A14843 M318 M1277 M10395 T3 B1 S26 YVOI', - ), - 709 => - array ( - '354705', - '3', - ' P81 A40436 Lfre T3 B1', - ), - 710 => - array ( - '354873', - '3', - ' A135230 T3 B1', - ), - ); - } -} + return [['157', + '1', + ' A200 A201 M124 Lfre T1 B1 HTES10002'], + + ['367', + '1', + ' A444 A445 A446 M297 M298 Lfre T1 B1 V1'], + + ['656', + '1', + ' A800 A801 M515 M516 M505 M517 Lfre T1 B1 V1'], + + ['2027', + '1', + ' A2183 Lfre T1 B1 V2 V3'], + + ['2396', + '1', + ' A2525 T1 B1'], + + ['2553', + '1', + ' A2694 A2695 A2696 Lfre T1 B1'], + + ['3048', + '3', + ' A3181 M208 M1763 Lfre T3 B1 HTES1000100003'], + + ['359779', + '4', + ' T4 B1 G22 S26 Y7MA 2030-12'], + + ['4102', + '1', + ' A4339 Lfre T1 B1'], + + ['4222', + '1', + ' A3109 M2413 M12003 Lfre T1 B1'], + + ['4330', + '1', + ' A4569 A4570 M2458 Lfre T1 B1'], + + ['4347', + '1', + ' A69 A2696 Lfre T1 B1'], + + ['4419', + '2', + ' T2 B1'], + + ['4444', + '2', + ' T2 B1'], + + ['5136', + '1', + ' D79143 A5421 M2947 M2948 M2949 M2950 Lfre T1 B1'], + + ['5266', + '1', + ' D3637 A5566 M2619 M2617 Lfre T1 B1'], + + ['5335', + '1', + ' D6128 A5633 A5634 M3094 Lfre T1 B1'], + + ['5404', + '1', + ' A5730 M3113 Lfre T1 B1'], + + ['5477', + '1', + ' A2897 A771 A4820 M3150 Lfre T1 B1'], + + ['5677', + '4', + ' A5945 M212 M2188 Lfre T4 B1 G18'], + + ['5775', + '4', + ' A6051 M2188 T4 B1 G18'], + + ['6005', + '4', + ' A6323 A6324 T4 B1 G2'], + + ['7567', + '1', + ' D521 A7966 M4094 M4095 Lfre T1 B1'], + + ['312878', + '2', + ' T2 B1'], + + ['9263', + '3', + ' M1277 T3 B1'], + + ['10403', + '1', + ' A10690 A10691 Lfre T1 B1'], + + ['10971', + '1', + ' A317 Lfre T1 B1 G57'], + + ['11908', + '1', + ' A12072 A12073 Lfre T1 B1'], + + ['12093', + '1', + ' A12214 A12215 A446 M2632 Lfre T1 B1'], + + ['12213', + '1', + ' A12309 A4656 Lfre T1 B1'], + + ['12255', + '1', + ' A12309 A4656 Lfre T1 B1'], + + ['12261', + '1', + ' A12309 A4656 Lfre T1 B1'], + + ['12746', + '1', + ' A12742 Lfre T1 B1'], + + ['13442', + '1', + ' A9545 M6567 HTES10002 M2805 Lfre T1 B1'], + + ['14795', + '1', + ' A965 A14276 M7073 Lfre T1 B1'], + + ['15412', + '3', + ' A14742 M1758 Lfre T3 B1'], + + ['36964', + '1', + ' D6138 A29211 M3744 Lfre T1 B1'], + + ['18290', + '3', + ' M1955 Lfre T3 B1'], + + ['18809', + '1', + ' D5397 A17183 A17184 M8533 Lfre T1 B1 S26 S27 YCRPE YMDE'], + + ['18964', + '1', + ' A8474 M1962 Lfre T1 B1 G57'], + + ['19084', + '1', + ' A14479 A17381 Lfre T1 B1 G57'], + + ['19098', + '3', + ' A605 Lfre T3 B1 S26 Y7MA YVOI'], + + ['19332', + '1', + ' A1363 A1748 Lfre T1 B1'], + + ['19918', + '1', + ' D823 A18024 A18025 Lfre T1 B1 G57'], + + ['20098', + '1', + ' D5516 A18186 M8877 M4526 Lfre T1 B1'], + + ['20359', + '1', + ' A18378 M9034 M9037 M9036 M9035 Lfre Lger Leng T1 B1'], + + ['20550', + '2', + ' T2 B1'], + + ['21661', + '1', + ' D79373 A19352 M9420 Lfre T1 B1'], + + ['22344', + '1', + ' A19857 Lfre T1 B1 G57'], + + ['22363', + '5', + ' M9721 Lfre T5 B1'], + + ['22367', + '1', + ' A4320 A4321 M746 M876 Lfre T1 B1'], + + ['22783', + '1', + ' D577 A20160 M3228 M2098 M3456 Lfre T1 B1 S27 Y7MA'], + + ['24706', + '1', + ' M10393 M1277 Lfre T1 B1'], + + ['25068', + '1', + ' D3389 A18696 M1178 Lfre T1 B1'], + + ['25388', + '1', + ' A22169 A22176 A15365 M7073 Lfre T1 B1'], + + ['26904', + '1', + ' A13074 A13075 M6567 HTES10002 M3549 Lfre T1 B1'], + + ['26927', + '2', + ' T2 B1'], + + ['27106', + '1', + ' A3468 A23426 Lfre T1 B1 G57'], + + ['28544', + '4', + ' A24360 A24361 Lrum T4 B1 G13'], + + ['28684', + '1', + ' A24442 Lfre T1 B1'], + + ['29046', + '4', + ' A6752 T4 B1 G18'], + + ['29113', + '4', + ' M55187 M55188 M55189 T4 B1'], + + ['29830', + '1', + ' A4656 A4657 M861 Lfre T1 B1'], + + ['29833', + '1', + ' A4656 A4657 Lfre T1 B1'], + + ['29835', + '1', + ' A4656 A4657 Lfre T1 B1'], + + ['29837', + '1', + ' A4656 A4657 M2324 Lfre T1 B1'], + + ['29840', + '1', + ' A4656 A4657 Lfre T1 B1'], + + ['29842', + '1', + ' A4656 A4657 M562 Lfre T1 B1'], + + ['30227', + '3', + ' A1379 M26 Lfre T3 B1'], + + ['336855', + '3', + ' P85 A6051 T3 B1'], + + ['31013', + '2', + ' T2 B1'], + + ['31313', + '4', + ' A26010 M55197 T4 B1 G18'], + + ['31404', + '1', + ' D113 A26058 M8778 M8284 M1932 Lfre T1 B1'], + + ['32708', + '3', + ' A26796 Lfre T3 B1'], + + ['33547', + '1', + ' A10437 M846 T1 B1 G8'], + + ['33604', + '1', + ' A24442 M12755 Lfre T1 B1'], + + ['33857', + '1', + ' M170 Lfre T1 B1'], + + ['34499', + '1', + ' A27868 M12924 M1478 Lfre T1 B1'], + + ['34557', + '3', + ' A27552 M985 Lgre T3 B1'], + + ['35997', + '3', + ' A28704 Lfre T3 B1'], + + ['36435', + '2', + ' T2 B1'], + + ['36899', + '3', + ' P85 A29183 A34600 M212 T3 B1 S21 Y7MA'], + + ['37056', + '1', + ' A29259 M6201 Lfre T1 B1'], + + ['37293', + '5', + ' M13503 Lfre T5 B1'], + + ['38119', + '1', + ' A11438 A2699 M2558 Lfre T1 B1 G57'], + + ['39117', + '1', + ' D5765 A30374 M13962 Lfre T1 B1'], + + ['39126', + '1', + ' D523 A17354 M13964 Lfre T1 B1'], + + ['39130', + '1', + ' D5516 A30379 M13965 M13966 Lfre T1 B1'], + + ['39489', + '3', + ' M2596 T3 B1'], + + ['40076', + '0', + ' A246 Lfre T0 B1'], + + ['40297', + '3', + ' A31030 Lfre T3 B1'], + + ['40419', + '4', + ' M428 T4 B1 G18'], + + ['40682', + '1', + ' A31206 A4281 M205 Lfre T1 B1'], + + ['41400', + '4', + ' A6752 T4 B1'], + + ['41648', + '3', + ' A10960 Lfre T3 B1'], + + ['42301', + '1', + ' A7371 M11757 M2398 Lfre T1 B1'], + + ['42483', + '1', + ' D1742 A32254 M14673 M2693 M2601 Lfre T1 B1'], + + ['42503', + '0', + ' A6051 M13448 T0 B1'], + + ['42522', + '1', + ' A4657 A4656 Lfre T1 B1'], + + ['42737', + '1', + ' A4656 A4657 M4096 Lfre T1 B1'], + + ['42764', + '1', + ' A4656 A4657 M1314 Lfre T1 B1'], + + ['42841', + '1', + ' A4656 A4657 M14758 Lfre T1 B1'], + + ['42955', + '1', + ' A4656 A4657 M5780 Lfre T1 B1'], + + ['42971', + '1', + ' A4656 A4657 M6222 Lfre T1 B1'], + + ['42994', + '1', + ' A4656 A4657 M3192 Lfre T1 B1'], + + ['43823', + '1', + ' A4656 M2008 Lfre T1 B1'], + + ['43836', + '1', + ' A4656 M4896 Lfre T1 B1'], + + ['44403', + '2', + ' T2 B1'], + + ['44625', + '1', + ' D5391 A33469 M99 Lfre T1 B1'], + + ['44629', + '1', + ' D5768 A33471 M12674 Lfre T1 B1'], + + ['44630', + '1', + ' D1521 A9321 M15170 M6645 Lfre T1 B1'], + + ['44631', + '1', + ' D523 A33472 M5461 M7378 Lfre T1 B1'], + + ['44635', + '1', + ' D5999 A4146 M15171 M2625 M7378 Lfre T1 B1'], + + ['44636', + '1', + ' D6132 A9321 M15172 Lfre T1 B1'], + + ['44637', + '1', + ' D523 A22411 M15173 Lfre T1 B1'], + + ['44638', + '1', + ' D535 A9321 M2466 Lfre T1 B1'], + + ['44806', + '3', + ' T3 B1'], + + ['46924', + '1', + ' A20874 M746 Lfre T1 B1'], + + ['49490', + '1', + ' D530 A35817 M4874 M2731 M7378 Lfre T1 B1'], + + ['336537', + '3', + ' P98423 A24005 M896 T3 B1 S27 S4 YCANAL Y7MA'], + + ['51390', + '3', + ' A36784 A20527 Lfre T3 B1'], + + ['52297', + '1', + ' A37297 A37298 M865 M854 Lfre T1 B1'], + + ['52844', + '1', + ' A4657 A12309 A4656 Lfre T1 B1'], + + ['53134', + '1', + ' A11318 A10073 M16931 M1900 M5611 M2054 Lfre T1 B1'], + + ['54901', + '1', + ' A4656 A4657 Lfre T1 B1'], + + ['55010', + '2', + ' T2 B1'], + + ['55873', + '4', + ' M3865 T4 B1'], + + ['55892', + '2', + ' T2 B1'], + + ['55937', + '1', + ' A25131 M129 M746 M6567 HTES10002 Lfre T1 B1'], + + ['56491', + '1', + ' A13948 M17923 M17924 M17925 Lfre T1 B1'], + + ['56876', + '3', + ' P593 A39966 A39967 T3 B1 G57 S1 YTRA Y7MA YCANAL'], + + ['56988', + '1', + ' A40037 M1277 Lfre T1 B1'], + + ['57445', + '3', + ' A6752 Lfre T3 B1'], + + ['57645', + '3', + ' A40436 Lfre T3 B1'], + + ['58103', + '3', + ' A40741 T3 B1 S26 YCANAL'], + + ['58175', + '1', + ' D64165 A40794 M7073 Lfre T1 B1'], + + ['59013', + '1', + ' A40680 A40681 Lfre T1 B1'], + + ['59088', + '4', + ' A26010 M55197 T4 B1 G18'], + + ['59351', + '1', + ' A11316 A10001 M6567 HTES10002 M6222 Lfre T1 B1'], + + ['59808', + '4', + ' A41623 A23719 A41624 A41625 Lfre T4 B1'], + + ['61304', + '4', + ' A42498 T4 B1'], + + ['61532', + '1', + ' D530 A42612 M2732 Lfre T1 B1'], + + ['61916', + '1', + ' D6352 A12306 A42796 M2413 Lfre T1 B1'], + + ['62684', + '1', + ' D560 A39786 M8140 M2625 Lfre T1 B1'], + + ['63179', + '1', + ' A15075 A747 Lfre T1 B1 G19'], + + ['63314', + '1', + ' A43499 M975 Lfre T1 B1'], + + ['63372', + '1', + ' D580 A29259 M18198 M19456 Lfre T1 B1'], + + ['63401', + '1', + ' D521 A22411 M6602 M8778 Lfre T1 B1'], + + ['64219', + '3', + ' A600 A5127 A4573 Lfre T3 B1'], + + ['65349', + '2', + ' T2 B1'], + + ['336445', + '3', + ' P811 A6752 T3 B1'], + + ['66324', + '1', + ' A19185 A44957 M297 M7540 M9257 Lfre T1 B1'], + + ['66508', + '1', + ' A4292 A8371 Lfre T1 B1 G57'], + + ['66509', + '1', + ' A9402 A16706 Lfre T1 B1 G57'], + + ['67169', + '1', + ' D64186 M2458 Lfre T1 B1'], + + ['67385', + '1', + ' D634 A45443 M11757 Lfre T1 B1'], + + ['67537', + '2', + ' T2 B1'], + + ['68064', + '4', + ' A45744 A3702 T4 B1 G21'], + + ['68275', + '1', + ' D1742 A45863 M60 Lfre T1 B1'], + + ['68278', + '1', + ' D6132 A32254 M7257 Lfre T1 B1'], + + ['68369', + '3', + ' M17256 Lara T3 B1'], + + ['68794', + '3', + ' A21138 A1869 A131480 A26699 A3600 A26397 A3301 A46126 A25905 A46127 A34738 A46128 Lfre T3 B1'], + + ['69826', + '1', + ' M2413 Lfre T1 B1'], + + ['69992', + '4', + ' T4 B1 G22'], + + ['70996', + '1', + ' A3749 A771 M382 Lfre T1 B1'], + + ['71137', + '1', + ' D833 A39966 A39968 Lfre T1 B1 G57'], + + ['71368', + '2', + ' T2 B1'], + + ['71477', + '3', + ' A18847 Lfre T3 B1'], + + ['71676', + '5', + ' M13503 Lfre T5 B1'], + + ['71772', + '1', + ' D73523 M16846 Lfre T1 B1'], + + ['73153', + '1', + ' A1185 A31503 M6567 HTES10002 M7540 M2319 Lfre T1 B1'], + + ['74496', + '1', + ' A4656 A48777 Lfre T1 B1'], + + ['324628', + '3', + ' P593 A1820 A18583 M2742 T3 B1'], + + ['75327', + '1', + ' A9977 M4896 M6567 HTES10002 Lfre T1 B1'], + + ['76014', + '1', + ' D64165 A49441 M7073 Lfre T1 B1'], + + ['76662', + '1', + ' D796342 M22375 Lfre T1 B1'], + + ['77437', + '1', + ' A1106 M6567 HTES10002 M2007 Lfre T1 B1'], + + ['77657', + '3', + ' A6051 M212 Lfre T3 B1'], + + ['315810', + '1', + ' Lfre T1 B1'], + + ['78516', + '1', + ' D3337 A114 A50510 M1604 M3016 Lfre T1 B1'], + + ['79238', + '2', + ' T2 B1'], + + ['79403', + '1', + ' D6111 A50875 M20858 Lfre T1 B1'], + + ['79407', + '1', + ' D540 A50877 M22805 Lfre T1 B1'], + + ['79409', + '1', + ' D61284 A5633 A5634 M22806 M22807 Lfre T1 B1'], + + ['79411', + '1', + ' D5397 A17354 M22808 Lfre T1 B1'], + + ['79413', + '1', + ' D61282 A19403 M22809 Lfre T1 B1'], + + ['79526', + '1', + ' D6416 A50923 M824 M11757 Lfre T1 B1'], + + ['79550', + '1', + ' A50931 A9375 A9376 M2413 Lfre T1 B1'], + + ['79883', + '1', + ' D8111 D803 A4657 A4656 Lfre T1 B1'], + + ['81367', + '3', + ' A5900 A5899 M1277 M2596 Lfre T3 B1'], + + ['82774', + '5', + ' M9721 Lfre T5 B1'], + + ['84173', + '1', + ' A52952 A52953 A31715 M4313 M8645 Lfre T1 B1 G57'], + + ['84764', + '1', + ' Lfre T1 B1'], + + ['85285', + '1', + ' A7392 A647 M56889 M11757 Lfre T1 B1'], + + ['87085', + '1', + ' D333792 A17355 Lfre T1 B1'], + + ['87977', + '1', + ' A16318 A54829 M22580 M24406 Lfre T1 B1'], + + ['88079', + '1', + ' Lfre T1 B1'], + + ['88888', + '1', + ' A4656 A4657 M3976 Lfre T1 B1'], + + ['89608', + '1', + ' A55627 M24796 M3456 Lfre T1 B1'], + + ['89618', + '1', + ' A37671 M24804 M24805 M24803 Lfre T1 B1'], + + ['89629', + '1', + ' A55652 M24810 Lfre T1 B1'], + + ['90211', + '1', + ' A12309 A4656 Lfre T1 B1'], + + ['90223', + '1', + ' A12309 A4656 Lfre T1 B1'], + + ['90558', + '1', + ' A4292 A8371 Lfre T1 B1 G57'], + + ['90759', + '4', + ' T4 B1'], + + ['91665', + '2', + ' T2 B1 S8 YAIM YMAG'], + + ['93119', + '3', + ' M1277 M9115 Lfre T3 B1'], + + ['93624', + '1', + ' D417 A57465 M18316 M4940 Lfre T1 B1'], + + ['94660', + '3', + ' P811 A57822 T3 B1'], + + ['96306', + '1', + ' A9986 M6567 HTES10002 M7540 Lfre T1 B1'], + + ['96632', + '1', + ' A1323 A1340 A1325 M7540 M6567 HTES10002 Lfre T1 B1'], + + ['97363', + '3', + ' A59329 A59330 T3 B1'], + + ['97665', + '3', + ' A35950 A9308 Lfre T3 B1'], + + ['97998', + '1', + ' D64165 A22057 M7073 Lfre T1 B1'], + + ['98241', + '1', + ' D1555 A59709 M40 Lfre T1 B1'], + + ['98496', + '1', + ' A59862 A59863 Lfre T1 B1'], + + ['99193', + '2', + ' T2 B1'], + + ['99706', + '1', + ' D843 A40390 Lfre T1 B1 G17'], + + ['100670', + '1', + ' A4571 A12256 M6567 HTES10002 M6222 M7540 Lfre T1 B1'], + + ['102050', + '1', + ' D64165 M7073 Lfre T1 B1'], + + ['102094', + '1', + ' A9875 A61494 Lfre T1 B1'], + + ['334683', + '3', + ' P81 A530 T3 B1 S26 S4 YVOI YBUS'], + + ['102223', + '1', + ' D1553 A1914 M5842 M24757 Lfre T1 B1'], + + ['102624', + '2', + ' T2 B1'], + + ['316214', + '1', + ' D501 A9564 M36055 M24533 M15508 Lfre T1 B1'], + + ['103523', + '1', + ' D6132 A62170 M16836 Lfre T1 B1'], + + ['104052', + '1', + ' D823 A62367 A19481 Lfre T1 B1 G17'], + + ['105372', + '3', + ' A62914 T3 B1'], + + ['106050', + '1', + ' D70904 A63246 A63247 M27875 Lfre T1 B1'], + + ['107652', + '1', + ' D521 A7966 M6628 Lfre T1 B1'], + + ['108039', + '1', + ' A7817 A30 M4280 M204 Lfre T1 B1'], + + ['108041', + '1', + ' Lfre T1 B1'], + + ['108406', + '3', + ' A64209 A41511 A26198 A25394 A33995 A18376 A64210 A25908 A1734 A64211 A34037 A58230 A25852 A64212 A64213 A64214 A64215 A64216 A57385 A27139 A64217 Lfre T3 B1'], + + ['108417', + '1', + ' M495 M515 M1886 Lfre T1 B1'], + + ['109392', + '1', + ' A4656 A4657 Lfre T1 B1'], + + ['109395', + '1', + ' A4656 A4657 Lfre T1 B1'], + + ['109463', + '1', + ' A64662 A33805 Lfre T1 B1 G57'], + + ['109818', + '1', + ' D572 A64823 M1265 Lfre T1 B1'], + + ['109873', + '1', + ' D5768 A33471 M12674 Lfre T1 B1'], + + ['109877', + '1', + ' D5999 A4146 M2244 Lfre T1 B1'], + + ['110740', + '4', + ' A6752 Lfre Leng Lbre T4 B1'], + + ['111554', + '1', + ' D64165 A65604 M7073 Lfre T1 B1'], + + ['112429', + '2', + ' T2 B1'], + + ['113182', + '4', + ' A8918 M2641 T4 B1'], + ['113819', + '1', + ' A25156 M1142 Lfre T1 B1 G13'], -?> \ No newline at end of file + ['114209', + '1', + ' D577 A23684 M1128 Lfre T1 B1'], + + ['316387', + '1', + ' Lfre T1 B1 G31'], + + ['116257', + '1', + ' D535 A67674 M22126 Lfre T1 B1'], + + ['116259', + '1', + ' D62148 A67675 M17087 Lfre T1 B1'], + + ['116445', + '1', + ' D7596 D750 M29709 M2898 Lfre T1 B1'], + + ['116677', + '1', + ' A17430 M1277 M920 Lfre T1 B1'], + + ['119180', + '1', + ' M495 M2095 M2037 Lfre T1 B1'], + + ['119626', + '1', + ' D5999 A69127 M13221 M105 M2996 Lfre T1 B1'], + + ['119869', + '1', + ' A15418 A17642 M2456 M1314 Lfre T1 B1'], + + ['119977', + '0', + ' M9240 T0 B1'], + + ['120856', + '2', + ' T2 B1'], + + ['121239', + '1', + ' A4292 A8371 M2181 Lfre T1 B1 G57'], + + ['121672', + '1', + ' A7194 A69964 A14355 Lfre T1 B1 G57'], + + ['122013', + '1', + ' A2183 M6567 HTES10002 Lfre T1 B1'], + + ['122141', + '3', + ' A24096 A70170 Lfre T3 B1'], + + ['316528', + '4', + ' A131824 Lzxx T4 B1 G18'], + + ['123396', + '1', + ' A11271 A59702 M6979 Lfre T1 B1 G57'], + + ['123480', + '1', + ' D3637 A70724 M111 Lfre T1 B1'], + + ['123613', + '2', + ' T2 B1'], + + ['123831', + '5', + ' M52 Lfre T5 B1'], + + ['125005', + '1', + ' A18736 A47861 M9202 Lfre T1 B1 G57'], + + ['125704', + '1', + ' D75906 A71662 A63246 M14373 Lfre T1 B1'], + + ['126126', + '1', + ' D75906 A63246 M4838 Lfre T1 B1'], + + ['126753', + '1', + ' A14861 A32283 M297 M6567 HTES10002 M4570 Lfre T1 B1'], + + ['127652', + '3', + ' A6752 T3 B1 S8 S4 YVOI YAIM Y7MA YCANAL'], + + ['127995', + '1', + ' D779 M31749 Lfre T1 B1'], + + ['128323', + '1', + ' A72817 A72818 M3150 Lfre T1 B1'], + + ['128894', + '1', + ' D712 A24599 M30872 Lfre T1 B1'], + + ['130367', + '1', + ' A4656 A4657 Lfre T1 B1'], + + ['130373', + '1', + ' A4656 A4657 M124 Lfre T1 B1'], + + ['131683', + '3', + ' A604 M2464 T3 B1'], + + ['134016', + '1', + ' D843 A40390 Lfre T1 B1 G17'], + + ['135038', + '1', + ' D841 A33995 Lfre T1 B1'], + + ['135103', + '2', + ' T2 B1'], + + ['136866', + '2', + ' T2 B1'], + + ['137259', + '1', + ' A76377 A5005 M11757 Lfre T1 B1'], + + ['137822', + '1', + ' D843 A76834 Lfre T1 B1'], + + ['139403', + '3', + ' P137 A70408 A148070 A148071 A148072 A48753 A148073 T3 B1'], + + ['139808', + '1', + ' D813 A16118 A27424 A14229 Lfre T1 B1 G57'], + + ['139984', + '1', + ' D510 A138 M55799 Lfre T1 B1'], + + ['140211', + '1', + ' D61204 A77857 M33919 M23690 Lfre T1 B1'], + + ['140257', + '1', + ' D530 A13380 M6612 M2556 M7877 Lfre T1 B1'], + + ['140718', + '2', + ' T2 B1'], + + ['140734', + '2', + ' T2 B1'], + + ['141093', + '1', + ' A78178 A15172 A3906 A78179 M2082 Lfre T1 B1'], + + ['141776', + '3', + ' P93 A142217 T3 B1'], + + ['142121', + '1', + ' D64165 A78604 M7073 Lfre T1 B1'], + + ['142733', + '2', + ' T2 B1'], + + ['142872', + '3', + ' P811 A1869 T3 B1'], + + ['143221', + '4', + ' T4 B1'], + + ['143829', + '1', + ' A79305 M8017 M1003 M21235 Lfre T1 B1'], + + ['144221', + '1', + ' D75906 M10456 Lfre T1 B1'], + + ['145814', + '1', + ' D64165 A44650 A14276 M7073 Lfre T1 B1'], + + ['145819', + '1', + ' D64165 A38154 M7073 Lfre T1 B1'], + + ['146066', + '1', + ' A8492 A8524 Lfre T1 B1'], + + ['147312', + '2', + ' T2 B1'], + + ['147485', + '1', + ' A80735 A9417 A28576 M2413 Lfre T1 B1'], + + ['148171', + '3', + ' A13599 A4573 A2089 A10010 T3 B1'], + + ['148689', + '3', + ' A81138 A24358 T3 B1'], + + ['148748', + '1', + ' A63246 A57933 A62401 M33206 Lfre T1 B1'], + + ['149266', + '1', + ' M2095 M495 Lfre T1 B1'], + + ['149294', + '4', + ' A81336 Lara T4 B1'], + + ['149382', + '1', + ' A25416 M611 M9622 M3945 Lfre T1 B1'], + + ['149616', + '1', + ' A4820 M3017 Lfre T1 B1'], + + ['150813', + '2', + ' T2 B1'], + + ['152674', + '1', + ' D759 A9464 Lfre T1 B1 G57'], + + ['153057', + '1', + ' A8401 M12862 Lfre T1 B1'], + + ['153061', + '1', + ' A29455 M4854 M3335 Lfre T1 B1'], + + ['153328', + '4', + ' A23003 T4 B1'], + + ['153377', + '5', + ' A45768 M5812 Lfre T5 B1'], + + ['153805', + '1', + ' D74156 A83075 A59379 M2413 Lfre T1 B1 G44'], + + ['154274', + '1', + ' A4656 A4657 M1521 Lfre T1 B1'], + + ['154759', + '1', + ' D64165 A45062 A45063 M7073 Lfre T1 B1'], + + ['154862', + '4', + ' A83407 Lfre T4 B1'], + + ['155453', + '1', + ' A33189 A63246 M34751 Lfre T1 B1'], + + ['155491', + '2', + ' T2 B1'], + + ['155662', + '1', + ' A4656 A4657 M298 Lfre T1 B1'], + + ['155664', + '1', + ' A4656 A4657 Lfre T1 B1'], + + ['155666', + '1', + ' A4656 A4657 M920 Lfre T1 B1'], + + ['155669', + '1', + ' A4656 Lfre T1 B1'], + + ['155670', + '1', + ' A4656 A4657 M2037 Lfre T1 B1'], + + ['155671', + '1', + ' A4656 A4657 M2082 Lfre T1 B1'], + + ['156036', + '2', + ' T2 B1'], + + ['156273', + '1', + ' A9986 Lfre T1 B1'], + + ['156342', + '1', + ' A21798 M36535 Lfre T1 B1'], + + ['156592', + '1', + ' A14051 A83969 A28576 A69139 M11757 Lfre T1 B1'], + + ['156897', + '0', + ' A246 M1370 M9242 M13448 T0 B1'], + + ['157647', + '1', + ' A69990 Lfre T1 B1'], + + ['158009', + '1', + ' A63529 M7540 M6567 HTES10002 Lfre T1 B1'], + + ['160738', + '1', + ' D569 A13340 M10418 M6599 Lfre T1 B1'], + + ['160740', + '1', + ' D598 A84197 M3833 M37235 M37236 Lfre T1 B1'], + + ['160744', + '1', + ' D523 A22411 M37237 Lfre T1 B1'], + + ['162228', + '3', + ' A9308 A35950 T3 B1'], + + ['163582', + '1', + ' A280 A9884 Lfre T1 B1'], + + ['163730', + '4', + ' A1379 A9414 A241 M3514 T4 B1 G18'], + + ['164241', + '1', + ' D523 A86709 M3006 Lfre T1 B1'], + + ['164287', + '3', + ' A86735 A11481 M298 Lfre T3 B1'], + + ['164752', + '4', + ' A6752 Lfre Leng Lbre T4 B1'], + + ['164875', + '1', + ' Lfre T1 B1'], + + ['165235', + '1', + ' A16727 M1312 Lfre T1 B1'], + + ['165412', + '1', + ' A1307 M1181 M2939 M3093 Lfre T1 B1'], + + ['165654', + '1', + ' D636089 A87154 M38011 Lfre T1 B1'], + + ['165671', + '1', + ' D813 A87161 A35747 Lfre T1 B1 G19'], + + ['166714', + '1', + ' D5515 A18186 M1907 Lfre T1 B1'], + + ['166905', + '1', + ' D823 A12135 Lfre T1 B1 G57'], + + ['167581', + '1', + ' A1346 M3018 M6567 HTES10002 Lfre T1 B1'], + + ['168761', + '1', + ' A2694 A88283 A88284 M1183 Lfre T1 B1'], + + ['168795', + '2', + ' T2 B1'], + + ['168815', + '1', + ' A88300 M854 Lfre T1 B1'], + + ['168818', + '1', + ' A88301 A88302 Lfre T1 B1'], + + ['169040', + '1', + ' D577 A88356 A88357 M101 Lfre T1 B1'], + + ['169070', + '1', + ' D590 A8246 M9422 Lfre T1 B1'], + + ['169213', + '1', + ' D75906 A63246 M38495 Lfre T1 B1'], + + ['169298', + '2', + ' T2 B1'], + + ['170303', + '1', + ' A9299 M2413 Lfre T1 B1'], + + ['171658', + '1', + ' A63246 M33085 Lfre T1 B1'], + + ['171659', + '1', + ' A63246 A55399 M33085 Lfre T1 B1'], + + ['171780', + '1', + ' A88944 A6795 M5045 M854 M5780 Lfre T1 B1'], + + ['172058', + '1', + ' A24689 A44345 M2458 Lfre T1 B1'], + + ['172392', + '1', + ' A89477 A2696 M505 M491 M1394 Lfre T1 B1 S8 S15 S18 YMAG YJAU YCRPE YTRA YCANAL YVOI'], + + ['317263', + '1', + ' Lfre T1 B1 G31'], + + ['172494', + '1', + ' A8540 A63450 A446 M171 Lfre T1 B1 G57'], + + ['317275', + '1', + ' D74156 A4691 Lfre T1 B1 G8'], + + ['173391', + '1', + ' A35189 M6567 HTES10002 Lfre T1 B1'], + + ['173614', + '1', + ' D847 A87712 A89892 A78179 Lfre T1 B1'], + + ['173778', + '1', + ' D843 A89947 A89948 Lfre T1 B1 G57'], + + ['174386', + '3', + ' A85980 A11992 A6752 A41113 A5018 A66641 A5429 A605 A24031 A72753 Lfre T3 B1'], + + ['175983', + '1', + ' A22356 M20235 Lfre T1 B1'], + + ['176026', + '1', + ' A8401 M4361 Lfre T1 B1'], + + ['177404', + '1', + ' A3598 A14492 M4738 M495 Lfre T1 B1 G31'], + + ['178032', + '2', + ' T2 B1'], + + ['178771', + '1', + ' A3915 M2413 Lfre T1 B1'], + + ['179475', + '3', + ' A12168 T3 B1'], + + ['179493', + '4', + ' A12168 A42659 M3514 T4 B1 G18'], + + ['179599', + '2', + ' T2 B1 S8 YAIM YROU YCANAL'], + + ['180144', + '1', + ' A660 A12309 A4656 M11453 Lfre T1 B1'], + + ['180750', + '1', + ' A9737 M39926 M4900 Lfre T1 B1'], + + ['181195', + '1', + ' A4320 A4321 M39981 M5780 Lfre T1 B1'], + + ['181366', + '0', + ' A5945 M2956 Lfre T0 B1'], + + ['181581', + '1', + ' A4342 A4656 M298 Lfre T1 B1'], + + ['182448', + '3', + ' A25907 A92895 A25500 A1612 A92896 A1751 A14053 A4496 A4550 A280 A167 A1420 Lfre T3 B1'], + + ['182994', + '1', + ' M495 M431 M23964 M3453 M13794 M5206 M1183 Lfre T1 B1'], + + ['183075', + '3', + ' M1498 Lfre T3 B1'], + + ['183384', + '4', + ' A6752 Lfre T4 B1'], + + ['184441', + '1', + ' D36361 A114 A50510 M1604 M3016 Lfre T1 B1'], + + ['184947', + '3', + ' A42528 A82675 A77720 M1277 T3 B1'], + + ['185447', + '1', + ' D73523 A63246 M5210 Lfre T1 B1'], + + ['185657', + '3', + ' P511 A7649 A23694 A8301 A5033 A8553 A4591 A28616 M2527 Lfre T3 B1 S4 YMAG'], + + ['185857', + '1', + ' D74156 A94029 A17821 A94032 Lfre T1 B1 G15'], + + ['186523', + '1', + ' A10437 Lfre T1 B1'], + + ['188543', + '1', + ' A4657 A4656 Lfre T1 B1'], + + ['189726', + '1', + ' A13075 M6567 HTES10002 M3549 Lfre T1 B1'], + + ['189909', + '4', + ' A63678 T4 B1 G21'], + + ['190636', + '1', + ' D5518 A95603 M3263 M15582 Lfre T1 B1'], + + ['190645', + '1', + ' D3637 A37671 M12461 M13838 Lfre T1 B1'], + + ['191588', + '4', + ' T4 B1 G11'], + + ['191859', + '3', + ' M10396 T3 B1'], + + ['191941', + '3', + ' P133 A5481 A21806 A8631 A32770 A104304 A110577 A47132 A42150 A48992 A47131 A13188 A151903 M1504 T3 B1'], + + ['192222', + '1', + ' D3339 A29259 M4523 Lfre T1 B1'], + + ['192239', + '1', + ' D15463 A96133 M27281 M14787 Lfre T1 B1'], + + ['192345', + '3', + ' A2169 A96163 A96164 M1277 Lfre T3 B1'], + + ['192942', + '1', + ' A89830 Lfre T1 B1 G57'], + + ['193177', + '1', + ' D6118 A96404 M9747 Lfre T1 B1'], + + ['193182', + '1', + ' D0063 A96408 M14620 Lfre T1 B1'], + + ['193575', + '1', + ' A96551 A201 A446 M1314 M868 Lfre T1 B1'], + + ['194039', + '2', + ' T2 B1'], + + ['194198', + '1', + ' D521 A13380 M6612 M41634 Lfre T1 B1'], + + ['194941', + '3', + ' A96974 Lfre T3 B1'], + + ['195076', + '1', + ' A1106 M7540 M6567 HTES10002 Lfre T1 B1'], + + ['195475', + '2', + ' T2 B1'], + + ['195808', + '3', + ' A97204 M220 Lfre T3 B1'], + + ['196438', + '1', + ' A3749 A771 M1510 Lfre T1 B1'], + + ['197701', + '1', + ' A4657 A4656 M2419 Lfre T1 B1'], + + ['198053', + '1', + ' A97847 A97848 M11358 Lfre T1 B1'], + + ['198123', + '1', + ' A30427 M6051 M3004 M7540 Lfre T1 B1'], + + ['198333', + '1', + ' D75906 A63246 M4839 Lfre T1 B1'], + + ['198506', + '1', + ' A4656 A4657 Lfre T1 B1'], + + ['198508', + '1', + ' A4656 Lfre T1 B1'], + + ['198953', + '1', + ' A2025 M7540 M5780 M2419 M6222 Lfre T1 B1'], + + ['199876', + '3', + ' P811 A28203 A31267 A54493 A3302 A152433 T3 B1 S26 S4 YVOI YAIM YCANAL YTRA Y7MA YMAG YBUS'], + + ['199932', + '1', + ' A42256 A13072 M6172 M5321 Lfre T1 B1'], + + ['200250', + '5', + ' A116 A15418 M42238 Lfre T5 B1'], + + ['200571', + '3', + ' A12168 T3 B1'], + + ['200746', + '5', + ' M19037 Lfre T5 B1'], + + ['201873', + '3', + ' A98934 M896 T3 B1'], + + ['201942', + '3', + ' P511 A7649 A23694 A5219 A5033 A4591 A8553 M2527 M896 T3 B1 G53'], + + ['202332', + '1', + ' D843 A99132 Lfre T1 B1'], + + ['202602', + '3', + ' A29282 T3 B1'], + + ['202664', + '1', + ' A14251 M6567 HTES10002 Lfre T1 B1'], + + ['202730', + '1', + ' A781 A2696 Lfre T1 B1'], + + ['202766', + '1', + ' A99303 A99304 Lfre T1 B1'], + + ['203885', + '2', + ' T2 B1'], + + ['204684', + '1', + ' D8111 A4657 A4656 Lfre T1 B1'], + + ['204687', + '1', + ' A4657 A4656 Lfre T1 B1'], + + ['204688', + '1', + ' A4657 A4656 Lfre T1 B1'], + + ['205281', + '1', + ' A79965 M5131 M5132 M5033 M6051 Lfre T1 B1'], + + ['205514', + '1', + ' D64186 A4586 M11757 M2458 Lfre T1 B1'], + + ['205784', + '4', + ' A6752 Lfre Leng Lbre T4 B1'], + + ['207774', + '1', + ' M6567 HTES10002 M7540 M3985 Lfre T1 B1'], + + ['208254', + '1', + ' A53412 M1495 M388 M16931 M15286 Lfre T1 B1'], + + ['317879', + '1', + ' D89563 A13168 A19496 A69153 Lfre T1 B1 G19'], + + ['209412', + '3', + ' A101306 A99512 M9115 M10396 M170 M1277 Lfre T3 B1'], + + ['209546', + '1', + ' M7073 Lfre T1 B1'], + + ['210175', + '1', + ' D5517 D550 A101495 A101496 M23350 Lfre T1 B1'], + + ['210215', + '1', + ' A1106 M1312 Lfre T1 B1'], + + ['210246', + '4', + ' A101511 A10766 A82477 A101512 Lfre T4 B1'], + + ['210511', + '3', + ' A4510 A101592 M1731 T3 B1'], + + ['210529', + '3', + ' A5945 T3 B1'], + + ['211305', + '1', + ' A4656 A4342 Lfre T1 B1'], + + ['211724', + '1', + ' D73523 M26489 Lfre T1 B1'], + + ['211949', + '1', + ' A10437 M7540 Lfre T1 B1'], + + ['213337', + '1', + ' A4854 A36045 M3106 Lfre T1 B1 S8 YAIM YVOI Y7MA'], + + ['213596', + '1', + ' D75906 A21798 A49145 M43629 M952 Lfre T1 B1'], + + ['214016', + '4', + ' A25259 A548 A7649 A23694 A5219 A5033 A8553 M2970 T4 B1 G53'], + + ['214206', + '1', + ' D75906 M26164 Lfre T1 B1'], + + ['214873', + '4', + ' A10839 A10838 Lfre T4 B1'], + + ['215497', + '2', + ' T2 B1'], + + ['215577', + '3', + ' A26249 M1277 Lfre T3 B1'], + + ['216382', + '4', + ' A6752 Lfre T4 B1'], + + ['216669', + '1', + ' A103514 A446 M26454 Lfre T1 B1'], + + ['217929', + '1', + ' D6298 A96408 M6082 M14897 Lfre T1 B1'], + + ['218786', + '1', + ' D89563 A104143 A3680 Lfre T1 B1 G57'], + + ['220702', + '5', + ' M44324 Lfre T5 B1'], + + ['221001', + '3', + ' A2169 A62233 A104868 M10396 Lfre T3 B1'], + + ['221818', + '3', + ' M44452 T3 B1'], + + ['221936', + '1', + ' A63246 M5210 M23989 M4836 Lfre T1 B1'], + + ['222616', + '1', + ' A88302 A105358 M11407 Lfre T1 B1'], + + ['223673', + '1', + ' A105600 A12215 A46188 M3106 Lfre T1 B1'], + + ['224861', + '2', + ' T2 B1'], + + ['225442', + '3', + ' A25212 T3 B1'], + + ['225536', + '1', + ' D6416 A96805 A106113 M10613 M2458 Lfre T1 B1'], + + ['226810', + '1', + ' D8111 D804 A56856 Lfre T1 B1'], + + ['227124', + '2', + ' T2 B1'], + + ['227634', + '4', + ' A82477 T4 B1 G40'], + + ['227841', + '3', + ' P85 A5945 M212 T3 B1 S4 S27 YBUS YAIM YCANAL YMAG Y7MA YROU YTRA YVOI'], + + ['227982', + '3', + ' A50364 A47507 A20888 A55229 M1731 Lfre T3 B1'], + + ['228694', + '1', + ' A6079 M1291 Lfre T1 B1'], + + ['228889', + '1', + ' A88300 A107115 M1495 Lfre T1 B1'], + + ['229341', + '1', + ' A107218 M2325 M116 Lfre T1 B1'], + + ['229374', + '1', + ' A63451 A63450 A60144 M2335 Lfre T1 B1'], + + ['230458', + '1', + ' A69419 Lfre T1 B1'], + + ['231649', + '1', + ' A105358 A446 M854 Lfre T1 B1'], + + ['232032', + '1', + ' A36701 A107840 M9061 Lfre T1 B1'], + + ['232445', + '1', + ' A9730 Lfre T1 B1 G57'], + + ['232625', + '1', + ' D580 A108065 M2686 Lfre T1 B1'], + + ['233098', + '2', + ' T2 B1'], + + ['233136', + '1', + ' A26832 M43215 Lfre T1 B1'], + + ['233470', + '2', + ' T2 B1'], + + ['233824', + '1', + ' D77092 M35468 Lfre T1 B1'], + + ['234820', + '3', + ' M6845 T3 B1'], + + ['235729', + '5', + ' A109078 A35055 M9721 Lfre T5 B1'], + + ['236137', + '1', + ' D501 A38138 A35908 M2242 Lfre T1 B1'], + + ['237090', + '1', + ' D779 A109459 A109460 M24427 Lfre T1 B1'], + + ['237251', + '1', + ' A12126 A12127 A12128 M846 Lfre T1 B1'], + + ['237502', + '4', + ' A105709 T4 B1 G22'], + + ['237543', + '1', + ' D0063 A14590 A14591 M9523 M17293 Lfre T1 B1'], + + ['237793', + '1', + ' D73523 A63246 M46455 Lfre T1 B1'], + + ['238426', + '2', + ' T2 B1'], + + ['239509', + '3', + ' A1379 M26 T3 B1'], + + ['240408', + '2', + ' T2 B1'], + + ['241692', + '3', + ' A27518 T3 B1 S4 YCANAL'], + + ['242799', + '1', + ' D74156 A111726 Lfre T1 B1'], + + ['243246', + '2', + ' T2 B1'], + + ['245477', + '1', + ' A27740 A112746 M2386 Lfre T1 B1'], + + ['245698', + '1', + ' A97847 A97848 M849 Lfre T1 B1'], + + ['245753', + '1', + ' A43499 M21701 Lfre T1 B1'], + + ['245963', + '1', + ' Lfre T1 B1'], + + ['246341', + '1', + ' A2545 M1327 T1 B1'], + + ['246856', + '1', + ' D74156 A113115 Lfre T1 B1'], + + ['247368', + '4', + ' A113327 T4 B1 G22'], + + ['247546', + '3', + ' A12086 A12648 Lfre T3 B1'], + + ['247735', + '4', + ' A1379 M9266 T4 B1 G18'], + + ['247769', + '3', + ' A604 T3 B1'], + + ['247813', + '1', + ' A61494 Lfre T1 B1'], + + ['247888', + '1', + ' A71918 M7540 M6567 HTES10002 M2319 M958 Lfre T1 B1'], + + ['247900', + '1', + ' A800 A801 M4401 M515 M37339 Lfre T1 B1'], + + ['247902', + '1', + ' A800 A14034 Lfre T1 B1'], + + ['247905', + '1', + ' A800 A801 Lfre T1 B1'], + + ['248029', + '1', + ' A800 Lfre T1 B1'], + + ['249046', + '1', + ' A50931 A9375 A9376 M2413 Lfre T1 B1'], + + ['249526', + '3', + ' P813 A155578 A532 A751 A155579 A215 A155580 A148968 A531 A31033 A2287 A538 A399 A155581 A155582 A12596 A16151 A155583 A155584 A23287 A155585 A155586 A4783 T3 B1'], + + ['250299', + '1', + ' D796342 A114200 M48646 M11226 Lfre T1 B1'], + + ['250384', + '3', + ' A70408 M1504 M1996 Lfre T3 B1'], + + ['250494', + '1', + ' A9875 A61494 M846 Lfre T1 B1'], + + ['250497', + '1', + ' A9875 A61494 M846 Lfre T1 B1'], + + ['351895', + '3', + ' P81 A12168 T3 B1'], + + ['251119', + '1', + ' D4014 A114431 M46 Lfre T1 B1'], + + ['252539', + '3', + ' A26249 M1277 T3 B1'], + + ['252556', + '3', + ' P81 A21141 T3 B1 S26 YVOI YCANAL YROU'], + + ['252617', + '4', + ' A13106 T4 B1 G15'], + + ['253285', + '4', + ' A10512 A15836 A18547 M56328 M48870 M56329 Lfre T4 B1'], + + ['318756', + '3', + ' A94226 T3 B1'], + + ['253527', + '3', + ' A106363 A33322 Lfre T3 B1'], + + ['253615', + '2', + ' T2 B1'], + + ['254434', + '3', + ' P81 A12168 T3 B1'], + + ['254798', + '1', + ' M495 Lfre T1 B1'], + + ['255235', + '1', + ' D779 A42634 A116007 M49414 Lfre T1 B1'], + + ['255329', + '3', + ' A116042 M6200 Lfre T3 B1'], + + ['255646', + '1', + ' A4656 M1277 Lfre T1 B1 G57'], + + ['256372', + '3', + ' A36439 Lfre T3 B1'], + + ['318810', + '1', + ' D1742 A8561 M4509 M60 Lfre T1 B1'], + + ['256510', + '1', + ' D61532 A59886 M11657 M3465 Lfre T1 B1'], + + ['256515', + '1', + ' D5397 A49905 M2618 Lfre T1 B1'], + + ['256529', + '3', + ' M1277 Lfre T3 B1'], + + ['257007', + '1', + ' A3862 M846 Lfre T1 B1'], + + ['257440', + '1', + ' A1459 M171 Lfre T1 B1'], + + ['258182', + '1', + ' A4656 A75751 Lfre T1 B1'], + + ['258186', + '1', + ' A4656 A4657 Lfre T1 B1'], + + ['318854', + '1', + ' A1857 M49865 M49866 M47573 Lfre T1 B1'], + + ['259549', + '3', + ' A36809 A5053 Lfre T3 B1'], + + ['259586', + '3', + ' A226 A31766 A11738 A20194 A156506 A142209 M6854 T3 B1'], + + ['261007', + '1', + ' D595 A35510 M90 Lfre T1 B1'], + + ['261240', + '1', + ' A12309 Lfre T1 B1'], + + ['261241', + '1', + ' A117669 A87852 M1865 M2625 Lfre T1 B1'], + + ['261278', + '1', + ' A9875 Lfre T1 B1'], + + ['261291', + '1', + ' A24442 Lfre T1 B1'], + + ['261953', + '1', + ' A69782 A2699 Lfre T1 B1 G57'], + + ['262019', + '4', + ' A5945 A117848 A7389 M2188 Lfre T4 B1 G18'], + + ['262455', + '1', + ' A117962 A105358 A446 Lfre T1 B1'], + + ['335022', + '3', + ' P811 A6752 M1541 T3 B1 S8 YAIM'], + + ['262808', + '2', + ' T2 B1'], + + ['263663', + '1', + ' A6054 A28777 M11757 Lfre T1 B1'], + + ['264061', + '1', + ' D30223 A19352 M26221 Lfre T1 B1'], + + ['264159', + '1', + ' A12742 Lfre T1 B1'], + + ['264162', + '1', + ' A12742 Lfre T1 B1'], + + ['264164', + '1', + ' A12742 Lfre T1 B1'], + + ['264260', + '2', + ' T2 B1'], + + ['264864', + '1', + ' A27216 A70358 A3622 M2383 Lfre T1 B1 G9'], + + ['266049', + '1', + ' A13433 M6567 HTES10002 M2939 T1 B1'], + + ['266213', + '3', + ' A6752 T3 B1'], + + ['266238', + '1', + ' A19403 M3702 M24507 Lfre T1 B1'], + + ['266247', + '1', + ' A43499 M3980 M3985 Lfre T1 B1'], + + ['266382', + '1', + ' A1910 A21426 M3150 Lfre T1 B1'], + + ['266990', + '1', + ' M1277 M170 Lfre T1 B1'], + + ['267049', + '1', + ' Lfre T1 B1'], + + ['267289', + '3', + ' A12168 T3 B1'], + + ['267920', + '3', + ' A396 A33123 T3 B1'], + + ['268912', + '1', + ' A17921 M9295 Lfre T1 B1'], + + ['269347', + '1', + ' A4854 M6567 HTES10002 Lfre T1 B1'], + + ['270120', + '1', + ' A120169 M3550 M3549 Lfre T1 B1 S8 S18 YCANAL YTRA Y7MA YROU'], + + ['270202', + '2', + ' T2 B1'], + + ['271535', + '1', + ' A99619 M11716 M47634 M2785 M12267 Lfre T1 B1'], + + ['272041', + '1', + ' D74156 A120630 Lfre T1 B1'], + + ['272433', + '1', + ' A9875 M7621 M5134 M920 Lfre T1 B1'], + + ['273787', + '1', + ' A22357 A5392 M1142 Lfre T1 B1 G57'], + + ['273916', + '2', + ' T2 B1'], + + ['274310', + '1', + ' A800 A103811 Lfre T1 B1 G57'], + + ['275129', + '3', + ' A114933 A114934 Lfre T3 B1 S8 S4 YCANAL YBUS Y7MA 2030-12'], + + ['275738', + '4', + ' A113327 T4 B1 G22'], + + ['275743', + '4', + ' A6752 Lfre Leng Lbre T4 B1'], + + ['276324', + '1', + ' A121834 A121835 Lfre T1 B1'], + + ['276578', + '1', + ' A4656 A4657 M854 Lfre T1 B1'], + + ['277041', + '2', + ' T2 B1'], + + ['277260', + '1', + ' A13097 A13098 M920 M6051 Lfre Leng T1 B1'], + + ['278468', + '1', + ' D598 A122381 M14759 M3261 Lfre T1 B1'], + + ['279049', + '2', + ' T2 B1'], + + ['280603', + '4', + ' A118262 Lfre T4 B1'], + + ['281633', + '3', + ' A103336 A103337 Lfre T3 B1'], + + ['281735', + '3', + ' A33567 A4573 A23719 M2687 Lfre T3 B1'], + + ['282747', + '1', + ' D635 A37582 M52099 Lfre T1 B1'], + + ['283159', + '3', + ' A115340 A62233 Lfre T3 B1'], + + ['283399', + '1', + ' D843 A108335 Lfre T1 B1'], + + ['283728', + '1', + ' A800 A801 M9044 M13794 Lfre T1 B1'], + + ['284256', + '1', + ' A12742 Lfre T1 B1'], + + ['284720', + '2', + ' T2 B1 S8 YVOI YROU YAIM YMAG'], + + ['285076', + '1', + ' A3740 A14695 Lfre T1 B1'], + + ['285225', + '2', + ' T2 B1'], + + ['285232', + '1', + ' A13293 M56305 Lfre T1 B1'], + + ['287115', + '1', + ' A23260 M3017 Lfre T1 B1'], + + ['286505', + '4', + ' A9497 M3514 M2188 T4 B1 G18'], + + ['286530', + '1', + ' A3740 Lfre T1 B1'], + + ['286828', + '1', + ' A23320 M8867 M52537 M36387 Lfre T1 B1'], + + ['287702', + '2', + ' T2 B1'], + + ['288208', + '1', + ' D70904 M15136 M4836 M52678 Lfre T1 B1'], + + ['288860', + '1', + ' A22169 A22176 A64859 M2458 Lfre T1 B1'], + + ['289394', + '1', + ' A22092 A20733 A22094 M2941 Lfre T1 B1'], + + ['289749', + '4', + ' A65252 A65253 A65254 T4 B1'], + + ['289996', + '1', + ' D62148 A49905 M8634 M2619 M7378 Lfre T1 B1'], + + ['321736', + '4', + ' A133472 A133473 M56868 T4 B1'], + + ['290994', + '1', + ' A4657 A4656 M858 Lfre T1 B1'], + + ['291623', + '1', + ' A126006 A126007 M16931 Lfre T1 B1'], + + ['292338', + '1', + ' A126174 A20733 A22094 M7073 Lfre T1 B1'], + + ['293792', + '1', + ' D621042 A126576 M6047 M53246 Lfre T1 B1'], + + ['294188', + '2', + ' T2 B1 S8 YVOI YMAG YAIM YROU'], + + ['294492', + '3', + ' Lfre T3 B1'], + + ['294755', + '4', + ' T4 B1 G22'], + + ['295267', + '1', + ' D843 A19989 Lfre T1 B1 G57'], + + ['295312', + '1', + ' D8943 A126988 A68401 Lfre T1 B1 G57'], + + ['319952', + '1', + ' A12309 A4656 A48777 Lfre T1 B1'], + + ['296275', + '4', + ' A6752 Lfre Leng Lbre T4 B1'], + + ['296427', + '2', + ' T2 B1'], + + ['296672', + '4', + ' A127331 M13630 T4 B1'], + + ['297722', + '1', + ' D64165 M7073 Lfre T1 B1'], + + ['298186', + '2', + ' T2 B1'], + + ['320209', + '1', + ' A51866 A85563 M2387 Lfre T1 B1 S5 S8 YCRPE YVOI YCANAL YROU'], + + ['300599', + '1', + ' A4657 A4656 Lfre T1 B1'], + + ['300604', + '1', + ' A4657 A4656 Lfre T1 B1'], + + ['300606', + '1', + ' A12309 A4656 M20206 Lfre T1 B1'], + + ['300608', + '1', + ' A4657 A4656 Lfre T1 B1'], + + ['300907', + '1', + ' D833 A39966 A39968 Lfre T1 B1 G57'], + + ['300993', + '3', + ' M1277 Lfre T3 B1'], + + ['302144', + '1', + ' D6291 A128629 M18788 M2049 Lfre T1 B1'], + + ['303060', + '1', + ' D530 A26058 M4177 Lfre T1 B1'], + + ['320961', + '1', + ' D5397 A55652 M19071 Lfre T1 B1'], + + ['304413', + '1', + ' D6126 A5972 M54320 Lfre T1 B1'], + + ['304428', + '1', + ' D55146 A114 M32017 M77 Lfre T1 B1'], + + ['304575', + '2', + ' T2 B1'], + + ['304993', + '3', + ' A670 Lfre T3 B1'], + + ['305830', + '3', + ' P511 A7649 A23694 M2527 M896 T3 B1 G53'], + + ['311424', + '1', + ' D78242 A5369 Lfre T1 B1'], + + ['311795', + '2', + ' T2 B1'], + + ['312663', + '1', + ' D525 A7946 M54882 Lfre T1 B1'], + + ['313172', + '1', + ' D115 A9564 M4875 Lfre T1 B1'], + + ['314083', + '4', + ' D79143 A130952 A130953 A130954 A49329 A20260 A130955 A78105 Lfre T4 B1 G20'], + + ['314395', + '2', + ' T2 B1'], + + ['314403', + '1', + ' D512 A138 M55103 M10123 Lfre T1 B1'], + + ['315254', + '1', + ' D5514 A30379 M55231 Lfre T1 B1'], + + ['317413', + '1', + ' A4656 A48777 Lfre T1 B1'], + + ['317739', + '1', + ' A4656 A4657 A48777 Lfre T1 B1'], + + ['318654', + '1', + ' A647 A7392 M56305 M54672 Lfre T1 B1'], + + ['319256', + '1', + ' D5516 A18186 M3456 Lfre T1 B1'], + + ['319734', + '1', + ' D813 A736 A132637 Lfre T1 B1'], + + ['319968', + '1', + ' D843 A92625 Lfre T1 B1 G57 S27 YCANAL YTRA'], + + ['320854', + '1', + ' D55146 A101495 A101496 M23350 Lfre T1 B1'], + + ['320860', + '1', + ' D577 A88356 A88357 M56724 Lfre T1 B1'], + + ['321596', + '2', + ' T2 B1'], + + ['387878', + '10', + ' T10 B1'], + + ['336955', + '3', + ' P85 A20299 A139071 A139072 A139073 A139074 A38267 A2801 A5780 A22402 A131183 A11207 A26255 A139075 A30984 A18834 A110266 A3052 A139076 A131184 A949 A107 A5750 A152 A46330 A5297 A30983 A139077 A134436 A139078 A139079 A117350 M150 M26 T3 B1'], + + ['337510', + '3', + ' P811 A5055 A136653 M6363 T3 B1 S4 S18 S8 YBUS Y7MA YCANAL YMAG YROU YVOI'], + + ['338660', + '3', + ' P85 A604 T3 B1'], + + ['338902', + '3', + ' P593 A6752 Lfre T3 B1'], + + ['339282', + '3', + ' A5458 A100741 T3 B1 S27 YCANAL'], + + ['339729', + '3', + ' P593 A6752 Lfre T3 B1 S26 YCANAL'], + + ['339908', + '3', + ' A478 T3 B1 S27 Y7MA'], + + ['339985', + '3', + ' A1379 A107 A5208 T3 B1'], + + ['341203', + '3', + ' P99121 A144393 M15942 M5891 T3 B1'], + + ['341277', + '3', + ' A56618 A57087 A136057 A144442 T3 B1'], + + ['342043', + '3', + ' P85 A11935 T3 B1'], + + ['342143', + '3', + ' P85 A142566 M2974 T3 B1'], + + ['342637', + '3', + ' P85 A146143 M145 T3 B1 S4 YCANAL'], + + ['343093', + '3', + ' P518 A113440 M1277 M2596 Lfre T3 B1'], + + ['344210', + '3', + ' P273 A75526 T3 B1 S4 Y7MA'], + + ['344334', + '3', + ' P91423 A76134 M10688 T3 B1'], + + ['362091', + '1', + ' A31326 A16515 Lfre T1 B1 S8 YCANAL 2030-12'], + + ['344503', + '3', + ' P518 A556 A5242 A37135 M2776 T3 B1 S26 S4 YVOI YTRA YCANAL YMAG'], + + ['344755', + '3', + ' P566 A604 T3 B1'], + + ['345466', + '3', + ' P593 A6752 M1541 T3 B1 S8 YROU'], + + ['345471', + '3', + ' P593 A6752 M1541 Lfre T3 B1 S8 YROU'], + + ['345472', + '3', + ' P593 A6752 M1541 Lfre T3 B1 S8 YROU'], + + ['346411', + '3', + ' A4573 A104609 A28146 A26960 A6664 A246 M16396 T3 B1'], + + ['366783', + '1', + ' D64165 M7073 Lfre T1 B1 S1 Y7MA 2030-12'], + + ['346994', + '3', + ' P811 A2487 M1550 T3 B1'], + + ['348208', + '3', + ' P165 A149890 A7606 A136334 A151873 A151874 A151875 A151876 A151877 A131165 A151878 A130303 A66821 A151879 A139019 A151880 A151881 A141774 A29610 A151882 A107402 A3270 A28396 A16924 A4690 A8466 A10475 A24028 A141840 A103391 A54269 A136305 A151883 A109058 A134578 A8464 A68280 A151884 A151885 A151886 A364 A136832 A151887 A136677 A50934 A136333 A151888 A65461 A136684 A151889 M1805 M4047 T3 B1'], + + ['348236', + '3', + ' P541 A104989 A15043 A137696 A140007 A151955 A141067 A151956 A151957 A51257 A123642 A151958 A151959 A26922 A90355 A37251 A151960 A151961 A151962 A151963 A151964 A134701 A151965 A151966 A19984 A29344 A135737 A140443 A4934 A27177 A151967 A73054 A151968 A137175 A151969 A151970 M208 T3 B1 S4 YCANAL'], + + ['348257', + '3', + ' P85 A5137 M100 M896 T3 B1 S27 YROU'], + + ['348658', + '3', + ' P139 A151903 M1996 T3 B1 S4 Y7MA'], + + ['349860', + '3', + ' P811 A104313 T3 B1 S8 YCANAL'], + + ['351033', + '3', + ' P81 A13899 M1550 T3 B1'], + + ['351100', + '3', + ' P334 A18808 A36323 A154841 M11049 T3 B1'], + + ['351917', + '1', + ' A86735 A11481 Lfre T1 B1'], + + ['352670', + '3', + ' P85 A146143 T3 B1 S27 YROU'], + + ['352916', + '3', + ' P593 A6752 Lfre T3 B1 S26 S4 YVOI YAIM YCANAL Y7MA'], + + ['354475', + '3', + ' P593 A9307 M2776 T3 B1'], + + ['354492', + '3', + ' P811 A2828 A2829 A14843 M318 M1277 M10395 T3 B1 S26 YVOI'], + + ['354705', + '3', + ' P81 A40436 Lfre T3 B1'], + + ['354873', + '3', + ' A135230 T3 B1'] + ]; + } +} \ No newline at end of file diff --git a/tests/library/Class/NewsletterMailingTest.php b/tests/library/Class/NewsletterMailingTest.php index 52b49cee6d3abfa2c06c93b43ae8a4fde3e0554f..2940ca12f59aa8c7bfcd043fdd39e0030d9ac4e8 100644 --- a/tests/library/Class/NewsletterMailingTest.php +++ b/tests/library/Class/NewsletterMailingTest.php @@ -444,12 +444,12 @@ class NewsletterMailingConcertsPanierHtmlTest extends NewsletterMailingTestCase /** @see http://forge.afi-sa.fr/issues/18661 */ class NewsletterMailingDedupTest extends ModelTestCase { protected + $_storm_default_to_volatile = true, $_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); @@ -495,12 +495,6 @@ class NewsletterMailingDedupTest extends ModelTestCase { } - public function tearDown() { - Storm_Model_Loader::defaultToDb(); - parent::tearDown(); - } - - /** @test */ public function procyonInOnePageShouldNotReceiveTwoMails() { $this->expectUserFetchAndDo( @@ -554,4 +548,109 @@ class NewsletterMailingDedupTest extends ModelTestCase { ->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 +} + + + +/** @see http://forge.afi-sa.fr/issues/29441 */ +class NewsletterMailingRecordAbsoluteUrlTest extends ModelTestCase { + protected + $_text_content = '', + $_html_content = '', + $_xpath, + $_base_url = ''; + + + public function setUp() { + parent::setUp(); + + $this->_xpath = new Storm_Test_XPath(); + $this->_base_url = 'http://' . $_SERVER['HTTP_HOST'] . BASE_URL; + + $time_source = new TimeSourceForTest('2014-05-23 14:30:00'); + Class_Newsletter::setTimeSource($time_source); + + $this->alcor = $this->fixture('Class_Users', + ['id' => 120, + 'login' => 'alc', + 'password' => 'or', + 'mail' => 'procyon@centre-de-recherche.fr']); + + $this->_letter = $this->fixture('Class_Newsletter', + ['id' => 23, + 'titre' => 'Alerte vega', + 'id_panier' => 1, + 'nb_notices' => 50, + 'id_catalogue' => 0, + 'expediteur' => 'professeur@centre-de-recherche.fr', + 'contenu' => 'Golgoth aperçu azimut 234.53', + 'last_distribution_date' => '', + 'users' => [$this->alcor]]); + + $this->onLoaderOfModel('Class_Notice') + ->whenCalled('getNoticesFromPreferences') + ->answers([$this->fixture('Class_Notice', + ['id' => 12, + 'titre_principal' => 'UFO robot']), + + $this->fixture('Class_Notice', + ['id' => 14, + 'titre_principal' => 'To test is to doubt', + 'url_vignette' => 'http://server.com/test.png'])]); + + $mail = $this->_letter + ->newMailFromTemplate($this->_letter->newTemplate(), $this->alcor); + + $this->_text_content = $mail->getBodyText(true); + $this->_html_content = quoted_printable_decode($mail->getBodyHtml(true)); + } + + + public function recordIds() { + return [[12], [14]]; + } + + + /** + * @test + * @dataProvider recordIds + */ + public function textShouldContainRecordUrl($record_id) { + $this->assertContains($this->_recordUrlOf($record_id), $this->_text_content); + } + + + /** + * @test + * @dataProvider recordIds + */ + public function htmlShouldContainRecordLink($record_id) { + $this->_xpath->assertXPath($this->_html_content, + '//a[@href="' . $this->_recordUrlOf($record_id) . '"]'); + } + + + /** @test */ + public function htmlShouldNotContainUfoRobotThumb() { + $this->_xpath->assertNotXPath($this->_html_content, + '//a[@href="' . $this->_recordUrlOf(12) . '"]//img'); + } + + + /** @test */ + public function htmlShouldContainsDoubtThumb() { + $this->_xpath->assertXPath($this->_html_content, + '//a[@href="' . $this->_recordUrlOf(14) . '"]//img[@src="http://server.com/test.png"]', + $this->_html_content); + } + + + protected function _recordUrlOf($id) { + return $this->_basedUrl('/recherche/viewnotice/id/' . $id); + } + + + protected function _basedUrl($url) { + return $this->_base_url . $url; + } +} diff --git a/tests/library/Class/WebService/SIGB/KohaTest.php b/tests/library/Class/WebService/SIGB/KohaTest.php index a390e25ec8809b4ad9403b1aaf536358597e6f49..589fb5ca08e3a8fa8c6e1c33480e44b8855712d6 100644 --- a/tests/library/Class/WebService/SIGB/KohaTest.php +++ b/tests/library/Class/WebService/SIGB/KohaTest.php @@ -740,7 +740,7 @@ class KohaOperationsTest extends KohaTestCase { } - /** @test */ + /** @test */ function prolongerPretWithKohaCG55VersionShouldReturnErrorIfTooMany() { $this->mock_web_client ->whenCalled('open_url') @@ -945,7 +945,7 @@ class KohaServiceGetNoticeHarryPotterWithRestrictionTest $this->mock_web_client = $this->mock(); $this->service = Class_WebService_SIGB_Koha::getService(['url_serveur' => 'http://cat-aficg55.biblibre.com/cgi-bin/koha/ilsdi.pl', - 'Interdire_reservation_doc_dispo' => '1']); + 'Interdire_reservation_doc_dispo' => '1']); $this->mock_web_client ->whenCalled('open_url') @@ -976,6 +976,7 @@ class KohaServiceGetNoticeHarryPotterWithRestrictionTest } + class KohaServiceGetNoticeJardinEnfantWithItemOnTopTest extends KohaTestCase { public function setUp() { parent::setUp(); @@ -994,3 +995,32 @@ class KohaServiceGetNoticeJardinEnfantWithItemOnTopTest extends KohaTestCase { $this->assertEquals(1, count($this->jardins_enfant->getExemplaires())); } } + + + +class KohaServicePatroninfoReaderWithNoLibTest extends KohaTestCase { + public function setUp() { + parent::setUp(); + $this->mock_web_client + ->whenCalled('open_url') + ->with('http://cat-aficg55.biblibre.com/cgi-bin/koha/ilsdi.pl?service=LookupPatron&id=012345&id_type=cardnumber') + ->answers(KohaFixtures::xmlLookupPatronLaure()); + + $this->mock_web_client + ->whenCalled('open_url') + ->with('http://cat-aficg55.biblibre.com/cgi-bin/koha/ilsdi.pl?service=GetPatronInfo&patron_id=572&show_contact=0&show_loans=1&show_holds=1') + ->answers(KohaFixtures::xmlGetPatronInfoLaure()); + + $this->laurent = $this->service + ->getEmprunteur(Class_Users::newInstance() + ->setLogin('lafond') + ->setPassword('afi') + ->setIdabon('012345')); + } + + + /** @test */ + public function laurendShouldNotHaveLibrary() { + $this->assertEmpty($this->laurent->getLibraryLabel()); + } +} \ No newline at end of file diff --git a/library/ZendAfi/Form/Admin/CustomFields/CustomFieldMeta.php b/tests/library/ZendAfi/MailTest.php similarity index 53% rename from library/ZendAfi/Form/Admin/CustomFields/CustomFieldMeta.php rename to tests/library/ZendAfi/MailTest.php index 1b8dd83f62492c37e32176d6c3fce1f11b2cc697..c40c6d923758855dd2c63e57eb3d2970b3a05250 100644 --- a/library/ZendAfi/Form/Admin/CustomFields/CustomFieldMeta.php +++ b/tests/library/ZendAfi/MailTest.php @@ -20,14 +20,34 @@ */ -class ZendAfi_Form_Admin_CustomFields_CustomFieldMeta extends ZendAfi_Form_Admin_CustomFields { - public static function newWith($custom_field_meta_array=[], $custom_form=null) { - $form = new self(); - $form - ->populate($custom_field_meta_array) - ->addDisplayGroup(['label', 'field_type'],'base',['legend' => '']) - ->addDisplayGroup(['options_list'], 'options', ['legend' => $form->_('Options')]); - return $form; +class ZendAfi_MailTest extends ModelTestCase { + + /** @test */ + public function bluewinDotChShouldBeValid() { + $this->assertTrue((new Zend_Validate_EmailAddress()) + ->isValid('user.name@bluewin.ch')); + } + + /** + * @test + * @see http://forge.afi-sa.fr/issues/29345 + */ + public function mailTerminatedByPlusShouldNotBeValid() { + $mail = (new ZendAfi_Mail()) + ->addTo('username@creutzwaldenergies-services.fr+'); + + $this->assertEmpty($mail->getRecipients()); + } + + + /** + * @test + * @see http://forge.afi-sa.fr/issues/29345 + */ + public function mailNotTerminatedByPlusShouldBeValid() { + $mail = (new ZendAfi_Mail()) + ->addTo('username@creutzwaldenergies-services.fr'); + + $this->assertNotEmpty($mail->getRecipients()); } -} -?> \ No newline at end of file +} \ No newline at end of file diff --git a/tests/library/ZendAfi/View/Helper/Admin/TagSelectionChampsTest.php b/tests/library/ZendAfi/View/Helper/Admin/TagSelectionChampsTest.php index 1f59810d460c08d642ce13c871ef03df834232fb..0d8286d285f6c778c49fad954b2d21c6a1374564 100644 --- a/tests/library/ZendAfi/View/Helper/Admin/TagSelectionChampsTest.php +++ b/tests/library/ZendAfi/View/Helper/Admin/TagSelectionChampsTest.php @@ -29,45 +29,39 @@ class ZendAfi_View_Helper_Admin_TagSelectionChampsTest extends ViewHelperTestCas Class_Codification::resetInstance(); $this->_helper = new ZendAfi_View_Helper_Admin_TagSelectionChamps(); $this->_helper->setView(new ZendAfi_Controller_Action_Helper_View()); - $this->fixture('Class_CodifThesaurus', ['id'=>5, - 'id_thesaurus'=>'PUBL', - 'libelle' => 'Themes ', - 'libelle_facette' => 'Public Electre']); - $this->_result = $this->_helper->TagSelectionChamps("facettes", "AHPUBLYZ"); + $this->fixture('Class_CodifThesaurus', + ['id' => 5, + 'id_thesaurus' => 'PUBL', + 'libelle' => 'Themes ', + 'libelle_facette' => 'Public Electre']); - $this->_html=$this->_result["bloc_saisie"]; + $this->_html = $this->_helper->TagSelectionChamps("facettes", "A;HPUBL;Y;Z"); } /** @test */ - public function linkToFacettePShouldBePresent() { - $this->assertXPath($this->_html, - '//div[@id="facettes_box_P"]'); + public function facetPShouldBePresent() { + $this->assertXPath($this->_html, '//li[@data-code="P"]'); } /** @test */ - public function linkToFacetteHPUBLShouldBePresent() { - $this->assertXPath($this->_html, - '//div[@id="facettes_box_HPUBL"]', - $this->_html); + public function facetHPUBLShouldBePresent() { + $this->assertXPath($this->_html, '//li[@data-code="HPUBL"]'); } /** @test */ - public function linkToFacetteYShouldBePresent() { - $this->assertXPath($this->_html, - '//div[@id="facettes_box_Y"]'); + public function facetYShouldBePresent() { + $this->assertXPath($this->_html, '//li[@data-code="Y"]'); } /** @test */ - public function linkToNouveauteShouldBePresent() { - $this->_result = $this->_helper->TagSelectionChamps('liste', ''); - $this->_html=$this->_result['bloc_saisie']; - $this->assertXPath($this->_html, '//div[@id="liste_box_9"]', $this->_html); + public function facetNouveauteShouldBePresent() { + $this->_html = $this->_helper->TagSelectionChamps('liste', ''); + $this->assertXPath($this->_html, '//li[@data-code="9"]'); } -} -?> \ No newline at end of file +} \ No newline at end of file diff --git a/tests/library/ZendAfi/View/Helper/FacettesTest.php b/tests/library/ZendAfi/View/Helper/FacettesTest.php index 41046ab17229e6459e25a329bf51e07966a47d9f..ca2dbf374f92bd92a4100441bf4d2f421555d0fd 100644 --- a/tests/library/ZendAfi/View/Helper/FacettesTest.php +++ b/tests/library/ZendAfi/View/Helper/FacettesTest.php @@ -39,8 +39,7 @@ abstract class ZendAfi_View_Helper_FacettesTestCase extends ViewHelperTestCase { $this->fixture('Class_CodifThesaurus', ['id' => 1, 'id_thesaurus' => 'GENR0001', - 'libelle' => 'Electron libre.' - ]); + 'libelle' => 'Electron libre.']); $this->fixture('Class_CodifAnnexe', ['id' => 1, @@ -49,45 +48,44 @@ abstract class ZendAfi_View_Helper_FacettesTestCase extends ViewHelperTestCase { $this->fixture('Class_CodifAuteur', ['id' => '4656', - 'libelle' => 'Caradog Prichard', - ]); + 'libelle' => 'Caradog Prichard',]); + $this->fixture('Class_CodifAuteur', ['id' => '4657', - 'libelle' => 'Louis-Jean Calvet', - ]); + 'libelle' => 'Louis-Jean Calvet']); + $this->fixture('Class_CodifAuteur', ['id' => '6752', - 'libelle' => 'Maurice Henry', - ]); + 'libelle' => 'Maurice Henry']); + $this->fixture('Class_CodifAuteur', ['id' => '63246', - 'libelle' => 'François Chattot', - ]); + 'libelle' => 'François Chattot']); + $this->fixture('Class_CodifAuteur', ['id' => '12309', - 'libelle' => 'Olivier Richard', - ]); + 'libelle' => 'Olivier Richard']); + $this->fixture('Class_CodifAuteur', ['id' => '446', - 'libelle' => 'Clare Brown', - ]); + 'libelle' => 'Clare Brown']); + $this->fixture('Class_CodifAuteur', ['id' => '800', - 'libelle' => 'Karine Delobbe', - ]); + 'libelle' => 'Karine Delobbe']); + $this->fixture('Class_CodifAuteur', ['id' => '12168', - 'libelle' => 'Mehdi Lallaoui', - ]); + 'libelle' => 'Mehdi Lallaoui']); + $this->fixture('Class_CodifAuteur', ['id' => '9875', - 'libelle' => 'Régine Azria', - ]); - + 'libelle' => 'Régine Azria']); $this->_html = $this->_helper ->facettes( - ['M' => ['M6567' => 22], + ['T' => ['T1' => 34], + 'M' => ['M6567' => 22], 'HGENR' => ['HGENR0001' => 1], 'Y' => ['YMDE' => 1], 'A' => ['A4656' => 58, @@ -100,7 +98,7 @@ abstract class ZendAfi_View_Helper_FacettesTestCase extends ViewHelperTestCase { 'A12168' => 6, 'A9875' => 5]], - ['facettes_codes' => 'YAMHGENR', + ['facettes_codes' => 'Y;A;M;HGENR', 'facettes_nombre' => 2], new Class_CriteresRecherche(['expressionRecherche' => '*'])); @@ -120,6 +118,15 @@ class ZendAfi_View_Helper_FacettesRestrainedTest extends ZendAfi_View_Helper_Fac } + /** @test */ + public function docTypeShouldBePresent() { + $this + ->assertXPathContentContains($this->_html, + '//li[@class="facette_titre"]', + 'Type de document'); + } + + /** @test */ public function linkForFacetPommeShouldBePresent() { $this->assertXPathContentContains($this->_html, @@ -131,7 +138,7 @@ class ZendAfi_View_Helper_FacettesRestrainedTest extends ZendAfi_View_Helper_Fac /** @test */ public function linkForFacetMaisonEnvironnementShouldBePresentAtSecondPosition() { $this->assertXPathContentContains($this->_html, - '//div[@class="facette"]/ul/li[1]//ul//a[@class="facette"][contains(@href, "/recherche/simple/facette/YMDE")]', + '//div[@class="facette"]/ul/li[2]//ul//a[@class="facette"][contains(@href, "/recherche/simple/facette/YMDE")]', 'Maison environnement'); } @@ -147,7 +154,7 @@ class ZendAfi_View_Helper_FacettesRestrainedTest extends ZendAfi_View_Helper_Fac /** @test */ public function linkForFacetMauriceHenryShouldBePresentInDisplayMoreFacetsAtThirdPosition() { $this->assertXPathContentContains($this->_html, - '//div[@class="facette"]/ul/li[2]//ul[@id="A_msg"]//a[@class="facette"][contains(@href, "/recherche/simple/facette/A6752")]', + '//div[@class="facette"]/ul/li[3]//ul[@id="A_msg"]//a[@class="facette"][contains(@href, "/recherche/simple/facette/A6752")]', 'Maurice Henry'); }