source: pmb4.2/trunk/fuentes/pmb/catalog/notices/search/authors/expl.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.9 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: expl.inc.php,v 1.32.2.1 2015-08-14 10:30:03 dbellamy Exp $
6
7if (stristr($_SERVER['REQUEST_URI'], ".inc.php")) die("no access");
8
9// accès à une notice par code-barre, ISBN, ou numéro commercial ou  par CB exemplaire
10
11//droits d'acces lecture notice
12$acces_j='';
13if ($gestion_acces_active==1 && $gestion_acces_user_notice==1) {
14        require_once("$class_path/acces.class.php");
15        $ac= new acces();
16        $dom_1= $ac->setDomain(1);
17        $acces_j = $dom_1->getJoin($PMBuserid,4,'notice_id');
18} 
19
20
21// on commence par voir ce que la saisie utilisateur est ($ex_query)
22$ex_query_original = $ex_query;
23$ex_query = clean_string($ex_query);
24
25$EAN = '';
26$isbn = '';
27$code = '';
28$rqt_bulletin = 0;
29
30if(isEAN($ex_query)) {
31        // la saisie est un EAN -> on tente de le formater en ISBN
32        $EAN=$ex_query;
33        $isbn = EANtoISBN($ex_query);
34        // si échec, on prend l'EAN comme il vient
35        if(!$isbn) 
36                $code = str_replace("*","%",$ex_query);
37        else {
38                $code=$isbn;
39                $code10=formatISBN($code,10);
40        }
41} else {
42        if(isISBN($ex_query)) {
43                // si la saisie est un ISBN
44                $isbn = formatISBN($ex_query);
45                // si échec, ISBN erroné on le prend sous cette forme
46                if(!$isbn) 
47                        $code = str_replace("*","%",$ex_query);
48                else {
49                        $code10=$isbn ;
50                        $code=formatISBN($code10,13);
51                }
52        } else {
53                // ce n'est rien de tout ça, on prend la saisie telle quelle
54                $code = str_replace("*","%",$ex_query);
55                // filtrer par typdoc_query si selectionné
56                if($typdoc_query) $where_typedoc=" and typdoc='$typdoc_query' ";
57        }
58}
59
60if(!$nb_results) {
61       
62        // on compte
63        if ($EAN && $isbn) {
64               
65                // cas des EAN purs : constitution de la requête
66                $requete = "SELECT distinct notices.* FROM notices ";
67                $requete.= $acces_j;
68                $requete.= "left join exemplaires on notices.notice_id=exemplaires.expl_notice ";
69                $requete.= "WHERE niveau_biblio='m' AND (exemplaires.expl_cb like '$code' OR exemplaires.expl_cb='$ex_query' OR notices.code in ('$code','$EAN'".($code10?",'$code10'":"").")) ";
70                $myQuery = pmb_mysql_query($requete, $dbh);
71               
72        } elseif ($isbn) {
73               
74                // recherche d'un isbn
75                $requete = "SELECT distinct notices.* FROM notices ";
76                $requete.= $acces_j;
77                $requete.= "left join exemplaires on notices.notice_id=exemplaires.expl_notice ";
78                $requete.= " WHERE niveau_biblio='m' AND (exemplaires.expl_cb like '$code' OR exemplaires.expl_cb='$ex_query' OR notices.code in ('$code'".($code10?",'$code10'":"").")) ";
79                $myQuery = pmb_mysql_query($requete, $dbh);
80                if(pmb_mysql_num_rows($myQuery)==0) {
81                        // rien trouvé en monographie
82                        // cas où un exemplaire de bulletin correspond à un ISBN
83                        $requete = "SELECT distinct notices.*, bulletin_id FROM notices ";
84                        $requete.= $acces_j;
85                        $requete.= "left join bulletins on bulletin_notice=notice_id left join exemplaires on (bulletin_id=expl_bulletin and expl_notice=0) ";
86                        $requete.= "WHERE niveau_biblio='s' AND (exemplaires.expl_cb like '$ex_query' OR bulletin_numero like '$ex_query' OR bulletin_cb like '$ex_query' OR notices.code like '$ex_query') ";
87                        $requete.= "GROUP BY bulletin_id ";
88                        $rqt_bulletin=1;
89                }
90        } elseif ($code) {
91               
92                // recherche d'un exemplaire
93                // note : le code est recherché aussi dans le champ code des notices
94                // (cas des code-barres disques qui échappent à l'EAN)
95                //
96                $requete = "SELECT distinct notices.* FROM notices ";
97                $requete.= $acces_j;
98                $requete.= "left join exemplaires on notices.notice_id=exemplaires.expl_notice ";
99                $requete.= "WHERE niveau_biblio='m' AND (exemplaires.expl_cb like '$code' OR notices.code like '$code' OR exemplaires.expl_cb like '$ex_query_original' OR notices.code like '$ex_query_original') $where_typedoc ";
100                               
101                $myQuery = pmb_mysql_query($requete, $dbh);
102                if(pmb_mysql_num_rows($myQuery)==0) {
103                        // rien trouvé en monographie
104                        $requete = "SELECT distinct notices.*, bulletin_id FROM notices ";
105                        $requete.= $acces_j;
106                        $requete.= "left join bulletins on bulletin_notice=notice_id left join exemplaires on (bulletin_id=expl_bulletin and expl_notice=0) ";
107                        $requete.= "WHERE niveau_biblio='s' AND (exemplaires.expl_cb like '$code' OR bulletin_numero like '$code' OR bulletin_cb like '$code' OR notices.code like '$code' OR exemplaires.expl_cb like '$ex_query_original' OR bulletin_numero like '$ex_query_original' OR bulletin_cb like '$ex_query_original' OR notices.code like '$ex_query_original')  $where_typedoc ";
108                        $requete.= "GROUP BY bulletin_id ";
109                        $rqt_bulletin=1;
110                }
111               
112        } else {
113               
114                error_message($msg[235], $msg[307]." $ex_query".($pmb_allow_external_search?"<br /><a href='./catalog.php?categ=search&mode=7&external_type=simple&from_mode=0&code=".rawurlencode($ex_query)."' title='".$msg["connecteurs_external_search_sources"]."'>".$msg["connecteurs_external_search_sources"]."</a>":""), 1, "./catalog.php?categ=search&mode=0");
115                die();
116               
117        }
118       
119        $nb_results= pmb_mysql_num_rows($myQuery);
120        $limit_page= " limit $nb_per_page_search "; 
121        $page=0;
122
123} else {
124       
125        $limit_page= " limit ".$page*$nb_per_page_search.", $nb_per_page_search "; 
126 
127        // echo "EAN : $EAN<br /> isbn : $isbn<br />code : $code<br />";
128       
129        if ($EAN && $isbn) {
130                // cas des EAN purs : constitution de la requête
131                $requete = "SELECT distinct notices.* FROM notices ";
132                $requete.= $acces_j;
133                $requete.= "left join exemplaires on notices.notice_id=exemplaires.expl_notice ";
134                $requete.= "WHERE niveau_biblio='m' AND (exemplaires.expl_cb like '$code' OR exemplaires.expl_cb='$ex_query' OR notices.code in ('$code','$EAN'".($code10?",'$code10'":"").")) ";
135                $requete.= $limit_page;
136                $myQuery = pmb_mysql_query($requete, $dbh);
137               
138        } elseif ($isbn) {
139                // recherche d'un isbn
140                $requete = "SELECT distinct notices.* FROM notices ";
141                $requete.= $acces_j;
142                $requete.= "left join exemplaires on notices.notice_id=exemplaires.expl_notice ";
143                $requete.= "WHERE niveau_biblio='m' AND (exemplaires.expl_cb like '$code' OR exemplaires.expl_cb='$ex_query' OR notices.code in ('$code'".($code10?",'$code10'":"").")) ";
144                $requete.= $limit_page;
145                $myQuery = pmb_mysql_query($requete, $dbh);
146                if(pmb_mysql_num_rows($myQuery)==0) {
147                        // rien trouvé en monographie
148                        // cas où un exemplaire de bulletin correspond à un ISBN
149                        $requete = "SELECT distinct notices.*, bulletin_id FROM notices ";
150                        $requete.= $acces_j;
151                        $requete.= "left join bulletins on bulletin_notice=notice_id left join exemplaires on (bulletin_id=expl_bulletin and expl_notice=0) ";
152                        $requete.= "WHERE niveau_biblio='s' AND (exemplaires.expl_cb like '$ex_query' OR bulletin_numero like '$ex_query' OR bulletin_cb like '$ex_query' OR notices.code like '$ex_query') ";
153                        $requete.= "GROUP BY bulletin_id ".$limit_page;
154                        $rqt_bulletin=1;
155                }
156        } elseif ($code) {
157                // recherche d'un exemplaire
158                // note : le code est recherché aussi dans le champ code des notices
159                // (cas des code-barres disques qui échappent à l'EAN)
160                //
161                $requete = "SELECT distinct notices.* FROM notices ";
162                $requete.= $acces_j;
163                $requete.= "left join exemplaires on notices.notice_id=exemplaires.expl_notice ";
164                $requete.= "WHERE niveau_biblio='m' AND (exemplaires.expl_cb like '$code' OR notices.code like '$code') $where_typedoc ";
165                $requete.= $limit_page;
166                $myQuery = pmb_mysql_query($requete, $dbh);
167                if(pmb_mysql_num_rows($myQuery)==0) {
168                        // rien trouvé en monographie
169                        $requete = "SELECT distinct notices.*, bulletin_id FROM notices ";
170                        $requete.= $acces_j;
171                        $requete.= "left join bulletins on bulletin_notice=notice_id left join exemplaires on (bulletin_id=expl_bulletin and expl_notice=0) ";
172                        $requete.= "WHERE niveau_biblio='s' AND (exemplaires.expl_cb like '$code' OR bulletin_numero like '$code' OR bulletin_cb like '$code' OR notices.code like '$code')  $where_typedoc ";
173                        $requete.= "GROUP BY bulletin_id ".$limit_page;
174                        $rqt_bulletin=1;
175                }
176        } else {
177                error_message($msg[235], $msg[307]." $ex_query".($pmb_allow_external_search?"<br /><a href='./catalog.php?categ=search&mode=7&external_type=simple&from_mode=0&code=".rawurlencode($ex_query)."' title='".$msg["connecteurs_external_search_sources"]."'>".$msg["connecteurs_external_search_sources"]."</a>":""), 1, "./catalog.php?categ=search&mode=0");
178                die();
179        }
180}
181
182if ($rqt_bulletin!=1) {
183        if(pmb_mysql_num_rows($myQuery)) {
184                if(pmb_mysql_num_rows($myQuery) > 1  || $page) {
185                        // la recherche fournit plusieurs résultats !!!
186                        // boucle de parcours des notices trouvées
187                        // inclusion du javascript de gestion des listes dépliables
188                        // début de liste
189                        print sprintf("<div class='othersearchinfo'><b>".$msg[940]."</b>&nbsp;$ex_query =&gt; ".$msg["searcher_results"]."</div>",$nb_results);                 
190                        print $begin_result_liste;
191                        $nb=0;
192                        while($notice = pmb_mysql_fetch_object($myQuery)) {
193                                if($notice->niveau_biblio != 's' && $notice->niveau_biblio != 'a') {
194                                        // notice de monographie (les autres n'ont pas de code ni d'exemplaire !!! ;-)
195                                        $link = './catalog.php?categ=isbd&id=!!id!!';
196                                        $link_expl = './catalog.php?categ=edit_expl&id=!!notice_id!!&cb=!!expl_cb!!&expl_id=!!expl_id!!'; 
197                                        $link_explnum = './catalog.php?categ=edit_explnum&id=!!notice_id!!&explnum_id=!!explnum_id!!';   
198                                        $display = new mono_display($notice, 6, $link, 1, $link_expl, '', $link_explnum,1, 0,1,1);
199                                        print pmb_bidi($display->result);
200                                }
201                                if (++$nb >= $nb_per_page_search) break;
202                        }
203                        print $end_result_liste;
204                } else {
205                        $notice = pmb_mysql_fetch_object($myQuery);
206                        print "<div class=\"row\"><div class=\"msg-perio\">".$msg['recherche_encours']."</div></div>";
207                        // un seul résultat : je balance le user direct sur la notice concernée
208                        print "<script type=\"text/javascript\">";
209                        print "document.location = \"./catalog.php?categ=isbd&id=".$notice->notice_id."\"";
210                        print "</script>";
211                }
212        } else {
213                error_message($msg[235], $msg[307]." $ex_query".($pmb_allow_external_search?"<br /><a href='./catalog.php?categ=search&mode=7&external_type=simple&from_mode=0&code=".rawurlencode($ex_query)."' title='".$msg["connecteurs_external_search_sources"]."'>".$msg["connecteurs_external_search_sources"]."</a>":""),1, "./catalog.php?categ=search&mode=0");
214        }
215} else {
216        // C'est un pério !
217        $res = @pmb_mysql_query($requete, $dbh);
218        if (pmb_mysql_num_rows($res)) {
219                print $begin_result_liste;
220                while(($n=pmb_mysql_fetch_object($res))) {
221                        $link_serial = "./catalog.php?categ=serials&sub=view&serial_id=!!id!!";
222                        $link_analysis = "";
223                        $link_bulletin = "";
224                        require_once ("$include_path/bull_info.inc.php") ;
225                        require_once ("$class_path/serials.class.php") ;
226                        $n->isbd = show_bulletinage_info($n->bulletin_id);
227                        print pmb_bidi($n->isbd) ;
228                }       
229                print $end_result_liste;
230        } else {
231                error_message($msg[235], $msg[307]." $ex_query".($pmb_allow_external_search?"<br /><a href='./catalog.php?categ=search&mode=7&external_type=simple&from_mode=0&code=".rawurlencode($ex_query)."' title='".$msg["connecteurs_external_search_sources"]."'>".$msg["connecteurs_external_search_sources"]."</a>":""), 1, "./catalog.php?categ=search&mode=0");   
232        }
233}
234
235//Gestion de la pagination
236if ($nb_results) {
237       
238        $nav_bar.="
239        <form name='search_form' action='./catalog.php?categ=search&mode=0' method='post' style='display:none'>
240                <input type='hidden' name='page' value='$page'/>
241                <input type='hidden' name='nb_results' value='$nb_results'/>
242                <input type='hidden' name='ex_query' value='$ex_query'/>
243                <input type='hidden' name='typdoc_query' value=''/>
244                <input type='hidden' name='statut_query' value=''/>
245        </form>";
246       
247        $n_max_page=ceil($nb_results/$nb_per_page_search);
248       
249    if (!$page) $page_en_cours=0 ;
250        else $page_en_cours=$page ;
251
252    // affichage du lien precedent si necessaire
253    if ($page>0) {
254        $nav_bar .= "<a href='#' onClick='document.search_form.page.value-=1; ";
255        $nav_bar .= "document.search_form.submit(); return false;'>";
256        $nav_bar .= "<img src='./images/left.gif' border='0'  title='".$msg[48]."' alt='[".$msg[48]."]' hspace='3' align='middle'/>";
257            $nav_bar .= "</a>";
258        }
259       
260        $deb = $page_en_cours - 10 ;
261        if ($deb<0) $deb=0;
262        for($i = $deb; ($i < $n_max_page) && ($i<$page_en_cours+10); $i++) {
263                if($i==$page_en_cours) $nav_bar .= "<strong>".($i+1)."</strong>";
264                else {
265                        $nav_bar .= "<a href='#' onClick=\"if ((isNaN(document.search_form.page.value))||(document.search_form.page.value=='')) document.search_form.page.value=1; else document.search_form.page.value=".($i)."; ";
266                $nav_bar .= "document.search_form.submit(); return false;\">";
267                $nav_bar .= ($i+1);
268                $nav_bar .= "</a>";
269                }
270                if($i<$n_max_page) $nav_bar .= " "; 
271        }
272       
273        if(($page+1)<$n_max_page) {
274        $nav_bar .= "<a href='#' onClick=\"if ((isNaN(document.search_form.page.value))||(document.search_form.page.value=='')) document.search_form.page.value=1; else document.search_form.page.value=parseInt(document.search_form.page.value)+parseInt(1); ";
275        $nav_bar .= "document.search_form.submit(); return false;\">";
276        $nav_bar .= "<img src='./images/right.gif' border='0' title='".$msg[49]."' alt='[".$msg[49]."]' hspace='3' align='middle'>";
277        $nav_bar .= "</a>";
278    } else      $nav_bar .= "";
279        $nav_bar = "<div align='center'>$nav_bar</div>";
280        echo $nav_bar ;
281       
282} 
Note: See TracBrowser for help on using the repository browser.