Changeset 57055 in spip-zone


Ignore:
Timestamp:
Jan 13, 2012, 5:34:14 PM (8 years ago)
Author:
marcimat@…
Message:

boucle (PMB:EDITEURS) et (PMB:NOTICES){id_editeur}
+ utilisation de la fonction d'abstraction lorsque possible
+ nettoyage de code mort.

Location:
_plugins_/spip-pmb/trunk
Files:
1 deleted
7 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/spip-pmb/trunk/content/pmb_editeur.html

    r56889 r57055  
    1 [(#SET{tab_resultat,[(#ENV{id}|pmb_editeur_extraire{#ENV{debut,0},#ENV{fin,5}})]})]
    2 
     1<BOUCLE_editeur(PMB:EDITEURS){id_editeur}>
    32[(#REM) Fil d'Ariane ]
    43<p id="hierarchie"><a href="#URL_SITE_SPIP/"><:accueil_site:></a>
    54&gt; <:pmb:editeurs:>
    6 &gt; <strong class="on">[(#GET{tab_resultat/publisher_name}|couper{80})]</strong></p>
     5&gt; <strong class="on">[(#NOM|couper{80})]</strong></p>
    76
    87
    98<div class="cartouche">
    10         <h1 class="h1">#GET{tab_resultat/publisher_name}|couper{80}</h1>
     9        <h1 class="h1">#NOM</h1>
    1110</div>
    1211
    13 <INCLURE{fond=inclure/inc-pmb_editeur}{env}{tab_resultat=#GET{tab_resultat}}>
     12<INCLURE{fond=inclure/inc-pmb_editeur}{env}{id_editeur}>
     13</BOUCLE_editeur>
  • _plugins_/spip-pmb/trunk/head/pmb_editeur.html

    r56895 r57055  
    1 <title>[(#ENV{tab_resultat/publisher_name}|textebrut) - ][(#NOM_SITE_SPIP|textebrut)][ - (#SLOGAN_SITE_SPIP|typo|textebrut)]</title>[
    2 <meta name="description" content="(#ENV{tab_resultat/publisher_comment}|attribut_html)" />]
     1<BOUCLE_editeur(PMB:EDITEURS){id_editeur}>
     2<title>[(#NOM|textebrut) - ][(#NOM_SITE_SPIP|textebrut)][ - (#SLOGAN_SITE_SPIP|typo|textebrut)]</title>[
     3<meta name="description" content="(#COMMENTAIRE|couper{300}|attribut_html)" />]
     4</BOUCLE_editeur>
  • _plugins_/spip-pmb/trunk/inclure/inc-pmb_editeur.html

    r56967 r57055  
     1<BOUCLE_editeur(PMB:EDITEURS){id_editeur}>
    12<div class="corps-conteneur surlignable">
    23        <div class="pmb-ouvrage-infos">
    3        
    4         <table class="spip pmb-tableau">
    5                   <tbody>
    6                  
    7                         [<tr><td><strong><:pmb:publisher_address1:></strong></td><td>(#ENV{tab_resultat/publisher_address1})</td></tr>]
    8                         [<tr><td><strong><:pmb:publisher_address2:></strong></td><td>(#ENV{tab_resultat/publisher_address2})</td></tr>]
    9                         [<tr><td><strong><:pmb:publisher_zipcode:></strong></td><td>(#ENV{tab_resultat/publisher_zipcode})</td></tr>]
    10                         [<tr><td><strong><:pmb:publisher_city:></strong></td><td>(#ENV{tab_resultat/publisher_city})</td></tr>]
    11                         [<tr><td><strong><:pmb:publisher_country:></strong></td><td>(#ENV{tab_resultat/publisher_country})</td></tr>]
    12                         [<tr><td><strong><:pmb:publisher_web:></strong></td><td><a class="spip_out" href="[(#ENV{tab_resultat/publisher_web})]">(#ENV{tab_resultat/publisher_web})</a></td></tr>]
    13                
    14                   </tbody>
    15           </table>
     4                <table class="spip pmb-tableau">
     5                        <tbody>
     6                                [<tr><td><strong><:pmb:publisher_address1:></strong></td><td>(#ADRESSE1)</td></tr>]
     7                                [<tr><td><strong><:pmb:publisher_address2:></strong></td><td>(#ADRESSE2})</td></tr>]
     8                                [<tr><td><strong><:pmb:publisher_zipcode:></strong></td><td>(#CODE_POSTAL)</td></tr>]
     9                                [<tr><td><strong><:pmb:publisher_city:></strong></td><td>(#VILLE)</td></tr>]
     10                                [<tr><td><strong><:pmb:publisher_country:></strong></td><td>(#PAYS)</td></tr>]
     11                                [<tr><td><strong><:pmb:publisher_web:></strong></td><td><a class="spip_out" href="#WEB">(#WEB)</a></td></tr>]
     12                        </tbody>
     13                </table>
    1614        </div>
    17         [<div class="texte entry-content">(#ENV{tab_resultat/publisher_comment}|ucfirst|paragrapher)</div>]
     15        [<div class="texte entry-content">(#COMMENTAIRE|paragrapher)</div>]
    1816</div>
    1917
    20 [(#INCLURE{fond=inclure/inc-recherche-ouvrage,env})]
     18[(#INCLURE{fond=inclure/inc-recherche-notices,env,id_editeur})]
     19</BOUCLE_editeur>
  • _plugins_/spip-pmb/trunk/inclure/inc-recherche-notices.html

    r57053 r57055  
    1111        <ul class="liste-items items">
    1212                <BOUCLE_liste_notices(PMB:NOTICES)
    13                         {id ?}{id_auteur ?}{id_collection ?}
     13                        {id ?}{id_auteur ?}{id_collection ?}{id_editeur ?}
    1414                        {pagination 5}>
    1515                                <INCLURE{fond=inclure/inc-notice-resume}{id}{surlignable=1}{compteur=#COMPTEUR_BOUCLE}>
  • _plugins_/spip-pmb/trunk/paquet.xml

    r57053 r57055  
    22        prefix="pmb"
    33        categorie="divers"
    4         version="1.113.0"
     4        version="1.114.0"
    55        etat="dev"
    66        compatibilite="[3.0.0-beta2;3.0.*]"
  • _plugins_/spip-pmb/trunk/pmb_fonctions.php

    r57054 r57055  
    3434
    3535
    36 /**
    37  * Depile un element de tableau et renvoie le tableau (pas l'element depile !)
    38  *
    39  * #SET{total,#GET{tableau/0/nb_resultat}}
    40  * #SET{tableau,#GET{tableau}|depile}
    41  * #SET{tableau,#GET{tableau}|depile{0}}
    42  *
    43  * @param array Tableau a depiler
    44  * @param string Eventuellement cle du tableau a enlever, sinon prend la premiere (array_shift)
    45  * @return array Tableau depossede d'une cle...
    46 **/
    47 function depile($tableau, $cle=null) {
    48         if (!is_array($tableau)) {
    49                 return array();
    50         }
    51         if (is_null($cle)) {
    52                 array_shift($tableau);
    53         } else {
    54                 if (!is_array($cle) and !is_object($cle)) {
    55                         unset($tableau[$cle]);
    56                 }
    57         }
    58         return $tableau;
    59 }
    60 
    61 
    62 
    6336
    6437/**
     
    9467}
    9568
    96 
    97 /**
    98  * Petite fonction d'aide pour recuperer d'une liste de tableaux
    99  * les valeurs compilees d'une cle de ces tableaux
    100  *
    101  * entree :
    102  *              tab[0][cle] = [n] (tableau...)
    103  *              tab[1][cle] = [n]
    104  *              tab[i][cle] = [n]
    105  *
    106  * sortie :
    107  *              tab[n] (merge de tous les tableaux [n])
    108  *
    109 **/
    110 function pmb_get_enfants($tableau, $cle) {
    111         $enfants = array();
    112         foreach ($tableau as $t) {
    113                 if (isset($t[$cle]) and is_array($t[$cle])) {
    114                         $enfants = array_merge($enfants, $t[$cle]);
    115                 }
    116         }
    117         return $enfants;
    118 }
    119 
    12069/**
    12170 * Retourne la liste de tous les rayonnages d'un lieu racine
     
    12978**/
    13079function pmb_extraire_sections_depuis_locations_ids($ids_location) {
    131         if (!is_array($ids_location)) {
    132                 return array();
    133         }
    134 
    135         // retrouver les infos en cache
    136         list($res, $wanted) = pmb_cacher('locations', $ids_location);
    137 
    138         // si on a tout trouve, on s'en va...
    139         // avec juste les sections !
    140         if (!count($wanted)) {
    141                 return pmb_get_enfants($res, 'sections');
    142         }
    143 
    144 
    145         try {
    146                 $ws = pmb_webservice();
    147                 foreach ($wanted as $id_location) {
    148                         $r = $ws->pmbesOPACGeneric_get_location_information_and_sections($id_location);
    149                         if ($r) {
    150                                
    151                                 //infos de la location
    152                                 //récupérer les infos sur la localisation parent
    153                                 $l = array();
    154                                 $l['id_location_parent'] = $r->location->location_id;
    155                                 $l['titre_parent'] = $r->location->location_caption;
    156                                 $l['sections'] = array();
    157                                
    158                                 if (count($r->sections)) {
    159                                         foreach ($r->sections as $section) {
    160                                                 // enlever l'image par defaut
    161                                                 $l['sections'][] = $s = pmb_extraire_section($section);
    162                                                 // on ne met pas en cacheces sections ci
    163                                                 // parce qu'on ne sait pas si elles ont ou non des enfants...
    164                                                 // on laissera pmb_extraire_sections_depuis_sections_ids decider...
    165                                                 #pmb_cacher('sections', $section->section_id, $s, true);
    166                                         }
    167                                 }
    168 
    169                                 $key = array_search($id_location, $ids_location);
    170                                 if ($key !== false) {
    171                                         $res[$key] = $l;
    172                                         pmb_cacher('locations', $id_location, $l, true);
    173                                 }
    174                         }
    175                 }
    176 
    177         } catch (Exception $e) {
    178                  echo 'Exception reçue (2) : ',  $e->getMessage(), "\n";
    179         }
    180 
    181         // on part avec juste les sections...
    182         // c'est a dire les locations enfants... hum...
     80        $res = pmb_extraire_abstract_ids('locations', $ids_location,
     81                'pmbesOPACGeneric_get_location_information_and_sections');
     82               
    18383        return pmb_get_enfants($res, 'sections');
     84}
     85
     86/**
     87 * Partie d'extraction d'une location
     88 * dans un resultat de requete a PMB
     89**/
     90function pmb_extraire_resultat_locations_id($ws_result) {
     91        $r = $ws_result;
     92
     93        //infos de la location
     94        //récupérer les infos sur la localisation parent
     95        $l = array();
     96        $l['id_location_parent'] = $r->location->location_id;
     97        $l['titre_parent']       = $r->location->location_caption;
     98        $l['sections'] = array();
     99
     100        if (count($r->sections)) {
     101                foreach ($r->sections as $section) {
     102                        // enlever l'image par defaut
     103                        $l['sections'][] = $s = pmb_extraire_section($section);
     104                        // on ne met pas en cacheces sections ci
     105                        // parce qu'on ne sait pas si elles ont ou non des enfants...
     106                        // on laissera pmb_extraire_sections_depuis_sections_ids decider...
     107                        #pmb_cacher('sections', $section->section_id, $s, true);
     108                }
     109        }
     110        return $l;
    184111}
    185112
     
    201128
    202129
    203 
    204130/**
    205131 * Retourne les rayonnages demandes...
     
    213139**/
    214140function pmb_extraire_sections_ids($ids_section) {
    215         if (!is_array($ids_section)) {
    216                 return array();
    217         }
    218 
    219         // retrouver les infos en cache
    220         list($res, $wanted) = pmb_cacher('sections', $ids_section);
    221 
    222         // si on a tout trouve, on s'en va...
    223         if (!count($wanted)) {
    224                 return $res;
    225         }
    226 
    227         try {
    228                 $ws = pmb_webservice();
    229                 foreach ($wanted as $id_section) {
    230                         // recherche de la section
    231                         $r = $ws->pmbesOPACGeneric_get_section_information($id_section);
    232                         if ($r) {
    233                                 $s = pmb_extraire_section($r);
    234                                 // recherche de sous sections
    235                                 $sections = $ws->pmbesOPACGeneric_list_sections($id_section);
    236                                 if (count($sections)) {
    237                                         foreach ($sections as $section) {
    238                                                 $s['sections'][] = $ss = pmb_extraire_section($section);
    239                                                 #pmb_cacher('sections_simples', $ss['id_section'], $ss, true);
    240                                         }
    241                                 }
    242 
    243                                 $key = array_search($id_section, $ids_section);
    244                                 if ($key !== false) {
    245                                         $res[$key] = $s;
    246                                         // on met en cache lorsqu'on est sur d'avoir calcule
    247                                         // d'eventuelles sous_sections.
    248                                         pmb_cacher('sections', $id_section, $s, true);
    249                                 }
    250                         }
    251                 }
    252 
    253         } catch (Exception $e) {
    254                  echo 'Exception reçue (2) : ',  $e->getMessage(), "\n";
    255         }
    256 
    257         return $res;
    258 }
    259 
     141        return pmb_extraire_abstract_ids('sections', $ids_section, 'pmbesOPACGeneric_get_section_information');
     142}
     143
     144/**
     145 * Partie d'extraction d'une section
     146 * dans un resultat de requete a PMB
     147**/
     148function pmb_extraire_resultat_sections_id($ws_result, $id_section) {
     149        $r = $ws_result;
     150        $s = pmb_extraire_section($r);
     151        // recherche de sous sections
     152        $ws = pmb_webservice();
     153        $sections = $ws->pmbesOPACGeneric_list_sections($id_section);
     154        if (count($sections)) {
     155                foreach ($sections as $section) {
     156                        $s['sections'][] = $ss = pmb_extraire_section($section);
     157                        #pmb_cacher('sections_simples', $ss['id_section'], $ss, true);
     158                }
     159        }
     160        return $s;
     161}
    260162
    261163
    262164/**
    263165 * Retourne des petites infos sur les sections issues de requetes a pmb
    264  *
    265  * @param
    266  * @return
    267166**/
    268167function pmb_extraire_section($section) {
     
    278177
    279178
     179/**
     180 * Recupere les informations de notices
     181 * dont les identifiants sont fournis par
     182 * le tableau $ids_notices.
     183 *
     184 * Chaque identifiant calcule est mis en cache
     185 * pour eviter des requetes intempestives
     186 * sur un hit de page et permettre d'utiliser plusieurs
     187 * fois une boucle telle que (PMB:NOTICES){id}
     188 * sans avoir besoin de tout recalculer.
     189 *
     190 * Notons que l'on ne peut recuperer que les champs "exportables"
     191 * dans PMB.
     192 *
     193 * @param array $ids_notices
     194 *              Tableau d'id de notices a recupereer
     195 * @return array
     196 *              Tableau contenant pour chaque notice la liste des champs
     197 *              que l'on a pu recuperer.
     198**/
     199function pmb_extraire_notices_ids($ids_notices) {
     200        if (!is_array($ids_notices)) {
     201                return array();
     202        }
     203
     204        // retrouver les infos en cache
     205        list($res, $wanted) = pmb_cacher('notices', $ids_notices);
     206
     207        // si on a tout trouve, on s'en va...
     208        if (!count($wanted)) {
     209                return $res;
     210        }
     211
     212        // sinon on complete ce qui manque en interrogeant PMB
     213        try {
     214                $ws = pmb_webservice();
     215                $r=$ws->pmbesNotices_fetchNoticeListArray($wanted,"utf-8",true,false);
     216                if (is_array($r)) {
     217                        $r = array_map('pmb_ws_parser_notice', $r);
     218
     219                        // on complete notre tableau de resultat
     220                        // avec nos trouvailles
     221                        foreach ($r as $notice) {
     222                                $key = array_search($notice['id'], $ids_notices);
     223                                if ($key !== false) {
     224                                        $res[$key] = $notice;
     225                                        pmb_cacher('notices', $notice['id'], $notice, true);
     226                                }
     227                        }
     228                }
     229        } catch (Exception $e) {
     230                echo 'Exception reçue (14) : ',  $e->getMessage(), "\n";
     231        }
     232        ksort($res);
     233        return $res;
     234}
     235
     236
     237
    280238
    281239
     
    284242 * dont les identifiants sont fournis par
    285243 * le tableau $ids_collection.
    286  *
    287  * Chaque identifiant calcule est mis en cache
    288  * pour eviter des requetes intempestives
    289  * sur un hit de page et permettre d'utiliser plusieurs
    290  * fois une boucle telle que (PMB:COLLECTIONS){id_collection}
    291  * sans avoir besoin de tout recalculer.
    292  *
     244 *
    293245 * @param array $ids_collection
    294246 *              Tableau d'id de collections a recupereer
     
    298250**/
    299251function pmb_extraire_collections_ids($ids_collection) {
    300         if (!is_array($ids_collection)) {
    301                 return array();
    302         }
    303        
    304         // retrouver les infos en cache
    305         list($res, $wanted) = pmb_cacher('collections', $ids_collection);
    306 
    307         // si on a tout trouve, on s'en va...
    308         if (!count($wanted)) {
    309                 return $res;
    310         }
    311 
    312         try {
    313                 $ws = pmb_webservice();
    314                 foreach ($wanted as $id_collection) {
    315                         // second parametre $id_session n'etait pas utilise... kesako ?
    316                         $r = $ws->pmbesCollections_get_collection_information_and_notices($id_collection);
    317                         if ($r) {
    318                                 //infos de la collection
    319                                 $c = array();
    320                                 $c['id_collection']  = $r->information->collection_id;
    321                                 $c['titre']          = $r->information->collection_name;
    322                                 $c['id_parent']      = $r->information->collection_parent;
    323                                 $c['issn']           = $r->information->collection_issn;
    324                                 $c['web']            = $r->information->collection_web;
    325                                 $c['ids_notice']     = $r->notice_ids;
    326                                
    327                                 $key = array_search($id_collection, $ids_collection);
    328                                 if ($key !== false) {
    329                                         $res[$key] = $c;
    330                                         pmb_cacher('collections', $id_collection, $c, true);
    331                                 }
    332                         }
    333                 }
    334 
    335         } catch (Exception $e) {
    336                  echo 'Exception reçue (7) : ',  $e->getMessage(), "\n";
    337         }
    338 
    339         return $res;
    340 }
    341 
    342 
    343 
    344 function pmb_collection_extraire($id_collection, $debut=0, $nbresult=5, $id_session=0) {
    345         $tableau_resultat = Array();
    346        
    347         try {
    348                 $ws = pmb_webservice();
    349                 $result = $ws->pmbesCollections_get_collection_information_and_notices($id_collection,$id_session);
    350                 if ($result) {
    351                         $tableau_resultat['collection_id']     = $result->information->collection_id;
    352                         $tableau_resultat['collection_name']   = $result->information->collection_name;
    353                         $tableau_resultat['collection_parent'] = $result->information->collection_parent;
    354                         $tableau_resultat['collection_issn']   = $result->information->collection_issn;
    355                         $tableau_resultat['collection_web']    = $result->information->collection_web;
    356                         $tableau_resultat['notice_ids']        = Array();
    357 
    358                         pmb_extraire_resultats($result, $tableau_resultat, $debut, $nbresult);
    359                 }
    360        
    361         } catch (Exception $e) {
    362                  echo 'Exception reçue (5) : ',  $e->getMessage(), "\n";
    363         }
    364         return $tableau_resultat;
    365 }
    366 
    367 
    368 /**
    369  * Calculer le total des elements
    370  * Extraire la pagination
    371  * Et calculer les valeurs des resultats
    372  *
    373  * @param
    374  * @return
    375 **/
    376 function pmb_extraire_resultats($result, &$tableau_resultat, $debut, $nbresult) {
    377         $liste_notices = Array();
    378         $cpt=0;
    379         if (is_array($result->notice_ids)) {
    380                 $cpt = count($result->notice_ids);
    381                 $liste_notices = array_slice($result->notice_ids, $debut, $nbresult);
    382         }
    383         $tableau_resultat['notice_ids'] = pmb_extraire_notices_ids($liste_notices);
    384         array_unshift($tableau_resultat['notice_ids'], array('nb_resultats' => $cpt));
    385         #pmb_remettre_id_dans_resultats($tableau_resultat, $liste_notices);
    386 }
     252        return pmb_extraire_abstract_ids('collections', $ids_collection, 'pmbesCollections_get_collection_information_and_notices');
     253}
     254
     255/**
     256 * Partie d'extraction d'une collection
     257 * dans un resultat de requete a PMB
     258**/
     259function pmb_extraire_resultat_collections_id($ws_result) {
     260        $r = $ws_result;
     261        //infos de la collection
     262        $c = array();
     263        $c['id_collection']  = $r->information->collection_id;
     264        $c['titre']          = $r->information->collection_name;
     265        $c['id_parent']      = $r->information->collection_parent;
     266        $c['issn']           = $r->information->collection_issn;
     267        $c['web']            = $r->information->collection_web;
     268        $c['ids_notice']     = $r->notice_ids;
     269        return $c;
     270}
     271
     272
     273
     274
     275/**
     276 * Recupere les informations des editeurs
     277 * dont les identifiants sont fournis par
     278 * le tableau $ids_editeur.
     279 *
     280 * @param array $ids_editeur
     281 *              Tableau d'id des editeurs a recupereer
     282 * @return array
     283 *              Tableau contenant pour chaque editeur la liste des champs
     284 *              que l'on a pu recuperer.
     285**/
     286function pmb_extraire_editeurs_ids($ids_editeur) {
     287        return pmb_extraire_abstract_ids('editeurs', $ids_editeur, 'pmbesPublishers_get_publisher_information_and_notices');
     288}
     289
     290/**
     291 * Partie d'extraction d'un editeur
     292 * dans un resultat de requete a PMB
     293**/
     294function pmb_extraire_resultat_editeurs_id($ws_result) {
     295        $r = $ws_result;
     296        $e = array();
     297        //infos de l'editeur
     298        $e['id_editeur']   = $r->information->publisher_id;
     299        $e['nom']          = $r->information->publisher_name;
     300        $e['adresse1']     = $r->information->publisher_address1;
     301        $e['adresse2']     = $r->information->publisher_address2;
     302        $e['code_postal']  = $r->information->publisher_zipcode;
     303        $e['ville']        = $r->information->publisher_city;
     304        $e['pays']         = $r->information->publisher_country;
     305        $e['web']          = $r->information->publisher_web;
     306        $e['commentaire']  = $r->information->publisher_comment;
     307        $e['ids_notice']   = $r->notice_ids;
     308        return $e;
     309}
     310
     311
    387312
    388313/**
     
    400325
    401326
    402 function pmb_editeur_extraire($id_editeur, $debut=0, $nbresult=5, $id_session=0) {
    403         $tableau_resultat = Array();
    404 
    405         try {
    406                 $ws = pmb_webservice();
    407                 $result = $ws->pmbesPublishers_get_publisher_information_and_notices($id_editeur,$id_session);
    408                 if ($result) {
    409                         $tableau_resultat['publisher_id']       = $result->information->publisher_id;
    410                         $tableau_resultat['publisher_name']     = $result->information->publisher_name;
    411                         $tableau_resultat['publisher_address1'] = $result->information->publisher_address1;
    412                         $tableau_resultat['publisher_address2'] = $result->information->publisher_address2;
    413                         $tableau_resultat['publisher_zipcode']  = $result->information->publisher_zipcode;
    414                         $tableau_resultat['publisher_city']     = $result->information->publisher_city;
    415                         $tableau_resultat['publisher_country']  = $result->information->publisher_country;
    416                         $tableau_resultat['publisher_web']      = $result->information->publisher_web;
    417                         $tableau_resultat['publisher_comment']  = $result->information->publisher_comment;
    418                         $tableau_resultat['notice_ids'] = Array();
    419 
    420                         pmb_extraire_resultats($result, $tableau_resultat, $debut, $nbresult);
    421                 }
    422         }catch (Exception $e) {
    423                 echo 'Exception reçue (6) : ',  $e->getMessage(), "\n";
    424         }
    425         return $tableau_resultat;
    426 
    427 }
    428 
    429327
    430328/**
    431329 * Fonction d'abstraction pour mutualiser les
    432  * codes de selections en interrogeant PMB
    433  * et en mettant en cache les resultats,
    434  * identifiant par identifiant.
    435  *
     330 * codes de selections en interrogeant PMB.
     331
     332 * Chaque identifiant calcule (pour chaque objet) est mis en cache
     333 * pour eviter des requetes intempestives
     334 * sur un hit de page et permettre d'utiliser plusieurs
     335 * fois une boucle telle que (PMB:EDITEURS){id_editeur}
     336 * sans avoir besoin de tout recalculer.
     337 *
    436338 * @param string $objet
    437339 *              L'objet (pluriel) 'auteurs'
     
    477379                                        $extraire_fonction = 'pmb_extraire_resultat_' . $objet . '_id';
    478380                                }
    479                                 $infos = $extraire_fonction($r);
     381                                $infos = $extraire_fonction($r, $id_objet); // id_objet, aucasou
    480382                               
    481383                                $key = array_search($id_objet, $ids_objet);
     
    490392
    491393        return $res;
     394}
     395
     396
     397
     398
     399/**
     400 * Petite fonction d'aide pour recuperer d'une liste de tableaux
     401 * les valeurs compilees d'une cle de ces tableaux
     402 *
     403 * entree :
     404 *              tab[0][cle] = [n] (tableau...)
     405 *              tab[1][cle] = [n]
     406 *              tab[i][cle] = [n]
     407 *
     408 * sortie :
     409 *              tab[n] (merge de tous les tableaux [n])
     410 *
     411**/
     412function pmb_get_enfants($tableau, $cle) {
     413        $enfants = array();
     414        foreach ($tableau as $t) {
     415                if (isset($t[$cle]) and is_array($t[$cle])) {
     416                        $enfants = array_merge($enfants, $t[$cle]);
     417                }
     418        }
     419        return $enfants;
    492420}
    493421
     
    525453        $r = $ws_result;
    526454        $a = array();
    527         $a['id_auteur']                 = $r->information->author_id;
    528         $a['id_type_auteur']    = $r->information->author_type;
    529         $a['nom']                               = $r->information->author_name;
    530         $a['prenom']                    = $r->information->author_rejete;
     455        $a['id_auteur']       = $r->information->author_id;
     456        $a['id_type_auteur']  = $r->information->author_type;
     457        $a['nom']             = $r->information->author_name;
     458        $a['prenom']          = $r->information->author_rejete;
    531459        if ($r->information->author_rejete) {
    532460                $a['nomcomplet'] =  $a['prenom'].' '.$a['nom'];
     
    535463        }
    536464        // what's 'see' ?
    537         $a['id_voir']                   = $r->information->author_see;
    538         $a['date']                              = $r->information->author_date;
    539         $a['web']                               = $r->information->author_web;
    540         $a['commentaire']               = $r->information->author_comment;
    541         $a['lieu']                              = $r->information->author_lieu;
    542         $a['ville']                             = $r->information->author_ville;
    543         $a['pays']                              = $r->information->author_pays;
    544         $a['subdivision']               = $r->information->author_subdivision;
    545         $a['numero']                    = $r->information->author_numero;
    546         $a['ids_notice']                = $r->notice_ids;
     465        $a['id_voir']     = $r->information->author_see;
     466        $a['date']        = $r->information->author_date;
     467        $a['web']         = $r->information->author_web;
     468        $a['commentaire'] = $r->information->author_comment;
     469        $a['lieu']        = $r->information->author_lieu;
     470        $a['ville']       = $r->information->author_ville;
     471        $a['pays']        = $r->information->author_pays;
     472        $a['subdivision'] = $r->information->author_subdivision;
     473        $a['numero']      = $r->information->author_numero;
     474        $a['ids_notice']  = $r->notice_ids;
    547475        return $a;
    548476}
     
    570498function pmb_ids_notices_recherches($demande, &$nbTotal, $debut=0, $nombre=5, $pagination=false) {
    571499       
    572         $recherche   = $demande['recherche'];
    573         $id_section  = $demande['id_section'];
     500        $recherche          = $demande['recherche'];
     501        $id_section         = $demande['id_section'];
    574502        $id_section_parent  = $demande['id_section_parent'];
    575         $id_location = $demande['id_location'];
     503        $id_location        = $demande['id_location'];
    576504       
    577505        if ($id_section_parent) {
     
    698626
    699627
    700 
     628/**
     629 * Retourne la liste de toutes les options de recherche
     630 * (il semblerait !)
     631**/
    701632function pmb_recuperer_champs_recherche($langue=0) {
    702633        $tresultat = Array();
     
    998929}
    999930
    1000 /**
    1001  * Recupere les informations de notices
    1002  * dont les identifiants sont fournis par
    1003  * le tableau $ids_notices.
    1004  *
    1005  * Chaque identifiant calcule est mis en cache
    1006  * pour eviter des requetes intempestives
    1007  * sur un hit de page et permettre d'utiliser plusieurs
    1008  * fois une boucle telle que (PMB:NOTICES){id}
    1009  * sans avoir besoin de tout recalculer.
    1010  *
    1011  * Notons que l'on ne peut recuperer que les champs "exportables"
    1012  * dans PMB.
    1013  *
    1014  * @param array $ids_notices
    1015  *              Tableau d'id de notices a recupereer
    1016  * @return array
    1017  *              Tableau contenant pour chaque notice la liste des champs
    1018  *              que l'on a pu recuperer.
    1019 **/
    1020 function pmb_extraire_notices_ids($ids_notices) {
    1021         if (!is_array($ids_notices)) {
    1022                 return array();
    1023         }
    1024 
    1025         // retrouver les infos en cache
    1026         list($res, $wanted) = pmb_cacher('notices', $ids_notices);
    1027 
    1028         // si on a tout trouve, on s'en va...
    1029         if (!count($wanted)) {
    1030                 return $res;
    1031         }
    1032 
    1033         // sinon on complete ce qui manque en interrogeant PMB
    1034         try {
    1035                 $ws = pmb_webservice();
    1036                 $r=$ws->pmbesNotices_fetchNoticeListArray($wanted,"utf-8",true,false);
    1037                 if (is_array($r)) {
    1038                         $r = array_map('pmb_ws_parser_notice', $r);
    1039 
    1040                         // on complete notre tableau de resultat
    1041                         // avec nos trouvailles
    1042                         foreach ($r as $notice) {
    1043                                 $key = array_search($notice['id'], $ids_notices);
    1044                                 if ($key !== false) {
    1045                                         $res[$key] = $notice;
    1046                                         pmb_cacher('notices', $notice['id'], $notice, true);
    1047                                 }
    1048                         }
    1049                 }
    1050         } catch (Exception $e) {
    1051                 echo 'Exception reçue (14) : ',  $e->getMessage(), "\n";
    1052         }
    1053         ksort($res);
    1054         return $res;
    1055 }
     931
    1056932
    1057933
  • _plugins_/spip-pmb/trunk/public/pmb.php

    r57053 r57055  
    298298        }
    299299
    300         // id_auteur : trouver les notices d'un auteur
    301         if ($ids_auteur = pmb_critere_valeur($criteres, 'id_auteur')) {
    302                 $auteurs = pmb_extraire_auteurs_ids($ids_auteur);
    303                 if ($auteurs) {
    304                         $n = array();
    305                         foreach ($auteurs as $a) {
    306                                 $n = array_unique(array_merge($n, $a['ids_notice']));
    307                         }
    308                         $ids = pmb_intersect_ids($ids, $n);
    309                 }
    310                 unset($auteurs);
    311         }
    312 
    313 
     300        // id_auteur :     trouver les notices d'un auteur
    314301        // id_collection : trouver les notices d'une collection
    315         if ($ids_collection = pmb_critere_valeur($criteres, 'id_collection')) {
    316                 $collections = pmb_extraire_collections_ids($ids_collection);
    317                 if ($collections) {
    318                         $n = array();
    319                         foreach ($collections as $c) {
    320                                 $n = array_unique(array_merge($n, $c['ids_notice']));
    321                         }
    322                         $ids = pmb_intersect_ids($ids, $n);
    323                 }
    324                 unset($collections);
    325         }
    326 
     302        // id_editeur :    trouver les notices d'un editeur
     303        foreach (array(
     304                'auteurs' => 'id_auteur',
     305                'collections' => 'id_collection',
     306                'editeurs' => 'id_editeur') as $objet => $_id_objet)
     307        {
     308                if ($ids_objet = pmb_critere_valeur($criteres, $_id_objet)) {
     309                        $pmb_extraire_objet_ids = 'pmb_extraire_' . $objet . '_ids';
     310                        $objets = $pmb_extraire_objet_ids($ids_objet);
     311                        if ($objets) {
     312                                $n = array();
     313                                foreach ($objets as $o) {
     314                                        $n = array_unique(array_merge($n, $o['ids_notice']));
     315                                }
     316                                $ids = pmb_intersect_ids($ids, $n);
     317                        }
     318                        unset($objets);
     319                }
     320        }
    327321
    328322
     
    479473
    480474
     475/**
     476 *
     477 * Selectionne une ou plusieurs editeurs PMB
     478 * et retourne un tableau des elements parsees
     479 *
     480 * Un editeur
     481 * (PMB:EDITEURS) {id_editeur}
     482 *
     483 * Des editeurs
     484 * (PMB:EDITEURS) {liste #TABLEAU_IDS_EDITEUR}
     485 *
     486 */
     487function inc_pmb_editeurs_select_dist(&$command, $iterateur) {
     488        $criteres = $command['where'];
     489       
     490        // on peut fournir une liste l'id
     491        // ou egalement un critere id=x
     492        $ids = array();
     493
     494        // depuis une liste
     495        if (is_array($command['liste']) and count($command['liste'])) {
     496                $ids = $command['liste'];
     497        }
     498
     499        // depuis un critere id_collection=x ou {id_editeur?}
     500        if ($id = pmb_critere_valeur($criteres, 'id_editeur')) {
     501                $ids = pmb_intersect_ids($ids, $id);
     502        }
     503
     504        // retourner les collections selectionnees
     505        $res = pmb_extraire_editeurs_ids($ids);
     506
     507        return $res;
     508}
     509
     510
     511
    481512
    482513
     
    771802
    772803/**
    773  * Balise #URL_PMB_AUTEUR et #URL_PMB_EDITEUR{18}
     804 * Balise #URL_PMB_AUTEUR et #URL_PMB_AUTEUR{18}
    774805**/
    775806function balise_URL_PMB_AUTEUR_dist($p) {
Note: See TracChangeset for help on using the changeset viewer.