source: pmb4.2/trunk/fuentes/pmb/classes/searcher.class.php @ 815

Last change on this file since 815 was 815, checked in by jrpelegrina, 4 years ago

Initial release of pmb 4.2

  • Property svn:executable set to *
File size: 185.0 KB
Line 
1<?php
2// +-------------------------------------------------+
3// © 2002-2004 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
4// +-------------------------------------------------+
5// $Id: searcher.class.php,v 1.161.2.2 2015-12-01 09:39:14 jpermanne Exp $
6
7if (stristr($_SERVER['REQUEST_URI'], ".class.php")) die("no access");
8
9//Classe de recherche en catalogage...
10
11require_once("$class_path/analyse_query.class.php");
12require_once("$class_path/thesaurus.class.php");
13require_once("$class_path/sort.class.php");
14require_once("$include_path/templates/searcher_templates.tpl.php");
15require_once($class_path."/searcher/searcher_records_title.class.php");
16if($pmb_map_activate){
17        require_once($class_path."/map/map_search_controler.class.php");
18}
19
20
21//droits d'acces lecture notice
22$acces_j='';
23if ($gestion_acces_active==1 && $gestion_acces_user_notice==1) {
24        require_once("$class_path/acces.class.php");
25        $ac= new acces();
26        $dom_1= $ac->setDomain(1);
27        switch ($aut_type) {
28                case "concept" :
29                        $acces_j = $dom_1->getJoin($PMBuserid,4,'num_object');
30                        break;
31                default :
32                        $acces_j = $dom_1->getJoin($PMBuserid,4,'notice_id');
33                        break;
34        }
35}
36
37
38//Classe générique de recherche
39
40define("AUT_LIST",1);
41define("NOTICE_LIST",2);
42define("AUT_SEARCH",3);
43
44class searcher {
45
46        var $type;                    //Type de recherche
47        var $etat;                    //Etat de la recherche
48        var $page;                    //Page courante de la recherche
49        var $nbresults;               //Nombre de résultats de la dernière recherche
50        var $nbepage;
51        var $nb_per_page;
52        var $id;                        //Numéro d'autorité pour la recherche
53        var $store_form;                //Formulaire contenant les infos de navigation plus des champs pour la recherche
54        var $base_url;
55        var $first_search_result;
56        var $text_query;
57        var $text_query_tri;                    //pour les tris texte de la requête d'origine modifié par la classe tri
58        var $human_query;
59        var $human_notice_query;
60        var $human_aut_query;
61        var $docnum;
62        var $direct=0;
63        var $rec_history=false;
64        var $sort;
65        var $current_search;
66
67        //Constructeur
68        function searcher($base_url,$rec_history=false) {
69                global $type,$etat,$aut_id,$page, $docnum_query,$auto_postage_query;
70
71                $this->sort = new sort('notices','base');
72                $this->type=$type;
73                $this->etat=$etat;
74                $this->page=$page;
75                $this->id=$aut_id;
76                $this->base_url=$base_url;
77                $this->rec_history=$rec_history;
78                $this->docnum = ($docnum_query?1:0);
79                $this->auto_postage_query = ($auto_postage_query?1:0);
80                $this->run();
81        }
82
83        function make_store_form() {
84                $this->store_form="<form name='store_search' action='".$this->base_url."' method='post' style='display:none'>
85                <input type='hidden' name='type' value='".$this->type."'/>
86                <input type='hidden' name='etat' value='".$this->etat."'/>
87                <input type='hidden' name='page' value='".$this->page."'/>";
88                $this->store_form.="!!first_search_variables!!";
89                $this->store_form.="</form>";
90        }
91
92        function pager() {
93                global $msg;
94
95                if (!$this->nbresults) return;
96
97                $etendue=10;
98                $suivante = $this->page+1;
99                $precedente = $this->page-1;
100                if (!$this->page) $page_en_cours=0 ;
101                        else $page_en_cours=$this->page ;
102
103                //Première
104                if(($page_en_cours+1)-$etendue > 1) {
105                        $nav_bar .= "<a href='#' onClick=\"document.store_search.page.value=0; document.store_search.submit(); return false;\"><img src='./images/first.gif' border='0' alt='".$msg['first_page']."' hspace='6' align='middle' title='".$msg['first_page']."' /></a>";
106                }
107                // affichage du lien précédent si nécéssaire
108                if($precedente >= 0)
109                                $nav_bar .= "<a href='#' onClick=\"document.store_search.page.value=$precedente; document.store_search.submit(); return false;\"><img src='./images/left.gif' border='0'  title='$msg[48]' alt='[$msg[48]]' hspace='3' align='middle'></a>";
110
111                $deb = $page_en_cours - 10 ;
112                if ($deb<0) $deb=0;
113                for($i = $deb; ($i < $this->nbepage) && ($i<$page_en_cours+10); $i++) {
114                        if($i==$page_en_cours) $nav_bar .= "<strong>".($i+1)."</strong>";
115                                else $nav_bar .= "<a href='#' onClick=\"document.store_search.page.value=$i; document.store_search.submit(); return false;\">".($i+1)."</a>";
116                        if($i<$this->nbepage) $nav_bar .= " ";
117                        }
118
119                if($suivante<$this->nbepage)
120                                $nav_bar .= "<a href='#' onClick=\"document.store_search.page.value=$suivante; document.store_search.submit(); return false;\"><img src='./images/right.gif' border='0' title='$msg[49]' alt='[$msg[49]]' hspace='3' align='middle'></a>";
121               
122                //Dernière
123                if((($page_en_cours+1)+$etendue)<$this->nbepage){
124                        $nav_bar .= "<a href='#' onClick=\"document.store_search.page.value=".($this->nbepage-1)."; document.store_search.submit(); return false;\"><img src='./images/last.gif' border='0' alt='".$msg['last_page']."' hspace='6' align='middle' title='".$msg['last_page']."' /></a>";
125                }
126
127                // affichage de la barre de navigation
128                print "<div align='center'>$nav_bar</div>";
129        }
130
131        function show_notice() {
132        }
133
134
135        function run() {
136                global $pmb_map_activate;
137                if (!$this->etat) {
138                                $this->show_form();
139                } else {
140                                switch ($this->etat) {
141                                        case "first_search":
142                                                $r=$this->make_first_search();
143                                                //echo "req first:".$this->text_query."<br />";
144                                                $this->first_search_result=$r;
145                                                switch ($r) {
146                                                                case AUT_LIST:
147                                                                        $this->make_store_form();
148                                                                        $this->store_search();
149                                                                        $this->aut_list();
150                                                                        $this->pager();
151                                                                        break;
152                                                                case NOTICE_LIST:
153                                                                        $this->make_store_form();
154                                                                        $this->store_search();
155                                                                        $this->sort_notices();
156                                                                        $this->notice_list();
157                                                                        $this->pager();
158                                                                        break;
159                                                                case AUT_SEARCH:
160                                                                        $this->etat="aut_search";
161                                                                        $this->direct=1;
162                                                                        $this->make_aut_search();
163                                                                        $this->make_store_form();
164                                                                        $this->aut_store_search();
165                                                                        $this->sort_notices();
166                                                                        $this->aut_notice_list();
167                                                                        $this->pager();
168                                                                        break;
169                                                }
170                                                if ($this->rec_history){
171                                                        $this->rec_env();
172                                                        if($pmb_map_activate){
173                                                                $this->check_emprises();
174                                                        }
175
176                                                }
177                                                break;
178                                        case "aut_search":
179                                                $this->make_aut_search();
180                                                $this->make_store_form();
181                                                $this->aut_store_search();
182                                                $this->sort_notices();
183                                                $this->aut_notice_list();
184                                                $this->pager();
185                                                if ($this->rec_history){
186                                                        $this->rec_env();
187                                                        if($pmb_map_activate){
188                                                                $this->check_emprises();
189                                                        }
190                                                }
191                                                               
192                                                                                                break;
193                                }
194                }
195        }
196
197
198        function show_form() {
199                //A surcharger par la fonction qui affiche le formulaire de recherche
200        }
201
202        function make_first_search() {
203                //A surcharger par la fonction qui fait la première recherche après la soumission du formulaire de recherche
204                //La fonction renvoie AUT_LIST (le résultat de la recherche est une liste d'autorité)
205                //ou NOTICE_LIST (le résultat de la recherche est une liste de notices)
206                //La fonction doit mettre à jour le nombre de résultats dans $this->nbresults
207        }
208
209        function make_aut_search() {
210                //A surcharger par la fonction qui fait la recherche des notices à partir d'un numéro d'autorité (stoqué dans $this->id)
211                //La fonction doit mettre à jour le nombre de résultats dans $this->nbresults
212        }
213
214        function store_search() {
215                //A surcharger par la fonction qui écrit les variables du formulaire "store_search" pour stoquer les champs de recherche
216                //En liste de résultat de la première recherche. Il faut remplacer la chaine "!!first_search_variables!!" dans $this->store_form
217        }
218
219        function aut_store_search() {
220                //A surcharger par la fonction qui écrit les variables du formulaire "store_search" pour stoquer les champs de recherche
221                //En liste de résultat de la première recherche. Il faut remplacer la chaine "!!first_search_variables!!" dans $this->store_form
222        }
223
224        function aut_list() {
225                //A surcharger par la fonction qui affiche la liste des autorités issues de la première recherche
226        }
227
228        function notice_list() {
229                //A surcharger par la fonction qui affiche la liste des notices issues de la première recherche
230        }
231
232        function aut_notice_list() {
233                //A surcharger par la fonction qui affiche la liste des notice sous l'autorité $this->id
234        }
235
236        function rec_env() {
237                //A surcharger pa la fonction qui enregistre
238        }
239
240        static function convert_simple_multi($id_champ) {
241                //A surcharger par la fonction qui convertit des recherches simples en multi-critères
242        }
243
244        function sort_notices() {
245                global $msg;
246                global $pmb_nb_max_tri;
247
248                if ($this->nbresults<=$pmb_nb_max_tri) {
249                        if ($_SESSION["tri"]) {
250                                //$this->text_query_tri = $this->text_query;
251                                //$this->text_query_tri = str_replace("limit ".$this->page*$this->nb_per_page.",".$this->nb_per_page, "limit 0,".$this->nbresults,$this->text_query_tri);
252
253                                //if ($this->nb_per_page) {
254                                        //$this->sort->limit = "limit ".$this->page*$this->nb_per_page.",".$this->nb_per_page;
255                                //}
256                                //$this->text_query_tri = $this->sort->appliquer_tri($_SESSION["tri"],$this->text_query,"notice_id");
257                                if ($this->nb_per_page) {
258                                        $this->text_query_tri = $this->sort->appliquer_tri($_SESSION["tri"],$this->text_query,"notice_id", $this->page*$this->nb_per_page, $this->nb_per_page);
259                                        //$this->text_query_tri .= " LIMIT ".$this->page*$this->nb_per_page.",".$this->nb_per_page;
260                                } else {
261                                        $this->text_query_tri = $this->sort->appliquer_tri($_SESSION["tri"],$this->text_query,"notice_id",0,0);
262
263                                }
264//                              echo ($this->text_query_tri."<br />");
265                                $this->t_query = @pmb_mysql_query($this->text_query_tri);
266
267                                if (!$this->t_query) {
268                                        print pmb_mysql_error();
269                                }
270                        } else {
271                                if (strpos($this->text_query,"limit")===false) {
272                                        if ($this->nb_per_page) {
273                                                $this->text_query .= "limit ".$this->page*$this->nb_per_page.",".$this->nb_per_page;
274                                        }
275                                } else {
276                                        if ($this->nb_per_page) {
277                                                $this->text_query = str_replace("limit 0,".$this->nbresults,"limit ".$this->page*$this->nb_per_page.",".$this->nb_per_page,$this->text_query);
278                                        }
279                                }
280                                $this->t_query=@pmb_mysql_query($this->text_query);
281                        }
282                } else {
283                        if (strpos($this->text_query,"limit")===false) {
284                                if ($this->nb_per_page) {
285                                        $this->text_query .= "limit ".$this->page*$this->nb_per_page.",".$this->nb_per_page;
286                                }
287                        } else {
288                                if ($this->nb_per_page) {
289                                        $this->text_query = str_replace("limit 0,".$this->nbresults,"limit ".$this->page*$this->nb_per_page.",".$this->nb_per_page,$this->text_query);
290                                }
291                        }
292                        $this->t_query = @pmb_mysql_query($this->text_query);
293                }
294        }
295
296        function get_current_search_map($mode_search=0){
297                global $pmb_map_activate;
298                global $page;
299                global $aut_id;
300                $map = "";
301                if($pmb_map_activate){
302                        if(isset($_SESSION["MAP_CURRENT"])){
303                                $this->current_search=$_SESSION["MAP_CURRENT"];
304                                unset($_SESSION["MAP_CURRENT"]);
305                        }else{
306                                $this->current_search=count($_SESSION['session_history']);
307                                switch($mode_search) {
308                                        case 2 :
309                                        case 3 :
310                                        case 9 :
311                                                $this->current_search--;
312                                }
313                                if($aut_id )$this->current_search--;
314                                if(isset($page)) $this->current_search--;
315                        }
316                        if($this->current_search<=0) $this->current_search = 0;
317                        $map = "<div id='map_container'><div id='map_search' ></div></div>";
318                }
319                return $map;
320        }
321
322        public function check_emprises(){
323                global $pmb_map_activate;
324                global $pmb_map_max_holds;
325                global $pmb_map_size_search_result;
326
327                $map = "";
328                $size=explode("*",$pmb_map_size_search_result);
329                if(count($size)!=2)$map_size="width:800px; height:480px;";
330                $map_size= "width:".$size[0]."px; height:".$size[1]."px;";
331
332                $map_search_controler = new map_search_controler(null, $this->current_search, $pmb_map_max_holds,false);
333                $json = $map_search_controler->get_json_informations();
334                //Obligatoire pour supprimer les {}
335                $json = substr($json, 1, strlen($json)-2);
336                if($map_search_controler->have_results()){
337                        $map.= "<script type='text/javascript'>
338                                                require(['dojo/ready', 'dojo/dom-attr', 'dojo/parser', 'dojo/dom'], function(ready, domAttr, parser, dom){
339                                                        ready(function(){
340                                                                domAttr.set('map_search', 'data-dojo-type', 'apps/map/map_controler');
341                                                                domAttr.set('map_search', 'data-dojo-props','searchId: ".$this->current_search.", mode:\"search_result\", ".$json."');
342                                                                domAttr.set('map_search', 'style', '$map_size');
343                                                                parser.parse('map_container');
344                                                        });
345                                                });
346                        </script>";
347                }else{
348                        $map.= "<script type='text/javascript'>
349                                                require(['dojo/ready', 'dojo/dom-construct'], function(ready, domConstruct){
350                                                        ready(function(){
351                                                                domConstruct.destroy('map_container');
352                                                        });
353                                                });
354                        </script>";
355                }
356                print $map;
357        }
358}
359
360
361class searcher_title extends searcher {
362        var $t_query;
363
364        function show_form() {
365                global $msg;
366                global $dbh;
367                global $charset,$lang;
368                global $NOTICE_author_query;
369                global $title_query,$all_query, $author_query,$ex_query,$typdoc_query, $statut_query, $docnum_query, $pmb_indexation_docnum_allfields, $pmb_indexation_docnum;
370                global $categ_query,$thesaurus_auto_postage_search,$auto_postage_query;
371                global $thesaurus_concepts_active,$concept_query;
372
373                // on commence par créer le champ de sélection de document
374                // récupération des types de documents utilisés.
375                $query = "SELECT count(typdoc), typdoc ";
376                $query .= "FROM notices where typdoc!='' GROUP BY typdoc";
377                $result = @pmb_mysql_query($query, $dbh);
378                $toprint_typdocfield .= "  <option value=''>$msg[tous_types_docs]</option>\n";
379                $doctype = new marc_list('doctype');
380                while (($rt = pmb_mysql_fetch_row($result))) {
381                        $obj[$rt[1]]=1;
382                        $qte[$rt[1]]=$rt[0];
383                }
384                foreach ($doctype->table as $key=>$libelle){
385                        if ($obj[$key]==1){
386                                $toprint_typdocfield .= "  <option ";
387                                $toprint_typdocfield .= " value='$key'";
388                                if ($typdoc == $key) $toprint_typdocfield .=" selected='selected' ";
389                                $toprint_typdocfield .= ">".htmlentities($libelle." (".$qte[$key].")",ENT_QUOTES, $charset)."</option>\n";
390                        }
391                }
392
393                // récupération des statuts de documents utilisés.
394                $query = "SELECT count(statut), id_notice_statut, gestion_libelle ";
395                $query .= "FROM notices, notice_statut where id_notice_statut=statut GROUP BY id_notice_statut order by gestion_libelle";
396                $result = pmb_mysql_query($query, $dbh);
397                $toprint_statutfield .= "  <option value=''>$msg[tous_statuts_notice]</option>\n";
398                while ($obj = @pmb_mysql_fetch_row($result)) {
399                                $toprint_statutfield .= "  <option value='$obj[1]'";
400                                if ($statut_query==$obj[1]) $toprint_statutfield.=" selected";
401                                $toprint_statutfield .=">".htmlentities($obj[2]."  (".$obj[0].")",ENT_QUOTES, $charset)."</OPTION>\n";
402                }
403
404                $NOTICE_author_query = str_replace("!!typdocfield!!", $toprint_typdocfield, $NOTICE_author_query);
405                $NOTICE_author_query = str_replace("!!statutfield!!", $toprint_statutfield, $NOTICE_author_query);
406                $NOTICE_author_query = str_replace("!!title_query!!",  htmlentities(stripslashes($title_query ),ENT_QUOTES, $charset),  $NOTICE_author_query);
407                $NOTICE_author_query = str_replace("!!all_query!!", htmlentities(stripslashes($all_query),ENT_QUOTES, $charset),  $NOTICE_author_query);
408                $NOTICE_author_query = str_replace("!!author_query!!", htmlentities(stripslashes($author_query),ENT_QUOTES, $charset),  $NOTICE_author_query);
409                $NOTICE_author_query = str_replace("!!categ_query!!", htmlentities(stripslashes($categ_query),ENT_QUOTES, $charset),  $NOTICE_author_query);
410
411                if($thesaurus_concepts_active){
412                        $NOTICE_author_query = str_replace("!!concept_query!!", htmlentities(stripslashes($concept_query),ENT_QUOTES, $charset),  $NOTICE_author_query);
413                }
414
415                $checkbox="";
416                if($thesaurus_auto_postage_search){
417                        $checkbox = "
418                        <div class='colonne'>
419                                <div class='row'>
420                                        <input type='checkbox' !!auto_postage_checked!! id='auto_postage_query' name='auto_postage_query'/><label for='auto_postage_query'>".$msg["search_autopostage_check"]."</label>
421                                </div>
422                        </div>";
423                        $checkbox = str_replace("!!auto_postage_checked!!",   (($auto_postage_query) ? 'checked' : ''),  $checkbox);
424                }
425                $NOTICE_author_query = str_replace("!!auto_postage!!",   $checkbox,  $NOTICE_author_query);
426
427                $NOTICE_author_query = str_replace("!!ex_query!!",     htmlentities(stripslashes($ex_query    ),ENT_QUOTES, $charset),  $NOTICE_author_query);
428                if($pmb_indexation_docnum){
429                        $checkbox = "<div class='colonne'>
430                                <div class='row'>
431                                  <input type='checkbox' !!docnum_query_checked!! id='docnum_query' name='docnum_query'/><label for='docnum_query'>$msg[docnum_indexation]</label>
432                                </div>
433                        </div>";
434                        $checkbox = str_replace("!!docnum_query_checked!!",   (($pmb_indexation_docnum_allfields || $docnum_query) ? 'checked' : ''),  $checkbox);
435                        $NOTICE_author_query = str_replace("!!docnum_query!!",   $checkbox,  $NOTICE_author_query);
436                } else $NOTICE_author_query = str_replace("!!docnum_query!!", '' ,  $NOTICE_author_query);
437                $NOTICE_author_query = str_replace("!!base_url!!",     $this->base_url,$NOTICE_author_query);
438                print pmb_bidi($NOTICE_author_query);
439        }
440
441        function make_first_search() {
442
443                global $msg,$charset,$lang,$dbh;
444                global $title_query,$all_query, $author_query,$ex_query,$typdoc_query, $statut_query, $etat, $docnum_query;
445                global $categ_query,$thesaurus_auto_postage_search, $auto_postage_query;
446                global $nb_per_page_a_search;
447                global $class_path;
448                global $pmb_default_operator;
449                global $acces_j;
450                global $thesaurus_concepts_active,$concept_query;
451                global $dbh;
452
453
454                if ($nb_per_page_a_search) $this->nb_per_page=$nb_per_page_a_search; else $this->nb_per_page=3;
455                $author_per_page=10;
456
457                $restrict='';
458                if ($typdoc_query) $restrict = "and typdoc='".$typdoc_query."' ";
459                if ($statut_query) $restrict.= "and statut='".$statut_query."' ";
460
461                //traitons les cas particuliers...
462                if($author_query && !$all_query && !$title_query && !$categ_query && !$concept_query){
463                        // Recherche sur l'auteur uniquement :
464                        $aq=new analyse_query(stripslashes($author_query),0,0,1,1);
465                        if (!$aq->error) {
466                                if ($typdoc_query || $statut_query || $acces_j) {
467
468                                        $restrict ="and responsability_author=author_id and responsability_notice=notice_id ".$restrict." ";
469                                        $members=$aq->get_query_members("authors","concat(author_name,', ',author_rejete)","index_author","author_id");
470
471                                        $requete_count = "select count(distinct author_id) from authors, responsability, notices ";
472                                        $requete_count.= $acces_j;
473                                        $requete_count.= "where ".$members["where"]." ";
474                                        $requete_count.= $restrict;
475
476                                        $requete = "select author_id,".$members["select"]." as pert from authors, responsability, notices ";
477                                        $requete.= $acces_j;
478                                        $requete.= "where ".$members["where"]." ";
479                                        $requete.= $restrict." group by author_id order by pert desc,author_name, author_rejete,author_numero , author_subdivision limit ".($this->page*$author_per_page).",".$author_per_page;
480
481                                } else {
482                                        $requete_count=$aq->get_query_count("authors","concat(author_name,', ',author_rejete)","index_author","author_id");
483                                        $t_query=$aq->get_query_members("authors","concat(author_name,', ',author_rejete)","index_author","author_id");
484                                        $requete="select author_id,".$t_query["select"]." as pert from authors where ".$t_query["where"]." group by author_id order by pert desc,author_name, author_rejete, author_numero , author_subdivision limit ".($this->page*$author_per_page).",".$author_per_page;
485                                }
486
487                                $this->nbresults=@pmb_mysql_result(@pmb_mysql_query($requete_count),0,0);
488                                $this->t_query=@pmb_mysql_query($requete,$dbh);
489                                $this->nbepage=ceil($this->nbresults/$author_per_page);
490                                return AUT_LIST;
491                        }
492                }else{
493                        //sinon, on liste des notices, c'est assez simple...
494                        $no_results = false;
495                        //tous les champs
496                        if($all_query){
497                                //TODO Searcher all_fields, pas le temps de le faire là...
498                                // Recherche sur tous les champs (index global) uniquement :
499                                $aq=new analyse_query(stripslashes($all_query),0,0,1,1);
500                                $aq2=new analyse_query(stripslashes($all_query));
501                                if (!$aq->error) {
502                                        $aq1=new analyse_query(stripslashes($all_query),0,0,1,1);
503                                        $members1=$aq1->get_query_members("notices","index_wew","index_sew","notice_id",$restrict);
504                                        global $pmb_title_ponderation;
505                                        $pert1="+".$members1["select"]."*".$pmb_title_ponderation;
506                                        $members=$aq->get_query_members("notices_global_index","infos_global","index_infos_global","num_notice");
507                                        $members2=$aq2->get_query_members("notices_global_index","infos_global","index_infos_global","num_notice");
508                                        if (($members2["where"]!="()")&&($pmb_default_operator)) {
509                                                $where_term="(".$members["where"]." or ".$members2["where"].")";
510                                        } else {
511                                                $where_term=$members["where"];
512                                        }
513                                        if($docnum_query && $all_query!='*'){
514                                                //Si on a activé la recherche dans les docs num
515                                                //On traite les notices
516                                                $members_num_noti = $aq2->get_query_members("explnum","explnum_index_wew","explnum_index_sew","explnum_notice","",0,0,true);
517                                                $members_num_bull = $aq2->get_query_members("explnum","explnum_index_wew","explnum_index_sew","explnum_bulletin","",0,0,true);
518
519                                                $join = "(
520                                                select tc.notice_id, sum(tc.pert) as pert, tc.typdoc from (
521                                                (
522                                                select notice_id, ".$members["select"]."+".$members1["select"]." as pert,typdoc
523                                                from notices join notices_global_index on num_notice=notice_id $acces_j
524                                                where ".$members["where"]." $restrict
525                                                )
526                                                union
527                                                (
528                                                select notice_id, ".$members_num_noti["select"]." as pert,typdoc
529                                                from notices join explnum on explnum_notice=notice_id $acces_j
530                                                where  ".$members_num_noti["where"]." $restrict
531                                                )
532                                                union
533                                                (
534                                                select if(num_notice,num_notice,bulletin_notice) as notice_id, ".$members_num_bull["select"]." as pert,typdoc
535                                                from explnum join bulletins on explnum_bulletin=bulletin_id ,notices $acces_j
536                                                where bulletin_notice=notice_id and ".$members_num_bull["where"]." $restrict
537                                                )
538                                                )as tc group by notice_id
539                                                )";
540                                                $requete_count = "select count(distinct notice_id) from ($join) as union_table";
541                                                $requete="select uni.notice_id, sum(pert) as pert  from ($join) as uni join notices n on n.notice_id=uni.notice_id group by uni.notice_id order by pert desc, index_serie, tnvol, index_sew ";
542
543                                        } else {
544                                                $restrict.= " and num_notice = notice_id ";
545                                                $requete_count = "select count(1) from notices ";
546                                                $requete_count.= $acces_j;
547                                                $requete_count.= ", notices_global_index ";
548                                                $requete_count.= "where ".$where_term." ";
549                                                $requete_count.= $restrict;
550
551                                                $requete = "select notice_id,".$members["select"]."$pert1 as pert from notices ";
552                                                $requete.= $acces_j;
553                                                $requete.= ", notices_global_index ";
554                                                $requete.= "where $where_term ";
555                                                $requete.= $restrict." order by pert desc, index_serie, tnvol, index_sew ";
556                                        }
557                                        $queries[]=$requete;
558                                }
559                        }
560
561                        //pour la suite, avant de déclencher les recherches, on vérifie si la recherche est différente de celle tous les champs (on s'économise quelques requetes qui ne serviront à rien)
562
563                        //les concepts
564                        if($thesaurus_concepts_active && $concept_query && $concept_query != $all_query){
565                                $concept_searcher = new searcher_records_concepts(stripslashes($concept_query));
566                                if($concept_searcher->get_nb_results()){
567                                        $queries[]=$concept_searcher->get_full_query()." ";
568                                }else{
569                                        $no_results =true;
570                                }
571                        }
572                        //le titre
573                        if($title_query && $title_query != $all_query){
574                                $title_searcher = new searcher_records_title(stripslashes($title_query));
575                                if($title_searcher->get_nb_results()){
576                                        //hack, un petit espace à la fin de la requete nous évite une régression avec le tri...
577                                        $queries[]=$title_searcher->get_full_query()." ";
578                                }else{
579                                        $no_results =true;
580                                }
581                                $this->text_query = $title_sql_query;
582                        }
583                        //auteur
584                        if($author_query && $author_query != $all_query){
585                                $author_searcher = new searcher_records_authors(stripslashes($author_query));
586                                if($author_searcher->get_nb_results()){
587                                        $queries[]=$author_searcher->get_full_query()." ";
588                                }else{
589                                        $no_results =true;
590                                }
591                        }
592                        //catégorie
593                        if($categ_query && $categ_query != $all_query){
594                                if($thesaurus_auto_postage_search && $auto_postage_query){
595                                        $aq_auth=new analyse_query(stripslashes($categ_query),0,0,0,0);
596                                        if (!$aq_auth->error) {
597                                                $members_auth=$aq_auth->get_query_members("categories","path_word_categ","index_path_word_categ","num_noeud");
598                                                $requete_count = "select count(distinct notice_id) from notices ";
599                                                $requete_count.= $acces_j;
600                                                $requete_count.= ", categories, noeuds, notices_categories ";
601                                                $requete_count.= "where (".$members_auth["where"].")  ";
602                                                $requete_count.= "and id_noeud= categories.num_noeud and notices_categories.num_noeud=categories.num_noeud and notcateg_notice = notice_id ";
603                                                $requete_count.= $restrict;
604
605                                                $requete = "select notice_id, ".$members_auth["select"]." as pert from notices ";
606                                                $requete.= $acces_j;
607                                                $requete.= ", categories, noeuds, notices_categories ";
608                                                $requete.= "where (".$members_auth["where"].") ";
609                                                $requete.= "and id_noeud= categories.num_noeud and notices_categories.num_noeud=categories.num_noeud and notcateg_notice = notice_id ";
610                                                $requete.= $restrict." group by notice_id ";
611                                                $requete.= "order by pert desc ";
612
613                                                $nbresults=@pmb_mysql_result(@pmb_mysql_query($requete_count),0,0);
614                                                if($nbresults){
615                                                        $queries[]=$requete;
616                                                }else{
617                                                        $no_results = true;
618                                                }
619                                        }
620                                }else{
621                                        $categ_searcher = new searcher_records_categories(stripslashes($categ_query));
622                                        if($categ_searcher->get_nb_results()){
623                                                $queries[]=$categ_searcher->get_full_query()." ";
624                                        }else{
625                                                $no_results = true;
626                                        }
627                                }
628                        }
629
630                        //on fait un et donc si un élément ne renvoi rien ,on s'embete pas avec les jointures...
631                        if($no_results){
632                                $this->nbresults = 0;
633                                $this->text_query = "select notice_id from notices where notice_id = 0 ";
634                        }else{
635                                //TODO le tri sur la pertinance desc, titre devrait être automatique...
636                                        $from = "";
637                                        $select_pert = "";
638                                        for($i=0 ; $i<count($queries) ; $i++){
639                                                if($i==0){
640                                                        $from = "(".$queries[$i].") as t".$i;
641                                                        $select_pert = "t".$i.".pert";
642                                                }else {
643                                                        $from.= " inner join (".$queries[$i].") as t".$i." on t".$i.".notice_id = t".($i-1).".notice_id";
644                                                        $select_pert.= " + t".$i.".pert";
645                                                }
646                                        }
647                                        $this->text_query = "select t0.notice_id, (".$select_pert.") as pert from ".$from." join notices on t0.notice_id = notices.notice_id group by t0.notice_id  order by pert desc, notices.index_sew ";
648                                $result = pmb_mysql_query($this->text_query,$dbh);
649                                $this->nbresults = pmb_mysql_num_rows($result);
650                        }
651                        $this->nbepage=ceil($this->nbresults/$this->nb_per_page);
652                        return NOTICE_LIST;
653                }
654        }
655
656
657        function make_aut_search() {
658                global $msg;
659                global $charset;
660                global $nb_per_page_a_search;
661                global $typdoc_query, $statut_query;
662                global $acces_j;
663                global $aut_type;
664
665                $restrict='';
666                if ($typdoc_query) $restrict = "and typdoc='".$typdoc_query."' ";
667                if ($statut_query) $restrict.= "and statut='".$statut_query."' ";
668
669                if ($nb_per_page_a_search) $this->nb_per_page=$nb_per_page_a_search; else $this->nb_per_page=3;
670
671                switch ($aut_type) {
672                        case 'concept':
673                                $requete_count = "select count(num_object) from index_concept ";
674                                $requete_count .= $acces_j;
675                                $requete_count .= "where num_concept = ".$this->id." and type_object = ".TYPE_NOTICE." ";
676                                $requete_count .= $restrict;
677                               
678                                $requete = "select num_object as notice_id from index_concept ";
679                                $requete .= $acces_j;
680                                $requete .= "where num_concept = ".$this->id." and type_object = ".TYPE_NOTICE." ";
681                                $requete .= $restrict." ";
682                                break;
683                        default:
684                                $requete_count = "select count(distinct notice_id) from notices ";
685                                $requete_count.= $acces_j;
686                                $requete_count.= ", responsability where notice_id=responsability_notice and responsability_author=".$this->id." ";
687                                $requete_count.= $restrict;
688               
689                                $requete = "select distinct notice_id from notices ";
690                                $requete.= $acces_j;
691                                $requete.= ", responsability where notice_id=responsability_notice and responsability_author=".$this->id." ";
692                                $requete.= $restrict." ";
693                                $requete.= "order by index_serie, tnvol, index_sew ";
694                //              $requete.= "limit ".($this->page*$this->nb_per_page).", ".$this->nb_per_page;
695                                break;
696                }
697
698                $this->nbresults=@pmb_mysql_result(@pmb_mysql_query($requete_count),0,0);
699                $this->t_query=@pmb_mysql_query($requete);
700                $this->nbepage=ceil($this->nbresults/$this->nb_per_page);
701                $this->text_query=$requete;
702        }
703
704        function store_search() {
705                global $title_query,$all_query, $author_query,$typdoc_query, $statut_query,$categ_query,$docnum_query,$pmb_indexation_docnum;
706                global $thesaurus_concepts_active,$concept_query;
707                global $charset;
708                $champs="<input type='hidden' name='title_query' value='".htmlentities(stripslashes($title_query),ENT_QUOTES,$charset)."'/>";
709                $champs.="<input type='hidden' name='all_query' value='".htmlentities(stripslashes($all_query),ENT_QUOTES,$charset)."'/>";
710                $champs.="<input type='hidden' name='author_query' value='".htmlentities(stripslashes($author_query),ENT_QUOTES,$charset)."'/>";
711                $champs.="<input type='hidden' name='typdoc_query' value='".htmlentities(stripslashes($typdoc_query),ENT_QUOTES,$charset)."'/>";
712                $champs.="<input type='hidden' name='statut_query' value='".htmlentities(stripslashes($statut_query),ENT_QUOTES,$charset)."'/>";
713                $champs.="<input type='hidden' name='categ_query' value='".htmlentities(stripslashes($categ_query),ENT_QUOTES,$charset)."'/>";
714                if($thesaurus_concepts_active){
715                        $champs.="<input type='hidden' name='concept_query' value='".htmlentities(stripslashes($concept_query),ENT_QUOTES,$charset)."'/>";
716                }
717                if ($pmb_indexation_docnum) {
718                        $champs.="<input type='hidden' name='docnum_query' value='".htmlentities(stripslashes($docnum_query),ENT_QUOTES,$charset)."'/>";
719                }
720                $this->store_form=str_replace("!!first_search_variables!!",$champs,$this->store_form);
721                print $this->store_form;
722        }
723
724        function aut_store_search() {
725                global $typdoc_query, $statut_query, $aut_type;
726                global $charset;
727                $champs="<input type='hidden' name='aut_id' value='".htmlentities(stripslashes($this->id),ENT_QUOTES,$charset)."'/>";
728                $champs.="<input type='hidden' name='typdoc_query' value='".htmlentities(stripslashes($typdoc_query),ENT_QUOTES,$charset)."'/>";
729                $champs.="<input type='hidden' name='statut_query' value='".htmlentities(stripslashes($statut_query),ENT_QUOTES,$charset)."'/>";
730                $champs.="<input type='hidden' name='aut_type' value='".htmlentities(stripslashes($aut_type),ENT_QUOTES,$charset)."'/>";
731                $this->store_form=str_replace("!!first_search_variables!!",$champs,$this->store_form);
732                print $this->store_form;
733        }
734
735        function aut_list() {
736                global $msg;
737                global $charset;
738                global $author_query;
739                global $typdoc_query, $statut_query;
740                global $pmb_allow_external_search;
741
742                $research.="<b>${msg[234]}</b>&nbsp;".htmlentities(stripslashes($author_query),ENT_QUOTES,$charset);
743                $this->human_query=$research;
744                $this->human_aut_query=$research;
745
746                if ($this->nbresults) {
747                                $research .= " => ".$this->nbresults." ".$msg["search_resultat"];
748                                print pmb_bidi("<div class='othersearchinfo'>$research</div>");
749                                $author_list="<table>\n";
750                                $parity = 0 ;
751                                while ($author=@pmb_mysql_fetch_object($this->t_query)) {
752                                        if ($parity % 2) {
753                                                $pair_impair = "even";
754                                        } else {
755                                                $pair_impair = "odd";
756                                        }
757                                        $parity += 1;
758
759                                        $auteur = new auteur($author->author_id);
760
761                                        $notice_count_sql = "SELECT count(*) FROM responsability WHERE responsability_author = ".$author->author_id;
762                                        $notice_count = pmb_mysql_result(pmb_mysql_query($notice_count_sql), 0, 0);
763
764                                        if($auteur->see) {
765                                                $link = $this->base_url."&aut_id=".$auteur->id."&etat=aut_search&typdoc_query=".$typdoc_query."&statut_query=".$statut_query;
766                                                $link_see = $this->base_url."&aut_id=".$auteur->see."&etat=aut_search&typdoc_query=".$typdoc_query."&statut_query=".$statut_query;
767                                                $forme = $auteur->display.".&nbsp;- ".$msg["see"]."&nbsp;: <a href='$link_see' class='lien_gestion'>$auteur->see_libelle</a> ";
768                                        } else {
769                                                $link = $this->base_url."&aut_id=".$auteur->id."&etat=aut_search&typdoc_query=".$typdoc_query."&statut_query=".$statut_query;
770                                                $forme = $auteur->display;
771                                        }
772
773                                        $tr_javascript=" onmouseover=\"this.className='surbrillance'\" onmouseout=\"this.className='$pair_impair'\" onmousedown=\"document.location='$link';\" ";
774                                        $author_list .= "<tr class='$pair_impair' $tr_javascript style='cursor: pointer'><td>$forme</td><td>".$notice_count."</td></tr>";
775                                }
776                                $author_list.="</table>\n";
777                                print pmb_bidi($author_list);
778                } else {
779                                $this->show_form();
780                                $cles="<strong>".htmlentities(stripslashes($author_query),ENT_QUOTES, $charset)."</strong>";
781                                //if ($pmb_allow_external_search) $external="<a href='catalog.php?categ=search&mode=7&from_mode=0&external_type=simple' title='".$msg["connecteurs_external_search_sources"]."'>".$msg["connecteurs_external_search_sources"]."</a>";
782                                //error_message($msg[357], sprintf($msg["connecteurs_no_title"],$cles,$external), 0, "./catalog.php?categ=search&mode=0");
783                                error_message($msg[357], $msg[362]." ".$cles, 0, "./catalog.php?categ=search&mode=0");
784                }
785        }
786
787
788        function notice_list_common($title) {
789                global $begin_result_liste;
790                global $end_result_liste;
791                global $msg;
792                global $charset;
793                global $pmb_nb_max_tri;
794                global $title_query,$author_query, $all_query,$categ_query;
795                global $link,$link_expl,$link_explnum,$link_serial,$link_analysis,$link_bulletin,$link_explnum_serial,$link_explnum_analysis,$link_explnum_bulletin,$link_notice_bulletin;
796                global $pmb_allow_external_search;
797                global $load_tablist_js;
798
799                if ($this->nbresults) {
800                                $research=$title;
801                                $research .= " => ".sprintf($msg["searcher_results"],$this->nbresults);
802                                print pmb_bidi("<div class='othersearchinfo'>$research</div>");
803                                print $this->get_current_search_map(0);
804                                print $begin_result_liste;
805                                $load_tablist_js=1;
806                                //Affichage des liens paniers et impression
807                                if ($this->rec_history) {
808
809                                        if (($this->etat=='first_search')&&((string)$this->page=="")) {
810                                                $current=count($_SESSION["session_history"]);
811                                        } else {
812                                                $current=$_SESSION["CURRENT"];
813                                        }
814                                        if ($current!==false) {
815                                                echo "&nbsp;<a href='#' onClick=\"openPopUp('./print_cart.php?current_print=$current&action=print_prepare','print',600,700,-2,-2,'scrollbars=yes,menubar=0,resizable=yes'); return false;\">";
816                                                echo "<img src='./images/basket_small_20x20.gif' border='0' align='center' alt=\"".$msg["histo_add_to_cart"]."\" title=\"".$msg["histo_add_to_cart"]."\"></a>&nbsp;";
817                                                $tri_id_info = $_SESSION["tri"] ? "&sort_id=".$_SESSION["tri"] : "";
818                                                echo "<a href='#' onClick=\"openPopUp('./print.php?current_print=$current&action_print=print_prepare".$tri_id_info."','print',500,600,-2,-2,'scrollbars=yes,menubar=0'); return false;\">";
819                                                echo "<img src='./images/print.gif' border='0' align='center' alt=\"".$msg["histo_print"]."\" title=\"".$msg["histo_print"]."\"/></a>&nbsp;";
820                                                echo "<a href='#' onClick=\"openPopUp('./download.php?current_download=$current&action_download=download_prepare".$tri_id_info."','download',500,600,-2,-2,'scrollbars=yes,menubar=0'); return false;\">";
821                                                echo "<img src='./images/upload_docnum.gif' border='0' align='center' alt=\"".$msg["docnum_download"]."\" title=\"".$msg["docnum_download"]."\"/></a>";
822                                                if ($pmb_allow_external_search) {
823                                                        echo "&nbsp;<a href='catalog.php?categ=search&mode=7&from_mode=0&external_type=simple' title='".$msg["connecteurs_external_search_sources"]."'>";
824                                                        echo "<img src='./images/external_search.png' border='0' align='center' alt=\"".$msg["connecteurs_external_search_sources"]."\"/></a>";
825                                                }
826
827                                                // on affiche l'icone de tri seulement si on a atteint un nb maxi de résultats
828                                                if ($this->nbresults<=$pmb_nb_max_tri) {
829
830                                                        //affichage de l'icone de tri
831                                                        echo "<a href=# onClick=\"document.getElementById('history').src='./sort.php?type_tri=notices'; document.getElementById('history').style.display='';return false;\" ";
832                                                        echo "alt=\"".$msg['tris_dispos']."\" title=\"".$msg['tris_dispos']."\">";
833                                                        echo "<img src=./images/orderby_az.gif align=middle hspace=3></a>";
834
835                                                        //si on a un tri actif on affiche sa description
836                                                        if ($_SESSION["tri"]) {
837                                                                echo $msg['tri_par']." ".$this->sort->descriptionTriParId($_SESSION["tri"]);
838                                                        }
839                                                }
840                                        }
841                                }
842
843                                // on lance la requête
844                                $recherche_ajax_mode=0;
845                                $nb=0;
846                                while(($nz=@pmb_mysql_fetch_object($this->t_query))) {
847                                        if($nb++>5) $recherche_ajax_mode=1;
848                                        $n=@pmb_mysql_fetch_object(@pmb_mysql_query("SELECT * FROM notices WHERE notice_id=".$nz->notice_id));
849
850                                        switch ($n->niveau_biblio) {
851                                                case 's' :
852                                                        // on a affaire à un périodique
853                                                        $serial = new serial_display($n, 6, $link_serial, $link_analysis, $link_bulletin, "", $link_explnum_serial, 0, 0, 1, 1, true, 1 ,$recherche_ajax_mode);
854                                                        print $serial->result;
855                                                        break;
856                                                case 'a' :
857                                                        // on a affaire à un article
858                                                        $serial = new serial_display($n, 6, $link_serial, $link_analysis, $link_bulletin, "", $link_explnum_analysis, 0, 0, 1, 1, true, 1 ,$recherche_ajax_mode);
859                                                        print $serial->result;
860                                                        break;
861                                                case 'b' :
862                                                        // on a affaire à un bulletin
863                                                        $rqt_bull_info = "SELECT s.notice_id as id_notice_mere, bulletin_id as id_du_bulletin, b.notice_id as id_notice_bulletin FROM notices as s, notices as b, bulletins WHERE b.notice_id=$n->notice_id and s.notice_id=bulletin_notice and num_notice=b.notice_id";
864                                                        $bull_ids=@pmb_mysql_fetch_object(pmb_mysql_query($rqt_bull_info));
865                                                        //si on a les droits
866                                                        if(SESSrights & CATALOGAGE_AUTH){
867                                                                //on teste la validité du lien
868                                                                if(!$link_notice_bulletin){
869                                                                        $real_link_notice_bulletin = './catalog.php?categ=serials&sub=bulletinage&action=view&bul_id='.$bull_ids->id_du_bulletin;
870                                                                } else {
871                                                                        $real_link_notice_bulletin = str_replace("!!id!!",$bull_ids->id_du_bulletin,$link_notice_bulletin);
872                                                                }
873                                                        } elseif($link_notice_bulletin) {
874                                                                $real_link_notice_bulletin = str_replace("!!id!!",$bull_ids->id_du_bulletin,$link_notice_bulletin);
875                                                        }
876                                                        $link_explnum_bulletin = str_replace("!!bul_id!!",$bull_ids->id_du_bulletin,$link_explnum_bulletin);
877                                                        $display = new mono_display($n, 6, $real_link_notice_bulletin, 1, $link_expl, '', $link_explnum_bulletin,1, 0, 1, 1, "", 1  , false,true,$recherche_ajax_mode);
878                                                        print $display->result;
879                                                        break;
880                                                default:
881                                                case 'm' :
882                                                        // notice de monographie
883                                                        $display = new mono_display($n, 6, $link, 1, $link_expl, '', $link_explnum,1, 0, 1, 1, "", 1   , false,true,$recherche_ajax_mode,1);
884                                                        print $display->result;
885                                                        break ;
886                                        }
887                                }
888                                // fin de liste
889                                print $end_result_liste;
890                } else {
891                        $this->show_form();
892                        $cles="<strong>".$title."</strong>";
893                        if ($pmb_allow_external_search) $external="<a href='catalog.php?categ=search&mode=7&from_mode=0&external_type=simple' title='".$msg["connecteurs_external_search_sources"]."'>".$msg["connecteurs_external_search_sources"]."</a>";
894                        error_message($msg[357], sprintf($msg["connecteurs_no_title"],$cles,$external), 0, "./catalog.php?categ=search&mode=0");
895                }
896        }
897
898
899        function notice_list() {
900                global $msg;
901                global $charset;
902                global $title_query,$author_query,$all_query,$categ_query;
903                global $thesaurus_concepts_active,$concept_query;
904                global $typdoc_query, $statut_query,$dbh;
905
906                if($this->docnum){
907                        $libelle = " [".$msg[docnum_search_with]."]";
908                } else $libelle ='';
909                if ($title_query) {
910                        $research .= "<b>${msg[233]}</b>&nbsp;".htmlentities(stripslashes($title_query),ENT_QUOTES,$charset);
911                }
912                if ($all_query && !$title_query) {
913                        $research.="<b>${msg[global_search]}$libelle</b>&nbsp;".htmlentities(stripslashes($all_query),ENT_QUOTES,$charset);
914                } else if (($all_query && $title_query)) {
915                        $research.= ", <b>${msg[global_search]}$libelle</b>&nbsp;".htmlentities(stripslashes($all_query),ENT_QUOTES,$charset);
916                }
917                if ($categ_query) {
918                        if ($research != "") $research .= ", ";
919                        $research .= "<b>${msg["search_categorie_title"]}</b>&nbsp;".htmlentities(stripslashes($categ_query),ENT_QUOTES,$charset);
920                }
921                if ($author_query) {
922                        $research.=", <b>${msg[234]}</b>&nbsp;".htmlentities(stripslashes($author_query),ENT_QUOTES,$charset);
923                }
924
925                if ($thesaurus_concepts_active && $concept_query) {
926                        if ($research != "") $research .= ", ";
927                        $research.="<b>${msg['search_concept_title']}</b>&nbsp;".htmlentities(stripslashes($concept_query),ENT_QUOTES,$charset);
928                }
929
930                if ($typdoc_query){
931                        if ($research != "") $research .= ", ";
932                        $doctype = new marc_list('doctype');
933                        $research.= "<b>".$msg["17"].$msg["1901"]."</b>&nbsp;".$doctype->table[$typdoc_query];
934                }
935                if ($statut_query){
936                        if ($research != "") $research .= ", ";
937                        $query = "SELECT gestion_libelle FROM notice_statut WHERE id_notice_statut='".$statut_query."'";
938                        $result = pmb_mysql_query($query, $dbh);
939                        if($result && pmb_mysql_num_rows($result)){
940                                $row=pmb_mysql_fetch_object($result);
941                                $statut_libelle=$row->gestion_libelle;
942                        }else{
943                                $statut_libelle="";
944                        }
945                        $research.= "<b>".$msg["noti_statut_noti"].$msg["1901"]."</b>&nbsp;".htmlentities(stripslashes($statut_libelle),ENT_QUOTES,$charset);
946                }
947
948                $this->human_query=$research;
949                $this->human_notice_query=$research;
950
951                $this->notice_list_common($research);
952        }
953
954
955        function aut_notice_list() {
956                global $msg;
957                global $charset;
958                global $aut_type;
959
960                switch ($aut_type) {
961                        case 'concept' :
962                                $concept = new concept($this->id);
963                                $research.="<b>${msg['search_concept_title']}</b>&nbsp;".$concept->get_display_label();
964                                break;
965                        default :
966                                $auteur = new auteur($this->id);
967                                $research.="<b>${msg[234]}</b>&nbsp;".$auteur->display;
968                                break;
969                }
970                $this->human_notice_query=$research;
971
972                $this->notice_list_common($research);
973        }
974
975
976        function rec_env() {
977                global $msg;
978                switch ($this->etat) {
979                                case 'first_search':
980                                        if ((string)$this->page=="") {
981                                                $_SESSION["CURRENT"]=count($_SESSION["session_history"]);
982                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]["URI"]=$this->base_url;
983                                                $_POST["etat"]="";
984                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]['POST']=$_POST;
985                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]['GET']=$_GET;
986                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]=array();
987                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]=array();
988                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]["HUMAN_QUERY"]=$this->human_query;
989                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]["HUMAN_TITLE"]=$msg["354"];
990                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]["DOCNUM_QUERY"]=$this->docnum;
991                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]["AUTO_POSTAGE_QUERY"]=$this->auto_postage_query;
992                                        }
993                                        if ((string)$this->page=="") { $_POST["page"]=0; $page=0; }
994                                        if (($this->first_search_result==AUT_LIST)&&($_SESSION["CURRENT"]!==false)) {
995                                                $_POST["etat"]="first_search";
996                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]['URI']=$this->base_url;
997                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]['POST']=$_POST;
998                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]['GET']=$_GET;
999                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]['PAGE']=$this->page+1;
1000                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]["HUMAN_QUERY"]=$this->human_aut_query;
1001                                        }
1002                                        if (($this->first_search_result==NOTICE_LIST)&&($_SESSION["CURRENT"]!==false)) {
1003                                                $_POST["etat"]="first_search";
1004                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['URI']=$this->base_url;
1005                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['POST']=$_POST;
1006                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['GET']=$_GET;
1007                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['TEXT_QUERY']=$this->text_query;
1008                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['PAGE']=$this->page+1;
1009                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]["HUMAN_QUERY"]=$this->human_notice_query;
1010                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]["DOCNUM_QUERY"]=$this->docnum;
1011                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]["AUTO_POSTAGE_QUERY"]=$this->auto_postage_query;
1012                                        }
1013                                        break;
1014                                case 'aut_search':
1015                                        if ($_SESSION["CURRENT"]!==false) {
1016                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['URI']=$this->base_url;
1017                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['POST']=$_POST;
1018                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['GET']=$_GET;
1019                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['PAGE']=$this->page+1;
1020                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['TEXT_QUERY']=$this->text_query;
1021                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['HUMAN_QUERY']=$this->human_notice_query;
1022                                        }
1023                                        break;
1024                }
1025                $_SESSION["last_required"]=false;
1026        }
1027
1028        static function convert_simple_multi($id_champ) {
1029                global $search;
1030
1031                $x=0;
1032
1033                if ($_SESSION["session_history"][$id_champ]["NOTI"]["POST"]["title_query"]) {
1034                        $op_="BOOLEAN";
1035                        $valeur_champ=$_SESSION["session_history"][$id_champ]["NOTI"]["POST"]["title_query"];
1036
1037                        $search[$x]="f_6";
1038                        //opérateur
1039                $op="op_".$x."_".$search[$x];
1040                global $$op;
1041                $$op=$op_;
1042
1043                //contenu de la recherche
1044                $field="field_".$x."_".$search[$x];
1045                $field_=array();
1046                $field_[0]=$valeur_champ;
1047                global $$field;
1048                $$field=$field_;
1049
1050                //opérateur inter-champ
1051                $inter="inter_".$x."_".$search[$x];
1052                global $$inter;
1053                $$inter="";
1054
1055                //variables auxiliaires
1056                $fieldvar_="fieldvar_".$x."_".$search[$x];
1057                global $$fieldvar_;
1058                $$fieldvar_="";
1059                $fieldvar=$$fieldvar_;
1060                        $x++;
1061                }
1062                if ($_SESSION["session_history"][$id_champ]["NOTI"]["POST"]["all_query"]) {
1063                        $valeur_champ=$_SESSION["session_history"][$id_champ]["NOTI"]["POST"]["all_query"];
1064                        $op_="BOOLEAN";
1065
1066                        $search[$x]="f_7";
1067                        //opérateur
1068                $op="op_".$x."_".$search[$x];
1069                global $$op;
1070                $$op=$op_;
1071
1072                //contenu de la recherche
1073                $field="field_".$x."_".$search[$x];
1074                $field_=array();
1075                $field_[0]=$valeur_champ;
1076                global $$field;
1077                $$field=$field_;
1078
1079                //opérateur inter-champ
1080                $inter="inter_".$x."_".$search[$x];
1081                global $$inter;
1082                $$inter="";
1083
1084                //variables auxiliaires
1085                $fieldvar_="fieldvar_".$x."_".$search[$x];
1086                global $$fieldvar_;
1087                $t["is_num"][0]=$_SESSION["session_history"][$id_champ]["NOTI"]["DOCNUM_QUERY"];
1088                $t["ck_affiche"][0]=$_SESSION["session_history"][$id_champ]["NOTI"]["DOCNUM_QUERY"];
1089                $$fieldvar_=$t;
1090                $fieldvar=$$fieldvar_;
1091                        $x++;
1092                }
1093                if ($_SESSION["session_history"][$id_champ]["NOTI"]["POST"]["author_query"]) {
1094                        $valeur_champ=$_SESSION["session_history"][$id_champ]["NOTI"]["POST"]["author_query"];
1095
1096                        $op_="BOOLEAN";
1097                        $search[$x]="f_8";
1098
1099                        //opérateur
1100                $op="op_".$x."_".$search[$x];
1101                global $$op;
1102                $$op=$op_;
1103
1104                //contenu de la recherche
1105                $field="field_".$x."_".$search[$x];
1106                $field_=array();
1107                $field_[0]=$valeur_champ;
1108                global $$field;
1109                $$field=$field_;
1110
1111                //opérateur inter-champ
1112                $inter="inter_".$x."_".$search[$x];
1113                global $$inter;
1114                if ($x>0) {
1115                        $$inter="and";
1116                } else {
1117                        $$inter="";
1118                }
1119                //variables auxiliaires
1120                $fieldvar_="fieldvar_".$x."_".$search[$x];
1121                global $$fieldvar_;
1122                $$fieldvar_="";
1123                $fieldvar=$$fieldvar_;
1124                        $x++;
1125                } else {
1126                        if ($_SESSION["session_history"][$id_champ]["NOTI"]["GET"]["aut_id"]) {
1127                                $valeur_champ=$_SESSION["session_history"][$id_champ]["NOTI"]["GET"]["aut_id"];
1128
1129                                $op_="EQ";
1130                                $search[$x]="f_8";
1131                                //opérateur
1132                        $op="op_".$x."_".$search[$x];
1133                        global $$op;
1134                        $$op=$op_;
1135
1136                        //contenu de la recherche
1137                        $field="field_".$x."_".$search[$x];
1138                        $field_=array();
1139                        $field_[0]=$valeur_champ;
1140                        global $$field;
1141                        $$field=$field_;
1142
1143                        //opérateur inter-champ
1144                        $inter="inter_".$x."_".$search[$x];
1145                        global $$inter;
1146                        if ($x>0) {
1147                                $$inter="and";
1148                        } else {
1149                                $$inter="";
1150                        }
1151
1152                        //variables auxiliaires
1153                        $fieldvar_="fieldvar_".$x."_".$search[$x];
1154                        global $$fieldvar_;
1155                        $$fieldvar_="";
1156                        $fieldvar=$$fieldvar_;
1157                                $x++;
1158                        }
1159                }
1160                if ($_SESSION["session_history"][$id_champ]["NOTI"]["POST"]["typdoc_query"]) {
1161                        $valeur_champ=$_SESSION["session_history"][$id_champ]["NOTI"]["POST"]["typdoc_query"];
1162                        $op_="EQ";
1163                        $search[$x]="f_9";
1164                        //opérateur
1165                $op="op_".$x."_".$search[$x];
1166                global $$op;
1167                $$op=$op_;
1168
1169                //contenu de la recherche
1170                $field="field_".$x."_".$search[$x];
1171                $field_=array();
1172                $field_[0]=$valeur_champ;
1173                global $$field;
1174                $$field=$field_;
1175
1176                //opérateur inter-champ
1177                $inter="inter_".$x."_".$search[$x];
1178                global $$inter;
1179                if ($x>0) {
1180                        $$inter="and";
1181                } else {
1182                        $$inter="";
1183                }
1184                //variables auxiliaires
1185                $fieldvar_="fieldvar_".$x."_".$search[$x];
1186                global $$fieldvar_;
1187                $$fieldvar_="";
1188                $fieldvar=$$fieldvar_;
1189                        $x++;
1190                }
1191                if ($_SESSION["session_history"][$id_champ]["NOTI"]["POST"]["statut_query"]) {
1192                        $valeur_champ=$_SESSION["session_history"][$id_champ]["NOTI"]["POST"]["statut_query"];
1193                        $op_="EQ";
1194                        $search[$x]="f_10";
1195                        //opérateur
1196                $op="op_".$x."_".$search[$x];
1197                global $$op;
1198                $$op=$op_;
1199
1200                //contenu de la recherche
1201                $field="field_".$x."_".$search[$x];
1202                $field_=array();
1203                $field_[0]=$valeur_champ;
1204                global $$field;
1205                $$field=$field_;
1206
1207                //opérateur inter-champ
1208                $inter="inter_".$x."_".$search[$x];
1209                global $$inter;
1210                if ($x>0) {
1211                        $$inter="and";
1212                } else {
1213                        $$inter="";
1214                }
1215                //variables auxiliaires
1216                $fieldvar_="fieldvar_".$x."_".$search[$x];
1217                global $$fieldvar_;
1218                $$fieldvar_="";
1219                $fieldvar=$$fieldvar_;
1220                }
1221        }
1222
1223        static function convert_simple_multi_unimarc($id_champ) {
1224                global $search;
1225
1226                $x=0;
1227
1228                if ($_SESSION["session_history"][$id_champ]["NOTI"]["POST"]["title_query"]) {
1229                        $op_="BOOLEAN";
1230                        $valeur_champ=$_SESSION["session_history"][$id_champ]["NOTI"]["POST"]["title_query"];
1231
1232                        $search[$x]="f_6";
1233                        //opérateur
1234                $op="op_".$x."_".$search[$x];
1235                global $$op;
1236                $$op=$op_;
1237
1238                //contenu de la recherche
1239                $field="field_".$x."_".$search[$x];
1240                $field_=array();
1241                $field_[0]=$valeur_champ;
1242                global $$field;
1243                $$field=$field_;
1244
1245                //opérateur inter-champ
1246                $inter="inter_".$x."_".$search[$x];
1247                global $$inter;
1248                $$inter="";
1249
1250                //variables auxiliaires
1251                $fieldvar_="fieldvar_".$x."_".$search[$x];
1252                global $$fieldvar_;
1253                $$fieldvar_="";
1254                $fieldvar=$$fieldvar_;
1255                        $x++;
1256                }
1257                if ($_SESSION["session_history"][$id_champ]["NOTI"]["POST"]["all_query"]) {
1258                        $valeur_champ=$_SESSION["session_history"][$id_champ]["NOTI"]["POST"]["all_query"];
1259                        $op_="BOOLEAN";
1260
1261                        $search[$x]="f_7";
1262                        //opérateur
1263                $op="op_".$x."_".$search[$x];
1264                global $$op;
1265                $$op=$op_;
1266
1267                //contenu de la recherche
1268                $field="field_".$x."_".$search[$x];
1269                $field_=array();
1270                $field_[0]=$valeur_champ;
1271                global $$field;
1272                $$field=$field_;
1273
1274                //opérateur inter-champ
1275                $inter="inter_".$x."_".$search[$x];
1276                global $$inter;
1277                $$inter="";
1278
1279                //variables auxiliaires
1280                $fieldvar_="fieldvar_".$x."_".$search[$x];
1281                global $$fieldvar_;
1282                $$fieldvar_="";
1283                $fieldvar=$$fieldvar_;
1284                        $x++;
1285                }
1286                if ($_SESSION["session_history"][$id_champ]["NOTI"]["POST"]["author_query"]) {
1287                        $valeur_champ=$_SESSION["session_history"][$id_champ]["NOTI"]["POST"]["author_query"];
1288
1289                        $op_="BOOLEAN";
1290                        $search[$x]="f_8";
1291
1292                        //opérateur
1293                $op="op_".$x."_".$search[$x];
1294                global $$op;
1295                $$op=$op_;
1296
1297                //contenu de la recherche
1298                $field="field_".$x."_".$search[$x];
1299                $field_=array();
1300                $field_[0]=$valeur_champ;
1301                global $$field;
1302                $$field=$field_;
1303
1304                //opérateur inter-champ
1305                $inter="inter_".$x."_".$search[$x];
1306                global $$inter;
1307                if ($x>0) {
1308                        $$inter="and";
1309                } else {
1310                        $$inter="";
1311                }
1312                //variables auxiliaires
1313                $fieldvar_="fieldvar_".$x."_".$search[$x];
1314                global $$fieldvar_;
1315                $$fieldvar_="";
1316                $fieldvar=$$fieldvar_;
1317                        $x++;
1318                } else {
1319                        if ($_SESSION["session_history"][$id_champ]["NOTI"]["GET"]["aut_id"]) {
1320                                $author_id=$_SESSION["session_history"][$id_champ]["NOTI"]["GET"]["aut_id"];
1321                                $requete="select concat(author_name,', ',author_rejete) from authors where author_id=".$author_id;
1322                                $r_author=pmb_mysql_query($requete);
1323                                if (@pmb_mysql_num_rows($r_author)) {
1324                                        $valeur_champ=pmb_mysql_result($r_author,0,0);
1325                                }
1326                                $op_="BOOLEAN";
1327                                $search[$x]="f_8";
1328                                //opérateur
1329                        $op="op_".$x."_".$search[$x];
1330                        global $$op;
1331                        $$op=$op_;
1332
1333                        //contenu de la recherche
1334                        $field="field_".$x."_".$search[$x];
1335                        $field_=array();
1336                        $field_[0]=$valeur_champ;
1337                        global $$field;
1338                        $$field=$field_;
1339
1340                        //opérateur inter-champ
1341                        $inter="inter_".$x."_".$search[$x];
1342                        global $$inter;
1343                        if ($x>0) {
1344                                $$inter="and";
1345                        } else {
1346                                $$inter="";
1347                        }
1348
1349                        //variables auxiliaires
1350                        $fieldvar_="fieldvar_".$x."_".$search[$x];
1351                        global $$fieldvar_;
1352                        $$fieldvar_="";
1353                        $fieldvar=$$fieldvar_;
1354                                $x++;
1355                        }
1356                }
1357                if ($_SESSION["session_history"][$id_champ]["NOTI"]["POST"]["typdoc_query"]) {
1358                        $valeur_champ=$_SESSION["session_history"][$id_champ]["NOTI"]["POST"]["typdoc_query"];
1359                        $op_="EQ";
1360                        $search[$x]="f_9";
1361                        //opérateur
1362                $op="op_".$x."_".$search[$x];
1363                global $$op;
1364                $$op=$op_;
1365
1366                //contenu de la recherche
1367                $field="field_".$x."_".$search[$x];
1368                $field_=array();
1369                $field_[0]=$valeur_champ;
1370                global $$field;
1371                $$field=$field_;
1372
1373                //opérateur inter-champ
1374                $inter="inter_".$x."_".$search[$x];
1375                global $$inter;
1376                if ($x>0) {
1377                        $$inter="and";
1378                } else {
1379                        $$inter="";
1380                }
1381                //variables auxiliaires
1382                $fieldvar_="fieldvar_".$x."_".$search[$x];
1383                global $$fieldvar_;
1384                $$fieldvar_="";
1385                $fieldvar=$$fieldvar_;
1386                        $x++;
1387                }
1388                //Pas de statut !
1389        }
1390}
1391
1392class searcher_subject extends searcher {
1393        var $s_query="";
1394        var $i_query="";
1395        var $id_query="";
1396        var $nb_s;
1397        var $nb_i;
1398        var $nb_id;
1399        var $t_query;
1400
1401
1402        function show_form() {
1403                global $search_subject;
1404                global $search_indexint,$search_indexint_id;
1405                global $msg;
1406                global $charset;
1407                global $current_module;
1408                global $select3_prop,$search_form_categ,$browser;
1409                global $browser_url;
1410                global $thesaurus_mode_pmb;
1411                global $id_thes;
1412
1413                //affichage du selectionneur de thesaurus et du lien vers les thésaurus
1414                $liste_thesaurus = thesaurus::getThesaurusList();
1415                $sel_thesaurus = '';
1416                $lien_thesaurus = '';
1417
1418                if ($thesaurus_mode_pmb != 0) {  //la liste des thesaurus n'est pas affichée en mode monothesaurus
1419                        $sel_thesaurus = "<select class='saisie-30em' id='id_thes' name='id_thes' ";
1420                        $sel_thesaurus.= "onchange = \"document.location = '".$this->base_url."&id_thes='+document.getElementById('id_thes').value; \">" ;
1421                        foreach($liste_thesaurus as $id_thesaurus=>$libelle_thesaurus) {
1422                                $sel_thesaurus.= "<option value='".$id_thesaurus."' "; ;
1423                                if ($id_thesaurus == $id_thes) $sel_thesaurus.= " selected";
1424                                $sel_thesaurus.= ">".htmlentities($libelle_thesaurus,ENT_QUOTES,$charset)."</option>";
1425                        }
1426                        $sel_thesaurus.= "<option value=-1 ";
1427                        if ($id_thes == -1) $sel_thesaurus.= "selected ";
1428                        $sel_thesaurus.= ">".htmlentities($msg['thes_all'],ENT_QUOTES,$charset)."</option>";
1429                        $sel_thesaurus.= "</select>&nbsp;";
1430
1431                }
1432                $search_form_categ=str_replace("<!-- sel_thesaurus -->",$sel_thesaurus,$search_form_categ);
1433
1434
1435                //affichage du choix de langue pour la recherche
1436                //              $sel_langue = '';
1437                //              $sel_langue = "<div class='row'>";
1438                //              $sel_langue.= "<input type='checkbox' name='lg_search' id='lg_search' value='1' />&nbsp;".htmlentities($msg['thes_sel_langue'],ENT_QUOTES, $charset);
1439                //              $sel_langue.= "</div><br />";
1440                //              $search_form_categ=str_replace("<!-- sel_langue -->",$sel_langue,$search_form_categ);
1441
1442
1443                $search_form_categ=str_replace("!!base_url!!",$this->base_url,$search_form_categ);
1444                $browser=str_replace("!!browser_url!!",$browser_url,$browser);
1445                print pmb_bidi($search_form_categ.$browser);
1446        }
1447
1448
1449        function show_error($car,$input,$error_message) {
1450                global $browser_url;
1451                global $browser,$search_form_categ;
1452                global $msg;
1453
1454
1455                $search_form_categ=str_replace("!!base_url!!",$this->base_url,$search_form_categ);
1456                print pmb_bidi($search_form_categ);
1457                error_message($msg["searcher_syntax_error"],sprintf($msg["searcher_syntax_error_desc"],$car,$input,$error_message));
1458                $browser=str_replace("!!browser_url!!",$browser_url,$browser);
1459                print pmb_bidi($browser);
1460        }
1461
1462        function make_first_search() {
1463
1464                global $search_subject;
1465                global $search_indexint,$search_indexint_id,$aut_type;
1466                global $msg;
1467                global $charset;
1468                global $browser,$search_form_categ,$browser_url;
1469                global $lang;
1470                global $dbh;
1471                global $id_thes;
1472                global $thesaurus_mode_pmb;
1473
1474                if ($search_indexint_id) {
1475                                $this->id=$search_indexint_id;
1476                                $aut_type="indexint";
1477                                return AUT_SEARCH;
1478                }
1479
1480                $this->nbresults=0;
1481
1482                if ($search_subject) {
1483                                $aq=new analyse_query(stripslashes($search_subject));
1484                                if (!$aq->error) {
1485
1486                                        if($id_thes !=-1){
1487                                                $thes= new thesaurus($id_thes);
1488                                        }
1489                                        $requete = "SELECT SQL_CALC_FOUND_ROWS noeuds.id_noeud AS categ_id, ";
1490                                        if(($id_thes !=-1) && ($thes->langue_defaut == $lang)){
1491                                                $members = $aq->get_query_members("categories", "libelle_categorie", "index_categorie", "num_noeud");
1492
1493                                                $requete.= $members["select"]." AS pert ";
1494                                                $requete.= "FROM noeuds JOIN categories ON noeuds.id_noeud = categories.num_noeud AND categories.langue='".addslashes($lang)."' ";
1495                                                $requete.= "WHERE noeuds.num_thesaurus = '".$id_thes."' ";
1496                                                $requete.= "AND (".$members["where"].") ";
1497                                                $requete.= "AND categories.libelle_categorie NOT LIKE '~%' ";
1498                                                $requete.= "ORDER BY pert DESC,categories.index_categorie";
1499                                        }else{
1500                                                $members_catdef = $aq->get_query_members("catdef", "catdef.libelle_categorie", "catdef.index_categorie", "catdef.num_noeud");
1501                                                $members_catlg = $aq->get_query_members("catlg", "catlg.libelle_categorie", "catlg.index_categorie", "catlg.num_noeud");
1502
1503                                                $requete.= "IF (catlg.num_noeud IS NULL, catdef.index_categorie, catlg.index_categorie) as index_categorie, ";
1504                                                $requete.= "IF (catlg.num_noeud IS NULL, ".$members_catdef["select"].", ".$members_catlg["select"].") as pert ";
1505
1506                                                if($id_thes !=-1){
1507                                                        $requete.= "FROM noeuds JOIN categories AS catdef ON noeuds.id_noeud = catdef.num_noeud AND catdef.langue = '".$thes->langue_defaut."' ";
1508                                                        $requete.= "LEFT JOIN categories AS catlg ON catdef.num_noeud = catlg.num_noeud AND catlg.langue = '".$lang."' ";
1509                                                        $requete.= "WHERE noeuds.num_thesaurus = '".$id_thes."' ";
1510                                                }else{
1511                                                        //Plusieurs thésaurus
1512                                                        $requete.= "FROM noeuds JOIN thesaurus ON thesaurus.id_thesaurus = noeuds.num_thesaurus ";
1513                                                        $requete.= "JOIN categories AS catdef ON noeuds.id_noeud = catdef.num_noeud AND catdef.langue = thesaurus.langue_defaut ";
1514                                                        $requete.= "LEFT JOIN categories AS catlg on catdef.num_noeud = catlg.num_noeud AND catlg.langue = '".$lang."' ";
1515                                                        $requete.= "WHERE 1 ";
1516                                                }
1517                                                $requete.= "AND catdef.libelle_categorie NOT LIKE '~%' ";
1518                                                $requete.= "AND (IF (catlg.num_noeud IS NULL, ".$members_catdef["where"].", ".$members_catlg["where"].") ) ORDER BY pert DESC,index_categorie";
1519                                        }
1520                                        $this->s_query = pmb_mysql_query($requete, $dbh);
1521
1522                                        $qry = "SELECT FOUND_ROWS() AS NbRows";
1523                                        if($resnum = pmb_mysql_query($qry)){
1524                                                $this->nb_s = pmb_mysql_result($resnum,0,0);
1525                                        }
1526
1527                                } else {
1528
1529                                        $this->show_error($aq->current_car,$aq->input_html,$aq->error_message);
1530                                        return;
1531                                }
1532                }
1533
1534                if ($search_indexint) {
1535                                $aq=new analyse_query(stripslashes($search_indexint));
1536                                if (!$aq->error) {
1537
1538                                        $this->nb_id=@pmb_mysql_result(@pmb_mysql_query("select count(distinct indexint_id) from indexint where indexint_name like '".str_replace("*","%",$search_indexint)."'"),0,0);
1539                                        if ($this->nb_id) {
1540                                                $this->id_query=@pmb_mysql_query("select indexint_id from indexint where indexint_name like '".str_replace("*","%",$search_indexint)."' order by indexint_name*1, indexint_name");
1541                                                if ($this->nb_id==1) {
1542                                                                $id=@pmb_mysql_fetch_object($this->id_query);
1543                                                                $this->id=$id->indexint_id;
1544                                                                $aut_type="indexint";
1545                                                                return AUT_SEARCH;
1546                                                }
1547                                        }
1548                                        $this->nb_i=@pmb_mysql_result(@pmb_mysql_query($aq->get_query_count("indexint","indexint_comment","index_indexint","indexint_id")),0,0);
1549                                        if ($this->nb_i)
1550                                                $this->i_query=@pmb_mysql_query($aq->get_query("indexint","indexint_comment","index_indexint","indexint_id"));
1551                                } else {
1552                                        $this->show_error($aq->current_car,$aq->input_html,$aq->error_message);
1553                                        return;
1554                                }
1555                }
1556
1557                if (($this->nb_s+$this->nb_i+$this->nb_id)==0) {
1558
1559
1560                        //affichage du selectionneur de thesaurus et du lien vers les thésaurus
1561                        $liste_thesaurus = thesaurus::getThesaurusList();
1562                        $sel_thesaurus = '';
1563                        $lien_thesaurus = '';
1564
1565                        if ($thesaurus_mode_pmb != 0) {  //la liste des thesaurus n'est pas affichée en mode monothesaurus
1566                                $sel_thesaurus = "<select class='saisie-30em' id='id_thes' name='id_thes' ";
1567                                $sel_thesaurus.= "onchange = \"document.location = '".$this->base_url."&id_thes='+document.getElementById('id_thes').value; \">" ;
1568                                foreach($liste_thesaurus as $id_thesaurus=>$libelle_thesaurus) {
1569                                        $sel_thesaurus.= "<option value='".$id_thesaurus."' "; ;
1570                                        if ($id_thesaurus == $id_thes) $sel_thesaurus.= " selected";
1571                                        $sel_thesaurus.= ">".htmlentities($libelle_thesaurus,ENT_QUOTES,$charset)."</option>";
1572                                }
1573                                $sel_thesaurus.= "<option value=-1 ";
1574                                if ($id_thes == -1) $sel_thesaurus.= "selected ";
1575                                $sel_thesaurus.= ">".htmlentities($msg['thes_all'],ENT_QUOTES,$charset)."</option>";
1576                                $sel_thesaurus.= "</select>&nbsp;";
1577
1578                        }
1579                        $search_form_categ=str_replace("<!-- sel_thesaurus -->",$sel_thesaurus,$search_form_categ);
1580
1581
1582                        //affichage du choix de langue pour la recherche
1583                        //              $sel_langue = '';
1584                        //              $sel_langue = "<div class='row'>";
1585                        //              $sel_langue.= "<input type='checkbox' name='lg_search' id='lg_search' value='1' />&nbsp;".htmlentities($msg['thes_sel_langue'],ENT_QUOTES, $charset);
1586                        //              $sel_langue.= "</div><br />";
1587                        //              $search_form_categ=str_replace("<!-- sel_langue -->",$sel_langue,$search_form_categ);
1588
1589
1590
1591                        $search_form_categ=str_replace("!!base_url!!",$this->base_url,$search_form_categ);
1592                        print pmb_bidi($search_form_categ);
1593                        error_message($msg["searcher_no_result"],$msg["searcher_no_result_desc"]);
1594                        $browser=str_replace("!!browser_url!!",$browser_url,$browser);
1595                        print pmb_bidi($browser);
1596                        return;
1597
1598                }
1599
1600                return AUT_LIST;
1601        }
1602
1603        function make_aut_search() {
1604                global $dbh;
1605                global $aut_type,$nb_per_page_a_search;
1606                global $thesaurus_auto_postage_montant,$thesaurus_auto_postage_descendant,$thesaurus_auto_postage_nb_montant,$thesaurus_auto_postage_nb_descendant;
1607                global $thesaurus_auto_postage_etendre_recherche,$nb_level_enfants,$nb_level_parents,$base_path,$msg;
1608                global $acces_j;
1609
1610                if ($nb_per_page_a_search) $this->nb_per_page=$nb_per_page_a_search; else $this->nb_per_page=3;
1611
1612                switch ($aut_type) {
1613                        case "indexint":
1614                                $requete_count="select count(distinct notice_id) from notices ";
1615                                $requete_count.= $acces_j;
1616                                $requete_count.= "where indexint=".$this->id." ";
1617
1618                                $requete="select notice_id from notices ";
1619                                $requete.= $acces_j;
1620                                $requete.= "where indexint=".$this->id." ";
1621//                              $requete.= "order by index_serie,tnvol,index_sew limit ".($this->page*$this->nb_per_page).",".$this->nb_per_page;
1622                                break;
1623
1624                        case "categ":
1625                                //Lire le champ path du noeud pour étendre la recherche éventuellement au fils et aux père de la catégorie
1626                                // lien Etendre auto_postage
1627                                if(!isset($nb_level_enfants)) {
1628                                        // non defini, prise des valeurs par défaut
1629                                        if(isset($_SESSION["nb_level_enfants"]) && $thesaurus_auto_postage_etendre_recherche) $nb_level_descendant=$_SESSION["nb_level_enfants"];
1630                                        else $nb_level_descendant=$thesaurus_auto_postage_nb_descendant;
1631                                } else {
1632                                        $nb_level_descendant=$nb_level_enfants;
1633                                }
1634                                // lien Etendre auto_postage
1635                                if(!isset($nb_level_parents)) {
1636                                        // non defini, prise des valeurs par défaut
1637                                        if(isset($_SESSION["nb_level_parents"]) && $thesaurus_auto_postage_etendre_recherche) $nb_level_montant=$_SESSION["nb_level_parents"];
1638                                        else $nb_level_montant=$thesaurus_auto_postage_nb_montant;
1639                                } else {
1640                                        $nb_level_montant=$nb_level_parents;
1641                                }
1642                                $_SESSION["nb_level_enfants"]=  $nb_level_descendant;
1643                                $_SESSION["nb_level_parents"]=  $nb_level_montant;
1644
1645                                $q = "select path from noeuds where id_noeud = '".$this->id."' ";
1646                                $r = pmb_mysql_query($q, $dbh);
1647                                $path=pmb_mysql_result($r, 0, 0);
1648                                $nb_pere=substr_count($path,'/');
1649
1650                                // Si un path est renseigné et le paramètrage activé
1651                                if ($path && ($thesaurus_auto_postage_descendant || $thesaurus_auto_postage_montant || $thesaurus_auto_postage_etendre_recherche) && ($nb_level_montant || $nb_level_descendant)){
1652                                        //Recherche des fils
1653                                        if(($thesaurus_auto_postage_descendant || $thesaurus_auto_postage_etendre_recherche)&& $nb_level_descendant) {
1654                                                if($nb_level_descendant != '*' && is_numeric($nb_level_descendant))
1655                                                        $liste_fils=" path regexp '^$path(\\/[0-9]*){0,$nb_level_descendant}$' ";
1656                                                else
1657                                                        $liste_fils=" path like '$path/%' or id_noeud='".$this->id."' ";
1658                                        } else {
1659                                                $liste_fils=" id_noeud = '".$this->id."' ";
1660                                        }
1661                                        // recherche des pères
1662                                        if(($thesaurus_auto_postage_montant || $thesaurus_auto_postage_etendre_recherche) && $nb_level_montant) {
1663                                                $id_list_pere=explode('/',$path);
1664                                                $stop_pere=0;
1665                                                if($nb_level_montant != '*' && is_numeric($nb_level_montant)) $stop_pere=$nb_pere-$nb_level_montant;
1666                                                // si les fils intégré, il y a déjà la categ courant dans la requête
1667                                                if($liste_fils) $i=$nb_pere-1;
1668                                                else $i=$nb_pere;
1669                                                for($i;$i>=$stop_pere; $i--) {
1670                                                        $liste_pere.= " or id_noeud='".$id_list_pere[$i]."' ";
1671                                                }
1672                                        }
1673                                        // requete permettant de remonter les notices associées à la liste des catégories trouvées;
1674                                        $suite_req = "FROM noeuds inner join notices_categories on id_noeud=num_noeud inner join notices on notcateg_notice=notice_id ";
1675                                        $suite_req.= $acces_j;
1676                                        $suite_req.= "WHERE ($liste_fils $liste_pere) and notices_categories.notcateg_notice = notices.notice_id ";
1677                                } else {
1678                                        // cas normal d'avant
1679                                        $suite_req = "FROM notices_categories, notices ";
1680                                        $suite_req.= $acces_j;
1681                                        $suite_req.= "WHERE notices_categories.num_noeud = '".$this->id."' and notices_categories.notcateg_notice = notices.notice_id ";
1682                                }
1683                                if ($path) {
1684                                        if ($thesaurus_auto_postage_etendre_recherche == 1 || ($thesaurus_auto_postage_etendre_recherche == 2 && !$nb_pere)) {
1685                                                $input_txt="<input name='nb_level_enfants' type='text' size='2' value='$nb_level_descendant'
1686                                                        onchange=\"document.location='".$this->base_url."&aut_id=".$this->id."&aut_type=categ&etat=aut_search&no_rec_history=1&nb_level_enfants='+this.value\">";
1687                                                $auto_postage_form=str_replace("!!nb_level_enfants!!",$input_txt,$msg["categories_autopostage_enfants"]);
1688
1689                                        }elseif ($thesaurus_auto_postage_etendre_recherche == 2 && $nb_pere) {
1690                                                $input_txt="<input name='nb_level_enfants' id='nb_level_enfants' type='text' size='2' value='$nb_level_descendant'
1691                                                        onchange=\"document.location='".$this->base_url."&aut_id=".$this->id."&aut_type=categ&etat=aut_search&no_rec_history=1&nb_level_enfants='+this.value+'&nb_level_enfants='+this.value+'&nb_level_parents='+document.getElementById('nb_level_parents').value;\">";
1692                                                $auto_postage_form=str_replace("!!nb_level_enfants!!",$input_txt,$msg["categories_autopostage_parents_enfants"]);
1693
1694                                                $input_txt="<input name='nb_level_parents' id='nb_level_parents' type='text' size='2' value='$nb_level_montant'
1695                                                        onchange=\"document.location='".$this->base_url."&aut_id=".$this->id."&aut_type=categ&etat=aut_search&no_rec_history=1&nb_level_parents='+this.value+'&nb_level_enfants='+document.getElementById('nb_level_enfants').value;\">";
1696                                                $auto_postage_form=str_replace("!!nb_level_parents!!",$input_txt,$auto_postage_form);
1697
1698                                        }elseif ($thesaurus_auto_postage_etendre_recherche == 3 ) {
1699                                                if($nb_pere) {
1700                                                        $input_txt="<input name='nb_level_parents' type='text' size='2' value='$nb_level_montant'
1701                                                                onchange=\"document.location='".$this->base_url."&aut_id=".$this->id."&aut_type=categ&etat=aut_search&no_rec_history=1&nb_level_parents='+this.value\">";
1702                                                        $auto_postage_form=str_replace("!!nb_level_parents!!",$input_txt,$msg["categories_autopostage_parents"]);
1703                                                }
1704                                        }
1705                                        $this->auto_postage_form=$auto_postage_form;
1706                                }
1707                                $requete_count="select count(distinct notice_id) ".$suite_req;
1708                                $requete = "select distinct notice_id ".$suite_req."order by index_serie,tnvol,index_sew ";//limit ".($this->page*$this->nb_per_page).",".$this->nb_per_page;
1709                                break;
1710                }
1711                $this->nbresults=@pmb_mysql_result(@pmb_mysql_query($requete_count),0,0);
1712                $this->t_query=@pmb_mysql_query($requete);
1713                $this->nbepage=ceil($this->nbresults/$this->nb_per_page);
1714                $this->text_query=$requete;
1715        }
1716
1717        function store_search() {
1718                global $search_subject;
1719                global $search_indexint,$search_indexint_id,$show_empty;
1720                global $charset;
1721                $champs="<input type='hidden' name='search_subject' value='".htmlentities(stripslashes($search_subject),ENT_QUOTES,$charset)."'/>";
1722                $champs.="<input type='hidden' name='search_indexint' value='".htmlentities(stripslashes($search_indexint),ENT_QUOTES,$charset)."'/>";
1723                $champs.="<input type='hidden' name='search_indexint_id' value='".htmlentities(stripslashes($search_indexint_id),ENT_QUOTES,$charset)."'/>";
1724                $champs.="<input type='hidden' name='show_empty' value='".$show_empty."'/>";
1725                $this->store_form=str_replace("!!first_search_variables!!",$champs,$this->store_form);
1726                print pmb_bidi($this->store_form);
1727        }
1728
1729        function aut_store_search() {
1730                global $charset,$aut_type;
1731                $champs="<input type='hidden' name='aut_id' value='".htmlentities(stripslashes($this->id),ENT_QUOTES,$charset)."'/>";
1732                $champs.="<input type='hidden' name='aut_type' value='".htmlentities(stripslashes($aut_type),ENT_QUOTES,$charset)."'/>";
1733                $this->store_form=str_replace("!!first_search_variables!!",$champs,$this->store_form);
1734                print pmb_bidi($this->store_form);
1735        }
1736
1737        function aut_list() {
1738                global $search_subject;
1739                global $search_indexint,$search_indexint_id;
1740                global $msg;
1741                global $charset;
1742                global $show_empty;
1743                $pair_impair = "";
1744                $parity = 0;
1745
1746                if ($search_subject) $human[]="<b>".$msg["histo_subject"]."</b> ".htmlentities(stripslashes($search_subject),ENT_QUOTES,$charset);
1747                if ($search_indexint) $human[]="<b>".$msg["histo_indexint"]."</b> ".htmlentities(stripslashes($search_indexint),ENT_QUOTES,$charset);
1748                $this->human_query=implode(", ",$human);
1749                $this->human_aut_query=implode(", ",$human);
1750                if ($this->nb_s) {
1751                                $empty=false;
1752                                print "<strong>${msg[23]} : ".sprintf($msg["searcher_results"],$this->nb_s)."</strong><hr /><table>";
1753                                while($categ=@pmb_mysql_fetch_object($this->s_query)) {
1754                                        $pair_impair = $parity % 2 ? "even" : "odd";
1755
1756                                        $temp = new category($categ->categ_id);
1757                                        if($temp->voir_id) {
1758                                                $cr=$temp->catalog_form;
1759                                                $temp = new category($temp->voir_id);
1760                                                $display = htmlentities($cr,ENT_QUOTES,$charset)." -> <i>".htmlentities($temp->catalog_form,ENT_QUOTES,$charset)."@</i>";
1761                                        } else {
1762                                                $display = htmlentities($temp->catalog_form,ENT_QUOTES,$charset);
1763                                        }
1764                                        if($temp->has_notices()) {
1765                                                $notice_count = $temp->notice_count(false);
1766                                                $link_categ = "<td><a href='".$this->base_url."&aut_id=".$temp->id."&aut_type=categ&etat=aut_search'>$display</a></td><td>$notice_count</td>";
1767                                        }
1768                                        else {
1769                                                $empty=true;
1770                                                if ($show_empty) $link_categ = "<td>$display</td><td></td>"; else $link_categ="";
1771                                        }
1772                                        if ($link_categ)
1773                                                print "<tr class=\"$pair_impair\">$link_categ</tr>";
1774                                }
1775                                print "</table>";
1776                                if (($empty)&&(!$show_empty)) print "<a href='#' onClick=\"document.store_search.show_empty.value=1; document.store_search.page.value=0; document.store_search.submit(); return false;\">".$msg["searcher_categ_empty_results"]."</a>";
1777                }
1778                if (($this->nb_i)||($this->nb_id)) {
1779                                if ($this->nb_id) {
1780                                        print "<br /><strong>${msg[indexint_catal_title]} ".$msg["searcher_exact_indexint"].": ".sprintf($msg["searcher_results"],$this->nb_id)."</strong><hr /><table>";
1781                                        $id_=array();
1782                                        $empty=false;
1783                                        while($indexint=@pmb_mysql_fetch_object($this->id_query)) {
1784                                                $pair_impair = $parity % 2 ? "even" : "odd";
1785
1786                                                $id_[$indexint->indexint_id]=1;
1787                                                $temp = new indexint($indexint->indexint_id);
1788                                                $display = htmlentities($temp->name." - ".$temp->comment,ENT_QUOTES,$charset);
1789                                                if($temp->has_notices()) {
1790                                                        $notice_count_sql = "SELECT count(*) FROM notices WHERE indexint = ".$temp->indexint_id;
1791                                                        $notice_count = pmb_mysql_result(pmb_mysql_query($notice_count_sql), 0, 0);
1792                                                        $link = "<td><a href='".$this->base_url."&aut_id=".$temp->indexint_id."&aut_type=indexint&etat=aut_search'>$display</a></td><td>".$notice_count."</td>";
1793                                                }
1794                                                else {
1795                                                                $empty=true;
1796                                                                if ($show_empty) $link = "<td>$display</td><td></td>"; else $link="";
1797                                                }
1798                                                if ($link) {
1799                                                        print "<tr class=\"$pair_impair\">$link</tr>";
1800                                                        $parity += 1;
1801                                                }
1802                                        }
1803                                        print "</table>";
1804                                        if (($empty)&&(!$show_empty)) print "<a href='#' onClick=\"document.store_search.show_empty.value=1; document.store_search.page.value=0; document.store_search.submit(); return false;\">".$msg["searcher_indexint_empty_results"]."</a><br /><br />";
1805                                }
1806                                $i_="";
1807                                if ($this->nb_i) {
1808                                        $empty=false;
1809                                        while($indexint=@pmb_mysql_fetch_object($this->i_query)) {
1810                                                $pair_impair = $parity % 2 ? "even" : "odd";
1811                                                if (!$id_[$indexint->indexint_id]) {
1812                                                                $temp = new indexint($indexint->indexint_id);
1813                                                                $display = htmlentities($temp->name." - ".$temp->comment,ENT_QUOTES,$charset);
1814                                                                if($temp->has_notices()) {
1815                                                                        $notice_count_sql = "SELECT count(*) FROM notices WHERE indexint = ".$temp->indexint_id;
1816                                                                        $notice_count = pmb_mysql_result(pmb_mysql_query($notice_count_sql), 0, 0);
1817                                                                        $link = "<td><a href='".$this->base_url."&aut_id=".$temp->indexint_id."&aut_type=indexint&etat=aut_search'>$display</a></td><td>".$notice_count."</td>";
1818                                                                }
1819                                                                else {
1820                                                                        $empty=true;
1821                                                                        if ($show_empty) $link = "<td>$display</td><td></td>"; else $link="";
1822                                                                }
1823                                                                if ($link) {
1824                                                                        $i_.="<tr class=\"$pair_impair\">$link</tr>";
1825                                                                        $parity += 1;
1826                                                                }
1827                                                } else $this->nb_i--;
1828                                        }
1829                                        $i_="<br /><strong>${msg[indexint_catal_title]} ".$msg["searcher_descr_indexint"]." : ".sprintf($msg["searcher_results"],$this->nb_i)."</strong><hr /><table>".$i_;
1830                                        $i_.="</table>";
1831                                        if (($empty)&&(!$show_empty)) $i_.="<a href='#' onClick=\"document.store_search.show_empty.value=1; document.store_search.page.value=0; document.store_search.submit(); return false;\">".$msg["searcher_indexint_empty_results"]."</a>";
1832                                        print $i_;
1833                                }
1834                }
1835        }
1836
1837        function notice_list_common($title) {
1838                global $begin_result_liste;
1839                global $end_result_liste;
1840                global $msg;
1841                global $charset;
1842                global $pmb_nb_max_tri;
1843                global $link,$link_expl,$link_explnum,$link_serial,$link_analysis,$link_bulletin,$link_explnum_serial,$link_explnum_analysis,$link_explnum_bulletin,$link_notice_bulletin;
1844                global $pmb_allow_external_search;
1845                global $load_tablist_js;
1846                $research=$title;
1847                $research .= " => ".sprintf($msg["searcher_results"],$this->nbresults);
1848                if($this->auto_postage_form) $research.="&nbsp;&nbsp;".$this->auto_postage_form;
1849                print "<div class='othersearchinfo'>$research</div>";
1850                print $begin_result_liste;
1851                $load_tablist_js=1;
1852                //Affichage des liens paniers et impression
1853                if ($this->rec_history) {
1854                        if ((($this->etat=='first_search')&&((string)$this->page==""))||($this->direct))
1855                                $current=count($_SESSION["session_history"]);
1856                        else
1857                                $current=$_SESSION["CURRENT"];
1858
1859                        if ($current!==false) {
1860                                echo "&nbsp;<a href='#' onClick=\"openPopUp('./print_cart.php?current_print=$current&action=print_prepare','print',600,700,-2,-2,'scrollbars=yes,menubar=0,resizable=yes'); w.focus(); return false;\">";
1861                                echo "<img src='./images/basket_small_20x20.gif' border='0' align='center' alt=\"".$msg["histo_add_to_cart"]."\" title=\"".$msg["histo_add_to_cart"]."\"></a>&nbsp;";
1862                                $tri_id_info = $_SESSION["tri"] ? "&sort_id=".$_SESSION["tri"] : "";
1863                                echo "<a href='#' onClick=\"openPopUp('./print.php?current_print=$current&action_print=print_prepare".$tri_id_info."','print',500,600,-2,-2,'scrollbars=yes,menubar=0'); return false;\">";
1864                                echo "<img src='./images/print.gif' border='0' align='center' alt=\"".$msg["histo_print"]."\" title=\"".$msg["histo_print"]."\"></a>&nbsp;";
1865                                echo "<a href='#' onClick=\"openPopUp('./download.php?current_download=$current&action_download=download_prepare".$tri_id_info."','download',500,600,-2,-2,'scrollbars=yes,menubar=0'); return false;\">";
1866                                echo "<img src='./images/upload_docnum.gif' border='0' align='center' alt=\"".$msg["docnum_download"]."\" title=\"".$msg["docnum_download"]."\"/></a>";
1867                                if ($pmb_allow_external_search) {
1868                                        print "&nbsp;<a href='catalog.php?categ=search&mode=7&from_mode=1&external_type=simple' title='".$msg["connecteurs_external_search_sources"]."'>";
1869                                        echo "<img src='./images/external_search.png' border='0' align='center' alt=\"".$msg["connecteurs_external_search_sources"]."\"/></a>";
1870                                }
1871                                // on affiche l'icone de tri seulement si on a atteint un nb maxi de résultats
1872                                if ($this->nbresults<=$pmb_nb_max_tri) {
1873
1874                                        //affichage de l'icone de tri
1875                                        echo "<a href=# onClick=\"document.getElementById('history').src='./sort.php?type_tri=notices'; document.getElementById('history').style.display='';return false;\" ";
1876                                        echo "alt=\"".$msg['tris_dispos']."\" title=\"".$msg['tris_dispos']."\">";
1877                                        echo "<img src=./images/orderby_az.gif align=middle hspace=3></a>";
1878
1879                                        //si on a un tri actif on affiche sa description
1880                                        if ($_SESSION["tri"]) {
1881                                                echo $msg['tri_par']." ".$this->sort->descriptionTriParId($_SESSION["tri"]);
1882                                        }
1883                                }
1884                        }
1885                }
1886
1887                print $this->get_current_search_map(1);
1888                // on lance la requête
1889                $recherche_ajax_mode=0;
1890                $nb=0;
1891                while(($nz=@pmb_mysql_fetch_object($this->t_query))) {
1892                                $n=@pmb_mysql_fetch_object(@pmb_mysql_query("SELECT * FROM notices WHERE notice_id=".$nz->notice_id));
1893                                if($nb++>5)$recherche_ajax_mode=1;
1894                                switch($n->niveau_biblio) {
1895                                        case 'm' :
1896                                                // notice de monographie
1897                                                $display = new mono_display($n, 6, $link, 1, $link_expl, '', $link_explnum,1, 0, 1, 1, "", 1  , false,true,$recherche_ajax_mode,1);
1898                                                print $display->result;
1899                                                break ;
1900                                        case 's' :
1901                                                // on a affaire à un périodique
1902                                                // function serial_display ($id, $level='1', $action_serial='', $action_analysis='', $action_bulletin='', $lien_suppr_cart="", $lien_explnum="", $bouton_explnum=1,$print=0,$show_explnum=1, $show_statut=0, $show_opac_hidden_fields=true, $draggable=0 ) {
1903                                                $serial = new serial_display($n, 6, $link_serial, $link_analysis, $link_bulletin, "", $link_explnum_serial, 0, 0, 1, 1, true, 1,$recherche_ajax_mode );
1904                                                print $serial->result;
1905                                                break;
1906                                        case 'a' :
1907                                                // on a affaire à un article
1908                                                // function serial_display ($id, $level='1', $action_serial='', $action_analysis='', $action_bulletin='', $lien_suppr_cart="", $lien_explnum="", $bouton_explnum=1,$print=0,$show_explnum=1, $show_statut=0, $show_opac_hidden_fields=true, $draggable=0 ) {
1909                                                $serial = new serial_display($n, 6, $link_serial, $link_analysis, $link_bulletin, "", $link_explnum_analysis, 0, 0, 1, 1, true, 1,$recherche_ajax_mode );
1910                                                print $serial->result;
1911                                                break;
1912                                        case 'b' :
1913                                                // on a affaire à un bulletin
1914                                                $rqt_bull_info = "SELECT s.notice_id as id_notice_mere, bulletin_id as id_du_bulletin, b.notice_id as id_notice_bulletin FROM notices as s, notices as b, bulletins WHERE b.notice_id=$n->notice_id and s.notice_id=bulletin_notice and num_notice=b.notice_id";
1915                                                $bull_ids=@pmb_mysql_fetch_object(pmb_mysql_query($rqt_bull_info));
1916                                                if(!$link_notice_bulletin){
1917                                                        $link_notice_bulletin = './catalog.php?categ=serials&sub=bulletinage&action=view&bul_id='.$bull_ids->id_du_bulletin;
1918                                                } else {
1919                                                        $link_notice_bulletin = str_replace("!!id!!",$bull_ids->id_du_bulletin,$link_notice_bulletin);
1920                                                }
1921                                                $link_explnum_bulletin = str_replace("!!bul_id!!",$bull_ids->id_du_bulletin,$link_explnum_bulletin);
1922                                                $display = new mono_display($n, 6, $link_notice_bulletin, 1, $link_expl, '', $link_explnum_bulletin,1, 0, 1, 1, "", 1  , false,true,$recherche_ajax_mode);
1923                                                $link_notice_bulletin = '';
1924                                                print $display->result;
1925                                                break;
1926                                }
1927                }
1928                // fin de liste
1929                print $end_result_liste;
1930        }
1931
1932        function aut_notice_list() {
1933                global $msg;
1934                global $charset;
1935                global $aut_type;
1936                global $search_subject,$search_indexint;
1937
1938                if ($this->direct) {
1939                        if ($search_subject) $human[]="<b>".$msg["histo_subject"]."</b> ".htmlentities(stripslashes($search_subject),ENT_QUOTES,$charset);
1940                        if ($search_indexint) $human[]="<b>".$msg["histo_indexint"]."</b> ".htmlentities(stripslashes($search_indexint),ENT_QUOTES,$charset);
1941                        $this->human_query=implode(", ",$human);
1942                        $this->human_aut_query=implode(", ",$human);
1943                }
1944                switch ($aut_type) {
1945                        case "indexint":
1946                                $temp = new indexint($this->id);
1947                                $display = "<b>".$msg["searcher_indexint"]."</b>&nbsp;".htmlentities($temp->name." - ".$temp->comment,ENT_QUOTES,$charset);
1948                                $this->human_notice_query=$display;
1949                                break;
1950                        case "categ":
1951                                $display = "<b>".$msg["searcher_categ"]."</b>&nbsp;";
1952                                $temp = new category($this->id);
1953                                if($temp->voir_id) {
1954                                        $cr=$temp->catalog_form;
1955                                        $temp = new category($temp->voir_id);
1956                                        $display.=htmlentities($cr,ENT_QUOTES,$charset)." -> <i>".htmlentities($temp->catalog_form,ENT_QUOTES,$charset)."@</i>";
1957                                } else {
1958                                                        $display.=htmlentities($temp->catalog_form,ENT_QUOTES,$charset);
1959                                }
1960                                $this->human_notice_query=$display;
1961                                break;
1962                }
1963                $this->notice_list_common($display);
1964        }
1965
1966        function rec_env() {
1967                global $msg;
1968                switch ($this->etat) {
1969                                case 'first_search':
1970                                        if ((string)$this->page=="") {
1971                                                $_SESSION["CURRENT"]=count($_SESSION["session_history"]);
1972                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]["URI"]=$this->base_url;
1973                                                $_POST["etat"]="";
1974                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]['POST']=$_POST;
1975                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]['GET']=$_GET;
1976                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]=array();
1977                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]=array();
1978                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]["HUMAN_QUERY"]=$this->human_query;
1979                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]["HUMAN_TITLE"]=$msg["355"];
1980                                        }
1981                                        if ((string)$this->page=="") { $_POST["page"]=0; $page=0; }
1982                                        if (($this->first_search_result==AUT_LIST)&&($_SESSION["CURRENT"]!==false)) {
1983                                                $_POST["etat"]="first_search";
1984                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]['URI']=$this->base_url;
1985                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]['POST']=$_POST;
1986                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]['GET']=$_GET;
1987                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]['PAGE']=$this->page+1;
1988                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]["HUMAN_QUERY"]=$this->human_aut_query;
1989                                        }
1990                                        if (($this->first_search_result==NOTICE_LIST)&&($_SESSION["CURRENT"]!==false)) {
1991                                                $_POST["etat"]="first_search";
1992                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['URI']=$this->base_url;
1993                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['POST']=$_POST;
1994                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['GET']=$_GET;
1995                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['TEXT_QUERY']=$this->text_query;
1996                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['PAGE']=$this->page+1;
1997                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]["HUMAN_QUERY"]=$this->human_notice_query;
1998                                        }
1999                                        break;
2000                                case 'aut_search':
2001                                        if ($this->direct) {
2002                                                $_SESSION["CURRENT"]=count($_SESSION["session_history"]);
2003                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]["URI"]=$this->base_url;
2004                                        //      $_POST["etat"]="";
2005                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]['POST']=$_POST;
2006                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]['GET']=$_GET;
2007                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]=array();
2008                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]=array();
2009                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]["HUMAN_QUERY"]=$this->human_query;
2010                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["HUMAN_TITLE"]=$msg["335"];
2011                                        }
2012                                        if ((string)$this->page=="") { $_POST["page"]=0; $page=0; }
2013                                        if ($_SESSION["CURRENT"]!==false) {
2014                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['URI']=$this->base_url;
2015                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['POST']=$_POST;
2016                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['GET']=$_GET;
2017                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['PAGE']=$this->page+1;
2018                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['TEXT_QUERY']=$this->text_query;
2019                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['HUMAN_QUERY']=$this->human_notice_query;
2020                                        }
2021
2022                                        break;
2023                }
2024                $_SESSION["last_required"]=false;
2025        }
2026
2027        static function convert_simple_multi($id_champ) {
2028                global $search;
2029
2030                if ($_SESSION["session_history"][$id_champ]["NOTI"]["POST"]["search_indexint_id"]) {
2031                        $valeur_champ=$_SESSION["session_history"][$id_champ]["NOTI"]["POST"]["search_indexint_id"];
2032                        $op_="EQ";
2033                        $search[0]="f_2";
2034                } elseif ($_SESSION["session_history"][$id_champ]["NOTI"]["POST"]["search_indexint"]) {
2035                        $valeur_champ=$_SESSION["session_history"][$id_champ]["NOTI"]["POST"]["search_indexint"];
2036                        $op_="EXACT";
2037                        $search[0]="f_2";
2038                } elseif ($_SESSION["session_history"][$id_champ]["NOTI"]["POST"]["search_subject"]) {
2039                        $valeur_champ=$_SESSION["session_history"][$id_champ]["NOTI"]["POST"]["search_subject"];
2040                        $op_="EQ";
2041                        $search[0]="f_1";
2042                } elseif ($_SESSION["session_history"][$id_champ]["NOTI"]["GET"]["aut_id"]) {
2043                        switch ($_SESSION["session_history"][$id_champ]["NOTI"]["GET"]["aut_type"]) {
2044                                case "indexint":
2045                                        $search[0]="f_2";
2046                                        break;
2047                                case "categ":
2048                                        $search[0]="f_1";
2049                                        break;
2050                        }
2051                        $valeur_champ=$_SESSION["session_history"][$id_champ]["NOTI"]["GET"]["aut_id"];
2052                        $op_="EQ";
2053                }
2054
2055                //opérateur
2056        $op="op_0_".$search[0];
2057        global $$op;
2058        $$op=$op_;
2059
2060        //contenu de la recherche
2061        $field="field_0_".$search[0];
2062        $field_=array();
2063        $field_[0]=$valeur_champ;
2064        global $$field;
2065        $$field=$field_;
2066
2067        //opérateur inter-champ
2068        $inter="inter_0_".$search[0];
2069        global $$inter;
2070        $$inter="";
2071
2072        //variables auxiliaires
2073        $fieldvar_="fieldvar_0_".$search[0];
2074        global $$fieldvar_;
2075        $$fieldvar_="";
2076        $fieldvar=$$fieldvar_;
2077        }
2078
2079        static function convert_simple_multi_unimarc($id_champ) {
2080                global $search;
2081
2082                if ($_SESSION["session_history"][$id_champ]["NOTI"]["POST"]["search_indexint_id"]) {
2083                        $indexint_id=$_SESSION["session_history"][$id_champ]["NOTI"]["POST"]["search_indexint_id"];
2084                        //Recherche de l'indexation
2085                        $requete="select indexint_name from indexint where indexint_id=".$indexint_id;
2086                        $r_indexint=pmb_mysql_query($requete);
2087                        if (@pmb_mysql_num_rows($r_indexint)) {
2088                                $valeur_champ=pmb_mysql_result($r_indexint,0,0);
2089                        }
2090                        $op_="BOOLEAN";
2091                        $search[0]="f_2";
2092                } elseif ($_SESSION["session_history"][$id_champ]["NOTI"]["POST"]["search_indexint"]) {
2093                        $valeur_champ=$_SESSION["session_history"][$id_champ]["NOTI"]["POST"]["search_indexint"];
2094                        $op_="BOOLEAN";
2095                        $search[0]="f_2";
2096                } elseif ($_SESSION["session_history"][$id_champ]["NOTI"]["POST"]["search_subject"]) {
2097                        $valeur_champ=$_SESSION["session_history"][$id_champ]["NOTI"]["POST"]["search_subject"];
2098                        $op_="BOOLEAN";
2099                        $search[0]="f_1";
2100                } elseif ($_SESSION["session_history"][$id_champ]["NOTI"]["GET"]["aut_id"]) {
2101                        switch ($_SESSION["session_history"][$id_champ]["NOTI"]["GET"]["aut_type"]) {
2102                                case "indexint":
2103                                        $search[0]="f_2";
2104                                        //Recherche de l'indexation
2105                                        $indexint_id=$_SESSION["session_history"][$id_champ]["NOTI"]["GET"]["aut_id"];
2106                                        $requete="select indexint_name from indexint where indexint_id=".$indexint_id;
2107                                        $r_indexint=pmb_mysql_query($requete);
2108                                        if (@pmb_mysql_num_rows($r_indexint)) {
2109                                                $valeur_champ=pmb_mysql_result($r_indexint,0,0);
2110                                        }
2111                                        break;
2112                                case "categ":
2113                                        $search[0]="f_1";
2114                                        //Recherche de la catégorie
2115                                        $categ_id=$_SESSION["session_history"][$id_champ]["NOTI"]["GET"]["aut_id"];
2116                                        $requete="select libelle_categorie from categories where num_noeud=".$categ_id;
2117                                        $r_cat=pmb_mysql_query($requete);
2118                                        if (@pmb_mysql_num_rows($r_cat)) {
2119                                                $valeur_champ=pmb_mysql_result($r_cat,0,0);
2120                                        }
2121                                        break;
2122                        }
2123                        $op_="BOOLEAN";
2124                }
2125
2126                //opérateur
2127        $op="op_0_".$search[0];
2128        global $$op;
2129        $$op=$op_;
2130
2131        //contenu de la recherche
2132        $field="field_0_".$search[0];
2133        $field_=array();
2134        $field_[0]=$valeur_champ;
2135        global $$field;
2136        $$field=$field_;
2137
2138        //opérateur inter-champ
2139        $inter="inter_0_".$search[0];
2140        global $$inter;
2141        $$inter="";
2142
2143        //variables auxiliaires
2144        $fieldvar_="fieldvar_0_".$search[0];
2145        global $$fieldvar_;
2146        $$fieldvar_="";
2147        $fieldvar=$$fieldvar_;
2148        }
2149}
2150
2151class searcher_publisher extends searcher {
2152        var $p_query;
2153        var $c_query;
2154        var $s_query;
2155        var $nb_p;
2156        var $nb_c;
2157        var $nb_s;
2158        var $t_query;
2159
2160        function show_form() {
2161                global $search_form_editeur,$browser_editeur,$browser_url;
2162
2163                $search_form_editeur=str_replace("!!base_url!!",$this->base_url,$search_form_editeur);
2164                $browser_editeur=str_replace("!!browser_url!!",$browser_url,$browser_editeur);
2165                print $search_form_editeur.$browser_editeur;
2166        }
2167
2168        function show_error($car,$input,$error_message) {
2169                global $browser_url;
2170                global $browser,$search_form_editeur;
2171                global $msg;
2172                $search_form_editeur=str_replace("!!base_url!!",$this->base_url,$search_form_editeur);
2173                print $search_form_editeur;
2174                error_message($msg["searcher_syntax_error"],sprintf($msg["searcher_syntax_error_desc"],$car,$input,$error_message));
2175                $browser=str_replace("!!browser_url!!",$browser_url,$browser);
2176                print $browser;
2177        }
2178
2179        function make_first_search() {
2180                global $search_ed;
2181                global $msg,$charset;
2182                global $browser,$browser_url,$search_form_editeur;
2183
2184                $aq=new analyse_query(stripslashes($search_ed),0,0,1,1);
2185                if (!$aq->error) {
2186                                $this->nbresults=0;
2187
2188                                //Recherche dans les éditeurs
2189                                $rq_p_c=$aq->get_query_count("publishers","ed_name","index_publisher","ed_id");
2190                                $this->nb_p=@pmb_mysql_result(@pmb_mysql_query($rq_p_c),0,0);
2191                                if ($this->nb_p) {
2192                                        $rq_p=$aq->get_query("publishers","ed_name","index_publisher","ed_id");
2193                                        $this->p_query=@pmb_mysql_query($rq_p);
2194                                }
2195                                //Recherche des collections
2196                                $rq_c_c=$aq->get_query_count("collections","collection_name","index_coll","collection_id");
2197                                $this->nb_c=@pmb_mysql_result(@pmb_mysql_query($rq_c_c),0,0);
2198                                if ($this->nb_c) {
2199                                        $rq_c=$aq->get_query("collections","collection_name","index_coll","collection_id");
2200                                        $this->c_query=@pmb_mysql_query($rq_c);
2201                                }
2202                                //Recherche des sous collections
2203                                $rq_s_c=$aq->get_query_count("sub_collections","sub_coll_name","index_sub_coll","sub_coll_id");
2204                                $this->nb_s=@pmb_mysql_result(@pmb_mysql_query($rq_s_c),0,0);
2205                                if ($this->nb_s) {
2206                                        $rq_s=$aq->get_query("sub_collections","sub_coll_name","index_sub_coll","sub_coll_id");
2207                                        $this->s_query=@pmb_mysql_query($rq_s);
2208                                }
2209                                if (($this->nb_p+$this->nb_c+$this->nb_s)==0) {
2210                                        $search_form_editeur=str_replace("!!base_url!!",$this->base_url,$search_form_editeur);
2211                                        print $search_form_editeur;
2212                                        error_message($msg["searcher_no_result"],$msg["searcher_no_result_desc"]);
2213                                        $browser=str_replace("!!browser_url!!",$browser_url,$browser);
2214                                        print $browser;
2215                                        return;
2216                                } else return AUT_LIST;
2217                } else {
2218                                $this->show_error($aq->current_car,$aq->input_html,$aq->error_message);
2219                }
2220        }
2221
2222        function make_aut_search() {
2223                global $aut_type,$mag,$charset,$nb_per_page_a_search;
2224                global $acces_j;
2225
2226                if ($nb_per_page_a_search) $this->nb_per_page=$nb_per_page_a_search; else $this->nb_per_page=3;
2227
2228                switch ($aut_type) {
2229                                case "publisher":
2230                                        $requete_count = "select count(distinct notice_id) from notices ";
2231                                        $requete_count.= $acces_j;
2232                                        $requete_count.= "where (ed1_id='".$this->id."' or ed2_id='".$this->id."') ";
2233
2234                                        $requete = "select distinct notice_id from notices ";
2235                                        $requete.= $acces_j;
2236                                        $requete.= "where (ed1_id='".$this->id."' or ed2_id='".$this->id."') ";
2237//                                      $requete.= "order by index_serie,tnvol,index_sew limit ".($this->page*$this->nb_per_page).",".$this->nb_per_page;
2238                                        break;
2239
2240                                case "collection":
2241                                        $requete_count = "select count(distinct notice_id) from notices ";
2242                                        $requete_count.= $acces_j;
2243                                        $requete_count.= "where coll_id='".$this->id."' ";
2244
2245                                        $requete = "select distinct notice_id from notices ";
2246                                        $requete.= $acces_j;
2247                                        $requete.= "where coll_id='".$this->id."' ";
2248//                                      $requete.= "order by index_serie,tnvol,index_sew limit ".($this->page*$this->nb_per_page).",".$this->nb_per_page;
2249                                        break;
2250
2251                                case "subcoll":
2252                                        $requete_count = "select count(distinct notice_id) from notices ";
2253                                        $requete_count.= $acces_j;
2254                                        $requete_count.= "where subcoll_id='".$this->id."' ";
2255
2256                                        $requete = "select distinct notice_id from notices ";
2257                                        $requete.= $acces_j;
2258                                        $requete.= "where subcoll_id='".$this->id."' ";
2259//                                      $requete.= "order by index_serie,tnvol,index_sew limit ".($this->page*$this->nb_per_page).",".$this->nb_per_page;
2260                                        break;
2261
2262                }
2263                $this->nbresults=@pmb_mysql_result(@pmb_mysql_query($requete_count),0,0);
2264                $this->t_query=@pmb_mysql_query($requete);
2265                $this->nbepage=ceil($this->nbresults/$this->nb_per_page);
2266                $this->text_query=$requete;
2267        }
2268
2269        function store_search() {
2270                global $search_ed;
2271                global $show_empty;
2272                global $charset;
2273                $champs="<input type='hidden' name='search_ed' value='".htmlentities(stripslashes($search_ed),ENT_QUOTES,$charset)."'/>";
2274                $champs.="<input type='hidden' name='show_empty' value='".$show_empty."'/>";
2275                $this->store_form=str_replace("!!first_search_variables!!",$champs,$this->store_form);
2276                print $this->store_form;
2277        }
2278
2279        function aut_store_search() {
2280                global $charset,$aut_type;
2281                $champs="<input type='hidden' name='aut_id' value='".htmlentities(stripslashes($this->id),ENT_QUOTES,$charset)."'/>";
2282                $champs.="<input type='hidden' name='aut_type' value='".htmlentities(stripslashes($aut_type),ENT_QUOTES,$charset)."'/>";
2283                $this->store_form=str_replace("!!first_search_variables!!",$champs,$this->store_form);
2284                print $this->store_form;
2285        }
2286
2287        function aut_list() {
2288                global $msg,$charset;
2289                global $search_ed;
2290
2291                $this->human_query="<b>".$msg["356"]." </b> ".htmlentities(stripslashes($search_ed),ENT_QUOTES,$charset);
2292                $this->human_aut_query=$this->human_query;
2293
2294                $pair_impair = "";
2295                $parity = 0;
2296                if ($this->nb_p) {
2297                                print "<strong>".$msg["searcher_publisher"]." : ".sprintf($msg["searcher_results"],$this->nb_p)."</strong><hr /><table>";
2298                                while ($p=@pmb_mysql_fetch_object($this->p_query)) {
2299                                        $pair_impair = $parity % 2 ? "even" : "odd";
2300                                        $temp=new editeur($p->ed_id);
2301                                        $notice_count_sql = "SELECT count(*) FROM notices WHERE ed1_id = ".$p->ed_id." OR ed2_id = ".$p->ed_id;
2302                                        $notice_count = pmb_mysql_result(pmb_mysql_query($notice_count_sql), 0, 0);
2303                                        print "<tr class=\"".$pair_impair."\"><td><a href='".$this->base_url."&etat=aut_search&aut_type=publisher&aut_id=".$p->ed_id."'>".htmlentities($temp->display,ENT_QUOTES,$charset)."</a>";
2304                                        if($temp->web) {
2305                                                print "&nbsp;<a href=\"".$temp->web."\" target=\"_web\">";
2306                                                print "<img src=\"./images/globe.gif\" border=\"0\" align=\"top\"></a>";
2307                                        }
2308                                        print "</td><td>$notice_count</td></tr>\n";
2309                                        $parity++;
2310                                }
2311                                print "</table>\n";
2312                }
2313                if ($this->nb_c) {
2314                                print "<strong>".$msg["searcher_coll"]." : ".sprintf($msg["searcher_results"],$this->nb_c)."</strong><hr /><table>";
2315                                while ($c=@pmb_mysql_fetch_object($this->c_query)) {
2316                                        $pair_impair = $parity % 2 ? "even" : "odd";
2317                                        $temp=new collection($c->collection_id);
2318                                        $notice_count_sql = "SELECT count(*) FROM notices WHERE coll_id = ".$c->collection_id;
2319                                        $notice_count = pmb_mysql_result(pmb_mysql_query($notice_count_sql), 0, 0);
2320                                        print "<tr class=\"".$pair_impair."\"><td><a href='".$this->base_url."&etat=aut_search&aut_type=collection&aut_id=".$c->collection_id."'>".htmlentities($temp->display,ENT_QUOTES,$charset)."</a></td><td>$notice_count</td></tr>\n";
2321                                        $parity++;
2322                                }
2323                                print "</table>\n";
2324                }
2325                if ($this->nb_s) {
2326                                print "<strong>".$msg["searcher_subcoll"]." : ".sprintf($msg["searcher_results"],$this->nb_s)."</strong><hr /><table>";
2327                                while ($s=@pmb_mysql_fetch_object($this->s_query)) {
2328                                        $pair_impair = $parity % 2 ? "even" : "odd";
2329                                        $temp=new subcollection($s->sub_coll_id);
2330                                        $notice_count_sql = "SELECT count(*) FROM notices WHERE subcoll_id = ".$s->sub_coll_id;
2331                                        $notice_count = pmb_mysql_result(pmb_mysql_query($notice_count_sql), 0, 0);
2332                                        print "<tr class=\"".$pair_impair."\"><td><a href='".$this->base_url."&etat=aut_search&aut_type=subcoll&aut_id=".$s->sub_coll_id."'>".$temp->display."</a></td><td>$notice_count</td></tr>\n";
2333                                        $parity++;
2334                                }
2335                                print "</table>\n";
2336                }
2337        }
2338
2339        function notice_list_common($title) {
2340                global $begin_result_liste;
2341                global $end_result_liste;
2342                global $msg;
2343                global $charset;
2344                global $pmb_nb_max_tri;
2345                global $link,$link_expl,$link_explnum,$link_serial,$link_analysis,$link_bulletin,$link_explnum_serial,$link_explnum_analysis,$link_explnum_bulletin,$link_notice_bulletin;
2346                global $pmb_allow_external_search;
2347                global $load_tablist_js;
2348                $research=$title;
2349                $research .= " => ".sprintf($msg["searcher_results"],$this->nbresults);
2350                print "<div class='othersearchinfo'>$research</div>";
2351                print $begin_result_liste;
2352                $load_tablist_js=1;
2353                //Affichage des liens paniers et impression
2354                if ($this->rec_history) {
2355                        $current=$_SESSION["CURRENT"];
2356                        if ($current!==false) {
2357                                $tri_id_info = $_SESSION["tri"] ? "&sort_id=".$_SESSION["tri"] : "";
2358                                print "&nbsp;<a href='#' onClick=\"openPopUp('./print_cart.php?current_print=$current&action=print_prepare".$tri_id_info."','print',500, 600, -2, -2, 'scrollbars=yes,menubar=0,resizable=yes'); w.focus(); return false;\"><img src='./images/basket_small_20x20.gif' border='0' align='center' alt=\"".$msg["histo_add_to_cart"]."\" title=\"".$msg["histo_add_to_cart"]."\"></a>&nbsp;<a href='#' onClick=\"openPopUp('./print.php?current_print=$current&action_print=print_prepare','print', 500, 600, -2, -2, 'scrollbars=yes,menubar=0'); return false;\"><img src='./images/print.gif' border='0' align='center' alt=\"".$msg["histo_print"]."\" title=\"".$msg["histo_print"]."\"/></a>";
2359                                print "&nbsp;<a href='#' onClick=\"openPopUp('./download.php?current_download=$current&action_download=download_prepare".$tri_id_info."','download',500,600,-2,-2,'scrollbars=yes,menubar=0'); return false;\"><img src='./images/upload_docnum.gif' border='0' align='center' alt=\"".$msg["docnum_download"]."\" title=\"".$msg["docnum_download"]."\"/></a>";
2360                                if ($pmb_allow_external_search) print "&nbsp;<a href='catalog.php?categ=search&mode=7&from_mode=3&external_type=simple' title='".$msg["connecteurs_external_search_sources"]."'><img src='./images/external_search.png' border='0' align='center' alt=\"".$msg["connecteurs_external_search_sources"]."\"/></a>";
2361                                // on affiche l'icone de tri seulement si on a atteint un nb maxi de résultats
2362                                if ($this->nbresults<=$pmb_nb_max_tri) {
2363
2364                                        //affichage de l'icone de tri
2365                                        echo "<a href=# onClick=\"document.getElementById('history').src='./sort.php?type_tri=notices'; document.getElementById('history').style.display='';return false;\" ";
2366                                        echo "alt=\"".$msg['tris_dispos']."\" title=\"".$msg['tris_dispos']."\">";
2367                                        echo "<img src=./images/orderby_az.gif align=middle hspace=3></a>";
2368
2369                                        //si on a un tri actif on affiche sa description
2370                                        if ($_SESSION["tri"]) {
2371                                                echo $msg['tri_par']." ".$this->sort->descriptionTriParId($_SESSION["tri"]);
2372                                        }
2373                                }
2374                        }
2375                }
2376
2377                print $this->get_current_search_map(2);
2378                // on lance la requête
2379                $recherche_ajax_mode=0;
2380                $nb=0;
2381                while(($nz=@pmb_mysql_fetch_object($this->t_query))) {
2382                                $n=@pmb_mysql_fetch_object(@pmb_mysql_query("SELECT * FROM notices WHERE notice_id=".$nz->notice_id));
2383                                if($nb++>5)$recherche_ajax_mode=1;
2384                                switch($n->niveau_biblio) {
2385                                        case 'm' :
2386                                                // notice de monographie
2387                                                $display = new mono_display($n, 6, $link, 1, $link_expl, '', $link_explnum,1, 0, 1, 1, "", 1  , false,true,$recherche_ajax_mode,1);
2388                                                print $display->result;
2389                                                break ;
2390                                        case 's' :
2391                                                // on a affaire à un périodique
2392                                                // function serial_display ($id, $level='1', $action_serial='', $action_analysis='', $action_bulletin='', $lien_suppr_cart="", $lien_explnum="", $bouton_explnum=1,$print=0,$show_explnum=1, $show_statut=0, $show_opac_hidden_fields=true, $draggable=0 ) {
2393                                                $serial = new serial_display($n, 6, $link_serial, $link_analysis, $link_bulletin, "", $link_explnum_serial, 0, 0, 1, 1, true, 1,$recherche_ajax_mode );
2394                                                print $serial->result;
2395                                                break;
2396                                        case 'a' :
2397                                                // on a affaire à un article
2398                                                // function serial_display ($id, $level='1', $action_serial='', $action_analysis='', $action_bulletin='', $lien_suppr_cart="", $lien_explnum="", $bouton_explnum=1,$print=0,$show_explnum=1, $show_statut=0, $show_opac_hidden_fields=true, $draggable=0 ) {
2399                                                $serial = new serial_display($n, 6, $link_serial, $link_analysis, $link_bulletin, "", $link_explnum_analysis, 0, 0, 1, 1, true, 1,$recherche_ajax_mode );
2400                                                print $serial->result;
2401                                                break;
2402                                        case 'b' :
2403                                                // on a affaire à un bulletin
2404                                                $rqt_bull_info = "SELECT s.notice_id as id_notice_mere, bulletin_id as id_du_bulletin, b.notice_id as id_notice_bulletin FROM notices as s, notices as b, bulletins WHERE b.notice_id=$n->notice_id and s.notice_id=bulletin_notice and num_notice=b.notice_id";
2405                                                $bull_ids=@pmb_mysql_fetch_object(pmb_mysql_query($rqt_bull_info));
2406                                                if(!$link_notice_bulletin){
2407                                                        $link_notice_bulletin = './catalog.php?categ=serials&sub=bulletinage&action=view&bul_id='.$bull_ids->id_du_bulletin;
2408                                                } else {
2409                                                        $link_notice_bulletin = str_replace("!!id!!",$bull_ids->id_du_bulletin,$link_notice_bulletin);
2410                                                }
2411                                                $link_explnum_bulletin = str_replace("!!bul_id!!",$bull_ids->id_du_bulletin,$link_explnum_bulletin);
2412                                                $display = new mono_display($n, 6, $link_notice_bulletin, 1, $link_expl, '', $link_explnum_bulletin,1, 0, 1, 1, "", 1  , false,true,$recherche_ajax_mode);
2413                                                $link_notice_bulletin = '';
2414                                                print $display->result;
2415                                                break;
2416                                }
2417                }
2418                // fin de liste
2419                print $end_result_liste;
2420        }
2421
2422        function aut_notice_list() {
2423                global $msg;
2424                global $charset;
2425                global $aut_type;
2426
2427                switch ($aut_type) {
2428                                case "publisher":
2429                                        $temp = new editeur($this->id);
2430                                        $display = "<b>".$msg["searcher_publisher"]."</b>&nbsp;".htmlentities($temp->display,ENT_QUOTES,$charset);
2431                                        $this->human_notice_query=$display;
2432                                        break;
2433                                case "collection":
2434                                        $display = "<b>".$msg["searcher_coll"]."</b>&nbsp;";
2435                                        $temp = new collection($this->id);
2436                                        $display.= htmlentities($temp->display,ENT_QUOTES,$charset);
2437                                        $this->human_notice_query=$display;
2438                                        break;
2439                                case "subcoll":
2440                                        $display = "<b>".$msg["searcher_subcoll"]."</b>&nbsp;";
2441                                        $temp = new subcollection($this->id);
2442                                        $display.=$temp->display;
2443                                        $this->human_notice_query=$display;
2444                                        break;
2445                }
2446                $this->notice_list_common($display);
2447        }
2448
2449        function rec_env() {
2450                global $msg;
2451                switch ($this->etat) {
2452                                case 'first_search':
2453                                        if ((string)$this->page=="") {
2454                                                $_SESSION["CURRENT"]=count($_SESSION["session_history"]);
2455                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]["URI"]=$this->base_url;
2456                                                $_POST["etat"]="";
2457                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]['POST']=$_POST;
2458                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]['GET']=$_GET;
2459                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]=array();
2460                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]=array();
2461                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]["HUMAN_QUERY"]=$this->human_query;
2462                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]["HUMAN_TITLE"]=$msg["356"];
2463                                        }
2464                                        if ((string)$this->page=="") { $_POST["page"]=0; $page=0; }
2465                                        if (($this->first_search_result==AUT_LIST)&&($_SESSION["CURRENT"]!==false)) {
2466                                                $_POST["etat"]="first_search";
2467                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]['URI']=$this->base_url;
2468                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]['POST']=$_POST;
2469                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]['GET']=$_GET;
2470                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]['PAGE']=$this->page+1;
2471                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]["HUMAN_QUERY"]=$this->human_aut_query;
2472                                        }
2473                                        if (($this->first_search_result==NOTICE_LIST)&&($_SESSION["CURRENT"]!==false)) {
2474                                                $_POST["etat"]="first_search";
2475                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['URI']=$this->base_url;
2476                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['POST']=$_POST;
2477                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['GET']=$_GET;
2478                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['TEXT_QUERY']=$this->text_query;
2479                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['PAGE']=$this->page+1;
2480                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]["HUMAN_QUERY"]=$this->human_notice_query;
2481                                        }
2482                                        break;
2483                                case 'aut_search':
2484                                        if ($_SESSION["CURRENT"]!==false) {
2485                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['URI']=$this->base_url;
2486                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['POST']=$_POST;
2487                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['GET']=$_GET;
2488                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['PAGE']=$this->page+1;
2489                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['TEXT_QUERY']=$this->text_query;
2490                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['HUMAN_QUERY']=$this->human_notice_query;
2491                                        }
2492                                        break;
2493                }
2494                $_SESSION["last_required"]=false;
2495        }
2496
2497        static function convert_simple_multi($id_champ) {
2498                global $search;
2499
2500                $valeur_champ=$_SESSION["session_history"][$id_champ]["NOTI"]["GET"]["aut_id"];
2501                $op_="EQ";
2502
2503                switch ($_SESSION["session_history"][$id_champ]["NOTI"]["GET"]["aut_type"]) {
2504                        case "publisher":
2505                                $search[0]="f_3";
2506                        break;
2507                        case "collection":
2508                                $search[0]="f_4";
2509                        break;
2510                        case "subcoll":
2511                                $search[0]="f_5";
2512                        break;
2513                }
2514
2515                //opérateur
2516        $op="op_0_".$search[0];
2517        global $$op;
2518        $$op=$op_;
2519
2520        //contenu de la recherche
2521        $field="field_0_".$search[0];
2522        $field_=array();
2523        $field_[0]=$valeur_champ;
2524        global $$field;
2525        $$field=$field_;
2526
2527        //opérateur inter-champ
2528        $inter="inter_0_".$search[0];
2529        global $$inter;
2530        $$inter="";
2531
2532        //variables auxiliaires
2533        $fieldvar_="fieldvar_0_".$search[0];
2534        global $$fieldvar_;
2535        $$fieldvar_="";
2536        $fieldvar=$$fieldvar_;
2537        }
2538
2539        static function convert_simple_multi_unimarc($id_champ) {
2540                global $search;
2541
2542                $valeur_champ=$_SESSION["session_history"][$id_champ]["NOTI"]["GET"]["aut_id"];
2543                $op_="BOOLEAN";
2544
2545                switch ($_SESSION["session_history"][$id_champ]["NOTI"]["GET"]["aut_type"]) {
2546                        case "publisher":
2547                                $search[0]="f_3";
2548                                //Recherche de l'éditeur
2549                                $publisher_id=$valeur_champ;
2550                                $requete="select ed_name from publishers where ed_id=".$publisher_id;
2551                                $r_pub=pmb_mysql_query($requete);
2552                                if (@pmb_mysql_num_rows($r_pub)) {
2553                                        $valeur_champ=pmb_mysql_result($r_pub,0,0);
2554                                }
2555                        break;
2556                        case "collection":
2557                                $search[0]="f_4";
2558                                //Recherche de l'indexation
2559                                $coll_id=$valeur_champ;
2560                                $requete="select collection_name from collections where collection_id=".$coll_id;
2561                                $r_coll=pmb_mysql_query($requete);
2562                                if (@pmb_mysql_num_rows($r_coll)) {
2563                                        $valeur_champ=pmb_mysql_result($r_coll,0,0);
2564                                }
2565                        break;
2566                        case "subcoll":
2567                                $search[0]="f_5";
2568                                //Recherche de la sous-collection
2569                                $subcoll_id=$valeur_champ;
2570                                $requete="select sub_coll_name from sub_collections where sub_coll_id=".$subcoll_id;
2571                                $r_subcoll=pmb_mysql_query($requete);
2572                                if (@pmb_mysql_num_rows($r_subcoll)) {
2573                                        $valeur_champ=pmb_mysql_result($r_subcoll,0,0);
2574                                }
2575                        break;
2576                }
2577
2578                //opérateur
2579        $op="op_0_".$search[0];
2580        global $$op;
2581        $$op=$op_;
2582
2583        //contenu de la recherche
2584        $field="field_0_".$search[0];
2585        $field_=array();
2586        $field_[0]=$valeur_champ;
2587        global $$field;
2588        $$field=$field_;
2589
2590        //opérateur inter-champ
2591        $inter="inter_0_".$search[0];
2592        global $$inter;
2593        $$inter="";
2594
2595        //variables auxiliaires
2596        $fieldvar_="fieldvar_0_".$search[0];
2597        global $$fieldvar_;
2598        $$fieldvar_="";
2599        $fieldvar=$$fieldvar_;
2600        }
2601}
2602
2603class searcher_titre_uniforme extends searcher {
2604        var $p_query;
2605        var $c_query;
2606        var $s_query;
2607        var $nb_p;
2608        var $nb_c;
2609        var $nb_s;
2610        var $t_query;
2611
2612        function show_form() {
2613                global $search_form_titre_uniforme,$browser_titre_uniforme,$browser_url;
2614
2615                $search_form_titre_uniforme=str_replace("!!base_url!!",$this->base_url,$search_form_titre_uniforme);
2616                $browser_titre_uniforme=str_replace("!!browser_url!!",$browser_url,$browser_titre_uniforme);
2617                print $search_form_titre_uniforme.$browser_titre_uniforme;
2618        }
2619
2620        function show_error($car,$input,$error_message) {
2621                global $browser_url;
2622                global $browser,$search_form_editeur;
2623                global $msg;
2624                $search_form_editeur=str_replace("!!base_url!!",$this->base_url,$search_form_editeur);
2625                print $search_form_editeur;
2626                error_message($msg["searcher_syntax_error"],sprintf($msg["searcher_syntax_error_desc"],$car,$input,$error_message));
2627                $browser=str_replace("!!browser_url!!",$browser_url,$browser);
2628                print $browser;
2629        }
2630
2631        function make_first_search() {
2632                global $search_tu;
2633                global $msg,$charset;
2634                global $browser,$browser_url,$search_form_titre_uniforme;
2635
2636                $aq=new analyse_query(stripslashes($search_tu),0,0,1,1);
2637                if (!$aq->error) {
2638                        $this->nbresults=0;
2639
2640                        //Recherche dans les titres uniformes
2641                        $rq_tu_count=$aq->get_query_count("titres_uniformes","tu_name","index_tu","tu_id");
2642                        $this->nb_tu=@pmb_mysql_result(@pmb_mysql_query($rq_tu_count),0,0);
2643                        if ($this->nb_tu) {
2644                                $rq_tu=$aq->get_query("titres_uniformes","tu_name","index_tu","tu_id");
2645                                $this->tu_query=@pmb_mysql_query($rq_tu);
2646                                return AUT_LIST;
2647                        }else {
2648                                $search_form_titre_uniforme=str_replace("!!base_url!!",$this->base_url,$search_form_titre_uniforme);
2649                                print $search_form_titre_uniforme;
2650                                error_message($msg["searcher_no_result"],$msg["searcher_no_result_desc"]);
2651                                $browser=str_replace("!!browser_url!!",$browser_url,$browser);
2652                                print $browser;
2653                                return;
2654                        }
2655                } else {
2656                        $this->show_error($aq->current_car,$aq->input_html,$aq->error_message);
2657                }
2658        }
2659
2660        function make_aut_search() {
2661                global $aut_type,$mag,$charset,$nb_per_page_a_search;
2662                global $acces_j;
2663
2664                if ($nb_per_page_a_search) $this->nb_per_page=$nb_per_page_a_search; else $this->nb_per_page=3;
2665
2666                switch ($aut_type) {
2667                        case "titre_uniforme":
2668                                $requete_count = "select count(distinct ntu_num_notice) from notices_titres_uniformes, notices ";
2669                                $requete_count.= $acces_j;
2670                                $requete_count.= "where ntu_num_notice=notice_id and ntu_num_tu='".$this->id."' ";
2671
2672                                $requete = "select distinct notice_id from notices_titres_uniformes, notices ";
2673                                $requete.= $acces_j;
2674                                $requete.= "where ntu_num_notice=notice_id and ntu_num_tu='".$this->id."' ";
2675//                              $requete.= "order by index_serie,tnvol,index_sew limit ".($this->page*$this->nb_per_page).",".$this->nb_per_page;
2676                        break;
2677                }
2678                $this->nbresults=@pmb_mysql_result(@pmb_mysql_query($requete_count),0,0);
2679                $this->t_query=@pmb_mysql_query($requete);
2680                $this->nbepage=ceil($this->nbresults/$this->nb_per_page);
2681                $this->text_query=$requete;
2682        }
2683
2684        function store_search() {
2685                global $search_ed;
2686                global $show_empty;
2687                global $charset;
2688                $champs="<input type='hidden' name='search_ed' value='".htmlentities(stripslashes($search_ed),ENT_QUOTES,$charset)."'/>";
2689                $champs.="<input type='hidden' name='show_empty' value='".$show_empty."'/>";
2690                $this->store_form=str_replace("!!first_search_variables!!",$champs,$this->store_form);
2691                print $this->store_form;
2692        }
2693
2694        function aut_store_search() {
2695                global $charset,$aut_type;
2696                $champs="<input type='hidden' name='aut_id' value='".htmlentities(stripslashes($this->id),ENT_QUOTES,$charset)."'/>";
2697                $champs.="<input type='hidden' name='aut_type' value='".htmlentities(stripslashes($aut_type),ENT_QUOTES,$charset)."'/>";
2698                $this->store_form=str_replace("!!first_search_variables!!",$champs,$this->store_form);
2699                print $this->store_form;
2700        }
2701
2702        function aut_list() {
2703                global $msg,$charset;
2704                global $search_tu;
2705                $this->human_query="<b>".$msg["356"]." </b> ".htmlentities(stripslashes($search_tu),ENT_QUOTES,$charset);
2706                $this->human_aut_query=$this->human_query;
2707
2708                $pair_impair = "";
2709                $parity = 0;
2710                if ($this->nb_tu) {
2711                        print "<strong>".$msg["search_by_titre_uniforme"]." : ".sprintf($msg["searcher_results"],$this->nb_tu)."</strong><hr /><table>";
2712                        while (($p=@pmb_mysql_fetch_object($this->tu_query))) {
2713                                $pair_impair = $parity % 2 ? "even" : "odd";
2714                                $temp=new titre_uniforme($p->tu_id);
2715                                $notice_count_sql = "SELECT count(*) FROM notices_titres_uniformes WHERE ntu_num_tu = ".$p->tu_id ;
2716                                $notice_count = pmb_mysql_result(pmb_mysql_query($notice_count_sql), 0, 0);
2717                                print "<tr class=\"".$pair_impair."\"><td><a href='".$this->base_url."&etat=aut_search&aut_type=titre_uniforme&aut_id=".$p->tu_id."'>".htmlentities($temp->display,ENT_QUOTES,$charset)."</a>";
2718
2719                                print "</td><td>$notice_count</td></tr>\n";
2720                                $parity++;
2721                        }
2722                        print "</table>\n";
2723                }
2724        }
2725
2726        function notice_list_common($title) {
2727                global $begin_result_liste;
2728                global $end_result_liste;
2729                global $msg;
2730                global $charset;
2731                global $pmb_nb_max_tri;
2732                global $link,$link_expl,$link_explnum,$link_serial,$link_analysis,$link_bulletin,$link_explnum_serial,$link_explnum_analysis,$link_explnum_bulletin;
2733                global $pmb_allow_external_search;
2734                global $load_tablist_js;
2735                $research=$title;
2736                $research .= " => ".sprintf($msg["searcher_results"],$this->nbresults);
2737                print "<div class='othersearchinfo'>$research</div>";
2738                print $begin_result_liste;
2739                $load_tablist_js=1;
2740                //Affichage des liens paniers et impression
2741                if ($this->rec_history) {
2742                        $current=$_SESSION["CURRENT"];
2743                        if ($current!==false) {
2744                                $tri_id_info = $_SESSION["tri"] ? "&sort_id=".$_SESSION["tri"] : "";
2745                                print "&nbsp;<a href='#' onClick=\"openPopUp('./print_cart.php?current_print=$current&action=print_prepare".$tri_id_info."','print',500, 600, -2, -2, 'scrollbars=yes,menubar=0,resizable=yes'); w.focus(); return false;\"><img src='./images/basket_small_20x20.gif' border='0' align='center' alt=\"".$msg["histo_add_to_cart"]."\" title=\"".$msg["histo_add_to_cart"]."\"></a>&nbsp;<a href='#' onClick=\"openPopUp('./print.php?current_print=$current&action_print=print_prepare','print', 500, 600, -2, -2, 'scrollbars=yes,menubar=0'); return false;\"><img src='./images/print.gif' border='0' align='center' alt=\"".$msg["histo_print"]."\" title=\"".$msg["histo_print"]."\"/></a>";
2746                                print "&nbsp;<a href='#' onClick=\"openPopUp('./download.php?current_download=$current&action_download=download_prepare".$tri_id_info."','download',500,600,-2,-2,'scrollbars=yes,menubar=0'); return false;\"><img src='./images/upload_docnum.gif' border='0' align='center' alt=\"".$msg["docnum_download"]."\" title=\"".$msg["docnum_download"]."\"/></a>";
2747                                if ($pmb_allow_external_search) print "&nbsp;<a href='catalog.php?categ=search&mode=7&from_mode=3&external_type=simple' title='".$msg["connecteurs_external_search_sources"]."'><img src='./images/external_search.png' border='0' align='center' alt=\"".$msg["connecteurs_external_search_sources"]."\"/></a>";
2748                                // on affiche l'icone de tri seulement si on a atteint un nb maxi de résultats
2749                                if ($this->nbresults<=$pmb_nb_max_tri) {
2750
2751                                        //affichage de l'icone de tri
2752                                        echo "<a href=# onClick=\"document.getElementById('history').src='./sort.php?type_tri=notices'; document.getElementById('history').style.display='';return false;\" ";
2753                                        echo "alt=\"".$msg['tris_dispos']."\" title=\"".$msg['tris_dispos']."\">";
2754                                        echo "<img src=./images/orderby_az.gif align=middle hspace=3></a>";
2755
2756                                        //si on a un tri actif on affiche sa description
2757                                        if ($_SESSION["tri"]) {
2758                                                echo $msg['tri_par']." ".$this->sort->descriptionTriParId($_SESSION["tri"]);
2759                                        }
2760                                }
2761                        }
2762                }
2763                print $this->get_current_search_map(9);
2764                // on lance la requête
2765                $recherche_ajax_mode=0;
2766                $nb=0;
2767                while(($nz=@pmb_mysql_fetch_object($this->t_query))) {
2768                        $n=@pmb_mysql_fetch_object(@pmb_mysql_query("SELECT * FROM notices WHERE notice_id=".$nz->notice_id));
2769                        if($nb++>5)$recherche_ajax_mode=1;
2770                        switch($n->niveau_biblio) {
2771                                case 'm' :
2772                                        // notice de monographie
2773                                        $display = new mono_display($n, 6, $link, 1, $link_expl, '', $link_explnum,1, 0, 1, 1, "", 1  , false,true,$recherche_ajax_mode,1);
2774                                        print $display->result;
2775                                        break ;
2776                                case 's' :
2777                                        // on a affaire à un périodique
2778                                        // function serial_display ($id, $level='1', $action_serial='', $action_analysis='', $action_bulletin='', $lien_suppr_cart="", $lien_explnum="", $bouton_explnum=1,$print=0,$show_explnum=1, $show_statut=0, $show_opac_hidden_fields=true, $draggable=0 ) {
2779                                        $serial = new serial_display($n, 6, $link_serial, $link_analysis, $link_bulletin, "", $link_explnum_serial, 0, 0, 1, 1, true, 1,$recherche_ajax_mode );
2780                                        print $serial->result;
2781                                        break;
2782                                case 'a' :
2783                                        // on a affaire à un article
2784                                        // function serial_display ($id, $level='1', $action_serial='', $action_analysis='', $action_bulletin='', $lien_suppr_cart="", $lien_explnum="", $bouton_explnum=1,$print=0,$show_explnum=1, $show_statut=0, $show_opac_hidden_fields=true, $draggable=0 ) {
2785                                        $serial = new serial_display($n, 6, $link_serial, $link_analysis, $link_bulletin, "", $link_explnum_analysis, 0, 0, 1, 1, true, 1,$recherche_ajax_mode );
2786                                        print $serial->result;
2787                                        break;
2788                                case 'b' :
2789                                        // on a affaire à un bulletin
2790                                        $rqt_bull_info = "SELECT s.notice_id as id_notice_mere, bulletin_id as id_du_bulletin, b.notice_id as id_notice_bulletin FROM notices as s, notices as b, bulletins WHERE b.notice_id=$n->notice_id and s.notice_id=bulletin_notice and num_notice=b.notice_id";
2791                                        $bull_ids=@pmb_mysql_fetch_object(pmb_mysql_query($rqt_bull_info));
2792                                        $link_notice_bulletin = './catalog.php?categ=serials&sub=bulletinage&action=view&bul_id='.$bull_ids->id_du_bulletin;
2793                                        $link_explnum_bulletin = str_replace("!!bul_id!!",$bull_ids->id_du_bulletin,$link_explnum_bulletin);
2794                                        $display = new mono_display($n, 6, $link_notice_bulletin, 1, $link_expl, '', $link_explnum_bulletin,1, 0, 1, 1, "", 1  , false,true,$recherche_ajax_mode);
2795                                        print $display->result;
2796                                        break;
2797                        }
2798                }
2799                // fin de liste
2800                print $end_result_liste;
2801        }
2802
2803        function aut_notice_list() {
2804                global $msg;
2805                global $charset;
2806                global $aut_type;
2807
2808                switch ($aut_type) {
2809                        case "titre_uniforme":
2810                                $temp = new titre_uniforme($this->id);
2811                                $display = "<b>".$msg["search_by_titre_uniforme"]."</b>&nbsp;".htmlentities($temp->name,ENT_QUOTES,$charset);
2812                                $this->human_notice_query=$display;
2813                        break;
2814                }
2815                $this->notice_list_common($display);
2816        }
2817
2818        function rec_env() {
2819                global $msg;
2820                switch ($this->etat) {
2821                        case 'first_search':
2822                                if ((string)$this->page=="") {
2823                                        $_SESSION["CURRENT"]=count($_SESSION["session_history"]);
2824                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]["URI"]=$this->base_url;
2825                                        $_POST["etat"]="";
2826                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]['POST']=$_POST;
2827                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]['GET']=$_GET;
2828                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]=array();
2829                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]=array();
2830                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]["HUMAN_QUERY"]=$this->human_query;
2831                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]["HUMAN_TITLE"]=$msg["356"];
2832                                }
2833                                if ((string)$this->page=="") { $_POST["page"]=0; $page=0; }
2834                                if (($this->first_search_result==AUT_LIST)&&($_SESSION["CURRENT"]!==false)) {
2835                                        $_POST["etat"]="first_search";
2836                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]['URI']=$this->base_url;
2837                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]['POST']=$_POST;
2838                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]['GET']=$_GET;
2839                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]['PAGE']=$this->page+1;
2840                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]["HUMAN_QUERY"]=$this->human_aut_query;
2841                                }
2842                                if (($this->first_search_result==NOTICE_LIST)&&($_SESSION["CURRENT"]!==false)) {
2843                                        $_POST["etat"]="first_search";
2844                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['URI']=$this->base_url;
2845                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['POST']=$_POST;
2846                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['GET']=$_GET;
2847                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['TEXT_QUERY']=$this->text_query;
2848                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['PAGE']=$this->page+1;
2849                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]["HUMAN_QUERY"]=$this->human_notice_query;
2850                                }
2851                        break;
2852                        case 'aut_search':
2853                                if ($_SESSION["CURRENT"]!==false) {
2854                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['URI']=$this->base_url;
2855                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['POST']=$_POST;
2856                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['GET']=$_GET;
2857                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['PAGE']=$this->page+1;
2858                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['TEXT_QUERY']=$this->text_query;
2859                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['HUMAN_QUERY']=$this->human_notice_query;
2860                                }
2861                        break;
2862                }
2863                $_SESSION["last_required"]=false;
2864        }
2865
2866        static function convert_simple_multi($id_champ) {
2867                global $search;
2868
2869                $valeur_champ=$_SESSION["session_history"][$id_champ]["NOTI"]["GET"]["aut_id"];
2870                $op_="EQ";
2871
2872                switch ($_SESSION["session_history"][$id_champ]["NOTI"]["GET"]["aut_type"]) {
2873                        case "titre_uniforme":
2874                                $search[0]="f_3";//!!!!!!!!! a modifier
2875                        break;
2876                }
2877                //opérateur
2878        $op="op_0_".$search[0];
2879        global $$op;
2880        $$op=$op_;
2881
2882        //contenu de la recherche
2883        $field="field_0_".$search[0];
2884        $field_=array();
2885        $field_[0]=$valeur_champ;
2886        global $$field;
2887        $$field=$field_;
2888
2889        //opérateur inter-champ
2890        $inter="inter_0_".$search[0];
2891        global $$inter;
2892        $$inter="";
2893
2894        //variables auxiliaires
2895        $fieldvar_="fieldvar_0_".$search[0];
2896        global $$fieldvar_;
2897        $$fieldvar_="";
2898        $fieldvar=$$fieldvar_;
2899        }
2900
2901        static function convert_simple_multi_unimarc($id_champ) {
2902                global $search;
2903
2904                $valeur_champ=$_SESSION["session_history"][$id_champ]["NOTI"]["GET"]["aut_id"];
2905                $op_="BOOLEAN";
2906
2907                switch ($_SESSION["session_history"][$id_champ]["NOTI"]["GET"]["aut_type"]) {
2908                        case "titre_uniforme":
2909                                $search[0]="f_3";
2910                                //Recherche de l'éditeur
2911                                $tu_id=$valeur_champ;
2912                                $requete="select tu_name from titres_uniformes where tu_id=".$tu_id;
2913                                $r_pub=pmb_mysql_query($requete);
2914                                if (@pmb_mysql_num_rows($r_pub)) {
2915                                        $valeur_champ=pmb_mysql_result($r_pub,0,0);
2916                                }
2917                        break;
2918                }
2919
2920                //opérateur
2921        $op="op_0_".$search[0];
2922        global $$op;
2923        $$op=$op_;
2924
2925        //contenu de la recherche
2926        $field="field_0_".$search[0];
2927        $field_=array();
2928        $field_[0]=$valeur_champ;
2929        global $$field;
2930        $$field=$field_;
2931
2932        //opérateur inter-champ
2933        $inter="inter_0_".$search[0];
2934        global $$inter;
2935        $$inter="";
2936
2937        //variables auxiliaires
2938        $fieldvar_="fieldvar_0_".$search[0];
2939        global $$fieldvar_;
2940        $$fieldvar_="";
2941        $fieldvar=$$fieldvar_;
2942        }
2943}
2944
2945
2946class searcher_serie extends searcher {
2947        var $p_query;
2948        var $c_query;
2949        var $s_query;
2950        var $nb_p;
2951        var $nb_c;
2952        var $nb_s;
2953        var $t_query;
2954
2955        function show_form() {}
2956
2957        function show_error($car,$input,$error_message) {}
2958
2959        function make_first_search() {}
2960
2961        function make_aut_search() {
2962                global $aut_type,$mag,$charset,$nb_per_page_a_search;
2963                global $acces_j;
2964
2965                if ($nb_per_page_a_search) $this->nb_per_page=$nb_per_page_a_search; else $this->nb_per_page=3;
2966
2967                switch($aut_type){
2968                        case 'tit_serie':
2969                                $requete_count = "select count(distinct notice_id) from notices ";
2970                                $requete_count.= $acces_j;
2971                                $requete_count.= "where index_serie in (select serie_index from series where serie_id='".$this->id."' ) ";
2972
2973                                $requete = "select distinct notice_id from notices ";
2974                                $requete.= $acces_j;
2975                                $requete.= "where index_serie in (select serie_index from series where serie_id='".$this->id."' ) ";
2976//                              $requete.= "order by index_serie,tnvol,index_sew limit ".($this->page*$this->nb_per_page).",".$this->nb_per_page;
2977                }
2978                $this->nbresults=@pmb_mysql_result(@pmb_mysql_query($requete_count),0,0);
2979                $this->t_query=@pmb_mysql_query($requete);
2980                $this->nbepage=ceil($this->nbresults/$this->nb_per_page);
2981                $this->text_query=$requete;
2982        }
2983
2984        function store_search() {
2985                global $search_ed;
2986                global $show_empty;
2987                global $charset;
2988                $champs="<input type='hidden' name='search_ed' value='".htmlentities(stripslashes($search_ed),ENT_QUOTES,$charset)."'/>";
2989                $champs.="<input type='hidden' name='show_empty' value='".$show_empty."'/>";
2990                $this->store_form=str_replace("!!first_search_variables!!",$champs,$this->store_form);
2991                print $this->store_form;
2992        }
2993
2994        function aut_store_search() {
2995                global $charset,$aut_type;
2996                $champs="<input type='hidden' name='aut_id' value='".htmlentities(stripslashes($this->id),ENT_QUOTES,$charset)."'/>";
2997                $champs.="<input type='hidden' name='aut_type' value='".htmlentities(stripslashes($aut_type),ENT_QUOTES,$charset)."'/>";
2998                $this->store_form=str_replace("!!first_search_variables!!",$champs,$this->store_form);
2999                print $this->store_form;
3000        }
3001
3002        function aut_list() {}
3003
3004        function notice_list_common($title) {
3005                global $begin_result_liste;
3006                global $end_result_liste;
3007                global $msg;
3008                global $charset;
3009                global $pmb_nb_max_tri;
3010                global $link,$link_expl,$link_explnum,$link_serial,$link_analysis,$link_bulletin,$link_explnum_serial,$link_explnum_analysis,$link_explnum_bulletin,$link_notice_bulletin;
3011                global $pmb_allow_external_search;
3012                global $load_tablist_js;
3013                $research=$title;
3014                $research .= " => ".sprintf($msg["searcher_results"],$this->nbresults);
3015                print "<div class='othersearchinfo'>$research</div>";
3016                print $begin_result_liste;
3017                $load_tablist_js=1;
3018                //Affichage des liens paniers et impression
3019                if ($this->rec_history) {
3020                        $current=$_SESSION["CURRENT"];
3021                        if ($current!==false) {
3022                                $tri_id_info = $_SESSION["tri"] ? "&sort_id=".$_SESSION["tri"] : "";
3023                                print "&nbsp;<a href='#' onClick=\"openPopUp('./print_cart.php?current_print=$current&action=print_prepare".$tri_id_info."','print',500, 600, -2, -2, 'scrollbars=yes,menubar=0,resizable=yes'); w.focus(); return false;\"><img src='./images/basket_small_20x20.gif' border='0' align='center' alt=\"".$msg["histo_add_to_cart"]."\" title=\"".$msg["histo_add_to_cart"]."\"></a>&nbsp;<a href='#' onClick=\"openPopUp('./print.php?current_print=$current&action_print=print_prepare','print', 500, 600, -2, -2, 'scrollbars=yes,menubar=0'); return false;\"><img src='./images/print.gif' border='0' align='center' alt=\"".$msg["histo_print"]."\" title=\"".$msg["histo_print"]."\"/></a>";
3024                                print "&nbsp;<a href='#' onClick=\"openPopUp('./download.php?current_download=$current&action_download=download_prepare".$tri_id_info."','download',500,600,-2,-2,'scrollbars=yes,menubar=0'); return false;\"><img src='./images/upload_docnum.gif' border='0' align='center' alt=\"".$msg["docnum_download"]."\" title=\"".$msg["docnum_download"]."\"/></a>";
3025                                if ($pmb_allow_external_search) print "&nbsp;<a href='catalog.php?categ=search&mode=7&from_mode=3&external_type=simple' title='".$msg["connecteurs_external_search_sources"]."'><img src='./images/external_search.png' border='0' align='center' alt=\"".$msg["connecteurs_external_search_sources"]."\"/></a>";
3026                                // on affiche l'icone de tri seulement si on a atteint un nb maxi de résultats
3027                                if ($this->nbresults<=$pmb_nb_max_tri) {
3028
3029                                        //affichage de l'icone de tri
3030                                        echo "<a href=# onClick=\"document.getElementById('history').src='./sort.php?type_tri=notices'; document.getElementById('history').style.display='';return false;\" ";
3031                                        echo "alt=\"".$msg['tris_dispos']."\" title=\"".$msg['tris_dispos']."\">";
3032                                        echo "<img src=./images/orderby_az.gif align=middle hspace=3></a>";
3033
3034                                        //si on a un tri actif on affiche sa description
3035                                        if ($_SESSION["tri"]) {
3036                                                echo $msg['tri_par']." ".$this->sort->descriptionTriParId($_SESSION["tri"]);
3037                                        }
3038                                }
3039                        }
3040                }
3041                print $this->get_current_search_map(3);
3042                // on lance la requête
3043                $recherche_ajax_mode=0;
3044                $nb=0;
3045                while(($nz=@pmb_mysql_fetch_object($this->t_query))) {
3046                                $n=@pmb_mysql_fetch_object(@pmb_mysql_query("SELECT * FROM notices WHERE notice_id=".$nz->notice_id));
3047                                if($nb++>5)$recherche_ajax_mode=1;
3048                                switch($n->niveau_biblio) {
3049                                        case 'm' :
3050                                                // notice de monographie
3051                                                $display = new mono_display($n, 6, $link, 1, $link_expl, '', $link_explnum,1, 0, 1, 1, "", 1  , false,true,$recherche_ajax_mode,1);
3052                                                print $display->result;
3053                                                break ;
3054                                        case 's' :
3055                                                // on a affaire à un périodique
3056                                                // function serial_display ($id, $level='1', $action_serial='', $action_analysis='', $action_bulletin='', $lien_suppr_cart="", $lien_explnum="", $bouton_explnum=1,$print=0,$show_explnum=1, $show_statut=0, $show_opac_hidden_fields=true, $draggable=0 ) {
3057                                                $serial = new serial_display($n, 6, $link_serial, $link_analysis, $link_bulletin, "", $link_explnum_serial, 0, 0, 1, 1, true, 1,$recherche_ajax_mode );
3058                                                print $serial->result;
3059                                                break;
3060                                        case 'a' :
3061                                                // on a affaire à un article
3062                                                // function serial_display ($id, $level='1', $action_serial='', $action_analysis='', $action_bulletin='', $lien_suppr_cart="", $lien_explnum="", $bouton_explnum=1,$print=0,$show_explnum=1, $show_statut=0, $show_opac_hidden_fields=true, $draggable=0 ) {
3063                                                $serial = new serial_display($n, 6, $link_serial, $link_analysis, $link_bulletin, "", $link_explnum_analysis, 0, 0, 1, 1, true, 1,$recherche_ajax_mode );
3064                                                print $serial->result;
3065                                                break;
3066                                        case 'b' :
3067                                                // on a affaire à un bulletin
3068                                                $rqt_bull_info = "SELECT s.notice_id as id_notice_mere, bulletin_id as id_du_bulletin, b.notice_id as id_notice_bulletin FROM notices as s, notices as b, bulletins WHERE b.notice_id=$n->notice_id and s.notice_id=bulletin_notice and num_notice=b.notice_id";
3069                                                $bull_ids=@pmb_mysql_fetch_object(pmb_mysql_query($rqt_bull_info));
3070                                                if(!$link_notice_bulletin){
3071                                                        $link_notice_bulletin = './catalog.php?categ=serials&sub=bulletinage&action=view&bul_id='.$bull_ids->id_du_bulletin;
3072                                                } else {
3073                                                        $link_notice_bulletin = str_replace("!!id!!",$bull_ids->id_du_bulletin,$link_notice_bulletin);
3074                                                }
3075                                                $display = new mono_display($n, 6, $link_notice_bulletin, 1, $link_expl, '', $link_explnum,1, 0, 1, 1, "", 1  , false,true,$recherche_ajax_mode);
3076                                                $link_notice_bulletin='';
3077                                                print $display->result;
3078                                                break;
3079                                }
3080                }
3081                // fin de liste
3082                print $end_result_liste;
3083        }
3084
3085        function aut_notice_list() {
3086                $this->notice_list_common($display);
3087        }
3088
3089        function rec_env() {
3090                global $msg;
3091                switch ($this->etat) {
3092                                case 'first_search':
3093                                        if ((string)$this->page=="") {
3094                                                $_SESSION["CURRENT"]=count($_SESSION["session_history"]);
3095                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]["URI"]=$this->base_url;
3096                                                $_POST["etat"]="";
3097                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]['POST']=$_POST;
3098                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]['GET']=$_GET;
3099                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]=array();
3100                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]=array();
3101                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]["HUMAN_QUERY"]=$this->human_query;
3102                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]["HUMAN_TITLE"]=$msg["356"];
3103                                        }
3104                                        if ((string)$this->page=="") { $_POST["page"]=0; $page=0; }
3105                                        if (($this->first_search_result==AUT_LIST)&&($_SESSION["CURRENT"]!==false)) {
3106                                                $_POST["etat"]="first_search";
3107                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]['URI']=$this->base_url;
3108                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]['POST']=$_POST;
3109                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]['GET']=$_GET;
3110                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]['PAGE']=$this->page+1;
3111                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]["HUMAN_QUERY"]=$this->human_aut_query;
3112                                        }
3113                                        if (($this->first_search_result==NOTICE_LIST)&&($_SESSION["CURRENT"]!==false)) {
3114                                                $_POST["etat"]="first_search";
3115                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['URI']=$this->base_url;
3116                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['POST']=$_POST;
3117                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['GET']=$_GET;
3118                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['TEXT_QUERY']=$this->text_query;
3119                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['PAGE']=$this->page+1;
3120                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]["HUMAN_QUERY"]=$this->human_notice_query;
3121                                        }
3122                                        break;
3123                                case 'aut_search':
3124                                        if ($_SESSION["CURRENT"]!==false) {
3125                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['URI']=$this->base_url;
3126                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['POST']=$_POST;
3127                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['GET']=$_GET;
3128                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['PAGE']=$this->page+1;
3129                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['TEXT_QUERY']=$this->text_query;
3130                                                $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['HUMAN_QUERY']=$this->human_notice_query;
3131                                        }
3132                                        break;
3133                }
3134                $_SESSION["last_required"]=false;
3135        }
3136
3137        static function convert_simple_multi($id_champ) {}
3138
3139        static function convert_simple_multi_unimarc($id_champ) {}
3140}
3141
3142class searcher_authperso extends searcher {
3143        var $p_query;
3144        var $c_query;
3145        var $s_query;
3146        var $nb_p;
3147        var $nb_c;
3148        var $nb_s;
3149        var $t_query;
3150
3151        function show_form() {
3152                global $search_form_authperso,$browser_authperso,$browser_url;
3153                global $msg;
3154                global $info_authpersos,$id_authperso;
3155
3156                $authperso_seach_title=str_replace("!!name!!",$info_authpersos[$id_authperso]['name'],$msg["search_by_authperso"]);
3157                $search_form_authperso=str_replace("!!authperso_seach_title!!",$authperso_seach_title,$search_form_authperso);
3158                $search_form_authperso=str_replace("!!base_url!!",$this->base_url,$search_form_authperso);
3159                $browser_authperso=str_replace("!!browser_url!!",$browser_url,$browser_authperso);
3160                print $search_form_authperso.$browser_authperso;
3161        }
3162
3163        function show_error($car,$input,$error_message) {
3164                global $browser_url;
3165                global $browser,$search_form_editeur;
3166                global $msg;
3167                $search_form_editeur=str_replace("!!base_url!!",$this->base_url,$search_form_editeur);
3168                print $search_form_editeur;
3169                error_message($msg["searcher_syntax_error"],sprintf($msg["searcher_syntax_error_desc"],$car,$input,$error_message));
3170                $browser=str_replace("!!browser_url!!",$browser_url,$browser);
3171                print $browser;
3172        }
3173
3174        function make_first_search() {
3175                global $search_authperso;
3176                global $msg,$charset;
3177                global $browser,$browser_url,$search_form_authperso;
3178                global $mode;
3179
3180                $aq=new analyse_query(stripslashes($search_authperso),0,0,1,1);
3181                if (!$aq->error) {
3182                        $this->nbresults=0;
3183                        //Recherche dans les authperso
3184                        $members=$aq->get_query_members("authperso_authorities","authperso_infos_global","authperso_index_infos_global","id_authperso_authority");
3185                        $clause= "where ".$members["where"] ." and authperso_authority_authperso_num=".($mode-1000);
3186                        $rq_authperso_count="select count(1) FROM authperso_authorities $clause ";
3187
3188                        $this->nb_authperso=@pmb_mysql_result(@pmb_mysql_query($rq_authperso_count),0,0);
3189
3190                        if ($this->nb_authperso) {
3191                                $rq_authperso="select id_authperso_authority FROM authperso_authorities $clause ";
3192                                $this->authperso_query=@pmb_mysql_query($rq_authperso);
3193                                return AUT_LIST;
3194                        }else {
3195                                $search_form_authperso=str_replace("!!base_url!!",$this->base_url,$search_form_authperso);
3196                                print $search_form_authperso;
3197                                error_message($msg["searcher_no_result"],$msg["searcher_no_result_desc"]);
3198                                $browser=str_replace("!!browser_url!!",$browser_url,$browser);
3199                                print $browser;
3200                                return;
3201                        }
3202                } else {
3203                        $this->show_error($aq->current_car,$aq->input_html,$aq->error_message);
3204                }
3205        }
3206
3207        function make_aut_search() {
3208                global $aut_type,$mag,$charset,$nb_per_page_a_search;
3209                global $acces_j;
3210                global $mode,$aut_id;
3211
3212                if ($nb_per_page_a_search) $this->nb_per_page=$nb_per_page_a_search; else $this->nb_per_page=3;
3213
3214                switch ($aut_type) {
3215                        case "authperso":
3216                                $requete_count = "select count(distinct notice_authperso_notice_num) from notices_authperso, notices ";
3217                                $requete_count.= $acces_j;
3218                                $requete_count.= "where notice_authperso_notice_num=notice_id and notice_authperso_authority_num='".$aut_id."' ";
3219
3220                                $requete = "select distinct notice_id from notices_authperso, notices ";
3221                                $requete.= $acces_j;
3222                                $requete.= "where notice_authperso_notice_num=notice_id and notice_authperso_authority_num='".$aut_id."' ";
3223                                //                              $requete.= "order by index_serie,tnvol,index_sew limit ".($this->page*$this->nb_per_page).",".$this->nb_per_page;
3224                                break;
3225                }
3226                $this->nbresults=@pmb_mysql_result(@pmb_mysql_query($requete_count),0,0);
3227                $this->t_query=@pmb_mysql_query($requete);
3228                $this->nbepage=ceil($this->nbresults/$this->nb_per_page);
3229                $this->text_query=$requete;
3230        }
3231
3232        function store_search() {
3233                global $search_ed;
3234                global $show_empty;
3235                global $charset;
3236                $champs="<input type='hidden' name='search_ed' value='".htmlentities(stripslashes($search_ed),ENT_QUOTES,$charset)."'/>";
3237                $champs.="<input type='hidden' name='show_empty' value='".$show_empty."'/>";
3238                $this->store_form=str_replace("!!first_search_variables!!",$champs,$this->store_form);
3239                print $this->store_form;
3240        }
3241
3242        function aut_store_search() {
3243                global $charset,$aut_type;
3244                $champs="<input type='hidden' name='aut_id' value='".htmlentities(stripslashes($this->id),ENT_QUOTES,$charset)."'/>";
3245                $champs.="<input type='hidden' name='aut_type' value='".htmlentities(stripslashes($aut_type),ENT_QUOTES,$charset)."'/>";
3246                $this->store_form=str_replace("!!first_search_variables!!",$champs,$this->store_form);
3247                print $this->store_form;
3248        }
3249
3250        function aut_list() {
3251                global $msg,$charset;
3252                global $search_authperso,$mode;
3253
3254                $authperso=new authperso($mode-1000);
3255                $info=$authperso->get_data();
3256
3257                $this->human_query="<b>".$info['name']." </b> ".htmlentities(stripslashes($search_authperso),ENT_QUOTES,$charset);
3258                $this->human_aut_query=$this->human_query;
3259                $pair_impair = "";
3260                $parity = 0;
3261                if ($this->nb_authperso) {
3262                        $authperso_seach_title=str_replace("!!name!!",$info['name'],$msg["search_by_authperso"]);
3263                        print "<strong>".$authperso_seach_title." : ".sprintf($msg["searcher_results"],$this->nb_authperso)."</strong><hr /><table>";
3264                        while (($p=@pmb_mysql_fetch_object($this->authperso_query))) {
3265                                $pair_impair = $parity % 2 ? "even" : "odd";
3266                                $notice_count_sql = "SELECT count(*) FROM notices_authperso WHERE notice_authperso_authority_num = ".$p->id_authperso_authority ;
3267                                $notice_count = pmb_mysql_result(pmb_mysql_query($notice_count_sql), 0, 0);
3268
3269
3270                                $isbd=$authperso->get_isbd($p->id_authperso_authority);
3271                                print "<tr class=\"".$pair_impair."\"><td><a href='".$this->base_url."&etat=aut_search&aut_type=authperso&aut_id=".$p->id_authperso_authority."'>".htmlentities($isbd,ENT_QUOTES,$charset)."</a>";
3272                                print "</td><td>$notice_count</td></tr>\n";
3273                                $parity++;
3274                        }
3275                        print "</table>\n";
3276                }
3277        }
3278
3279        function notice_list_common($title) {
3280                global $begin_result_liste;
3281                global $end_result_liste;
3282                global $msg;
3283                global $charset;
3284                global $pmb_nb_max_tri;
3285                global $link,$link_expl,$link_explnum,$link_serial,$link_analysis,$link_bulletin,$link_explnum_serial,$link_explnum_analysis,$link_explnum_bulletin;
3286                global $pmb_allow_external_search;
3287                global $load_tablist_js,$mode;
3288
3289                $research=$title;
3290                $research .= " => ".sprintf($msg["searcher_results"],$this->nbresults);
3291                print "<div class='othersearchinfo'>$research</div>";
3292                print $begin_result_liste;
3293                $load_tablist_js=1;
3294                //Affichage des liens paniers et impression
3295                if ($this->rec_history) {
3296                        $current=$_SESSION["CURRENT"];
3297                        if ($current!==false) {
3298                                $tri_id_info = $_SESSION["tri"] ? "&sort_id=".$_SESSION["tri"] : "";
3299                                print "&nbsp;<a href='#' onClick=\"openPopUp('./print_cart.php?current_print=$current&action=print_prepare".$tri_id_info."','print',500, 600, -2, -2, 'scrollbars=yes,menubar=0,resizable=yes'); w.focus(); return false;\"><img src='./images/basket_small_20x20.gif' border='0' align='center' alt=\"".$msg["histo_add_to_cart"]."\" title=\"".$msg["histo_add_to_cart"]."\"></a>&nbsp;<a href='#' onClick=\"openPopUp('./print.php?current_print=$current&action_print=print_prepare','print', 500, 600, -2, -2, 'scrollbars=yes,menubar=0'); return false;\"><img src='./images/print.gif' border='0' align='center' alt=\"".$msg["histo_print"]."\" title=\"".$msg["histo_print"]."\"/></a>";
3300                                print "&nbsp;<a href='#' onClick=\"openPopUp('./download.php?current_download=$current&action_download=download_prepare".$tri_id_info."','download',500,600,-2,-2,'scrollbars=yes,menubar=0'); return false;\"><img src='./images/upload_docnum.gif' border='0' align='center' alt=\"".$msg["docnum_download"]."\" title=\"".$msg["docnum_download"]."\"/></a>";
3301                                if ($pmb_allow_external_search) print "&nbsp;<a href='catalog.php?categ=search&mode=$mode&from_mode=3&external_type=simple' title='".$msg["connecteurs_external_search_sources"]."'><img src='./images/external_search.png' border='0' align='center' alt=\"".$msg["connecteurs_external_search_sources"]."\"/></a>";
3302                                // on affiche l'icone de tri seulement si on a atteint un nb maxi de résultats
3303                                if ($this->nbresults<=$pmb_nb_max_tri) {
3304
3305                                        //affichage de l'icone de tri
3306                                        echo "<a href=# onClick=\"document.getElementById('history').src='./sort.php?type_tri=notices'; document.getElementById('history').style.display='';return false;\" ";
3307                                        echo "alt=\"".$msg['tris_dispos']."\" title=\"".$msg['tris_dispos']."\">";
3308                                        echo "<img src=./images/orderby_az.gif align=middle hspace=3></a>";
3309
3310                                        //si on a un tri actif on affiche sa description
3311                                        if ($_SESSION["tri"]) {
3312                                                echo $msg['tri_par']." ".$this->sort->descriptionTriParId($_SESSION["tri"]);
3313                                        }
3314                                }
3315                        }
3316                }
3317                print $this->get_current_search_map(1000);
3318                // on lance la requête
3319                $recherche_ajax_mode=0;
3320                $nb=0;
3321                while(($nz=@pmb_mysql_fetch_object($this->t_query))) {
3322                        $n=@pmb_mysql_fetch_object(@pmb_mysql_query("SELECT * FROM notices WHERE notice_id=".$nz->notice_id));
3323                        if($nb++>5)$recherche_ajax_mode=1;
3324                        switch($n->niveau_biblio) {
3325                                case 'm' :
3326                                        // notice de monographie
3327                                        $display = new mono_display($n, 6, $link, 1, $link_expl, '', $link_explnum,1, 0, 1, 1, "", 1  , false,true,$recherche_ajax_mode,1);
3328                                        print $display->result;
3329                                        break ;
3330                                case 's' :
3331                                        // on a affaire à un périodique
3332                                        // function serial_display ($id, $level='1', $action_serial='', $action_analysis='', $action_bulletin='', $lien_suppr_cart="", $lien_explnum="", $bouton_explnum=1,$print=0,$show_explnum=1, $show_statut=0, $show_opac_hidden_fields=true, $draggable=0 ) {
3333                                        $serial = new serial_display($n, 6, $link_serial, $link_analysis, $link_bulletin, "", $link_explnum_serial, 0, 0, 1, 1, true, 1,$recherche_ajax_mode );
3334                                        print $serial->result;
3335                                        break;
3336                                case 'a' :
3337                                        // on a affaire à un article
3338                                        // function serial_display ($id, $level='1', $action_serial='', $action_analysis='', $action_bulletin='', $lien_suppr_cart="", $lien_explnum="", $bouton_explnum=1,$print=0,$show_explnum=1, $show_statut=0, $show_opac_hidden_fields=true, $draggable=0 ) {
3339                                        $serial = new serial_display($n, 6, $link_serial, $link_analysis, $link_bulletin, "", $link_explnum_analysis, 0, 0, 1, 1, true, 1,$recherche_ajax_mode );
3340                                        print $serial->result;
3341                                        break;
3342                                case 'b' :
3343                                        // on a affaire à un bulletin
3344                                        $rqt_bull_info = "SELECT s.notice_id as id_notice_mere, bulletin_id as id_du_bulletin, b.notice_id as id_notice_bulletin FROM notices as s, notices as b, bulletins WHERE b.notice_id=$n->notice_id and s.notice_id=bulletin_notice and num_notice=b.notice_id";
3345                                        $bull_ids=@pmb_mysql_fetch_object(pmb_mysql_query($rqt_bull_info));
3346                                        $link_notice_bulletin = './catalog.php?categ=serials&sub=bulletinage&action=view&bul_id='.$bull_ids->id_du_bulletin;
3347                                        $link_explnum_bulletin = str_replace("!!bul_id!!",$bull_ids->id_du_bulletin,$link_explnum_bulletin);
3348                                        $display = new mono_display($n, 6, $link_notice_bulletin, 1, $link_expl, '', $link_explnum_bulletin,1, 0, 1, 1, "", 1  , false,true,$recherche_ajax_mode);
3349                                        print $display->result;
3350                                        break;
3351                        }
3352                }
3353                // fin de liste
3354                print $end_result_liste;
3355        }
3356
3357        function aut_notice_list() {
3358                global $msg;
3359                global $charset;
3360                global $aut_type,$mode,$aut_id;
3361
3362                switch ($aut_type) {
3363                        case "authperso":
3364                                $authperso=new authperso($mode-1000);
3365                                $info=$authperso->get_data();
3366                                $isbd=$authperso->get_isbd($aut_id);
3367                                $display = "<b>".$info['name']."</b>&nbsp;".htmlentities($isbd,ENT_QUOTES,$charset);
3368                                $this->human_notice_query=$display;
3369                                break;
3370                }
3371                $this->notice_list_common($display);
3372        }
3373
3374        function rec_env() {
3375                global $msg;
3376                global $info_authpersos,$id_authperso;
3377
3378                switch ($this->etat) {
3379                        case 'first_search':
3380                                if ((string)$this->page=="") {
3381                                        $_SESSION["CURRENT"]=count($_SESSION["session_history"]);
3382                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]["URI"]=$this->base_url;
3383                                        $_POST["etat"]="";
3384                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]['POST']=$_POST;
3385                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]['GET']=$_GET;
3386                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]=array();
3387                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]=array();
3388                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]["HUMAN_QUERY"]=$this->human_query;
3389                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["QUERY"]["HUMAN_TITLE"]=$info_authpersos[$id_authperso]['name'];
3390                                }
3391                                if ((string)$this->page=="") {
3392                                        $_POST["page"]=0; $page=0;
3393                                }
3394                                if (($this->first_search_result==AUT_LIST)&&($_SESSION["CURRENT"]!==false)) {
3395                                        $_POST["etat"]="first_search";
3396                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]['URI']=$this->base_url;
3397                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]['POST']=$_POST;
3398                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]['GET']=$_GET;
3399                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]['PAGE']=$this->page+1;
3400                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["AUT"]["HUMAN_QUERY"]=$this->human_aut_query;
3401                                }
3402                                if (($this->first_search_result==NOTICE_LIST)&&($_SESSION["CURRENT"]!==false)) {
3403                                        $_POST["etat"]="first_search";
3404                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['URI']=$this->base_url;
3405                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['POST']=$_POST;
3406                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['GET']=$_GET;
3407                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['TEXT_QUERY']=$this->text_query;
3408                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['PAGE']=$this->page+1;
3409                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]["HUMAN_QUERY"]=$this->human_notice_query;
3410                                }
3411                                break;
3412                        case 'aut_search':
3413                                if ($_SESSION["CURRENT"]!==false) {
3414                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['URI']=$this->base_url;
3415                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['POST']=$_POST;
3416                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['GET']=$_GET;
3417                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['PAGE']=$this->page+1;
3418                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['TEXT_QUERY']=$this->text_query;
3419                                        $_SESSION["session_history"][$_SESSION["CURRENT"]]["NOTI"]['HUMAN_QUERY']=$this->human_notice_query;
3420                                }
3421                                break;
3422                }
3423                $_SESSION["last_required"]=false;
3424        }
3425
3426        static function convert_simple_multi($id_champ) {
3427                global $search;
3428
3429                $valeur_champ=$_SESSION["session_history"][$id_champ]["NOTI"]["GET"]["aut_id"];
3430                $op_="EQ";
3431
3432                switch ($_SESSION["session_history"][$id_champ]["NOTI"]["GET"]["aut_type"]) {
3433                        case "authperso":
3434                                $search[0]="f_3";//!!!!!!!!! a modifier
3435                                break;
3436                }
3437                //opérateur
3438                $op="op_0_".$search[0];
3439                global $$op;
3440                $$op=$op_;
3441
3442                //contenu de la recherche
3443                $field="field_0_".$search[0];
3444                $field_=array();
3445                $field_[0]=$valeur_champ;
3446                global $$field;
3447                $$field=$field_;
3448
3449                //opérateur inter-champ
3450                $inter="inter_0_".$search[0];
3451                global $$inter;
3452                $$inter="";
3453
3454                //variables auxiliaires
3455                $fieldvar_="fieldvar_0_".$search[0];
3456                global $$fieldvar_;
3457                $$fieldvar_="";
3458                $fieldvar=$$fieldvar_;
3459        }
3460
3461        static function convert_simple_multi_unimarc($id_champ) {
3462                global $search;
3463
3464                $valeur_champ=$_SESSION["session_history"][$id_champ]["NOTI"]["GET"]["aut_id"];
3465                $op_="BOOLEAN";
3466
3467                switch ($_SESSION["session_history"][$id_champ]["NOTI"]["GET"]["aut_type"]) {
3468                        case "authperso":
3469                                $search[0]="f_3";
3470                                //Recherche de l'éditeur
3471                                $tu_id=$valeur_champ;
3472                                $requete="select tu_name from titres_uniformes where tu_id=".$tu_id;
3473                                $r_pub=pmb_mysql_query($requete);
3474                                if (@pmb_mysql_num_rows($r_pub)) {
3475                                        $valeur_champ=pmb_mysql_result($r_pub,0,0);
3476                                }
3477                                break;
3478                }
3479
3480                //opérateur
3481                $op="op_0_".$search[0];
3482                global $$op;
3483                $$op=$op_;
3484
3485                //contenu de la recherche
3486                $field="field_0_".$search[0];
3487                $field_=array();
3488                $field_[0]=$valeur_champ;
3489                global $$field;
3490                $$field=$field_;
3491
3492                //opérateur inter-champ
3493                $inter="inter_0_".$search[0];
3494                global $$inter;
3495                $$inter="";
3496
3497                //variables auxiliaires
3498                $fieldvar_="fieldvar_0_".$search[0];
3499                global $$fieldvar_;
3500                $$fieldvar_="";
3501                $fieldvar=$$fieldvar_;
3502        }
3503}
3504
3505
3506class searcher_map extends searcher {
3507        var $t_query;
3508
3509
3510        function show_form() {
3511                global $msg;
3512                global $dbh;
3513                global $charset,$lang;
3514                global $search_form_map;
3515                global $all_query,$typdoc_query, $statut_query, $docnum_query, $pmb_indexation_docnum_allfields, $pmb_indexation_docnum;
3516                global $categ_query,$thesaurus_auto_postage_search,$auto_postage_query;
3517                global $thesaurus_concepts_active,$concept_query;
3518                global $map_echelle_query,$map_projection_query,$map_ref_query,$map_equinoxe_query;
3519                global $pmb_map_size_search_edition;
3520                global $pmb_map_base_layer_type;
3521                global $pmb_map_base_layer_params;
3522                global $map_emprises_query;
3523
3524                // on commence par créer le champ de sélection de document
3525                // récupération des types de documents utilisés.
3526                $query = "SELECT count(typdoc), typdoc ";
3527                $query .= "FROM notices where typdoc!='' GROUP BY typdoc";
3528                $result = @pmb_mysql_query($query, $dbh);
3529                $toprint_typdocfield .= "  <option value=''>$msg[tous_types_docs]</option>\n";
3530                $doctype = new marc_list('doctype');
3531                while (($rt = pmb_mysql_fetch_row($result))) {
3532                        $obj[$rt[1]]=1;
3533                        $qte[$rt[1]]=$rt[0];
3534                }
3535                foreach ($doctype->table as $key=>$libelle){
3536                        if ($obj[$key]==1){
3537                                $toprint_typdocfield .= "  <option ";
3538                                $toprint_typdocfield .= " value='$key'";
3539                                if ($typdoc == $key) $toprint_typdocfield .=" selected='selected' ";
3540                                $toprint_typdocfield .= ">".htmlentities($libelle." (".$qte[$key].")",ENT_QUOTES, $charset)."</option>\n";
3541                        }
3542                }
3543
3544                // récupération des statuts de documents utilisés.
3545                $query = "SELECT count(statut), id_notice_statut, gestion_libelle ";
3546                $query .= "FROM notices, notice_statut where id_notice_statut=statut GROUP BY id_notice_statut order by gestion_libelle";
3547                $result = pmb_mysql_query($query, $dbh);
3548                $toprint_statutfield .= "  <option value=''>$msg[tous_statuts_notice]</option>\n";
3549                while ($obj = @pmb_mysql_fetch_row($result)) {
3550                        $toprint_statutfield .= "  <option value='$obj[1]'";
3551                        if ($statut_query==$obj[1]) $toprint_statutfield.=" selected";
3552                        $toprint_statutfield .=">".htmlentities($obj[2]."  (".$obj[0].")",ENT_QUOTES, $charset)."</OPTION>\n";
3553                }
3554
3555                $search_form_map = str_replace("!!typdocfield!!", $toprint_typdocfield, $search_form_map);
3556                $search_form_map = str_replace("!!statutfield!!", $toprint_statutfield, $search_form_map);
3557                $search_form_map = str_replace("!!all_query!!", htmlentities(stripslashes($all_query),ENT_QUOTES, $charset),  $search_form_map);
3558                $search_form_map = str_replace("!!categ_query!!", htmlentities(stripslashes($categ_query),ENT_QUOTES, $charset),  $search_form_map);
3559
3560                if($thesaurus_concepts_active){
3561                        $search_form_map = str_replace("!!concept_query!!", htmlentities(stripslashes($concept_query),ENT_QUOTES, $charset),  $search_form_map);
3562                }
3563                // map
3564                $layer_params = json_decode($pmb_map_base_layer_params,true);
3565                $baselayer =  "baseLayerType: dojox.geo.openlayers.BaseLayerType.".$pmb_map_base_layer_type;
3566                if(count($layer_params)){
3567                        if($layer_params['name']) $baselayer.=",baseLayerName:\"".$layer_params['name']."\"";
3568                        if($layer_params['url']) $baselayer.=",baseLayerUrl:\"".$layer_params['url']."\"";
3569                        if($layer_params['options']) $baselayer.=",baseLayerOptions:".json_encode($layer_params['options']);
3570                }
3571
3572                $size=explode("*",$pmb_map_size_search_edition);
3573                if(count($size)!=2)$map_size="width:800px; height:480px;";
3574                $map_size= "width:".$size[0]."px; height:".$size[1]."px;";
3575
3576                if(!$map_emprises_query)$map_emprises_query = array();
3577                $map_holds=array();
3578                foreach($map_emprises_query as $map_hold){
3579                        $map_holds[] = array(
3580                                        "wkt" => $map_hold,
3581                                        "type"=> "search",
3582                                        "color"=> null,
3583                                        "objects"=> array()
3584                        );
3585                }
3586                $r="<div id='map_search' data-dojo-type='apps/map/map_controler' style='$map_size' data-dojo-props='".$baselayer.",mode:\"search_criteria\",hiddenField:\"map_emprises_query\",searchHolds:".json_encode($map_holds,true)."'></div>";
3587
3588                $search_form_map = str_replace("!!map!!", $r,  $search_form_map);
3589
3590                //champs maps
3591                $requete = "SELECT map_echelle_id, map_echelle_name FROM map_echelles ORDER BY map_echelle_name ";
3592                $projections=gen_liste($requete,"map_echelle_id","map_echelle_name","map_echelle_query","",$map_echelle_query,0,"",0,$msg['map_echelle_vide']);
3593                $search_form_map=str_replace("!!map_echelle_list!!",$projections,$search_form_map);
3594
3595