setDomain(1); $acces_j = $dom_1->getJoin($PMBuserid,4,'notice_id'); } //Classe générique de recherche define("AUT_LIST",1); define("NOTICE_LIST",2); define("AUT_SEARCH",3); class searcher { var $type; //Type de recherche var $etat; //Etat de la recherche var $page; //Page courante de la recherche var $nbresults; //Nombre de résultats de la dernière recherche var $nbepage; var $nb_per_page; var $id; //Numéro d'autorité pour la recherche var $store_form; //Formulaire contenant les infos de navigation plus des champs pour la recherche var $base_url; var $first_search_result; var $text_query; var $text_query_tri; //pour les tris texte de la requête d'origine modifié par la classe tri var $human_query; var $human_notice_query; var $human_aut_query; var $docnum; var $direct=0; var $rec_history=false; var $sort; //Constructeur function searcher($base_url,$rec_history=false) { global $type,$etat,$aut_id,$page, $docnum_query,$auto_postage_query; $this->sort = new sort('notices','base'); $this->type=$type; $this->etat=$etat; $this->page=$page; $this->id=$aut_id; $this->base_url=$base_url; $this->rec_history=$rec_history; $this->docnum = ($docnum_query?1:0); $this->auto_postage_query = ($auto_postage_query?1:0); $this->run(); } function make_store_form() { $this->store_form="
"; $this->store_form.="!!first_search_variables!!"; $this->store_form.="
"; } function pager() { global $msg; if (!$this->nbresults) return; $suivante = $this->page+1; $precedente = $this->page-1; if (!$this->page) $page_en_cours=0 ; else $page_en_cours=$this->page ; // affichage du lien précédent si nécéssaire if($precedente >= 0) $nav_bar .= "[$msg[48]]"; $deb = $page_en_cours - 10 ; if ($deb<0) $deb=0; for($i = $deb; ($i < $this->nbepage) && ($i<$page_en_cours+10); $i++) { if($i==$page_en_cours) $nav_bar .= "".($i+1).""; else $nav_bar .= "".($i+1).""; if($i<$this->nbepage) $nav_bar .= " "; } if($suivante<$this->nbepage) $nav_bar .= "[$msg[49]]"; // affichage de la barre de navigation print "
$nav_bar
"; } function show_notice() { } function run() { if (!$this->etat) { $this->show_form(); } else { switch ($this->etat) { case "first_search": $r=$this->make_first_search(); //echo "req first:".$this->text_query."
"; $this->first_search_result=$r; switch ($r) { case AUT_LIST: $this->make_store_form(); $this->store_search(); $this->aut_list(); $this->pager(); break; case NOTICE_LIST: $this->make_store_form(); $this->store_search(); $this->sort_notices(); $this->notice_list(); $this->pager(); break; case AUT_SEARCH: $this->etat="aut_search"; $this->direct=1; $this->make_aut_search(); $this->make_store_form(); $this->aut_store_search(); $this->sort_notices(); $this->aut_notice_list(); $this->pager(); break; } if ($this->rec_history) $this->rec_env(); break; case "aut_search": $this->make_aut_search(); $this->make_store_form(); $this->aut_store_search(); $this->sort_notices(); $this->aut_notice_list(); $this->pager(); if ($this->rec_history) $this->rec_env(); break; } } } function show_form() { //A surcharger par la fonction qui affiche le formulaire de recherche } function make_first_search() { //A surcharger par la fonction qui fait la première recherche après la soumission du formulaire de recherche //La fonction renvoie AUT_LIST (le résultat de la recherche est une liste d'autorité) //ou NOTICE_LIST (le résultat de la recherche est une liste de notices) //La fonction doit mettre à jour le nombre de résultats dans $this->nbresults } function make_aut_search() { //A surcharger par la fonction qui fait la recherche des notices à partir d'un numéro d'autorité (stoqué dans $this->id) //La fonction doit mettre à jour le nombre de résultats dans $this->nbresults } function store_search() { //A surcharger par la fonction qui écrit les variables du formulaire "store_search" pour stoquer les champs de recherche //En liste de résultat de la première recherche. Il faut remplacer la chaine "!!first_search_variables!!" dans $this->store_form } function aut_store_search() { //A surcharger par la fonction qui écrit les variables du formulaire "store_search" pour stoquer les champs de recherche //En liste de résultat de la première recherche. Il faut remplacer la chaine "!!first_search_variables!!" dans $this->store_form } function aut_list() { //A surcharger par la fonction qui affiche la liste des autorités issues de la première recherche } function notice_list() { //A surcharger par la fonction qui affiche la liste des notices issues de la première recherche } function aut_notice_list() { //A surcharger par la fonction qui affiche la liste des notice sous l'autorité $this->id } function rec_env() { //A surcharger pa la fonction qui enregistre } function convert_simple_multi() { //A surcharger par la fonction qui convertit des recherches simples en multi-critères } function sort_notices() { global $msg; global $pmb_nb_max_tri; if ($this->nbresults<=$pmb_nb_max_tri) { if ($_SESSION["tri"]) { //$this->text_query_tri = $this->text_query; //$this->text_query_tri = str_replace("limit ".$this->page*$this->nb_per_page.",".$this->nb_per_page, "limit 0,".$this->nbresults,$this->text_query_tri); //if ($this->nb_per_page) { //$this->sort->limit = "limit ".$this->page*$this->nb_per_page.",".$this->nb_per_page; //} //$this->text_query_tri = $this->sort->appliquer_tri($_SESSION["tri"],$this->text_query,"notice_id"); if ($this->nb_per_page) { $this->text_query_tri = $this->sort->appliquer_tri($_SESSION["tri"],$this->text_query,"notice_id", $this->page*$this->nb_per_page, $this->nb_per_page); //$this->text_query_tri .= " LIMIT ".$this->page*$this->nb_per_page.",".$this->nb_per_page; } else { $this->text_query_tri = $this->sort->appliquer_tri($_SESSION["tri"],$this->text_query,"notice_id",0,0); } //echo ($this->text_query_tri."
"); $this->t_query = @mysql_query($this->text_query_tri); if (!$this->t_query) { print mysql_error(); } } else { if (strpos($this->text_query,"limit")===false) { if ($this->nb_per_page) { $this->text_query .= "limit ".$this->page*$this->nb_per_page.",".$this->nb_per_page; } } else { if ($this->nb_per_page) { $this->text_query = str_replace("limit 0,".$this->nbresults,"limit ".$this->page*$this->nb_per_page.",".$this->nb_per_page,$this->text_query); } } $this->t_query=@mysql_query($this->text_query); } } else { if (strpos($this->text_query,"limit")===false) { if ($this->nb_per_page) { $this->text_query .= "limit ".$this->page*$this->nb_per_page.",".$this->nb_per_page; } } else { if ($this->nb_per_page) { $this->text_query = str_replace("limit 0,".$this->nbresults,"limit ".$this->page*$this->nb_per_page.",".$this->nb_per_page,$this->text_query); } } $this->t_query = @mysql_query($this->text_query); } } } class searcher_title extends searcher { var $t_query; function show_form() { global $msg; global $dbh; global $charset,$lang; global $NOTICE_author_query; global $title_query,$all_query, $author_query,$ex_query,$typdoc_query, $statut_query, $docnum_query, $pmb_indexation_docnum_allfields, $pmb_indexation_docnum; global $categ_query,$thesaurus_auto_postage_search,$auto_postage_query; // on commence par créer le champ de sélection de document // récupération des types de documents utilisés. $query = "SELECT count(typdoc), typdoc "; $query .= "FROM notices where typdoc!='' GROUP BY typdoc"; $result = @mysql_query($query, $dbh); $toprint_typdocfield .= " \n"; $doctype = new marc_list('doctype'); while (($rt = mysql_fetch_row($result))) { $obj[$rt[1]]=1; $qte[$rt[1]]=$rt[0]; } foreach ($doctype->table as $key=>$libelle){ if ($obj[$key]==1){ $toprint_typdocfield .= " \n"; while ($obj = @mysql_fetch_row($result)) { $toprint_statutfield .= "