id=$id+0; $this->fields_array = $this->fields_array(); $this->fetch_data(); } //recuperation de champs_base.xml public function fields_array(){ global $include_path,$msg; global $dbh, $champ_base; if(empty($champ_base) || !is_array($champ_base)) { $file = $include_path."/indexation/notices/champs_base_subst.xml"; if(!file_exists($file)){ $file = $include_path."/indexation/notices/champs_base.xml"; } $fp=fopen($file,"r"); if ($fp) { $xml=fread($fp,filesize($file)); } fclose($fp); $champ_base=_parser_text_no_function_($xml,"INDEXATION",$file); } return $champ_base; } public function fetch_data() { global $msg,$dbh,$charset; $this->facettes=array(); $req="select bannette_facettes.*,bannettes.display_notice_in_every_group,bannettes.document_group from bannette_facettes JOIN bannettes ON id_bannette=num_ban_facette where num_ban_facette=". $this->id." order by ban_facette_order"; $res = pmb_mysql_query($req,$dbh); $i=0; if (pmb_mysql_num_rows($res)) { while($r=pmb_mysql_fetch_object($res)){ $this->facettes[$i] = new stdClass(); $this->facettes[$i]->critere=$r->ban_facette_critere; $this->facettes[$i]->ss_critere= $r->ban_facette_ss_critere; $this->facettes[$i]->order= $r->ban_facette_order; $this->facettes[$i]->order_sort= $r->ban_facette_order_sort; $this->facettes[$i]->datatype_sort= $r->ban_facette_datatype_sort; if(!$this->bannette_display_notice_in_every_group){ $this->bannette_display_notice_in_every_group=$r->display_notice_in_every_group; } if(!$this->bannette_document_group){ $this->bannette_document_group=$r->document_group; } $i++; } } } public function array_sort(){ global $msg; $array_sort = array(); $nb = count($this->fields_array['FIELD']); for($i=0;$i<$nb;$i++){ if($tmp= $msg[$this->fields_array['FIELD'][$i]['NAME']]){ $lib = $tmp; }else{ $lib = $this->fields_array['FIELD'][$i]['NAME']; } $id2 = $this->fields_array['FIELD'][$i]['ID'] + 0; $array_sort[$id2] = $lib; } asort($array_sort); return $array_sort; } public function delete(){ $del = "delete from bannette_facettes where num_ban_facette = '".$this->id."'"; pmb_mysql_query($del); } public function save(){ global $max_facette; $this->delete(); $order=0; for($i=0;$i<$max_facette;$i++){ $critere = 'list_crit_'.$i; global ${$critere}; if(${$critere} > 0){ $ss_critere = 'list_ss_champs_'.$i; global ${$ss_critere}; $order_sort = 'order_sort_'.$i; global ${$order_sort}; $datatype_sort = 'datatype_sort_'.$i; global ${$datatype_sort}; $rqt = "insert into bannette_facettes set num_ban_facette = '".$this->id."', ban_facette_critere = '".${$critere}."', ban_facette_ss_critere='".${$ss_critere}."', ban_facette_order='".$order."', ban_facette_order_sort='".${$order_sort}."', ban_facette_datatype_sort='".${$datatype_sort}."' "; pmb_mysql_query($rqt); $order++; } } } public function add_ss_crit($suffixe_id,$id,$id_ss_champs=0){ $facettes = new facette_search_opac('notices'); return $facettes->create_list_subfields($id,$id_ss_champs,$suffixe_id, 1, true); } public function add_facette($i_field){ global $tpl_facette_elt_ajax; $array = $this->array_sort(); $tpl = $tpl_facette_elt_ajax; $select = ''; $i = 0; foreach ($array as $id => $value) { if(!$i){ $select.=""; } else { $select.=""; } } $tpl = str_replace('!!i_field!!', $i_field, $tpl); $tpl = str_replace("!!liste1!!",$select,$tpl); $tpl = str_replace('!!order_sort_asc_checked!!', "checked='checked'", $tpl); $tpl = str_replace('!!order_sort_desc_checked!!', "", $tpl); $tpl = str_replace('!!datatype_sort_alpha_checked!!', "checked='checked'", $tpl); $tpl = str_replace('!!datatype_sort_num_checked!!', "", $tpl); $tpl = str_replace('!!datatype_sort_date_checked!!', "", $tpl); $tpl = str_replace("!!id_bannette!!",$this->id,$tpl); return $tpl; } public function gen_facette_selection(){ global $dsi_facette_tpl; global $tpl_facette_elt; $array = $this->array_sort(); $tpls=$dsi_facette_tpl; $facettes_tpl = ''; $nb=count($this->facettes); if(!$nb)$nb++; for ($i=0 ; $i<$nb; $i++){ $tpl = $tpl_facette_elt; $tpl = str_replace('!!i_field!!', $i, $tpl); if(isset($this->facettes[$i]->ss_critere)) { $tpl = str_replace('!!ss_crit!!', $this->facettes[$i]->ss_critere, $tpl); } else { $tpl = str_replace('!!ss_crit!!', '', $tpl); } $select=""; foreach ($array as $id => $value) { if(isset($this->facettes[$i]->critere) && ($id==$this->facettes[$i]->critere)){ $select.=""; } else { $select.=""; } } $tpl = str_replace("!!liste1!!",$select,$tpl); $tpl = str_replace('!!order_sort_asc_checked!!', (empty($this->facettes[$i]->order_sort) ? "checked='checked'" : ""), $tpl); $tpl = str_replace('!!order_sort_desc_checked!!', (!empty($this->facettes[$i]->order_sort) ? "checked='checked'" : ""), $tpl); $tpl = str_replace('!!datatype_sort_alpha_checked!!', (empty($this->facettes[$i]->datatype_sort) || $this->facettes[$i]->datatype_sort == 'alpha' ? "checked='checked'" : ""), $tpl); $tpl = str_replace('!!datatype_sort_num_checked!!', (isset($this->facettes[$i]->datatype_sort) && $this->facettes[$i]->datatype_sort == 'num' ? "checked='checked'" : ""), $tpl); $tpl = str_replace('!!datatype_sort_date_checked!!', (isset($this->facettes[$i]->datatype_sort) && $this->facettes[$i]->datatype_sort == 'date' ? "checked='checked'" : ""), $tpl); $facettes_tpl.=$tpl; } $tpls = str_replace("!!facettes!!",$facettes_tpl,$tpls); $tpls = str_replace("!!max_facette!!",$nb,$tpls); $tpls = str_replace("!!id_bannette!!",$this->id,$tpls); return $tpls; } public function build_document($notice_ids,$notice_tpl="",$gen_summary=0,$gen_document=0){ if($notice_tpl){ $this->noti_tpl_document= notice_tpl_gen::get_instance($notice_tpl); } else $this->noti_tpl_document=""; $facettes_list=$this->facettes; $this->gen_summary=$gen_summary; $this->summary=""; $this->index=0; $res_notice_ids=$this->filter_facettes_search($facettes_list,$notice_ids); $resultat_aff=$this->filter_facettes_print($res_notice_ids,1,array(),$gen_document); if($this->gen_summary) $resultat_aff="

