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/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/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/cosmogramme/php/_init.php b/cosmogramme/php/_init.php index 704fff1475ef7f28000babf11950f8c16ce10a18..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"); 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/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/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/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/Notice.php b/library/Class/Notice.php index a5e435b7284be5f5895e871b469b49d2773587c2..6e205b6f4f1a2ad176a132168839ac186fe40e59 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); } 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/ZendAfi/Controller/Action.php b/library/ZendAfi/Controller/Action.php index 189bf0e2386c054b50f380fa40e0f01d09148c57..dc41c0ff701f6d1e4d74939dda63aebe286a6581 100644 --- a/library/ZendAfi/Controller/Action.php +++ b/library/ZendAfi/Controller/Action.php @@ -279,13 +279,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/CustomFieldMeta.php b/library/ZendAfi/Form/Admin/CustomFields/CustomFieldMeta.php deleted file mode 100644 index 1b8dd83f62492c37e32176d6c3fce1f11b2cc697..0000000000000000000000000000000000000000 --- a/library/ZendAfi/Form/Admin/CustomFields/CustomFieldMeta.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php -/** - * Copyright (c) 2012-2014, Agence Française Informatique (AFI). All rights reserved. - * - * BOKEH is free software; you can redistribute it and/or modify - * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by - * the Free Software Foundation. - * - * There are special exceptions to the terms and conditions of the AGPL as it - * is applied to this software (see README file). - * - * BOKEH is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU AFFERO GENERAL PUBLIC LICENSE for more details. - * - * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE - * along with BOKEH; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - -class 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; - } -} -?> \ 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/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/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/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/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 54b3fe8d12f8e160d8805ebb4a055bfde4cf153e..b66f6a40ac4355388f4696c10c5e64193c5cfb0d 100644 --- a/tests/application/modules/admin/controllers/CmsControllerTest.php +++ b/tests/application/modules/admin/controllers/CmsControllerTest.php @@ -2730,44 +2730,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 { @@ -2785,5 +2747,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/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/RechercheControllerTest.php b/tests/application/modules/opac/controllers/RechercheControllerTest.php index fe1139bb90839cac20e22d9cd4b762abc3318e93..564303cd6b68e4cbb1f4f75a40d1605488195cd7 100644 --- a/tests/application/modules/opac/controllers/RechercheControllerTest.php +++ b/tests/application/modules/opac/controllers/RechercheControllerTest.php @@ -146,6 +146,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); @@ -170,6 +171,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(); } 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/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'); }