uid = $uid; $this->ufield=$ufield; $this->op=$op; $this->values=$values; $this->vars=$vars; $this->inter=$inter; } function set_sub($sub) { $this->sub=$sub; } } class search { var $operators; var $op_empty; var $fixedfields; var $dynamicfields; var $dynamics_not_visible; var $specialfields; var $pp; var $error_message; var $link; var $link_expl; var $link_explnum; var $link_serial; var $link_analysis; var $link_bulletin; var $link_explnum_serial; var $tableau_speciaux; var $operator_multi_value; var $tableau_access_rights; var $memory_engine_allowed = false; var $current_engine = 'MyISAM'; var $authpersos = array(); function search($fichier_xml="") { global $launch_search; $this->parse_search_file($fichier_xml); $this->strip_slashes(); foreach ( $this->dynamicfields as $key => $value ) { $this->pp[$key]=new parametres_perso($value["TYPE"]); } $authpersos=new authpersos(); $this->authpersos=$authpersos->get_data(); } function strip_slashes() { global $search,$explicit_search; for ($i=0; $imake_stripslashes_test_array($field); } else { for ($j=0; $jfixedfields[$s[1]]; switch ($ff["INPUT_TYPE"]) { case "date": if(!preg_match("/^\d{4}-\d{2}-\d{2}$/",$field[0])) { $field_temp=extraitdate($field[0]); $field[0]=$field_temp; } break; default: //Rien a faire break; } } } $$field_=$field; } } function make_stripslashes_test_array($value){ //stripslashes récursif car les facette sont des tableaux de tableaux if (is_array($value)) { foreach ($value as $k=>$v) { $value[$k] = $this->make_stripslashes_test_array($value[$k]); } return $value; } else { return stripslashes($value); } } function get_id_from_datatype($datatype, $fieldType = "d") { reset($this->dynamicfields[$fieldType]["FIELD"]); while (list($key,$val)=each($this->dynamicfields[$fieldType]["FIELD"])) { if ($val["DATATYPE"]==$datatype) return $key; } return ""; } function get_field($i,$n,$search,$pp) { global $charset; global $aff_list_empr_search; global $msg; global $include_path; global $thesaurus_classement_mode_pmb; global $opac_map_base_layer_type; global $opac_map_base_layer_params; global $dbh; global $opac_map_size_search_edition; $r=""; $s=explode("_",$search); //Champ $val="field_".$i."_".$search; global $$val; $v=$$val; if ($v=="") $v=array(); //Variables $fieldvar_="fieldvar_".$i."_".$search; global $$fieldvar_; $fieldvar=$$fieldvar_; if ($s[0]=="f") { //Champs fixes $ff=$this->fixedfields[$s[1]]; //Variables globales et input for ($j=0; $jrejete) $libelle = $aut->name.', '.$aut->rejete; else $libelle = $aut->name; if($aut->date) $libelle .= " ($aut->date)"; break; case "categorie": $libelle = categories::getlibelle($v[0],$lang); break; case "editeur": $ed = new publisher($v[0]); $libelle=$ed->name; if ($ed->ville) if ($ed->pays) $libelle.=" ($ed->ville - $ed->pays)"; else $libelle.=" ($ed->ville)"; break; case "collection" : $coll = new collection($v[0]); $libelle = $coll->name; break; case "subcollection" : $coll = new subcollection($v[0]); $libelle = $coll->name; break; case "serie" : $serie = new serie($v[0]); $libelle = $serie->name; break; case "indexint" : $indexint = new indexint($v[0]); $libelle = $indexint->display ; break; case "titres_uniformes" : $tu = new titre_uniforme($v[0]); $libelle = $tu->name; break; default : $libelle = $v[0]; break; } } $$op == "BOOLEAN"; $r=""; } if($libelle){ $r=""; }else{ $r=""; } break; case "authoritie": $fnamesans="field_".$n."_".$search; $fname="field_".$n."_".$search."[]"; $fname_id="field_".$n."_".$search."_id"; $fnamesanslib="field_".$n."_".$search."_lib"; $fnamelib="field_".$n."_".$search."_lib[]"; $fname_name_aut_id="fieldvar_".$n."_".$search."[authority_id][]"; $fname_aut_id="fieldvar_".$n."_".$search."_authority_id"; $ajax=$ff["INPUT_OPTIONS"]["AJAX"]; $selector=$ff["INPUT_OPTIONS"]["SELECTOR"]; $p1=$ff["INPUT_OPTIONS"]["P1"]; $p2=$ff["INPUT_OPTIONS"]["P2"]; global $opac_thesaurus; if($ajax == "categories" and $opac_thesaurus == 1){ $fnamevar_id = "linkfield=\"fieldvar_".$n."_".$search."[id_thesaurus][]\""; }else{ $fnamevar_id = ""; } $op = "op_".$i."_".$search; global $$op; global $lang; $r= " "; if ($$op == "AUTHORITY"){ if($v[0]!= 0){ switch ($ff['INPUT_OPTIONS']['SELECTOR']){ case "auteur": $aut=new auteur($v[0]); if($aut->rejete) $libelle = $aut->name.', '.$aut->rejete; else $libelle = $aut->name; if($aut->date) $libelle .= " ($aut->date)"; break; case "categorie": $libelle = categories::getlibelle($v[0],$lang); break; case "editeur": $ed = new publisher($v[0]); $libelle=$ed->name; if ($ed->ville) if ($ed->pays) $libelle.=" ($ed->ville - $ed->pays)"; else $libelle.=" ($ed->ville)"; break; case "collection" : $coll = new collection($v[0]); $libelle = $coll->name; break; case "subcollection" : $coll = new subcollection($v[0]); $libelle = $coll->name; break; case "serie" : $serie = new serie($v[0]); $libelle = $serie->name; break; case "indexint" : $indexint = new indexint($v[0]); $libelle = $indexint->display ; break; case "titres_uniformes" : $tu = new titre_uniforme($v[0]); $libelle = $tu->name; break; case "notice" : $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]."' "; $res=pmb_mysql_query($requete); if($res && pmb_mysql_num_rows($res)){ $libelle = pmb_mysql_result($res,0,0); }else{ $libelle = $v[0]; } break; default : $libelle = $v[0]; break; } }else $libelle = ""; $r.=" "; }else{ $r.=" "; } $r.=" "; break; case "text": if (substr($ff['INPUT_OPTIONS']["PLACEHOLDER"],0,4)=="msg:") { $input_placeholder = $msg[substr($ff['INPUT_OPTIONS']["PLACEHOLDER"],4,strlen($ff['INPUT_OPTIONS']["PLACEHOLDER"])-4)]; } else { $input_placeholder = $ff['INPUT_OPTIONS']["PLACEHOLDER"]; } $r=""; break; case "query_list": $requete=$ff["INPUT_OPTIONS"]["QUERY"][0]["value"]; if ($ff["INPUT_FILTERING"] == "yes") { $this->access_rights(); $requete = str_replace("!!acces_j!!", $this->tableau_access_rights["acces_j"], $requete); $requete = str_replace("!!statut_j!!", $this->tableau_access_rights["statut_j"], $requete); $requete = str_replace("!!statut_r!!", $this->tableau_access_rights["statut_r"], $requete); } $resultat=pmb_mysql_query($requete); $r=""; break; case "list": $options=$ff["INPUT_OPTIONS"]["OPTIONS"][0]; $r=""; break; case "marc_list": $options=new marc_list($ff["INPUT_OPTIONS"]["NAME"][0]["value"]); // gestion restriction par code utilise. if ($ff["INPUT_OPTIONS"]["RESTRICTQUERY"][0]["value"]) { $restrictquery=@pmb_mysql_query($ff["INPUT_OPTIONS"]["RESTRICTQUERY"][0]["value"]); if ($restrictqueryrow=@pmb_mysql_fetch_row($restrictquery)) { if ($restrictqueryrow[0]) { $restrictqueryarray=explode(",",$restrictqueryrow[0]); $existrestrict=true; } else $existrestrict=false; } else $existrestrict=false; } else $existrestrict=false; $r=""; break; case "date": $date_formatee = format_date_input($v[0]); $date_clic = "onClick=\"openPopUp('./select.php?what=calendrier&caller=search_form&date_caller=".str_replace('-', '', $v[0])."¶m1=field_".$n."_".$search."_date¶m2=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')\" "; if (substr($ff['INPUT_OPTIONS']["PLACEHOLDER"],0,4)=="msg:") { $input_placeholder = $msg[substr($ff['INPUT_OPTIONS']["PLACEHOLDER"],4,strlen($ff['INPUT_OPTIONS']["PLACEHOLDER"])-4)]; } else { $input_placeholder = $ff['INPUT_OPTIONS']["PLACEHOLDER"]; } $r=" "; break; case "map" : $layer_params = json_decode($opac_map_base_layer_params,true); $baselayer = "baseLayerType: dojox.geo.openlayers.BaseLayerType.".$opac_map_base_layer_type; if(count($layer_params)){ if($layer_params['name']) $baselayer.=",baseLayerName:\"".$layer_params['name']."\""; if($layer_params['url']) $baselayer.=",baseLayerUrl:\"".$layer_params['url']."\""; if($layer_params['options']) $baselayer.=",baseLayerOptions:".json_encode($layer_params['options']); } $size=explode("*",$opac_map_size_search_edition); if(count($size)!=2)$map_size="width:800px; height:480px;"; $map_size= "width:".$size[0]."px; height:".$size[1]."px;"; $map_holds=array(); foreach($v as $map_hold){ $map_holds[] = array( "wkt" => $map_hold, "type"=> "search", "color"=> null, "objects"=> array() ); } $r="
"; break; } //Traitement des variables d'entree //Variables for ($j=0; $j"; } if ($ff["VAR"][$j]["SPAN"]) { $r.="".$ff["VAR"][$j]["COMMENT"].""; } else { $r.=$ff["VAR"][$j]["COMMENT"]; } $input=$ff["VAR"][$j]["OPTIONS"]["INPUT"][0]; switch ($input["TYPE"]) { case "query_list": if ((!$fieldvar[$varname])&&($default)) $fieldvar[$varname][0]=$default; $r.=" "; if ($ff["VAR"][$j]["OPTIONS"]["INPUT"][0]["CLASS"]) { $r.=""; } break; case "checkbox" : if(!$input["DEFAULT_ON"]){ if ((!$fieldvar[$varname])&&($default)) $fieldvar[$varname][0]=$default; } elseif(!$fieldvar[$input["DEFAULT_ON"]][0]) $fieldvar[$varname][0] =$default; $r.=" "; if ($ff["VAR"][$j]["OPTIONS"]["INPUT"][0]["CLASS"]) { $r.=""; } break; } } else { if($vis["HIDDEN"] != "no") $r.=""; } } } } elseif (array_key_exists($s[0],$this->pp)) { //Recuperation du champ $field=array(); $field[ID]=$s[1]; $field[NAME]=$this->pp[$s[0]]->t_fields[$s[1]][NAME]; $field[MANDATORY]=$this->pp[$s[0]]->t_fields[$s[1]][MANDATORY]; $field[ALIAS]=$this->pp[$s[0]]->t_fields[$s[1]][TITRE]; $field[DATATYPE]=$this->pp[$s[0]]->t_fields[$s[1]][DATATYPE]; $field[OPTIONS][0]=_parser_text_no_function_("\n".$this->pp[$s[0]]->t_fields[$s[1]][OPTIONS], "OPTIONS"); $field[VALUES]=$v; $field[PREFIX]=$this->pp[$s[0]]->prefix; $r=$aff_list_empr_search[$this->pp[$s[0]]->t_fields[$s[1]][TYPE]]($field,$check_scripts,"field_".$n."_".$search); } elseif ($s[0]=="authperso") { $r=""; }elseif ($s[0]=="s") { //appel de la fonction get_input_box de la classe du champ special $type=$this->specialfields[$s[1]]["TYPE"]; for ($is=0; $istableau_speciaux["TYPE"]); $is++) { if ($this->tableau_speciaux["TYPE"][$is]["NAME"]==$type) { $sf=$this->specialfields[$s[1]]; require_once($include_path."/search_queries/specials/".$this->tableau_speciaux["TYPE"][$is]["PATH"]."/search.class.php"); $specialclass= new $this->tableau_speciaux["TYPE"][$is]["CLASS"]($s[1],$n,$sf,$this); $r=$specialclass->get_input_box(); break; } } } return $r; } function make_search($prefixe="") { global $search; global $dbh; global $msg; global $include_path; global $opac_multi_search_operator; global $opac_stemming_active; $last_table=""; //Pour chaque champ for ($i=0; $ifixedfields[$s[1]]; //Choix du moteur if ($this->memory_engine_allowed && !$ff['MEMORYENGINEFORBIDDEN'] ) { $this->current_engine = 'MEMORY'; } else { $this->current_engine = 'MyISAM'; } //Calcul des variables $var_table=array(); for ($j=0; $jop_empty[$$op] && !is_array($field) ){ $field = array(); $field[0] = ""; } //Pour chaque valeur du champ for ($j=0; $jerror; else $err=$aq->error; if (!$err) { if (is_array($q[$z]["TABLE"])) { for ($z1=0; $z1get_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); 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); $main=str_replace("!!pert_term_".($z1+1)."!!",$members["select"],$main); $main=str_replace("!!where_term_".($z1+1)."!!",$members["where"],$main); } } else { $is_fulltext=false; if ($q[$z]["FULLTEXT"]) $is_fulltext=true; if ($q[$z]["KEEP_EMPTY_WORDS"]) $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); 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); $main=str_replace("!!pert_term!!",$members["select"],$main); $main=str_replace("!!where_term!!",$members["where"],$main); } } else { $main="select notice_id from notices where notice_id=0"; $this->error_message=sprintf($msg["searcher_syntax_error_desc"],$aq->current_car,$aq->input_html,$aq->error_message); } }else if ($q[$z]["WORD"]){ if(($q[$z]['CLASS'] == "searcher_all_fields")){//Pour savoir si la recherche tous champs inclut les docnum ou pas global $mutli_crit_indexation_docnum_allfields; if($var_table["is_num"]){ $mutli_crit_indexation_docnum_allfields=1; }else{ $mutli_crit_indexation_docnum_allfields=-1; } } //recherche par terme... if($q[$z]["FIELDS"]){ $searcher = new $q[$z]['CLASS']($field[$j],$q[$z]["FIELDS"]); }else{ $searcher = new $q[$z]['CLASS']($field[$j]); } $main = $searcher->get_full_query(); // print "

".$main; }else $main=str_replace("!!p!!",addslashes($field[$j]),$main); //Y-a-t-il une close repeat ? if ($q[$z]["REPEAT"]) { //Si oui, on repete !! $onvals=$q[$z]["REPEAT"]["ON"]; global $$onvals; $onvalst=explode($q[$z]["REPEAT"]["SEPARATOR"],$$onvals); $mains=array(); for ($ir=0; $ir1) { if($operator == "or"){ //Ou logique si plusieurs valeurs if ($prefixe) { $requete="create temporary table ".$prefixe."mf_".$j." ENGINE=".$this->current_engine." ".$main; @pmb_mysql_query($requete,$dbh); $requete="alter table ".$prefixe."mf_".$j." add idiot int(1)"; @pmb_mysql_query($requete); $requete="alter table ".$prefixe."mf_".$j." add unique($field_keyName)"; @pmb_mysql_query($requete); } else { $requete="create temporary table mf_".$j." ENGINE=".$this->current_engine." ".$main; @pmb_mysql_query($requete,$dbh); $requete="alter table mf_".$j." add idiot int(1)"; @pmb_mysql_query($requete); $requete="alter table mf_".$j." add unique($field_keyName)"; @pmb_mysql_query($requete); } if ($last_main_table) { if ($prefixe) { $requete="insert ignore into ".$prefixe."mf_".$j." select ".$last_main_table.".* from ".$last_main_table; } else { $requete="insert ignore into mf_".$j." select ".$last_main_table.".* from ".$last_main_table; } pmb_mysql_query($requete,$dbh); //pmb_mysql_query("drop table mf_".$j,$dbh); pmb_mysql_query("drop table ".$last_main_table,$dbh); } //else pmb_mysql_query("drop table mf_".$j,$dbh); if ($prefixe) { $last_main_table=$prefixe."mf_".$j; } else { $last_main_table="mf_".$j; } } elseif($operator == "and"){ //ET logique si plusieurs valeurs if ($prefixe) { $requete="create temporary table ".$prefixe."mf_".$j." ENGINE=".$this->current_engine." ".$main; @pmb_mysql_query($requete,$dbh); $requete="alter table ".$prefixe."mf_".$j." add idiot int(1)"; @pmb_mysql_query($requete); $requete="alter table ".$prefixe."mf_".$j." add unique($field_keyName)"; @pmb_mysql_query($requete); } else { $requete="create temporary table mf_".$j." ENGINE=".$this->current_engine." ".$main; @pmb_mysql_query($requete,$dbh); $requete="alter table mf_".$j." add idiot int(1)"; @pmb_mysql_query($requete); $requete="alter table mf_".$j." add unique($field_keyName)"; @pmb_mysql_query($requete); } if ($last_main_table) { if ($prefixe) { $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)"; } else { $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)"; } pmb_mysql_query($requete,$dbh); pmb_mysql_query("drop table ".$last_tables,$dbh); } if ($prefixe) { $last_tables=$prefixe."mf_".$j; } else { $last_tables="mf_".$j; } if ($prefixe) { $last_main_table = $prefixe."and_result_".$j; } else { $last_main_table = "and_result_".$j; } } } //else print $main; } if ($last_main_table){ $main="select * from ".$last_main_table; } } elseif (array_key_exists($s[0],$this->pp)) { $datatype=$this->pp[$s[0]]->t_fields[$s[1]]["DATATYPE"]; $df=$this->dynamicfields[$s[0]]["FIELD"][$this->get_id_from_datatype($datatype,$s[0])]; $q_index=$df["QUERIES_INDEX"]; $q=$df["QUERIES"][$q_index[$$op]]; //Choix du moteur if ($this->memory_engine_allowed && !$df['MEMORYENGINEFORBIDDEN'] ) { $this->current_engine = 'MEMORY'; } else { $this->current_engine = 'MyISAM'; } //Pour chaque valeur du champ $last_main_table=""; if (count($field)==0) $field[0]=""; for ($j=0; $jget_full_query(); } //Choix de l'operateur dans la liste if($q["DEFAULT_OPERATOR"]){ $operator=$q["DEFAULT_OPERATOR"]; } else { $operator = ($opac_multi_search_operator?$opac_multi_search_operator:"or"); } if (count($field)>1) { if($operator == "or"){ //Ou logique si plusieurs valeurs if ($prefixe) { $requete="create temporary table ".$prefixe."mf_".$j." ENGINE=".$this->current_engine." ".$main; @pmb_mysql_query($requete,$dbh); $requete="alter table ".$prefixe."mf_".$j." add idiot int(1)"; @pmb_mysql_query($requete); $requete="alter table ".$prefixe."mf_".$j." add unique($field_keyName)"; @pmb_mysql_query($requete); } else { $requete="create temporary table mf_".$j." ENGINE=".$this->current_engine." ".$main; @pmb_mysql_query($requete,$dbh); $requete="alter table mf_".$j." add idiot int(1)"; @pmb_mysql_query($requete); $requete="alter table mf_".$j." add unique($field_keyName)"; @pmb_mysql_query($requete); } if ($last_main_table) { if ($prefixe) { $requete="insert ignore into ".$prefixe."mf_".$j." select ".$last_main_table.".* from ".$last_main_table; } else { $requete="insert ignore into mf_".$j." select ".$last_main_table.".* from ".$last_main_table; } pmb_mysql_query($requete,$dbh); //pmb_mysql_query("drop table mf_".$j,$dbh); pmb_mysql_query("drop table ".$last_main_table,$dbh); } //else pmb_mysql_query("drop table mf_".$j,$dbh); if ($prefixe) { $last_main_table=$prefixe."mf_".$j; } else { $last_main_table="mf_".$j; } } elseif($operator == "and"){ //ET logique si plusieurs valeurs if ($prefixe) { $requete="create temporary table ".$prefixe."mf_".$j." ENGINE=".$this->current_engine." ".$main; @pmb_mysql_query($requete,$dbh); $requete="alter table ".$prefixe."mf_".$j." add idiot int(1)"; @pmb_mysql_query($requete); $requete="alter table ".$prefixe."mf_".$j." add unique($field_keyName)"; @pmb_mysql_query($requete); } else { $requete="create temporary table mf_".$j." ENGINE=".$this->current_engine." ".$main; @pmb_mysql_query($requete,$dbh); $requete="alter table mf_".$j." add idiot int(1)"; @pmb_mysql_query($requete); $requete="alter table mf_".$j." add unique($field_keyName)"; @pmb_mysql_query($requete); } if ($last_main_table) { if ($prefixe) { $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)"; } else { $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)"; } pmb_mysql_query($requete,$dbh); pmb_mysql_query("drop table ".$last_tables,$dbh); } if ($prefixe) { $last_tables=$prefixe."mf_".$j; } else { $last_tables="mf_".$j; } if ($prefixe) { $last_main_table = $prefixe."and_result_".$j; } else { $last_main_table = "and_result_".$j; } } } //else print $main; } if ($last_main_table) $main="select * from ".$last_main_table; } elseif ($s[0]=="s") { //instancier la classe de traitement du champ special $type=$this->specialfields[$s[1]]["TYPE"]; for ($is=0; $istableau_speciaux["TYPE"]); $is++) { if ($this->tableau_speciaux["TYPE"][$is]["NAME"]==$type) { $sf=$this->specialfields[$s[1]]; require_once($include_path."/search_queries/specials/".$this->tableau_speciaux["TYPE"][$is]["PATH"]."/search.class.php"); $specialclass= new $this->tableau_speciaux["TYPE"][$is]["CLASS"]($s[1],$i,$sf,$this); $last_main_table=$specialclass->make_search(); break; } } if ($last_main_table) $main="select * from ".$last_main_table; } elseif ($s[0]=="authperso") { $aq=new analyse_query($field[0],0,0,1,1,$opac_stemming_active); $members=$aq->get_query_members("authperso_authorities","authperso_infos_global","authperso_index_infos_global","id_authperso_authority"); $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]; $main="select distinct notice_id FROM notices,notices_authperso,authperso_authorities $clause "; if ($last_main_table) $main="select * from ".$last_main_table; } $table=$prefixe."t_".$i."_".$search[$i]; $requete="create temporary table ".$prefixe."t_".$i."_".$search[$i]." ENGINE=".$this->current_engine." ".$main; pmb_mysql_query($requete,$dbh); $requete="alter table ".$prefixe."t_".$i."_".$search[$i]." add idiot int(1)"; @pmb_mysql_query($requete,$dbh); $requete="alter table ".$prefixe."t_".$i."_".$search[$i]." add unique(notice_id)"; pmb_mysql_query($requete,$dbh); $requete="alter table ".$prefixe."t_".$i."_".$search[$i]." add pert decimal(58,1) default 1"; @pmb_mysql_query($requete,$dbh); if ($last_main_table) { $requete="drop table ".$last_main_table; pmb_mysql_query($requete,$dbh); } $requete="create temporary table ".$prefixe."t".$i." ENGINE=".$this->current_engine." "; $isfirst_criteria=false; switch ($$inter) { case "and": $requete.="select "; $req_col="SHOW columns FROM ".$table; $res_col=pmb_mysql_query($req_col,$dbh); while ($col = pmb_mysql_fetch_object($res_col)){ if($col->Field == "pert"){ $requete.="SUM(".$table.".pert + ".$last_table.".pert) AS pert,"; }else{ $requete.=$table.".".$col->Field.","; } } $requete=substr($requete,0,-1); $requete.=" from $last_table,$table where ".$table.".notice_id=".$last_table.".notice_id group by notice_id"; @pmb_mysql_query($requete,$dbh); break; case "or": //Si la table précédente est vide, c'est comme au premier jour ! $requete_c="select count(*) from ".$last_table; if (!@pmb_mysql_result(pmb_mysql_query($requete_c),0,0)) { $isfirst_criteria=true; } else { $requete.="select * from ".$table; @pmb_mysql_query($requete,$dbh); $requete="alter table ".$prefixe."t".$i." add idiot int(1)"; @pmb_mysql_query($requete,$dbh); $requete="alter table ".$prefixe."t".$i." add unique(notice_id)"; @pmb_mysql_query($requete,$dbh); $requete="alter table ".$prefixe."t".$i." add pert decimal(58,1) default 1"; @pmb_mysql_query($requete,$dbh); $requete="insert into ".$prefixe."t".$i." (notice_id,idiot,pert) select distinct ".$last_table.".notice_id,".$last_table.".idiot, ".$last_table.".pert AS pert from ".$last_table." left join ".$table." on ".$last_table.".notice_id=".$table.".notice_id where ".$table.".notice_id is null"; @pmb_mysql_query($requete,$dbh); } break; case "ex": //$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"; //@pmb_mysql_query($requete_not); //$requete_not="alter table ".$table."_b add idiot int(1), add unique(notice_id)"; //@pmb_mysql_query($requete_not); //$requete.="select ".$table."_b.* from $last_table,".$table."_b where ".$table."_b.notice_id=".$last_table.".notice_id"; $requete.="select ".$last_table.".* from $last_table left join ".$table." on ".$table.".notice_id=".$last_table.".notice_id where ".$table.".notice_id is null"; @pmb_mysql_query($requete,$dbh); //$requete="drop table ".$table."_b"; //@pmb_mysql_query($requete); $requete="alter table ".$prefixe."t".$i." add idiot int(1)"; @pmb_mysql_query($requete,$dbh); $requete="alter table ".$prefixe."t".$i." add unique(notice_id)"; @pmb_mysql_query($requete,$dbh); $requete="alter table ".$prefixe."t".$i." add pert decimal(58,1) default 1"; @pmb_mysql_query($requete,$dbh); break; default: $isfirst_criteria=true; $requete.="select * from ".$table; @pmb_mysql_query($requete,$dbh); $requete="alter table ".$prefixe."t".$i." add idiot int(1)"; @pmb_mysql_query($requete,$dbh); $requete="alter table ".$prefixe."t".$i." add unique(notice_id)"; @pmb_mysql_query($requete,$dbh); $requete="alter table ".$prefixe."t".$i." add pert decimal(58,1) default 1"; @pmb_mysql_query($requete,$dbh); break; } if (!$isfirst_criteria) { if($last_table){ pmb_mysql_query("drop table if exists ".$last_table,$dbh); } if($table){ pmb_mysql_query("drop table if exists ".$table,$dbh); } if ($prefixe) { $last_table=$prefixe."t".$i; } else { $last_table="t".$i; } } else { if($last_table){ pmb_mysql_query("drop table if exists ".$last_table,$dbh); } $last_table=$table; } } return $last_table; } function make_hidden_search_form($url,$form_name="form_values",$target="",$close_form=true) { global $search; global $charset; global $page; $r="
specialfields[$s[1]]["TYPE"]; } //Recuperation des variables auxiliaires $fieldvar_="fieldvar_".$i."_".$search[$i]; global $$fieldvar_; $fieldvar=$$fieldvar_; if (!is_array($fieldvar)) $fieldvar=array(); $r.=""; $r.=""; $r.=""; if ($type=='facette') { $r.="\n"; } else { for ($j=0; $j\n"; } } reset($fieldvar); while (list($var_name,$var_value)=each($fieldvar)) { for ($j=0; $j"; } } } $r.="\n"; if ($close_form) $r.=""; return $r; } function make_human_query() { global $search; global $msg; global $charset; global $include_path; global $lang; global $thesaurus_classement_mode_pmb; $r=""; for ($i=0; $ifixedfields[$s[1]]["TITLE"]; } elseif(array_key_exists($s[0],$this->pp)){ $title=$this->pp[$s[0]]->t_fields[$s[1]]["TITRE"]; } elseif ($s[0]=="s") { $title=$this->specialfields[$s[1]]["TITLE"]; } elseif ($s[0]=="authperso") { $title=$this->authpersos[$s[1]]['name']; } $op="op_".$i."_".$search[$i]; global $$op; $operator=$this->operators[$$op]; $field_="field_".$i."_".$search[$i]; global $$field_; $field=$$field_; //Recuperation des variables auxiliaires $fieldvar_="fieldvar_".$i."_".$search[$i]; global $$fieldvar_; $fieldvar=$$fieldvar_; if (!is_array($fieldvar)) $fieldvar=array(); $field_aff=array(); if (array_key_exists($s[0],$this->pp)) { $datatype=$this->pp[$s[0]]->t_fields[$s[1]]["DATATYPE"]; $df=$this->dynamicfields[$s[0]]["FIELD"][$this->get_id_from_datatype($datatype,$s[0])]; $q_index=$df["QUERIES_INDEX"]; $q=$df["QUERIES"][$q_index[$$op]]; if ($q["DEFAULT_OPERATOR"]) $operator_multi=$q["DEFAULT_OPERATOR"]; for ($j=0; $jpp[$s[0]]->get_formatted_output(array(0=>$field[$j]),$s[1]); } } elseif ($s[0]=="f") { $ff=$this->fixedfields[$s[1]]; $q_index=$ff["QUERIES_INDEX"]; $q=$ff["QUERIES"][$q_index[$$op]]; if ($q["DEFAULT_OPERATOR"]) $operator_multi=$q["DEFAULT_OPERATOR"]; switch ($this->fixedfields[$s[1]]["INPUT_TYPE"]) { case "list": $options=$this->fixedfields[$s[1]]["INPUT_OPTIONS"]["OPTIONS"][0]; $opt=array(); for ($j=0; $jfixedfields[$s[1]]["INPUT_OPTIONS"]["QUERY"][0]["value"]; if ($this->fixedfields[$s[1]]["INPUT_FILTERING"] == "yes") { $this->access_rights(); $requete = str_replace("!!acces_j!!", $this->tableau_access_rights["acces_j"], $requete); $requete = str_replace("!!statut_j!!", $this->tableau_access_rights["statut_j"], $requete); $requete = str_replace("!!statut_r!!", $this->tableau_access_rights["statut_r"], $requete); } $resultat=pmb_mysql_query($requete); $opt=array(); while ($r_=@pmb_mysql_fetch_row($resultat)) { $opt[$r_[0]]=$r_[1]; } for ($j=0; $jfixedfields[$s[1]]["INPUT_OPTIONS"]["NAME"][0]["value"]); for ($j=0; $jtable[$field[$j]]; } break; case "date": $field_aff[0]=format_date($field[0]); break; case "authoritie": for($j=0 ; $jrejete) $field[$j] = $aut->name.', '.$aut->rejete; else $field[$j] = $aut->name; if($aut->date) $field[$j] .= " ($aut->date)"; break; case "editeur": $ed = new publisher($field[$j]); $field[$j]=$ed->name; if ($ed->ville) if ($ed->pays) $field[$j].=" ($ed->ville - $ed->pays)"; else $field[$j].=" ($ed->ville)"; break; case "collection" : $coll = new collection($field[$j]); $field[$j] = $coll->name; break; case "subcollection" : $coll = new subcollection($field[$j]); $field[$j] = $coll->name; break; case "serie" : $serie = new serie($field[$j]); $field[$j] = $serie->name; break; case "indexint" : $indexint = new indexint($field[$j]); $field[$j] = $indexint->display ; break; case "titres_uniformes" : $tu = new titre_uniforme($field[$j]); $field[$j] = $tu->name; break; case "notice" : $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]."' "; $res=pmb_mysql_query($requete); if($res && pmb_mysql_num_rows($res)){ $field[$j] = pmb_mysql_result($res,0,0); } break; } } } $field_aff= $field; break; default: $field_aff=$field; break; } //Ajout des variables si necessaire reset($fieldvar); $fieldvar_aff=array(); while (list($var_name,$var_value)=each($fieldvar)) { //Recherche de la variable par son nom $vvar=$this->fixedfields[$s[1]]["VAR"]; for ($j=0; $jspecialfields[$s[1]]["TYPE"]; for ($is=0; $istableau_speciaux["TYPE"]); $is++) { if ($this->tableau_speciaux["TYPE"][$is]["NAME"]==$type) { $sf=$this->specialfields[$s[1]]; require_once($include_path."/search_queries/specials/".$this->tableau_speciaux["TYPE"][$is]["PATH"]."/search.class.php"); $specialclass= new $this->tableau_speciaux["TYPE"][$is]["CLASS"]($s[1],$i,$sf,$this); $field_aff=$specialclass->make_human_query(); $field_aff[0]=html_entity_decode(strip_tags($field_aff[0]),ENT_QUOTES,$charset); break; } } }elseif ($s[0]=="authperso") { $field_aff[0]=$field[0]; } switch ($this->operator_multi_value) { case "and": $op_list=$msg["search_and"]; break; case "or": $op_list=$msg["search_or"]; break; default: $op_list=$msg["search_or"]; break; } if(is_array($field_aff)){ $texte=implode(" ".$op_list." ",$field_aff); }else{ $texte=""; } if (count($fieldvar_aff)) $texte.=" [".implode(" ; ",$fieldvar_aff)."]"; $inter="inter_".$i."_".$search[$i]; global $$inter; switch ($$inter) { case "and": $inter_op=$msg["search_and"]; break; case "or": $inter_op=$msg["search_or"]; break; case "ex": $inter_op=$msg["search_exept"]; break; default: $inter_op=""; break; } if ($inter_op) $inter_op="".htmlentities($inter_op,ENT_QUOTES,$charset).""; $r.=$inter_op." ".htmlentities($title,ENT_QUOTES,$charset)." ".htmlentities($operator,ENT_QUOTES,$charset)." (".htmlentities($texte,ENT_QUOTES,$charset).") "; } return $r; } function make_unimarc_query() { global $search; global $msg; global $charset; global $include_path; $mt=array(); //Récupération du type de recherche $sc_type = $this->fichier_xml; $sc_type = substr($sc_type,0,strlen($sc_type)-8); $r=""; for ($i=0; $ifixedfields[$s[1]]["UNIMARCFIELD"]; } elseif (array_key_exists($s[0],$this->pp)){ $id=$search[$i]; $title=$this->pp[$s[0]]->t_fields[$s[1]]["UNIMARCFIELD"]; } elseif ($s[0]=="s") { $id=$search[$i]; $title=$this->specialfields[$s[1]]["UNIMARCFIELD"]; } $op="op_".$i."_".$search[$i]; global $$op; //$operator=$this->operators[$$op]; $field_="field_".$i."_".$search[$i]; global $$field_; $field=$$field_; //Recuperation des variables auxiliaires $fieldvar_="fieldvar_".$i."_".$search[$i]; global $$fieldvar_; $fieldvar=$$fieldvar_; if (!is_array($fieldvar)) $fieldvar=array(); $field_aff=array(); if(array_key_exists($s[0],$this->pp)){ for ($j=0; $jpp[$s[0]]->get_formatted_output(array(0=>$field[$j]),$s[1]); } } elseif ($s[0]=="f") { switch ($this->fixedfields[$s[1]]["INPUT_TYPE"]) { case "list": $options=$this->fixedfields[$s[1]]["INPUT_OPTIONS"]["OPTIONS"][0]; $opt=array(); for ($j=0; $jfixedfields[$s[1]]["INPUT_OPTIONS"]["QUERY"][0]["value"]; if ($this->fixedfields[$s[1]]["INPUT_FILTERING"] == "yes") { $this->access_rights(); $requete = str_replace("!!acces_j!!", $this->tableau_access_rights["acces_j"], $requete); $requete = str_replace("!!statut_j!!", $this->tableau_access_rights["statut_j"], $requete); $requete = str_replace("!!statut_r!!", $this->tableau_access_rights["statut_r"], $requete); } $resultat=pmb_mysql_query($requete); $opt=array(); while ($r_=@pmb_mysql_fetch_row($resultat)) { $opt[$r_[0]]=$r_[1]; } for ($j=0; $jfixedfields[$s[1]]["INPUT_OPTIONS"]["NAME"][0]["value"]); for ($j=0; $jtable[$field[$j]]; } break; case "date": $field_aff[0]=format_date($field[0]); break; default: $field_aff=$field; break; } //Ajout des variables si necessaire reset($fieldvar); $fieldvar_aff=array(); while (list($var_name,$var_value)=each($fieldvar)) { //Recherche de la variable par son nom $vvar=$this->fixedfields[$s[1]]["VAR"]; for ($j=0; $jspecialfields[$s[1]]["TYPE"]; for ($is=0; $istableau_speciaux["TYPE"]); $is++) { if ($this->tableau_speciaux["TYPE"][$is]["NAME"]==$type) { $sf=$this->specialfields[$s[1]]; require_once($include_path."/search_queries/specials/".$this->tableau_speciaux["TYPE"][$is]["PATH"]."/search.class.php"); $specialclass= new $this->tableau_speciaux["TYPE"][$is]["CLASS"]($s[1],$i,$sf,$this); $sub=$specialclass->make_unimarc_query(); break; } } } $inter="inter_".$i."_".$search[$i]; global $$inter; $mterm=new mterm($title,$$op,$field_aff,$fieldvar_aff,$$inter,$id); if ($i==1) $mterm->sc_type=$sc_type; if ((is_array($sub))&&(count($sub))) $mterm->set_sub($sub); else if (is_array($sub)) unset($mterm); if ($mterm) $mt[]=$mterm; } return $mt; } function show_results($url,$url_to_search_form,$hidden_form=true,$search_target="") { global $dbh; global $begin_result_liste; global $opac_search_results_per_page; $nb_per_page_search = $opac_search_results_per_page; global $page; global $charset; global $search; global $msg, $opac_notices_depliable ; global $debug; $start_page=$nb_per_page_search*$page; //Y-a-t-il des champs ? if (count($search)==0) { error_message_history($msg["search_empty_field"], $msg["search_no_fields"], 1); exit(); } //Verification des champs vides for ($i=0; $ifixedfields[$s[1]]["TITLE"]; if ((string)$field[0]=="") { $bool=true; } } elseif(array_key_exists($s[0],$this->pp)) { $champ=$this->pp[$s[0]]->t_fields[$s[1]]["TITRE"]; if ((string)$field[0]=="") { $bool=true; } } elseif($s[0]=="s") { $champ=$this->specialfields[$s[1]]["TITLE"]; $type=$this->specialfields[$s[1]]["TYPE"]; for ($is=0; $istableau_speciaux["TYPE"]); $is++) { if ($this->tableau_speciaux["TYPE"][$is]["NAME"]==$type) { $sf=$this->specialfields[$s[1]]; global $include_path; require_once($include_path."/search_queries/specials/".$this->tableau_speciaux["TYPE"][$is]["PATH"]."/search.class.php"); $specialclass= new $this->tableau_speciaux["TYPE"][$is]["CLASS"]($s[1],$sf,$i,$this); $bool=$specialclass->is_empty($field); break; } } }elseif (substr($s,0,9)=="authperso") { } if (($bool)&&(!$this->op_empty[$$op])) { error_message_history($msg["search_empty_field"], sprintf($msg["search_empty_error_message"],$champ), 1); exit(); } } $table=$this->make_search(); //Y-a-t-il une erreur lors de la recherche ? if ($this->error_message) { error_message_history("", $this->error_message, 1); exit(); } if ($hidden_form) print $this->make_hidden_search_form($url); $requete="select count(1) from $table"; $nb_results=pmb_mysql_result(pmb_mysql_query($requete),0,0); /* $requete="select $table.*,notices.niveau_biblio from ".$table.",notices where notices.notice_id=$table.notice_id order by notices.index_sew limit ".$start_page.",".$nb_per_page_search; $resultat=pmb_mysql_query($requete,$dbh);*/ print pmb_bidi("".$msg["search_search_extended"]." : ".$this->make_human_query()); if ($nb_results) { print " => ".$nb_results." ".$msg["1916"]."
\n"; if ($opac_notices_depliable) print $begin_result_liste; } else print "
".$msg["1915"]." "; print ""; while ($r=pmb_mysql_fetch_object($resultat)) { if($r->niveau_biblio != 's' && $r->niveau_biblio != 'a') { // notice de monographie $nt = new mono_display($r->notice_id, 6, $this->link, 1, $this->link_expl, '', $this->link_explnum,1); } else { // on a affaire a un periodique $nt = new serial_display($r->notice_id, 6, $this->link_serial, $this->link_analysis, $this->link_bulletin, "", $this->link_explnum_serial, 0 ); } echo pmb_bidi("
".$nt->result."
"); } //Gestion de la pagination if ($nb_results) { print $this->get_current_search_map(); $n_max_page=ceil($nb_results/$nb_per_page_search); echo "
"; if ($page>0) { echo ""; echo "[".$msg["prec_page"]."]"; echo ""; } echo "page ".($page+1)."/".$n_max_page.""; if (($page+1)<$n_max_page) { echo ""; echo "[".$msg["next_page"]."]"; echo ""; } echo "
"; } } function show_results_unimarc($url,$url_to_search_form,$hidden_form=true,$search_target="") { global $dbh; global $begin_result_liste; global $opac_notices_depliable; global $opac_search_results_per_page; $nb_per_page_search = $opac_search_results_per_page; global $page; global $charset; global $search; global $msg; global $affich_tris_result_liste; global $count; global $add_cart_link; $start_page=$nb_per_page_search*($page-1); //Y-a-t-il des champs ? if (count($search)==0) { return; } $table=$this->make_search(); $requete="select count(1) from $table"; $nb_results=pmb_mysql_result(pmb_mysql_query($requete),0,0); $count=$nb_results; $requete = "select * from $table"; $requete .= " limit ".$start_page.",".$nb_per_page_search; $resultat=pmb_mysql_query($requete,$dbh); print "

