source: pmb4.2/trunk/fuentes/pmb/classes/search.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: 169.5 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: search.class.php,v 1.192.2.3 2015-12-01 09:39:14 jpermanne Exp $
6
7if (stristr($_SERVER['REQUEST_URI'], ".class.php")) die("no access");
8//Classe de gestion des recherches avancees
9
10if(!is_object($autoloader)){
11        require_once($class_path."/autoloader.class.php");
12        $autoloader = new autoloader();
13       
14}
15
16require_once($include_path."/parser.inc.php");
17require_once($class_path."/parametres_perso.class.php");
18require_once($include_path."/templates/search.tpl.php");
19require_once($class_path."/analyse_query.class.php");
20require_once($class_path."/sort.class.php");
21require_once("$class_path/acces.class.php");
22require_once($include_path."/isbn.inc.php");
23require_once("$class_path/fiche.class.php");
24
25//pour les autorités
26require_once("$class_path/author.class.php");
27require_once("$class_path/categories.class.php");
28require_once("$class_path/editor.class.php");
29require_once("$class_path/collection.class.php");
30require_once("$class_path/subcollection.class.php");
31require_once("$class_path/serie.class.php");
32require_once("$class_path/titre_uniforme.class.php");
33require_once("$class_path/indexint.class.php");
34require_once("$class_path/authperso.class.php");
35require_once($class_path."/map/map_search_controler.class.php");
36
37if($pmb_map_activate){
38        require_once($class_path."/map/map_search_controler.class.php");
39}
40
41if ($pmb_allow_external_search && (SESSrights & ADMINISTRATION_AUTH) && $id_connector_set)
42        require_once($class_path."/connecteurs_out_sets.class.php");                   
43
44class mterm {
45        var $sc_type;
46        var     $uid;                   //Identifiant du champ
47        var     $ufield;                //Nom du champ UNIMARC
48        var $op;                        //Operateur
49        var $values;            //Liste des valeurs (tableau)
50        var $vars;                      //Valeurs annexes
51        var $sub;                       //sous liste de termes (tableau)
52        var $inter;                     //operateur entre ce terme et le precedent
53       
54        function mterm($ufield,$op,$values,$vars,$inter,$uid="") {
55                $this->uid = $uid;
56                $this->ufield=$ufield;
57                $this->op=$op;
58                $this->values=$values;
59                $this->vars=$vars;
60                $this->inter=$inter;
61        }
62       
63        function set_sub($sub) {
64                $this->sub=$sub;
65        }
66}
67
68class search {
69
70        var $operators;
71        var $op_empty;
72        var $fixedfields;
73        var $dynamicfields;
74        var $specialfields;
75        var $pp;
76        var $error_message;
77        var $link;
78        var     $link_expl;
79        var     $link_expl_bull; 
80        var     $link_explnum;
81        var $link_serial;
82        var $link_analysis;
83        var     $link_bulletin;
84        var     $link_explnum_serial;
85        var     $link_explnum_analysis;
86        var     $link_explnum_bulletin;
87        var $rec_history;
88        var $tableau_speciaux;
89        var $operator_multi_value;
90        var $full_path='';
91        var $fichier_xml;
92       
93        var $dynamics_not_visible;
94        var $specials_not_visible;
95       
96        var $isfichier = false;
97        var $memory_engine_allowed = false;
98        var $current_engine = 'MyISAM';
99        var $authpersos = array();
100       
101       
102       
103    function search($rec_history=false,$fichier_xml="",$full_path='') {
104        global $launch_search;
105       
106        $this->parse_search_file($fichier_xml,$full_path);
107        $this->strip_slashes();
108        foreach ( $this->dynamicfields as $key => $value ) {
109                $this->pp[$key]=new parametres_perso($value["TYPE"]);
110                }
111                $authpersos=new authpersos();
112                $this->authpersos=$authpersos->get_data();
113               
114                $this->rec_history=$rec_history;
115                $this->full_path = $full_path;         
116                $this->fichier_xml=$fichier_xml;
117    }
118   
119    function strip_slashes() {
120        global $search, $explicit_search;
121        for ($i=0; $i<count($search); $i++) {
122                $s=explode("_",$search[$i]);
123                $field_="field_".$i."_".$search[$i];
124                global $$field_;
125                $field=$$field_;
126                for ($j=0; $j<count($field); $j++) {
127                        $field[$j]=stripslashes($field[$j]);
128                }
129                if ($explicit_search) {
130                        if ($s[0]=="f") {
131                                $ff=$this->fixedfields[$s[1]];
132                                switch ($ff["INPUT_TYPE"]) {
133                                        case "date":
134                                                if(!preg_match("/^\d{4}-\d{2}-\d{2}$/",$field[0])) {
135                                                        $field_temp=extraitdate($field[0]);
136                                                        $field[0]=$field_temp;
137                                                }
138                                                break;
139                                        default:
140                                        //Rien a faire
141                                                break;
142                                }
143                        }
144                }
145                $$field_=$field;
146        }
147    }
148   
149    function get_id_from_datatype($datatype, $fieldType = "d") {
150        reset($this->dynamicfields[$fieldType]["FIELD"]);
151        while (list($key,$val)=each($this->dynamicfields[$fieldType]["FIELD"])) {
152                if ($val["DATATYPE"]==$datatype) return $key;
153        }
154        return "";
155    }
156   
157    function get_field($i,$n,$search,$pp) {
158        global $charset;
159        global $aff_list_empr_search;
160        global $msg;
161        global $include_path;
162        global $thesaurus_classement_mode_pmb;
163        global $pmb_map_size_search_edition; 
164       
165        $r="";
166        $s=explode("_",$search);
167       
168        //Champ
169        $val="field_".$i."_".$search;
170        global $$val;
171        $v=$$val;
172        if ($v=="") $v=array();
173       
174        //Variables
175        $fieldvar_="fieldvar_".$i."_".$search;
176                global $$fieldvar_;
177                $fieldvar=$$fieldvar_;
178       
179        if ($s[0]=="f") {
180                //Champs fixes
181                $ff=$this->fixedfields[$s[1]];
182               
183                //Variables globales et input
184                for ($j=0; $j<count($ff["VAR"]); $j++) {
185                        switch ($ff["VAR"][$j]["TYPE"]) {
186                                case "input":
187                                                $valvar="fieldvar_".$i."_".$search."[\"".$ff["VAR"][$j]["NAME"]."\"]";
188                                                global $$valvar;
189                                                $vvar[$ff["VAR"][$j]["NAME"]]=$$valvar;
190                                                if ($vvar[$ff["VAR"][$j]["NAME"]]=="") $vvar[$ff["VAR"][$j]["NAME"]]=array();
191                                                $var_table[$ff["VAR"][$j]["NAME"]]=$vvar[$ff["VAR"][$j]["NAME"]];
192                                                break;
193                                        case "global":
194                                                $global_name=$ff["VAR"][$j]["NAME"];
195                                                global $$global_name;
196                                                $var_table[$ff["VAR"][$j]["NAME"]]=$$global_name;
197                                                break;
198                        }
199                }
200               
201                switch ($ff["INPUT_TYPE"]) {
202                        case "authoritie_external":
203                                $r="";
204                                $op = "op_".$i."_".$search;
205                                global $$op;
206                                        global $lang;
207                                        $libelle = "";
208                                if ($$op == "AUTHORITY"){
209                                                if($v[0]!= 0){
210                                                        switch ($ff['INPUT_OPTIONS']['SELECTOR']){
211                                                                case "auteur":
212                                                                        $aut=new auteur($v[0]);
213                                                                        if($aut->rejete) $libelle = $aut->name.', '.$aut->rejete;
214                                                                        else $libelle = $aut->name;
215                                                                        if($aut->date) $libelle .= " ($aut->date)";
216                                                                        break;
217                                                                case "categorie":
218                                                                        $libelle = categories::getlibelle($v[0],$lang);
219                                                                        break;
220                                                                case "editeur":
221                                                                        $ed = new editeur($v[0]);
222                                                                        $libelle=$ed->name;
223                                                                        if ($ed->ville) 
224                                                                                if ($ed->pays) $libelle.=" ($ed->ville - $ed->pays)";
225                                                                                else $libelle.=" ($ed->ville)";
226                                                                        break;
227                                                                case "collection" :
228                                                                        $coll = new collection($v[0]);
229                                                                        $libelle = $coll->name;
230                                                                        break;
231                                                                case "subcollection" :
232                                                                        $coll = new subcollection($v[0]);
233                                                                        $libelle = $coll->name;
234                                                                        break;
235                                                                case "serie" :
236                                                                        $serie = new serie($v[0]);
237                                                                        $libelle = $serie->name;
238                                                                        break;
239                                                                case "indexint" :
240                                                                        $indexint = new indexint($v[0]);
241                                                                        if ($indexint->comment) $libelle = $indexint->name." - ".$indexint->comment;
242                                                                        else $libelle = $indexint->name ;
243                                                                        if ($thesaurus_classement_mode_pmb != 0) {
244                                                                                $libelle="[".$indexint->name_pclass."] ".$libelle;
245                                                                        }
246                                                                        break;
247                                                                case "titre_uniforme" :
248                                                                        $tu = new titre_uniforme($v[0]);
249                                                                        $libelle = $tu->name;
250                                                                        break;
251                                                                case "notice" :
252                                                                                $requete = "select if(serie_name is not null,if(tnvol is not null,concat(serie_name,', ',tnvol,'. ',tit1),concat(serie_name,'. ',tit1)),tit1) AS tit from notices left join series on serie_id=tparent_id where notice_id='".$v[0]."' ";
253                                                                                $res=pmb_mysql_query($requete);
254                                                                                if($res && pmb_mysql_num_rows($res)){
255                                                                                        $libelle = pmb_mysql_result($res,0,0);
256                                                                                }else{
257                                                                                        $libelle = $v[0];
258                                                                                }
259                                                                                break;
260                                                                default :
261                                                                        $libelle = $v[0];
262                                                                        break;
263                                                        }
264                                                }
265                                                $$op == "BOOLEAN";
266                                        $r="<script>document.forms['search_form'].".$op.".options[0].selected=true;</script>";
267                                }
268                               
269                                if($libelle){
270                                        $r.="<input type='text' name='field_".$n."_".$search."[]' value='".htmlentities($libelle,ENT_QUOTES,$charset)."'/>";
271                                }else{
272                                        $r.="<input type='text' name='field_".$n."_".$search."[]' value='".htmlentities($v[0],ENT_QUOTES,$charset)."'/>";
273                                }
274                                break;
275                        case "authoritie":
276                                                $fnamesans="field_".$n."_".$search;
277                                                $fname="field_".$n."_".$search."[]";
278                                                $fname_id="field_".$n."_".$search."_id";
279                                                $fnamesanslib="field_".$n."_".$search."_lib";
280                                                $fnamelib="field_".$n."_".$search."_lib[]";
281                                                $fname_name_aut_id="fieldvar_".$n."_".$search."[authority_id][]";
282                                                $fname_aut_id="fieldvar_".$n."_".$search."_authority_id";
283
284                                                $ajax=$ff["INPUT_OPTIONS"]["AJAX"];
285                                                $selector=$ff["INPUT_OPTIONS"]["SELECTOR"];
286                                                $p1=$ff["INPUT_OPTIONS"]["P1"];
287                                                $p2=$ff["INPUT_OPTIONS"]["P2"];
288                                                global $thesaurus_mode_pmb;
289                                                if($ajax == "categories_mul" and $thesaurus_mode_pmb == 1){
290                                                        $fnamevar_id = "linkfield=\"fieldvar_".$n."_".$search."[id_thesaurus][]\"";
291                                                        $fnamevar_id_js = "fieldvar_".$n."_".$search."[id_thesaurus][]";
292                                                }else{
293                                                        $fnamevar_id = "";
294                                                        $fnamevar_id_js = "";
295                                                }
296                                                $op = "op_".$i."_".$search;
297                                                global $$op;
298                                                global $lang;
299                                               
300                                                $nb_values=count($v);
301                                                if(!$nb_values){
302                                                        //Création de la ligne
303                                                        $nb_values=1;
304                                                }
305                                                $nb_max_aut=$nb_values-1;
306                                               
307                                                $r= "<input type='hidden' id='$fnamesans"."_max_aut' value='".$nb_max_aut."'>";
308                                                $r.= "<input class='bouton' value='...' id='$fnamesans"."_authority_selector' onclick=\"openPopUp('./select.php?what=$selector&caller=search_form&mode=un&p1=".$fname_id."_0&p2=".$fnamesanslib."_0&deb_rech='+".pmb_escape()."(document.getElementById('".$fnamesanslib."_0').value)+'&callback=authoritySelected&infield=".$fnamesans."_0', 'select_author0', 400, 400, -2, -2, 'scrollbars=yes, toolbar=no, dependent=yes, resizable=yes')\" type=\"button\">";
309                                                $r.= "<input class='bouton' type='button' value='+' onclick='add_line(\"$fnamesans\")'>";
310
311                                                $r.= "<div id='el$fnamesans'>";
312                                               
313                                                for($inc=0;$inc<$nb_values;$inc++){
314                                                        $r.="<input id='".$fnamesans."_".$inc."' name='$fname' value='".htmlentities($v[$inc],ENT_QUOTES,$charset)."' type='hidden' />";
315                                                       
316                                                        if ($$op == "AUTHORITY"){
317                                                                if($v[$inc]!= 0){
318                                                                        switch ($ff['INPUT_OPTIONS']['SELECTOR']){
319                                                                                case "auteur":
320                                                                                        $aut=new auteur($v[$inc]);
321                                                                                        if($aut->rejete) $libelle = $aut->name.', '.$aut->rejete;
322                                                                                        else $libelle = $aut->name;
323                                                                                        if($aut->date) $libelle .= " ($aut->date)";
324                                                                                        break;
325                                                                                case "categorie":
326                                                                                        $libelle = categories::getlibelle($v[$inc],$lang);
327                                                                                        break;
328                                                                                case "editeur":
329                                                                                        $ed = new editeur($v[$inc]);
330                                                                                        $libelle=$ed->name;
331                                                                                        if ($ed->ville)
332                                                                                                if ($ed->pays) $libelle.=" ($ed->ville - $ed->pays)";
333                                                                                                else $libelle.=" ($ed->ville)";
334                                                                                        break;
335                                                                                case "collection" :
336                                                                                        $coll = new collection($v[$inc]);
337                                                                                        $libelle = $coll->name;
338                                                                                        break;
339                                                                                case "subcollection" :
340                                                                                        $coll = new subcollection($v[$inc]);
341                                                                                        $libelle = $coll->name;
342                                                                                        break;
343                                                                                case "serie" :
344                                                                                        $serie = new serie($v[$inc]);
345                                                                                        $libelle = $serie->name;
346                                                                                        break;
347                                                                                case "indexint" :
348                                                                                        $indexint = new indexint($v[$inc]);
349                                                                                        if ($indexint->comment) $libelle = $indexint->name." - ".$indexint->comment;
350                                                                                        else $libelle = $indexint->name ;
351                                                                                        if ($thesaurus_classement_mode_pmb != 0) {
352                                                                                                $libelle="[".$indexint->name_pclass."] ".$libelle;
353                                                                                        }
354                                                                                        break;
355                                                                                case "titre_uniforme" :
356                                                                                        $tu = new titre_uniforme($v[$inc]);
357                                                                                        $libelle = $tu->name;
358                                                                                        break; 
359                                                                                default :
360                                                                                        $libelle = $v[$inc];
361                                                                                        break;
362                                                                        }
363                                                                }else{
364                                                                        $libelle = "";
365                                                                }
366                                                                $r.="<input autfield='".$fname_id."_".$inc."' onkeyup='fieldChanged(\"".$fnamesans."\",".$inc.",this.value,event)' callback='authoritySelected' completion='$ajax' $fnamevar_id id='".$fnamesanslib."_".$inc."' name='$fnamelib' value='".htmlentities($libelle,ENT_QUOTES,$charset)."' type='text' class='saisie-20emr'/>
367                                                                ";                                             
368                                                        }else{
369                                                                $r.="<input autfield='".$fname_id."_".$inc."' onkeyup='fieldChanged(\"".$fnamesans."\",".$inc.",this.value,event)' callback='authoritySelected' completion='$ajax' $fnamevar_id id='".$fnamesanslib."_".$inc."' name='$fnamelib' value='".htmlentities($v[$inc],ENT_QUOTES,$charset)."' type='text' />
370                                                                ";
371                                                        }
372                                                        $r.= "<input class='bouton' type='button' onclick='this.form.".$fnamesanslib."_".$inc.".value=\"\";this.form.".$fnamesans."_".$inc.".value=\"0\";' value='X'>";
373                                                        $r.= "<input type='hidden' value='".($fieldvar['authority_id'][$inc] ?$fieldvar['authority_id'][$inc] : "")."' id='".$fname_aut_id."_".$inc."' name='$fname_name_aut_id' />";
374                                                        $r.= "<input name='$fname_id' id='".$fname_id."_".$inc."' value='".htmlentities($v[$inc],ENT_QUOTES,$charset)."' type='hidden'><br>";
375                                                }
376                                                $r.= "</div>";
377                                                if($nb_values>1){
378                                                        $r.="<script>
379                                                                        document.getElementById('op_".$i."_".$search."').disabled=true;
380                                                                        operators_to_enable.push('op_".$i."_".$search."');
381                                                                </script>";
382                                                }
383                                break;
384                        case "text":
385                                if (substr($ff['INPUT_OPTIONS']["PLACEHOLDER"],0,4)=="msg:") {
386                                        $input_placeholder = $msg[substr($ff['INPUT_OPTIONS']["PLACEHOLDER"],4,strlen($ff['INPUT_OPTIONS']["PLACEHOLDER"])-4)];
387                                } else {
388                                        $input_placeholder = $ff['INPUT_OPTIONS']["PLACEHOLDER"];
389                                }
390                                $r="<input type='text' name='field_".$n."_".$search."[]' value='".htmlentities($v[0],ENT_QUOTES,$charset)."' ".($input_placeholder?"placeholder='".htmlentities($input_placeholder,ENT_QUOTES,$charset)."'":"")."/>";
391                                break;
392                        case "query_list":
393                                $requete=$ff["INPUT_OPTIONS"]["QUERY"][0]["value"];
394                                if ($ff["INPUT_OPTIONS"]["FILTERING"] == "yes") {
395                                        $requete = str_replace("!!acces_j!!", "", $requete);
396                                        $requete = str_replace("!!statut_j!!", "", $requete);
397                                        $requete = str_replace("!!statut_r!!", "", $requete);
398                                }
399                                if ($ff["INPUT_OPTIONS"]["QUERY"][0]["USE_GLOBAL"]) {
400                                        $use_global = explode(",", $ff["INPUT_OPTIONS"]["QUERY"][0]["USE_GLOBAL"]);
401                                        for($j=0; $j<count($use_global); $j++) {
402                                                $var_global = $use_global[$j];
403                                                global $$var_global;
404                                                $requete = str_replace("!!".$var_global."!!", $$var_global, $requete);
405                                        }
406                                }
407                                $resultat=pmb_mysql_query($requete);
408                                $r="<select name='field_".$n."_".$search."[]' multiple size='5' style='width:40em;'>";
409                                while ($opt=pmb_mysql_fetch_row($resultat)) {
410                                        $r.="<option value='".htmlentities($opt[0],ENT_QUOTES,$charset)."' ";
411                                        $as=array_search($opt[0],$v);
412                                        if (($as!==null)&&($as!==false)) $r.=" selected";
413                                        $r.=">".htmlentities($opt[1],ENT_QUOTES,$charset)."</option>";
414                                }
415                                $r.="</select>";
416                                break;
417                        case "list":
418                                $options=$ff["INPUT_OPTIONS"]["OPTIONS"][0];
419                                $r="<select name='field_".$n."_".$search."[]' multiple size='5' style='width:40em;'>";
420                                sort($options["OPTION"]);
421                                for ($i=0; $i<count($options["OPTION"]); $i++) {
422                                        $r.="<option value='".htmlentities($options["OPTION"][$i]["VALUE"],ENT_QUOTES,$charset)."' ";
423                                        $as=array_search($options["OPTION"][$i]["VALUE"],$v);
424                                        if (($as!==null)&&($as!==false)) $r.=" selected";
425                                        if (substr($options["OPTION"][$i]["value"],0,4)=="msg:") {
426                                                $r.=">".htmlentities($msg[substr($options["OPTION"][$i]["value"],4,strlen($options["OPTION"][$i]["value"])-4)],ENT_QUOTES,$charset)."</option>";
427                                        } else {
428                                                $r.=">".htmlentities($options["OPTION"][$i]["value"],ENT_QUOTES,$charset)."</option>";
429                                        }
430                                }
431                                $r.="</select>";
432                                break;
433                        case "marc_list":
434                                $options=new marc_list($ff["INPUT_OPTIONS"]["NAME"][0]["value"]);
435                                $tmp=array();
436                                $tmp = $options->table;
437                                        $tmp=array_map("convert_diacrit",$tmp);//On enlève les accents
438                                        $tmp=array_map("strtoupper",$tmp);//On met en majuscule
439                                        asort($tmp);//Tri sur les valeurs en majuscule sans accent
440                                        foreach ( $tmp as $key => $value ) {
441                                        $tmp[$key]=$options->table[$key];//On reprend les bons couples clé / libellé
442                                        }
443                                        $options->table=$tmp;
444                                reset($options->table);
445
446                                        // gestion restriction par code utilise.
447                                        if ($ff["INPUT_OPTIONS"]["RESTRICTQUERY"][0]["value"]) {
448                                                $restrictquery=pmb_mysql_query($ff["INPUT_OPTIONS"]["RESTRICTQUERY"][0]["value"]);
449                                                if ($restrictqueryrow=@pmb_mysql_fetch_row($restrictquery)) {
450                                                        if ($restrictqueryrow[0]) {
451                                                                $restrictqueryarray=explode(",",$restrictqueryrow[0]);
452                                                                $existrestrict=true;
453                                                        } else $existrestrict=false;
454                                                } else $existrestrict=false;
455                                        } else $existrestrict=false;
456
457                                $r="<select name='field_".$n."_".$search."[]' multiple size='5' class=\"ext_search_txt\">";
458                                while (list($key,$val)=each($options->table)) {
459                                        if ($existrestrict && array_search($key,$restrictqueryarray)!==false) {
460                                                $r.="<option value='".htmlentities($key,ENT_QUOTES,$charset)."' ";
461                                                $as=array_search($key,$v);
462                                                if (($as!==null)&&($as!==false)) $r.=" selected";
463                                                $r.=">".htmlentities($val,ENT_QUOTES,$charset)."</option>";
464                                        } elseif (!$existrestrict) {
465                                                $r.="<option value='".htmlentities($key,ENT_QUOTES,$charset)."' ";
466                                                $as=array_search($key,$v);
467                                                if (($as!==null)&&($as!==false)) $r.=" selected";
468                                                $r.=">".htmlentities($val,ENT_QUOTES,$charset)."</option>";
469                                        }                                               
470                                }
471                                $r.="</select>";
472                                break;
473                        case "date":
474                                $date_formatee = format_date_input($v[0]);
475                                $date_clic = "onClick=\"openPopUp('./select.php?what=calendrier&caller=search_form&date_caller=".str_replace('-', '', $v[0])."&param1=field_".$n."_".$search."_date&param2=field_".$n."_".$search."[]&auto_submit=NO&date_anterieure=YES&format_return=IN', 'field_".$n."_".$search."_date', 250, 300, -2, -2, 'toolbar=no, dependent=yes, resizable=yes')\"  ";
476                                if (substr($ff['INPUT_OPTIONS']["PLACEHOLDER"],0,4)=="msg:") {
477                                        $input_placeholder = $msg[substr($ff['INPUT_OPTIONS']["PLACEHOLDER"],4,strlen($ff['INPUT_OPTIONS']["PLACEHOLDER"])-4)];
478                                } else {
479                                        $input_placeholder = $ff['INPUT_OPTIONS']["PLACEHOLDER"];
480                                }
481                               
482                                $r="<input type='hidden' name='field_".$n."_".$search."_date' value='".str_replace('-','', $v[0])."' />
483                                        <input type='text' name='field_".$n."_".$search."[]' value='".htmlentities($date_formatee,ENT_QUOTES,$charset)."' ".($input_placeholder?"placeholder='".htmlentities($input_placeholder,ENT_QUOTES,$charset)."'":"")."/>
484                                        <input class='bouton_small' type='button' name='field_".$n."_".$search."_date_lib_bouton' value='".$msg["bouton_calendrier"]."' ".$date_clic." />";
485                                break;
486                        case "map" :
487                                global $pmb_map_base_layer_type;
488                                global $pmb_map_base_layer_params;
489                                global $dbh;
490                               
491                                $layer_params = json_decode($pmb_map_base_layer_params,true);
492                                $baselayer =  "baseLayerType: dojox.geo.openlayers.BaseLayerType.".$pmb_map_base_layer_type;
493                                if(count($layer_params)){
494                                        if($layer_params['name']) $baselayer.=",baseLayerName:\"".$layer_params['name']."\"";
495                                        if($layer_params['url']) $baselayer.=",baseLayerUrl:\"".$layer_params['url']."\"";
496                                        if($layer_params['options']) $baselayer.=",baseLayerOptions:".json_encode($layer_params['options']);
497                                }
498                               
499                                $size=explode("*",$pmb_map_size_search_edition);
500                                if(count($size)!=2)$map_size="width:800px; height:480px;";
501                                $map_size= "width:".$size[0]."px; height:".$size[1]."px;";
502                                $map_holds=array();
503                                foreach($v as $map_hold){
504                                        $map_holds[] = array(
505                                                "wkt" => $map_hold,
506                                                "type"=> "search",
507                                                "color"=> null,
508                                                "objects"=> array()
509                                        );
510                                }
511                                $r="<div id='map_search_".$n."_".$search."' data-dojo-type='apps/map/map_controler' style='$map_size' data-dojo-props='".$baselayer.",mode:\"search_criteria\",hiddenField:\"field_".$n."_".$search."\",searchHolds:".json_encode($map_holds,true)."'></div>";
512                               
513                                break;
514                }
515                //Traitement des variables d'entree
516                //Variables
517                for ($j=0; $j<count($ff["VAR"]); $j++) {
518                                if ($ff["VAR"][$j]["TYPE"]=="input") {
519                                        $varname=$ff["VAR"][$j]["NAME"];
520                                        $visibility=1;
521                                        $vis=$ff["VAR"][$j]["OPTIONS"]["VAR"][0];
522                                        if ($vis["NAME"]) {
523                                                $vis_name=$vis["NAME"];
524                                                global $$vis_name;
525                                                if ($vis["VISIBILITY"]=="no") $visibility=0;
526                                                for ($k=0; $k<count($vis["VALUE"]); $k++) {
527                                                        if ($vis["VALUE"][$k]["value"]==$$vis_name) {
528                                                                if ($vis["VALUE"][$k]["VISIBILITY"]=="no") $sub_vis=0; else $sub_vis=1;
529                                                                if ($vis["VISIBILITY"]=="no") $visibility|=$sub_vis; else $visibility&=$sub_vis;
530                                                                break;
531                                                        }
532                                                }
533                                        }
534                                       
535                                        //Recherche de la valeur par defaut
536                                        $vdefault=$ff["VAR"][$j]["OPTIONS"]["DEFAULT"][0];
537                                        if ($vdefault) {
538                                                switch ($vdefault["TYPE"]) {
539                                                        case "var":
540                                                                        $default=$var_table[$vdefault["value"]];
541                                                                break;
542                                                        case "value":
543                                                        default:
544                                                                        $default=$vdefault["value"];
545                                                }
546                                        } else $vdefault="";
547                                               
548                                        if ($visibility) {
549                                                $r.="&nbsp;".$ff["VAR"][$j]["COMMENT"];
550                                                $input=$ff["VAR"][$j]["OPTIONS"]["INPUT"][0];
551                                                switch ($input["TYPE"]) {
552                                                        case "query_list":
553                                                                if ((!$fieldvar[$varname])&&($default)) $fieldvar[$varname][0]=$default;
554                                                                $r.="&nbsp;<select id=\"fieldvar_".$n."_".$search."[".$varname."][]\" name=\"fieldvar_".$n."_".$search."[".$varname."][]\">\n";
555                                                                $query_list_result=@pmb_mysql_query($input["QUERY"][0]["value"]);
556                                                                $var_tmp=$concat="";
557                                                                while ($line=pmb_mysql_fetch_array($query_list_result)) {
558                                                                        if($concat)$concat.=",";
559                                                                        $concat.=$line[0];
560                                                                        $var_tmp.="<option value=\"".htmlentities($line[0],ENT_QUOTES,$charset)."\"";
561                                                                        $as=@array_search($line[0],$fieldvar[$varname]);
562                                                                        if (($as!==false)&&($as!==NULL)) $var_tmp.=" selected";
563                                                                        $var_tmp.=">".htmlentities($line[1],ENT_QUOTES,$charset)."</option>\n";
564                                                                }
565                                                                if($input["QUERY"][0]["ALLCHOICE"] == "yes"){
566                                                                        $r.="<option value=\"".htmlentities($concat,ENT_QUOTES,$charset)."\"";
567                                                                        $as=@array_search($concat,$fieldvar[$varname]);
568                                                                        if (($as!==false)&&($as!==NULL)) $r.=" selected";
569                                                                        $r.=">".htmlentities($msg[substr($input["QUERY"][0]["TITLEALLCHOICE"],4,strlen($input["QUERY"][0]["TITLEALLCHOICE"])-4)],ENT_QUOTES,$charset)."</option>\n";
570                                                                }
571                                                                $r.=$var_tmp;
572                                                                $r.="</select>";
573                                                                break;
574                                                        case "checkbox" :
575                                                                if(!$input["DEFAULT_ON"]){
576                                                                        if ((!$fieldvar[$varname])&&($default)) $fieldvar[$varname][0]=$default;
577                                                                } elseif(!$fieldvar[$input["DEFAULT_ON"]][0]) $fieldvar[$varname][0] =$default;
578                                                                $r.="&nbsp;<input type=\"checkbox\" name=\"fieldvar_".$n."_".$search."[".$varname."][]\" value=\"".$input["VALUE"][0]["value"]."\" ";
579                                                                if($input["VALUE"][0]["value"] == $fieldvar[$varname][0]) $r.="checked";                                                               
580                                                                $r.="/>\n";
581                                                                break;
582                                                        case "radio" :
583                                                                if ((!$fieldvar[$varname])&&($default)) $fieldvar[$varname][0]=$default;
584                                                                foreach($input["OPTIONS"][0]["LABEL"] as $radio_value){
585                                                                        $r.="&nbsp;<input type=\"radio\" name=\"fieldvar_".$n."_".$search."[".$varname."][]\" value=\"".$radio_value["VALUE"]."\" ";
586                                                                        if($radio_value["VALUE"] == $fieldvar[$varname][0]) $r.="checked";
587                                                                        $r.="/>".htmlentities($msg[substr($radio_value["value"],4,strlen($radio_value["value"])-4)],ENT_QUOTES,$charset);
588                                                                }
589                                                                $r.="\n";
590                                                                break;
591                                                        case "hidden":
592                                                                if ((!$fieldvar[$varname])&&($default)) $fieldvar[$varname][0]=$default;
593                                                                if(is_array($input["VALUE"][0])) $hidden_value=$input["VALUE"][0]["value"]; 
594                                                                else $hidden_value=$fieldvar[$varname][0];
595                                                                $r.="<input type='hidden' name=\"fieldvar_".$n."_".$search."[".$varname."][]\" value=\"".htmlentities($hidden_value,ENT_QUOTES,$charset)."\"/>";
596                                                                break;
597                                                }
598                                        } else {
599                                                if($vis["HIDDEN"] != "no")
600                                                        $r.="<input type='hidden' name=\"fieldvar_".$n."_".$search."[".$varname."][]\" value=\"".htmlentities($default,ENT_QUOTES,$charset)."\"/>";
601                                        }
602                                }
603                        }
604                } elseif (array_key_exists($s[0],$this->pp)){
605                        //Recuperation du champ
606                $field=array();
607                        $field[ID]=$s[1];
608                        $field[NAME]=$this->pp[$s[0]]->t_fields[$s[1]][NAME]."_".$n;
609                        $field[MANDATORY]=$this->pp[$s[0]]->t_fields[$s[1]][MANDATORY];
610                        $field[ALIAS]=$this->pp[$s[0]]->t_fields[$s[1]][TITRE];
611                        $field[DATATYPE]=$this->pp[$s[0]]->t_fields[$s[1]][DATATYPE];
612                        $field[OPTIONS][0]=_parser_text_no_function_("<?xml version='1.0' encoding='".$charset."'?>\n".$this->pp[$s[0]]->t_fields[$s[1]][OPTIONS], "OPTIONS");
613                        $field[VALUES]=$v;
614                        $field[PREFIX]=$this->pp[$s[0]]->prefix;
615                        eval("\$r=".$aff_list_empr_search[$this->pp[$s[0]]->t_fields[$s[1]][TYPE]]."(\$field,\$check_scripts,\"field_".$n."_".$search."\");");
616                } elseif ($s[0]=="authperso") {
617                        $r="<span class='search_value'><input type='text' name='field_".$n."_".$search."[]' value='".htmlentities($v[0],ENT_QUOTES,$charset)."' class='ext_search_txt'/></span>";
618                               
619        }elseif ($s[0]=="s") {
620                //appel de la fonction get_input_box de la classe du champ special
621                $type=$this->specialfields[$s[1]]["TYPE"];
622                for ($is=0; $is<count($this->tableau_speciaux["TYPE"]); $is++) {
623                                if ($this->tableau_speciaux["TYPE"][$is]["NAME"]==$type) {
624                                        $sf=$this->specialfields[$s[1]];
625                                        if ($this->full_path && file_exists($this->full_path."/specials/".$this->tableau_speciaux["TYPE"][$is]["PATH"]."/search.class.php"))
626                                                require_once($this->full_path."/specials/".$this->tableau_speciaux["TYPE"][$is]["PATH"]."/search.class.php");
627                                        else
628                                                require_once($include_path."/search_queries/specials/".$this->tableau_speciaux["TYPE"][$is]["PATH"]."/search.class.php");
629                                        $specialclass= new $this->tableau_speciaux["TYPE"][$is]["CLASS"]($s[1],$n,$sf,$this);
630                                        $r=$specialclass->get_input_box();     
631                                        break;
632                                }
633                }
634        }
635        return $r;
636    }
637   
638    function make_search($prefixe="") {
639        global $search;
640        global $dbh;
641        global $msg;
642        global $include_path;
643        global $pmb_multi_search_operator;
644        global $pmb_search_stemming_active;
645               
646        $this->error_message="";
647                $last_table="";
648                $field_keyName=$this->keyName;
649                //Pour chaque champ
650
651        for ($i=0; $i<count($search); $i++) {
652                //construction de la requete
653                $s=explode("_",$search[$i]);
654               
655                //Recuperation de l'operateur
656                $op="op_".$i."_".$search[$i];
657               
658                //Recuperation du contenu de la recherche
659                $field_="field_".$i."_".$search[$i];
660                global $$field_;
661                $field=$$field_;
662               
663                //Recuperation de l'operateur inter-champ
664                $inter="inter_".$i."_".$search[$i];
665                global $$inter;
666                global $$op;
667               
668                //Recuperation des variables auxiliaires
669                $fieldvar_="fieldvar_".$i."_".$search[$i];
670                global $$fieldvar_;
671                $fieldvar=$$fieldvar_;
672               
673                        //Si c'est un champ fixe
674                if ($s[0]=="f") {
675                                $ff=$this->fixedfields[$s[1]];
676
677                                //Choix du moteur
678                                if ($this->memory_engine_allowed && !$ff['MEMORYENGINEFORBIDDEN'] ) {
679                                        $this->current_engine = 'MEMORY';
680                                } else {
681                                        $this->current_engine = 'MyISAM';
682                                }
683                               
684                                //Calcul des variables
685                                $var_table=array();
686                                for ($j=0; $j<count($ff["VAR"]); $j++) {
687                                switch ($ff["VAR"][$j]["TYPE"]) {
688                                                case "input":
689                                                        $var_table[$ff["VAR"][$j]["NAME"]]=@implode(",",$fieldvar[$ff["VAR"][$j]["NAME"]]);
690                                                        break;
691                                                case "global":
692                                                        $global_name=$ff["VAR"][$j]["NAME"];
693                                                        global $$global_name;
694                                                        $var_table[$ff["VAR"][$j]["NAME"]]=$$global_name;
695                                                        break;
696                                                case "calculated":
697                                                        $calc=$ff["VAR"][$j]["OPTIONS"]["CALC"][0];
698                                                        switch ($calc["TYPE"]) {
699                                                                case "value_from_query":
700                                                                        $query_calc=$calc["QUERY"][0]["value"];
701                                                                        @reset($var_table);
702                                                                        while (list($var_name,$var_value)=@each($var_table)) {
703                                                                                $query_calc=str_replace("!!".$var_name."!!",$var_value,$query_calc);
704                                                                        }
705                                                                        $r_calc=pmb_mysql_query($query_calc);
706                                                                        $var_table[$ff["VAR"][$j]["NAME"]]=@pmb_mysql_result($r_calc,0,0);
707                                                                        break;
708                                                        }
709                                                        break;
710                                        }
711                                }
712                                $q_index=$ff["QUERIES_INDEX"];
713                                //Recuperation de la requete associee au champ et a l'operateur
714                                $q=$ff["QUERIES"][$q_index[$$op]];
715                               
716                                //Si c'est une requete conditionnelle, on sélectionne la bonne requete et on supprime les autres
717                                if($q[0]["CONDITIONAL"]){                                       
718                                        $k_default=0;
719                                        $q_temp = array();
720                                        $q_temp["OPERATOR"]=$q["OPERATOR"];
721                                        for($k=0; $k<count($q)-1;$k++){
722                                                if($var_table[$q[$k]["CONDITIONAL"]["name"]]== $q[$k]["CONDITIONAL"]["value"]) break;
723                                                if ($q[$k]["CONDITIONAL"]["value"] == "default") $k_default=$k;                                                 
724                                        } 
725                                        if($k == count($q)-1) $k=$k_default;
726                                        $q_temp[0] = $q[$k];
727                                        $q= $q_temp;
728                                }
729                       
730                                //Remplacement par les variables eventuelles pour chaque requete
731                                for ($k=0; $k<count($q)-1; $k++) {
732                                        reset($var_table);
733                                        while (list($var_name,$var_value)=each($var_table)) {
734                                                $q[$k]["MAIN"]=str_replace("!!".$var_name."!!",$var_value,$q[$k]["MAIN"]);
735                                                $q[$k]["MULTIPLE_TERM"]=str_replace("!!".$var_name."!!",$var_value,$q[$k]["MULTIPLE_TERM"]);
736                                        }
737                                }       
738                                                       
739                                $last_main_table="";
740                               
741                                // pour les listes, si un opérateur permet une valeur vide, il en faut une...
742                                if($this->op_empty[$$op] && !is_array($field) ){
743                                        $field = array();
744                                        $field[0] = "";
745                                }
746                                // si sélection d'autorité et champ vide : on ne doit pas le prendre en compte
747                                if($$op=='AUTHORITY'){
748                                        $suppr=false;
749                                        foreach($field as $k=>$v){
750                                                if($v==0){
751                                                        unset($field[$k]);
752                                                        $suppr=true;
753                                                }
754                                        }
755                                        if($suppr){
756                                                $field = array_values($field);
757                                        }
758                                }
759                                //Pour chaque valeur du champ
760                                for ($j=0; $j<count($field); $j++) {
761                                        //Pour chaque requete
762                                        $field_origine=$field[$j];
763                                        for ($z=0; $z<count($q)-1; $z++) {
764                                                //Pour chaque valeur du cha
765                                                //Si le nettoyage de la saisie est demande
766                                                if($q[$z]["KEEP_EMPTYWORD"])    $field[$j]=strip_empty_chars($field_origine);
767                                                elseif ($q[$z]["REGDIACRIT"]) $field[$j]=strip_empty_words($field_origine);
768                                                elseif ($q[$z]["DETECTDATE"])  {
769                                                        $field[$j]=detectFormatDate($field_origine,$q[$z]["DETECTDATE"]);
770                                                }
771                                                $main=$q[$z]["MAIN"];
772                                                //Si il y a plusieurs termes possibles on construit la requete avec le terme !!multiple_term!!
773                                                if ($q[$z]["MULTIPLE_WORDS"]) {
774                                                        $terms=explode(" ",$field[$j]);
775                                                        //Pour chaque terme,
776                                                        $multiple_terms=array();
777                                                        for ($k=0; $k<count($terms); $k++) {
778                                                                $multiple_terms[]=str_replace("!!p!!",$terms[$k],$q[$z]["MULTIPLE_TERM"]);
779                                                        }
780                                                        $final_term=implode(" ".$q[$z]["MULTIPLE_OPERATOR"]." ",$multiple_terms);
781                                                        $main=str_replace("!!multiple_term!!",$final_term,$main);
782                                                //Si la saisie est un ISBN
783                                                } else if ($q[$z]["ISBN"]) {
784                                                        //Code brut
785                                                        $terms[0]=$field[$j];
786                                                        //EAN ?
787                                                        if (isEAN($field[$j])) {
788                                                                //C'est un isbn ?
789                                                                if (isISBN($field[$j])) {
790                                                                        $rawisbn = preg_replace('/-|\.| /', '', $field[$j]);
791                                                                        //On envoi tout ce qu'on sait faire en matiere d'ISBN, en raw et en formatte, en 10 et en 13
792                                                                        $terms[1]=formatISBN($rawisbn,10);
793                                                                        $terms[2]=formatISBN($rawisbn,13);
794                                                                        $terms[3]=preg_replace('/-|\.| /', '', $terms[1]);
795                                                                        $terms[4]=preg_replace('/-|\.| /', '', $terms[2]);
796                                                                }
797                                                        }
798                                                        else if (isISBN($field[$j])) {
799                                                                $rawisbn = preg_replace('/-|\.| /', '', $field[$j]);
800                                                                //On envoi tout ce qu'on sait faire en matiere d'ISBN, en raw et en formatte, en 10 et en 13
801                                                                $terms[1]=formatISBN($rawisbn,10);
802                                                                $terms[2]=formatISBN($rawisbn,13);
803                                                                $terms[3]=preg_replace('/-|\.| /', '', $terms[1]);
804                                                                $terms[4]=preg_replace('/-|\.| /', '', $terms[2]);
805                                                        }
806                                                        //Pour chaque terme,
807                                                        $multiple_terms=array();
808                                                        for ($k=0; $k<count($terms); $k++) {
809                                                                $multiple_terms[]=str_replace("!!p!!",$terms[$k],$q[$z]["MULTIPLE_TERM"]);
810                                                        }
811                                                        $final_term=implode(" ".$q[$z]["MULTIPLE_OPERATOR"]." ",$multiple_terms);
812                                                        $main=str_replace("!!multiple_term!!",$final_term,$main);
813                                                } else if ($q[$z]["BOOLEAN"]) {
814                                                        if($q[$z]['STEMMING']){
815                                                                $stemming = $pmb_search_stemming_active;
816                                                        }else{
817                                                                $stemming = 0;
818                                                        }
819                                                $aq=new analyse_query($field[$j],0,0,1,0,$stemming);
820                                                        $aq1=new analyse_query($field[$j],0,0,1,1,$stemming);
821                                                        if ($q[$z]["KEEP_EMPTY_WORDS_FOR_CHECK"]) $err=$aq1->error; else $err=$aq->error;
822                                                        if (!$err) {
823                                                                if (is_array($q[$z]["TABLE"])) {
824                                                                        for ($z1=0; $z1<count($q[$z]["TABLE"]); $z1++) {
825                                                                                $is_fulltext=false;
826                                                                                if ($q[$z]["FULLTEXT"][$z1]) $is_fulltext=true;
827                                                                                if (!$q[$z]["KEEP_EMPTY_WORDS"][$z1]) 
828                                                                                        $members=$aq->get_query_members($q[$z]["TABLE"][$z1],$q[$z]["INDEX_L"][$z1],$q[$z]["INDEX_I"][$z1],$q[$z]["ID_FIELD"][$z1],$q[$z]["RESTRICT"][$z1],0,0,$is_fulltext);
829                                                                                else $members=$aq1->get_query_members($q[$z]["TABLE"][$z1],$q[$z]["INDEX_L"][$z1],$q[$z]["INDEX_I"][$z1],$q[$z]["ID_FIELD"][$z1],$q[$z]["RESTRICT"][$z1],0,0,$is_fulltext);
830                                                                                $main=str_replace("!!pert_term_".($z1+1)."!!",$members["select"],$main);
831                                                                                $main=str_replace("!!where_term_".($z1+1)."!!",$members["where"],$main);
832                                                                        }
833                                                                } else {
834                                                                        $is_fulltext=false;
835                                                                        if ($q[$z]["FULLTEXT"]) $is_fulltext=true;
836                                                                        if ($q[$z]["KEEP_EMPTY_WORDS"])
837                                                                                $members=$aq1->get_query_members($q[$z]["TABLE"],$q[$z]["INDEX_L"],$q[$z]["INDEX_I"],$q[$z]["ID_FIELD"],$q[$z]["RESTRICT"],0,0,$is_fulltext);
838                                                                        else $members=$aq->get_query_members($q[$z]["TABLE"],$q[$z]["INDEX_L"],$q[$z]["INDEX_I"],$q[$z]["ID_FIELD"],$q[$z]["RESTRICT"],0,0,$is_fulltext);
839                                                                        $main=str_replace("!!pert_term!!",$members["select"],$main);
840                                                                        $main=str_replace("!!where_term!!",$members["where"],$main);
841                                                                }
842                                                        } else {
843                                                                $main="select notice_id from notices where notice_id=0";
844                                                                $this->error_message=sprintf($msg["searcher_syntax_error_desc"],$aq->current_car,$aq->input_html,$aq->error_message);
845                                                        }
846                                        }else if ($q[$z]["WORD"]){
847                                                if(($q[$z]['CLASS'] == "searcher_all_fields")){//Pour savoir si la recherche tous champs inclut les docnum ou pas
848                                                        global $mutli_crit_indexation_docnum_allfields;
849                                                        if($var_table["is_num"]){
850                                                                $mutli_crit_indexation_docnum_allfields=1;
851                                                        }else{
852                                                                $mutli_crit_indexation_docnum_allfields=-1;
853                                                        }
854                                                }
855                                                //recherche par terme...
856                                                if($q[$z]["FIELDS"]){
857                                                        $searcher = new $q[$z]['CLASS']($field[$j],$q[$z]["FIELDS"]);
858                                                }else{
859                                                        $searcher = new $q[$z]['CLASS']($field[$j]);
860                                                }
861                                                $main = $searcher->get_full_query();
862                                               
863//                                                      print "<br><br>".$main;
864                                                } else $main=str_replace("!!p!!",addslashes($field[$j]),$main);
865                                                //Y-a-t-il une close repeat ?
866                                                if ($q[$z]["REPEAT"]) {
867                                                        //Si oui, on repete !!
868                                                        $onvals=$q[$z]["REPEAT"]["ON"];
869                                                        global $$onvals;
870                                                        $onvalst=explode($q[$z]["REPEAT"]["SEPARATOR"],$$onvals);
871                                                        $mains=array();
872                                                        for ($ir=0; $ir<count($onvalst); $ir++) {
873                                                                $mains[]=str_replace("!!".$q[$z]["REPEAT"]["NAME"]."!!",$onvalst[$ir],$main);
874                                                        }
875                                                        $main=implode(" ".$q[$z]["REPEAT"]["OPERATOR"]." ",$mains);
876                                                        $main="select * from (".$main.") as sbquery".($q[$z]["REPEAT"]["ORDERTERM"]?" order by ".$q[$z]["REPEAT"]["ORDERTERM"]:"");
877                                                }
878                                                if ($z<(count($q)-2)) pmb_mysql_query($main);
879                                        }               
880
881                                        if($fieldvar["operator_between_multiple_authorities"]){
882                                                $operator=$fieldvar["operator_between_multiple_authorities"][0];
883                                        } elseif($q["DEFAULT_OPERATOR"]){
884                                                $operator=$q["DEFAULT_OPERATOR"];
885                                        } else {
886                                                $operator = ($pmb_multi_search_operator?$pmb_multi_search_operator:"or");
887                                        }
888                                       
889                                        if (count($field)>1) {
890                                                if($operator == "or"){
891                                                        //Ou logique si plusieurs valeurs
892                                                        if ($prefixe) {
893                                                                $requete="create temporary table ".$prefixe."mf_".$j." ENGINE=".$this->current_engine." ".$main;       
894                                                                @pmb_mysql_query($requete,$dbh);
895                                                                $requete="alter table ".$prefixe."mf_".$j." add idiot int(1)";
896                                                                @pmb_mysql_query($requete);
897                                                                $requete="alter table ".$prefixe."mf_".$j." add unique($field_keyName)";
898                                                                @pmb_mysql_query($requete);
899                                                        } else {
900                                                                $requete="create temporary table mf_".$j." ENGINE=".$this->current_engine." ".$main;
901                                                                @pmb_mysql_query($requete,$dbh);
902                                                                $requete="alter table mf_".$j." add idiot int(1)";
903                                                                @pmb_mysql_query($requete);
904                                                                $requete="alter table mf_".$j." add unique($field_keyName)";
905                                                                @pmb_mysql_query($requete);
906                                                        }
907               
908                                                        if ($last_main_table) {
909                                                                if ($prefixe) {
910                                                                        $requete="insert ignore into ".$prefixe."mf_".$j." select ".$last_main_table.".* from ".$last_main_table;
911                                                                } else {
912                                                                        $requete="insert ignore into mf_".$j." select ".$last_main_table.".* from ".$last_main_table;
913                                                                }
914                                                                pmb_mysql_query($requete,$dbh);
915                                                                //pmb_mysql_query("drop table mf_".$j,$dbh);
916                                                                pmb_mysql_query("drop table ".$last_main_table,$dbh);
917                                                        } //else pmb_mysql_query("drop table mf_".$j,$dbh);
918                                                        if ($prefixe) {
919                                                                $last_main_table=$prefixe."mf_".$j;
920                                                        } else {
921                                                                $last_main_table="mf_".$j;
922                                                        }
923                                                } elseif($operator == "and"){
924                                                        //ET logique si plusieurs valeurs
925                                                        if ($prefixe) {
926                                                                $requete="create temporary table ".$prefixe."mf_".$j." ENGINE=".$this->current_engine." ".$main;       
927                                                                @pmb_mysql_query($requete,$dbh);
928                                                                $requete="alter table ".$prefixe."mf_".$j." add idiot int(1)";
929                                                                @pmb_mysql_query($requete);
930                                                                $requete="alter table ".$prefixe."mf_".$j." add unique($field_keyName)";
931                                                                @pmb_mysql_query($requete);
932                                                        } else {
933                                                                $requete="create temporary table mf_".$j." ENGINE=".$this->current_engine." ".$main;
934                                                                @pmb_mysql_query($requete,$dbh);
935                                                                $requete="alter table mf_".$j." add idiot int(1)";
936                                                                @pmb_mysql_query($requete);
937                                                                $requete="alter table mf_".$j." add unique($field_keyName)";
938                                                                @pmb_mysql_query($requete);
939                                                        }
940                                                       
941                                                        if ($last_main_table) {
942                                                                if ($prefixe) {
943                                                                        $requete="create temporary table ".$prefixe."and_result_".$j." ENGINE=".$this->current_engine." select ".$last_tables.".* from ".$last_tables." where exists ( select ".$prefixe."mf_".$j.".* from ".$prefixe."mf_".$j." where ".$last_tables.".notice_id=".$prefixe."mf_".$j.".notice_id)";
944                                                                } else {
945                                                                        $requete="create temporary table and_result_".$j." ENGINE=".$this->current_engine." select ".$last_tables.".* from ".$last_tables." where exists ( select mf_".$j.".* from mf_".$j." where ".$last_tables.".notice_id=mf_".$j.".notice_id)";
946                                                                }
947                                                                pmb_mysql_query($requete,$dbh);
948                                                                pmb_mysql_query("drop table ".$last_tables,$dbh);
949                                                               
950                                                        } 
951                                                        if ($prefixe) {
952                                                                $last_tables=$prefixe."mf_".$j;
953                                                        } else {
954                                                                $last_tables="mf_".$j;
955                                                        }
956                                                        if ($prefixe) {
957                                                                $last_main_table = $prefixe."and_result_".$j;
958                                                        } else {
959                                                                $last_main_table = "and_result_".$j;
960                                                        }
961                                                }
962                                        } //else print $main;
963                                }
964                                if ($last_main_table){
965                                        $main="select * from ".$last_main_table;
966                                }
967                        } elseif (array_key_exists($s[0],$this->pp)) {
968                                $datatype=$this->pp[$s[0]]->t_fields[$s[1]]["DATATYPE"];
969                                $df=$this->dynamicfields[$s[0]]["FIELD"][$this->get_id_from_datatype($datatype,$s[0])];
970                                $q_index=$df["QUERIES_INDEX"];
971                                $q=$df["QUERIES"][$q_index[$$op]];
972                               
973                                //Choix du moteur
974                                if ($this->memory_engine_allowed && !$df['MEMORYENGINEFORBIDDEN'] ) {
975                                        $this->current_engine = 'MEMORY';
976                                } else {
977                                        $this->current_engine = 'MyISAM';
978                                }
979                               
980                                //Pour chaque valeur du champ
981                                $last_main_table="";
982                                if (count($field)==0) $field[0]="";
983                                for ($j=0; $j<count($field); $j++) {
984                                        if($q["KEEP_EMPTYWORD"])        $field[$j]=strip_empty_chars($field[$j]);
985                                        elseif ($q["REGDIACRIT"]) $field[$j]=strip_empty_words($field[$j]);
986                                        $main=$q["MAIN"];
987                                        //Si il y a plusieurs termes possibles
988                                        if ($q["MULTIPLE_WORDS"]) {
989                                                $terms=explode(" ",$field[$j]);
990                                                //Pour chaque terme
991                                                $multiple_terms=array();
992                                                for ($k=0; $k<count($terms); $k++) {
993                                                        $mt=str_replace("!!p!!",addslashes($terms[$k]),$q["MULTIPLE_TERM"]);
994                                                        $mt=str_replace("!!field!!",$s[1],$mt); 
995                                                        $multiple_terms[]=$mt;
996                                                }
997                                                $final_term=implode(" ".$q["MULTIPLE_OPERATOR"]." ",$multiple_terms);
998                                                $main=str_replace("!!multiple_term!!",$final_term,$main);
999                                        } else {
1000                                                $main=str_replace("!!p!!",addslashes($field[$j]),$main);
1001                                        }
1002                                        $main=str_replace("!!field!!",$s[1],$main);
1003                                       
1004                                        if ($q["WORD"]){
1005                                                //recherche par terme...
1006                                                $searcher = new $q['CLASS']($field[$j],$s[1]);
1007                                                $main = $searcher->get_full_query();
1008                                        }
1009                                       
1010                                        //Choix de l'operateur dans la liste
1011                                        if($q["DEFAULT_OPERATOR"]){
1012                                                $operator =$q["DEFAULT_OPERATOR"];
1013                                        } else {
1014                                                $operator = ($pmb_multi_search_operator?$pmb_multi_search_operator:"or");
1015                                        }
1016                                        if (count($field)>1) {
1017                                                if($operator == "or"){
1018                                                                //Ou logique si plusieurs valeurs
1019                                                                if ($prefixe) {
1020                                                                        $requete="create temporary table ".$prefixe."mf_".$j." ENGINE=".$this->current_engine." ".$main;       
1021                                                                        @pmb_mysql_query($requete,$dbh);
1022                                                                        $requete="alter table ".$prefixe."mf_".$j." add idiot int(1)";
1023                                                                        @pmb_mysql_query($requete);
1024                                                                        $requete="alter table ".$prefixe."mf_".$j." add unique($field_keyName)";
1025                                                                        @pmb_mysql_query($requete);
1026                                                                } else {
1027                                                                        $requete="create temporary table mf_".$j." ENGINE=".$this->current_engine." ".$main;
1028                                                                        @pmb_mysql_query($requete,$dbh);
1029                                                                        $requete="alter table mf_".$j." add idiot int(1)";
1030                                                                        @pmb_mysql_query($requete);
1031                                                                        $requete="alter table mf_".$j." add unique($field_keyName)";
1032                                                                        @pmb_mysql_query($requete);
1033                                                                }
1034                       
1035                                                                if ($last_main_table) {
1036                                                                        if ($prefixe) {
1037                                                                                $requete="insert ignore into ".$prefixe."mf_".$j." select ".$last_main_table.".* from ".$last_main_table;
1038                                                                        } else {
1039                                                                                $requete="insert ignore into mf_".$j." select ".$last_main_table.".* from ".$last_main_table;
1040                                                                        }
1041                                                                        pmb_mysql_query($requete,$dbh);
1042                                                                        //pmb_mysql_query("drop table mf_".$j,$dbh);
1043                                                                        pmb_mysql_query("drop table ".$last_main_table,$dbh);
1044                                                                } //else pmb_mysql_query("drop table mf_".$j,$dbh);
1045                                                                if ($prefixe) {
1046                                                                        $last_main_table=$prefixe."mf_".$j;
1047                                                                } else {
1048                                                                        $last_main_table="mf_".$j;
1049                                                                }
1050                                                        } elseif($operator == "and"){
1051                                                               
1052                                                                //ET logique si plusieurs valeurs
1053                                                                if ($prefixe) {
1054                                                                        $requete="create temporary table ".$prefixe."mf_".$j." ENGINE=".$this->current_engine." ".$main;       
1055                                                                        @pmb_mysql_query($requete,$dbh);
1056                                                                        $requete="alter table ".$prefixe."mf_".$j." add idiot int(1)";
1057                                                                        @pmb_mysql_query($requete);
1058                                                                        $requete="alter table ".$prefixe."mf_".$j." add unique($field_keyName)";
1059                                                                        @pmb_mysql_query($requete);
1060                                                                } else {
1061                                                                        $requete="create temporary table mf_".$j." ENGINE=".$this->current_engine." ".$main;
1062                                                                        @pmb_mysql_query($requete,$dbh);
1063                                                                        $requete="alter table mf_".$j." add idiot int(1)";
1064                                                                        @pmb_mysql_query($requete);
1065                                                                        $requete="alter table mf_".$j." add unique($field_keyName)";
1066                                                                        @pmb_mysql_query($requete);
1067                                                                }
1068                                                               
1069                                                                if ($last_main_table) {
1070                                                                        if ($prefixe) {
1071                                                                                $requete="create temporary table ".$prefixe."and_result_".$j." ENGINE=".$this->current_engine." select ".$last_tables.".* from ".$last_tables." where exists ( select ".$prefixe."mf_".$j.".* from ".$prefixe."mf_".$j." where ".$last_tables.".notice_id=".$prefixe."mf_".$j.".notice_id)";
1072                                                                        } else {
1073                                                                                $requete="create temporary table and_result_".$j." ENGINE=".$this->current_engine." select ".$last_tables.".* from ".$last_tables." where exists ( select mf_".$j.".* from mf_".$j." where ".$last_tables.".notice_id=mf_".$j.".notice_id)";
1074                                                                        }
1075                                                                        pmb_mysql_query($requete,$dbh);
1076                                                                        pmb_mysql_query("drop table ".$last_tables,$dbh);
1077                                                                       
1078                                                                } 
1079                                                                if ($prefixe) {
1080                                                                        $last_tables=$prefixe."mf_".$j;
1081                                                                } else {
1082                                                                        $last_tables="mf_".$j;
1083                                                                }
1084                                                                if ($prefixe) {
1085                                                                        $last_main_table = $prefixe."and_result_".$j;
1086                                                                } else {
1087                                                                        $last_main_table = "and_result_".$j;
1088                                                                }
1089                                                        }
1090                                                } //else print $main;
1091                                        }               
1092                               
1093                                if ($last_main_table)
1094                                        $main="select * from ".$last_main_table;       
1095                        } elseif ($s[0]=="s") {
1096                                //instancier la classe de traitement du champ special
1097                        $type=$this->specialfields[$s[1]]["TYPE"];
1098                                for ($is=0; $is<count($this->tableau_speciaux["TYPE"]); $is++) {
1099                                        if ($this->tableau_speciaux["TYPE"][$is]["NAME"]==$type) {
1100                                                $sf=$this->specialfields[$s[1]];
1101                                                require_once($include_path."/search_queries/specials/".$this->tableau_speciaux["TYPE"][$is]["PATH"]."/search.class.php");
1102                                                $specialclass= new $this->tableau_speciaux["TYPE"][$is]["CLASS"]($s[1],$i,$sf,$this);
1103                                                $last_main_table=$specialclass->make_search();
1104                                                break;
1105                                        }
1106                        }
1107                        if ($last_main_table)
1108                                $main="select * from ".$last_main_table;
1109                }elseif ($s[0]=="authperso") {
1110                                $aq=new analyse_query($field[0],0,0,1,1,$opac_stemming_active);
1111                                $members=$aq->get_query_members("authperso_authorities","authperso_infos_global","authperso_index_infos_global","id_authperso_authority");
1112                                $clause= "where ".$members["where"] ." and notice_id=notice_authperso_notice_num and notice_authperso_authority_num=id_authperso_authority and authperso_authority_authperso_num=".$s[1];
1113                                $main="select distinct notice_id FROM notices,notices_authperso,authperso_authorities $clause ";
1114                        if ($last_main_table)
1115                                $main="select * from ".$last_main_table;
1116                        }
1117                if ($prefixe) {
1118                        $table=$prefixe."t_".$i."_".$search[$i];
1119                        $requete="create temporary table ".$prefixe."t_".$i."_".$search[$i]." ENGINE=".$this->current_engine." ".$main;
1120                        pmb_mysql_query($requete,$dbh);
1121                                $requete="alter table ".$prefixe."t_".$i."_".$search[$i]." add idiot int(1)";
1122                                @pmb_mysql_query($requete);
1123                                $requete="alter table ".$prefixe."t_".$i."_".$search[$i]." add unique($field_keyName)";
1124                                pmb_mysql_query($requete);
1125                } else {
1126                        $table="t_".$i."_".$search[$i];
1127                                $requete="create temporary table t_".$i."_".$search[$i]." ENGINE=".$this->current_engine." ".$main;
1128                        pmb_mysql_query($requete,$dbh);
1129                                $requete="alter table t_".$i."_".$search[$i]." add idiot int(1)";
1130                                @pmb_mysql_query($requete);
1131                                $requete="alter table t_".$i."_".$search[$i]." add unique($field_keyName)";
1132                                pmb_mysql_query($requete);
1133                }
1134                        if ($last_main_table) { 
1135                                $requete="drop table ".$last_main_table;
1136                                pmb_mysql_query($requete);
1137                        }
1138                        if ($prefixe) {
1139                                $requete="create temporary table ".$prefixe."t".$i." ENGINE=".$this->current_engine." ";
1140                        } else {
1141                                $requete="create temporary table t".$i." ENGINE=".$this->current_engine." ";
1142                        }
1143                        $isfirst_criteria=false;
1144                        switch ($$inter) {
1145                                case "and":
1146                                        $requete.="select ".$table.".* from $last_table,$table where ".$table.".$field_keyName=".$last_table.".$field_keyName and $table.idiot is null and $last_table.idiot is null";
1147                                        @pmb_mysql_query($requete,$dbh);
1148                                        break;
1149                                case "or":
1150                                        //Si la table précédente est vide, c'est comme au premier jour !
1151                                        $requete_c="select count(*) from ".$last_table;
1152                                        if (!@pmb_mysql_result(pmb_mysql_query($requete_c),0,0)) {
1153                                                $isfirst_criteria=true;
1154                                        } else {
1155                                                $requete.="select * from ".$table;
1156                                                @pmb_mysql_query($requete,$dbh);
1157                                                if ($prefixe) {
1158                                                        $requete="alter table ".$prefixe."t".$i." add idiot int(1)";
1159                                                        @pmb_mysql_query($requete);
1160                                                        $requete="alter table ".$prefixe."t".$i." add unique($field_keyName)";
1161                                                        @pmb_mysql_query($requete);
1162                                                } else {
1163                                                        $requete="alter table t".$i." add idiot int(1)";
1164                                                        @pmb_mysql_query($requete);
1165                                                        $requete="alter table t".$i." add unique($field_keyName)";
1166                                                        @pmb_mysql_query($requete);
1167                                                }
1168                                                if ($prefixe) {
1169                                                        $requete="insert into ".$prefixe."t".$i." ($field_keyName,idiot) select distinct ".$last_table.".".$field_keyName.",".$last_table.".idiot from ".$last_table." left join ".$table." on ".$last_table.".$field_keyName=".$table.".$field_keyName where ".$table.".$field_keyName is null";
1170                                                } else {
1171                                                        $requete="insert into t".$i." ($field_keyName,idiot) select distinct ".$last_table.".".$field_keyName.",".$last_table.".idiot from ".$last_table." left join ".$table." on ".$last_table.".$field_keyName=".$table.".$field_keyName where ".$table.".$field_keyName is null";
1172                                                        //print $requete;
1173                                                }
1174                                                @pmb_mysql_query($requete,$dbh);
1175                                        }
1176                                        break;
1177                                case "ex":
1178                                        //$requete_not="create temporary table ".$table."_b select notices.notice_id from notices left join ".$table." on notices.notice_id=".$table.".notice_id where ".$table.".notice_id is null";
1179                                        //@pmb_mysql_query($requete_not);
1180                                        //$requete_not="alter table ".$table."_b add idiot int(1), add unique(notice_id)";
1181                                        //@pmb_mysql_query($requete_not);
1182                                        $requete.="select ".$last_table.".* from $last_table left join ".$table." on ".$table.".$field_keyName=".$last_table.".$field_keyName where ".$table.".$field_keyName is null";
1183                                        @pmb_mysql_query($requete);
1184                                        //$requete="drop table ".$table."_b";
1185                                        //@pmb_mysql_query($requete);
1186                                        if ($prefixe) {
1187                                                $requete="alter table ".$prefixe."t".$i." add idiot int(1)";
1188                                                @pmb_mysql_query($requete);
1189                                                $requete="alter table ".$prefixe."t".$i." add unique($field_keyName)";
1190                                                @pmb_mysql_query($requete);
1191                                        } else {
1192                                                $requete="alter table t".$i." add idiot int(1)";
1193                                                @pmb_mysql_query($requete);
1194                                                $requete="alter table t".$i." add unique($field_keyName)";
1195                                                @pmb_mysql_query($requete);
1196                                        }
1197                                        break;
1198                                default:
1199                                        $isfirst_criteria=true;
1200                                        @pmb_mysql_query($requete,$dbh);
1201                                        $requete="alter table $table add idiot int(1)";
1202                                        @pmb_mysql_query($requete);
1203                                        $requete="alter table $table add unique($field_keyName)";
1204                                        @pmb_mysql_query($requete);
1205                                        break;
1206                        }
1207                        if (!$isfirst_criteria) {
1208                                if($last_table){
1209                                        pmb_mysql_query("drop table if exists ".$last_table,$dbh);
1210                                }
1211                                if($table){
1212                                        pmb_mysql_query("drop table if exists ".$table,$dbh);
1213                                }
1214                                if ($prefixe) {
1215                                        $last_table=$prefixe."t".$i;
1216                                } else {
1217                                        $last_table="t".$i;     
1218                                }
1219                        } else {
1220                                if($last_table){
1221                                        pmb_mysql_query("drop table if exists ".$last_table,$dbh);
1222                                }
1223                               
1224                                $last_table=$table;
1225                        }
1226        }
1227        return $last_table;
1228    }
1229   
1230    function make_hidden_search_form($url,$form_name="search_form",$target="",$close_form=true) {
1231        global $search;
1232        global $charset;
1233        global $page;
1234       
1235        $r="<form name='$form_name' action='$url' style='display:none' method='post'";
1236        if ($target) $r.=" target='$target'";
1237        $r.=">\n";
1238       
1239        for ($i=0; $i<count($search); $i++) {
1240                $inter="inter_".$i."_".$search[$i];
1241                global $$inter;
1242                $op="op_".$i."_".$search[$i];
1243                global $$op;
1244                $field_="field_".$i."_".$search[$i];
1245                global $$field_;
1246                $field=$$field_;
1247                //Recuperation des variables auxiliaires
1248                $fieldvar_="fieldvar_".$i."_".$search[$i];
1249                global $$fieldvar_;
1250                $fieldvar=$$fieldvar_;
1251               
1252                if (!is_array($fieldvar)) $fieldvar=array();
1253               
1254                // si sélection d'autorité et champ vide : on ne doit pas le prendre en compte
1255                if($$op=='AUTHORITY'){
1256                        $suppr=false;
1257                        foreach($field as $k=>$v){
1258                                if($v==0){
1259                                        unset($field[$k]);
1260                                        unset($fieldvar[$k]);
1261                                        $suppr=true;
1262                                }
1263                        }
1264                        if($suppr){
1265                                $field = array_values($field);
1266                                $fieldvar = array_values($field);
1267                        }
1268                }
1269               
1270                $r.="<input type='hidden' name='search[]' value='".htmlentities($search[$i],ENT_QUOTES,$charset)."'/>";
1271                $r.="<input type='hidden' name='".$inter."' value='".htmlentities($$inter,ENT_QUOTES,$charset)."'/>";
1272                $r.="<input type='hidden' name='".$op."' value='".htmlentities($$op,ENT_QUOTES,$charset)."'/>";
1273                for ($j=0; $j<count($field); $j++) {
1274                        $r.="<input type='hidden' name='".$field_."[]' value='".htmlentities($field[$j],ENT_QUOTES,$charset)."'/>";
1275                }
1276                reset($fieldvar);
1277                while (list($var_name,$var_value)=each($fieldvar)) {
1278                        for ($j=0; $j<count($var_value); $j++) {
1279                                $r.="<input type='hidden' name='".$fieldvar_."[".$var_name."][]' value='".htmlentities($var_value[$j],ENT_QUOTES,$charset)."'/>";
1280                        }
1281                }
1282        }
1283        $r.="<input type='hidden' name='page' value='$page'/>";
1284        global $dsi_active;
1285        if ($dsi_active) {
1286                global $id_equation;
1287                $r.="<input type='hidden' name='id_equation' value='$id_equation'/>";
1288        }
1289               
1290        global $pmb_opac_view_activate;
1291        if ($pmb_opac_view_activate) {
1292                global $opac_view_id;
1293                $r.="<input type='hidden' name='opac_view_id' value='$opac_view_id'/>";
1294        }
1295       
1296        if ($close_form) $r.="</form>";
1297        return $r;
1298    }
1299   
1300    function make_human_query() {
1301        global $search;
1302        global $msg;
1303        global $charset;
1304        global $include_path;
1305                global $pmb_multi_search_operator;
1306                global $lang;
1307                global $thesaurus_classement_mode_pmb;
1308               
1309                $r="";
1310        for ($i=0; $i<count($search); $i++) {
1311                $s=explode("_",$search[$i]);
1312                if ($s[0]=="f") {
1313                        $title=$this->fixedfields[$s[1]]["TITLE"]; 
1314                } elseif(array_key_exists($s[0],$this->pp)){
1315                        $title=$this->pp[$s[0]]->t_fields[$s[1]]["TITRE"];
1316                } elseif ($s[0]=="s") {
1317                        $title=$this->specialfields[$s[1]]["TITLE"];
1318                }elseif ($s[0]=="authperso") {
1319                        $title=$this->authpersos[$s[1]]['name'];
1320                }
1321                $op="op_".$i."_".$search[$i];
1322                global $$op;
1323                //faire un test de classe et getop()
1324                $operator=$this->operators[$$op];
1325                $field_="field_".$i."_".$search[$i];
1326                global $$field_;
1327                $field=$$field_;
1328               
1329                //Recuperation des variables auxiliaires
1330                $fieldvar_="fieldvar_".$i."_".$search[$i];
1331                global $$fieldvar_;
1332                $fieldvar=$$fieldvar_;
1333                if (!is_array($fieldvar)) $fieldvar=array(); 
1334               
1335                $field_aff=array();
1336                $fieldvar_aff=array();
1337                $operator_multi = ($pmb_multi_search_operator?$pmb_multi_search_operator:"or");
1338                if (array_key_exists($s[0],$this->pp)) {
1339                        $datatype=$this->pp[$s[0]]->t_fields[$s[1]]["DATATYPE"];
1340                        $df=$this->dynamicfields[$s[0]]["FIELD"][$this->get_id_from_datatype($datatype,$s[0])];
1341                                $q_index=$df["QUERIES_INDEX"];
1342                                $q=$df["QUERIES"][$q_index[$$op]];
1343                        if ($q["DEFAULT_OPERATOR"])
1344                                $operator_multi=$q["DEFAULT_OPERATOR"];
1345                        for ($j=0; $j<count($field); $j++) {
1346                                $field_aff[$j]=$this->pp[$s[0]]->get_formatted_output(array(0=>$field[$j]),$s[1]);
1347                        }
1348                } elseif ($s[0]=="f") {
1349                        $ff=$this->fixedfields[$s[1]];
1350                                $q_index=$ff["QUERIES_INDEX"];
1351                                $q=$ff["QUERIES"][$q_index[$$op]];
1352                                if($fieldvar["operator_between_multiple_authorities"]){
1353                                        $operator_multi=$fieldvar["operator_between_multiple_authorities"][0];
1354                                } else {
1355                                        if ($q["DEFAULT_OPERATOR"])
1356                                        $operator_multi=$q["DEFAULT_OPERATOR"];
1357                                }
1358                        switch ($this->fixedfields[$s[1]]["INPUT_TYPE"]) {
1359                                case "list":
1360                                        $options=$this->fixedfields[$s[1]]["INPUT_OPTIONS"]["OPTIONS"][0];
1361                                        $opt=array();
1362                                        for ($j=0; $j<count($options["OPTION"]); $j++) {
1363                                                if (substr($options["OPTION"][$j]["value"],0,4)=="msg:") {
1364                                                        $opt[$options["OPTION"][$j]["VALUE"]]=$msg[substr($options["OPTION"][$j]["value"],4,strlen($options["OPTION"][$j]["value"])-4)];
1365                                                } else {
1366                                                        $opt[$options["OPTION"][$j]["VALUE"]]=$options["OPTION"][$j]["value"];
1367                                                }
1368                                        }
1369                                        for ($j=0; $j<count($field); $j++) {
1370                                                $field_aff[$j]=$opt[$field[$j]];
1371                                        }
1372                                        break;
1373                                case "query_list":
1374                                        $requete=$this->fixedfields[$s[1]]["INPUT_OPTIONS"]["QUERY"][0]["value"];
1375                                        if ($this->fixedfields[$s[1]]["INPUT_OPTIONS"]["FILTERING"] == "yes") {
1376                                                $requete = str_replace("!!acces_j!!", "", $requete);
1377                                                $requete = str_replace("!!statut_j!!", "", $requete);
1378                                                $requete = str_replace("!!statut_r!!", "", $requete);
1379                                        }
1380                                        if ($this->fixedfields[$s[1]]["INPUT_OPTIONS"]["QUERY"][0]["USE_GLOBAL"]) {
1381                                                $use_global = explode(",", $this->fixedfields[$s[1]]["INPUT_OPTIONS"]["QUERY"][0]["USE_GLOBAL"]);
1382                                                for($j=0; $j<count($use_global); $j++) {
1383                                                        $var_global = $use_global[$j];
1384                                                        global $$var_global;
1385                                                        $requete = str_replace("!!".$var_global."!!", $$var_global, $requete);
1386                                                }
1387                                        }
1388                                        $resultat=pmb_mysql_query($requete);
1389                                        $opt=array();
1390                                        while ($r_=@pmb_mysql_fetch_row($resultat)) {
1391                                                $opt[$r_[0]]=$r_[1];
1392                                        }
1393                                        for ($j=0; $j<count($field); $j++) {
1394                                                $field_aff[$j]=$opt[$field[$j]];
1395                                        }
1396                                        break;
1397                                case "marc_list":
1398                                        $opt=new marc_list($this->fixedfields[$s[1]]["INPUT_OPTIONS"]["NAME"][0]["value"]);
1399                                        for ($j=0; $j<count($field); $j++) {
1400                                                $field_aff[$j]=$opt->table[$field[$j]];
1401                                        }
1402                                        break;
1403                                case "date":
1404                                        $field_aff[0]=format_date($field[0]);
1405                                        break;
1406                                case "authoritie":
1407                                        for($j=0 ; $j<sizeof($field) ; $j++){
1408                                                if(is_numeric($field[$j]) && ($$op == "AUTHORITY")){
1409                                                                switch ($ff['INPUT_OPTIONS']['SELECTOR']){
1410                                                                        case "categorie":
1411                                                                                $thes = thesaurus::getByEltId($field[$j]);
1412                                                                                $field[$j] = categories::getlibelle($field[$j],$lang)." [".$thes->libelle_thesaurus."]";
1413                                                                                if(isset($fieldvar["id_thesaurus"])){
1414                                                                                        unset($fieldvar["id_thesaurus"]);
1415                                                                                }
1416                                                                                break;
1417                                                                        case "auteur":
1418                                                                                $aut=new auteur($field[$j]);
1419                                                                                if($aut->rejete) $field[$j] = $aut->name.', '.$aut->rejete;
1420                                                                                else $field[$j] = $aut->name;
1421                                                                                if($aut->date) $field[$j] .= " ($aut->date)";
1422                                                                                break;
1423                                                                        case "editeur":
1424                                                                                $ed = new editeur($field[$j]);
1425                                                                                $field[$j]=$ed->name;
1426                                                                                if ($ed->ville) 
1427                                                                                        if ($ed->pays) $field[$j].=" ($ed->ville - $ed->pays)";
1428                                                                                        else $field[$j].=" ($ed->ville)";
1429                                                                                break; 
1430                                                                        case "collection" :
1431                                                                                $coll = new collection($field[$j]);
1432                                                                                $field[$j] = $coll->name;
1433                                                                                break;
1434                                                                        case "subcollection" :
1435                                                                                $coll = new subcollection($field[$j]);
1436                                                                                $field[$j] = $coll->name;
1437                                                                                break;
1438                                                                        case "serie" :
1439                                                                                $serie = new serie($field[$j]);
1440                                                                                $field[$j] = $serie->name;
1441                                                                                break;
1442                                                                        case "indexint" :
1443                                                                                $indexint = new indexint($field[$j]);
1444                                                                                if ($indexint->comment) $field[$j] = $indexint->name." - ".$indexint->comment;
1445                                                                                else $field[$j] = $indexint->name ;
1446                                                                                if ($thesaurus_classement_mode_pmb != 0) {
1447                                                                                        $field[$j]="[".$indexint->name_pclass."] ".$field[$j];
1448                                                                                }
1449                                                                                break;
1450                                                                        case "titre_uniforme" :
1451                                                                                $tu = new titre_uniforme($field[$j]);
1452                                                                                $field[$j] = $tu->name;
1453                                                                                break;
1454                                                                        case "notice" :
1455                                                                                $requete = "select if(serie_name is not null,if(tnvol is not null,concat(serie_name,', ',tnvol,'. ',tit1),concat(serie_name,'. ',tit1)),tit1) AS tit from notices left join series on serie_id=tparent_id where notice_id='".$field[$j]."' ";
1456                                                                                $res=pmb_mysql_query($requete);
1457                                                                                if($res && pmb_mysql_num_rows($res)){
1458                                                                                        $field[$j] = pmb_mysql_result($res,0,0);
1459                                                                                }
1460                                                                                break; 
1461                                                                }
1462                                                }
1463                                        }
1464                                        $field_aff= $field;
1465                                        break;
1466                                default:
1467                                        $field_aff=$field;
1468                                        break;         
1469                        }
1470                       
1471                        //Ajout des variables si necessaire
1472                        reset($fieldvar);
1473                        $fieldvar_aff=array();
1474                        while (list($var_name,$var_value)=each($fieldvar)) {
1475                                //Recherche de la variable par son nom
1476                                $vvar=$this->fixedfields[$s[1]]["VAR"];
1477                                for ($j=0; $j<count($vvar); $j++) {
1478                                        if (($vvar[$j]["TYPE"]=="input")&&($vvar[$j]["NAME"]==$var_name)) {
1479                                               
1480                                                //Calcul de la visibilite
1481                                                $varname=$vvar[$j]["NAME"];
1482                                                        $visibility=1;
1483                                                        $vis=$vvar[$j]["OPTIONS"]["VAR"][0];
1484                                                        if ($vis["NAME"]) {
1485                                                                $vis_name=$vis["NAME"];
1486                                                                global $$vis_name;
1487                                                                if ($vis["VISIBILITY"]=="no") $visibility=0;
1488                                                                for ($k=0; $k<count($vis["VALUE"]); $k++) {
1489                                                                        if ($vis["VALUE"][$k]["value"]==$$vis_name) {
1490                                                                                if ($vis["VALUE"][$k]["VISIBILITY"]=="no") $sub_vis=0; else $sub_vis=1;
1491                                                                                if ($vis["VISIBILITY"]=="no") $visibility|=$sub_vis; else $visibility&=$sub_vis;
1492                                                                                break;
1493                                                                        }
1494                                                                }
1495                                                        }
1496                                               
1497                                                $var_list_aff=array();
1498                                                $flag_aff = false;
1499                                               
1500                                                if ($visibility) {             
1501                                                        switch ($vvar[$j]["OPTIONS"]["INPUT"][0]["TYPE"]) {
1502                                                                case "query_list":
1503                                                                        $query_list=$vvar[$j]["OPTIONS"]["INPUT"][0]["QUERY"][0]["value"];
1504                                                                        $r_list=pmb_mysql_query($query_list);
1505                                                                        while ($line=pmb_mysql_fetch_array($r_list)) {
1506                                                                                $as=array_search($line[0],$var_value);
1507                                                                                if (($as!==false)&&($as!==NULL)) {
1508                                                                                        $var_list_aff[]=$line[1];
1509                                                                                }
1510                                                                        }
1511                                                                        if($vvar[$j]["OPTIONS"]["INPUT"][0]["QUERY"][0]["ALLCHOICE"] == "yes" && count($var_list_aff) == 0){
1512                                                                                $var_list_aff[]=$msg[substr($vvar[$j]["OPTIONS"]["INPUT"][0]["QUERY"][0]["TITLEALLCHOICE"],4,strlen($vvar[$j]["OPTIONS"]["INPUT"][0]["QUERY"][0]["TITLEALLCHOICE"])-4)];
1513                                                                        }
1514                                                                        $fieldvar_aff[]=implode(" ".$msg["search_or"]." ",$var_list_aff); 
1515                                                                        $flag_aff=true;
1516                                                                        break;
1517                                                                case "checkbox":
1518                                                                        $value = $var_value[0];
1519                                                                        $label_list = $vvar[$j]["OPTIONS"]["INPUT"][0]["COMMENTS"][0]["LABEL"];
1520                                                                        for($indice=0;$indice<count($label_list);$indice++){
1521                                                                                if($value == $label_list[$indice]["VALUE"]){
1522                                                                                        $libelle = $label_list[$indice]["value"];
1523                                                                                        break; 
1524                                                                                }
1525                                                                        }
1526                                                                                                                                               
1527                                                                        $fieldvar_aff[]=$libelle;
1528                                                                        $flag_aff=true;
1529                                                                        break;
1530                                                        }
1531                                                        if($flag_aff) $fieldvar_aff[count($fieldvar_aff)-1]=$vvar[$j]["COMMENT"]." : ".$fieldvar_aff[count($fieldvar_aff)-1];
1532                                                }
1533                                        }
1534                                }
1535                        }
1536                } elseif ($s[0]=="s") {
1537                        //appel de la fonction make_human_query de la classe du champ special
1538                        //Recherche du type
1539                        $type=$this->specialfields[$s[1]]["TYPE"];
1540                        for ($is=0; $is<count($this->tableau_speciaux["TYPE"]); $is++) {
1541                                        if ($this->tableau_speciaux["TYPE"][$is]["NAME"]==$type) {
1542                                                $sf=$this->specialfields[$s[1]];
1543                                                require_once($include_path."/search_queries/specials/".$this->tableau_speciaux["TYPE"][$is]["PATH"]."/search.class.php");
1544                                                $specialclass= new $this->tableau_speciaux["TYPE"][$is]["CLASS"]($s[1],$i,$sf,$this);
1545                                                $field_aff=$specialclass->make_human_query();
1546                                                $field_aff[0]=html_entity_decode(strip_tags($field_aff[0]),ENT_QUOTES,$charset);
1547                                                break;
1548                                        }
1549                        }
1550                }elseif ($s[0]=="authperso") {                         
1551                                $field_aff[0]=$field[0];
1552                }
1553               
1554                        switch ($operator_multi) {
1555                        case "and":
1556                                $op_list=$msg["search_and"];
1557                                break;
1558                        case "or":
1559                                $op_list=$msg["search_or"];
1560                                break;
1561                        default:
1562                                $op_list=$msg["search_or"];
1563                                break;
1564                }
1565                if(is_array($field_aff)){
1566                        $texte=implode(" ".$op_list." ",$field_aff);
1567                }
1568                if (count($fieldvar_aff)) $texte.=" [".implode(" ; ",$fieldvar_aff)."]";
1569               
1570                $inter="inter_".$i."_".$search[$i];
1571                global $$inter;
1572                switch ($$inter) {
1573                        case "and":
1574                                $inter_op=$msg["search_and"];
1575                                break;
1576                        case "or":
1577                                $inter_op=$msg["search_or"];
1578                                break;
1579                        case "ex":
1580                                $inter_op=$msg["search_exept"];
1581                                break;
1582                        default:
1583                                $inter_op="";
1584                                break;
1585                }
1586               
1587                if ($inter_op) $inter_op="<strong>".htmlentities($inter_op,ENT_QUOTES,$charset)."</strong>";
1588                $r.=$inter_op." <i><strong>".htmlentities($title,ENT_QUOTES,$charset)."</strong> ".htmlentities($operator,ENT_QUOTES,$charset)." (".htmlentities($texte,ENT_QUOTES,$charset).")</i> ";
1589        }
1590        return $r;
1591    }
1592   
1593    function make_unimarc_query() {
1594        global $search;
1595        global $msg;
1596        global $charset;
1597        global $include_path;
1598
1599                $mt=array();
1600               
1601                //Récupération du type de recherche
1602                $sc_type = $this->fichier_xml;
1603                $sc_type = substr($sc_type,0,strlen($sc_type)-8);
1604
1605                for ($i=0; $i<count($search); $i++) {
1606                $sub="";
1607                $s=explode("_",$search[$i]);
1608
1609                if ($s[0]=="f") {
1610                        $id=$search[$i];
1611                        $title=$this->fixedfields[$s[1]]["UNIMARCFIELD"]; 
1612                } elseif (array_key_exists($s[0],$this->pp)){
1613                        $id=$search[$i];
1614                        $title=$this->pp[$s[0]]->t_fields[$s[1]]["UNIMARCFIELD"];
1615                } elseif ($s[0]=="s") {
1616                        $id=$search[$i];
1617                        $title=$this->specialfields[$s[1]]["UNIMARCFIELD"];
1618                }
1619                $op="op_".$i."_".$search[$i];
1620                global $$op;
1621                //faire un test de classe et getop()
1622                //$operator=$this->operators[$$op];
1623                $field_="field_".$i."_".$search[$i];
1624                global $$field_;
1625                $field=$$field_;
1626               
1627                //Recuperation des variables auxiliaires
1628                $fieldvar_="fieldvar_".$i."_".$search[$i];
1629                global $$fieldvar_;
1630                $fieldvar=$$fieldvar_;
1631                if (!is_array($fieldvar)) $fieldvar=array(); 
1632               
1633                $field_aff=array();
1634               
1635                if(array_key_exists($s[0],$this->pp)){
1636                        for ($j=0; $j<count($field); $j++) {
1637                                $field_aff[$j]=$this->pp[$s[0]]->get_formatted_output(array(0=>$field[$j]),$s[1]);
1638                        }
1639                } elseif ($s[0]=="f") {
1640                        switch ($this->fixedfields[$s[1]]["INPUT_TYPE"]) {
1641                                case "list":
1642                                        $options=$this->fixedfields[$s[1]]["INPUT_OPTIONS"]["OPTIONS"][0];
1643                                        $opt=array();
1644                                        for ($j=0; $j<count($options["OPTION"]); $j++) {
1645                                                if (substr($options["OPTION"][$j]["value"],0,4)=="msg:") {
1646                                                        $opt[$options["OPTION"][$j]["VALUE"]]=$msg[substr($options["OPTION"][$j]["value"],4,strlen($options["OPTION"][$j]["value"])-4)];
1647                                                } else {
1648                                                        $opt[$options["OPTION"][$j]["VALUE"]]=$options["OPTION"][$j]["value"];
1649                                                }
1650                                        }
1651                                        for ($j=0; $j<count($field); $j++) {
1652                                                $field_aff[$j]=$opt[$field[$j]];
1653                                        }
1654                                        break;
1655                                case "query_list":
1656                                        $requete=$this->fixedfields[$s[1]]["INPUT_OPTIONS"]["QUERY"][0]["value"];
1657                                        if ($this->fixedfields[$s[1]]["INPUT_OPTIONS"]["FILTERING"] == "yes") {
1658                                                $requete = str_replace("!!acces_j!!", "", $requete);
1659                                                $requete = str_replace("!!statut_j!!", "", $requete);
1660                                                $requete = str_replace("!!statut_r!!", "", $requete);
1661                                        }
1662                                        if ($this->fixedfields[$s[1]]["INPUT_OPTIONS"]["QUERY"][0]["USE_GLOBAL"]) {
1663                                                $use_global = explode(",", $this->fixedfields[$s[1]]["INPUT_OPTIONS"]["QUERY"][0]["USE_GLOBAL"]);
1664                                                for($j=0; $j<count($use_global); $j++) {
1665                                                        $var_global = $use_global[$j];
1666                                                        global $$var_global;
1667                                                        $requete = str_replace("!!".$var_global."!!", $$var_global, $requete);
1668                                                }
1669                                        }
1670                                        $resultat=pmb_mysql_query($requete);
1671                                        $opt=array();
1672                                        while ($r_=@pmb_mysql_fetch_row($resultat)) {
1673                                                $opt[$r_[0]]=$r_[1];
1674                                        }
1675                                        for ($j=0; $j<count($field); $j++) {
1676                                                $field_aff[$j]=$opt[$field[$j]];
1677                                        }
1678                                        break;
1679                                case "marc_list":
1680                                        $opt=new marc_list($this->fixedfields[$s[1]]["INPUT_OPTIONS"]["NAME"][0]["value"]);
1681                                        for ($j=0; $j<count($field); $j++) {
1682                                                $field_aff[$j]=$opt->table[$field[$j]];
1683                                        }
1684                                        break;
1685                                case "date":
1686                                        $field_aff[0]=format_date($field[0]);
1687                                        break;
1688                                default:
1689                                        $field_aff=$field;
1690                                        break;         
1691                        }
1692                       
1693                        //Ajout des variables si necessaire
1694                        reset($fieldvar);
1695                        $fieldvar_aff=array();
1696                        while (list($var_name,$var_value)=each($fieldvar)) {
1697                                //Recherche de la variable par son nom
1698                                $vvar=$this->fixedfields[$s[1]]["VAR"];
1699                                for ($j=0; $j<count($vvar); $j++) {
1700                                        if (($vvar[$j]["TYPE"]=="input")&&($vvar[$j]["NAME"]==$var_name)) {
1701                                               
1702                                                //Calcul de la visibilite
1703                                                $varname=$vvar[$j]["NAME"];
1704                                                        $visibility=1;
1705                                                        $vis=$vvar[$j]["OPTIONS"]["VAR"][0];
1706                                                        if ($vis["NAME"]) {
1707                                                                $vis_name=$vis["NAME"];
1708                                                                global $$vis_name;
1709                                                                if ($vis["VISIBILITY"]=="no") $visibility=0;
1710                                                                for ($k=0; $k<count($vis["VALUE"]); $k++) {
1711                                                                        if ($vis["VALUE"][$k]["value"]==$$vis_name) {
1712                                                                                if ($vis["VALUE"][$k]["VISIBILITY"]=="no") $sub_vis=0; else $sub_vis=1;
1713                                                                                if ($vis["VISIBILITY"]=="no") $visibility|=$sub_vis; else $visibility&=$sub_vis;
1714                                                                                break;
1715                                                                        }
1716                                                                }
1717                                                        }
1718                                               
1719                                                $var_list_aff=array();
1720                                               
1721                                                if ($visibility) {             
1722                                                        switch ($vvar[$j]["OPTIONS"]["INPUT"][0]["TYPE"]) {
1723                                                                case "query_list":
1724                                                                        $query_list=$vvar[$j]["OPTIONS"]["INPUT"][0]["QUERY"][0]["value"];
1725                                                                        $r_list=pmb_mysql_query($query_list);
1726                                                                        while ($line=pmb_mysql_fetch_array($r_list)) {
1727                                                                                $as=array_search($line[0],$var_value);
1728                                                                                if (($as!==false)&&($as!==NULL)) {
1729                                                                                        $var_list_aff[]=$line[1];
1730                                                                                }
1731                                                                        }
1732                                                                        $fieldvar_aff[]=implode(" ".$msg["search_or"]." ",$var_list_aff);
1733                                                                        break;
1734                                                        }
1735                                                        $fieldvar_aff[count($fieldvar_aff)-1]=$vvar[$j]["COMMENT"]." : ".$fieldvar_aff[count($fieldvar_aff)-1];
1736                                                }
1737                                        }
1738                                }
1739                        }
1740                } elseif ($s[0]=="s") {
1741                        //appel de la fonction make_unimarc_query de la classe du champ special
1742                        //Recherche du type
1743                        $type=$this->specialfields[$s[1]]["TYPE"];
1744                        for ($is=0; $is<count($this->tableau_speciaux["TYPE"]); $is++) {
1745                                        if ($this->tableau_speciaux["TYPE"][$is]["NAME"]==$type) {
1746                                                $sf=$this->specialfields[$s[1]];
1747                                                require_once($include_path."/search_queries/specials/".$this->tableau_speciaux["TYPE"][$is]["PATH"]."/search.class.php");
1748                                                $specialclass= new $this->tableau_speciaux["TYPE"][$is]["CLASS"]($s[1],$i,$sf,$this);
1749                                                $sub=$specialclass->make_unimarc_query();
1750                                                break;
1751                                        }
1752                        }
1753                }
1754               
1755                $inter="inter_".$i."_".$search[$i];
1756                global $$inter;
1757                       
1758                $mterm=new mterm($title,$$op,$field_aff,$fieldvar_aff,$$inter,$id);
1759                if ($i==1) $mterm->sc_type=$sc_type;
1760                if ((is_array($sub))&&(count($sub))) $mterm->set_sub($sub); else if (is_array($sub)) unset($mterm);
1761                if ($mterm) $mt[]=$mterm;
1762        }
1763        return $mt;
1764    }
1765   
1766    function get_results($url,$url_to_search_form,$hidden_form=true,$search_target="") {
1767        global $dbh;
1768        global $begin_result_liste;
1769        global $nb_per_page_search;
1770        global $page;
1771        global $charset;
1772        global $search;
1773        global $msg;
1774        global $pmb_nb_max_tri;
1775        global $affich_tris_result_liste;
1776        global $pmb_allow_external_search;
1777 
1778        $start_page=$nb_per_page_search*$page;
1779       
1780        //Y-a-t-il des champs ?
1781        if (count($search)==0) {
1782                array_pop($_SESSION["session_history"]);
1783                error_message_history($msg["search_empty_field"], $msg["search_no_fields"], 1);
1784                exit();
1785        }
1786       
1787        //Verification des champs vides
1788        for ($i=0; $i<count($search); $i++) {
1789                $op="op_".$i."_".$search[$i];
1790                global $$op;
1791                $field_="field_".$i."_".$search[$i];
1792                global $$field_;
1793                $field=$$field_;
1794                $s=explode("_",$search[$i]);
1795                $bool=false;
1796                if ($s[0]=="f") {
1797                        $champ=$this->fixedfields[$s[1]]["TITLE"];
1798                        if ((string)$field[0]=="") {
1799                                $bool=true;
1800                        }
1801                } elseif(array_key_exists($s[0],$this->pp)) {
1802                        $champ=$this->pp[$s[0]]->t_fields[$s[1]]["TITRE"];
1803                        if ((string)$field[0]=="") {
1804                                $bool=true;
1805                        }
1806                } elseif($s[0]=="s") {
1807                        $champ=$this->specialfields[$s[1]]["TITLE"];
1808                        $type=$this->specialfields[$s[1]]["TYPE"];
1809                                for ($is=0; $is<count($this->tableau_speciaux["TYPE"]); $is++) {
1810                                        if ($this->tableau_speciaux["TYPE"][$is]["NAME"]==$type) {
1811                                                $sf=$this->specialfields[$s[1]];
1812                                                global $include_path;
1813                                                require_once($include_path."/search_queries/specials/".$this->tableau_speciaux["TYPE"][$is]["PATH"]."/search.class.php");
1814                                                $specialclass= new $this->tableau_speciaux["TYPE"][$is]["CLASS"]($s[1],$sf,$i,$this);
1815                                                $bool=$specialclass->is_empty($field);
1816                                                break;
1817                                        }
1818                                }
1819                }
1820                if (($bool)&&(!$this->op_empty[$$op])) {
1821                        array_pop($_SESSION["session_history"]);
1822                        error_message_history($msg["search_empty_field"], sprintf($msg["search_empty_error_message"],$champ), 1);
1823                        exit();
1824                }
1825        }
1826       
1827        $table=$this->make_search();
1828        return $table;
1829 
1830    }
1831   
1832    function get_current_search_map(){
1833        global $pmb_map_activate;
1834        $map = "";
1835        if($pmb_map_activate){
1836                        $map = "<div id='map_container'><div id='map_search' ></div></div>";
1837        }
1838        return $map;
1839    }
1840   
1841    function check_emprises(){
1842        global $pmb_map_activate;
1843        global $pmb_map_max_holds;
1844        global $pmb_map_size_search_result;
1845        $current_search = $_SESSION['CURRENT'];
1846        $map = "";
1847        $size=explode("*",$pmb_map_size_search_result);
1848        if(count($size)!=2)$map_size="width:800px; height:480px;";
1849        $map_size= "width:".$size[0]."px; height:".$size[1]."px;";
1850       
1851        $map_search_controler = new map_search_controler(null, $current_search, $pmb_map_max_holds,false);
1852        $json = $map_search_controler->get_json_informations();
1853        //Obligatoire pour supprimer les {}
1854        $json = substr($json, 1, strlen($json)-2);
1855        if($map_search_controler->have_results()){
1856                $map.= "<script type='text/javascript'>
1857                                                require(['dojo/ready', 'dojo/dom-attr', 'dojo/parser', 'dojo/dom'], function(ready, domAttr, parser, dom){
1858                                                        ready(function(){
1859                                                                domAttr.set('map_search', 'data-dojo-type', 'apps/map/map_controler');
1860                                                                domAttr.set('map_search', 'data-dojo-props','searchId: ".$current_search.", mode:\"search_result\", ".$json."');
1861                                                                        domAttr.set('map_search', 'style', '$map_size');
1862                                                                        parser.parse('map_container');
1863        });
1864        });
1865        </script>";
1866        }else{
1867                $map.= "<script type='text/javascript'>
1868                                                require(['dojo/ready', 'dojo/dom-construct'], function(ready, domConstruct){
1869                                                        ready(function(){
1870                                                                domConstruct.destroy('map_container');
1871                                                        });
1872                                                });
1873                        </script>";
1874        }
1875        print $map;
1876    }
1877         
1878    function show_results($url,$url_to_search_form,$hidden_form=true,$search_target="", $acces=false) {
1879        global $dbh;
1880        global $begin_result_liste;
1881        global $nb_per_page_search;
1882        global $page;
1883        global $charset;
1884        global $search;
1885        global $msg;
1886        global $pmb_nb_max_tri;
1887        global $affich_tris_result_liste;
1888        global $pmb_allow_external_search;
1889        global $debug;
1890                global $gestion_acces_active, $gestion_acces_user_notice,$PMBuserid, $pmb_allow_external_search;
1891                global $link_bulletin;
1892                global $opac_view_id; 
1893                               
1894                $start_page=$nb_per_page_search*$page;
1895       
1896        //Y-a-t-il des champs ?
1897        if (count($search)==0) {
1898                array_pop($_SESSION["session_history"]);
1899                error_message_history($msg["search_empty_field"], $msg["search_no_fields"], 1);
1900                exit();
1901        }
1902        $recherche_externe=true;//Savoir si l'on peut faire une recherche externe à partir des critères choisis
1903        //Verification des champs vides
1904        for ($i=0; $i<count($search); $i++) {
1905                $op="op_".$i."_".$search[$i];
1906                global $$op;
1907                $field_="field_".$i."_".$search[$i];
1908                global $$field_;
1909                $field=$$field_;
1910                $s=explode("_",$search[$i]);
1911                $bool=false;
1912                if ($s[0]=="f") {
1913                        $champ=$this->fixedfields[$s[1]]["TITLE"];
1914                        if ((string)$field[0]=="") {
1915                                $bool=true;
1916                        }
1917                } elseif(array_key_exists($s[0],$this->pp)) {
1918                        $recherche_externe=false;
1919                        $champ=$this->pp[$s[0]]->t_fields[$s[1]]["TITRE"];
1920                        if ((string)$field[0]=="") {
1921                                $bool=true;
1922                        }
1923                } elseif($s[0]=="s") {
1924                        $recherche_externe=false;
1925                        $champ=$this->specialfields[$s[1]]["TITLE"];
1926                                $type=$this->specialfields[$s[1]]["TYPE"];
1927                                for ($is=0; $is<count($this->tableau_speciaux["TYPE"]); $is++) {
1928                                        if ($this->tableau_speciaux["TYPE"][$is]["NAME"]==$type) {
1929                                                $sf=$this->specialfields[$s[1]];
1930                                                global $include_path;
1931                                                require_once($include_path."/search_queries/specials/".$this->tableau_speciaux["TYPE"][$is]["PATH"]."/search.class.php");
1932                                                $specialclass= new $this->tableau_speciaux["TYPE"][$is]["CLASS"]($s[1],$sf,$i,$this);
1933                                                $bool=$specialclass->is_empty($field);
1934                                                break;
1935                                        }
1936                                }
1937                }
1938                if (($bool)&&(!$this->op_empty[$$op])) {
1939                        array_pop($_SESSION["session_history"]);
1940                        error_message_history($msg["search_empty_field"], sprintf($msg["search_empty_error_message"],$champ), 1);
1941                        exit();
1942                }
1943        }
1944       
1945        $table=$this->make_search();
1946
1947                if ($acces==true && $gestion_acces_active==1 && $gestion_acces_user_notice==1) {
1948                $this->filter_searchtable_from_accessrights($table, $PMBuserid);
1949                }
1950       
1951                $requete="select count(1) from $table";
1952                if($res=pmb_mysql_query($requete)){
1953                        $nb_results=pmb_mysql_result($res,0,0); 
1954                }else{
1955                        array_pop($_SESSION["session_history"]);
1956                error_message_history("",$msg["search_impossible"], 1);
1957                exit();
1958                }
1959       
1960       
1961        //gestion du tri
1962        $has_sort = false;
1963                if ($nb_results <= $pmb_nb_max_tri) {
1964                        if ($_SESSION["tri"]) {
1965                                $sort = new sort('notices','base');
1966                                $requete = $sort->appliquer_tri($_SESSION["tri"],"SELECT * FROM " . $table, "notice_id", $start_page, $nb_per_page_search);
1967                                $table = $sort->table_tri_tempo;       
1968                                $has_sort = true; 
1969                        }
1970                }
1971                // fin gestion tri
1972        //Y-a-t-il une erreur lors de la recherche ?
1973        if ($this->error_message) {
1974                array_pop($_SESSION["session_history"]);
1975                error_message_history("", $this->error_message, 1);
1976                exit();
1977        }
1978       
1979        if ($hidden_form)
1980                print $this->make_hidden_search_form($url);
1981       
1982        $requete="select $table.*,notices.niveau_biblio from ".$table.",notices where notices.notice_id=$table.notice_id"; 
1983        if(count($search) > 1 && !$has_sort) 
1984                $requete .= " order by index_serie, tnvol, index_sew";
1985        $requete .= " limit ".$start_page.",".$nb_per_page_search;
1986       
1987        $resultat=pmb_mysql_query($requete,$dbh);
1988       
1989        $human_requete = $this->make_human_query();
1990        print "<strong>".$msg["search_search_extended"]."</strong> : ".$human_requete ;
1991                if ($debug) print "<br />".$this->serialize_search();
1992                if ($nb_results) {
1993                        print " => ".$nb_results." ".$msg["1916"]."<br />\n";
1994                        print $begin_result_liste;
1995                        if ($this->rec_history) {
1996                                //Affichage des liens paniers et impression
1997                                $current=$_SESSION["CURRENT"];
1998                                if ($current!==false) {
1999                                        $tri_id_info = $_SESSION["tri"] ? "&sort_id=".$_SESSION["tri"] : "";
2000                                        print "&nbsp;<a href='#' onClick=\"openPopUp('./print_cart.php?current_print=$current&action=print_prepare$tri_id_info','print',600,700,-2,-2,'scrollbars=yes,menubar=0,resizable=yes'); 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$tri_id_info','print',500,600,-2,-2,'scrollbars=yes,menubar=0'); w.focus(); return false;\"><img src='./images/print.gif' border='0' align='center' alt=\"".$msg["histo_print"]."\" title=\"".$msg["histo_print"]."\"/></a>";
2001                                        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.gif' border='0' align='center' alt=\"".$msg["docnum_download"]."\" title=\"".$msg["docnum_download"]."\"/></a>";
2002                                        if ($pmb_allow_external_search){
2003                                                if($recherche_externe){
2004                                                        $tag_a="href='catalog.php?categ=search&mode=7&from_mode=6&external_type=multi'";
2005                                                }else{
2006                                                        $tag_a="onClick=\"alert('".$msg["search_interdite_externe"]."')\"";
2007                                                }
2008                                                print "&nbsp;<a ".$tag_a."  title='".$msg["connecteurs_external_search_sources"]."'><img src='./images/external_search.png' border='0' align='center' alt=\"".$msg["connecteurs_external_search_sources"]."\"/></a>";
2009                                        }
2010                                        if ($nb_results<=$pmb_nb_max_tri) {
2011                                                print $affich_tris_result_liste;
2012                                        }
2013                                }
2014                        }
2015                } else print "<br />".$msg["1915"]." ";
2016                print "<input type='button' class='bouton' onClick=\"document.search_form.action='$url_to_search_form'; document.search_form.target='$search_target'; document.search_form.submit(); return false;\" value=\"".$msg["search_back"]."\"/>";
2017                global $dsi_active;
2018                if ($dsi_active && !$opac_view_id) {
2019                        global $id_equation, $priv_pro, $id_empr;
2020                        if ($id_equation) $mess_bouton = $msg['dsi_sauvegarder_equation'] ;
2021                                else $mess_bouton = $msg["dsi_transformer_equation"] ;
2022                        print "&nbsp;<input  type='button' class='bouton' onClick=\"document.forms['transform_dsi'].submit(); \" value=\"".$mess_bouton."\"/>
2023                                                <form name='transform_dsi' style='display:none;' method='post' action='./dsi.php'>";
2024                        if ($priv_pro=="PRI") print "
2025                                                <input type=hidden name='categ' value='bannettes' />
2026                                                <input type=hidden name='sub' value='abo' />
2027                                                <input type=hidden name='suite' value='transform_equ' />
2028                                                <input type=hidden name='id_equation' value='$id_equation' />
2029                                                <input type=hidden name='id_empr' value='$id_empr' />
2030                                                <input type=hidden name='requete' value='".htmlentities($this->serialize_search(),ENT_QUOTES,$charset)."' />
2031                                                </form>";
2032                                else print "
2033                                                <input type=hidden name='categ' value='equations' />
2034                                                <input type=hidden name='sub' value='gestion' />
2035                                                <input type=hidden name='suite' value='transform' />
2036                                                <input type=hidden name='id_equation' value='$id_equation' />
2037                                                <input type=hidden name='requete' value='".htmlentities($this->serialize_search(),ENT_QUOTES,$charset)."' />
2038                                                </form>";
2039                        }
2040                global $pmb_opac_view_activate;
2041        if ($pmb_opac_view_activate) {
2042                if($opac_view_id){
2043                        $mess_bouton = $msg['opac_view_sauvegarder_equation'] ;                 
2044                                print "
2045                                        &nbsp;<input  type='button' class='bouton' onClick=\"document.forms['transform_opac_view'].submit(); \" value=\"".$mess_bouton."\"/>
2046                                        <form name='transform_opac_view' style='display:none;' method='post' action='./admin.php?categ=opac&sub=opac_view&section=list&action=form&opac_view_id=$opac_view_id'>                                         
2047                                                        <input type=hidden name='suite' value='transform_equ' />
2048                                                        <input type=hidden name='opac_view_id' value='$opac_view_id' />
2049                                                        <input type=hidden name='requete' value='".htmlentities($this->serialize_search(),ENT_QUOTES,$charset)."' />
2050                                        </form>"; 
2051                }               
2052        }       
2053                // transformation de la recherche en multicriteres: on reposte tout avec mode=8
2054        if(!$opac_view_id){
2055                print "&nbsp;<input  type='button' class='bouton' onClick='document.search_transform.submit(); return false;' value=\"".$msg["search_notice_to_expl_transformation"]."\"/>";
2056                        print "<form name='search_transform' action='./catalog.php?categ=search&mode=8&sub=launch' style=\"display:none\" method='post'>";     
2057                        $memo_search="";
2058                        foreach($_POST as $key =>$val) {
2059                                if($val) {
2060                                        if(is_array($val)) {
2061                                                foreach($val as $cle=>$val_array) {
2062                                                        if(is_array($val_array)){
2063                                                                foreach($val_array as $valeur){
2064                                                                        $memo_search.= "<input type='hidden' name=\"".$key."[".$cle."][]\" value='".htmlentities($valeur,ENT_QUOTES,$charset)."'/>";
2065                                                                }
2066                                                        } else $memo_search.= "<input type='hidden' name='".$key."[]' value='".htmlentities($val_array,ENT_QUOTES,$charset)."'/>";
2067                                                }
2068                                        }
2069                                        else $memo_search.="<input type='hidden' name='$key' value='$val'/>";
2070                                }               
2071                        }       
2072                        print "$memo_search</form>";
2073        }
2074                //transformation en set pour connecteur externe
2075                global $id_connector_set;
2076                $id_connector_set+=0;
2077                //Il faut que l'on soit passé par le formulaire d'édition de set pour avoir $id_connector_set pour ne pas avoir le bouton tout le temps vu qu'il sert rarement
2078                if ($pmb_allow_external_search && (SESSrights & ADMINISTRATION_AUTH) && $id_connector_set) {
2079                        //Il faut qu'il y ait des sets multi critères si on veut pouvoir associer la recherche à quelque chose
2080                        if (connector_out_sets::get_typed_set_count(2)) {
2081                                print '<form name="export_to_outset" style="display:none;" method="post" action="./admin.php?categ=connecteurs&sub=out_sets&action=import_notice_search_into_set&candidate_id='.$id_connector_set.'"><input type="hidden" name="toset_search" value="'.htmlentities($this->serialize_search(),ENT_QUOTES,$charset).'" /></form>';
2082                                print '&nbsp;<input type="button" onClick="document.forms[\'export_to_outset\'].submit(); " class="bouton" value="'.htmlentities($msg["search_notice_to_connector_out_set"] ,ENT_QUOTES, $charset).'">';
2083                        }
2084                }
2085               
2086                print $this->get_current_search_map();
2087               
2088        while ($r=pmb_mysql_fetch_object($resultat)) {
2089                if($nb++>5)     $recherche_ajax_mode=1;
2090                switch($r->niveau_biblio) {
2091                                case 'm' :
2092                                        // notice de monographie
2093                                        $nt = new mono_display($r->notice_id, 6, $this->link, 1, $this->link_expl, '', $this->link_explnum,1, 0, 1, 1, "", 1, false,true,$recherche_ajax_mode,1);
2094                                        break ;
2095                                case 's' :
2096                                        // on a affaire a un periodique
2097                                        // 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 ) {
2098                                        $nt = new serial_display($r->notice_id, 6, $this->link_serial, $this->link_analysis, $this->link_bulletin, "", $this->link_explnum_serial, 0, 0, 1, 1, true, 1  ,$recherche_ajax_mode);
2099                                        break;
2100                                case 'a' :
2101                                        // on a affaire a un article
2102                                        // 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 ) {
2103                                        $nt = new serial_display($r->notice_id, 6, $this->link_serial, $this->link_analysis, $this->link_bulletin, "", $this->link_explnum_analysis, 0, 0, 1, 1, true, 1  ,$recherche_ajax_mode);
2104                                        break;
2105                                case 'b' :
2106                                        // on a affaire a un bulletin
2107                                        $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=$r->notice_id and s.notice_id=bulletin_notice and num_notice=b.notice_id";
2108                                        $bull_ids=@pmb_mysql_fetch_object(pmb_mysql_query($rqt_bull_info));
2109                                        if(!$link_bulletin){
2110                                                $link_bulletin = './catalog.php?categ=serials&sub=bulletinage&action=view&bul_id='.$bull_ids->id_du_bulletin;
2111                                        } else {
2112                                                $link_bulletin = str_replace("!!id!!",$bull_ids->id_du_bulletin,$link_bulletin);
2113                                        }
2114                                        if ($this->link_explnum_bulletin) {
2115                                                $link_explnum_bulletin = str_replace("!!bul_id!!",$bull_ids->id_du_bulletin,$this->link_explnum_bulletin);
2116                                        } else {
2117                                                $link_explnum_bulletin = "";
2118                                        }
2119                                        $nt = new mono_display($r->notice_id, 6, $link_bulletin, 1, $this->link_expl, '', $link_explnum_bulletin,1, 0, 1, 1, "", 1  , false,true,$recherche_ajax_mode);
2120                                        $link_bulletin ='';
2121                                        break;
2122                        }
2123                echo "<div class='row'>".$nt->result."</div>";
2124        }
2125
2126        //Gestion de la pagination
2127        if ($nb_results) {
2128                        $n_max_page=ceil($nb_results/$nb_per_page_search);
2129                        $etendue=10;
2130                       
2131                        if (!$page) $page_en_cours=0 ;
2132                                else $page_en_cours=$page ;
2133                               
2134                //Première
2135                        if(($page_en_cours+1)-$etendue > 1) {
2136                                $nav_bar .= "<a href='#' onClick=\"document.search_form.page.value=0;";
2137                                if (!$hidden_form) $nav_bar .= "document.search_form.launch_search.value=1; ";
2138                                $nav_bar .= "document.search_form.submit(); return false;\"><img src='./images/first.gif' border='0' alt='".$msg['first_page']."' hspace='6' align='middle' title='".$msg['first_page']."' /></a>";
2139                        }
2140               
2141                        // affichage du lien precedent si necessaire
2142                        if ($page>0) {
2143                                $nav_bar .= "<a href='#' onClick='document.search_form.page.value-=1; ";
2144                                if (!$hidden_form) $nav_bar .= "document.search_form.launch_search.value=1; ";
2145                                $nav_bar .= "document.search_form.submit(); return false;'>";
2146                                $nav_bar .= "<img src='./images/left.gif' border='0'  title='".$msg[48]."' alt='[".$msg[48]."]' hspace='3' align='middle'/>";
2147                        $nav_bar .= "</a>";
2148                }
2149               
2150                        $deb = $page_en_cours - 10 ;
2151                        if ($deb<0) $deb=0;
2152                        for($i = $deb; ($i < $n_max_page) && ($i<$page_en_cours+10); $i++) {
2153                                if($i==$page_en_cours) $nav_bar .= "<strong>".($i+1)."</strong>";
2154                                        else {
2155                                                $nav_bar .= "<a href='#' onClick=\"if ((isNaN(document.search_form.page.value))||(document.search_form.page.value=='')) document.search_form.page.value=1; else document.search_form.page.value=".($i)."; ";
2156                                        if (!$hidden_form) $nav_bar .= "document.search_form.launch_search.value=1; ";
2157                                        $nav_bar .= "document.search_form.submit(); return false;\">";
2158                                        $nav_bar .= ($i+1);
2159                                        $nav_bar .= "</a>";
2160                                                }
2161                                if($i<$n_max_page) $nav_bar .= " "; 
2162                                }
2163               
2164                        if(($page+1)<$n_max_page) {
2165                        $nav_bar .= "<a href='#' onClick=\"if ((isNaN(document.search_form.page.value))||(document.search_form.page.value=='')) document.search_form.page.value=1; else document.search_form.page.value=parseInt(document.search_form.page.value)+parseInt(1); ";
2166                        if (!$hidden_form) $nav_bar .= "document.search_form.launch_search.value=1; ";
2167                        $nav_bar .= "document.search_form.submit(); return false;\">";
2168                        $nav_bar .= "<img src='./images/right.gif' border='0' title='".$msg[49]."' alt='[".$msg[49]."]' hspace='3' align='middle'>";
2169                        $nav_bar .= "</a>";
2170                        } else  $nav_bar .= "";
2171               
2172                //Dernière
2173                if((($page_en_cours+1)+$etendue)<$n_max_page){
2174                        $nav_bar .= "<a href='#' onClick=\"document.search_form.page.value=".($n_max_page-1).";";
2175                        if (!$hidden_form) $nav_bar .= "document.search_form.launch_search.value=1; ";
2176                        $nav_bar .= "document.search_form.submit(); return false;\"><img src='./images/last.gif' border='0' alt='".$msg['last_page']."' hspace='6' align='middle' title='".$msg['last_page']."' /></a>";
2177                }
2178               
2179                        $nav_bar = "<div align='center'>$nav_bar</div>";
2180                        echo $nav_bar ;
2181                       
2182        }       
2183    }
2184   
2185    function show_results_unimarc($url,$url_to_search_form,$hidden_form=true,$search_target="") {
2186        global $dbh;
2187        global $begin_result_liste;
2188        global $nb_per_page_search;
2189        global $page;
2190        global $charset;
2191        global $search;
2192        global $msg;
2193        global $pmb_nb_max_tri;
2194        global $affich_tris_result_liste;
2195        global $pmb_allow_external_search;
2196        global $opac_view_id; 
2197        $start_page=$nb_per_page_search*$page;
2198       
2199        //Y-a-t-il des champs ?
2200        if (count($search)==0) {
2201                error_message_history($msg["search_empty_field"], $msg["search_no_fields"], 1);
2202                exit();
2203        }
2204        //Verification des champs vides
2205        for ($i=0; $i<count($search); $i++) {
2206                $op="op_".$i."_".$search[$i];
2207                global $$op;
2208                $field_="field_".$i."_".$search[$i];
2209                global $$field_;
2210                $field=$$field_;
2211                $s=explode("_",$search[$i]);
2212                $bool=false;
2213                if ($s[0]=="f") {
2214                        $champ=$this->fixedfields[$s[1]]["TITLE"];
2215                        if ((string)$field[0]=="") {
2216                                $bool=true;
2217                        }
2218                } elseif(array_key_exists($s[0],$this->pp)) {
2219                        $champ=$this->pp[$s[0]]->t_fields[$s[1]]["TITRE"];
2220                        if ((string)$field[0]=="") {
2221                                $bool=true;
2222                        }
2223                } elseif($s[0]=="s") {
2224                        $champ=$this->specialfields[$s[1]]["TITLE"];
2225                        $type=$this->specialfields[$s[1]]["TYPE"];
2226                                for ($is=0; $is<count($this->tableau_speciaux["TYPE"]); $is++) {
2227                                        if ($this->tableau_speciaux["TYPE"][$is]["NAME"]==$type) {
2228                                                $sf=$this->specialfields[$s[1]];
2229                                                global $include_path;
2230                                                require_once($include_path."/search_queries/specials/".$this->tableau_speciaux["TYPE"][$is]["PATH"]."/search.class.php");
2231                                                $specialclass= new $this->tableau_speciaux["TYPE"][$is]["CLASS"]($s[1],$i,$sf,$this);
2232                                                $bool=$specialclass->is_empty($field);
2233                                                break;
2234                                        }
2235                                }
2236                }
2237                if (($bool)&&(!$this->op_empty[$$op])) {
2238                        error_message_history($msg["search_empty_field"], sprintf($msg["search_empty_error_message"],$champ), 1);
2239                        exit();
2240                }
2241        }
2242        global $inter_1_f_1;
2243        $table=$this->make_search();
2244        $requete="select count(1) from $table";
2245        if($res=pmb_mysql_query($requete)){
2246                        $nb_results=pmb_mysql_result($res,0,0); 
2247                }else{
2248                error_message_history("",$msg["search_impossible"], 1);
2249                exit();
2250                }
2251       
2252        /*
2253        //gestion du tri
2254        if ($nb_results<=$pmb_nb_max_tri) {
2255                        if ($_SESSION["tri"]) {
2256                                $sort=new sort('notices','base');
2257                                $sort->table_tri_tempo=$table;
2258                                $sort->table_primary_tri_tempo="notice_id";
2259                                $sort->limit="limit ".$start_page.",".$nb_per_page_search;
2260                                $requete=$sort->appliquer_tri();
2261                                if (substr($requete,0,1)=="(") $creer_table_tempo="CREATE TEMPORARY TABLE tri_tempo ENGINE=MyISAM ".$requete."";
2262                                        else $creer_table_tempo="CREATE TEMPORARY TABLE tri_tempo ENGINE=MyISAM (".$requete.")";
2263                                @pmb_mysql_query($creer_table_tempo);
2264                                $modif_primaire="ALTER TABLE tri_tempo PRIMARY KEY notice_id";
2265                                @pmb_mysql_query($modif_primaire);
2266                                $table="tri_tempo";
2267                        }
2268        }
2269                // fin gestion tri
2270                */
2271               
2272        //Y-a-t-il une erreur lors de la recherche ?
2273        if ($this->error_message) {
2274                error_message_history("", $this->error_message, 1);
2275                exit();
2276        }
2277       
2278        if ($hidden_form)
2279                print $this->make_hidden_search_form($url);
2280       
2281        //$requete="select $table.* from $table left join entrepots on recid=notice_id and (ufield='200' and usubfield='a') or (recid is null) order by i_value";
2282        //$requete .= " limit ".$start_page.",".$nb_per_page_search;
2283        //$resultat=pmb_mysql_query($requete,$dbh);
2284               
2285                $requete = "select * from $table";
2286                $requete .= " limit ".$start_page.",".$nb_per_page_search;
2287               
2288                $resultat=pmb_mysql_query($requete,$dbh);
2289               
2290        $human_requete = $this->make_human_query();
2291        print "<strong>".$msg["search_search_extended"]."</strong> : ".$human_requete ;
2292               
2293                if ($nb_results) {
2294                        print " => ".$nb_results." ".$msg["1916"]."<br />\n";
2295                        print $begin_result_liste;
2296                        if ($this->rec_history) {
2297                                //Affichage des liens paniers et impression
2298                                $current=$_SESSION["CURRENT"];
2299                                if ($current!==false) {
2300                                        $tri_id_info = $_SESSION["tri"] ? "&sort_id=".$_SESSION["tri"] : "";
2301                                        print "&nbsp;<a href='#' onClick=\"openPopUp('./print_cart.php?current_print=$current&action=print_prepare$tri_id_info','print',600,700,-2,-2,'scrollbars=yes,menubar=0,resizable=yes'); 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$tri_id_info','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>";
2302                                }
2303                        }
2304                } else print "<br />".$msg["1915"]." ";
2305                print "<input type='button' class='bouton' onClick=\"document.search_form.action='$url_to_search_form'; document.search_form.target='$search_target'; document.search_form.submit(); return false;\" value=\"".$msg["search_back"]."\"/>";
2306               
2307                print "<input type='button' class='bouton' onClick=\"integer_notices_submit();\" value=\"".$msg["external_search_integer_results"]."\"/>";
2308               
2309                global $dsi_active;
2310                if (($dsi_active)&&false) {
2311                        global $id_equation, $priv_pro, $id_empr;
2312                        if ($id_equation) $mess_bouton = $msg['dsi_sauvegarder_equation'] ;
2313                                else $mess_bouton = $msg["dsi_transformer_equation"] ;
2314                        print "&nbsp;<input  type='button' class='bouton' onClick=\"document.forms['transform_dsi'].submit(); \" value=\"".$mess_bouton."\"/>
2315                                                <form name='transform_dsi' style='display:none;' method='post' action='./dsi.php'>";
2316                        if ($priv_pro=="PRI") print "
2317                                                <input type=hidden name='categ' value='bannettes' />
2318                                                <input type=hidden name='sub' value='abo' />
2319                                                <input type=hidden name='suite' value='transform_equ' />
2320                                                <input type=hidden name='id_equation' value='$id_equation' />
2321                                                <input type=hidden name='id_empr' value='$id_empr' />
2322                                                <input type=hidden name='requete' value='".htmlentities($this->serialize_search(),ENT_QUOTES,$charset)."' />
2323                                                </form>";
2324                                else print "
2325                                                <input type=hidden name='categ' value='equations' />
2326                                                <input type=hidden name='sub' value='gestion' />
2327                                                <input type=hidden name='suite' value='transform' />
2328                                                <input type=hidden name='id_equation' value='$id_equation' />
2329                                                <input type=hidden name='requete' value='".htmlentities($this->serialize_search(),ENT_QUOTES,$charset)."' />
2330                                                </form>";
2331                        }
2332                global $pmb_opac_view_activate;
2333        if ($pmb_opac_view_activate) {
2334                if($opac_view_id){
2335                        $mess_bouton = $msg['opac_view_sauvegarder_equation'];                 
2336                                print "
2337                                        &nbsp;<input  type='button' class='bouton' onClick=\"document.forms['transform_opac_view'].submit(); \" value=\"".$mess_bouton."\"/>
2338                                        <form name='transform_opac_view' style='display:none;' method='post' action='./dsi.php'>
2339                                                        <input type=hidden name='categ' value='opac' />
2340                                                        <input type=hidden name='sub' value='opac_view' />
2341                                                        <input type=hidden name='section' value='list' />
2342                                                        <input type=hidden name='action' value='form' />
2343                                                        <input type=hidden name='suite' value='transform_equ' />
2344                                                        <input type=hidden name='opac_view_id' value='$opac_view_id' />
2345                                                        <input type=hidden name='requete' value='".htmlentities($this->serialize_search(),ENT_QUOTES,$charset)."' />
2346                                        </form>";               
2347                }
2348        }                               
2349                       
2350                flush();
2351                $entrepots_localisations = array();
2352                $entrepots_localisations_sql = "SELECT * FROM entrepots_localisations ORDER BY loc_visible DESC";
2353                $res = pmb_mysql_query($entrepots_localisations_sql);
2354                while ($row = pmb_mysql_fetch_array($res)) {
2355                        $entrepots_localisations[$row["loc_code"]] = array("libelle" => $row["loc_libelle"], "visible" => $row["loc_visible"]); 
2356                }
2357               
2358                print "
2359                <div class='row'>
2360                <input type='button' id='select_all' class='bouton' onClick='external_notices_select_all()' value='".$msg['tout_cocher_checkbox']."'/>
2361                <script type='text/javascript'>
2362                        function external_notices_select_all(){
2363                                switch(document.getElementById('select_all').todo){
2364                                case 'unselect':
2365                                        if (document.forms.integer_notices['external_notice_to_integer[]'].length) {
2366                                                for (var i=0; i < document.forms.integer_notices['external_notice_to_integer[]'].length; i++){
2367                                                                if(!document.forms.integer_notices['external_notice_to_integer[]'][i].disabled){
2368                                                                document.forms.integer_notices['external_notice_to_integer[]'][i].checked=false;
2369                                                        }
2370                                                }
2371                                        } else {
2372                                                        if(!document.forms.integer_notices['external_notice_to_integer[]'].disabled){
2373                                                        document.forms.integer_notices['external_notice_to_integer[]'].checked=false;
2374                                                }                                       
2375                                        }
2376                                        document.getElementById('select_all').value='".$msg['tout_cocher_checkbox']."';
2377                                        document.getElementById('select_all').todo = 'select';
2378                                        break;                         
2379                                case 'select' :
2380                                default :
2381                                        if (document.forms.integer_notices['external_notice_to_integer[]'].length) {
2382                                                for (var i=0; i < document.forms.integer_notices['external_notice_to_integer[]'].length; i++){
2383                                                                if(!document.forms.integer_notices['external_notice_to_integer[]'][i].disabled){
2384                                                                document.forms.integer_notices['external_notice_to_integer[]'][i].checked=true;
2385                                                        }
2386                                                }
2387                                        } else {
2388                                                        if(!document.forms.integer_notices['external_notice_to_integer[]'].disabled){
2389                                                        document.forms.integer_notices['external_notice_to_integer[]'].checked=true;
2390                                                }                                       
2391                                        }
2392                                        document.getElementById('select_all').value='".$msg['tout_decocher_checkbox']."';
2393                                        document.getElementById('select_all').todo = 'unselect';
2394                                        break;
2395
2396                        }
2397                                                       
2398                }
2399                function integer_notices_submit(){
2400                                var ok = false;
2401                                if (document.forms.integer_notices['external_notice_to_integer[]'].length) {
2402                                for (var i = 0; i < document.forms.integer_notices['external_notice_to_integer[]'].length; i++){
2403                                                if(document.forms.integer_notices['external_notice_to_integer[]'][i].checked && !document.forms.integer_notices['external_notice_to_integer[]'][i].disabled){
2404                                                        ok = true;
2405                                                        break;
2406                                        }
2407                                }
2408                                } else {
2409                                        if(!document.forms.integer_notices['external_notice_to_integer[]'].disabled){
2410                                        document.forms.integer_notices['external_notice_to_integer[]'].checked=true;
2411                                                ok = true;
2412                                }
2413                                }
2414                        if(!ok){
2415                                alert('".$msg['integer_notices_error']."');
2416                        }else{
2417                                document.forms.integer_notices.submit();
2418                        }
2419                }
2420                </script>
2421                </div>
2422                <form name='integer_notices' action='./catalog.php?categ=search&mode=7&sub=integre_notices' method='post'>
2423                        <input type=hidden name='serialized_search' value='".htmlentities($this->serialize_search(),ENT_QUOTES,$charset)."' />
2424                        <input type='hidden' name='page' value='".htmlentities($page,ENT_QUOTES,$charset)."'/>  ";
2425        while ($r=pmb_mysql_fetch_object($resultat)) {
2426                /*if($r->niveau_biblio != 's' && $r->niveau_biblio != 'a') {
2427                                // notice de monographie
2428                                $nt = new mono_display($r->notice_id, 6, $this->link, 1, $this->link_expl, '', $this->link_explnum,1, 0, 1, 1, "", 1);
2429                        } else {
2430                                // on a affaire a un periodique
2431                                $nt = new serial_display($r->notice_id, 6, $this->link_serial, $this->link_analysis, $this->link_bulletin, "", $this->link_explnum_serial, 0, 0, 1, 1 );
2432                        }*/
2433                        $nt = new mono_display_unimarc($r->notice_id,6, 1, 0, 1, false, $entrepots_localisations);
2434                echo "<div class='row'>".$nt->result."</div>";
2435        }
2436        print "</form>";
2437        //Gestion de la pagination
2438        if ($nb_results) {
2439                        $n_max_page=ceil($nb_results/$nb_per_page_search);
2440                       
2441                        if (!$page) $page_en_cours=0 ;
2442                                else $page_en_cours=$page ;
2443               
2444                        // affichage du lien precedent si necessaire
2445                        if ($page>0) {
2446                                $nav_bar .= "<a href='#' onClick='document.search_form.page.value-=1; ";
2447                                if (!$hidden_form) $nav_bar .= "document.search_form.launch_search.value=1; ";
2448                                $nav_bar .= "document.search_form.submit(); return false;'>";
2449                                $nav_bar .= "<img src='./images/left.gif' border='0'  title='".$msg[48]."' alt='[".$msg[48]."]' hspace='3' align='middle'/>";
2450                        $nav_bar .= "</a>";
2451                }
2452               
2453                        $deb = $page_en_cours - 10 ;
2454                        if ($deb<0) $deb=0;
2455                        for($i = $deb; ($i < $n_max_page) && ($i<$page_en_cours+10); $i++) {
2456                                if($i==$page_en_cours) $nav_bar .= "<strong>".($i+1)."</strong>";
2457                                        else {
2458                                                $nav_bar .= "<a href='#' onClick=\"if ((isNaN(document.search_form.page.value))||(document.search_form.page.value=='')) document.search_form.page.value=1; else document.search_form.page.value=".($i)."; ";
2459                                        if (!$hidden_form) $nav_bar .= "document.search_form.launch_search.value=1; ";
2460                                        $nav_bar .= "document.search_form.submit(); return false;\">";
2461                                        $nav_bar .= ($i+1);
2462                                        $nav_bar .= "</a>";
2463                                                }
2464                                if($i<$n_max_page) $nav_bar .= " "; 
2465                                }
2466               
2467                        if(($page+1)<$n_max_page) {
2468                        $nav_bar .= "<a href='#' onClick=\"if ((isNaN(document.search_form.page.value))||(document.search_form.page.value=='')) document.search_form.page.value=1; else document.search_form.page.value=parseInt(document.search_form.page.value)+parseInt(1); ";
2469                        if (!$hidden_form) $nav_bar .= "document.search_form.launch_search.value=1; ";
2470                        $nav_bar .= "document.search_form.submit(); return false;\">";
2471                        $nav_bar .= "<img src='./images/right.gif' border='0' title='".$msg[49]."' alt='[".$msg[49]."]' hspace='3' align='middle'>";
2472                        $nav_bar .= "</a>";
2473                        } else  $nav_bar .= "";
2474                        $nav_bar = "<div align='center'>$nav_bar</div>";
2475                        echo $nav_bar ;
2476                       
2477        }       
2478    }
2479   
2480    function filter_searchtable_from_accessrights($table, $PMBUserId) {
2481        global $dbh;
2482        global $gestion_acces_active,$gestion_acces_user_notice;
2483         
2484        if($gestion_acces_active && $gestion_acces_user_notice){
2485                //droits d'acces lecture notice
2486                        $ac= new acces();
2487                        $dom_1= $ac->setDomain(1);
2488                        $usr_prf = $dom_1->getUserProfile($PMBUserId);
2489                       
2490                        $requete = "delete from $table using $table, acces_res_1 ";
2491                        $requete.= "where ";
2492                        $requete.= "$table.notice_id = res_num and usr_prf_num=".$usr_prf." ";
2493                        $requete.= "and (((res_rights ^ res_mask) & 4)=0) ";
2494                        pmb_mysql_query($requete, $dbh);
2495        }
2496    }
2497   
2498 // fonction de calcul de la visibilite d'un champ de recherche
2499    function visibility($ff) {
2500       
2501        if (!count($ff["VARVIS"])) return $ff["VISIBILITY"];
2502         
2503        for ($i=0; $i<count($ff["VARVIS"]); $i++) {
2504                $name=$ff["VARVIS"][$i]["NAME"] ;
2505                global $$name;
2506                $visibilite=$ff["VARVIS"][$i]["VISIBILITY"] ;
2507                if (isset($ff["VARVIS"][$i]["VALUE"][$$name])) {
2508                        if ($visibilite) 
2509                                $test = $ff["VARVIS"][$i]["VALUE"][$$name] ;
2510                        else 
2511                                $test = $visibilite || $ff["VARVIS"][$i]["VALUE"][$$name] ;
2512                        return $test ;
2513                }
2514        } // fin for
2515        // aucune condition verifiee : on retourne la valeur par defaut
2516        return $ff["VISIBILITY"] ;
2517    }
2518   
2519    //Templates des listes d'operateurs
2520    function show_form($url,$result_url,$result_target='',$memo_url='') {
2521        global $charset;
2522        global $search;
2523        global $add_field;
2524        global $delete_field;
2525        global $launch_search;
2526        global $page;
2527        global $search_form;
2528        global $msg;
2529        global $include_path;           
2530        global $option_show_expl,$option_show_notice_fille;
2531        global $pmb_extended_search_auto;
2532               
2533        if($option_show_expl)$option_show_expl_check="checked='checked'";
2534        if($option_show_notice_fille)$option_show_notice_fille_check="checked='checked'";
2535        $option="
2536                <div class='row'>
2537                        <h3>".$msg['search_option_show_title']."</h3>
2538                        <input $option_show_expl_check value='1' name='option_show_expl' id='option_show_expl'  type='checkbox'>".$msg["search_option_show_expl"]."
2539                        <input $option_show_notice_fille_check value='1' name='option_show_notice_fille' id='option_show_notice_fille'  type='checkbox'>".$msg["search_option_show_notice_fille"]."
2540                </div><div class='row'>&nbsp;</div>";           
2541        $search_form=str_replace("<!--!!limitation_affichage!!-->",$option,$search_form);
2542       
2543        if (($add_field)&&(($delete_field==="")&&(!$launch_search)))
2544                $search[]=$add_field;
2545       
2546        $search_form=str_replace("!!url!!",$url,$search_form);
2547        if(!$memo_url) $memo_url="catalog.php?categ=search_perso&sub=form";
2548        $search_form=str_replace("!!memo_url!!",$memo_url,$search_form);
2549       
2550        //Génération de la liste des champs possibles
2551        if($this->limited_search){ 
2552                $search_form = str_replace("!!limit_search!!","<input type='hidden' id='limited_search' name='limited_search' />",$search_form);               
2553                $limit_search = " this.form.limited_search.value='1'; ";
2554        } else {
2555                $search_form = str_replace("!!limit_search!!","",$search_form);
2556                $limit_search = "";
2557        }
2558        if ($pmb_extended_search_auto) $r="<select name='add_field' id='add_field' onChange=\"if (this.form.add_field.value!='') { enable_operators();this.form.action='$url'; this.form.target=''; $limit_search this.form.submit();} else { alert('".htmlentities($msg["multi_select_champ"],ENT_QUOTES,$charset)."'); }\" >\n";
2559        else $r="<select name='add_field' id='add_field'>\n";
2560        $r.="<option value='' style='color:#000000'>".htmlentities($msg["multi_select_champ"],ENT_QUOTES,$charset)."</font></option>\n";
2561
2562        //Champs fixes
2563        if($this->fixedfields){
2564                reset($this->fixedfields);
2565                $open_optgroup=0;
2566                        $open_optgroup_deja_affiche=0;
2567                        $open_optgroup_en_attente_affiche=0;
2568                while (list($id,$ff)=each($this->fixedfields)) {
2569                        if ($ff["SEPARATOR"]) {
2570                                if ($open_optgroup) $r.="</optgroup>\n";
2571                                // $r.="<option disabled style='border-left:0px;border-right:0px;border-top:0px;border-bottom:1px;border-style:solid;'></option>\n";
2572                                $r_opt_groupe="<optgroup label='".htmlentities($ff["SEPARATOR"],ENT_QUOTES,$charset)."' class='erreur'>\n";
2573                                $open_optgroup=0;
2574                                $open_optgroup_deja_affiche=0;
2575                                $open_optgroup_en_attente_affiche=1;
2576                        }
2577                        //if ($ff["VISIBLE"]) {
2578                        if ($this->visibility($ff)) {
2579                                if ($open_optgroup_en_attente_affiche && !$open_optgroup_deja_affiche) {
2580                                        $r.=$r_opt_groupe ;
2581                                        $open_optgroup_deja_affiche = 1 ;
2582                                        $open_optgroup_en_attente_affiche = 0 ;
2583                                        $open_optgroup = 1 ; 
2584                                }
2585                                $r.="<option value='f_".$id."' style='color:#000000'>".htmlentities($ff["TITLE"],ENT_QUOTES,$charset)."</font></option>\n";
2586                        }
2587                }
2588        }
2589
2590        //Champs fixes
2591        /*reset($this->fixedfields);
2592        $open_optgroup=0;
2593        while (list($id,$ff)=each($this->fixedfields)) {
2594                if ($ff["SEPARATOR"]) {
2595                        if ($open_optgroup) $r.="</optgroup>\n";
2596                        // $r.="<option disabled style='border-left:0px;border-right:0px;border-top:0px;border-bottom:1px;border-style:solid;'></option>\n";
2597                        $r.="<optgroup label='".htmlentities($ff["SEPARATOR"],ENT_QUOTES,$charset)."' class='erreur'>\n";
2598                        $open_optgroup=1;
2599                }
2600                $r.="<option value='f_".$id."' style='color:#000000'>".htmlentities($ff["TITLE"],ENT_QUOTES,$charset)."</font></option>\n";
2601        }*/
2602       
2603        //Champs dynamiques
2604        if ($open_optgroup) $r.="</optgroup>\n";
2605        // $r.="<option disabled style='border-left:0px;border-right:0px;border-top:0px;border-bottom:1px;border-style:solid;'></option>\n";
2606        if(!$this->dynamics_not_visible){
2607                foreach ( $this->dynamicfields as $key => $value ) {
2608                        if(!$this->pp[key]->no_special_fields){
2609                                $r.="<optgroup label='".$msg["search_custom_".$value["TYPE"]]."' class='erreur'>\n";
2610                                        reset($this->pp[$key]->t_fields);
2611                                        while (list($id,$df)=each($this->pp[$key]->t_fields)) {
2612                                        $r.="<option value='".$key."_".$id."' style='color:#000000'>".htmlentities($df["TITRE"],ENT_QUOTES,$charset)."</option>\n";
2613                                }
2614                                $r.="</optgroup>\n";
2615                        }
2616                        }
2617        }       
2618 
2619        //Champs autorités perso
2620        if ($open_optgroup) $r.="</optgroup>\n";
2621        $r_authperso="";
2622        foreach($this->authpersos as $authperso){
2623                if(!$authperso['gestion_multi_search'])continue;
2624                $r_authperso.="<optgroup label='".$msg["authperso_multi_search_by_field_title"]." : ".$authperso['name']."' class='erreur'>\n";
2625                $r_authperso.="<option value='authperso_".$authperso['id']."' style='color:#000000'>".$msg["authperso_multi_search_tous_champs_title"]."</option>\n";
2626                foreach($authperso['fields'] as $field){
2627                        $r_authperso.="<option value='a_".$field['id']."' style='color:#000000'>".htmlentities($field['label'],ENT_QUOTES,$charset)."</option>\n";
2628                }
2629                $r_authperso.="</optgroup>\n";
2630        }       
2631        $r.=$r_authperso;
2632       
2633        //Champs speciaux
2634        if (!$this->specials_not_visible && $this->specialfields) {
2635                        while (list($id,$sf)=each($this->specialfields)) {
2636                                if($sf['VISIBLE']){
2637                                        if ($sf["SEPARATOR"]) {
2638                                                if ($open_optgroup) $r.="</optgroup>\n";
2639                                                // $r.="<option disabled style='border-left:0px;border-right:0px;border-top:0px;border-bottom:1px;border-style:solid;'></option>\n";
2640                                        $r.="<optgroup label='".htmlentities($sf["SEPARATOR"],ENT_QUOTES,$charset)."' class='erreur'>\n";
2641                                        $open_optgroup=1;
2642                                }
2643                                $r.="<option value='s_".$id."' style='color:#000000'>".htmlentities($sf["TITLE"],ENT_QUOTES,$charset)."</font></option>\n";
2644                        }
2645                        }
2646        }
2647        $r.="</select>";
2648               
2649        $search_form=str_replace("!!field_list!!",$r,$search_form);
2650       
2651        //Affichage des champs deja saisis
2652        $r="";
2653        $n=0;
2654        $r.="<table class='table-no-border'>\n";
2655        for ($i=0; $i<count($search); $i++) {
2656                if ((string)$i!=$delete_field) {
2657                        $f=explode("_",$search[$i]);
2658                        //On regarde si l'on doit masquer des colonnes
2659                        $notdisplaycol=array();
2660                        if ($f[0]=="f") {
2661                                if($this->fixedfields[$f[1]]["NOTDISPLAYCOL"]){
2662                                        $notdisplaycol=explode(",",$this->fixedfields[$f[1]]["NOTDISPLAYCOL"]);
2663                                }
2664                        } elseif ($f[0]=="s") {
2665                                if($this->specialfields[$f[1]]["NOTDISPLAYCOL"]){
2666                                        $notdisplaycol=explode(",",$this->specialfields[$f[1]]["NOTDISPLAYCOL"]);
2667                                }
2668                        } elseif (array_key_exists($f[0],$this->pp)) {
2669                                if($this->pp[$f[0]]->t_fields[$f[1]]["NOTDISPLAYCOL"]){
2670                                        $notdisplaycol=explode(",",$this->pp[$f[0]]->t_fields[$f[1]]["NOTDISPLAYCOL"]);
2671                                }
2672                        }
2673                       
2674                        $r.="<tr>";
2675                        $r.="<td".(in_array("1",$notdisplaycol)?"style='display:none;'":"").">";//Colonne 1
2676                        $r.="<input type='hidden' name='search[]' value='".$search[$i]."'>";
2677                        $r.="</td>";
2678                        $r.="<td class='search_first_column' ".(in_array("2",$notdisplaycol)?"style='display:none;'":"").">";//Colonne 2
2679                        if ($n>0) {
2680                                $inter="inter_".$i."_".$search[$i];
2681                                global $$inter;
2682                                $r.="<select name='inter_".$n."_".$search[$i]."'>";
2683                                $r.="<option value='and' ";
2684                                if ($$inter=="and")
2685                                        $r.=" selected";
2686                                $r.=">".$msg["search_and"]."</option>";
2687                                $r.="<option value='or' ";
2688                                if ($$inter=="or")
2689                                        $r.=" selected";
2690                                $r.=">".$msg["search_or"]."</option>";
2691                                $r.="<option value='ex' ";
2692                                if ($$inter=="ex")
2693                                        $r.=" selected";
2694                                $r.=">".$msg["search_exept"]."</option>";
2695                                $r.="</select>";
2696                        } else $r.="&nbsp;";
2697                        $r.="</td>";
2698                       
2699                        $r.="<td ".(in_array("3",$notdisplaycol)?"style='display:none;'":"")."><span class='search_critere'>";//Colonne 3
2700                        if ($f[0]=="f") {
2701                                $r.=htmlentities($this->fixedfields[$f[1]]["TITLE"],ENT_QUOTES,$charset);
2702                        } elseif ($f[0]=="s") {
2703                                $r.=htmlentities($this->specialfields[$f[1]]["TITLE"],ENT_QUOTES,$charset);
2704                        } elseif (array_key_exists($f[0],$this->pp)) {
2705                                $r.=htmlentities($this->pp[$f[0]]->t_fields[$f[1]]["TITRE"],ENT_QUOTES,$charset);
2706                        }elseif ($f[0]=="authperso") {
2707                                $r.=htmlentities($this->authpersos[$f[1]]['name'],ENT_QUOTES,$charset);                                 
2708                        }
2709                        $r.="</td>";
2710                        //Recherche des operateurs possibles
2711                        $r.="<td ".(in_array("4",$notdisplaycol)?"style='display:none;'":"").">";//Colonne 4
2712                        $op="op_".$i."_".$search[$i];
2713                        global $$op;
2714                        if ($f[0]=="f") {       
2715                                $r.="<select name='op_".$n."_".$search[$i]."' id='op_".$n."_".$search[$i]."'";
2716                                        //gestion des autorités
2717                                        $onchange ="";
2718
2719                                        if (isset($this->fixedfields[$f[1]]["QUERIES_INDEX"]["AUTHORITY"])){
2720                                                $selector=$this->fixedfields[$f[1]]["INPUT_OPTIONS"]["SELECTOR"];
2721                                                $p1=$this->fixedfields[$f[1]]["INPUT_OPTIONS"]["P1"];
2722                                                $p2=$this->fixedfields[$f[1]]["INPUT_OPTIONS"]["P2"];
2723                                                $onchange ="onchange='operatorChanged(\"".$n."_".$search[$i]."\",this.value);'";
2724                                        }
2725                                $r.="$onchange>\n";
2726                                for ($j=0; $j<count($this->fixedfields[$f[1]]["QUERIES"]); $j++) {
2727                                        $q=$this->fixedfields[$f[1]]["QUERIES"][$j];
2728                                        $r.="<option value='".$q["OPERATOR"]."' ";
2729                                        if ($$op==$q["OPERATOR"]) $r.=" selected";
2730                                        $r.=">".htmlentities($this->operators[$q["OPERATOR"]],ENT_QUOTES,$charset)."</option>\n";
2731                                }
2732                                $r.="</select>";
2733                        } elseif (array_key_exists($f[0],$this->pp)) {
2734                                $datatype=$this->pp[$f[0]]->t_fields[$f[1]]["DATATYPE"];
2735                                $type=$this->pp[$f[0]]->t_fields[$f[1]]["TYPE"];
2736                                $df=$this->get_id_from_datatype($datatype, $f[0]);
2737                                $r.="<select name='op_".$n."_".$search[$i]."'>\n";
2738                                for ($j=0; $j<count($this->dynamicfields[$f[0]]["FIELD"][$df]["QUERIES"]); $j++) {
2739                                        $q=$this->dynamicfields[$f[0]]["FIELD"][$df]["QUERIES"][$j];
2740                                        $as=array_search($type,$q["NOT_ALLOWED_FOR"]);
2741                                        if (!(($as!==null)&&($as!==false))) {
2742                                                $r.="<option value='".$q["OPERATOR"]."' ";
2743                                                if ($$op==$q["OPERATOR"]) $r.="selected";
2744                                                $r.=">".htmlentities($this->operators[$q["OPERATOR"]],ENT_QUOTES,$charset)."</option>\n";
2745                                        }
2746                                }
2747                                $r.="</select>";
2748                                $r.="&nbsp;";
2749                        } elseif ($f[0]=="s") {
2750                                        //appel de la fonction get_input_box de la classe du champ special
2751                                        $type=$this->specialfields[$f[1]]["TYPE"];
2752                                        for ($is=0; $is<count($this->tableau_speciaux["TYPE"]); $is++) {
2753                                                if ($this->tableau_speciaux["TYPE"][$is]["NAME"]==$type) {
2754                                                        $sf=$this->specialfields[$f[1]];
2755                                                        require_once($include_path."/search_queries/specials/".$this->tableau_speciaux["TYPE"][$is]["PATH"]."/search.class.php");
2756                                                        $specialclass= new $this->tableau_speciaux["TYPE"][$is]["CLASS"]($f[1],$sf,$n,$this);
2757                                                        $q=$specialclass->get_op();
2758                                                        if (count($q)) {
2759                                                                $r.="<span class='search_sous_critere'><select name='op_".$n."_".$search[$i]."'>\n";
2760                                                                foreach ($q as $key => $value) {
2761                                                                        $r.="<option value='".$key."' ";
2762                                                                if ($$op==$key) $r.="selected";
2763                                                                $r.=">".htmlentities($value,ENT_QUOTES,$charset)."</option>\n";
2764                                                                }
2765                                                                $r .= "</select></span>";
2766                                                        } else print "&nbsp;";
2767                                                        break;
2768                                                }
2769                                }
2770                        }elseif ($f[0]=="authperso") {
2771                                        $r.="<span class='search_sous_critere'>
2772                                        <select name='op_".$n."_".$search[$i]."' >
2773                                                <option  value='BOOLEAN' selected>".htmlentities($this->operators["BOOLEAN"],ENT_QUOTES,$charset)."</option>\n                                 
2774                                        </span>";
2775                        }
2776                        $r.="</td>";
2777                       
2778                        //Affichage du champ de saisie
2779                        $r.="<td ".(count($notdisplaycol)?"colspan='".(count($notdisplaycol)+1)."'":"")." ".(in_array("5",$notdisplaycol)?"style='display:none;'":"").">";//Colonne 5
2780                        $r.=$this->get_field($i,$n,$search[$i],$this->pp);
2781                        $r.="</td>";
2782                        $delnotallowed=false;
2783                        if ($f[0]=="f") {
2784                                $delnotallowed=$this->fixedfields[$f[1]]["DELNOTALLOWED"];
2785                        } elseif ($f[0]=="s") {
2786                                $delnotallowed=$this->specialfields[$f[1]]["DELNOTALLOWED"];
2787                        }
2788                        if($this->limited_search) 
2789                                $script_limit = " this.form.limited_search.value='0'; ";
2790                        else $script_limit = "";
2791                        $r.="<td ".(in_array("6",$notdisplaycol)?"style='display:none;'":"")."><span class='search_cancel'>".(!$delnotallowed?"<input type='button' class='bouton' value='".$msg["raz"]."' onClick=\"enable_operators(); this.form.delete_field.value='".$n."'; this.form.action='$url'; this.form.target=''; $script_limit this.form.submit();\">":"&nbsp;")."</td>";//Colonne 6
2792                        $r.="</tr>\n";
2793                        $n++;
2794                }
2795        }
2796        $r.="</table>\n";
2797       
2798        //Recherche explicite
2799        $r.="<input type='hidden' name='explicit_search' value='1'/>\n";
2800       
2801        $search_form=str_replace("!!already_selected_fields!!",$r,$search_form);
2802        $search_form=str_replace("!!page!!",$page,$search_form);
2803        $search_form=str_replace("!!result_url!!",$result_url,$search_form);
2804
2805        global $dsi_active;
2806        if ($dsi_active) {
2807                global $id_equation;
2808                $search_form=str_replace("!!id_equation!!",$id_equation,$search_form);
2809        } else {
2810                $search_form=str_replace("!!id_equation!!","",$search_form);
2811        }
2812
2813        global $id_search_persopac;
2814        if ($id_search_persopac) {
2815                $search_form=str_replace("!!id_search_persopac!!",$id_search_persopac,$search_form);
2816        } else {
2817                $search_form=str_replace("!!id_search_persopac!!","",$search_form);
2818        }
2819
2820                global $pmb_opac_view_activate;
2821        if ($pmb_opac_view_activate) {
2822                global $opac_view_id; 
2823                $search_form=str_replace("!!opac_view_id!!",$opac_view_id,$search_form);                               
2824        }else {
2825                $search_form=str_replace("!!opac_view_id!!","",$search_form);
2826        }       
2827       
2828        global $id_connector_set;
2829        if (isset($id_connector_set))
2830                $search_form=str_replace("!!id_connector_set!!",$id_connector_set,$search_form);
2831        else 
2832                $search_form=str_replace("!!id_connector_set!!","",$search_form);
2833                       
2834        if ($result_target) $r="document.search_form.target='$result_target';"; else $r="";
2835        $search_form=str_replace("!!target_js!!",$r,$search_form);
2836
2837                $search_form .= "\n\n<script type=\"text/javascript\" >
2838                        function change_source_checkbox(changing_control, source_id) {
2839                                var i=0; var count=0;
2840                                onoff = changing_control.checked;
2841                                for(i=0; i<document.search_form.elements.length; i++)
2842                                {
2843                                        if(document.search_form.elements[i].name == 'source[]') {
2844                                                if (document.search_form.elements[i].value == source_id)
2845                                                        document.search_form.elements[i].checked = onoff;
2846                                        }
2847                                }       
2848                       
2849                        }
2850
2851                        //callback du selecteur d'opérateur
2852                        function operatorChanged(field,operator){
2853                                for(i=0;i<=document.getElementById('field_'+field+'_max_aut').value;i++){
2854                                        var selector = document.getElementById('field_'+field+'_authority_selector')
2855                                        var f_lib = document.getElementById('field_'+field+'_lib_'+i);
2856                                        var f_id = document.getElementById('field_'+field+'_id_'+i);
2857                                        var f = document.getElementById('field_'+field+'_'+i);
2858                                        var authority_id = document.getElementById('fieldvar_'+field+'_authority_id');
2859                                        if(operator == 'AUTHORITY'){
2860                //                              f_lib.setAttribute('class','saisie-20emr');
2861                //                              if(authority_id.value != 0) f.value = authority_id.value;
2862                                        }else{
2863                                                f_lib.removeAttribute('class');
2864                                                f.value = f_lib.value;
2865                                        }
2866                                }
2867                        }
2868
2869                        //callback du selecteur AJAX pour les autorités
2870                        function authoritySelected(infield){
2871                                //on enlève le dernier _X
2872                                var tmp_infield = infield.split('_');
2873                                var tmp_infield_length = tmp_infield.length;
2874                                //var inc = tmp_infield[tmp_infield_length-1];
2875                                tmp_infield.pop();
2876                                infield = tmp_infield.join('_');
2877                                //pour assurer la compatibilité avec le selecteur AJAX
2878                                infield=infield.replace('_lib','');
2879                                infield=infield.replace('_authority_label','');
2880                               
2881                                var op_name =infield.replace('field','op');
2882                                var op_selector = document.forms['search_form'][op_name];
2883                                //on passe le champ en selecteur d'autorité !
2884                                for (var i=0 ; i<op_selector.options.length ; i++){
2885                                        if(op_selector.options[i].value == 'AUTHORITY')
2886                                                op_selector.options[i].selected = true;
2887                                }
2888                                for(i=0;i<=document.getElementById(infield+'_max_aut').value;i++){
2889                                        var searchField = document.getElementById(infield+'_'+i);
2890                                        var f_lib = document.getElementById(infield+'_lib'+'_'+i);
2891                                        var f_id = document.getElementById(infield+'_id'+'_'+i);
2892                                        var authority_id = document.getElementById(infield.replace('field','fieldvar')+'_authority_id'+'_'+i);
2893                                       
2894                                        f_lib.setAttribute('class','saisie-20emr');
2895                                        if(f_id.value==''){
2896                                                f_id.value=0;
2897                                        }
2898                                        searchField.value=f_id.value;
2899                                        authority_id.value= f_id.value;
2900                                }                       
2901                        }
2902       
2903                        //callback sur la saisie libre
2904                        function fieldChanged(id,inc,value,e){
2905                                var ma_touche;
2906                                if(window.event){
2907                                        ma_touche=window.event.keyCode;
2908                                }else{
2909                                        ma_touche=e.keyCode;
2910                                }
2911                               
2912                                var f_lib = document.getElementById(id+'_lib_'+inc);
2913                                var f_id = document.getElementById(id+'_id_'+inc);
2914                                var f = document.getElementById(id+'_'+inc);           
2915                                var authority_id = document.getElementById(id.replace('field','fieldvar')+'_authority_id'+'_'+inc);
2916
2917                                var selector = document.forms['search_form'][id.replace('field','op')];         
2918                                if (selector.options[selector.selectedIndex].value != 'AUTHORITY')
2919                                        f.value = value;
2920                                else if(ma_touche != 13){
2921                                        var max_aut=document.getElementById(id+'_max_aut').value;
2922                                        if(max_aut>0){
2923                                                //Plus d'un champ : on bloque
2924                                                return;
2925                                        }
2926                                        f_lib.setAttribute('class','ext_search_txt');
2927                                        for (var i=0 ; i<selector.options.length ; i++){
2928                                                if (selector.options[i].value == 'BOOLEAN')
2929                                                        selector.options[i].selected = true;
2930                                        }
2931                                        f.value = f_lib.value;
2932                                        authority_id.value = '';
2933                                }
2934                        }               
2935                               
2936                        function add_line(fnamesans){
2937
2938                                fname=fnamesans+'[]';
2939                                fname_id=fnamesans+'_id';
2940                                fnamesanslib=fnamesans+'_lib';
2941                                fnamelib=fnamesans+'_lib[]';
2942                                fname_name_aut_id=fnamesans+'[authority_id][]';
2943                                fname_name_aut_id=fname_name_aut_id.replace('field','fieldvar');
2944                                fname_aut_id=fnamesans+'_authority_id';
2945                                fname_aut_id=fname_aut_id.replace('field','fieldvar');
2946                                op=fnamesans.replace('field','op');
2947                               
2948                                template = document.getElementById('el'+fnamesans);
2949                                inc=document.getElementById(fnamesans+'_max_aut').value;
2950                                inc++;
2951                        line=document.createElement('div');
2952                 
2953                                f_id = document.createElement('input');
2954                                f_id.setAttribute('id',fnamesans+'_'+inc);
2955                                f_id.setAttribute('name',fname);
2956                                f_id.setAttribute('value','');
2957                                f_id.setAttribute('type','hidden');
2958                                               
2959                                f_lib = document.createElement('input');
2960                                f_lib.setAttribute('autfield',fname_id+'_'+inc);
2961                                f_lib.setAttribute('onkeyup','fieldChanged(\''+fnamesans+'\',\''+inc+'\',this.value,event)');
2962                                f_lib.setAttribute('callback','authoritySelected');
2963                                if(document.getElementById(fnamesanslib+'_0').getAttribute('completion')){
2964                                        f_lib.setAttribute('completion',document.getElementById(fnamesanslib+'_0').getAttribute('completion'));
2965                                }
2966                                f_lib.setAttribute('id',fnamesanslib+'_'+inc);
2967                                f_lib.setAttribute('name',fnamelib);
2968                                f_lib.setAttribute('value','');
2969                                f_lib.setAttribute('type','text');
2970                                if(document.getElementById(fnamesanslib+'_0').getAttribute('linkfield')){
2971                                        f_lib.setAttribute('linkfield',document.getElementById(fnamesanslib+'_0').getAttribute('linkfield'));
2972                                }
2973                                if (document.getElementById(op).options[document.getElementById(op).selectedIndex].value == 'AUTHORITY'){
2974                                        f_lib.setAttribute('class','saisie-20emr');
2975                                }
2976                                               
2977                                f_del = document.createElement('input');
2978                                f_del.setAttribute('class','bouton');
2979                                f_del.setAttribute('type','button');
2980                                f_del.setAttribute('onclick','document.getElementById(\''+fnamesanslib+'_'+inc+'\').value=\'\';document.getElementById(\''+fnamesans+'_'+inc+'\').value=\'0\';');
2981                                f_del.setAttribute('value','X');
2982                               
2983                                f_aut = document.createElement('input');
2984                                f_aut.setAttribute('type','hidden');
2985                                f_aut.setAttribute('value','');
2986                                f_aut.setAttribute('id',fname_aut_id+'_'+inc);
2987                                f_aut.setAttribute('name',fname_name_aut_id);
2988                               
2989                                f_id2 = document.createElement('input');
2990                                f_id2.setAttribute('type','hidden');
2991                                f_id2.setAttribute('value','');
2992                                f_id2.setAttribute('id',fname_id+'_'+inc);
2993                                f_id2.setAttribute('name',fname_id);
2994                                       
2995                        line.appendChild(f_id);
2996                        line.appendChild(f_lib);
2997                        line.appendChild(f_del);
2998                        line.appendChild(f_aut);
2999                        line.appendChild(f_id2);
3000                       
3001                        template.appendChild(line);
3002                                               
3003                                ajax_pack_element(f_lib);
3004               
3005                        document.getElementById(fnamesans+'_max_aut').value=inc;
3006                               
3007                                //Plus d'un champ : on bloque
3008                                var selector = document.getElementById(op);
3009                                selector.disabled=true;
3010                                operators_to_enable.push(op);
3011                        }
3012                               
3013                        function enable_operators(){
3014                                if(operators_to_enable.length>0){
3015                                        for     (index = 0; index < operators_to_enable.length; index++) {
3016                                            document.getElementById(operators_to_enable[index]).disabled=false;
3017                                        }
3018                                }
3019                        }
3020                       
3021                </script>";
3022
3023        return $search_form;
3024    }
3025   
3026    //Parse du fichier de configuration
3027    function parse_search_file($fichier_xml,$full_path='') {
3028        global $include_path;
3029        global $msg;
3030       
3031        if(!$full_path){
3032                if ($fichier_xml!="") {
3033                        if (file_exists($include_path."/search_queries/".$fichier_xml."_subst.xml")) {
3034                                $fp=fopen($include_path."/search_queries/".$fichier_xml."_subst.xml","r") or die("Can't find XML file");
3035                                $size=filesize($include_path."/search_queries/".$fichier_xml."_subst.xml");
3036                        } else {
3037                                $fp=fopen($include_path."/search_queries/".$fichier_xml.".xml","r") or die("Can't find XML file");
3038                                $size=filesize($include_path."/search_queries/".$fichier_xml.".xml");
3039                        }
3040                } else {
3041                        if (file_exists($include_path."/search_queries/search_fields_subst.xml")) {
3042                                $fp=fopen($include_path."/search_queries/search_fields_subst.xml","r") or die("Can't find XML file");
3043                                $size=filesize($include_path."/search_queries/search_fields_subst.xml");
3044                        } else {
3045                                $fp=fopen($include_path."/search_queries/search_fields.xml","r") or die("Can't find XML file");
3046                                $size=filesize($include_path."/search_queries/search_fields.xml");
3047                        }
3048                }
3049        } else{
3050                if (file_exists($full_path.$fichier_xml."_subst.xml")) {
3051                        $fp=fopen($full_path.$fichier_xml."_subst.xml","r") or die("Can't find XML file");
3052                        $size=filesize($full_path.$fichier_xml."_subst.xml");
3053                } else {
3054                        $fp=fopen($full_path.$fichier_xml.".xml","r") or die("Can't find XML file");
3055                        $size=filesize($full_path.$fichier_xml.".xml");
3056                } 
3057        }               
3058               
3059                $xml=fread($fp,$size);
3060                fclose($fp);
3061                $param=_parser_text_no_function_($xml, "PMBFIELDS");
3062
3063                //Lecture parametre memory_engine_allowed
3064                if($param['MEMORYENGINEALLOWED'][0]['value'] && $param['MEMORYENGINEALLOWED'][0]['value']=='yes') {
3065                        $this->memory_engine_allowed = true;
3066                }
3067               
3068                //Lecture des operateurs
3069                for ($i=0; $i<count($param["OPERATORS"][0]["OPERATOR"]); $i++) {
3070                        $operator_=$param["OPERATORS"][0]["OPERATOR"][$i];
3071                        if (substr($operator_["value"],0,4)=="msg:") {
3072                                $this->operators[$operator_["NAME"]]=$msg[substr($operator_["value"],4,strlen($operator_["value"])-4)];
3073                        } else {
3074                                $this->operators[$operator_["NAME"]]=$operator_["value"];       
3075                        }
3076                        if ($operator_["EMPTYALLOWED"]=="yes") $this->op_empty[$operator_["NAME"]]=true; else $this->op_empty[$operator_["NAME"]]=false;
3077                }
3078               
3079                //Lecture des champs fixes
3080                for ($i=0; $i<count($param["FIXEDFIELDS"][0]["FIELD"]); $i++) {
3081                        $t=array();
3082                        $ff=$param["FIXEDFIELDS"][0]["FIELD"][$i];
3083                        if (substr($ff["TITLE"],0,4)=="msg:") {
3084                                $t["TITLE"]=$msg[substr($ff["TITLE"],4,strlen($ff["TITLE"])-4)];       
3085                        } else {
3086                                $t["TITLE"]=$ff["TITLE"];       
3087                        }
3088                        $t["ID"]=$ff["ID"];
3089                        $t["NOTDISPLAYCOL"]=$ff["NOTDISPLAYCOL"];
3090                        $t["UNIMARCFIELD"]=$ff["UNIMARCFIELD"];
3091                        $t["INPUT_TYPE"]=$ff["INPUT"][0]["TYPE"];
3092                        $t["INPUT_OPTIONS"]=$ff["INPUT"][0];
3093                        if (substr($ff["SEPARATOR"],0,4)=="msg:") {
3094                                $t["SEPARATOR"]=$msg[substr($ff["SEPARATOR"],4,strlen($ff["SEPARATOR"])-4)];
3095                        } else {
3096                                $t["SEPARATOR"]=$ff["SEPARATOR"];       
3097                        }
3098                        //Visibilite
3099                        $t["VISIBLE"]=($ff["VISIBLE"]=="no"?false:true);
3100                        //Moteur memory
3101                        $t['MEMORYENGINEFORBIDDEN']=($ff['MEMORYENGINEFORBIDDEN']=='yes'?true:false);
3102                       
3103                        //Variables
3104                        for ($j=0; $j<count($ff["VARIABLE"]); $j++) {
3105                                $v=array();
3106                                $vv=$ff["VARIABLE"][$j];
3107                                $v["NAME"]=$vv["NAME"];
3108                                $v["TYPE"]=$vv["TYPE"];
3109                                if (substr($vv["COMMENT"],0,4)=="msg:") {
3110                                        $v["COMMENT"]=$msg[substr($vv["COMMENT"],4,strlen($vv["COMMENT"])-4)];
3111                                } else {
3112                                        $v["COMMENT"]=$vv["COMMENT"];   
3113                                }
3114                                //Recherche des options
3115                                reset($vv);
3116                                while (list($key,$val)=each($vv)) {
3117                                        if (is_array($val)) {
3118                                                $v["OPTIONS"][$key]=$val;
3119                                        }
3120                                }
3121                                $t["VAR"][]=$v;
3122                        }
3123
3124                        if (!isset($ff["VISIBILITY"]))
3125                                $t["VISIBILITY"]=true;
3126                        else 
3127                                if ($ff["VISIBILITY"]=="yes") $t["VISIBILITY"]=true; else $t["VISIBILITY"]=false;
3128                       
3129                        for ($j=0; $j<count($ff["QUERY"]); $j++) {
3130                                $q=array();
3131                                $q["OPERATOR"]=$ff["QUERY"][$j]["FOR"];
3132                                if (($ff["QUERY"][$j]["MULTIPLE"]=="yes")||($ff["QUERY"][$j]["CONDITIONAL"]=="yes")) {
3133                                        if($ff["QUERY"][$j]["MULTIPLE"]=="yes") $element = "PART";
3134                                        else $element = "VAR";
3135                                       
3136                                        for ($k=0; $k<count($ff["QUERY"][$j][$element]); $k++) {
3137                                                $pquery=$ff["QUERY"][$j][$element][$k];                                         
3138                                                if($element == "VAR"){
3139                                                        $q[$k]["CONDITIONAL"]["name"] = $pquery["NAME"];
3140                                                        $q[$k]["CONDITIONAL"]["value"] = $pquery["VALUE"][0]["value"];
3141                                                }
3142                                                if ($pquery["MULTIPLEWORDS"]=="yes")
3143                                                        $q[$k]["MULTIPLE_WORDS"]=true;
3144                                                else
3145                                                        $q[$k]["MULTIPLE_WORDS"]=false;
3146                                                if ($pquery["REGDIACRIT"]=="yes")
3147                                                        $q[$k]["REGDIACRIT"]=true;
3148                                                else
3149                                                        $q[$k]["REGDIACRIT"]=false;
3150                                                if ($pquery["KEEP_EMPTYWORD"]=="yes")
3151                                                        $q[$k]["KEEP_EMPTYWORD"]=true;
3152                                                else
3153                                                        $q[$k]["KEEP_EMPTYWORD"]=false;                                 
3154                                                if ($pquery["REPEAT"]) {
3155                                                        $q[$k]["REPEAT"]["NAME"]=$pquery["REPEAT"][0]["NAME"];
3156                                                        $q[$k]["REPEAT"]["ON"]=$pquery["REPEAT"][0]["ON"];
3157                                                        $q[$k]["REPEAT"]["SEPARATOR"]=$pquery["REPEAT"][0]["SEPARATOR"];
3158                                                        $q[$k]["REPEAT"]["OPERATOR"]=$pquery["REPEAT"][0]["OPERATOR"];
3159                                                        $q[$k]["REPEAT"]["ORDERTERM"]=$pquery["REPEAT"][0]["ORDERTERM"];
3160                                                }
3161                                                if ($pquery["BOOLEANSEARCH"]=="yes") {
3162                                                        $q[$k]["BOOLEAN"]=true;
3163                                                        if ($pquery["BOOLEAN"]) {
3164                                                                for ($z=0; $z<count($pquery["BOOLEAN"]); $z++) {
3165                                                                        $q[$k]["TABLE"][$z]=$pquery["BOOLEAN"][$z]["TABLE"][0]["value"];
3166                                                                        $q[$k]["INDEX_L"][$z]=$pquery["BOOLEAN"][$z]["INDEX_L"][0]["value"];
3167                                                                        $q[$k]["INDEX_I"][$z]=$pquery["BOOLEAN"][$z]["INDEX_I"][0]["value"];
3168                                                                        $q[$k]["ID_FIELD"][$z]=$pquery["BOOLEAN"][$z]["ID_FIELD"][0]["value"];
3169                                                                        if ($pquery["BOOLEAN"][$z]["KEEP_EMPTY_WORDS"][0]["value"]=="yes") {
3170                                                                                $q[$k]["KEEP_EMPTY_WORDS"][$z]=1;
3171                                                                                $q[$k]["KEEP_EMPTY_WORDS_FOR_CHECK"]=1;
3172                                                                        }
3173                                                                        if ($pquery["BOOLEAN"][$z]["FULLTEXT"][0]["value"]=="yes") {
3174                                                                                $q[$k]["FULLTEXT"][$z]=1;
3175                                                                        }
3176                                                                }
3177                                                        } else {
3178                                                                $q[$k]["TABLE"]=$pquery["TABLE"][0]["value"];
3179                                                                $q[$k]["INDEX_L"]=$pquery["INDEX_L"][0]["value"];
3180                                                                $q[$k]["INDEX_I"]=$pquery["INDEX_I"][0]["value"];
3181                                                                $q[$k]["ID_FIELD"]=$pquery["ID_FIELD"][0]["value"];
3182                                                                if ($pquery["KEEP_EMPTY_WORDS"][0]["value"]=="yes") {
3183                                                                        $q[$k]["KEEP_EMPTY_WORDS"]=1;
3184                                                                        $q[$k]["KEEP_EMPTY_WORDS_FOR_CHECK"]=1;
3185                                                                }
3186                                                                if ($pquery["FULLTEXT"][0]["value"]=="yes") {
3187                                                                        $q[$k]["FULLTEXT"]=1;
3188                                                                }
3189                                                        }
3190                                                } else $q[$k]["BOOLEAN"]=false;
3191                                                if ($pquery["ISBNSEARCH"]=="yes") {
3192                                                        $q[$k]["ISBN"]=true;
3193                                                } else $q[$k]["ISBN"]=false;
3194                                                if ($pquery["DETECTDATE"]) {
3195                                                        $q[$k]["DETECTDATE"]=$pquery["DETECTDATE"];
3196                                                } else $q[$k]["DETECTDATE"]=false;
3197                                                $q[$k]["MAIN"]=$pquery["MAIN"][0]["value"];
3198                                                $q[$k]["MULTIPLE_TERM"]=$pquery["MULTIPLETERM"][0]["value"];
3199                                                $q[$k]["MULTIPLE_OPERATOR"]=$pquery["MULTIPLEOPERATOR"][0]["value"];
3200                                        }
3201                                        $t["QUERIES"][]=$q;
3202                                        $t["QUERIES_INDEX"][$q["OPERATOR"]]=count($t["QUERIES"])-1;
3203                                } else {
3204                                        if ($ff["QUERY"][$j]["MULTIPLEWORDS"]=="yes")
3205                                                $q[0]["MULTIPLE_WORDS"]=true;
3206                                        else
3207                                                $q[0]["MULTIPLE_WORDS"]=false;
3208                                        if ($ff["QUERY"][$j]["REGDIACRIT"]=="yes")
3209                                                $q[0]["REGDIACRIT"]=true;
3210                                        else
3211                                                $q[0]["REGDIACRIT"]=false;                                     
3212                                        if ($ff["QUERY"][$j]["KEEP_EMPTYWORD"]=="yes")
3213                                                $q[0]["KEEP_EMPTYWORD"]=true;
3214                                        else
3215                                                $q[0]["KEEP_EMPTYWORD"]=false;                                         
3216                                        if ($ff["QUERY"][$j]["REPEAT"]) {
3217                                                $q[0]["REPEAT"]["NAME"]=$ff["QUERY"][$j]["REPEAT"][0]["NAME"];
3218                                                $q[0]["REPEAT"]["ON"]=$ff["QUERY"][$j]["REPEAT"][0]["ON"];
3219                                                $q[0]["REPEAT"]["SEPARATOR"]=$ff["QUERY"][$j]["REPEAT"][0]["SEPARATOR"];
3220                                                $q[0]["REPEAT"]["OPERATOR"]=$ff["QUERY"][$j]["REPEAT"][0]["OPERATOR"];
3221                                                $q[0]["REPEAT"]["ORDERTERM"]=$ff["QUERY"][$j]["REPEAT"][0]["ORDERTERM"];
3222                                        }
3223                                        if ($ff["QUERY"][$j]["BOOLEANSEARCH"]=="yes") {
3224                                                $q[0]["BOOLEAN"]=true;
3225                                                if ($ff["QUERY"][$j]["BOOLEAN"]) {
3226                                                        for ($z=0; $z<count($ff["QUERY"][$j]["BOOLEAN"]); $z++) {
3227                                                                $q[0]["TABLE"][$z]=$ff["QUERY"][$j]["BOOLEAN"][$z]["TABLE"][0]["value"];
3228                                                                $q[0]["INDEX_L"][$z]=$ff["QUERY"][$j]["BOOLEAN"][$z]["INDEX_L"][0]["value"];
3229                                                                $q[0]["INDEX_I"][$z]=$ff["QUERY"][$j]["BOOLEAN"][$z]["INDEX_I"][0]["value"];
3230                                                                $q[0]["ID_FIELD"][$z]=$ff["QUERY"][$j]["BOOLEAN"][$z]["ID_FIELD"][0]["value"];
3231                                                                if ($ff["QUERY"][$j]["BOOLEAN"][$z]["KEEP_EMPTY_WORDS"][0]["value"]=="yes") {
3232                                                                        $q[0]["KEEP_EMPTY_WORDS"][$z]=1;
3233                                                                        $q[0]["KEEP_EMPTY_WORDS_FOR_CHECK"]=1;
3234                                                                }
3235                                                        }
3236                                                } else {
3237                                                        $q[0]["TABLE"]=$ff["QUERY"][$j]["TABLE"][0]["value"];
3238                                                        $q[0]["INDEX_L"]=$ff["QUERY"][$j]["INDEX_L"][0]["value"];
3239                                                        $q[0]["INDEX_I"]=$ff["QUERY"][$j]["INDEX_I"][0]["value"];
3240                                                        $q[0]["ID_FIELD"]=$ff["QUERY"][$j]["ID_FIELD"][0]["value"];
3241                                                        if ($ff["QUERY"][$j]["KEEP_EMPTY_WORDS"][0]["value"]=="yes") {
3242                                                                $q[0]["KEEP_EMPTY_WORDS"]=1;
3243                                                                $q[0]["KEEP_EMPTY_WORDS_FOR_CHECK"]=1;
3244                                                        }
3245                                                }
3246                                        } else $q[0]["BOOLEAN"]=false;
3247                                        //prise en compte ou non du paramétrage du stemming
3248                                        if($ff["QUERY"][$j]['STEMMING']=="no"){
3249                                                $q[0]["STEMMING"]= false;
3250                                        }else{
3251                                                $q[0]["STEMMING"]= true;
3252                                        }
3253                                        //modif arnaud pour notices_mots_global_index..
3254                                        if ($ff["QUERY"][$j]['WORDSEARCH']=="yes"){
3255                                                $q[0]["WORD"]=true;
3256                                                $q[0]['CLASS'] = $ff["QUERY"][$j]['CLASS'][0]['value'];
3257                                                $q[0]['FOLDER'] = $ff["QUERY"][$j]['CLASS'][0]['FOLDER'];
3258                                                $q[0]['FIELDS'] = $ff["QUERY"][$j]['CLASS'][0]['FIELDS'];
3259                                        }else $q[0]["WORD"]=false;
3260                                        //fin modif arnaud
3261                                        if ($ff["QUERY"][$j]["ISBNSEARCH"]=="yes") {
3262                                                $q[0]["ISBN"]=true;
3263                                        } else $q[0]["ISBN"]=false;
3264                                        if ($ff["QUERY"][$j]["DETECTDATE"]) {
3265                                                $q[0]["DETECTDATE"]=$ff["QUERY"][$j]["DETECTDATE"];
3266                                        } else $q[0]["DETECTDATE"]=false;
3267                                        $q[0]["MAIN"]=$ff["QUERY"][$j]["MAIN"][0]["value"];
3268                                        $q[0]["MULTIPLE_TERM"]=$ff["QUERY"][$j]["MULTIPLETERM"][0]["value"];
3269                                        $q[0]["MULTIPLE_OPERATOR"]=$ff["QUERY"][$j]["MULTIPLEOPERATOR"][0]["value"];
3270                                        $t["QUERIES"][]=$q;
3271                                        $t["QUERIES_INDEX"][$q["OPERATOR"]]=count($t["QUERIES"])-1;
3272                                }
3273                        }
3274                       
3275                        // recuperation des visibilites parametrees
3276                        for ($j=0; $j<count($ff["VAR"]); $j++) {
3277                                $q=array();
3278                                $q["NAME"]=$ff["VAR"][$j]["NAME"];
3279                                if ($ff["VAR"][$j]["VISIBILITY"]=="yes") 
3280                                        $q["VISIBILITY"]=true;
3281                                else 
3282                                        $q["VISIBILITY"]=false;
3283                                for ($k=0; $k<count($ff["VAR"][$j]["VALUE"]); $k++) {
3284                                        $v=array();
3285                                        if ($ff["VAR"][$j]["VALUE"][$k]["VISIBILITY"]=="yes")
3286                                                $v[$ff["VAR"][$j]["VALUE"][$k]["value"]] = true ;
3287                                        else 
3288                                                $v[$ff["VAR"][$j]["VALUE"][$k]["value"]] = false ;
3289                                } // fin for <value ...
3290                                $q["VALUE"] = $v ;
3291                                $t["VARVIS"][] = $q ;
3292                        } // fin for
3293                       
3294                        $this->fixedfields[$ff["ID"]]=$t;
3295                }
3296               
3297                //Lecture des champs dynamiques
3298                if ($param["DYNAMICFIELDS"][0]["VISIBLE"]=="no") $this->dynamics_not_visible=true;
3299                if(!$param["DYNAMICFIELDS"][0]["FIELDTYPE"]){//Pour le cas de fichiers subst basés sur l'ancienne version
3300                        $tmp=$param["DYNAMICFIELDS"][0]["FIELD"];
3301                        unset($param["DYNAMICFIELDS"]);
3302                        $param["DYNAMICFIELDS"][0]["FIELDTYPE"][0]["PREFIX"]="d";
3303                        $param["DYNAMICFIELDS"][0]["FIELDTYPE"][0]["TYPE"]="notices";
3304                        $param["DYNAMICFIELDS"][0]["FIELDTYPE"][0]["FIELD"]=$tmp;
3305                        unset($tmp);
3306                }
3307                for ($h=0; $h <count($param["DYNAMICFIELDS"][0]["FIELDTYPE"]); $h++){
3308                        $champType=array();
3309                        $ft=$param["DYNAMICFIELDS"][0]["FIELDTYPE"][$h];
3310                        $champType["TYPE"]=$ft["TYPE"];
3311                        for ($i=0; $i<count($ft["FIELD"]); $i++) {
3312                                $t=array();
3313                                $ff=$ft["FIELD"][$i];
3314                                $t["DATATYPE"]=$ff["DATATYPE"];
3315                                $t["NOTDISPLAYCOL"]=$ff["NOTDISPLAYCOL"];
3316                                //Moteur memory
3317                                $t[