Changeset 57054 in spip-zone


Ignore:
Timestamp:
Jan 13, 2012, 4:30:08 PM (8 years ago)
Author:
marcimat@…
Message:

Abstrayons un peu plus les fonctions d'interrogation à PMB pour mutualiser du code...

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/spip-pmb/trunk/pmb_fonctions.php

    r57053 r57054  
    428428
    429429
     430/**
     431 * 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 *
     436 * @param string $objet
     437 *              L'objet (pluriel) 'auteurs'
     438 *              necessite une fonction pmb_extraire_resultat_$objet_id()
     439 *              soit donc ici pmb_extraire_resultat_auteur_id()
     440 *
     441 * @param array $ids_objets
     442 *              Les ids a obtenir les infos
     443 *
     444 * @param string $ws_methode
     445 *              Methode la classe de webservice de PMB a interroger
     446 *              pour obtenir les resultats
     447 *
     448 * @param string $extraire_fonction
     449 *              Fonction pour parser chaque resultat obtenu
     450 *              Par defaut : pmb_extraire_resultat_{$objet}_id
     451 *
     452 * @return array
     453 *              Un tableau cle/valeur par element touve
     454 *
     455**/
     456function pmb_extraire_abstract_ids($objet, $ids_objet, $ws_methode, $extraire_fonction='') {
     457        if (!is_array($ids_objet)) {
     458                return array();
     459        }
     460       
     461        // retrouver les infos en cache
     462        list($res, $wanted) = pmb_cacher($objet, $ids_objet);
     463
     464        // si on a tout trouve, on s'en va...
     465        if (!count($wanted)) {
     466                return $res;
     467        }
     468
     469        try {
     470                $ws = pmb_webservice();
     471                foreach ($wanted as $id_objet) {
     472                        // second parametre $id_session n'etait pas utilise... kesako ?
     473                        // et pas present partout...
     474                        $r = $ws->$ws_methode($id_objet);
     475                        if ($r) {
     476                                if (!$extraire_fonction) {
     477                                        $extraire_fonction = 'pmb_extraire_resultat_' . $objet . '_id';
     478                                }
     479                                $infos = $extraire_fonction($r);
     480                               
     481                                $key = array_search($id_objet, $ids_objet);
     482                                $res[$key] = $infos;
     483                                pmb_cacher($objet, $id_objet, $infos, true);
     484                        }
     485                }
     486
     487        } catch (Exception $e) {
     488                 echo 'Exception reçue (7) : ',  $e->getMessage(), "\n";
     489        }
     490
     491        return $res;
     492}
     493
     494
    430495
    431496/**
     
    450515**/
    451516function pmb_extraire_auteurs_ids($ids_auteur) {
    452         if (!is_array($ids_auteur)) {
    453                 return array();
    454         }
    455        
    456         // retrouver les infos en cache
    457         list($res, $wanted) = pmb_cacher('auteurs', $ids_auteur);
    458 
    459         // si on a tout trouve, on s'en va...
    460         if (!count($wanted)) {
    461                 return $res;
    462         }
    463 
    464         try {
    465                 $ws = pmb_webservice();
    466                 foreach ($wanted as $id_auteur) {
    467                         // second parametre $id_session n'etait pas utilise... kesako ?
    468                         $r = $ws->pmbesAuthors_get_author_information_and_notices($id_auteur);
    469                         if ($r) {
    470                                 //infos de l'auteur
    471                                 $a = array();
    472                                 $a['id_auteur']                 = $r->information->author_id;
    473                                 $a['id_type_auteur']    = $r->information->author_type;
    474                                 $a['nom']                               = $r->information->author_name;
    475                                 $a['prenom']                    = $r->information->author_rejete;
    476                                 if ($r->information->author_rejete) {
    477                                         $a['nomcomplet'] =  $a['prenom'].' '.$a['nom'];
    478                                 } else {
    479                                         $a['nomcomplet'] = $a['nom'];
    480                                 }
    481                                 // what's 'see' ?
    482                                 $a['id_voir']                   = $r->information->author_see;
    483                                 $a['date']                              = $r->information->author_date;
    484                                 $a['web']                               = $r->information->author_web;
    485                                 $a['commentaire']               = $r->information->author_comment;
    486                                 $a['lieu']                              = $r->information->author_lieu;
    487                                 $a['ville']                             = $r->information->author_ville;
    488                                 $a['pays']                              = $r->information->author_pays;
    489                                 $a['subdivision']               = $r->information->author_subdivision;
    490                                 $a['numero']                    = $r->information->author_numero;
    491                                 $a['ids_notice']                = $r->notice_ids;
    492 
    493                                 $key = array_search($id_auteur, $ids_auteur);
    494                                 if ($key !== false) {
    495                                         $res[$key] = $a;
    496                                         pmb_cacher('auteurs', $id_auteur, $a, true);
    497                                 }
    498                         }
    499                 }
    500 
    501         } catch (Exception $e) {
    502                  echo 'Exception reçue (7) : ',  $e->getMessage(), "\n";
    503         }
    504 
    505         return $res;
     517        return pmb_extraire_abstract_ids('auteurs', $ids_auteur, 'pmbesAuthors_get_author_information_and_notices');
     518}
     519
     520/**
     521 * Partie d'extraction d'un auteur
     522 * dans un resultat de requete a PMB
     523**/
     524function pmb_extraire_resultat_auteurs_id($ws_result) {
     525        $r = $ws_result;
     526        $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;
     531        if ($r->information->author_rejete) {
     532                $a['nomcomplet'] =  $a['prenom'].' '.$a['nom'];
     533        } else {
     534                $a['nomcomplet'] = $a['nom'];
     535        }
     536        // 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;
     547        return $a;
    506548}
    507549
Note: See TracChangeset for help on using the changeset viewer.