$msg[resultat_recherche]

\n
"; print pmb_bidi("

$nb_results $msg[titles_found] ".$this->make_human_query()."

"); if ($opac_show_suggest) { $bt_sugg = "   ".$msg[empr_bt_make_sugg].""; print $bt_sugg; } flush(); $entrepots_localisations = array(); $entrepots_localisations_sql = "SELECT * FROM entrepots_localisations ORDER BY loc_visible DESC"; $res = pmb_mysql_query($entrepots_localisations_sql); while ($row = pmb_mysql_fetch_array($res)) { $entrepots_localisations[$row["loc_code"]] = array("libelle" => $row["loc_libelle"], "visible" => $row["loc_visible"]); } if ($opac_notices_depliable) print $begin_result_liste; print $add_cart_link; print "
\n
"; print "
"; while ($r=pmb_mysql_fetch_object($resultat)) { print aff_notice_unimarc($r->notice_id, 0, $entrepots_localisations); } print "
"; print "
\n
"; } // fonction de calcul de la visibilite d'un champ de recherche function visibility($ff) { if (!count($ff["VARVIS"])) return $ff["VISIBILITY"]; for ($i=0; $isetDomain(2); $rights= $dom_2->getRights($_SESSION['id_empr_session'], $id); } if (is_null($dom_2)) { $this->tableau_access_rights["acces_j"] = ''; $this->tableau_access_rights["statut_j"] = ',notice_statut'; $this->tableau_access_rights["statut_r"] = "and statut=id_notice_statut and ((notice_visible_opac=1 and notice_visible_opac_abon=0)".($_SESSION["user_code"]?" or (notice_visible_opac_abon=1 and notice_visible_opac=1)":"").")"; } else { $this->tableau_access_rights["acces_j"] = $dom_2->getJoin($_SESSION['id_empr_session'],4,'notice_id'); $this->tableau_access_rights["statut_j"] = ""; $this->tableau_access_rights["statut_r"] = ""; } } //Templates des listes d'operateurs function show_form($url,$result_url,$result_target='') { global $charset; global $search; global $add_field; global $delete_field; global $launch_search; global $page; global $search_form; global $msg; global $include_path; global $opac_extended_search_auto; global $limitsearch; if (($add_field)&&(($delete_field==="")&&(!$launch_search))) $search[]=$add_field; $search_form=str_replace("!!url!!",$url,$search_form); //Generation de la liste des champs possibles if ($opac_extended_search_auto) $r="\n"; $r.="\n"; //Champs fixes reset($this->fixedfields); $open_optgroup=0; $open_optgroup_deja_affiche=0; $open_optgroup_en_attente_affiche=0; while (list($id,$ff)=each($this->fixedfields)) { if ($ff["SEPARATOR"]) { if ($open_optgroup) $r.="\n"; // $r.="\n"; $r_opt_groupe="\n"; $open_optgroup=0; $open_optgroup_deja_affiche=0; $open_optgroup_en_attente_affiche=1; } if ($this->visibility($ff)) { if ($open_optgroup_en_attente_affiche && !$open_optgroup_deja_affiche) { $r.=$r_opt_groupe ; $open_optgroup_deja_affiche = 1 ; $open_optgroup_en_attente_affiche = 0 ; $open_optgroup = 1 ; } $r.="\n"; } } //Champs dynamiques if ($open_optgroup) $r.="\n"; // $r.="\n"; $r_custom=""; $custom_flag=false; if(!$this->dynamics_not_visible){ foreach ( $this->dynamicfields as $key => $value ) { if(!$this->pp[key]->no_special_fields){ $r_custom.="\n"; reset($this->pp[$key]->t_fields); while (list($id,$df)=each($this->pp[$key]->t_fields)) { if ($df["OPAC_SHOW"]) { $custom_flag=true; $r_custom.="\n"; } } $r_custom.="\n"; } } } if ($custom_flag) $r.=$r_custom; //Champs autorités perso if ($open_optgroup) $r.="\n"; $r_authperso=""; foreach($this->authpersos as $authperso){ if(!$authperso['opac_multi_search'])continue; $r_authperso.="\n"; $r_authperso.="\n"; foreach($authperso['fields'] as $field){ $r_authperso.="\n"; } $r_authperso.="\n"; } $r.=$r_authperso; //Champs speciaux while (list($id,$sf)=each($this->specialfields)) { if ($sf["OPACVISIBILITY"]) { if ($sf["SEPARATOR"]) { if ($open_optgroup) $r.="\n"; // $r.="\n"; $r.="\n"; $open_optgroup=1; } $r.="\n"; } } $r.=""; $search_form=str_replace("!!field_list!!",$r,$search_form); //Affichage des champs deja saisis $r=""; $n=0; $r.="\n"; for ($i=0; $ifixedfields[$f[1]]["NOTDISPLAYCOL"]){ $notdisplaycol=explode(",",$this->fixedfields[$f[1]]["NOTDISPLAYCOL"]); } } elseif ($f[0]=="s") { if($this->specialfields[$f[1]]["NOTDISPLAYCOL"]){ $notdisplaycol=explode(",",$this->specialfields[$f[1]]["NOTDISPLAYCOL"]); } } elseif (array_key_exists($f[0],$this->pp)) { if($this->pp[$f[0]]->t_fields[$f[1]]["NOTDISPLAYCOL"]){ $notdisplaycol=explode(",",$this->pp[$f[0]]->t_fields[$f[1]]["NOTDISPLAYCOL"]); } }elseif (array_key_exists($f[0],$this->pp)) { if($this->pp[$f[0]]->t_fields[$f[1]]["NOTDISPLAYCOL"]){ $notdisplaycol=explode(",",$this->pp[$f[0]]->t_fields[$f[1]]["NOTDISPLAYCOL"]); } } $r.=""; $r.=""; $r.=""; $r.=""; //Recherche des operateurs possibles $r.=""; //Affichage du champ de saisie $r.=""; $delnotallowed=false; if ($f[0]=="f") { $delnotallowed=$this->fixedfields[$f[1]]["DELNOTALLOWED"]; } elseif ($f[0]=="s") { $delnotallowed=$this->specialfields[$f[1]]["DELNOTALLOWED"]; } // global $onglet_persopac; if(!$limitsearch){ $r.=""; } $r.="\n"; //Si c'est le dernier, on afficher le bouton rechercher... if (($i==(count($search)-1))||(($delete_field==(count($search)-1))&&($i==(count($search)-2)))) $r.="\n"; $n++; } } $r.="
";//Colonne 1 $r.=""; $r.="";//Colonne 2 if ($n>0) { $inter="inter_".$i."_".$search[$i]; global $$inter; $r.=""; } else $r.=" ";//Colonne 2 $r.="";//Colonne 3 if ($f[0]=="f") { $r.=htmlentities($this->fixedfields[$f[1]]["TITLE"],ENT_QUOTES,$charset); } elseif ($f[0]=="s") { $r.=htmlentities($this->specialfields[$f[1]]["TITLE"],ENT_QUOTES,$charset); } elseif (array_key_exists($f[0],$this->pp)) { $r.=htmlentities($this->pp[$f[0]]->t_fields[$f[1]]["TITRE"],ENT_QUOTES,$charset); }elseif ($f[0]=="authperso") { $r.=htmlentities($this->authpersos[$f[1]]['name'],ENT_QUOTES,$charset); } $r.="";//Colonne 4 $op="op_".$i."_".$search[$i]; global $$op; if ($f[0]=="f") { $r.=""; } elseif (array_key_exists($f[0],$this->pp)) { $datatype=$this->pp[$f[0]]->t_fields[$f[1]]["DATATYPE"]; $type=$this->pp[$f[0]]->t_fields[$f[1]]["TYPE"]; $df=$this->get_id_from_datatype($datatype, $f[0]); $r.=""; $r.=" "; } elseif ($f[0]=="s") { //appel de la fonction get_input_box de la classe du champ special $type=$this->specialfields[$f[1]]["TYPE"]; for ($is=0; $istableau_speciaux["TYPE"]); $is++) { if ($this->tableau_speciaux["TYPE"][$is]["NAME"]==$type) { $sf=$this->specialfields[$f[1]]; require_once($include_path."/search_queries/specials/".$this->tableau_speciaux["TYPE"][$is]["PATH"]."/search.class.php"); $specialclass= new $this->tableau_speciaux["TYPE"][$is]["CLASS"]($f[1],$sf,$n,$this); $q=$specialclass->get_op(); if (count($q)) { $r.=""; } else print " "; break; } } } elseif ($f[0]=="authperso") { $r.=" ";//Colonne 5 $r.=$this->get_field($i,$n,$search[$i],$this->pp); $r.="".(!$delnotallowed?"":" ")."";//Colonne 6 $r.="
\n
\n"; //Recherche explicite $r.="\n"; $search_form=str_replace("!!already_selected_fields!!",$r,$search_form); $search_form .= "\n\n"; $search_form=str_replace("!!page!!",$page,$search_form); $search_form=str_replace("!!result_url!!",$result_url,$search_form); if ($result_target) $r="document.search_form.target='$result_target';"; else $r=""; $search_form=str_replace("!!target_js!!",$r,$search_form); return $search_form; } //Parse du fichier de configuration function parse_search_file($fichier_xml) { global $include_path; global $msg; global $charset,$base_path; if ($fichier_xml=="") { $fichier_xml = "search_fields"; } $filepath = $include_path."/search_queries/".$fichier_xml."_subst.xml"; if (!file_exists($filepath)) { $filepath = $include_path."/search_queries/".$fichier_xml.".xml"; } $fileInfo = pathinfo($filepath); $tempFile = $base_path."/temp/XML".preg_replace("/[^a-z0-9]/i","",$fileInfo['dirname'].$fileInfo['filename'].$charset).".tmp"; $dejaParse = false; if (file_exists($tempFile) ) { //Le fichier XML original a-t-il été modifié ultérieurement ? if (filemtime($filepath) > filemtime($tempFile)) { //on va re-générer le pseudo-cache unlink($tempFile); } else { $dejaParse = true; } } if ($dejaParse) { $tmp = fopen($tempFile, "r"); $cache = unserialize(fread($tmp,filesize($tempFile))); fclose($tmp); if(count($cache) == 8){ $this->memory_engine_allowed = $cache[0]; $this->operators = $cache[1]; $this->op_empty = $cache[2]; $this->fixedfields = $cache[3]; $this->dynamics_not_visible = $cache[4]; $this->dynamicfields = $cache[5]; $this->specialfields = $cache[6]; $this->tableau_speciaux = $cache[7]; }else{ //SOUCIS de cache... unlink($tempFile); $this->parse_search_file($fichier_xml); } } else { $fp=fopen($filepath,"r") or die("Can't find XML file"); $size=filesize($filepath); $xml=fread($fp,$size); fclose($fp); $param=_parser_text_no_function_($xml, "PMBFIELDS"); //Lecture parametre memory_engine_allowed if($param['MEMORYENGINEALLOWED'][0]['value'] && $param['MEMORYENGINEALLOWED'][0]['value']=='yes') { $this->memory_engine_allowed = true; } //Lecture des operateurs for ($i=0; $ioperators[$operator_["NAME"]]=$msg[substr($operator_["value"],4,strlen($operator_["value"])-4)]; } else { $this->operators[$operator_["NAME"]]=$operator_["value"]; } if ($operator_["EMPTYALLOWED"]=="yes") $this->op_empty[$operator_["NAME"]]=true; else $this->op_empty[$operator_["NAME"]]=false; } //Lecture des champs fixes for ($i=0; $ifixedfields[$ff["ID"]]=$t; } //Lecture des champs dynamiques if ($param["DYNAMICFIELDS"][0]["VISIBLE"]=="no") $this->dynamics_not_visible=true; if(!$param["DYNAMICFIELDS"][0]["FIELDTYPE"]){//Pour le cas de fichiers subst basés sur l'ancienne version $tmp=$param["DYNAMICFIELDS"][0]["FIELD"]; unset($param["DYNAMICFIELDS"]); $param["DYNAMICFIELDS"][0]["FIELDTYPE"][0]["PREFIX"]="d"; $param["DYNAMICFIELDS"][0]["FIELDTYPE"][0]["TYPE"]="notices"; $param["DYNAMICFIELDS"][0]["FIELDTYPE"][0]["FIELD"]=$tmp; unset($tmp); } for ($h=0; $h dynamicfields[$ft["PREFIX"]]=$champType; } //Lecture des champs speciaux for ($i=0; $ispecialfields[$sf["ID"]]=$t; } if (count($this->specialfields)!=0) { if (file_exists($include_path."/search_queries/specials/catalog_subst.xml")) { $nom_fichier=$include_path."/search_queries/specials/catalog_subst.xml"; } else { $nom_fichier=$include_path."/search_queries/specials/catalog.xml"; } $parametres=file_get_contents($nom_fichier); $this->tableau_speciaux=_parser_text_no_function_($parametres, "SPECIALFIELDS"); } $tmp = fopen($tempFile, "wb"); fwrite($tmp,serialize(array( $this->memory_engine_allowed, $this->operators, $this->op_empty, $this->fixedfields, $this->dynamics_not_visible, $this->dynamicfields, $this->specialfields, $this->tableau_speciaux, ))); fclose($tmp); } } // fin parse_search_file // pour la gestion avec la DSI, recopiee de la partie gestion function serialize_search() { global $search; $to_serialize=array(); $to_serialize["SEARCH"]=$search; for ($i=0; $ifixedfields[$s[1]]["TITLE"]; } elseif (array_key_exists($s[0],$this->pp)) { $title=$this->pp[$s[0]]->t_fields[$s[1]]["TITRE"]; } elseif ($s[0]=="s") { $title=$this->specialfields[$s[1]]["TITLE"]; } elseif ($s[0]=="authperso") { $title=$this->authpersos[$s[1]]['name']; } $op="op_".$i."_".$search[$i]; global $$op; $operator=$this->operators[$$op]; $field_="field_".$i."_".$search[$i]; global $$field_; $field=$$field_; //Recuperation des variables auxiliaires $fieldvar_="fieldvar_".$i."_".$search[$i]; global $$fieldvar_; $fieldvar=$$fieldvar_; if (!is_array($fieldvar)) $fieldvar=array(); $field_aff=array(); if (array_key_exists($s[0],$this->pp)) { $datatype=$this->pp[$s[0]]->t_fields[$s[1]]["DATATYPE"]; $df=$this->dynamicfields[$s[0]]["FIELD"][$this->get_id_from_datatype($datatype,$s[0])]; $q_index=$df["QUERIES_INDEX"]; $q=$df["QUERIES"][$q_index[$$op]]; if ($q["DEFAULT_OPERATOR"]) $operator_multi=$q["DEFAULT_OPERATOR"]; for ($j=0; $jpp[$s[0]]->get_formatted_output(array(0=>$field[$j]),$s[1]); } } elseif ($s[0]=="f") { $ff=$this->fixedfields[$s[1]]; $q_index=$ff["QUERIES_INDEX"]; $q=$ff["QUERIES"][$q_index[$$op]]; if ($q["DEFAULT_OPERATOR"]) $operator_multi=$q["DEFAULT_OPERATOR"]; switch ($this->fixedfields[$s[1]]["INPUT_TYPE"]) { case "list": $options=$this->fixedfields[$s[1]]["INPUT_OPTIONS"]["OPTIONS"][0]; $opt=array(); for ($j=0; $jfixedfields[$s[1]]["INPUT_OPTIONS"]["QUERY"][0]["value"]; if ($this->fixedfields[$s[1]]["INPUT_FILTERING"] == "yes") { $this->access_rights(); $requete = str_replace("!!acces_j!!", $this->tableau_access_rights["acces_j"], $requete); $requete = str_replace("!!statut_j!!", $this->tableau_access_rights["statut_j"], $requete); $requete = str_replace("!!statut_r!!", $this->tableau_access_rights["statut_r"], $requete); } $resultat=pmb_mysql_query($requete); $opt=array(); while ($r_=@pmb_mysql_fetch_row($resultat)) { $opt[$r_[0]]=$r_[1]; } for ($j=0; $jfixedfields[$s[1]]["INPUT_OPTIONS"]["NAME"][0]["value"]); for ($j=0; $jtable[$field[$j]]; } break; case "date": $field_aff[0]=format_date($field[0]); break; case "authoritie": for($j=0 ; $jrejete) $field[$j] = $aut->name.', '.$aut->rejete; else $field[$j] = $aut->name; if($aut->date) $field[$j] .= " ($aut->date)"; break; case "editeur": $ed = new publisher($field[$j]); $field[$j]=$ed->name; if ($ed->ville) if ($ed->pays) $field[$j].=" ($ed->ville - $ed->pays)"; else $field[$j].=" ($ed->ville)"; break; case "collection" : $coll = new collection($field[$j]); $field[$j] = $coll->name; break; case "subcollection" : $coll = new subcollection($field[$j]); $field[$j] = $coll->name; break; case "serie" : $serie = new serie($field[$j]); $field[$j] = $serie->name; break; case "indexint" : $indexint = new indexint($field[$j]); $field[$j] = $indexint->display ; break; case "titres_uniformes" : $tu = new titre_uniforme($field[$j]); $field[$j] = $tu->name; break; case "notice" : $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]."' "; $res=pmb_mysql_query($requete); if($res && pmb_mysql_num_rows($res)){ $field[$j] = pmb_mysql_result($res,0,0); } break; } } } $field_aff= $field; break; default: $field_aff=$field; break; } //Ajout des variables si necessaire reset($fieldvar); $fieldvar_aff=array(); while (list($var_name,$var_value)=each($fieldvar)) { //Recherche de la variable par son nom $vvar=$this->fixedfields[$s[1]]["VAR"]; for ($j=0; $jspecialfields[$s[1]]["TYPE"]; for ($is=0; $istableau_speciaux["TYPE"]); $is++) { if ($this->tableau_speciaux["TYPE"][$is]["NAME"]==$type) { $sf=$this->specialfields[$s[1]]; require_once($include_path."/search_queries/specials/".$this->tableau_speciaux["TYPE"][$is]["PATH"]."/search.class.php"); $specialclass= new $this->tableau_speciaux["TYPE"][$is]["CLASS"]($s[1],$i,$sf,$this); $field_aff=$specialclass->make_human_query(); $field_aff[0]=html_entity_decode(strip_tags($field_aff[0]),ENT_QUOTES,$charset); break; } } }elseif ($s[0]=="authperso") { $field_aff[0]=$field[0]; } switch ($this->operator_multi_value) { case "and": $op_list=$msg["search_and"]; break; case "or": $op_list=$msg["search_or"]; break; default: $op_list=$msg["search_or"]; break; } if(is_array($field_aff)){ $texte=implode(" ".$op_list." ",$field_aff); }else{ $texte=""; } if (count($fieldvar_aff)) $texte.=" [".implode(" ; ",$fieldvar_aff)."]"; $inter="inter_".$i."_".$search[$i]; global $$inter; switch ($$inter) { case "and": $inter_op=$msg["search_and"]; break; case "or": $inter_op=$msg["search_or"]; break; case "ex": $inter_op=$msg["search_exept"]; break; default: $inter_op=""; break; } if ($inter_op) $inter_op="".htmlentities($inter_op,ENT_QUOTES,$charset).""; $r.=$inter_op." ".htmlentities($title,ENT_QUOTES,$charset)." ".htmlentities($operator,ENT_QUOTES,$charset)." (".htmlentities($texte,ENT_QUOTES,$charset).") "; } return $r; } function push() { global $search; global $pile_search; $pile_search[]=$this->serialize_search(); for ($i=0; $iunserialize_search($pile_search[count($pile_search)-1]); $t=array(); for ($i=0; $ifixedfields as $id=>$values) { if ($values["UNIMARCFIELD"]) { $r[$values["UNIMARCFIELD"]]["TITLE"][]=$values["TITLE"]; foreach($values["QUERIES_INDEX"] as $op=>$top) { $r[$values["UNIMARCFIELD"]]["OPERATORS"][$op]=$this->operators[$op]; } } } return $r; } function destroy_global_env(){ global $search; for ($i=0; $iop_empty[$$op])) { $tt[$it]=$i; $it++; } } //Décalage des critères //1) copie des critères valides for ($i=0; $idestroy_global_env(); $search=array(); for ($i=0; $i$s) { if ($s[0]=="f") { if ($this->fixedfields[substr($s,2)] && ($this->fixedfields[substr($s,2)]['UNIMARCFIELD']!='FORBIDDEN')) { $saved_search[$k]=$s; } } elseif(array_key_exists($s[0],$this->pp)){ //Pas de recherche affiliée dans des champs personnalisés. } elseif ($s[0]=="s") { if ($this->specialfields[substr($s,2)] && ($this->specialfields[substr($s,2)]['UNIMARCFIELD']!='FORBIDDEN')) { $saved_search[$k]=$s; } }elseif (substr($s,0,9)=="authperso") { $saved_search[$k]=$s; } } $new_search=array(); $i=0; foreach($saved_search as $k=>$v) { $new_search['search'][$i]=$v; $old_inter="inter_".$k."_".$v; $new_inter="inter_".$i."_".$v; global $$old_inter; $new_search[$new_inter]=$$old_inter; $old_op="op_".$k."_".$v; $new_op="op_".$i."_".$v; global $$old_op; $new_search[$new_op]=$$old_op; $old_field="field_".$k."_".$v; $new_field="field_".$i."_".$v; global $$old_field; $new_search[$new_field]=$$old_field; $old_fieldvar="fieldvar_".$k."_".$v; $new_fieldvar="fieldvar_".$i."_".$v; global $$old_fieldvar; $new_search[$new_fieldvar]=$$old_fieldvar; $i++; } $this->destroy_global_env(); foreach($new_search as $k=>$va) { global $$k; $$k=$va; } } //Permet de savoir si la recherche utilise des champs qui ne sont pas autorisé dans les recherches externes ou affiliée function has_forbidden_fields() { global $search; $saved_search=array(); foreach($search as $k=>$s) { if ($s[0]=="f") { if ($this->fixedfields[substr($s,2)] && ($this->fixedfields[substr($s,2)]['UNIMARCFIELD']!='FORBIDDEN')) { $saved_search[$k]=$s; } } elseif(array_key_exists($s[0],$this->pp)){ //Pas de recherche affiliée dans des champs personnalisés. } elseif ($s[0]=="s") { if ($this->specialfields[substr($s,2)] && ($this->specialfields[substr($s,2)]['UNIMARCFIELD']!='FORBIDDEN')) { $saved_search[$k]=$s; } }elseif (substr($s,0,9)=="authperso") { $saved_search[$k]=$s; } } if(count($search) != count($saved_search)){ return true; }else{ return false; } } function get_current_search_map($mode_search=0){ global $opac_map_activate; global $opac_map_max_holds; global $dbh; global $javascript_path; global $opac_map_size_search_result; global $page; global $aut_id; $map = ""; if($opac_map_activate){ $map_hold = null; $current_search=$_SESSION["nb_queries"]; if($current_search<=0) $current_search = 0; $map_search_controler = new map_search_controler($map_hold, $current_search, $opac_map_max_holds,true); $map_search_controler->set_mode($current_search); $size=explode("*",$opac_map_size_search_result); if(count($size)!=2)$map_size="width:800px; height:480px;"; $map_size= "width:".$size[0]."px; height:".$size[1]."px;"; $map_search_controler->ajax = true; $map = " "; } return $map; } function unhistorize_search(){ global $include_path,$search; $es=new search(); $trouveHistoriqueDansCriteres=true; while($trouveHistoriqueDansCriteres){ $trouveHistoriqueDansCriteres=false; for ($i=0; $ispecialfields[$s[1]]; if ($s[0]=="s" && $sf["TYPE"]=="combine") { $trouveHistoriqueDansCriteres=true; require_once($include_path."/search_queries/specials/combine/search.class.php"); $sf=$es->specialfields[$s[1]]; $specialclass = new combine_search($s[1], $i, $sf, $es); $specialSearch = unserialize($specialclass->serialize_search()); $maxX=count($specialSearch["SEARCH"])-1; for($x=$maxX;$x>=0;$x--){ if($x!=$maxX){ $maxY=count($search)-1; for($y=$maxY;$y>=$i;$y--){ $search[($y+1)]=$search[$y]; $newField="field_".($y+1)."_".$search[$i]; $oldField="field_".$y."_".$search[$i]; $newOp="op_".($y+1)."_".$search[$i]; $oldOp="op_".$y."_".$search[$i]; $newFieldvar="fieldvar_".($y+1)."_".$search[$i]; $oldFieldvar="fieldvar_".$y."_".$search[$i]; $newInter="inter_".($y+1)."_".$search[$i]; $oldInter="inter_".$y."_".$search[$i]; global $$oldField,$$oldOp,$$oldFieldvar,$$oldInter; global $$newField,$$newOp,$$newFieldvar,$$newInter; $$newField=$$oldField; $$newOp=$$oldOp; $$newFieldvar=$$oldFieldvar; $$newInter=$$oldInter; } } $search[$i]=$specialSearch["SEARCH"][$x]; $field="field_".$i."_".$specialSearch["SEARCH"][$x]; $op="op_".$i."_".$specialSearch["SEARCH"][$x]; $var="var_".$i."_".$specialSearch["SEARCH"][$x]; $inter="inter_".$i."_".$specialSearch["SEARCH"][$x]; global $$field,$$op,$$var,$$inter; $$field=$specialSearch[$x]["FIELD"]; $s=explode("_",$search[$i]); $sf=$es->specialfields[$s[1]]; if ($s[0]=="s" && $sf["TYPE"]=="facette") { $$field=array(serialize($$field)); } $$op=$specialSearch[$x]["OP"]; $$fieldvar=$specialSearch[$x]["FIELDVAR"]; $$inter=$specialSearch[$x]["INTER"]; } break; } } } } } ?>