source: pmb4.2/trunk/fuentes/pmb/admin/convert/export_z3950.php @ 815

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

Initial release of pmb 4.2

  • Property svn:executable set to *
File size: 4.2 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: export_z3950.php,v 1.11 2015-04-03 11:16:22 jpermanne Exp $
6
7$base_path="../..";
8
9$base_nocheck=1;
10$base_noheader=1;
11$base_nobody=1;
12$base_nosession=1;
13
14include($base_path."/includes/init.inc.php");
15include($base_path."/admin/convert/export.class.php");
16include($base_path."/admin/convert/xml_unimarc.class.php");
17require_once($base_path."/includes/isbn.inc.php");
18
19function make_error($nerr,$err_message) {
20        echo $nerr."@".$err_message."@";
21        exit();
22}
23
24if (!@pmb_mysql_connect(SQL_SERVER,USER_NAME,USER_PASS)) make_error(1,"Could'nt connect to database server");
25if (!@pmb_mysql_select_db(DATA_BASE)) make_error(2,"Database unknown");
26
27//Commande envoyée
28$command=$_GET["command"];
29//Requete
30$query=$_GET["query"];
31function construct_query($query,$not,$level,$argn="") {
32        //La requête commence-t-elle par and, or ou and not ?
33        $pos=strpos($query,"and not");
34        if (($pos!==false)&&($pos==0)) {
35                $ope="and not";
36        } else {
37                $pos=strpos($query,"or");
38                if (($pos!==false)&&($pos==0)) {
39                        $ope="or";
40                } else {
41                        $pos=strpos($query,"and");
42                        if (($pos!==false)&&($pos==0)) {
43                                $ope="and";
44                        } else $ope="";
45                }
46        }
47        if ($ope!="") {
48                //Si opérateur, recherche des arguments
49                $arqs=array();
50                preg_match("/^".$ope." arg".$level."!1\((.*)\) arg".$level."!2\((.*)\)$/",$query,$args);
51                $return1=construct_query($args[1],0,$level+1,1);
52                if ($ope=="and not")
53                        $return2=construct_query($args[2],1,$level+1,2);
54                else
55                        $return2=construct_query($args[2],0,$level+1,2);
56                if ($ope=="and not") $ope="and";
57                $requete="create temporary table r$level ENGINE=MyISAM ";
58                if ($ope=="and") {
59                        $requete.="select distinct $return1.notice_id from $return1, $return2 where $return1.notice_id=$return2.notice_id";
60                        @pmb_mysql_query($requete);
61                } else {
62                        $requete.="select distinct notice_id from $return1";
63                        @pmb_mysql_query($requete);
64                        $requete="insert into r$level select distinct notice_id from $return2 ";
65                        @pmb_mysql_query($requete);
66                }
67                $return="r$level";
68        } else {
69                $use=explode("=",$query);
70                switch ($use[0]) {
71                        //Titre
72                        case 4:
73                                if ($not)
74                                        $requete="select distinct notice_id from notices where (index_wew not like '%".$use[1]."%' )";
75                                else
76                                        $requete="select distinct notice_id from notices where (index_wew like '%".$use[1]."%' )";
77                                break;
78                        //ISBN
79                        case 7:
80                            if(isISBN($use[1])) {
81                                        // si la saisie est un ISBN
82                                        $code = formatISBN($use[1]);
83                                        // si échec, ISBN erroné on le prend sous cette forme
84                                        if(!$code) $code = $use[1];
85                            } else $code = $use[1];
86                                if ($not)
87                                        $requete="select notice_id from notices where (code!='".$code."')";
88                                else
89                                        $requete="select notice_id from notices where (code='".$code."')";
90                                break;
91                        // Auteur
92                        case 1003:
93                                if ($not) {
94                                        $requete="create temporary table aut ENGINE=MyISAM select distinct responsability.responsability_notice as notice_id, index_author as auth from authors, responsability where responsability_author = author_id ";
95                                        @pmb_mysql_query($requete);
96                                        $requete="select distinct notice_id from aut where auth not like '%".$use[1]."%'";
97                                }
98                                else 
99                                        $requete="select distinct notice_id from responsability, authors, notices where index_author like '%".$use[1]."%' and author_id=responsability_author and notice_id=responsability_notice ";
100                                break;
101                        default:
102                                make_error(3,"1=".$use[0]);
103                                break;
104                }
105                $requete="create temporary table r".$level."_".$argn." ENGINE=MyISAM ".$requete;
106                @pmb_mysql_query($requete);
107                $return="r".$level."_".$argn;
108        }
109        return $return;
110}
111
112switch ($command) {
113        case "search":
114                $sup_tables="";
115                $sql_query=construct_query($query,0,0);
116                $sql_query="select notice_id from $sql_query limit 100";
117                $resultat=@pmb_mysql_query($sql_query);
118                echo "0@No errors@";
119                echo @pmb_mysql_num_rows($resultat);
120                while (list($id)=@pmb_mysql_fetch_row($resultat)) {
121                        echo "@$id";
122                }
123                break;
124        case "get_notice":
125                $id=$query;
126                $e = new export(array($id));
127                $e -> get_next_notice();
128                $toiso = new xml_unimarc();
129                $toiso->XMLtoiso2709_notice($e->notice);
130                echo "0@No errors@";
131                echo $toiso->notices_[0];
132                break;
133}
134
135?>
Note: See TracBrowser for help on using the repository browser.