".$this->summary."
".$resultat_aff; return $resultat_aff; } public function build_notice($notice_id, $id_bannette = 0){ global $deflt2docs_location,$opac_url_base; global $use_opac_url_base; $use_opac_url_base=1; global $use_dsi_diff_mode; $url_base_opac = $opac_url_base."index.php?database=".DATA_BASE."&lvl=notice_display&id="; // paramétrage : $this->environement["short"] = 6 ; $this->environement["ex"] = 0 ; $this->environement["exnum"] = 1 ; $tpl_document=''; if($this->noti_tpl_document) { $tpl_document .= $this->noti_tpl_document->build_notice($notice_id, $deflt2docs_location, false, $id_bannette); } elseif($this->noti_django_directory) { $tpl_document .= record_display::get_display_in_result($notice_id, $this->noti_django_directory); } if(!$tpl_document) { $n=pmb_mysql_fetch_object(@pmb_mysql_query("select * from notices where notice_id=".$notice_id)); if ($n->niveau_biblio == 'm'|| $n->niveau_biblio == 'b') { $mono=new mono_display($n,$this->environement["short"],"",$this->environement["ex"],"","","",0,1,$this->environement["exnum"],0,"",0,true,false,0,0,1,$this->id); $tpl_document.= "".$mono->header."

\r\n"; $tpl_document.= $mono->isbd; } elseif ($n->niveau_biblio == 's' || $n->niveau_biblio == 'a') { $serial = new serial_display($n, 6, "", "", "", "", "", 0,1,$this->environement["exnum"],0, false,0,0,'',false,1,$this->id); $tpl_document.= "".$serial->header."

\r\n"; $tpl_document.= $serial->isbd; } $tpl_document=str_replace('', "", $tpl_document); global $notice_separator; if($notice_separator)$tpl_document.=$notice_separator; else $tpl_document.="

