uid = $uid; $this->ufield=$ufield; $this->op=$op; $this->values=$values; $this->vars=$vars; $this->inter=$inter; } public function set_sub($sub) { $this->sub=$sub; } } class search { public $operators; public $op_empty; public $fixedfields; public $dynamicfields; public $dynamicfields_order; public $dynamicfields_hidebycustomname; public $specialfields; public $pp; public $error_message; public $link; public $link_expl; public $link_expl_bull; public $link_explnum; public $link_serial; public $link_analysis; public $link_bulletin; public $link_explnum_serial; public $link_explnum_analysis; public $link_explnum_bulletin; public $rec_history; public $tableau_speciaux; public $operator_multi_value; public $full_path=''; public $fichier_xml; public $dynamics_not_visible; public $specials_not_visible; public $isfichier = false; public $memory_engine_allowed = false; public $current_engine = 'MyISAM'; public $authpersos = array(); public $groups_used = false; public $groups = array(); public $keyName = ""; public $tableName = ""; public $limited_search = 0; /** * Script à appeler au chargement de la page (ne sert qu'à transmettre l'info au show_form()) * @var string */ protected $script_window_onload; public function __construct($rec_history=false,$fichier_xml="",$full_path='') { global $launch_search; $this->rec_history=$rec_history; $this->full_path = $full_path; $this->fichier_xml=$fichier_xml; $this->parse_search_file(); $this->strip_slashes(); foreach ( $this->dynamicfields as $key => $value ) { $this->pp[$key]=new parametres_perso($value["TYPE"]); } if(isset($this->dynamicfields['a'])) { $authpersos=authpersos::get_instance(); $this->authpersos=$authpersos->get_data(); } } //Parse du fichier de configuration protected function parse_search_file() { global $include_path,$base_path, $charset; global $msg, $KEY_CACHE_FILE_XML; global $lang; //-------------------LLIUREX 09/03/2018---------------- $lang=SESSlang; //------------------FIN LLIUREX 09/03/2018------------ $filepath = ""; if(!$this->full_path){ if ($this->fichier_xml == '') { $this->fichier_xml = 'search_fields'; } if (file_exists($include_path."/search_queries/".$this->fichier_xml."_subst.xml")) { $filepath = $include_path."/search_queries/".$this->fichier_xml."_subst.xml"; } else { $filepath = $include_path."/search_queries/".$this->fichier_xml.".xml"; } } else{ if (file_exists($this->full_path.$this->fichier_xml."_subst.xml")) { $filepath =$this->full_path.$this->fichier_xml."_subst.xml"; } else { $filepath =$this->full_path.$this->fichier_xml.".xml"; } } $fileInfo = pathinfo($filepath); $fileName = preg_replace("/[^a-z0-9]/i","",$fileInfo['dirname'].$fileInfo['filename'].$lang.$charset); $tempFile = $base_path."/temp/XML".$fileName.".tmp"; $dejaParse = false; $cache_php=cache_factory::getCache(); $key_file=""; if ($cache_php) { $key_file=getcwd().$fileName.filemtime($filepath); $key_file=$KEY_CACHE_FILE_XML.md5($key_file); if($tmp_key = $cache_php->getFromCache($key_file)){ if($cache = $cache_php->getFromCache($tmp_key)){ if(count($cache) == 15){ $this->groups_used = $cache[0]; $this->groups = $cache[1]; $this->memory_engine_allowed = $cache[2]; $this->operators = $cache[3]; $this->op_empty = $cache[4]; $this->fixedfields = $cache[5]; $this->dynamics_not_visible = $cache[6]; $this->dynamicfields_order = $cache[7]; $this->dynamicfields_hidebycustomname = $cache[8]; $this->dynamicfields = $cache[9]; $this->specials_not_visible = $cache[10]; $this->tableau_speciaux = $cache[11]; $this->keyName = $cache[12]; $this->tableName = $cache[13]; $this->specialfields = $cache[14]; $dejaParse = true; } } } }else{ 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) == 15){ $this->groups_used = $cache[0]; $this->groups = $cache[1]; $this->memory_engine_allowed = $cache[2]; $this->operators = $cache[3]; $this->op_empty = $cache[4]; $this->fixedfields = $cache[5]; $this->dynamics_not_visible = $cache[6]; $this->dynamicfields_order = $cache[7]; $this->dynamicfields_hidebycustomname = $cache[8]; $this->dynamicfields = $cache[9]; $this->specials_not_visible = $cache[10]; $this->tableau_speciaux = $cache[11]; $this->keyName = $cache[12]; $this->tableName = $cache[13]; $this->specialfields = $cache[14]; }else{ //SOUCIS de cache... unlink($tempFile); $dejaParse = false; } } } if(!$dejaParse){ if($this->fichier_xml == 'search_fields_opac') { $save_msg=$msg; $messages = new XMLlist("$base_path/temp/opac_lang.xml", 0); $messages->analyser(); $msg = $messages->table; } $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"); if(isset($param['GROUPS'])){ $this->groups_used = true; $this->groups = array(); foreach($param['GROUPS'][0]['GROUP'] as $group){ $this->groups[$group['ID']] = array( 'label' => (substr($group['LABEL'][0]['value'],0,4) == "msg:" ? $msg[substr($group['LABEL'][0]['value'],4,strlen($group['LABEL'][0]['value'])-4)] : $group['LABEL'][0]['value']), 'order' => $group['ORDER'][0]['value'] ); } uasort($this->groups, array($this, 'sort_groups')); } //Lecture parametre memory_engine_allowed if(isset($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 (isset($operator_["EMPTYALLOWED"]) && ($operator_["EMPTYALLOWED"]=="yes")) { $this->op_empty[$operator_["NAME"]]=true; }else { $this->op_empty[$operator_["NAME"]]=false; } } //Lecture des champs fixes for ($i=0; $igroups_used){ $t["GROUP"]=(isset($ff["GROUP"]) ? $ff["GROUP"] : ''); } $t["SEPARATOR"] = ''; if(isset($ff["SEPARATOR"])) { if (substr($ff["SEPARATOR"],0,4)=="msg:") { $t["SEPARATOR"]=$msg[substr($ff["SEPARATOR"],4,strlen($ff["SEPARATOR"])-4)]; } else { $t["SEPARATOR"]=$ff["SEPARATOR"]; } } //Visibilite if(isset($ff["VISIBLE"]) && $ff["VISIBLE"]=="no") $t["VISIBLE"]=false; else $t["VISIBLE"]=true; //Moteur memory if(isset($ff['MEMORYENGINEFORBIDDEN']) && $ff['MEMORYENGINEFORBIDDEN']=='yes') $t['MEMORYENGINEFORBIDDEN']=true; else $t['MEMORYENGINEFORBIDDEN']=false; //Variables $t["VAR"] = array(); if(isset($ff["VARIABLE"])) { for ($j=0; $j $subfieldrestrict['SUB_FIELD'][0]['value'], 'values' => explode(',', $subfieldrestrict['VALUES'][0]['value']), 'op' => $subfieldrestrict['OP'][0]['value'], 'not' => (isset($subfieldrestrict['NOT'][0]['value']) ? $subfieldrestrict['NOT'][0]['value'] : '') ); } } $q[0]['FIELDSRESTRICT'][] = array( 'field' => $fieldrestrict['FIELD'][0]['value'], 'values' => explode(',', $fieldrestrict['VALUES'][0]['value']), 'op' => $fieldrestrict['OP'][0]['value'], 'not' => (isset($fieldrestrict['NOT'][0]['value']) ? $fieldrestrict['NOT'][0]['value'] : ''), 'sub' => $subfieldsrestrict ); } } } else if (isset($ff["QUERY"][$j]['CLASS'][0]['TYPE'])){ $q[0]['TYPE'] = $ff["QUERY"][$j]['CLASS'][0]['TYPE']; if(isset($ff["QUERY"][$j]['CLASS'][0]['MODE'])){ $q[0]['MODE'] = $ff["QUERY"][$j]['CLASS'][0]['MODE']; } if(isset($ff["QUERY"][$j]['CLASS'][0]['FIELDRESTRICT']) && count($ff["QUERY"][$j]['CLASS'][0]['FIELDRESTRICT'])) { $q[0]['FIELDSRESTRICT'] = array(); foreach ($ff["QUERY"][$j]['CLASS'][0]['FIELDRESTRICT'] as $fieldrestrict) { $subfieldsrestrict = array(); if(isset($fieldrestrict['SUB'])) { foreach ($fieldrestrict['SUB'][0]['FIELDRESTRICT'] as $subfieldrestrict) { $subfieldsrestrict[] = array( 'sub_field' => $subfieldrestrict['SUB_FIELD'][0]['value'], 'values' => explode(',', $subfieldrestrict['VALUES'][0]['value']), 'op' => $subfieldrestrict['OP'][0]['value'], 'not' => (isset($subfieldrestrict['NOT'][0]['value']) ? $subfieldrestrict['NOT'][0]['value'] : '') ); } } $q[0]['FIELDSRESTRICT'][] = array( 'field' => $fieldrestrict['FIELD'][0]['value'], 'values' => explode(',', $fieldrestrict['VALUES'][0]['value']), 'op' => $fieldrestrict['OP'][0]['value'], 'not' => (isset($fieldrestrict['NOT'][0]['value']) ? $fieldrestrict['NOT'][0]['value'] : ''), 'sub' => $subfieldsrestrict ); } } } else { $q[0]['CLASS'] = $ff["QUERY"][$j]['CLASS'][0]['value']; } $q[0]['FOLDER'] = (isset($ff["QUERY"][$j]['CLASS'][0]['FOLDER']) ? $ff["QUERY"][$j]['CLASS'][0]['FOLDER'] : ''); $q[0]['FIELDS'] = (isset($ff["QUERY"][$j]['CLASS'][0]['FIELDS']) ? $ff["QUERY"][$j]['CLASS'][0]['FIELDS'] : ''); }else $q[0]["WORD"]=false; //fin modif arnaud if (isset($ff["QUERY"][$j]["ISBNSEARCH"]) && $ff["QUERY"][$j]["ISBNSEARCH"]=="yes") { $q[0]["ISBN"]=true; } else $q[0]["ISBN"]=false; if (isset($ff["QUERY"][$j]["DETECTDATE"])) { $q[0]["DETECTDATE"]=$ff["QUERY"][$j]["DETECTDATE"]; } else $q[0]["DETECTDATE"]=false; $q[0]["MAIN"]=(isset($ff["QUERY"][$j]["MAIN"][0]["value"]) ? $ff["QUERY"][$j]["MAIN"][0]["value"] : ''); $q[0]["MULTIPLE_TERM"]=(isset($ff["QUERY"][$j]["MULTIPLETERM"][0]["value"]) ? $ff["QUERY"][$j]["MULTIPLETERM"][0]["value"] : ''); $q[0]["MULTIPLE_OPERATOR"]=(isset($ff["QUERY"][$j]["MULTIPLEOPERATOR"][0]["value"]) ? $ff["QUERY"][$j]["MULTIPLEOPERATOR"][0]["value"] : ''); $t["QUERIES"][]=$q; $t["QUERIES_INDEX"][$q["OPERATOR"]]=count($t["QUERIES"])-1; } } // recuperation des visibilites parametrees $t["VARVIS"] = array(); if(isset($ff["VAR"])) { for ($j=0; $jfixedfields[$ff["ID"]]=$t; } //Lecture des champs dynamiques if (isset($param["DYNAMICFIELDS"][0]["VISIBLE"]) && $param["DYNAMICFIELDS"][0]["VISIBLE"]=="no") $this->dynamics_not_visible=true; if(!isset($param["DYNAMICFIELDS"][0]["FIELDTYPE"]) || !$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); } //Ordre des champs persos if (isset($param["DYNAMICFIELDS"][0]["OPTION"][0]["ORDER"])) { $this->dynamicfields_order=$param["DYNAMICFIELDS"][0]["OPTION"][0]["ORDER"]; } else { $this->dynamicfields_order=''; } for ($h=0; $h dynamicfields_hidebycustomname[$ft["TYPE"]]=$ft["HIDEBYCUSTOMNAME"]; } if($this->groups_used){ $champType["GROUP"]=(isset($ft["GROUP"]) ? $ft["GROUP"] : ''); } for ($i=0; $i $subfieldrestrict['SUB_FIELD'][0]['value'], 'values' => explode(',', $subfieldrestrict['VALUES'][0]['value']), 'op' => $subfieldrestrict['OP'][0]['value'], 'not' => (isset($subfieldrestrict['NOT'][0]['value']) ? $subfieldrestrict['NOT'][0]['value'] : '') ); } } $q['FIELDSRESTRICT'][] = array( 'field' => $fieldrestrict['FIELD'][0]['value'], 'values' => explode(',', $fieldrestrict['VALUES'][0]['value']), 'op' => $fieldrestrict['OP'][0]['value'], 'not' => (isset($fieldrestrict['NOT'][0]['value']) ? $fieldrestrict['NOT'][0]['value'] : ''), 'sub' => $subfieldsrestrict ); } } }elseif(isset($ff["QUERY"][$j]['CLASS'][0]['TYPE'])) { $q['TYPE'] = $ff["QUERY"][$j]['CLASS'][0]['TYPE']; if(isset($ff["QUERY"][$j]['CLASS'][0]['MODE'])){ $q['MODE'] = $ff["QUERY"][$j]['CLASS'][0]['MODE']; } if(isset($ff["QUERY"][$j]['CLASS'][0]['FIELDRESTRICT']) && count($ff["QUERY"][$j]['CLASS'][0]['FIELDRESTRICT'])) { $q['FIELDSRESTRICT'] = array(); foreach ($ff["QUERY"][$j]['CLASS'][0]['FIELDRESTRICT'] as $fieldrestrict) { $subfieldsrestrict = array(); if(isset($fieldrestrict['SUB'])) { foreach ($fieldrestrict['SUB'][0]['FIELDRESTRICT'] as $subfieldrestrict) { $subfieldsrestrict[] = array( 'sub_field' => $subfieldrestrict['SUB_FIELD'][0]['value'], 'values' => explode(',', $subfieldrestrict['VALUES'][0]['value']), 'op' => $subfieldrestrict['OP'][0]['value'], 'not' => (isset($subfieldrestrict['NOT'][0]['value']) ? $subfieldrestrict['NOT'][0]['value'] : '') ); } } $q['FIELDSRESTRICT'][] = array( 'field' => $fieldrestrict['FIELD'][0]['value'], 'values' => explode(',', $fieldrestrict['VALUES'][0]['value']), 'op' => $fieldrestrict['OP'][0]['value'], 'not' => (isset($fieldrestrict['NOT'][0]['value']) ? $fieldrestrict['NOT'][0]['value'] : ''), 'sub' => $subfieldsrestrict ); } } }else{ $q['CLASS'] = $ff["QUERY"][$j]['CLASS'][0]['value']; } $q['FOLDER'] = (isset($ff["QUERY"][$j]['CLASS'][0]['FOLDER']) ? $ff["QUERY"][$j]['CLASS'][0]['FOLDER'] : ''); $q['FIELDS'] = (isset($ff["QUERY"][$j]['CLASS'][0]['FIELDS']) ? $ff["QUERY"][$j]['CLASS'][0]['FIELDS'] : ''); }else $q["WORD"]=false; if (isset($ff["QUERY"][$j]['SEARCHABLEONLY']) && $ff["QUERY"][$j]['SEARCHABLEONLY']=="yes"){ $q["SEARCHABLEONLY"]=true; }else $q["SEARCHABLEONLY"]=false; //fin modif arnaud $q["MAIN"]=(isset($ff["QUERY"][$j]["MAIN"][0]["value"]) ? $ff["QUERY"][$j]["MAIN"][0]["value"] : ''); $q["MULTIPLE_TERM"]=(isset($ff["QUERY"][$j]["MULTIPLETERM"][0]["value"]) ? $ff["QUERY"][$j]["MULTIPLETERM"][0]["value"] : ''); $q["MULTIPLE_OPERATOR"]=(isset($ff["QUERY"][$j]["MULTIPLEOPERATOR"][0]["value"]) ? $ff["QUERY"][$j]["MULTIPLEOPERATOR"][0]["value"] : ''); $t["QUERIES"][]=$q; $t["QUERIES_INDEX"][$q["OPERATOR"]]=count($t["QUERIES"])-1; } $champType["FIELD"][$ff["ID"]]=$t; } $this->dynamicfields[$ft["PREFIX"]]=$champType; } //Lecture des champs speciaux if (isset($param["SPECIALFIELDS"][0]["VISIBLE"]) && $param["SPECIALFIELDS"][0]["VISIBLE"]=="no") { $this->specials_not_visible=true; } for ($i=0; $igroups_used){ $t["GROUP"]=(isset($sf["GROUP"]) ? $sf["GROUP"] : ''); } $t["NOTDISPLAYCOL"]=(isset($sf["NOTDISPLAYCOL"]) ? $sf["NOTDISPLAYCOL"] : ''); $t["UNIMARCFIELD"]=(isset($sf["UNIMARCFIELD"]) ? $sf["UNIMARCFIELD"] : ''); $t["SEPARATOR"]=''; if(isset($sf["SEPARATOR"])) { if (substr($sf["SEPARATOR"],0,4)=="msg:") { $t["SEPARATOR"]=$msg[substr($sf["SEPARATOR"],4,strlen($sf["SEPARATOR"])-4)]; } else { $t["SEPARATOR"]=$sf["SEPARATOR"]; } } $t["TYPE"]=$sf["TYPE"]; //Visibilite if(isset($sf["VISIBLE"]) && $sf["VISIBLE"]=="no") $t["VISIBLE"]=false; else $t["VISIBLE"]=true; if(isset($sf["DELNOTALLOWED"]) && $sf["DELNOTALLOWED"] == "yes") $t["DELNOTALLOWED"]=true; else $t["DELNOTALLOWED"]=false; $this->specialfields[$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"); } $this->keyName = (isset($param["KEYNAME"][0]["value"]) ? $param["KEYNAME"][0]["value"] : ''); if($this->fichier_xml == 'search_fields_authorities') { if(!$this->keyName) { $this->keyName="id_authority"; } $this->tableName="authorities"; } else { if(!$this->keyName) { $this->keyName="notice_id"; } $this->tableName="notices"; } $tmp_array_cache=array( $this->groups_used, $this->groups, $this->memory_engine_allowed, $this->operators, $this->op_empty, $this->fixedfields, $this->dynamics_not_visible, $this->dynamicfields_order, $this->dynamicfields_hidebycustomname, $this->dynamicfields, $this->specials_not_visible, $this->tableau_speciaux, $this->keyName, $this->tableName, $this->specialfields); if ($key_file) { $key_file_content=$KEY_CACHE_FILE_XML.md5(serialize($tmp_array_cache)); $cache_php->setInCache($key_file_content, $tmp_array_cache); $cache_php->setInCache($key_file,$key_file_content); }else{ $tmp = fopen($tempFile, "wb"); fwrite($tmp,serialize($tmp_array_cache)); fclose($tmp); } if($this->fichier_xml == 'search_fields_opac') { $msg = $save_msg; } } } // fin parse_search_file protected function strip_slashes() { global $search, $explicit_search; if(isset($search) && is_array($search)) { for ($i=0; $iget_global_value("field_".$i."_".$search[$i]); for ($j=0; $jget_global_value("field_".$i."_".$search[$i]."_1"); 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; } } } $this->set_global_value("field_".$i."_".$search[$i], $field); $this->set_global_value("field_".$i."_".$search[$i]."_1", $field1); } } } protected function get_id_from_datatype($datatype, $fieldType = "d") { if(!is_array($this->dynamicfields[$fieldType]["FIELD"])) return ''; foreach($this->dynamicfields[$fieldType]["FIELD"] as $key => $val){ if ($val["DATATYPE"]==$datatype) return $key; } return ''; } protected function get_completion_selection_field($i,$n,$search, $v, $params=array()) { global $charset; global $msg; $fnamesans="field_".$n."_".$search; $fname="field_".$n."_".$search."[]"; $fname_id="field_".$n."_".$search."_id"; $fnamesanslib="field_".$n."_".$search."_lib"; $fnamelib="field_".$n."_".$search."_lib[]"; $selector = $params['selector']; $p1 = $params['p1']; $p2 = $params['p2']; $op = $this->get_global_value("op_".$i."_".$search); $v=$this->clean_completion_empty_values($v); $nb_values=count($v); if(!$nb_values){ //Création de la ligne $nb_values=1; } $nb_max_aut=$nb_values-1; $r = ""; $r.= ""; $r.= "fichier_xml."&search_field_id=".$search."&deb_rech=&callback=selectionSelected&infield=".$fnamesans."_0', 'select_selection', 400, 400, -2, -2, 'scrollbars=yes, toolbar=no, dependent=yes, resizable=yes')\" type=\"button\">"; $r.= ""; $r.= ""; $r.= "
"; for($inc=0;$inc<$nb_values;$inc++){ if(!isset($v[$inc])) $v[$inc] = ''; $r.=""; switch ($op) { case 'EQ': if($v[$inc]){ $libelle = $this->get_selector_display($v[$inc], $params['selector'], $search); }else{ $libelle = ""; } break; default: $libelle = $v[$inc]; break; } $r.=" "; $r.= ""; $r.= "
"; } $r.= "
"; if($nb_values>1){ $r.=""; } return $r; } protected function get_completion_authority_field($i,$n,$search, $v, $params=array()) { global $charset; global $opac_thesaurus; global $msg; $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"; $authperso_id = 0; if($params['selector'] == 'authperso') { if($authperso_id_pos = strrpos($search,'_')) { $authperso_id = substr($search,$authperso_id_pos+1); } } $selector = $params['selector']; $p1 = $params['p1']; $p2 = $params['p2']; if($params['ajax'] == "categories" and $opac_thesaurus == 1){ $fnamevar_id = "linkfield=\"fieldvar_".$n."_".$search."[id_thesaurus][]\""; $fnamevar_id_js = "fieldvar_".$n."_".$search."[id_thesaurus][]"; }else if($params['ajax'] == "onto"){ switch ($params['att_id_filter']) { case "http://www.w3.org/2004/02/skos/core#ConceptScheme" : $element = 'conceptscheme'; break; default : $element = 'concept'; break; } $selector .= "&dyn=4&element=".$element."&return_concept_id=1"; if (!$params['att_id_filter']) { $params['att_id_filter'] = 'http://www.w3.org/2004/02/skos/core#Concept'; } $fnamevar_id = "linkfield=\"fieldvar_".$n."_".$search."[id_scheme][]\" att_id_filter=\"".$params['att_id_filter']."\""; $fnamevar_id_js = "fieldvar_".$n."_".$search."[id_scheme][]"; }else if($params['ajax'] == "vedette"){ $selector .= "&grammars=notice_authors,tu_authors"; $fnamevar_id = "linkfield=\"fieldvar_".$n."_".$search."[grammars][]\""; $fnamevar_id_js = "fieldvar_".$n."_".$search."[grammars][]"; }else{ $fnamevar_id = ""; $fnamevar_id_js = ""; } $op = $this->get_global_value("op_".$i."_".$search); $fieldvar=$this->get_global_value("fieldvar_".$i."_".$search); $v=$this->clean_completion_empty_values($v); $nb_values=count($v); if(!$nb_values){ //Création de la ligne $nb_values=1; } $nb_max_aut=$nb_values-1; $r = ""; $r.= ""; $r.= ""; $r.= ""; $r.= ""; $r.= "
"; for($inc=0;$inc<$nb_values;$inc++){ if(!isset($v[$inc])) $v[$inc] = ''; switch ($op) { case 'AUTHORITY': if ($params['selector'] == 'ontology') { // On vérifie si c'est un id transmis if ($v[$inc] && !is_numeric($v[$inc])) { // C'est une uri $v[$inc] = onto_common_uri::get_id($v[$inc]); } } if($v[$inc]!= 0){ $libelle = self::get_authoritie_display($v[$inc], $params['selector']); }else{ $libelle = ""; } break; default: $libelle = $v[$inc]; break; } $r.=""; $r.=" "; $r.= ""; $r.= ""; $r.= "
"; } $r.= "
"; if($nb_values>1){ $r.=""; } return $r; } public function get_options_list_field($ff, $start='', $limit=0) { $list = array(); switch ($ff["INPUT_TYPE"]) { case 'query_list': $requete=$ff["INPUT_OPTIONS"]["QUERY"][0]["value"]; if (isset($ff["INPUT_OPTIONS"]["FILTERING"])) { if ($ff["INPUT_OPTIONS"]["FILTERING"] == "yes") { $requete = str_replace("!!acces_j!!", "", $requete); $requete = str_replace("!!statut_j!!", "", $requete); $requete = str_replace("!!statut_r!!", "", $requete); } } if(isset($ff["INPUT_OPTIONS"]["QUERY"][0]["USE_GLOBAL"])) { $use_global = explode(",", $ff["INPUT_OPTIONS"]["QUERY"][0]["USE_GLOBAL"]); for($j=0; $jtable; $tmp=array_map("convert_diacrit",$tmp);//On enlève les accents $tmp=array_map("strtoupper",$tmp);//On met en majuscule asort($tmp);//Tri sur les valeurs en majuscule sans accent foreach ( $tmp as $key => $value ) { $tmp[$key]=$options->table[$key];//On reprend les bons couples clé / libellé } $options->table=$tmp; reset($options->table); // gestion restriction par code utilise. $existrestrict=false; $restrictqueryarray=array(); 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; } } } while (list($key,$val)=each($options->table)) { if (!$start || strtolower(substr($val,0,strlen($start)))==strtolower($start)) { if ((!$existrestrict) || (array_search($key,$restrictqueryarray)!==false)) { $list[$key] = $val; } } } break; } if($limit) { $list = array_slice($list, 0, $limit, true); } return $list; } protected function get_variable_field($var_field,$n,$search,$var_table,$fieldvar) { global $charset, $msg; $variable_field = ''; if ($var_field["TYPE"]=="input") { $varname=$var_field["NAME"]; $visibility=1; if(isset($var_field["OPTIONS"]["VAR"][0])) { $vis=$var_field["OPTIONS"]["VAR"][0]; if ($vis["NAME"]) { $vis_name=$vis["NAME"]; global ${$vis_name}; if ($vis["VISIBILITY"]=="no") $visibility=0; for ($k=0; $k"; } if (isset($var_field["OPTIONS"]["INPUT"][0]["CLASS"]) && $var_field["OPTIONS"]["INPUT"][0]["CLASS"]) { $variable_field.=""; } if (isset($var_field["SPAN"]) && $var_field["SPAN"]) { $variable_field.="".$var_field["COMMENT"].""; } else { $variable_field.=htmlentities($var_field["COMMENT"], ENT_QUOTES, $charset); } $input=$var_field["OPTIONS"]["INPUT"][0]; switch ($input["TYPE"]) { case "query_list": if ((!isset($fieldvar[$varname]) || !$fieldvar[$varname])&&($default)) $fieldvar[$varname][0]=$default; $variable_field.=" "; if (isset($var_field["OPTIONS"]["INPUT"][0]["CLASS"]) && $var_field["OPTIONS"]["INPUT"][0]["CLASS"]) { $variable_field.=""; } break; case "checkbox" : if(!isset($input["DEFAULT_ON"]) || !$input["DEFAULT_ON"]){ if ((!isset($fieldvar[$varname]) || !$fieldvar[$varname])&&($default)) $fieldvar[$varname][0]=$default; } elseif(!$fieldvar[$input["DEFAULT_ON"]][0]) $fieldvar[$varname][0] =$default; $variable_field.=" "; if (isset($var_field["OPTIONS"]["INPUT"][0]["CLASS"]) && $var_field["OPTIONS"]["INPUT"][0]["CLASS"]) { $variable_field.=""; } break; } if(isset($var_field["CLASS"]) && $var_field["CLASS"]) { $variable_field.=""; } $variable_field.=""; } else { if($vis["HIDDEN"] != "no") $variable_field.=""; } } return $variable_field; } protected 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 $pmb_map_base_layer_type; global $pmb_map_base_layer_params; global $pmb_map_size_search_edition, $pmb_map_bounding_box; $r=""; $s=explode("_",$search); //Champ $v=$this->get_global_value("field_".$i."_".$search); if ($v=="") $v=array(); $v1=$this->get_global_value("field_".$i."_".$search.'_1'); if ($v1=="") $v1=array(); //Variables $fieldvar=$this->get_global_value("fieldvar_".$i."_".$search); if ($s[0]=="f") { //Champs fixes $ff=$this->fixedfields[$s[1]]; //Variables globales et input for ($j=0; $jget_variable_field($ff["VAR"][$j],$n,$search,$var_table,$fieldvar); } else { $r_bottom .= $this->get_variable_field($ff["VAR"][$j],$n,$search,$var_table,$fieldvar); } } //Affichage des variables ayant l'attribut place='top' $r.=$r_top; switch ($ff["INPUT_TYPE"]) { case "authoritie_external": $op = "op_".$i."_".$search; global ${$op}; $libelle = ""; if (${$op} == "AUTHORITY"){ if($v[0]!= 0){ $libelle = self::get_authoritie_display($v[0], $ff['INPUT_OPTIONS']['SELECTOR']); } ${$op} == "BOOLEAN"; $r.=""; } if($libelle){ $r.=""; }else{ $r.=""; } break; case "authoritie": $params = array( 'ajax' => $ff["INPUT_OPTIONS"]["AJAX"], 'selector' => $ff["INPUT_OPTIONS"]["SELECTOR"], 'p1' => $ff["INPUT_OPTIONS"]["P1"], 'p2' => $ff["INPUT_OPTIONS"]["P2"], 'att_id_filter' => (isset($ff["INPUT_OPTIONS"]["ATT_ID_FILTER"]) ? $ff["INPUT_OPTIONS"]["ATT_ID_FILTER"] : '') ); $r.= $this->get_completion_authority_field($i,$n,$search, $v, $params); break; case "text": $input_placeholder = ''; if(isset($ff['INPUT_OPTIONS']['PLACEHOLDER'])) { 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"]; } } if(!isset($v[0])) $v[0] = ''; $r.=""; break; case "query_list": case "list": case "marc_list": if(isset($ff["INPUT_OPTIONS"]["COMPLETION"]) && $ff["INPUT_OPTIONS"]["COMPLETION"] == 'yes') { $params = array( 'ajax' => $ff["INPUT_TYPE"], 'selector' => $ff["INPUT_TYPE"], 'p1' => 'p1', 'p2' => 'p2' ); $r.=$this->get_completion_selection_field($i,$n,$search, $v, $params); } else { $r.=""; } break; case "date": if(!isset($v[0])) $v[0] = ''; $field['VALUES'][0]=$v[0]; if(!isset($v1[0])) $v1[0] = ''; $field['VALUES1'][0]=$v1[0]; $r.="".$aff_list_empr_search['date_box']($field, $check_scripts, "field_".$n."_".$search).""; break; case "map" : $layer_params = json_decode($pmb_map_base_layer_params,true); $baselayer = "baseLayerType: dojox.geo.openlayers.BaseLayerType.".$pmb_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']); } $initialFit = ''; if(!count($v)) { if( $pmb_map_bounding_box) { $map_bounding_box = $pmb_map_bounding_box; } else { $map_bounding_box = '-5 50,9 50,9 40,-5 40,-5 50'; } $map_hold = new map_hold_polygon("bounding", 0, "polygon((".$map_bounding_box."))"); if ($map_hold) { $coords = $map_hold->get_coords(); $initialFit = explode(',', map_objects_controler::get_coord_initialFit($coords)); } else{ $initialFit = array(0, 0, 0, 0); } } $size=explode("*",$pmb_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; } //Affichage des variables n'ayant pas l'attribut place='top' $r.=$r_bottom; } 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']."_".$n; $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']=$this->pp[$s[0]]->t_fields[$s[1]]['OPTIONS']; $field['VALUES']=$v; $field['VALUES1']=$v1; $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") { $params = array( 'ajax' => $s[0].'_'.$s[1], 'selector' => $s[0], 'p1' => 'p1', 'p2' => 'p2' ); $r = $this->get_completion_authority_field($i,$n,$search, $v, $params); }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]]; if ($this->full_path && file_exists($this->full_path."/specials/".$this->tableau_speciaux["TYPE"][$is]["PATH"]."/search.class.php")) require_once($this->full_path."/specials/".$this->tableau_speciaux["TYPE"][$is]["PATH"]."/search.class.php"); else 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; } public function make_search($prefixe="") { global $search; global $dbh; global $msg; global $include_path; global $pmb_multi_search_operator; global $pmb_search_stemming_active; $this->error_message=""; $main=""; $last_table=""; $field_keyName=$this->keyName; $field_tableName=$this->tableName; //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] = ""; } if (!$this->op_empty[${$op}]) { // nettoyage des valeurs if (${$op}=='AUTHORITY') { $field = $this->clean_completion_empty_values($field); } else { $field = $this->clean_empty_values($field); } } //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 (isset($q[$z]["FULLTEXT"]) && $q[$z]["FULLTEXT"]) $is_fulltext=true; if (isset($q[$z]["KEEP_EMPTY_WORDS"]) && $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"],(!empty($q[$z]["RESTRICT"]) ? $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"],(!empty($q[$z]["RESTRICT"]) ? $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 ".$field_keyName." from ".$this->tableName." where ".$field_keyName."=0"; $this->error_message=sprintf($msg["searcher_syntax_error_desc"],$aq->current_car,$aq->input_html,$aq->error_message); } }else if ($q[$z]["WORD"]){ //Pour savoir si la recherche tous champs inclut les docnum ou pas global $mutli_crit_indexation_docnum_allfields; if(isset($var_table["is_num"]) && $var_table["is_num"]){ $mutli_crit_indexation_docnum_allfields=1; }else{ $mutli_crit_indexation_docnum_allfields=-1; } //Pour savoir si la recherche inclu les oeuvres global $mutli_crit_indexation_oeuvre_title; if(isset($var_table["oeuvre_query"]) && $var_table["oeuvre_query"]){ $mutli_crit_indexation_oeuvre_title=1; }else{ $mutli_crit_indexation_oeuvre_title=-1; } if(isset($q[$z]['TYPE']) && $q[$z]['TYPE']){ $mode = ''; if(isset($q[$z]['MODE'])){ $mode = $q[$z]['MODE']; } if($q[$z]["FIELDS"]){ $searcher = searcher_factory::get_searcher($q[$z]['TYPE'], $mode,$field[$j],$q[$z]["FIELDS"]); }else{ $searcher = searcher_factory::get_searcher($q[$z]['TYPE'], $mode, $field[$j]); } }else{ //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]); } } if(isset($q[$z]['FIELDSRESTRICT']) && is_array($q[$z]['FIELDSRESTRICT'])) { $searcher->add_fields_restrict($q[$z]['FIELDSRESTRICT']); } $main = $searcher->get_full_query(); }else{ $field[$j]=str_replace('*', '%', $field[$j]); $main=str_replace("!!p!!",addslashes($field[$j]),$main); $main=str_replace("!!p1!!",(isset($field1[$j]) ? addslashes($field1[$j]) : ''),$main); } //Y-a-t-il une close repeat ? if (isset($q[$z]["REPEAT"]) && $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) { $this->gen_temporary_table($prefixe."mf_".$j, $main); } else { $this->gen_temporary_table("mf_".$j, $main); } 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) { $this->gen_temporary_table($prefixe."mf_".$j, $main); } else { $this->gen_temporary_table("mf_".$j, $main); } if ($last_main_table) { if($j>1){ $search_table=$last_main_table; }else{ $search_table=$last_tables; } if ($prefixe) { $requete="create temporary table ".$prefixe."and_result_".$j." ENGINE=".$this->current_engine." select ".$search_table.".* from ".$search_table." where exists ( select ".$prefixe."mf_".$j.".* from ".$prefixe."mf_".$j." where ".$search_table.".notice_id=".$prefixe."mf_".$j.".notice_id)"; } else { $requete="create temporary table and_result_".$j." ENGINE=".$this->current_engine." select ".$search_table.".* from ".$search_table." where exists ( select mf_".$j.".* from mf_".$j." where ".$search_table.".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; $jpp[$s[0]]->t_fields[$s[1]]['TYPE'].".class.php")) { require_once($include_path."/search_queries/dynamics/dynamic_search_".$this->pp[$s[0]]->t_fields[$s[1]]['TYPE'].".class.php"); $dynamic_class_name = "dynamic_search_".$this->pp[$s[0]]->t_fields[$s[1]]['TYPE']; $dynamic_class = new $dynamic_class_name($s[1],$s[0], $i,$df,$this); $main = $dynamic_class->get_query($field[$j]); } else { if($q["KEEP_EMPTYWORD"]) $field[$j]=strip_empty_chars($field[$j]); elseif ($q["REGDIACRIT"]) $field[$j]=strip_empty_words($field[$j]); $main=$q["MAIN"]; //Si il y a plusieurs termes possibles if ($q["MULTIPLE_WORDS"]) { $terms=explode(" ",$field[$j]); //Pour chaque terme $multiple_terms=array(); for ($k=0; $kadd_fields_restrict($q['FIELDSRESTRICT']); } $main = $searcher->get_full_query(); } else { $field[$j]=str_replace('*', '%', $field[$j]); $main=str_replace("!!p!!",addslashes($field[$j]),$main); $main=str_replace("!!p1!!",addslashes($field1[$j]),$main); } $main=str_replace("!!field!!",$s[1],$main); } //Choix de l'operateur dans la liste if(isset($q["DEFAULT_OPERATOR"])){ $operator=$q["DEFAULT_OPERATOR"]; } else { $operator = ($pmb_multi_search_operator?$pmb_multi_search_operator:"or"); } if (count($field)>1) { if($operator == "or"){ //Ou logique si plusieurs valeurs if ($prefixe) { $this->gen_temporary_table($prefixe."mf_".$j, $main); } else { $this->gen_temporary_table("mf_".$j, $main); } 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) { $this->gen_temporary_table($prefixe."mf_".$j, $main); } else { $this->gen_temporary_table("mf_".$j, $main); } if ($last_main_table) { if($j>1){ $search_table=$last_main_table; }else{ $search_table=$last_tables; } if ($prefixe) { $requete="create temporary table ".$prefixe."and_result_".$j." ENGINE=".$this->current_engine." select ".$search_table.".* from ".$search_table." where exists ( select ".$prefixe."mf_".$j.".* from ".$prefixe."mf_".$j." where ".$search_table.".notice_id=".$prefixe."mf_".$j.".notice_id)"; } else { $requete="create temporary table and_result_".$j." ENGINE=".$this->current_engine." select ".$search_table.".* from ".$search_table." where exists ( select mf_".$j.".* from mf_".$j." where ".$search_table.".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") { //on est sur le cas de la recherche "Tous les champs" de l'autorité perso //$s["1"] vaut l'identifiant du type d'autorité perso $df=$this->dynamicfields["a"]["FIELD"]["10"]; $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(isset($fieldvar["operator_between_multiple_authorities"])){ $operator=$fieldvar["operator_between_multiple_authorities"][0]; } elseif(isset($q["DEFAULT_OPERATOR"])){ $operator=$q["DEFAULT_OPERATOR"]; } else { $operator = ($pmb_multi_search_operator?$pmb_multi_search_operator:"or"); } if (count($field)>1) { if($operator == "or"){ //Ou logique si plusieurs valeurs if ($prefixe) { $this->gen_temporary_table($prefixe."mf_".$j, $main); } else { $this->gen_temporary_table("mf_".$j, $main); } 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) { $this->gen_temporary_table($prefixe."mf_".$j, $main); } else { $this->gen_temporary_table("mf_".$j, $main); } if ($last_main_table) { if($j>1){ $search_table=$last_main_table; }else{ $search_table=$last_tables; } if ($prefixe) { $requete="create temporary table ".$prefixe."and_result_".$j." ENGINE=".$this->current_engine." select ".$search_table.".* from ".$search_table." where exists ( select ".$prefixe."mf_".$j.".* from ".$prefixe."mf_".$j." where ".$search_table.".notice_id=".$prefixe."mf_".$j.".notice_id)"; } else { $requete="create temporary table and_result_".$j." ENGINE=".$this->current_engine." select ".$search_table.".* from ".$search_table." where exists ( select mf_".$j.".* from mf_".$j." where ".$search_table.".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; } if ($prefixe) { $table=$prefixe."t_".$i."_".$search[$i]; $this->gen_temporary_table($table, $main, true); } else { $table="t_".$i."_".$search[$i]; $this->gen_temporary_table($table, $main, true); } if ($last_main_table) { $requete="drop table ".$last_main_table; pmb_mysql_query($requete); } if ($prefixe) { $requete="create temporary table ".$prefixe."t".$i." ENGINE=".$this->current_engine." "; } else { $requete="create temporary table t".$i." ENGINE=".$this->current_engine." "; } $isfirst_criteria=false; switch (${$inter}) { case "and": //TODO AR/AP Test, first criteria; $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.".".$field_keyName."=".$last_table.".".$field_keyName." group by ".$field_keyName; @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 { //TODO AR/AP Test, SUM PERT $requete.="select * from ".$table; @pmb_mysql_query($requete,$dbh); if ($prefixe) { $requete="alter table ".$prefixe."t".$i." add idiot int(1)"; @pmb_mysql_query($requete); $requete="alter table ".$prefixe."t".$i." add unique($field_keyName)"; @pmb_mysql_query($requete); } else { $requete="alter table t".$i." add idiot int(1)"; @pmb_mysql_query($requete); $requete="alter table t".$i." add unique($field_keyName)"; @pmb_mysql_query($requete); } if ($prefixe) { $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"; } else { $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"; //print $requete; } @pmb_mysql_query($requete,$dbh); } break; case "ex": //TODO AR/AP Test, TRY DELETE //$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 ".$last_table.".* from $last_table left join ".$table." on ".$table.".$field_keyName=".$last_table.".$field_keyName where ".$table.".$field_keyName is null"; @pmb_mysql_query($requete); //$requete="drop table ".$table."_b"; //@pmb_mysql_query($requete); if ($prefixe) { $requete="alter table ".$prefixe."t".$i." add idiot int(1)"; @pmb_mysql_query($requete); $requete="alter table ".$prefixe."t".$i." add unique(".$field_keyName.")"; @pmb_mysql_query($requete); } else { $requete="alter table t".$i." add idiot int(1)"; @pmb_mysql_query($requete); $requete="alter table t".$i." add unique(".$field_keyName.")"; @pmb_mysql_query($requete); } break; default: $isfirst_criteria=true; if ($prefixe) { $requete="create temporary table ".$prefixe."t".$i." ( idiot int(1), ".$field_keyName." int(1) ) ENGINE=".$this->current_engine." "; @pmb_mysql_query($requete, $dbh); $requete="alter table ".$prefixe."t".$i." add unique(".$field_keyName.")"; @pmb_mysql_query($requete, $dbh); } else { $requete="create temporary table t".$i." ( idiot int(1), ".$field_keyName." int(1) ) ENGINE=".$this->current_engine." "; @pmb_mysql_query($requete, $dbh); $requete="alter table t".$i." add unique(".$field_keyName.")"; @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; } public function make_hidden_search_form($url,$form_name="search_form",$target="",$close_form=true) { $r="
make_hidden_form_content(); if ($close_form) $r.="
"; return $r; } public function make_hidden_form_content() { global $search; global $charset; global $page; global $nb_per_page_custom; $r=''; for ($i=0; $iget_global_value($field_); $field1_="field_".$i."_".$search[$i]."_1"; $field1=$this->get_global_value($field1_); $s=explode("_",$search[$i]); $type=''; if ($s[0]=="s") { //instancier la classe de traitement du champ special $type=$this->specialfields[$s[1]]["TYPE"]; } //Recuperation des variables auxiliaires $fieldvar_="fieldvar_".$i."_".$search[$i]; $fieldvar=$this->get_global_value($fieldvar_); if (!is_array($fieldvar)) $fieldvar=array(); // si sélection d'autorité et champ vide : on ne doit pas le prendre en compte if(${$op}=='AUTHORITY'){ $field = $this->clean_completion_empty_values($field); }elseif(${$op}=='EQ'){ $field = $this->clean_empty_values($field); } $r.=""; $r.=""; $r.=""; if ($type=='facette') { $r.="\n"; } else { for ($j=0; $j$value) { $r.=""; } } else { $r.=""; } } } if(is_array($field1)) { for ($j=0; $j$value) { $r.=""; } } else { $r.=""; } } } reset($fieldvar); while (list($var_name,$var_value)=each($fieldvar)) { for ($j=0; $j$value) { $r.=""; } } else { $r.=""; } } } } $r.=" \n"; global $dsi_active; if ($dsi_active) { global $id_equation; $r.=""; } global $pmb_opac_view_activate; if ($pmb_opac_view_activate) { global $opac_view_id; $r.=""; } return $r; } public function make_human_query() { global $search; global $msg; global $charset; global $include_path; global $pmb_multi_search_operator; 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}; if(${$op}) { $operator=$this->operators[${$op}]; } else { $operator=""; } $field=$this->get_global_value("field_".$i."_".$search[$i]); $field1=$this->get_global_value("field_".$i."_".$search[$i]."_1"); //Recuperation des variables auxiliaires $fieldvar_="fieldvar_".$i."_".$search[$i]; global ${$fieldvar_}; $fieldvar=${$fieldvar_}; if (!is_array($fieldvar)) $fieldvar=array(); $field_aff=array(); $fieldvar_aff=array(); $operator_multi = ($pmb_multi_search_operator?$pmb_multi_search_operator:"or"); 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"]; if(${$op}) { $q=$df["QUERIES"][$q_index[${$op}]]; } else { $q=array(); } if (isset($q["DEFAULT_OPERATOR"])) $operator_multi=$q["DEFAULT_OPERATOR"]; for ($j=0; $jpp[$s[0]]->t_fields[$s[1]]['TYPE'].".class.php")) { require_once($include_path."/search_queries/dynamics/dynamic_search_".$this->pp[$s[0]]->t_fields[$s[1]]['TYPE'].".class.php"); $dynamic_class_name = "dynamic_search_".$this->pp[$s[0]]->t_fields[$s[1]]['TYPE']; $dynamic_class = new $dynamic_class_name($s[1],$s[0], $i,$df,$this); $field_aff[$j] = $dynamic_class->make_human_query($field[$j]); } else { $field_aff[$j]=$this->pp[$s[0]]->get_formatted_output(array(0=>$field[$j]),$s[1]); } if($q['OPERATOR'] == 'BETWEEN' && $field1[$j]) { $field_aff[$j].= ' - '.$this->pp[$s[0]]->get_formatted_output(array(0=>$field1[$j]),$s[1]); } } } elseif ($s[0]=="f") { $ff=$this->fixedfields[$s[1]]; $q_index=$ff["QUERIES_INDEX"]; if(${$op}) { $q=$ff["QUERIES"][$q_index[${$op}]]; } else { $q=array(); } if(isset($fieldvar["operator_between_multiple_authorities"])){ $operator_multi=$fieldvar["operator_between_multiple_authorities"][0]; } else { if (isset($q["DEFAULT_OPERATOR"])) $operator_multi=$q["DEFAULT_OPERATOR"]; } switch ($this->fixedfields[$s[1]]["INPUT_TYPE"]) { case "list": if(${$op} == 'EQ') { $field_aff = self::get_list_display($this->fixedfields[$s[1]], $field); } else { $field_aff = $this->clean_empty_values($field); } break; case "query_list": if(${$op} == 'EQ') { $field_aff = self::get_query_list_display($this->fixedfields[$s[1]], $field); } else { $field_aff = $this->clean_empty_values($field); } break; case "marc_list": if(${$op} == 'EQ') { $field_aff = self::get_marc_list_display($this->fixedfields[$s[1]], $field); } else { $field_aff = $this->clean_empty_values($field); } break; case "date": $field_aff[0]=format_date($field[0]); if($q['OPERATOR'] == 'BETWEEN' && $field1[0]) { $field_aff[0].= ' - '.format_date($field1[0]); } break; case "authoritie": $tmp_size = sizeof($field); for($j=0 ; $j<$tmp_size; $j++){ if((${$op} == "AUTHORITY") && (($field[$j] === "") || ($field[$j] === "0"))){ unset($field[$j]); }elseif(is_numeric($field[$j]) && (${$op} == "AUTHORITY")){ $field[$j] = self::get_authoritie_display($field[$j], $ff['INPUT_OPTIONS']['SELECTOR']); if($ff['INPUT_OPTIONS']['SELECTOR'] == "categorie") { if(isset($fieldvar["id_thesaurus"])){ unset($fieldvar["id_thesaurus"]); } } elseif($ff['INPUT_OPTIONS']['SELECTOR'] == "onto") { if(isset($fieldvar["id_scheme"])){ unset($fieldvar["id_scheme"]); } } elseif($ff['INPUT_OPTIONS']['SELECTOR'] == "vedette") { if(isset($fieldvar["grammars"])){ unset($fieldvar["grammars"]); } } } } $field_aff = $this->clean_empty_values($field); break; default: $field_aff = $this->clean_empty_values($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") { if(isset($fieldvar["operator_between_multiple_authorities"])){ $operator_multi=$fieldvar["operator_between_multiple_authorities"][0]; } else { if (isset($q["DEFAULT_OPERATOR"])) $operator_multi=$q["DEFAULT_OPERATOR"]; } if (is_array($field)) { $tmpsize=sizeof($field); for($j=0 ; $j<$tmpsize; $j++){ if((${$op} == "AUTHORITY") && (($field[$j] === "") || ($field[$j] === "0"))){ unset($field[$j]); }elseif(is_numeric($field[$j]) && (${$op} == "AUTHORITY")){ $field[$j] = authperso::get_isbd($field[$j]); } } } $field_aff= $field; } switch ($operator_multi) { 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; } public function make_serialized_human_query($serialized) { global $msg; global $charset; global $include_path; $operator_multi=''; $to_unserialize=unserialize($serialized); $search=$to_unserialize["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]; $operator=$this->operators[${$op}]; $field_="field_".$i."_".$search[$i]; $field=${$field_}; //Recuperation des variables auxiliaires $fieldvar_="fieldvar_".$i."_".$search[$i]; $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"]; if(${$op}) { $q=$df["QUERIES"][$q_index[${$op}]]; } else { $q=array(); } if (isset($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"]; if(${$op}) { $q=$ff["QUERIES"][$q_index[${$op}]]; } else { $q=array(); } if(isset($fieldvar["operator_between_multiple_authorities"])){ $operator_multi=$fieldvar["operator_between_multiple_authorities"][0]; } else { if (isset($q["DEFAULT_OPERATOR"])) $operator_multi=$q["DEFAULT_OPERATOR"]; } switch ($this->fixedfields[$s[1]]["INPUT_TYPE"]) { case "list": if(${$op} == 'EQ') { $field_aff = self::get_list_display($this->fixedfields[$s[1]], $field); } else { $field_aff = $this->clean_empty_values($field); } break; case "query_list": if(${$op} == 'EQ') { $field_aff = self::get_query_list_display($this->fixedfields[$s[1]], $field); } else { $field_aff = $this->clean_empty_values($field); } break; case "marc_list": if(${$op} == 'EQ') { $field_aff = self::get_marc_list_display($this->fixedfields[$s[1]], $field); } else { $field_aff = $this->clean_empty_values($field); } break; case "date": $field_aff[0]=format_date($field[0]); if($q['OPERATOR'] == 'BETWEEN' && $field1[0]) { $field_aff[0].= ' - '.format_date($field1[0]); } break; case "authoritie": if (is_array($field)) { for($j=0 ; $jclean_completion_empty_values($field); break; default: $field_aff = $this->clean_empty_values($field); break; } } elseif ($s[0]=="s") { //appel de la fonction make_human_query de la classe du champ special //Recherche du type $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); $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]; } //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; $j "")); if ($vis["NAME"]) { $vis_name=$vis["NAME"]; global ${$vis_name}; if ($vis["VISIBILITY"]=="no") $visibility=0; for ($k=0; $k"; $r.=$inter_op." ".htmlentities($title,ENT_QUOTES,$charset)." ".htmlentities($operator,ENT_QUOTES,$charset)." (".htmlentities($texte,ENT_QUOTES,$charset).") "; } return $r; } public 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); 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=$this->get_global_value("field_".$i."_".$search[$i]); $field1=$this->get_global_value("field_".$i."_".$search[$i]."_1"); //Recuperation des variables auxiliaires $fieldvar_="fieldvar_".$i."_".$search[$i]; global ${$fieldvar_}; $fieldvar=${$fieldvar_}; if (!is_array($fieldvar)) $fieldvar=array(); $field_aff=array(); $fieldvar_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": if(${$op} == 'EQ') { $field_aff = self::get_list_display($this->fixedfields[$s[1]], $field); } else { $field_aff = $this->clean_empty_values($field); } break; case "query_list": if(${$op} == 'EQ') { $field_aff = self::get_query_list_display($this->fixedfields[$s[1]], $field); } else { $field_aff = $this->clean_empty_values($field); } break; case "marc_list": if(${$op} == 'EQ') { $field_aff = self::get_marc_list_display($this->fixedfields[$s[1]], $field); } else { $field_aff = $this->clean_empty_values($field); } break; case "date": $field_aff[0]=format_date($field[0]); if($q['OPERATOR'] == 'BETWEEN' && $field1[0]) { $field_aff[0].= ' - '.format_date($field1[0]); } break; default: $field_aff=$this->clean_empty_values($field); break; } //Ajout des variables si necessaire reset($fieldvar); 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 (isset($mterm)) { $mt[]=$mterm; } } return $mt; } public function filter_searchtable_from_accessrights($table) { global $dbh; global $gestion_acces_active,$gestion_acces_user_notice; global $PMBUserId; if($gestion_acces_active && $gestion_acces_user_notice){ //droits d'acces lecture notice $ac= new acces(); $dom_1= $ac->setDomain(1); $usr_prf = $dom_1->getUserProfile($PMBUserId); $requete = "delete from $table using $table, acces_res_1 "; $requete.= "where "; $requete.= "$table.notice_id = res_num and usr_prf_num=".$usr_prf." "; $requete.= "and (((res_rights ^ res_mask) & 4)=0) "; pmb_mysql_query($requete, $dbh); } } // fonction de calcul de la visibilite d'un champ de recherche public function visibility($ff) { if (!isset($ff["VARVIS"]) || !count($ff["VARVIS"])) return $ff["VISIBILITY"]; for ($i=0; $i ".$msg["search_option_show_expl"]." ".$msg["search_option_show_notice_fille"]."
 
"; $search_form=str_replace("",$option,$search_form); if (($add_field)&&(($delete_field==="")&&(!$launch_search))) $search[]=$add_field; $search_form=str_replace("!!url!!",$url,$search_form); if(!$memo_url) $memo_url="catalog.php?categ=search_perso&sub=form"; $search_form=str_replace("!!memo_url!!",$memo_url,$search_form); //Génération de la liste des champs possibles if($this->limited_search){ $search_form = str_replace("!!limit_search!!","",$search_form); $limit_search = " this.form.limited_search.value='1'; "; } else { $search_form = str_replace("!!limit_search!!","",$search_form); $limit_search = ""; } if ($pmb_extended_search_auto) $r="\n"; $r.="\n"; /** * if else, si il n'y a pas de groupe défini, on conserve le traitement de base * Sinon, ordonnancement via les IDs de groupes */ if(!$this->groups_used){ //Champs fixes if($this->fixedfields){ 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"; $open_optgroup = 0; // $r.="\n"; if(!$this->dynamics_not_visible){ foreach ( $this->dynamicfields as $key => $value ) { if(!$this->pp[$key]->no_special_fields && count($this->pp[$key]->t_fields) && ($key != 'a')){ $r.="\n"; reset($this->pp[$key]->t_fields); $array_dyn_tmp=array(); //liste des champs persos à cacher par type $hide_customfields_array = array(); if ($this->dynamicfields_hidebycustomname[$value["TYPE"]]) { $hide_customfields_array = explode(",",$this->dynamicfields_hidebycustomname[$value["TYPE"]]); } while (list($id,$df)=each($this->pp[$key]->t_fields)) { //On n'affiche pas les champs persos cités par nom dans le fichier xml if ((!count($hide_customfields_array)) || (!in_array($df["NAME"],$hide_customfields_array))) { $array_dyn_tmp[strtolower($df["TITRE"])]="\n"; } } if (count($array_dyn_tmp)) { if ($this->dynamicfields_order=="alpha") { ksort($array_dyn_tmp); } $r.=implode('',$array_dyn_tmp); } $r.="\n"; } } } //Champs autorités perso if ($open_optgroup) $r.="\n"; $open_optgroup = 0; $r_authperso=""; foreach($this->authpersos as $authperso){ if(!$authperso['gestion_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 if (!$this->specials_not_visible && $this->specialfields) { while (list($id,$sf)=each($this->specialfields)) { for($i=0 ; $itableau_speciaux['TYPE']) ; $i++){ if ($this->tableau_speciaux["TYPE"][$i]["NAME"] == $sf['TYPE']) { require_once($include_path."/search_queries/specials/".$this->tableau_speciaux["TYPE"][$i]["PATH"]."/search.class.php"); $classname = $this->tableau_speciaux["TYPE"][$i]["CLASS"]; if((isset($sf['VISIBLE']) && $sf['VISIBLE'] && !method_exists($classname, 'check_visibility')) || (method_exists($classname, 'check_visibility') && $classname::check_visibility() == true)){ if ($sf["SEPARATOR"]) { if ($open_optgroup) $r.="\n"; // $r.="\n"; $r.="\n"; $open_optgroup=1; } $r.="\n"; } break; } } } if ($open_optgroup) $r.="\n"; $open_optgroup = 0; } }else{ //Traitement des champs fixes $fields_array = array(); $lonely_fields = array(); if($this->fixedfields){ reset($this->fixedfields); while (list($id,$ff)=each($this->fixedfields)) { if ($this->visibility($ff)) { if(isset($ff["GROUP"])){ $fields_array[$ff["GROUP"]][]="\n"; }else{ $lonely_fields[] = "\n"; } } } } //Traitement des champs dynamiques (champs persos) if(!$this->dynamics_not_visible){ foreach ( $this->dynamicfields as $key => $value ) { if(!$this->pp[$key]->no_special_fields && count($this->pp[$key]->t_fields) && ($key != 'a')){ reset($this->pp[$key]->t_fields); $array_dyn_tmp=array(); //liste des champs persos à cacher par type $hide_customfields_array = array(); if ($this->dynamicfields_hidebycustomname[$value["TYPE"]]) { $hide_customfields_array = explode(",",$this->dynamicfields_hidebycustomname[$value["TYPE"]]); } while (list($id,$df)=each($this->pp[$key]->t_fields)) { //On n'affiche pas les champs persos cités par nom dans le fichier xml if ((!count($hide_customfields_array)) || (!in_array($df["NAME"],$hide_customfields_array))) { $array_dyn_tmp[strtolower($df["TITRE"])]="\n"; } } if (count($array_dyn_tmp)) { if ($this->dynamicfields_order=="alpha") { ksort($array_dyn_tmp); } $reorganized_array = array(); foreach($array_dyn_tmp as $dynamic_option){ $reorganized_array[] = $dynamic_option; } if(isset($value["GROUP"])){ if(!isset($fields_array[$value["GROUP"]]) || !is_array($fields_array[$value["GROUP"]])) { $fields_array[$value["GROUP"]] = array(); } $fields_array[$value["GROUP"]] = array_merge($fields_array[$value["GROUP"]], $reorganized_array); }else{ $lonely_fields = array_merge($lonely_fields, $reorganized_array); } } } } } //Traitement des champs spéciaux if (!$this->specials_not_visible && $this->specialfields) { while (list($id,$sf)=each($this->specialfields)) { if($sf['VISIBLE']){ if(isset($sf["GROUP"])){ $fields_array[$sf["GROUP"]][] = "\n"; }else{ $lonely_fields[] = "\n"; } } } } /** * On parcourt la propriété groups contenant les * groupes ordonnés selon l'ordre défini dans le XML */ foreach($this->groups as $group_id => $group){ if(isset($fields_array[$group_id])){ //On a des champs définis pour le groupe courant $r.="\n"; foreach($fields_array[$group_id] as $field){ $r.= $field; } $r.="\n"; } } //Traitement des autorités persos (le champs doit être généré dynamiquement $r_authperso=""; foreach($this->authpersos as $authperso){ if(!$authperso['gestion_multi_search'])continue; $r_authperso.="\n"; $r_authperso.="\n"; foreach($authperso['fields'] as $field){ $r_authperso.="\n"; } $r_authperso.="\n"; } $r.=$r_authperso; /** * Vérification de la présence de champs non classés */ if(count($lonely_fields)){ $r.= "\n"; foreach($lonely_fields as $field){ $r.= $field; } $r.="\n"; } } $r.=""; $search_form=str_replace("!!field_list!!",$r,$search_form); $search_form=str_replace("!!already_selected_fields!!",$this->get_already_selected_fields(),$search_form); $search_form=str_replace("!!page!!",$page,$search_form); $search_form=str_replace("!!result_url!!",$result_url,$search_form); global $dsi_active; if ($dsi_active) { global $id_equation; $search_form=str_replace("!!id_equation!!",$id_equation,$search_form); } else { $search_form=str_replace("!!id_equation!!","",$search_form); } global $id_search_persopac; if ($id_search_persopac) { $search_form=str_replace("!!id_search_persopac!!",$id_search_persopac,$search_form); } else { $search_form=str_replace("!!id_search_persopac!!","",$search_form); } global $pmb_opac_view_activate; if ($pmb_opac_view_activate) { global $opac_view_id; $search_form=str_replace("!!opac_view_id!!",$opac_view_id,$search_form); }else { $search_form=str_replace("!!opac_view_id!!","",$search_form); } global $id_connector_set; if (isset($id_connector_set)) $search_form=str_replace("!!id_connector_set!!",$id_connector_set,$search_form); else $search_form=str_replace("!!id_connector_set!!","",$search_form); if ($result_target) $r="document.search_form.target='$result_target';"; else $r=""; $search_form=str_replace("!!target_js!!",$r,$search_form); $search_form .= "\n\n"; if ($pmb_extended_search_dnd_interface) { $search_form .= $this->show_dnd_form(); } return $search_form; } public function get_already_selected_fields() { global $add_field; global $delete_field; global $search; global $launch_search; global $charset; global $msg; global $include_path; //Affichage des champs deja saisis $r=""; $n=0; $this->script_window_onload=''; $r.=""; 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(isset($this->pp[$f[0]]->t_fields[$f[1]]["NOTDISPLAYCOL"]) && $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=(isset($this->fixedfields[$f[1]]["DELNOTALLOWED"]) ? $this->fixedfields[$f[1]]["DELNOTALLOWED"] : ''); } elseif ($f[0]=="s") { $delnotallowed=(isset($this->specialfields[$f[1]]["DELNOTALLOWED"]) ? $this->specialfields[$f[1]]["DELNOTALLOWED"] : ''); } if($this->limited_search) { $script_limit = " this.form.limited_search.value='0'; "; } else { $script_limit = ""; } $r.="";//Colonne 6 $r.="\n"; $n++; } } //Recherche explicite $r.="\n"; $r.="\n"; $r.="\n"; $r.="
";//Colonne 1 $r.=""; $r.="";//Colonne 2 if ($n>0) { $inter="inter_".$i."_".$search[$i]; global ${$inter}; $r.=""; } else $r.=" "; $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.=""; $this->script_window_onload.=" operatorChanged('".$n."_".$search[$i]."', document.getElementById('op_".$n."_".$search[$i]."').value,'".$this->fixedfields[$f[1]]['INPUT_TYPE']."'); "; } 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]); $onchange =" onchange=\"operatorChanged('".$n."_".$search[$i]."', this.value,'".$datatype."');\" "; $r.=" "; $this->script_window_onload.=" operatorChanged('".$n."_".$search[$i]."', document.getElementById('op_".$n."_".$search[$i]."').value,'".$datatype."'); "; } 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],$n,$sf,$this); $q=$specialclass->get_op(); if (count($q)) { $r.=""; } else $r.= " "; break; } } } elseif ($f[0]=="authperso") { $type = ''; //on est sur le cas de la recherche "Tous les champs" de l'autorité perso //$f["1"] vaut l'identifiant du type d'autorité perso $df=10; $r.=""; $r.=" "; } $r.="";//Colonne 5 $r.=$this->get_field($i,$n,$search[$i],$this->pp); $r.="".(!$delnotallowed?"":" ")."
\n"; return $r; } /** * Génération du formulaire en drag'n'drop */ public function show_dnd_form() { global $javascript_path, $extended_search_dnd_tpl; global $mode, $external_type; $search_controller_class = 'SearchController'; // On gère le cas particulier de la recherche simple externe if (($mode == 7) && (($external_type == 'simple') || ($_SESSION["ext_type"] == 'simple'))) { $search_controller_class = 'SimpleExternalSearchController'; } return str_replace('!!search_controller_class!!', $search_controller_class, $extended_search_dnd_tpl); } public function serialize_search() { global $search; $to_serialize=array(); $to_serialize["SEARCH"]=$search; for ($i=0; $iget_global_value("op_".$i."_".$search[$i]); $to_serialize[$i]["FIELD"]=$this->get_global_value("field_".$i."_".$search[$i]); $to_serialize[$i]["FIELD1"]=$this->get_global_value("field_".$i."_".$search[$i]."_1"); $to_serialize[$i]["INTER"]=$this->get_global_value("inter_".$i."_".$search[$i]); $to_serialize[$i]["FIELDVAR"]=$this->get_global_value("fieldvar_".$i."_".$search[$i]); } return serialize($to_serialize); } public function unserialize_search($serialized) { global $search; $to_unserialize=unserialize($serialized); $search=$to_unserialize["SEARCH"]; for ($i=0; $iset_global_value("op_".$i."_".$search[$i], $to_unserialize[$i]["OP"]); $this->set_global_value("field_".$i."_".$search[$i], $to_unserialize[$i]["FIELD"]); if(isset($to_unserialize[$i]["FIELD1"])) { $this->set_global_value("field_".$i."_".$search[$i]."_1", $to_unserialize[$i]["FIELD1"]); } else { $this->set_global_value("field_".$i."_".$search[$i]."_1"); } $this->set_global_value("inter_".$i."_".$search[$i], $to_unserialize[$i]["INTER"]); $this->set_global_value("fieldvar_".$i."_".$search[$i], $to_unserialize[$i]["FIELDVAR"]); } } public function push() { global $search; global $pile_search; $pile_search[]=$this->serialize_search(); for ($i=0; $iset_global_value("op_".$i."_".$search[$i]); $this->set_global_value("field_".$i."_".$search[$i]); $this->set_global_value("field_".$i."_".$search[$i]."_1"); $this->set_global_value("inter_".$i."_".$search[$i]); $this->set_global_value("fieldvar_".$i."_".$search[$i]); } $search=""; } public function pull() { global $pile_search; $this->unserialize_search($pile_search[count($pile_search)-1]); $t=array(); for ($i=0; $iop_empty[${$op}])) { $tt[$it]=$i; $it++; } } //Décalage des critères //1) copie des critères valides for ($i=0; $iget_global_value("op_".$it."_".$search[$it]); $fieldt[$i]["field"]=$this->get_global_value("field_".$it."_".$search[$it]); $fieldt[$i]["field1"]=$this->get_global_value("field_".$it."_".$search[$it]."_1"); $fieldt[$i]["fieldvar"]=$this->get_global_value("fieldvar_".$it."_".$search[$it]); $fieldt[$i]["inter"]=$this->get_global_value("inter_".$it."_".$search[$it]); $fieldt[$i]["search"]=$search[$it]; } //On nettoie et on reconstruit $this->destroy_global_env(); $search=array(); for ($i=0; $iset_global_value("op_".$i."_".$search[$i], $fieldt[$i]["op"]); $this->set_global_value("field_".$i."_".$search[$i], $fieldt[$i]["field"]); $this->set_global_value("field_".$i."_".$search[$i]."_1", $fieldt[$i]["field1"]); $this->set_global_value("inter_".$i."_".$search[$i], $fieldt[$i]["inter"]); $this->set_global_value("fieldvar_".$i."_".$search[$i], $fieldt[$i]["fieldvar"]); } } //suppression des champs de recherche marqués FORBIDDEN pour recherche externe public function remove_forbidden_fields() { global $search; $old_search=array(); $old_search['search']=$search; for ($i=0; $iget_global_value($inter); $op="op_".$i."_".$search[$i]; $old_search[$op]=$this->get_global_value($op); $field="field_".$i."_".$search[$i]; $old_search[$field]=$this->get_global_value($field); $fieldvar="fieldvar_".$i."_".$search[$i]; $old_search[$fieldvar]=$this->get_global_value($fieldvar); } $saved_search=array(); if(count($search)){ 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; } } } $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; $new_search[$new_inter]=$this->get_global_value($old_inter); $old_op="op_".$k."_".$v; $new_op="op_".$i."_".$v; $new_search[$new_op]=$this->get_global_value($old_op); $old_field="field_".$k."_".$v; $new_field="field_".$i."_".$v; $new_search[$new_field]=$this->get_global_value($old_field); $old_fieldvar="fieldvar_".$k."_".$v; $new_fieldvar="fieldvar_".$i."_".$v; $new_search[$new_fieldvar]=$this->get_global_value($old_fieldvar); $i++; } $this->destroy_global_env(); foreach($new_search as $k=>$va) { global ${$k}; ${$k}=$va; } } protected function get_global_value($name) { global ${$name}; return ${$name}; } protected function set_global_value($name, $value='') { global ${$name}; ${$name} = $value; } protected function clean_completion_empty_values($values) { $suppr = false; if(is_array($values)) { foreach($values as $k=>$v){ if(!$v){ unset($values[$k]); $suppr=true; } } if($suppr){ $values = array_values($values); } } return $values; } protected function clean_empty_values($values) { $suppr = false; if(is_array($values)) { foreach($values as $k=>$v){ if($v===""){ unset($values[$k]); $suppr=true; } } if($suppr){ $values = array_values($values); } } return $values; } protected function sort_groups($a, $b){ if($a['order'] == $b['order']){ return 0; } return ($a['order'] > $b['order'] ? 1 : -1); } public static function get_authoritie_display($id, $type) { global $thesaurus_classement_mode_pmb; global $lang; $libelle = ''; switch ($type){ case "auteur": $aut=new auteur($id); $libelle = $aut->get_isbd(); break; case "categorie": $thes = thesaurus::getByEltId($id); $libelle = categories::getlibelle($id,$lang)." [".$thes->libelle_thesaurus."]"; break; case "editeur": $ed = new editeur($id); $libelle=$ed->get_isbd(); break; case "collection" : $coll = new collection($id); $libelle = $coll->get_isbd(); break; case "subcollection" : $coll = new subcollection($id); $libelle = $coll->get_isbd(); break; case "serie" : $serie = new serie($id); $libelle = $serie->get_isbd(); break; case "indexint" : $indexint = new indexint($id); $libelle = $indexint->get_isbd(); break; case "titre_uniforme" : $tu = new titre_uniforme($id); $libelle = $tu->get_isbd(); break; case "notice" : $libelle = notice::get_notice_title($id); break; case "fournisseur" : $entites = new entites($id); $libelle = $entites->raison_sociale; break; case "vedette" : $vedette_composee = new vedette_composee($id); $libelle = $vedette_composee->get_label(); break; case "ontology" : if ($id && !is_numeric($id)) { $id = onto_common_uri::get_id($id); } $query ="select value from skos_fields_global_index where id_item = '".$id."'"; $result = pmb_mysql_query($query); if(pmb_mysql_num_rows($result)) { $row = pmb_mysql_fetch_object($result); $libelle = $row->value; } else { $libelle = ""; } break; default : $libelle = $id; break; } return $libelle; } public function get_selector_display($id, $type, $search) { global $msg; $display = ''; $p = explode('_', $search); switch ($type){ case 'list': $options=$this->fixedfields[$p[1]]["INPUT_OPTIONS"]["OPTIONS"][0]; foreach ($options["OPTION"] as $option) { if($option['VALUE'] == $id) { $display .= get_msg_to_display($option["value"]); break; } } break; case 'query_list': if($p[0] == 'f') { $requete=$this->fixedfields[$p[1]]["INPUT_OPTIONS"]["QUERY"][0]["value"]; if (isset($this->fixedfields[$p[1]]["INPUT_OPTIONS"]["FILTERING"])) { if ($this->fixedfields[$p[1]]["INPUT_OPTIONS"]["FILTERING"] == "yes") { $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); while ($r_=@pmb_mysql_fetch_row($resultat)) { if($r_[0] == $id) { $display .= $r_[1]; break; } } } break; case 'marc_list': $opt=marc_list_collection::get_instance($this->fixedfields[$p[1]]["INPUT_OPTIONS"]["NAME"][0]["value"]); $display .= $opt->table[$id]; break; } return $display; } public static function get_list_display($fixedfield, $field) { global $msg; $field_aff = array(); $options=$fixedfield["INPUT_OPTIONS"]["OPTIONS"][0]; $opt=array(); for ($j=0; $jtable[$field[$j]]; } } return $field_aff; } protected function get_current_search_map(){ global $pmb_map_activate; $map = ""; if($pmb_map_activate){ $map = "
"; } return $map; } public function get_unimarc_fields() { $r=array(); foreach($this->fixedfields 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; } protected function gen_temporary_table($table_name, $main='', $with_pert=false) { $requete="create temporary table ".$table_name." ENGINE=".$this->current_engine." ".$main; @pmb_mysql_query($requete); if (!pmb_mysql_num_rows(pmb_mysql_query("show columns from ".$table_name." like 'idiot'"))) { $requete="alter table ".$table_name." add idiot int(1)"; @pmb_mysql_query($requete); } $requete="alter table ".$table_name." add unique(".$this->keyName.")"; @pmb_mysql_query($requete); if($with_pert) { if (!pmb_mysql_num_rows(pmb_mysql_query("show columns from ".$table_name." like 'pert'"))) { $requete="alter table ".$table_name." add pert decimal(16,1) default 1"; @pmb_mysql_query($requete); } } } public function show_results($url,$url_to_search_form,$hidden_form=true,$search_target="", $acces=false) { global $dbh; global $begin_result_liste; global $nb_per_page_search; global $page; global $charset; global $search; global $msg; global $pmb_nb_max_tri; global $pmb_allow_external_search; global $debug; //Y-a-t-il des champs ? if (count($search)==0) { array_pop($_SESSION["session_history"]); error_message_history($msg["search_empty_field"], $msg["search_no_fields"], 1); exit(); } $recherche_externe=true;//Savoir si l'on peut faire une recherche externe à partir des critères choisis //Verification des champs vides for ($i=0; $iget_global_value("op_".$i."_".$search[$i]); $field=$this->get_global_value("field_".$i."_".$search[$i]); $field1=$this->get_global_value("field_".$i."_".$search[$i]."_1"); $s=explode("_",$search[$i]); $bool=false; if ($s[0]=="f") { $champ=$this->fixedfields[$s[1]]["TITLE"]; if ((string)$field[0]=="" && (string)$field1[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]=="" && (string)$field1[0]=="") { $bool=true; } } elseif($s[0]=="s") { $recherche_externe=false; $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],$i,$sf,$this); $bool=$specialclass->is_empty($field); break; } } }elseif (substr($s,0,9)=="authperso") { } if (($bool)&&(!$this->op_empty[$op])) { $query_data = array_pop($_SESSION["session_history"]); error_message_history($msg["search_empty_field"], sprintf($msg["search_empty_error_message"],$champ), 1); print $this->get_back_button($query_data); exit(); } } $table=$this->make_search(); if ($acces==true) { $this->filter_searchtable_from_accessrights($table); } $requete="select count(1) from $table"; if($res=pmb_mysql_query($requete)){ $nb_results=pmb_mysql_result($res,0,0); }else{ $query_data = array_pop($_SESSION["session_history"]); error_message_history("",$msg["search_impossible"], 1); print $this->get_back_button($query_data); exit(); } //gestion du tri $has_sort = false; if ($nb_results <= $pmb_nb_max_tri) { if ($_SESSION["tri"]) { $table = $this->sort_results($table); $has_sort = true; } } // fin gestion tri //Y-a-t-il une erreur lors de la recherche ? if ($this->error_message) { $query_data = array_pop($_SESSION["session_history"]); error_message_history("", $this->error_message, 1); print $this->get_back_button($query_data); exit(); } if ($hidden_form) { print $this->make_hidden_search_form($url,"search_form","",false); print facette_search_compare::form_write_facette_compare(); print ""; } $human_requete = $this->make_human_query(); print "

"; print "".$msg["search_search_extended"]." : ".$human_requete ; if ($debug) print "
".$this->serialize_search(); if ($nb_results) { print $this->get_display_nb_results($nb_results); print $begin_result_liste; print $this->get_display_icons($nb_results, $recherche_externe); } else print "
".$msg["1915"]." "; print "

"; print "
"; print ""; print $this->get_display_actions(); print "
"; print "
"; print $this->get_current_search_map(); print "
"; $this->show_objects_results($table, $has_sort); //Gestion de la pagination if ($nb_results) { $n_max_page=ceil($nb_results/$nb_per_page_search); $etendue=10; if (!$page) $page_en_cours=0 ; else $page_en_cours=$page ; $nav_bar = ''; //Première if(($page_en_cours+1)-$etendue > 1) { $nav_bar .= "".$msg["; } // affichage du lien precedent si necessaire if ($page>0) { $nav_bar .= ""; $nav_bar .= "[".$msg[48]."]"; $nav_bar .= ""; } $deb = $page_en_cours - 10 ; if ($deb<0) $deb=0; for($i = $deb; ($i < $n_max_page) && ($i<$page_en_cours+10); $i++) { if($i==$page_en_cours) $nav_bar .= "".($i+1).""; else { $nav_bar .= ""; $nav_bar .= ($i+1); $nav_bar .= ""; } if($i<$n_max_page) $nav_bar .= " "; } if(($page+1)<$n_max_page) { $nav_bar .= ""; $nav_bar .= "[".$msg[49]."]"; $nav_bar .= ""; } else $nav_bar .= ""; //Dernière if((($page_en_cours+1)+$etendue)<$n_max_page){ $nav_bar .= "".$msg["; } $nav_bar = "
$nav_bar
"; echo $nav_bar ; } } public function show_results_unimarc($url,$url_to_search_form,$hidden_form=true,$search_target="") { global $dbh; global $begin_result_liste; global $nb_per_page_search; global $page; global $charset; global $search; global $msg; global $pmb_nb_max_tri; global $pmb_allow_external_search; global $opac_view_id; global $filtre_compare, $reinit_compare; $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]=="" && (string)$field1[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]=="" && (string)$field1[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],$i,$sf,$this); $bool=$specialclass->is_empty($field); break; } } } if (($bool)&&(!$this->op_empty[${$op}])) { error_message_history($msg["search_empty_field"], sprintf($msg["search_empty_error_message"],$champ), 1); exit(); } } global $inter_1_f_1; $table=$this->make_search(); $requete="select count(1) from $table"; if($res=pmb_mysql_query($requete)){ $nb_results=pmb_mysql_result($res,0,0); }else{ error_message_history("",$msg["search_impossible"], 1); exit(); } /* //gestion du tri if ($nb_results<=$pmb_nb_max_tri) { if ($_SESSION["tri"]) { $sort=new sort('notices','base'); $sort->table_tri_tempo=$table; $sort->table_primary_tri_tempo="notice_id"; $sort->limit="limit ".$start_page.",".$nb_per_page_search; $requete=$sort->appliquer_tri(); if (substr($requete,0,1)=="(") $creer_table_tempo="CREATE TEMPORARY TABLE tri_tempo ENGINE=MyISAM ".$requete.""; else $creer_table_tempo="CREATE TEMPORARY TABLE tri_tempo ENGINE=MyISAM (".$requete.")"; @pmb_mysql_query($creer_table_tempo); $modif_primaire="ALTER TABLE tri_tempo PRIMARY KEY notice_id"; @pmb_mysql_query($modif_primaire); $table="tri_tempo"; } } // fin gestion tri */ //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,"search_form","",false); print facettes_external_search_compare::form_write_facette_compare(); print ""; } //$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"; //$requete .= " limit ".$start_page.",".$nb_per_page_search; //$resultat=pmb_mysql_query($requete,$dbh); $requete = "select * from $table"; $objects = ""; $resultat=pmb_mysql_query($requete,$dbh); while($row = pmb_mysql_fetch_object($resultat)){ if($objects){ $objects.=","; } $objects.= $row->notice_id; } $_SESSION['tab_result_external'] = $objects; $requete .= " limit ".$start_page.",".$nb_per_page_search; $resultat=pmb_mysql_query($requete,$dbh); $human_requete = $this->make_human_query(); print "".$msg["search_search_extended"]." : ".$human_requete ; if ($nb_results) { print $this->get_display_nb_results($nb_results); print $begin_result_liste; if ($this->rec_history) { //Affichage des liens paniers et impression $current=$_SESSION["CURRENT"]; if ($current!==false) { $tri_id_info = $_SESSION["tri"] ? "&sort_id=".$_SESSION["tri"] : ""; print " \"".$msg["histo_add_to_cart"]."\" \"".$msg["histo_print"]."\""; } } } else print "
".$msg["1915"]." "; print ""; print ""; global $dsi_active; if (($dsi_active)&&false) { global $id_equation, $priv_pro, $id_empr; if ($id_equation) $mess_bouton = $msg['dsi_sauvegarder_equation'] ; else $mess_bouton = $msg["dsi_transformer_equation"] ; print " 
"; if ($priv_pro=="PRI") print "
"; else print " "; } global $pmb_opac_view_activate; if ($pmb_opac_view_activate) { if($opac_view_id){ $mess_bouton = $msg['opac_view_sauvegarder_equation']; print "  
"; } } 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"]); } print "
".facettes_external::call_ajax_facettes()."
"; //on suis le flag filtre/compare facettes_external::session_filtre_compare(); if($filtre_compare=='compare'){ //on valide la variable session qui comprend les critères de comparaisons facettes_external_search_compare::session_facette_compare(); //affichage comparateur $facette_compare= new facettes_external_search_compare(); $compare=$facette_compare->compare_from_objects($objects); if($compare===true){ print $facette_compare->display_compare(); }else{ print $msg[$compare]; } } else { //si demande de réinitialisation if($reinit_compare==1){ facettes_external_search_compare::session_facette_compare(null,$reinit_compare); } 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, 0, 1, 1, "", 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, 0, 1, 1 ); }*/ $nt = new mono_display_unimarc($r->notice_id,6, 1, 0, 1, false, $entrepots_localisations); echo "
".$nt->result."
"; } } print "
"; //Gestion de la pagination if ($nb_results && ($filtre_compare!='compare')) { $n_max_page=ceil($nb_results/$nb_per_page_search); if (!$page) $page_en_cours=0 ; else $page_en_cours=$page ; // affichage du lien precedent si necessaire $nav_bar = ''; if ($page>0) { $nav_bar .= ""; $nav_bar .= "[".$msg[48]."]"; $nav_bar .= ""; } $deb = $page_en_cours - 10 ; if ($deb<0) $deb=0; for($i = $deb; ($i < $n_max_page) && ($i<$page_en_cours+10); $i++) { if($i==$page_en_cours) $nav_bar .= "".($i+1).""; else { $nav_bar .= ""; $nav_bar .= ($i+1); $nav_bar .= ""; } if($i<$n_max_page) $nav_bar .= " "; } if(($page+1)<$n_max_page) { $nav_bar .= ""; $nav_bar .= "[".$msg[49]."]"; $nav_bar .= ""; } else $nav_bar .= ""; $nav_bar = "
$nav_bar
"; echo $nav_bar ; } } public function show_results_fichier($url,$url_to_search_form,$hidden_form=true,$search_target="", $acces=false) { global $dbh; global $begin_result_liste; global $nb_per_page_search; global $page,$dest; global $charset; global $search; global $msg; global $pmb_nb_max_tri; global $pmb_allow_external_search; global $debug; global $link_bulletin; $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]=="" && (string)$field1[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]=="" && (string)$field1[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],$i,$sf,$this); $bool=$specialclass->is_empty($field); break; } } } 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(); if ($acces==true) { $this->filter_searchtable_from_accessrights($table); } $requete="select count(1) from $table"; $nb_results=pmb_mysql_result(pmb_mysql_query($requete),0,0); //Y-a-t-il une erreur lors de la recherche ? if ($this->error_message) { error_message_history("", $this->error_message, 1); exit(); } if (!$dest && $hidden_form){ print $this->make_hidden_search_form($url,"search_form","",false); print "\n"; print "\n"; } if($dest != "TABLEAU"){ $human_requete = $this->make_human_query(); print "".$msg["search_search_extended"]." : ".$human_requete ; if ($debug) print "
".$this->serialize_search(); if ($nb_results) { print " => ".$nb_results." ".$msg["fiche_found"]."
\n"; } else print "
".$msg["1915"]." "; } $requete="select $table.* from ".$table.",fiche where fiche.id_fiche=$table.id_fiche"; if(!$dest){ $requete .= " limit ".$start_page.",".$nb_per_page_search; } $resultat=pmb_mysql_query($requete,$dbh); if(pmb_mysql_num_rows($resultat)){ $result_fic=array(); $fic = new fiche(); while ($r=pmb_mysql_fetch_object($resultat)) { $result_fic[$r->id_fiche] = $fic->get_values($r->id_fiche,1); } if($result_fic){ if($dest == "TABLEAUHTML"){ print "
".$fic->display_results_tableau($result_fic,"",0,true)."
"; }elseif($dest == "TABLEAU"){ $fic->print_results_tableau($result_fic); }else{ print "
".$fic->display_results_tableau($result_fic)."
"; } } } if($this->limited_search) $limit_script = "&limited_search=1"; else $limit_script=""; if(!$dest){ print "
"; print "         
"; } //Gestion de la pagination if ($nb_results && !$dest) { $n_max_page=ceil($nb_results/$nb_per_page_search); if (!$page) $page_en_cours=0 ; else $page_en_cours=$page ; // affichage du lien precedent si necessaire if ($page>0) { $nav_bar .= ""; $nav_bar .= "[".$msg[48]."]"; $nav_bar .= ""; } $deb = $page_en_cours - 10 ; if ($deb<0) $deb=0; for($i = $deb; ($i < $n_max_page) && ($i<$page_en_cours+10); $i++) { if($i==$page_en_cours) $nav_bar .= "".($i+1).""; else { $nav_bar .= ""; $nav_bar .= ($i+1); $nav_bar .= ""; } if($i<$n_max_page) $nav_bar .= " "; } if(($page+1)<$n_max_page) { $nav_bar .= ""; $nav_bar .= "[".$msg[49]."]"; $nav_bar .= ""; } else $nav_bar .= ""; $nav_bar = "
$nav_bar
"; echo $nav_bar ; } } public function get_ajax_params(){ global $field_form; global $charset,$include_path; $elem = explode('_',$field_form); if($elem[count($elem)-2] == "s"){ $field_id = $elem[count($elem)-1]; //appel de la fonction get_input_box de la classe du champ special $type=$this->specialfields[$field_id]["TYPE"]; for ($is=0; $istableau_speciaux["TYPE"]); $is++) { if ($this->tableau_speciaux["TYPE"][$is]["NAME"]==$type) { $sf=$this->specialfields[$field_id]; if ($this->full_path && file_exists($this->full_path."/specials/".$this->tableau_speciaux["TYPE"][$is]["PATH"]."/search.class.php")) require_once($this->full_path."/specials/".$this->tableau_speciaux["TYPE"][$is]["PATH"]."/search.class.php"); else 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); $specialclass->get_ajax_params(); break; } } } } public function show_search_history($idcaddie=0, $object_type="NOTI", $lien_origine="./catalog.php?", $action_click = "add_item") { global $msg; global $charset; $r = "

