source: pmb4.1/trunk/fuentes/pmb/admin/connecteurs/in/oai/oai.class.php @ 478

Last change on this file since 478 was 478, checked in by mabarracus, 4 years ago

copy trusty code 4.1

  • Property svn:executable set to *
File size: 19.4 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: oai.class.php,v 1.20.6.2 2014-11-04 16:10:22 mbertin Exp $
6
7if (stristr($_SERVER['REQUEST_URI'], ".class.php")) die("no access");
8
9global $class_path,$base_path, $include_path;
10require_once($class_path."/connecteurs.class.php");
11require_once($base_path."/admin/connecteurs/in/oai/oai_protocol.class.php");
12
13if (version_compare(PHP_VERSION,'5','>=') && extension_loaded('xsl')) {
14        if (substr(phpversion(), 0, 1) == "5") @ini_set("zend.ze1_compatibility_mode", "0");
15        require_once($include_path.'/xslt-php4-to-php5.inc.php');
16        }
17
18class oai extends connector {
19        //Variables internes pour la progression de la récupération des notices
20        var $callback_progress;         //Nom de la fonction de callback progression passée par l'appellant
21        var $current_set;                       //Set en cours de synchronisation
22        var $total_sets;                        //Nombre total de sets sélectionnés
23        var $metadata_prefix;           //Préfixe du format de données courant
24        var $source_id;                         //Numéro de la source en cours de synchro
25        var $n_recu;                            //Nombre de notices reçues
26        var $xslt_transform;            //Feuille xslt transmise
27        var $sets_names;                        //Nom des sets pour faire plus joli !!
28        var $del_old;                           //Supression ou non des notices dejà existantes
29       
30        //Résultat de la synchro
31        var $error;                                     //Y-a-t-il eu une erreur       
32        var $error_message;                     //Si oui, message correspondant
33       
34    function oai($connector_path="") {
35        parent::connector($connector_path);
36    }
37   
38    function get_id() {
39        return "oai";
40    }
41   
42    //Est-ce un entrepot ?
43        function is_repository() {
44                return 1;
45        }
46   
47    function unserialize_source_params($source_id) {
48        $params=$this->get_source_params($source_id);
49                if ($params["PARAMETERS"]) {
50                        $vars=unserialize($params["PARAMETERS"]);
51                        $params["PARAMETERS"]=$vars;
52                }
53                return $params;
54    }
55   
56    function source_get_property_form($source_id) {
57        global $charset;
58       
59        $params=$this->get_source_params($source_id);
60                if ($params["PARAMETERS"]) {
61                        //Affichage du formulaire avec $params["PARAMETERS"]
62                        $vars=unserialize($params["PARAMETERS"]);
63                        foreach ($vars as $key=>$val) {
64                                global $$key;
65                                $$key=$val;
66                        }       
67                }
68                $form="<div class='row'>
69                        <div class='colonne3'>
70                                <label for='url'>".$this->msg["oai_url"]."</label>
71                        </div>
72                        <div class='colonne_suite'>
73                                <input type='text' name='url' id='url' class='saisie-60em' value='".htmlentities($url,ENT_QUOTES,$charset)."'/>
74                        </div>
75                </div>
76                <div class='row'>
77                        <div class='colonne3'>
78                                <label for='clean_base_url'>".$this->msg["oai_clean_url"]."</label>
79                        </div>
80                        <div class='colonne_suite'>
81                                <input type='checkbox' name='clean_base_url' id='clean_base_url' value='1' ".($clean_base_url?"checked":"")."/>
82                        </div>
83                </div>
84                <div class='row'>
85                ";
86                if (!$url) 
87                        $form.="<h3 style='text-align:center'>".$this->msg["rec_addr"]."</h3>";
88                else {
89                        //Intérogation du serveur
90                        $oai_p=new oai20($url,$charset,$params["TIMEOUT"]);
91                        if ($oai_p->error) {
92                                $form.="<h3 style='text-align:center'>".sprintf($this->msg["error_contact_server"],$oai_p->error_message)."</h3>";
93                        } else {
94                                $form.="<h3 style='text-align:center'>".$oai_p->repositoryName."</h3>";
95                                if ($oai_p->description)
96                                        $form.="
97                                        <div class='row'>
98                                                <div class='colonne3'>
99                                                        <label>".$this->msg["oai_desc"]."</label>
100                                                </div>
101                                                <div class='colonne_suite'>
102                                                        ".htmlentities($oai_p->description,ENT_QUOTES,$charset)."
103                                                </div>
104                                        </div>
105                                        ";
106                                $form.="
107                                <div class='row'>
108                                        <div class='colonne3'>
109                                                <label>".$this->msg["oai_older_metatdatas"]."</label>
110                                        </div>
111                                        <div class='colonne_suite'>
112                                                ".formatdate($oai_p->earliestDatestamp)."
113                                        </div>
114                                </div>
115                                <div class='row'>
116                                        <div class='colonne3'>
117                                                <label>".$this->msg["oai_email_admin"]."</label>
118                                        </div>
119                                        <div class='colonne_suite'>
120                                                ".$oai_p->adminEmail."
121                                        </div>
122                                </div>
123                                <div class='row'>
124                                        <div class='colonne3'>
125                                                <label>".$this->msg["oai_granularity"]."</label>
126                                        </div>
127                                        <div class='colonne_suite'>
128                                                ".($oai_p->granularity=="YYYY-MM-DD"?$this->msg["oai_one_day"]:$this->msg["oai_minute"])."
129                                        </div>
130                                </div>";
131                                if ($oai_p->has_feature("SETS")) {
132                                        $form.="
133                                <div class='row'>
134                                        <div class='colonne3'>
135                                                <label for='sets'>".$this->msg["oai_sets_to_sync"]."</label>
136                                        </div>
137                                        <div class='colonne_suite'>";
138                                        if (count($oai_p->sets)<80) $combien = count($oai_p->sets);
139                                        else $combien=80; 
140                                        $form.="<select id='sets' name='sets[]' class='saisie-80em' multiple='yes' size='".$combien."'>";
141                                        foreach ($oai_p->sets as $set=>$setname) {
142                                                $form.="<option value='".htmlentities($set,ENT_QUOTES,$charset)."' alt='".htmlentities($setname,ENT_QUOTES,$charset)."' title='".htmlentities($setname,ENT_QUOTES,$charset)."' ".(@array_search($set,$sets)!==false?"selected":"").">".htmlentities($setname,ENT_QUOTES,$charset)."</option>\n";
143                                        }
144                                        $form.="        </select>
145                                        </div>
146                                </div>";
147                                }
148                                $form.="
149                                <div class='row'>
150                                        <div class='colonne3'>
151                                                <label for='formats'>".$this->msg["oai_preference_format"]."</label>
152                                        </div>
153                                        <div class='colonne_suite'>
154                                                <select name='formats' id='formats'>";
155                                        if (!is_array($formats))
156                                                $formats = array($formats);
157                                        for ($i=0; $i<count($oai_p->metadatas) ;$i++) {
158                                                $form.="<option value='".htmlentities($oai_p->metadatas[$i]["PREFIX"],ENT_QUOTES,$charset)."' alt='".htmlentities($oai_p->metadatas[$i]["PREFIX"],ENT_QUOTES,$charset)."' title='".htmlentities($oai_p->metadatas[$i]["PREFIX"],ENT_QUOTES,$charset)."' ".(@array_search($oai_p->metadatas[$i]["PREFIX"],$formats)!==false?"selected":"").">".htmlentities($oai_p->metadatas[$i]["PREFIX"],ENT_QUOTES,$charset)."</option>\n";
159                                        }
160                                        $form.="        </select> ".$this->msg["oai_xslt_file"]." <input type='file' name='xslt_file' />";
161                                        if ($xsl_transform) $form.="<br /><i>".sprintf($this->msg["oai_xslt_file_linked"],$xsl_transform["name"])."</i> : ".$this->msg["oai_del_xslt_file"]." <input type='checkbox' name='del_xsl_transform' value='1'/>";
162                                        $form.="                                                </div>
163                                </div>";
164                                if (($oai_p->deletedRecord=="persistent")||($oai_p->deletedRecord=="transient")) {
165                                        $form.="
166                                <div class='row'>
167                                        <div class='colonne3'>
168                                                <label>".sprintf($this->msg["oai_del_marked_elts"],($oai_p->deletedRecord=="persistent"?$this->msg["oai_del_marked_persistent"]:$this->msg["oai_del_marked_temp"])).")</label>
169                                        </div>
170                                        <div class='colonne_suite'>
171                                                <label for='del_yes'>".$this->msg["oai_yes"]."</label><input type='radio' name='del_deleted' id='del_yes' value='1' ".($del_deleted==1?"checked":"").">
172                                                <label for='del_no'>".$this->msg["oai_no"]."</label><input type='radio' name='del_deleted' id='del_no' value='0' ".($del_deleted==0?"checked":"").">
173                                        </div>
174                                </div>";
175                                }
176                        }
177                }
178                $form.="
179        </div>
180        <div class='row'></div>
181";
182                return $form;
183    }
184   
185    function make_serialized_source_properties($source_id) {
186        global $url,$clean_base_url,$sets,$formats,$del_deleted,$del_xsl_transform;
187        $t["url"]=stripslashes($url);
188        $t["clean_base_url"]=$clean_base_url;
189        $t["sets"]=$sets;
190        $t["formats"]=$formats;
191        $t["del_deleted"]=$del_deleted;
192
193        //Vérification du fichier
194        if (($_FILES["xslt_file"])&&(!$_FILES["xslt_file"]["error"])) {
195                $xslt_file_content=array();
196                $xslt_file_content["name"]=$_FILES["xslt_file"]["name"];
197                $xslt_file_content["code"]=file_get_contents($_FILES["xslt_file"]["tmp_name"]);
198                $t["xsl_transform"]=$xslt_file_content;
199        } else if ($del_xsl_transform) {
200                        $t["xsl_transform"]="";
201        } else {
202                $oldparams=$this->get_source_params($source_id);
203                        if ($oldparams["PARAMETERS"]) {
204                                //Anciens paramètres
205                                $oldvars=unserialize($oldparams["PARAMETERS"]);
206                        }
207                        $t["xsl_transform"] = $oldvars["xsl_transform"];
208        }
209                $this->sources[$source_id]["PARAMETERS"]=serialize($t);
210        }
211       
212        //Récupération  des proriétés globales par défaut du connecteur (timeout, retry, repository, parameters)
213        function fetch_default_global_values() {
214                $this->timeout=5;
215                $this->repository=1;
216                $this->retry=3;
217                $this->ttl=1800;
218                $this->parameters="";
219        }
220       
221        //Formulaire des propriétés générales
222        function get_property_form() {
223                $this->fetch_global_properties();
224                return "";
225        }
226       
227        function make_serialized_properties() {
228                $this->parameters="";
229        }
230       
231        function progress($query,$token) {
232                $callback_progress=$this->callback_progress;
233                if ($token["completeListSize"]) {
234                        $percent=($this->current_set/$this->total_sets)+(($token["cursor"]/$token["completeListSize"])/$this->total_sets);
235                        $nlu=$this->n_recu;
236                        $ntotal="inconnu";
237                        //$nlu=$token["cursor"];
238                        //$ntotal=$token["completeListSize"];
239                } else {
240                        $percent=($this->current_set/$this->total_sets);
241                        $nlu=$this->n_recu;
242                        $ntotal="inconnu";
243                }
244                call_user_func($callback_progress,$percent,$nlu,$ntotal);
245        }
246       
247        function rec_record($record) {
248                global $charset,$base_path;
249               
250                $rec=new oai_record($record,$charset,$base_path."/admin/connecteurs/in/oai/xslt",$this->metadata_prefix,$this->xslt_transform,$this->sets_names);
251                $rec_uni=$rec->unimarc;
252                if ($rec->error) echo 'erreur!<br />';
253                if (!$rec->error) {
254                        //On a un enregistrement unimarc, on l'enregistre
255                        $rec_uni_dom=new xml_dom($rec_uni,$charset);
256                        if (!$rec_uni_dom->error) {
257                                //Initialisation
258                                $ref="";
259                                $ufield="";
260                                $usubfield="";
261                                $field_order=0;
262                                $subfield_order=0;
263                                $value="";
264                                $date_import=$rec->header["DATESTAMP"];
265                               
266                                $fs=$rec_uni_dom->get_nodes("unimarc/notice/f");
267                                //Recherche du 001
268                                if(is_array($fs)){
269                                        for ($i=0; $i<count($fs); $i++) {
270                                                if ($fs[$i]["ATTRIBS"]["c"]=="001") {
271                                                        $ref=$rec_uni_dom->get_datas($fs[$i]);
272                                                        break;
273                                                }
274                                        }
275                                }
276                                //Mise à jour
277                                if ($ref) {
278                                        //Si conservation des anciennes notices, on regarde si elle existe
279                                        if (!$this->del_old) {
280                                                $requete="select count(*) from entrepot_source_".$this->source_id." where ref='".addslashes($ref)."'";
281                                                $rref=mysql_query($requete);
282                                                if ($rref) $ref_exists=mysql_result($rref,0,0);
283                                        }
284                                        //Si pas de conservation des anciennes notices, on supprime
285                                        if ($this->del_old) {
286                                                $requete="delete from entrepot_source_".$this->source_id." where ref='".addslashes($ref)."'";
287                                                mysql_query($requete);
288                                        }
289                                        //Si pas de conservation ou reférence inexistante
290                                        if (($this->del_old)||((!$this->del_old)&&(!$ref_exists))) {
291                                                //Insertion de l'entête
292                                                $n_header["rs"]=$rec_uni_dom->get_value("unimarc/notice/rs");
293                                                $n_header["ru"]=$rec_uni_dom->get_value("unimarc/notice/ru");
294                                                $n_header["el"]=$rec_uni_dom->get_value("unimarc/notice/el");
295                                                $n_header["bl"]=$rec_uni_dom->get_value("unimarc/notice/bl");
296                                                $n_header["hl"]=$rec_uni_dom->get_value("unimarc/notice/hl");
297                                                $n_header["dt"]=$rec_uni_dom->get_value("unimarc/notice/dt");
298                                               
299                                                //Récupération d'un ID
300                                                $requete="insert into external_count (recid, source_id) values('".addslashes($this->get_id()." ".$this->source_id." ".$ref)."', ".$this->source_id.")";
301                                                $rid=mysql_query($requete);
302                                                if ($rid) $recid=mysql_insert_id();
303                                               
304                                                foreach($n_header as $hc=>$code) {
305                                                        $requete="insert into entrepot_source_".$this->source_id." (connector_id,source_id,ref,date_import,ufield,usubfield,field_order,subfield_order,value,i_value,recid) values(
306                                                        '".addslashes($this->get_id())."',".$this->source_id.",'".addslashes($ref)."','".addslashes($date_import)."',
307                                                        '".$hc."','',-1,0,'".addslashes($code)."','',$recid)";
308                                                        mysql_query($requete);
309                                                }
310                                               
311                                                for ($i=0; $i<count($fs); $i++) {
312                                                        $ufield=$fs[$i]["ATTRIBS"]["c"];
313                                                        $field_order=$i;
314                                                        $ss=$rec_uni_dom->get_nodes("s",$fs[$i]);
315                                                        if (is_array($ss)) {
316                                                                for ($j=0; $j<count($ss); $j++) {
317                                                                        $usubfield=$ss[$j]["ATTRIBS"]["c"];
318                                                                        $value=$rec_uni_dom->get_datas($ss[$j]);
319                                                                        $subfield_order=$j;
320                                                                        $requete="insert into entrepot_source_".$this->source_id." (connector_id,source_id,ref,date_import,ufield,usubfield,field_order,subfield_order,value,i_value,recid) values(
321                                                                        '".addslashes($this->get_id())."',".$this->source_id.",'".addslashes($ref)."','".addslashes($date_import)."',
322                                                                        '".addslashes($ufield)."','".addslashes($usubfield)."',".$field_order.",".$subfield_order.",'".addslashes($value)."',
323                                                                        ' ".addslashes(strip_empty_words($value))." ',$recid)";
324                                                                        mysql_query($requete);
325                                                                }
326                                                        } else {
327                                                                $value=$rec_uni_dom->get_datas($fs[$i]);
328                                                                $requete="insert into entrepot_source_".$this->source_id." (connector_id,source_id,ref,date_import,ufield,usubfield,field_order,subfield_order,value,i_value,recid) values(
329                                                                '".addslashes($this->get_id())."',".$this->source_id.",'".addslashes($ref)."','".addslashes($date_import)."',
330                                                                '".addslashes($ufield)."','".addslashes($usubfield)."',".$field_order.",".$subfield_order.",'".addslashes($value)."',
331                                                                ' ".addslashes(strip_empty_words($value))." ',$recid)";
332                                                                mysql_query($requete);
333                                                        }
334                                                }
335                                        }
336                                        $this->n_recu++;
337                                }
338                        }
339                }
340        }
341               
342        function cancel_maj($source_id) {
343                return false;
344        }
345       
346        function break_maj($source_id) {
347                return false;
348        }
349       
350        function form_pour_maj_entrepot($source_id,$sync_form="sync_form") {
351                global $charset;
352                global $form_from;
353                global $form_until;
354                global $form_radio;
355
356                $source_id=$source_id+0;
357                $params=$this->get_source_params($source_id);
358                $vars=unserialize($params["PARAMETERS"]);
359
360                $datefrom = 0;
361                $oai_p=new oai20($vars['url'],$charset,$params["TIMEOUT"]);
362                if (!$oai_p->error)             
363                        $earliestdate = strtotime(substr($oai_p->earliestDatestamp, 0, 10));
364
365                $sql = " SELECT MAX(UNIX_TIMESTAMP(date_import)) FROM entrepot_source_".$source_id;
366                $res = mysql_result(mysql_query($sql), 0, 0);
367                $datefrom = $res ? $res : $earliestdate;
368                $latest_date_database_string = $res ? formatdate(date("Y-m-d", $res)) : "<i>".$this->msg["oai_syncinfo_nonotice"]."</i>";
369               
370                $dateuntil = "";               
371                $form = "<blockquote>";
372                $form .= "
373                                ".$this->msg["oai_get_notices"]."
374                                <br /><br />
375                                <input type='radio' name='form_radio' value='last_sync' ".($form_radio == "last_sync" ? "checked" :"")." />".$this->msg["oai_last_sync"]." <br />
376                                <input type='radio' name='form_radio' value='date_sync' ".((($form_radio == "date_sync") || (!$form_radio))  ? "checked" :"")." />".$this->msg["oai_between_part1"]." <br />
377                                <strong>
378                                        <input type='hidden' name='form_from' value='".($form_from ? $form_from : date("Y-m-d",$datefrom))."' />
379                                        <input type=\"text\" readonly size=\"10\" name=\"form_from_lib\" value=\"".(($form_from != '') ? formatdate($form_from) : formatdate(date("Y-m-d",$datefrom)))."\">
380                                        <input class='bouton' type='button' name='form_from_button' value='Selectionner' onClick=\"openPopUp('./select.php?what=calendrier&caller=$sync_form&date_caller=".date("Ymd",$datefrom)."&param1=form_from&param2=form_from_lib&auto_submit=NO&date_anterieure=YES', 'date_adhesion', 250, 300, -2, -2, 'toolbar=no, dependent=yes, resizable=yes')\"   /> (facultatif)
381                                </strong>
382                                <br /> ".$this->msg["oai_between_part2"]." <br />
383                                <strong>
384                                        <input type='hidden' name='form_until' value='".($form_until ? $form_until : $dateuntil)."'  />
385                                        <input type=\"text\" readonly size=\"10\" name=\"form_until_lib\" value=\"".(($form_until != '') ? formatdate($form_until) : "")."\">
386                                        <input class='bouton' type='button' name='form_until_button' value='Selectionner' onClick=\"openPopUp('./select.php?what=calendrier&caller=$sync_form&date_caller=$dateuntil&param1=form_until&param2=form_until_lib&auto_submit=NO&date_anterieure=YES', 'date_adhesion', 250, 300, -2, -2, 'toolbar=no, dependent=yes, resizable=yes')\"   /> (facultatif)
387                                </strong>
388                <br /><br />
389";
390               
391                $form .= sprintf($this->msg["oai_syncinfo_date_serverearlyiest"], formatdate(date("Y-m-d",$earliestdate)));
392                $form .= "<br />".sprintf($this->msg["oai_syncinfo_date_baserecent"], $latest_date_database_string);
393               
394                $form .= "</blockquote>";
395                return $form;
396        }       
397       
398        //Nécessaire pour passer les valeurs obtenues dans form_pour_maj_entrepot au javascript asynchrone
399        function get_maj_environnement($source_id) {
400                global $form_from;
401                global $form_until;
402                global $form_radio;
403                $envt=array();
404                $envt["form_from"]=$form_from;
405                $envt["form_until"]=$form_until;
406                $envt["form_radio"]=$form_radio;
407                return $envt;
408        }
409       
410        function maj_entrepot($source_id,$callback_progress="",$recover=false,$recover_env="") {
411                global $charset;
412                global $form_from, $form_until, $form_radio;
413
414                $this->callback_progress=$callback_progress;
415                $params=$this->unserialize_source_params($source_id);
416                $p=$params["PARAMETERS"];
417                $this->metadata_prefix=$p["formats"];
418                $this->source_id=$source_id;
419                $this->n_recu=0;
420                $this->xslt_transform=$p["xsl_transform"]["code"];
421               
422                //Connexion
423                $oai20=new oai20($p["url"],$charset,$params["TIMEOUT"],$p["clean_base_url"]);
424                if (!$oai20->error) {
425                        if ($recover) {
426                                $envt=unserialize($recover_env);
427                                $sets=$envt["sets"];
428                                $date_start=$envt["date_start"];
429                                $date_end=$envt["date_end"];
430                                $this->del_old=false;
431                        } else {
432                                //Affectation de la date de départ
433                                if ($form_radio == "last_sync") {
434                                        //Recherche de la dernière date...
435                                        $requete="select unix_timestamp(max(date_import)) from entrepot_source_".$source_id." where 1;";
436                                        $resultat=mysql_query($requete);
437                                        if (mysql_num_rows($resultat)) {
438                                                $last_date=mysql_result($resultat,0,0);
439                                                if ($last_date) {
440                                                        //En fonction de la granularité, on ajoute une seconde ou un jour !
441                                                        if ($oai20->granularity=="YYYY-MM-DD") $last_date+=3600*24; else $last_date+=1;
442                                                } else {
443                                                        $earliest_date=new iso8601($oai20->granularity);
444                                                        $last_date=$earliest_date->iso8601_to_unixtime($oai20->earliestDatestamp);
445                                                }
446                                        } else {
447                                                $earliest_date=new iso8601($oai20->granularity);
448                                                $last_date=$earliest_date->iso8601_to_unixtime($oai20->earliestDatestamp);
449                                        }
450                                        $date_start=$last_date;
451                                } else {
452                                        if ($form_from)
453                                                $date_start=strtotime($form_from);
454                                        if ($form_until) 
455                                                $date_end = strtotime($form_until);
456                                        else 
457                                                $date_end = '';                         
458                                }
459
460                               
461                                //Recherche des sets sélectionnés
462                                $this->sets_names=$oai20->sets;
463                                for ($i=0; $i<count($p["sets"]);$i++) {
464                                        if ($oai20->sets[$p["sets"][$i]]) {
465                                                $sets[]=$p["sets"][$i];
466                                        }
467                                }
468                                $this->del_old=true;
469                        }
470                       
471                        //Mise à jour de source_sync pour reprise en cas d'erreur
472                        $envt["sets"]=$sets;
473                        $envt["date_start"]=$date_start;
474                        $envt["date_end"]=$date_end;
475                        $requete="update source_sync set env='".addslashes(serialize($envt))."' where source_id=".$source_id;
476                        mysql_query($requete);
477                       
478                        //Lancement de la requête
479                        $this->current_set=0;
480                        $this->total_sets=count($sets);
481                        if (count($sets)) {
482                                for ($i=0; $i<count($sets); $i++) {
483                                        $this->current_set=$i;
484                                        $oai20->list_records($date_start,$date_end,$sets[$i],$p["formats"],array(&$this,"rec_record"),array(&$this,"progress"));
485                                        if (($oai20->error)&&($oai20->error_oai_code!="noRecordsMatch")) {
486                                                $this->error=true;
487                                                $this->error_message.=$oai20->error_message."<br />";
488                                        }
489                                }
490                        } else {
491                                $this->current_set=0;
492                                $this->total_sets=1;
493                                $oai20->list_records($date_start,$date_end,"",$p["formats"],array(&$this,"rec_record"),array(&$this,"progress"));
494                                if (($oai20->error)&&($oai20->error_oai_code!="noRecordsMatch")) {
495                                        $this->error=true;
496                                        $this->error_message.=$oai20->error_message."<br />";
497                                }
498                        }
499                } else {
500                        $this->error=true;
501                        $this->error_message=$oai20->error_message;
502                }
503                return $this->n_recu;
504        }
505}
506?>
Note: See TracBrowser for help on using the repository browser.