"; } return $tpl_document."\r\n"; } public function filter_facettes_search($facettes_list,$notice_ids){ global $dbh; global $lang; global $msg; global $dsi_bannette_notices_order ; $notices=implode(",",$notice_ids); $res_notice_ids=array(); $res_notice_ids["values"]=array(); $res_notice_ids["notfound"]=array(); $critere= $facettes_list[0]->critere; $ss_critere= $facettes_list[0]->ss_critere; $order_sort= intval($facettes_list[0]->order_sort); $datatype_sort= $facettes_list[0]->datatype_sort; $order_by = 'ORDER BY '; if ($datatype_sort == 'date') { $order_by .= " STR_TO_DATE(value,'".$msg['format_date']."')"; } else { $order_by .= " value"; } if($order_sort == 0){ $order_by .= " asc"; } else { $order_by .= " desc"; } if ($dsi_bannette_notices_order) { $req = "SELECT * FROM notices_fields_global_index LEFT JOIN notices on (id_notice=notice_id) WHERE id_notice IN (".$notices.") AND code_champ = ".$critere." AND code_ss_champ = ".$ss_critere." AND lang in ('','".$lang."') ".$order_by.",".$dsi_bannette_notices_order; } else { $req = "SELECT * FROM notices_fields_global_index WHERE id_notice IN (".$notices.") AND code_champ = ".$critere." AND code_ss_champ = ".$ss_critere." AND lang in ('','".$lang."') ".$order_by; } // print $req."
"; $res = pmb_mysql_query($req,$dbh); if (pmb_mysql_num_rows($res)) { while($r=pmb_mysql_fetch_object($res)){ $res_notice_ids["folder"][$r->value]["values"][]= $r->id_notice; $res_notice_ids["memo"][]= $r->id_notice; } foreach($notice_ids as $id_notice ){ if(!in_array($id_notice,$res_notice_ids["memo"])) $res_notice_ids["notfound"][]=$id_notice; } // Si encore une facette d'affinage, on fait du récursif if(count($facettes_list)>1){ array_splice($facettes_list, 0,1); foreach($res_notice_ids["folder"] as $folder => $contens){ //printr($contens["values"]); $res_notice_ids["folder"][$folder]= $this->filter_facettes_search($facettes_list, $contens["values"]); //printr($res_notice_ids["folder"][$folder]); $res_notice_ids["folder"][$folder]["notfound_cumul"]=array(); foreach($res_notice_ids["folder"][$folder]["values"] as $value){ if(is_array($value["notfound"])) $res_notice_ids["folder"][$folder]["notfound_cumul"]=array_merge($res_notice_ids["folder"][$folder]["notfound_cumul"],$value["notfound"]); } } } }else{ $res_notice_ids["notfound"]=$notice_ids; } return $res_notice_ids; } public function filter_facettes_print($res_notice_ids, $rang=1,$notfound=array(),$gen_document=0,&$already_printed=array()){ global $dbh, $msg, $charset; global $lang; $tpl = ""; if(count($res_notice_ids["notfound"])){ $tpl.=""; foreach($res_notice_ids["notfound"] as $notice_id){ if( !in_array($notice_id, $notfound) ) $tpl.="".$this->build_notice($notice_id)."
" ; $notfound[]=$notice_id; } $tpl.="
"; } if(is_array($res_notice_ids["folder"])){ foreach($res_notice_ids["folder"] as $folder => $contens){ if((!$gen_document && $this->bannette_display_notice_in_every_group) || ($gen_document && $this->bannette_display_notice_in_every_group && $this->bannette_document_group)){ //on vide $already_printed pour afficher systèmatiquement la notice dans chaque groupe $already_printed=array(); } if (empty($already_printed) || !empty(array_diff($contens["values"],$already_printed))) { if($this->gen_summary && $rang==1){ $this->index++; $this->summary.="".htmlentities($this->index." - ".$folder,ENT_QUOTES,$charset)."
"; if(!$gen_document || ($gen_document && $this->bannette_document_group)){ $tpl.="".htmlentities($folder,ENT_QUOTES,$charset).""; } }else{ if(!$gen_document || ($gen_document && $this->bannette_document_group)){ $tpl.="".htmlentities($folder,ENT_QUOTES,$charset).""; } } $tpl.=""; foreach($contens["values"] as $notice_id){ if(!in_array($notice_id,$already_printed)){ $tpl.=$this->build_notice($notice_id)."
" ; if($gen_document && !$this->bannette_document_group){ $tpl.="

