Changeset 57003 in spip-zone


Ignore:
Timestamp:
Jan 13, 2012, 1:22:10 AM (8 years ago)
Author:
marcimat@…
Message:

Des boucles (PMB:LIEUX) et (PMB:SECTIONS) ...

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

Legend:

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

    r56978 r57003  
    11
    2 [(#ENV{id_location}|oui)
    3         [(#SET{tab_locationsections,[(#ENV{id_location}|pmb_location_extraire)]})]
    4 ]
    5 [(#ENV{id_section}|oui)
    6         [(#SET{tab_sections,[(#ENV{id_section}|pmb_section_extraire)]})]
    7         [(#SET{tab_locationsections_memo,[(#ENV{id_location_memo}|pmb_location_extraire)]})]
    8 ]
    92
    10 [(#REM) Fil d'Ariane ]
     3[(#REM) Fil d'Ariane un rien complexe ... ]
    114<p id="hierarchie"><a href="#URL_SITE_SPIP/"><:accueil_site:></a>
    12  &gt; <a href="#URL_PMB_CATALOGUE"><:pmb:catalogue:></a>
    13 [ &gt; <a href="[(#URL_PMB_CATALOGUE|parametre_url{id_location,#GET{tab_locationsections_memo/0/location_id}})]">(#GET{tab_locationsections_memo/0/location_caption}|ucfirst)</a>]
    14 [ &gt; <strong class="on">(#GET{tab_locationsections/0/location_caption,#GET{tab_sections/0/section_caption}}|ucfirst)</strong>]
     5        &gt; <a href="#URL_PMB_CATALOGUE"><:pmb:catalogue:></a>
     6 
     7        <BOUCLE_ariane_lieu(PMB:LIEUX){id_location}>
     8        [ &gt; <strong class="on">(#TITRE)</strong>]
     9        </BOUCLE_ariane_lieu>
     10
     11        <BOUCLE_ariane_parent(PMB:LIEUX){id_location=#ENV{id_location_memo}}>
     12        [ &gt; <a href="#URL_PMB_CATALOGUE{#ID_LOCATION}">(#TITRE)</a>]
     13        </BOUCLE_ariane_parent>
     14
     15        <BOUCLE_ariane_section_parente(PMB:SECTIONS){id_section=#ENV{id_section_memo}}>
     16        [ &gt; <a href="[(#URL_PMB_CATALOGUE
     17                |parametre_url{id_location_memo,#ENV{id_location_memo}}
     18                |parametre_url{id_section,#ENV{id_section_memo}})]">(#TITRE)</a>]
     19        </BOUCLE_ariane_section_parente>
     20       
     21        <BOUCLE_ariane_section(PMB:SECTIONS){id_section}>
     22        [ &gt; <strong class="on">(#TITRE)</strong>]
     23        </BOUCLE_ariane_section>
    1524</p>
    1625
    1726<div class="cartouche">
    18         [(#GET{tab_sections/0/section_image}|oui)
    19                 [(#GET{tab_sections/0/section_image}|contient{rayonnage}|non)
    20                         [(#GET{tab_sections/0/section_image}
    21                                 |copie_locale{force}
    22                                 |image_reduire{200,200}
    23                                 |inserer_attribut{class,spip_logos})]
    24                 ]
     27        #SET{titre_pour_recherche,''}
     28        <BOUCLE_section_image(PMB:SECTIONS){id_section}>
     29        [(#IMAGE|oui)
     30                [(#IMAGE|copie_locale{force}
     31                        |image_reduire{200,200}
     32                        |inserer_attribut{class,spip_logos})]
    2533        ]
     34        #SET{titre_pour_recherche,#TITRE}
     35        </BOUCLE_section_image>
    2636
    2737        <h1 class="h1">
    28                 [(#GET{tab_locationsections/0/location_caption}|ucfirst
    29                         |sinon{[(#GET{tab_locationsections_memo/0/location_caption}|ucfirst) / ][(#GET{tab_sections/0/section_caption}|ucfirst)]}
    30                         |sinon{<:pmb:catalogue:>})]
     38        <BOUCLE_titre_lieu(PMB:LIEUX){id_location}>#TITRE</BOUCLE_titre_lieu>
     39                <BOUCLE_titre_location_parente(PMB:LIEUX){id_location=#ENV{id_location_memo}}>#TITRE</BOUCLE_titre_location_parente>
     40                <BOUCLE_titre_section(PMB:SECTIONS){id_section}> / #TITRE</BOUCLE_titre_section>
     41                        <:pmb:catalogue:>
     42                <//B_titre_section>
     43        <//B_titre_lieu>
    3144        </h1>
    32        
    3345</div>
    3446
    3547
    3648
    37 <INCLURE{fond=inclure/inc-pmb_catalogue}{env}
    38         {tab_locationsections=#GET{tab_locationsections}}
    39         {tab_sections=#GET{tab_sections}}
    40         {tab_locationsections_memo=#GET{tab_locationsections_memo}}
    41 >
     49<INCLURE{fond=inclure/inc-pmb_catalogue}{env}{titre_pour_recherche=#GET{titre_pour_recherche}}>
    4250
  • _plugins_/spip-pmb/trunk/inclure/inc-pmb_catalogue.html

    r56978 r57003  
    44]
    55
     6[(#REM)
     7
     8        On affiche les lieux racines (si ni id_location, ni id_section n'est present)
     9        Sinon, les sous sections d'une section,
     10        Sinon, les sections d'un lieu...
     11
     12]
    613<B_lieux>
    714<div class="liste menu articles">
    815        <ul class="liste-items">
    9         <BOUCLE_lieux(PMB:LIEUX){id_location ?}{id_section ?}>
    10                
    11                 [(#SET{url,[(#URL_PMB_CATALOGUE|parametre_url{id_location,#ID_LOCATION})]})]
    12 
     16        <BOUCLE_lieux(PMB:LIEUX){si (#ENV{id_location}|non|et{#ENV{id_section}|non})}>
    1317                <li class="item">
    14                         <a href="#GET{url}">
     18                        <a href="#URL_PMB_CATALOGUE{#ID_LOCATION}">
    1519                                [(#CHEMIN{img/logo-localisation.png}
    16                                         |image_reduire{#ENV{largeur,0},#ENV{hauteur,50}}
     20                                        |image_reduire{#ENV{largeur,30},#ENV{hauteur,30}}
    1721                                        |inserer_attribut{class,spip_logos})]
    1822                        </a>
    19 
    20                         <h3><a href="#GET{url}">#TITRE</a></h3>
     23                        <h3><a href="#URL_PMB_CATALOGUE{#ID_LOCATION}">#TITRE</a></h3>
    2124                </li>
    2225        </BOUCLE_lieux>
     
    2528</B_lieux>
    2629
     30<B_sections>
     31<div class="liste menu articles">
     32        <ul class="liste-items">
     33        <BOUCLE_sections(PMB:SECTIONS){id_location ?}{id_parent ?}>
     34                [(#SET{url,[(#URL_PMB_CATALOGUE
     35                        |parametre_url{id_section,#ID_SECTION}
     36                        |parametre_url{id_location_memo,#ENV{id_location_memo,#ENV{id_location}}}
     37                        |parametre_url{id_section_memo,#ENV{id_section}})]})]
     38
     39                <li class="item">
     40                        <a href="#GET{url}">
     41                        [(#IMAGE|sinon{#CHEMIN{img/logo-section.png}}
     42                                |image_reduire{#ENV{largeur,30},#ENV{hauteur,30}}
     43                                |inserer_attribut{class,spip_logos})]
     44                        </a>
     45                        <h3><a href="#GET{url}">#TITRE</a></h3>
     46                </li>
     47        </BOUCLE_sections>
     48        </ul>
     49</div>
     50</B_sections>
     51
    2752[(#REM)
    2853        Si on est dans une section,
     
    3055]
    3156[(#ENV{id_section}|oui)
    32 
    3357        [(#INCLURE{fond=inclure/inc-recherche-pmb_catalogue}{env}
    3458                {ajax}
     
    3963                {look_CATEGORY}{look_INDEXINT}
    4064                {look_KEYWORDS}{look_TITLE}{look_ABSTRACT}
    41                 {id_section}{id_location_memo}
     65                {id_section}{id_location_memo}{id_section_memo}
    4266                {typdoc}
    4367                {debut}{fin} )]
     
    4670
    4771]
    48 
    49 
    50 [(#REM) la valeur 0 contient des infos ininterressantes. ]
    51 #SET{tab,#ENV{tab_locationsections}|depile}
    52 
    53 [(#REM) Si pas d'info de location + section, on tente juste section ]
    54 [(#GET{tab}|count|non)
    55         #SET{tab,#ENV{tab_sections}|depile}
    56 ]
    57 
    58 [(#REM) Une location et ses sections OU uniquement les sections ]
    59 <B_tab_resultat2>
    60 <div class="liste menu articles">
    61         <h2 class="invisible"><:articles_rubrique:></h2>
    62         <ul class="liste-items">
    63         <BOUCLE_tab_resultat2(POUR){tableau #GET{tab}}>
    64                 [(#SET{url,[(#URL_PMB_CATALOGUE
    65                         |parametre_url{id_section,#GET{tab/#CLE/section_id}}
    66                         |parametre_url{id_location_memo,#GET{tab/#CLE/section_location}})]})]
    67        
    68                 <li class="item">
    69                         <a href="#GET{url}">
    70                         [(#GET{tab/#CLE/section_image}|contient{rayonnage}|non)
    71                                 [(#GET{tab/#CLE/section_image}
    72                                         |image_reduire{#ENV{largeur,100},#ENV{hauteur,0}}
    73                                         |inserer_attribut{class,spip_logos})]
    74                         ]
    75                         [(#GET{tab/#CLE/section_image}|contient{rayonnage}|oui)
    76                                 [(#CHEMIN{img/logo-section.png}
    77                                         |image_reduire{#ENV{largeur,0},#ENV{hauteur,50}}
    78                                         |inserer_attribut{class,spip_logos})]
    79                         ]
    80                         </a>
    81                         <h3><a href="#GET{url}">[(#GET{tab/#CLE/section_caption}|ucfirst)]</a></h3>
    82                 </li>
    83         </BOUCLE_tab_resultat2>
    84         </ul>
    85 </div>
    86 </B_tab_resultat2>
    87 
    88 
  • _plugins_/spip-pmb/trunk/inclure/inc-recherche-avancee.html

    r56928 r57003  
    11
    22<br class="nettoyeur" />
    3 [<h2><:pmb:recherche_dans:> : (#ENV{tab_sections/0/section_caption}|ucfirst)</h2>]
     3[<h2><:pmb:recherche_dans:> : (#ENV{titre_pour_recherche})</h2>]
    44       
    55<div id="search">
     
    88                        [<input type='hidden' name='id_section' value='(#ENV{id_section})'/>]
    99                        [<input type='hidden' name='id_location_memo' value='(#ENV{id_location_memo})'/>]
     10                        [<input type='hidden' name='id_section_memo' value='(#ENV{id_section_memo})'/>]
    1011                        [<input type='hidden' name='titre_section' value='(#ENV{titre_section})'/>]
    11                         <input type='hidden' name='page' value='[(#ENV{page,recherche})]'/>
     12                        <input type='hidden' name='type-page' value='[(#ENV{type-page,recherche})]'/>
    1213                        <input type='hidden' name='recherche_avancee' value='1'/>
    1314                        <input type='hidden' name='look[]' value='PMB'/>
  • _plugins_/spip-pmb/trunk/inclure/inc-recherche-pmb_catalogue.html

    r56928 r57003  
    1010        <ul class="liste-items items">
    1111        <BOUCLE_recherche(PMB:NOTICES){rechercher}
    12                         {id_section ?}{id_location_memo ?}{look ?}{pagination 5}>
     12                        {id_section ?}{id_location_memo ?}{id_section_memo ?}{look ?}{pagination 5}>
    1313                [(#SET{url_ret,[(#GET{url}|parametre_url{debut,#ENV{debut}}|trim|urlencode)]})]
    1414                [(#INCLURE{fond=inclure/inc-notice-resume}{id}
  • _plugins_/spip-pmb/trunk/paquet.xml

    r56967 r57003  
    22        prefix="pmb"
    33        categorie="divers"
    4         version="1.111.0"
     4        version="1.112.0"
    55        etat="dev"
    66        compatibilite="[3.0.0-beta2;3.0.*]"
  • _plugins_/spip-pmb/trunk/pmb_fonctions.php

    r56978 r57003  
    6060
    6161
    62 function pmb_section_extraire($id_section) {
    63         $tableau_sections = Array();
    64         try {
    65                 //récupérer les infos sur la section parent
    66                 $ws = pmb_webservice();
    67                 $section_parent = $ws->pmbesOPACGeneric_get_section_information($id_section);
    68                 $tableau_sections[0] = Array();
    69                 $tableau_sections[0]['section_id'] = $section_parent->section_id;
    70                 $tableau_sections[0]['section_location'] = $section_parent->section_location;
    71                 $tableau_sections[0]['section_caption'] = $section_parent->section_caption;
    72                 $tableau_sections[0]['section_image'] = lire_config("spip_pmb/url","http://tence.bibli.fr/opac").'/'.$section_parent->section_image;
    73 
    74                 $tab_sections = $ws->pmbesOPACGeneric_list_sections($id_section);
    75                 pmb_extraire_sections_infos($tableau_sections, $tab_sections);
    76         } catch (Exception $e) {
    77                  echo 'Exception reçue (1): ',  $e->getMessage(), "\n";
    78         }
    79         return $tableau_sections;
    80 }
    81 
    82 
    83 function pmb_location_extraire($id_location) {
    84         $tableau_locationsections = Array();
    85         try {
    86                 $ws = pmb_webservice();
    87                 $tab_locations = $ws->pmbesOPACGeneric_get_location_information_and_sections($id_location);
    88                 //récupérer les infos sur la localisation parent
    89                 $tableau_locationsections[0] = Array();
    90                 $tableau_locationsections[0]['location_id'] = $tab_locations->location->location_id;
    91                 $tableau_locationsections[0]['location_caption'] = $tab_locations->location->location_caption;
    92 
    93                 pmb_extraire_sections_infos($tableau_locationsections, $tab_locations->sections);
    94         } catch (Exception $e) {
    95                 echo 'Exception reçue (2) : ',  $e->getMessage(), "\n";
    96         }
    97         return $tableau_locationsections;
    98 }
    99 
    100 
    101 function pmb_extraire_sections_infos(&$tableau, $sections) {
    102         $cpt = 1;
    103         if (is_array($sections)) {
    104                 foreach ($sections as $section) {
    105                         $tableau[$cpt] = Array();
    106                         $tableau[$cpt]['section_id']            = $section->section_id;
    107                         $tableau[$cpt]['section_location']      = $section->section_location;
    108                         $tableau[$cpt]['section_caption']       = $section->section_caption;
    109                         $tableau[$cpt]['section_image']         = lire_config("spip_pmb/url","http://tence.bibli.fr/opac").'/'.$section->section_image;
    110                         $cpt++;
    111                 }
    112         }
    113 }
    114 
    115 
    11662
    11763
     
    13682                if (is_array($r)) {
    13783                        foreach ($r as $index => $location) {
    138                                 $locations[$index] = Array();
    139                                 $locations[$index]['id_location'] = $location->location_id;
    140                                 $locations[$index]['titre'] = $location->location_caption;
    141                                 $locations[$index]['type'] = "racine";
     84                                $locations[] = array(
     85                                        'id_location' => $location->location_id,
     86                                        'titre'       => $location->location_caption,
     87                                );
    14288                        }
    14389                }
     
    14995
    15096
    151 
    152 
    153 
    154 /* aucune occurrence ? */
    155 function pmb_notices_section_extraire($id_section, $debut=0, $fin=5) {
    156         $tableau_resultat = Array();
    157        
    158         $search = array();
    159         $search[] = array("inter"=>"and","field"=>17,"operator"=>"EQ", "value"=>$id_section);
    160 
    161         try {
    162                 $ws = pmb_webservice();
    163                 $r=$ws->pmbesOPACAnonymous_advancedSearch($search);
    164                 $searchId=$r["searchId"];
    165                 $nb = $r["nbResults"];
    166                 //$r=$ws->pmbesOPACAnonymous_fetchSearchRecords($searchId,$debut,$fin,"serialized_unimarc","utf-8");
    167                 $r=$ws->pmbesOPACAnonymous_fetchSearchRecordsArray($searchId,$debut,$fin,"utf-8");
    168                 if (is_array($r)) {
    169                         $tableau_resultat = array_map('pmb_ws_parser_notice', $r);
    170                 }
    171                 array_unshift($tableau_resultat, array('nb_resultats' => $nb));
    172         } catch (Exception $e) {
    173                  echo 'Exception reçue (4) : ',  $e->getMessage(), "\n";
    174         }
    175 
    176         return $tableau_resultat;
     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**/
     110function 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
     120/**
     121 * Retourne la liste de tous les rayonnages d'un lieu racine
     122 *
     123 * @param array $ids_location
     124 *              Les parents
     125 *
     126 * @return array
     127 *              Tableau contenant pour chaque section la liste des champs
     128 *              que l'on a pu recuperer.
     129**/
     130function 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...
     183        return pmb_get_enfants($res, 'sections');
     184}
     185
     186
     187/**
     188 * Retourne la liste de tous les sous rayonnages d'un rayonnage...
     189 *
     190 * @param array $ids_section
     191 *              Les parents
     192 *
     193 * @return array
     194 *              Tableau contenant pour chaque section la liste des champs
     195 *              que l'on a pu recuperer.
     196**/
     197function pmb_extraire_sections_depuis_sections_ids($ids_section) {
     198        $res = pmb_extraire_sections_ids($ids_section);
     199        return pmb_get_enfants($res, 'sections');
     200}
     201
     202
     203
     204/**
     205 * Retourne les rayonnages demandes...
     206 *
     207 * @param array $ids_section
     208 *              Les demandes
     209 *
     210 * @return array
     211 *              Tableau contenant pour chaque section la liste des champs
     212 *              que l'on a pu recuperer.
     213**/
     214function 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
     260
     261
     262/**
     263 * Retourne des petites infos sur les sections issues de requetes a pmb
     264 *
     265 * @param
     266 * @return
     267**/
     268function pmb_extraire_section($section) {
     269        // enlever l'image par defaut
     270        $image = (false !== strpos($section->section_image,'rayonnage') ? '' : $section->section_image);
     271        $s = array(
     272                'id_section'   => $section->section_id,
     273                'titre'        => $section->section_caption,
     274                'image'        => $image,
     275        );
     276        return $s;
    177277}
    178278
     
    331431                                if ($key !== false) {
    332432                                        $res[$key] = $a;
    333                                         pmb_cacher('notices', $id_auteur, $a, true);
     433                                        pmb_cacher('auteurs', $id_auteur, $a, true);
    334434                                }
    335435                        }
     
    367467        $recherche   = $demande['recherche'];
    368468        $id_section  = $demande['id_section'];
     469        $id_section_parent  = $demande['id_section_parent'];
    369470        $id_location = $demande['id_location'];
     471       
     472        if ($id_section_parent) {
     473                $id_location = $id_section_parent; // a n'y rien comprendre...
     474        }
     475       
    370476        $typdoc      = $demande['type_document'];
    371477        $look        = $demande['look'];
     
    374480        $tous = true;
    375481
    376        
    377        
     482
    378483        // si tout coche
    379484        if (isset($look['ALL'])) {
  • _plugins_/spip-pmb/trunk/public/pmb.php

    r56978 r57003  
    234234
    235235/**
     236 * Modifier le critere id_parent pour la boucle PMB:SECTIONS
     237 */
     238function critere_PMB_SECTIONS_id_parent_dist($idb, &$boucles, $crit) {
     239        $id_section = kwote(calculer_argument_precedent($idb, 'id_section', $boucles));
     240        $c = array("'='", "id_parent", $id_section);
     241        $boucles[$idb]->where[] = $c;
     242}
     243
     244/**
    236245 *
    237246 * Selectionne les notices demandees
     
    259268function inc_pmb_notices_select_dist(&$command, $iterateur) {
    260269        $criteres = $command['where'];
    261        
     270
    262271        // on peut fournir une liste l'id
    263272        // ou egalement un critere id=x
     
    290299
    291300        // id_auteur : trouver les notices d'un auteur
    292         if ($id = pmb_critere_valeur($criteres, 'id_auteur')) {
    293                 foreach ($id as $id_auteur) {
    294                         // tout le temps sauf si IN
    295                         if (!is_array($id_auteur)) {
    296                                 $id_auteur = array($id_auteur);
    297                         }
    298                         $auteurs = pmb_extraire_auteurs_ids($id_auteur);
    299                         if ($auteurs) {
    300                                 $n = array();
    301                                 foreach ($auteurs as $a) {
    302                                         $n = array_unique(array_merge($n, $a['ids_notice']));
    303                                 }
    304                                 $ids = pmb_intersect_ids($ids, $n);
    305                         }
     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);
    306309                }
    307310                unset($auteurs);
     
    351354                foreach (array(
    352355                        'id_section' => 'id_section',
     356                        'id_section_memo' => 'id_section_parent',
    353357                        'id_location_memo' => 'id_location',
    354358                        'id_location' => 'id_location',
     
    356360                {
    357361                        if ($valeurs = pmb_critere_valeur($criteres, $nom)) {
    358                                 $iterateur->exception_des_criteres($nom); 
     362                                $iterateur->exception_des_criteres($nom);
    359363                                // on ajoute le premier venu...
    360                                 $demande[$requete] = array_shift($valeurs);
     364                                // sauf pour look, où on veut toutes les valeurs...
     365                                if ($nom == 'look') {
     366                                        $demande[$requete] = $valeur;
     367                                } else {
     368                                        $demande[$requete] = array_shift($valeurs);
     369                                }
    361370                        }
    362371                }
    363372
    364373                $idsr = pmb_ids_notices_recherches($demande, $total_resultats, $debut, $nombre, $pagination);
     374
    365375                $ids = pmb_intersect_ids($ids, $idsr);
    366376                $iterateur->total = $total_resultats;
     
    370380        // retourner les notices selectionnees
    371381        $res = pmb_extraire_notices_ids($ids);
    372 
     382       
    373383        return $res;
    374384}
     
    421431 * Selectionne les lieux de classement des notices
    422432 * et retourne un tableau des elements parsees
    423  * Un lieu est au sens PMB / systeme de documentation
     433 * Un lieu est au sens PMB "location"
    424434 *
    425435 * - Location : c'est comme un centre de doc physique, une adresse.
     
    428438 *
    429439 * - Section : C'est comme un rayonnage de centre de doc. Un theme de classement en quelque sorte.
     440 *              Une section est independante d'une location, au sens ou une meme section
     441 *              peut être presente sur plusieurs locations.
     442 *
     443 * En SPIP, on pourrait dire que
     444 * - Location = rubriques racines,
     445 * - Sections = Groupes de mots clés (hierarchiques)
    430446 *
    431447 * Les centres de docs a la racine
    432448 * (PMB:LIEUX)
    433449 * (PMB:LIEUX) {racine}
    434  *
    435  *
     450 * 
     451 * (PMB:LIEUX) {id_location}
    436452 *
    437453 */
     
    441457        // racine indique... on ne s'occupe pas du reste...
    442458        // depuis un critere {racine}
     459        /*
    443460        if (pmb_recherche_critere($criteres, 'racine')) {
    444461                // retourner les auteurs selectionnees
    445462                $iterateur->exception_des_criteres('racine');
    446463                return pmb_extraire_locations_racine();
    447         }
    448 
    449         $res = array();
    450 
    451         // testons la presence de id_section ou id_location
    452         // en leur absence, on boucle sur la racine.
    453         $id_location = pmb_critere_valeur($criteres, 'id_location');
    454         $id_section = pmb_critere_valeur($criteres,  'id_section');
    455        
    456         if (!$id_location and !$id_section) {
    457                 return pmb_extraire_locations_racine();
    458         }
    459 
    460        
     464        }*/
     465       
     466        $res = pmb_extraire_locations_racine();
     467
     468        if (pmb_recherche_critere($criteres, 'id_location')) {
     469                if (!$ids_location = pmb_critere_valeur($criteres,  'id_location')) {
     470                        return array();
     471                }
     472
     473                $iterateur->exception_des_criteres('id_location');
     474                foreach ($res as $c => $l) {
     475                        if (!in_array($l['id_location'], $ids_location)) {
     476                                unset($res[$c]);
     477                        }
     478                }
     479                $res = array_values($res);
     480        }
     481
     482
    461483
    462484        return $res;
     
    464486
    465487
     488
     489
     490/**
     491 *
     492 * Selectionne les themes (sections) de classement des notices
     493 * et retourne un tableau des elements parsees
     494 * Un lieu est au sens PMB "location"
     495 *
     496 * Les centres de docs a la racine
     497 * (PMB:SECTIONS)
     498 * (PMB:SECTIONS) {id_section ?} // la section
     499 * (PMB:SECTIONS) {id_parent ?}  // sections enfants
     500 * (PMB:SECTIONS) {id_lieu ?} // sections dans le lieu...
     501 *
     502 */
     503function inc_pmb_sections_select_dist(&$command, $iterateur) {
     504        $criteres = $command['where'];
     505
     506        // on peut fournir une liste l'id
     507        // ou egalement un critere id=x
     508        $ids = array();
     509
     510        // depuis une liste
     511        if (is_array($command['liste']) and count($command['liste'])) {
     512                $ids = $command['liste'];
     513        }
     514
     515        // depuis un critere id_section=x ou {id_section ?}
     516        if ($id = pmb_critere_valeur($criteres, 'id_section')) {
     517                $ids = pmb_intersect_ids($ids, $id);
     518        }
     519
     520        // testons la presence de id_parent (un id_section) ou id_location
     521        #$ids_location = pmb_critere_valeur($criteres, 'id_location');
     522        if ($ids_parents = pmb_critere_valeur($criteres,  'id_parent')) {
     523                $iterateur->exception_des_criteres('id_parent');
     524                $sections = pmb_extraire_sections_depuis_sections_ids($ids_parents);
     525                return $sections;
     526        }
     527
     528        if ($ids_location = pmb_critere_valeur($criteres,  'id_location')) {
     529                $iterateur->exception_des_criteres('id_location');
     530                $sections = pmb_extraire_sections_depuis_locations_ids($ids_location);
     531                return $sections;
     532        }
     533
     534        return pmb_extraire_sections_ids($ids);
     535}
    466536
    467537
     
    540610                                        // enlever tous les guillemets entourants
    541611                                        foreach($v as $a=>$b) { $v[$a] = trim($b, "'"); }
    542                                         $res[] = $v;
     612                                        // comme c'est deja un tableau, on le merge aux resultats deja obtenus
     613                                        $res = array_unique(array_merge($res, $v));
    543614                                }
    544615                        }
     
    664735/**
    665736 * Balise URL_PMB_CATALOGUE
     737 * et #URL_PMB_CATALOGUE{#ID_LOCATION}
    666738**/
    667739function balise_URL_PMB_CATALOGUE_dist($p) {
    668740        $page = 'pmb_catalogue';
    669         $p->code = "generer_url_public('$page')";
     741        if ($id_location = interprete_argument_balise(1, $p)) {
     742                $p->code = "parametre_url(generer_url_public('$page'), 'id_location', $id_location)";
     743        } else {
     744                $p->code = "generer_url_public('$page')";
     745        }
    670746        $p->interdire_scripts = false;
    671747        return $p;
Note: See TracChangeset for help on using the changeset viewer.