source: pmb4.2/trunk/fuentes/pmb/autorites/subjects/search.inc.php @ 815

Last change on this file since 815 was 815, checked in by jrpelegrina, 4 years ago

Initial release of pmb 4.2

  • Property svn:executable set to *
File size: 12.0 KB
Line 
1<?php
2// +-------------------------------------------------+
3// © 2002-2004 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
4// +-------------------------------------------------+
5// $Id: search.inc.php,v 1.46 2015-04-03 11:16:24 jpermanne Exp $
6
7if (stristr($_SERVER['REQUEST_URI'], ".inc.php")) die("no access");
8
9$url_base = "./autorites.php?categ=categories&sub=&id=0&parent=";
10
11// inclusions diverses
12include("$include_path/templates/category.tpl.php");
13require_once("$class_path/category.class.php");
14require_once("$class_path/analyse_query.class.php");
15require_once("$class_path/thesaurus.class.php");
16
17// search.inc : recherche des catégories en gestion d'autorités
18
19//Récuperation de la liste des langues définies pour l'interface
20$langages = new XMLlist("$include_path/messages/languages.xml", 1);
21$langages->analyser();
22$lg = $langages->table;
23
24
25//affichage du selectionneur de thesaurus et du lien vers les thésaurus
26$liste_thesaurus = thesaurus::getThesaurusList();
27$sel_thesaurus = '';
28$lien_thesaurus = '';
29
30if ($thesaurus_mode_pmb != 0) {  //la liste des thesaurus n'est pas affichée en mode monothesaurus
31        $sel_thesaurus = "<select class='saisie-30em' id='id_thes' name='id_thes' ";
32        $sel_thesaurus.= "onchange = \"document.location = '".$url_base."&id_thes='+document.getElementById('id_thes').value; \">" ;
33        foreach($liste_thesaurus as $id_thesaurus=>$libelle_thesaurus) {
34                $sel_thesaurus.= "<option value='".$id_thesaurus."' "; ;
35                if ($id_thesaurus == $id_thes) $sel_thesaurus.= " selected";
36                $sel_thesaurus.= ">".htmlentities($libelle_thesaurus,ENT_QUOTES, $charset)."</option>";
37        }
38        $sel_thesaurus.= "<option value=-1 ";
39        if ($id_thes == -1) $sel_thesaurus.= "selected ";
40        $sel_thesaurus.= ">".htmlentities($msg['thes_all'],ENT_QUOTES, $charset)."</option>";
41        $sel_thesaurus.= "</select>&nbsp;";
42
43        $lien_thesaurus = "<a href='./autorites.php?categ=categories&sub=thes'>".$msg[thes_lien]."</a>";
44
45}       
46$user_query=str_replace("<!-- sel_thesaurus -->",$sel_thesaurus,$user_query);
47$user_query=str_replace("<!-- lien_thesaurus -->",$lien_thesaurus,$user_query);
48
49
50//affichage du choix de langue pour la recherche
51$sel_langue = '';
52$sel_langue = "<div class='row'>";
53$sel_langue.= "<input type='checkbox' name='lg_search' id='lg_search' value='1' ";
54if($lg_search == 1){
55        $sel_langue .= " checked='checked' ";
56}
57$sel_langue.= "/>&nbsp;".htmlentities($msg['thes_sel_langue'],ENT_QUOTES, $charset);
58$sel_langue.= "</div><br />";
59$user_query=str_replace("<!-- sel_langue -->",$sel_langue,$user_query);
60$user_query=str_replace("!!user_input!!",htmlentities(stripslashes($user_input),ENT_QUOTES, $charset),$user_query);
61
62//recuperation du thesaurus session
63if(!$id_thes) {
64        $id_thes = thesaurus::getSessionThesaurusId();
65} else {
66        thesaurus::setSessionThesaurusId($id_thes);
67}
68
69if ($id_thes != -1) {
70        $thes = new thesaurus($id_thes);
71}
72
73
74// nombre de références par pages
75if ($nb_per_page_author != "") 
76        $nb_per_page = $nb_per_page_author ;
77        else $nb_per_page = 10;
78
79// traitement de la saisie utilisateur
80include("$include_path/marc_tables/$pmb_indexation_lang/empty_words");
81
82
83// $authors_list_tmpl : template pour la liste auteurs
84$categ_list_tmpl = "
85<br />
86<br />
87<div class='row'>
88        <h3><! --!!nb_autorite_found!!-- >$msg[1320] !!cle!! </h3>
89        </div>
90        <script type='text/javascript' src='./javascript/sorttable.js'></script>
91        <table class='sortable'>
92                !!list!!
93        </table>
94<div class='row'>
95        !!nav_bar!!
96        </div>
97";
98
99
100function list_categ($cle, $categ_list, $nav_bar) {
101        global $categ_list_tmpl;
102        $categ_list_tmpl = str_replace("!!cle!!", $cle, $categ_list_tmpl);
103        $categ_list_tmpl = str_replace("!!list!!", $categ_list, $categ_list_tmpl);
104        $categ_list_tmpl = str_replace("!!nav_bar!!", $nav_bar, $categ_list_tmpl);
105        categ_browser::search_form();
106        print pmb_bidi($categ_list_tmpl);
107}
108
109if(!$page) $page=1;
110$debut =($page-1)*$nb_per_page;
111
112if(!$nbr_lignes){
113        $requete = "SELECT SQL_CALC_FOUND_ROWS noeuds.id_noeud AS categ_id, ";
114}else{
115        $requete = "SELECT noeuds.id_noeud AS categ_id, ";
116}
117$requete.= "noeuds.num_renvoi_voir AS categ_see, ";
118$requete.= "noeuds.num_thesaurus, ";
119
120if($user_input){
121        $aq=new analyse_query(stripslashes($user_input));
122        if ($aq->error) {
123                categ_browser::search_form($parent);
124                error_message($msg["searcher_syntax_error"],sprintf($msg["searcher_syntax_error_desc"],$aq->current_car,$aq->input_html,$aq->error_message));
125                exit;
126        }
127}
128
129
130if(($lg_search == 1) || (($id_thes != -1) && ($thes->langue_defaut == $lang))){
131        //On recherche dans toutes les langues ou dans celle par défaut du thésaurus
132       
133        // $user_input -> Permet de savoir si l'on a préciser une recheche
134        //$id_thes -> Si l'on est ici c'est que l'on a qu'un thésaurus et la langue de l'interface est celle du thésaurus
135        $requete.= "categories.langue AS langue, ";
136        $requete.= "categories.libelle_categorie AS categ_libelle, ";
137        $requete.= "categories.note_application AS categ_comment, ";
138        $requete.= "categories.index_categorie AS index_categorie ";
139        if($user_input){
140                $members = $aq->get_query_members("categories", "libelle_categorie", "index_categorie", "num_noeud");
141               
142                $requete.= ", ".$members["select"]." AS pert "; 
143        }
144       
145        $requete.= "FROM noeuds JOIN categories ON noeuds.id_noeud = categories.num_noeud ";
146        if($lg_search != 1){
147                $requete.=" AND categories.langue='".addslashes($lang)."' ";
148        }
149        $requete.= "WHERE 1 ";
150        if($user_input){
151                $requete.= "AND (".$members["where"].") ";
152        }
153        if($id_thes != -1) $requete.= "AND noeuds.num_thesaurus = '".$id_thes."' ";
154
155}else{
156        //J'ai qu'un thésaurus mais la langue du thésaurus est différente de l'interface
157        $requete.= "IF (catlg.num_noeud IS NULL, catdef.langue, catlg.langue) as langue, ";
158        $requete.= "IF (catlg.num_noeud IS NULL, catdef.libelle_categorie, catlg.libelle_categorie) as categ_libelle, ";
159        $requete.= "IF (catlg.num_noeud IS NULL, catdef.note_application, catlg.note_application) as categ_comment, ";
160        $requete.= "IF (catlg.num_noeud IS NULL, catdef.index_categorie, catlg.index_categorie) as index_categorie ";
161       
162        if($user_input){
163                $members_catdef = $aq->get_query_members("catdef", "catdef.libelle_categorie", "catdef.index_categorie", "catdef.num_noeud");
164                $members_catlg = $aq->get_query_members("catlg", "catlg.libelle_categorie", "catlg.index_categorie", "catlg.num_noeud");
165               
166                $requete.= ", IF (catlg.num_noeud IS NULL, (".$members_catdef["select"]."), (".$members_catlg["select"].") ) AS pert ";
167        }
168       
169        if(($id_thes != -1)){//Je n'ai qu'un thésaurus
170                $requete.= "FROM noeuds JOIN categories AS catdef ON noeuds.id_noeud = catdef.num_noeud AND catdef.langue = '".$thes->langue_defaut."' ";
171                $requete.= "LEFT JOIN categories AS catlg ON catdef.num_noeud = catlg.num_noeud AND catlg.langue = '".$lang."' ";
172                $requete.= "WHERE noeuds.num_thesaurus = '".$id_thes."' ";
173        }else{
174                //Plusieurs thésaurus
175                $requete.= "FROM noeuds JOIN thesaurus ON thesaurus.id_thesaurus = noeuds.num_thesaurus ";
176                $requete.= "JOIN categories AS catdef ON noeuds.id_noeud = catdef.num_noeud AND catdef.langue = thesaurus.langue_defaut ";
177                $requete.= "LEFT JOIN categories AS catlg on catdef.num_noeud = catlg.num_noeud AND catlg.langue = '".$lang."' ";
178                $requete.= "WHERE 1 "; 
179        }
180       
181        if($user_input){
182                $requete.= "AND ( IF (catlg.num_noeud IS NULL, ".$members_catdef["where"].", ".$members_catdef["where"].") ) "; 
183        }
184       
185}
186$requete.= "ORDER BY ";
187if($user_input){
188        $requete.= "pert DESC,";
189}
190$requete.= " num_thesaurus, index_categorie ";
191$requete.= "LIMIT ".$debut.",".$nb_per_page." ";
192
193$res = pmb_mysql_query($requete, $dbh);
194if(!$nbr_lignes){
195        $qry = "SELECT FOUND_ROWS() AS NbRows";
196        if($resnum = pmb_mysql_query($qry)){
197                $nbr_lignes=pmb_mysql_result($resnum,0,0);
198        }
199}
200
201if($nbr_lignes) {
202        $categ_list_tmpl=str_replace( "<! --!!nb_autorite_found!!-- >",$nbr_lignes.' ',$categ_list_tmpl);       
203
204        $parity=1;
205       
206        $categ_list .= "<tr>
207                <th>".$msg[103]."</th>
208                <th>".$msg["categ_commentaire"]."</th>
209                <!--!!col_num_autorite!!-->
210                <th>".$msg["count_notices_assoc"]."</th>
211                </tr>";
212       
213        $num_auth_present=false;
214        $req="SELECT id_authority_source FROM authorities_sources WHERE authority_type='category' AND TRIM(authority_number) !='' LIMIT 1";
215        $res_aut=pmb_mysql_query($req,$dbh);
216        if($res_aut && pmb_mysql_num_rows($res_aut)){
217                $categ_list=str_replace("<!--!!col_num_autorite!!-->","<th>".$msg["authorities_number"]."</th>",$categ_list);
218                $num_auth_present=true;
219        }
220       
221        while(($categ=pmb_mysql_fetch_object($res))) {
222               
223                $temp = new categories($categ->categ_id, $categ->langue);
224                if ($id_thes == -1) {
225                        $thes = new thesaurus($categ->num_thesaurus);
226                        $display = '['.htmlentities($thes->libelle_thesaurus,ENT_QUOTES, $charset).']';
227                } else {
228                        $display = '';
229                }
230                if ($lg_search) $display.= '['.$lg[$categ->langue].'] '; else $display.= '';                           
231                if($categ->categ_see) {
232                        $temp = new categories($categ->categ_see, $categ->langue);
233                        $display.= $categ->categ_libelle." -&gt; <i>";
234                        if ($thesaurus_categories_show_only_last) {
235                                $display.= $temp->libelle_categorie;
236                        } else {
237                                $display.= categories::listAncestorNames($categ->categ_see, $categ->langue);
238                        } 
239                        $display.= "@</i>";
240                } else {
241                        if ($thesaurus_categories_show_only_last) {
242                                $display.= $categ->categ_libelle;
243                        } else {
244                                $display.= categories::listAncestorNames($categ->categ_id, $categ->langue);
245                        }                       
246                }       
247
248                $acateg = new category($categ->categ_id);
249                $notice_count = $acateg->notice_count(false);
250               
251                $categ_entry = $display ;
252                $categ_comment = $categ->categ_comment;
253                $link_categ = "./autorites.php?categ=categories&sub=categ_form&parent=0&id=".$categ->categ_id."&id_thes=".$categ->num_thesaurus."&user_input=".rawurlencode(stripslashes($user_input))."&nbr_lignes=".$nbr_lignes."&page=".$page."&nb_per_page=".$nb_per_page;
254               
255                if ($parity % 2) {
256                        $pair_impair = "even";
257                } else {
258                        $pair_impair = "odd";
259                }
260               
261                $parity += 1;
262            $tr_javascript=" onmouseover=\"this.className='surbrillance'\" onmouseout=\"this.className='$pair_impair'\"  ";
263        $categ_list .= "<tr class='$pair_impair' $tr_javascript style='cursor: pointer'>
264                                        <td valign='top' onmousedown=\"document.location='$link_categ';\">
265                                                $categ_entry
266                                                </td>
267                                                <td valign='top' onmousedown=\"document.location='$link_categ';\">
268                                                $categ_comment
269                                                </td>";
270               
271                //Numéros d'autorite
272                if($num_auth_present){
273                        $requete="SELECT authority_number,origin_authorities_name, origin_authorities_country FROM authorities_sources JOIN origin_authorities ON num_origin_authority=id_origin_authorities WHERE authority_type='category' AND num_authority='".$categ->categ_id."' AND TRIM(authority_number) !='' GROUP BY authority_number,origin_authorities_name,origin_authorities_country ORDER BY authority_favorite DESC, origin_authorities_name";
274                        $res_aut=pmb_mysql_query($requete,$dbh);
275                        if($res_aut && pmb_mysql_num_rows($res_aut)){
276                                $categ_list .= "<td>";
277                                $first=true;
278                                while ($aut = pmb_mysql_fetch_object($res_aut)) {
279                                        if(!$first)$categ_list .=", ";
280                                        $categ_list .=htmlentities($aut->authority_number,ENT_QUOTES,$charset);
281                                        if($tmp=trim($aut->origin_authorities_name)){
282                                                $categ_list .=htmlentities(" (".$aut->origin_authorities_name.")",ENT_QUOTES,$charset);
283                                        }
284                                        $first=false;
285                                }
286                                $categ_list .= "</td>";
287                        }else{
288                                $categ_list .= "<td>&nbsp;</td>";
289                        }
290                }
291               
292                if($notice_count && $notice_count!=0)   
293                        $categ_list .= "<td onmousedown=\"document.location='./catalog.php?categ=search&mode=1&etat=aut_search&aut_type=categ&aut_id=$categ->categ_id'\">".$notice_count."</a></td>";
294                else $categ_list .= "<td>&nbsp;</td>";
295                $categ_list .= "</tr>";
296                       
297        } // fin while
298       
299
300        pmb_mysql_free_result($res);
301
302
303        //Création barre de navigation
304        $url_base='./autorites.php?categ=categories&sub=search&id_thes='.$id_thes.'&user_input='.rawurlencode(stripslashes($user_input)).'&lg_search='.$lg_search;
305        if (!$last_param) $nav_bar = aff_pagination ($url_base, $nbr_lignes, $nb_per_page, $page, 10, false, true) ;
306        else $nav_bar = "";
307
308       
309        // affichage du résultat
310        list_categ(stripslashes($user_input), $categ_list, $nav_bar);
311
312} else {
313        // la requête n'a produit aucun résultat
314        categ_browser::search_form($parent);
315        error_message($msg[211], str_replace('!!categ_cle!!', stripslashes($user_input), $msg["categ_no_categ_found_with"]), 0, './autorites.php?categ=categories&sub=search');
316}
317
Note: See TracBrowser for help on using the repository browser.