\r\n"; } $already_printed[]=$notice_id; } } if(isset($contens["notfound"]) && count($contens["notfound"])){ foreach($contens["notfound"] as $notice_id){ if( !in_array($notice_id, $notfound) ) $tpl.=$this->build_notice($notice_id)."
" ; $notfound[]=$notice_id; } } $tpl.="
"; //printr($contens["folder"]); if(isset($contens["folder"]) && count($contens["folder"])){ $rang++; // c'est une arborescence. Construction du titre $tpl.=$this->filter_facettes_print($contens,$rang,$notfound,$gen_document,$already_printed); $rang--; } }elseif(isset($contens["folder"]) && count($contens["folder"])){ foreach($contens['folder'] as $folder2=>$values2){ if (empty($already_printed) || !empty(array_diff($values2["values"], $already_printed))) { if($this->gen_summary && $rang==1){ $this->index++; $this->summary.="".htmlentities($this->index." - ".$folder,ENT_QUOTES,$charset)."
"; if(!$gen_document || ($gen_document && $this->bannette_document_group)){ $tpl.="".htmlentities($folder,ENT_QUOTES,$charset).""; } }else{ if(!$gen_document || ($gen_document && $this->bannette_document_group)){ $tpl.="".htmlentities($folder,ENT_QUOTES,$charset).""; } } break; } } $rang++; // c'est une arborescence. Construction du titre $tpl.=$this->filter_facettes_print($contens,$rang,$notfound,$gen_document,$already_printed); $rang--; } } } return $tpl; } public function build_document_data($notice_ids,$notice_tpl=""){ $this->sommaires=array(); if($notice_tpl){ $this->noti_tpl_document = notice_tpl_gen::get_instance($notice_tpl); } else $this->noti_tpl_document=""; $facettes_list=$this->facettes; $this->index=0; $res_notice_ids=$this->filter_facettes_search($facettes_list,$notice_ids); $resultat_aff=$this->filter_facettes_data($res_notice_ids,1,array()); return $this->sommaires; } public function filter_facettes_data($res_notice_ids, $rang=1,$notfound=array(),$gen_document=0,&$already_printed=array()){ global $dbh, $msg, $charset; global $lang; if(count($res_notice_ids["notfound"])){ //$this->sommaires[$this->index]['level']=$rang; foreach($res_notice_ids["notfound"] as $notice_id){ if( !in_array($notice_id, $notfound) ) $this->sommaires[$this->index]['records'][]['render']=$this->build_notice($notice_id); $notfound[]=$notice_id; } } if(is_array($res_notice_ids["folder"])){ foreach($res_notice_ids["folder"] as $folder => $contens){ if((!$gen_document && $this->bannette_display_notice_in_every_group) || ($gen_document && $this->bannette_display_notice_in_every_group && $this->bannette_document_group)){ //on vide $already_printed pour afficher systèmatiquement la notice dans chaque groupe $already_printed=array(); } if (empty($already_printed) || !empty(array_diff($contens["values"], $already_printed))) { $this->index++; $this->sommaires[$this->index]['title']=$folder; $this->sommaires[$this->index]['level']=$rang; foreach($contens["values"] as $notice_id){ if(!in_array($notice_id,$already_printed)){ $this->sommaires[$this->index]['records'][]['render']=$this->build_notice($notice_id); $already_printed[]=$notice_id; } } if(isset($contens["notfound"]) && count($contens["notfound"])){ foreach($contens["notfound"] as $notice_id){ if( !in_array($notice_id, $notfound) ) $this->sommaires[$this->index]['records'][]['render']=$this->build_notice($notice_id); $notfound[]=$notice_id; } } //printr($contens["folder"]); if(isset($contens["folder"]) && count($contens["folder"])){ $rang++; // c'est une arborescence. Construction du titre $this->filter_facettes_data($contens,$rang,$notfound,$gen_document,$already_printed); $rang--; } }elseif(isset($contens["folder"]) && count($contens["folder"])){ foreach($contens['folder'] as $folder2=>$values2){ if (empty($already_printed) || !empty(array_diff($values2["values"], $already_printed)) || !empty($values2['folder'])) { $this->index++; $this->sommaires[$this->index]['title']=$folder; $this->sommaires[$this->index]['level']=$rang; break; } } $rang++; // c'est une arborescence. Construction du titre $this->filter_facettes_data($contens,$rang,$notfound,$gen_document,$already_printed); $rang--; } } } return 0; } }// end class