".$msg["caddie_select_pointe_search_history"]."
"; //parcours de l'historique des recherches $bool = false; if (count($_SESSION["session_history"])) { $r .="
!!contenu!!
"; $style_odd="class='odd' onmouseover=\"this.className='surbrillance'\" onmouseout=\"this.className='odd'\" "; $style_even="class='even' onmouseover=\"this.className='surbrillance'\" onmouseout=\"this.className='even'\" "; $liste=""; for ($i=count($_SESSION["session_history"])-1; $i>=0; $i--) { if ($_SESSION["session_history"][$i][$object_type]) { $bool = true; $temp=html_entity_decode(strip_tags(($i+1).") ".$_SESSION["session_history"][$i]["QUERY"]["HUMAN_QUERY"]),ENT_QUOTES,$charset); if(($pair=1-$pair)) $style=$style_odd; else $style=$style_even; $liste.="$temp "; } } $r=str_replace("!!contenu!!",$liste, $r); } if (!$bool) { $r .= "".$msg["histo_empty"].""; } return $r; } public function get_results($url,$url_to_search_form,$hidden_form=true,$search_target="") { global $dbh; global $begin_result_liste; global $nb_per_page_search; global $page; global $charset; global $search; global $msg; global $pmb_nb_max_tri; global $pmb_allow_external_search; $start_page=$nb_per_page_search*$page; //Y-a-t-il des champs ? if (count($search)==0) { array_pop($_SESSION["session_history"]); 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]=="" && (string)$field1[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]=="" && (string)$field1[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],$i,$sf,$this); $bool=$specialclass->is_empty($field); break; } } }elseif (substr($s,0,9)=="authperso") { } if (($bool)&&(!$this->op_empty[${$op}])) { $query_data = array_pop($_SESSION["session_history"]); error_message_history($msg["search_empty_field"], sprintf($msg["search_empty_error_message"],$champ), 1); print $this->get_back_button($query_data); exit(); } } $table=$this->make_search(); return $table; } protected function sort_results($table) { global $nb_per_page_search; global $page; $start_page=$nb_per_page_search*$page; $sort = new sort('notices','base'); $requete = $sort->appliquer_tri($_SESSION["tri"],"SELECT * FROM " . $table, "notice_id", $start_page, $nb_per_page_search); return $sort->table_tri_tempo; } public function check_emprises(){ global $pmb_map_activate; global $pmb_map_max_holds; global $pmb_map_size_search_result; $current_search = $_SESSION['CURRENT']; $map = ""; $size=explode("*",$pmb_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 = new map_search_controler(null, $current_search, $pmb_map_max_holds,false); $json = $map_search_controler->get_json_informations(); //Obligatoire pour supprimer les {} $json = substr($json, 1, strlen($json)-2); if($map_search_controler->have_results()){ $map.= ""; }else{ $map.= ""; } print $map; } protected function get_display_nb_results($nb_results) { global $msg; return " => ".$nb_results." ".$msg["1916"]."
\n"; } protected function show_objects_results($table, $has_sort) { global $dbh; global $search; global $nb_per_page_search; global $page; global $link_bulletin; $recherche_ajax_mode=0; $start_page=$nb_per_page_search*$page; $nb = 0; $query = "select $table.*,notices.niveau_biblio from ".$table.",notices where notices.notice_id=$table.notice_id"; if(count($search) > 1 && !$has_sort) $query .= " order by index_serie, tnvol, index_sew"; $query .= " limit ".$start_page.",".$nb_per_page_search; $result=pmb_mysql_query($query, $dbh); while ($r=pmb_mysql_fetch_object($result)) { if($nb++>5) $recherche_ajax_mode=1; switch($r->niveau_biblio) { case 'm' : // notice de monographie $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); break ; case 's' : // on a affaire a un periodique // 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 ) { $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); break; case 'a' : // on a affaire a un article // 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 ) { $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); break; case 'b' : // on a affaire a un bulletin $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"; $bull_ids=@pmb_mysql_fetch_object(pmb_mysql_query($rqt_bull_info)); if(!$link_bulletin){ $link_bulletin = './catalog.php?categ=serials&sub=bulletinage&action=view&bul_id='.$bull_ids->id_du_bulletin; } else { $link_bulletin = str_replace("!!id!!",$bull_ids->id_du_bulletin,$link_bulletin); } if ($this->link_explnum_bulletin) { $link_explnum_bulletin = str_replace("!!bul_id!!",$bull_ids->id_du_bulletin,$this->link_explnum_bulletin); } else { $link_explnum_bulletin = ""; } $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); $link_bulletin =''; break; } print "
".$nt->result."
"; } } protected function get_display_actions() { global $msg, $charset; global $opac_view_id; global $dsi_active; global $id_equation, $priv_pro, $id_empr; global $pmb_opac_view_activate; global $id_connector_set; global $pmb_allow_external_search; $display_actions = ""; if ($dsi_active && !$opac_view_id) { if ($id_equation) $mess_bouton = $msg['dsi_sauvegarder_equation'] ; else $mess_bouton = $msg["dsi_transformer_equation"] ; $display_actions .= "  "; if ($priv_pro=="PRI") { $display_actions .= " "; } else { $display_actions .= " "; } $display_actions .= ""; } if ($pmb_opac_view_activate) { if($opac_view_id){ $mess_bouton = $msg['opac_view_sauvegarder_equation'] ; $display_actions .= "  
"; } } // transformation de la recherche en multicriteres: on reposte tout avec mode=8 if(!$opac_view_id){ $display_actions .= " "; $display_actions .= "
"; $memo_search=""; foreach($_POST as $key =>$val) { if($val) { if(is_array($val)) { foreach($val as $cle=>$val_array) { if(is_array($val_array)){ foreach($val_array as $valeur){ $memo_search.= ""; } } else $memo_search.= ""; } } else { $memo_search.=""; } } } $display_actions .= "$memo_search
"; } //transformation en set pour connecteur externe $id_connector_set+=0; //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 if ($pmb_allow_external_search && (SESSrights & ADMINISTRATION_AUTH) && $id_connector_set) { //Il faut qu'il y ait des sets multi critères si on veut pouvoir associer la recherche à quelque chose if (connector_out_sets::get_typed_set_count(2)) { $display_actions .= '
'; $display_actions .= ' '; } } return $display_actions; } protected function get_display_icons($nb_results, $recherche_externe = false) { global $msg; global $pmb_allow_external_search; global $pmb_nb_max_tri; global $affich_tris_result_liste; $display_icons = ""; if ($this->rec_history) { //Affichage des liens paniers et impression $current=$_SESSION["CURRENT"]; if ($current!==false) { $tri_id_info = $_SESSION["tri"] ? "&sort_id=".$_SESSION["tri"] : ""; $display_icons .= "  \"".$msg["histo_add_to_cart"]."\"   \"".$msg["histo_print"]."\" "; $display_icons .= "  \"".$msg["docnum_download"]."\" "; if ($pmb_allow_external_search){ if($recherche_externe){ $tag_a="href='catalog.php?categ=search&mode=7&from_mode=6&external_type=multi'"; }else{ $tag_a="onClick=\"alert('".$msg["search_interdite_externe"]."')\""; } $display_icons .= "  \"".$msg["connecteurs_external_search_sources"]."\"/ "; } if ($nb_results<=$pmb_nb_max_tri) { $display_icons .= $affich_tris_result_liste; } } } return $display_icons; } protected function get_back_button($query_data) { global $form_json_data, $msg; return ' '; } public function get_script_window_onload() { return $this->script_window_onload; } } ?>