source: pmb4.1/trunk/fuentes/pmb/admin/connecteurs/in/aligastore/aligastore.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: 31.6 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: aligastore.class.php,v 1.13 2013-04-17 08:49:15 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/aligastore/aligastore_protocol.class.php");
12require_once("$include_path/isbn.inc.php");
13require_once("$class_path/caddie.class.php");
14
15if (version_compare(PHP_VERSION,'5','>=') && extension_loaded('xsl')) {
16        if (substr(phpversion(), 0, 1) == "5") @ini_set("zend.ze1_compatibility_mode", "0");
17        require_once($include_path.'/xslt-php4-to-php5.inc.php');
18}
19
20if (!function_exists('file_put_contents')) {
21    function file_put_contents($filename, $data) {
22        $f = @fopen($filename, 'w');
23        if (!$f) {
24            return false;
25        } else {
26            $bytes = fwrite($f, $data);
27            fclose($f);
28            return $bytes;
29        }
30    }
31}
32
33
34//Voici un array_unique qui marche aussi avec des objects et des arrays.
35function array_unique_more($array, $keep_key_assoc = false)
36{
37    $duplicate_keys = array();
38    $tmp         = array();       
39
40    foreach ($array as $key=>$val)
41    {
42        // convert objects to arrays, in_array() does not support objects
43        if (is_object($val))
44            $val = (array)$val;
45
46        if (!in_array($val, $tmp))
47            $tmp[] = $val;
48        else
49            $duplicate_keys[] = $key;
50    }
51
52    foreach ($duplicate_keys as $key)
53        unset($array[$key]);
54       
55    return $keep_key_assoc ? $array : array_values($array);
56}
57
58class aligastore extends connector {
59        //Variables internes pour la progression de la récupération des notices
60        var $callback_progress;         //Nom de la fonction de callback progression passée par l'appellant
61        var $current_set;                       //Set en cours de synchronisation
62        var $total_sets;                        //Nombre total de sets sélectionnés
63        var $metadata_prefix;           //Préfixe du format de données courant
64        var $source_id;                         //Numéro de la source en cours de synchro
65        var $search_id;
66        var $xslt_transform;            //Feuille xslt transmise
67        var $sets_names;                        //Nom des sets pour faire plus joli !!
68        var $del_old;                           //Supression ou non des notices dejà existantes
69        var $url;
70        var $username;
71        var $password;
72        var $blank_image;
73        var $image_thumb_url;
74        var $image_front;
75        var $image_back;
76        var $image_folder;
77        var $image_folder_url;
78        var $fetchimages;
79       
80        //Résultat de la synchro
81        var $error;                                     //Y-a-t-il eu une erreur       
82        var $error_message;                     //Si oui, message correspondant
83       
84    function aligastore($connector_path="") {
85        parent::connector($connector_path);
86    }
87   
88    function get_id() {
89        return "aligastore";
90    }
91   
92    //Est-ce un entrepot ?
93        function is_repository() {
94                return 3;
95        }
96   
97    function unserialize_source_params($source_id) {
98        $params=$this->get_source_params($source_id);
99                if ($params["PARAMETERS"]) {
100                        $vars=unserialize($params["PARAMETERS"]);
101                        $params["PARAMETERS"]=$vars;
102                }
103                return $params;
104    }
105   
106    function source_get_property_form($source_id) {
107        global $charset;
108       
109        $params=$this->get_source_params($source_id);
110                if ($params["PARAMETERS"]) {
111                        //Affichage du formulaire avec $params["PARAMETERS"]
112                        $vars=unserialize($params["PARAMETERS"]);
113                        foreach ($vars as $key=>$val) {
114                                global $$key;
115                                $$key=$val;
116                        }       
117                }
118                //URL
119                if (!isset($url))
120                        $url = "http://www.aligastore.com/partenaires/xmldetaillivre.php";
121                $form="<div class='row'>
122                        <div class='colonne3'>
123                                <label for='url'>".$this->msg["aliga_base_url"]."</label>
124                        </div>
125                        <div class='colonne_suite'>
126                                <input type='text' name='url' id='url' class='saisie-60em' value='".htmlentities($url,ENT_QUOTES,$charset)."'/>
127                        </div>
128                </div>";
129
130                //Username
131                if (!isset($username))
132                        $username="";
133                $form.="<div class='row'>
134                        <div class='colonne3'>
135                                <label for='url'>".$this->msg["aliga_username"]."</label>
136                        </div>
137                        <div class='colonne_suite'>
138                                <input type='text' name='username' id='url' class='saisie-30em' value='".htmlentities($username,ENT_QUOTES,$charset)."'/>
139                        </div>
140                </div>
141                ";
142               
143                //Password
144                if (!isset($password))
145                        $password="";
146                $form.="<div class='row'>
147                        <div class='colonne3'>
148                                <label for='url'>".$this->msg["aliga_password"]."</label>
149                        </div>
150                        <div class='colonne_suite'>
151                                <input type='text' name='password' id='url' class='saisie-30em' value='".htmlentities($password,ENT_QUOTES,$charset)."'/>
152                        </div>
153                </div>
154                ";
155
156                //Image Thumb URL
157                if (!isset($image_thumb_url))
158                        $image_thumb_url="http://www.aligastore.com/query.dll/img?gcdFab=!!isbn!!&type=0";
159                $form.="<div class='row'>
160                        <div class='colonne3'>
161                                <label for='url'>".$this->msg["aliga_image_thumburl"]."</label>
162                        </div>
163                        <div class='colonne_suite'>
164                                <input type='text' name='image_thumb_url' id='image_thumb_url' class='saisie-60em' value='".htmlentities($image_thumb_url,ENT_QUOTES,$charset)."'/>
165                        </div>
166                </div>
167                ";
168               
169                //Image Front
170                if (!isset($image_front))
171                        $image_front="http://www.aligastore.com/query.dll/img?gcdFab=!!isbn!!&type=1";
172                $form.="<div class='row'>
173                        <div class='colonne3'>
174                                <label for='url'>".$this->msg["aliga_image_front"]."</label>
175                        </div>
176                        <div class='colonne_suite'>
177                                <input type='text' name='image_front' id='image_front' class='saisie-60em' value='".htmlentities($image_front,ENT_QUOTES,$charset)."'/>
178                        </div>
179                </div>
180                ";
181
182                //Image Back
183                if (!isset($image_back))
184                        $image_back="http://www.aligastore.com/query.dll/img?gcdFab=!!isbn!!&type=4";
185                $form.="<div class='row'>
186                        <div class='colonne3'>
187                                <label for='url'>".$this->msg["aliga_image_back"]."</label>
188                        </div>
189                        <div class='colonne_suite'>
190                                <input type='text' name='image_back' id='image_back' class='saisie-60em' value='".htmlentities($image_back,ENT_QUOTES,$charset)."'/>
191                        </div>
192                </div>
193                ";
194
195                //Image Fetch?
196                if (!isset($fetch_images))
197                        $fetch_images=0;
198                $form.="<div class='row'>
199                        <div class='colonne3'>
200                                <label for='url'>".$this->msg["aliga_fetch_images"]."</label>
201                        </div>
202                        <div class='colonne_suite'>
203                                <input type='checkbox' name='fetch_images' ".($fetch_images ? 'checked' : '')." id='fetch_images'/>
204                        </div>
205                </div>
206                ";
207
208                //Image Folder
209                if (!isset($image_folder))
210                        $image_folder="";
211                $form.="<div class='row'>
212                        <div class='colonne3'>
213                                <label for='url'>".$this->msg["aliga_image_folder"]."</label>
214                        </div>
215                        <div class='colonne_suite'>
216                                <input type='text' name='image_folder' id='image_folder' class='saisie-30em' value='".htmlentities($image_folder,ENT_QUOTES,$charset)."'/>
217                        </div>
218                </div>
219                ";
220               
221                //Image Folder Public URL
222                if (!isset($image_folder_public))
223                        $image_folder_public="";
224                $form.="<div class='row'>
225                        <div class='colonne3'>
226                                <label for='url'>".$this->msg["aliga_image_folder_public"]."</label>
227                        </div>
228                        <div class='colonne_suite'>
229                                <input type='text' name='image_folder_public' id='image_folder_public' class='saisie-30em' value='".htmlentities($image_folder_public,ENT_QUOTES,$charset)."'/>
230                        </div>
231                </div>
232                ";
233
234                $form.="
235        <div class='row'></div>
236";
237                return $form;
238    }
239   
240    function make_serialized_source_properties($source_id) {
241        global $url,$username, $password, $fetch_images, $image_folder, $image_thumb_url, $image_front, $image_back, $image_folder_public;
242        $t["url"]=stripslashes($url);
243        $t["username"]=stripslashes($username);
244        $t["password"]=stripslashes($password);
245        $t["fetch_images"]=stripslashes($fetch_images);
246        $t["image_folder"]=stripslashes($image_folder);
247        $t["image_folder_public"]=stripslashes($image_folder_public);
248        $t["image_thumb_url"]=stripslashes($image_thumb_url);
249        $t["image_front"]=stripslashes($image_front);
250        $t["image_back"]=stripslashes($image_back);
251
252                $this->sources[$source_id]["PARAMETERS"]=serialize($t);
253        }
254       
255        //Récupération  des proriétés globales par défaut du connecteur (timeout, retry, repository, parameters)
256        function fetch_default_global_values() {
257                $this->timeout=5;
258                $this->repository=1;
259                $this->retry=3;
260                $this->ttl=1800;
261                $this->parameters="";
262        }
263       
264        //Formulaire des propriétés générales
265        function get_property_form() {
266                $this->fetch_global_properties();
267                return "";
268        }
269       
270        function make_serialized_properties() {
271                $this->parameters="";
272        }
273       
274        function rec_record($record, $source_id, $search_id) {
275                global $charset,$base_path;
276                if (!trim($record))
277                        return;
278                //On a un enregistrement unimarc, on l'enregistre
279                $rec_uni_dom=new xml_dom_aligastore($record,$charset, false);
280                if (!$rec_uni_dom->error) {
281                        //Initialisation
282                        $ref="";
283                        $ufield="";
284                        $usubfield="";
285                        $field_order=0;
286                        $subfield_order=0;
287                        $value="";
288                        $date_import=date("Y-m-d H:i:s",time());
289                       
290                        $fs=$rec_uni_dom->get_nodes("unimarc/notice/f");
291                        //Recherche du 001
292                        if ($fs)
293                                for ($i=0; $i<count($fs); $i++) {
294                                        if ($fs[$i]["ATTRIBS"]["c"]=="001") {
295                                                $ref=$rec_uni_dom->get_datas($fs[$i]);
296                                                break;
297                                        }
298                                }
299                        if (!$ref) $ref = md5($record);
300                        //Mise à jour
301                        if ($ref) {
302                                //Si conservation des anciennes notices, on regarde si elle existe
303                                if (!$this->del_old) {
304                                        $requete="select count(*) from entrepot_source_".$source_id." where ref='".addslashes($ref)."'";
305                                        $rref=mysql_query($requete);
306                                        if ($rref) $ref_exists=mysql_result($rref,0,0);
307                                }
308                                //Si pas de conservation des anciennes notices, on supprime
309                                if ($this->del_old) {
310                                        $requete="delete from entrepot_source_".$source_id." where ref='".addslashes($ref)."'";
311                                        mysql_query($requete);
312                                }
313                                $ref_exists = false;
314                                //Si pas de conservation ou ref�rence inexistante
315                                if (($this->del_old)||((!$this->del_old)&&(!$ref_exists))) {
316                                        //Insertion de l'ent�te
317                                        $n_header["rs"]=$rec_uni_dom->get_value("unimarc/notice/rs");
318                                        $n_header["ru"]=$rec_uni_dom->get_value("unimarc/notice/ru");
319                                        $n_header["el"]=$rec_uni_dom->get_value("unimarc/notice/el");
320                                        $n_header["bl"]=$rec_uni_dom->get_value("unimarc/notice/bl");
321                                        $n_header["hl"]=$rec_uni_dom->get_value("unimarc/notice/hl");
322                                        $n_header["dt"]=$rec_uni_dom->get_value("unimarc/notice/dt");
323                                       
324                                        //R�cup�ration d'un ID
325                                        $requete="insert into external_count (recid, source_id) values('".addslashes($this->get_id()." ".$source_id." ".$ref)."', ".$source_id.")";
326                                        $rid=mysql_query($requete);
327                                        if ($rid) $recid=mysql_insert_id();
328                                       
329                                        foreach($n_header as $hc=>$code) {
330                                                $requete="insert into entrepot_source_".$source_id." (connector_id,source_id,ref,date_import,ufield,usubfield,field_order,subfield_order,value,i_value,recid, search_id) values(
331                                                '".addslashes($this->get_id())."',".$source_id.",'".addslashes($ref)."','".addslashes($date_import)."',
332                                                '".$hc."','',-1,0,'".addslashes($code)."','',$recid, '$search_id')";
333                                                mysql_query($requete);
334                                        }
335                                        if ($fs)
336                                        for ($i=0; $i<count($fs); $i++) {
337                                                $ufield=$fs[$i]["ATTRIBS"]["c"];
338                                                $field_order=$i;
339                                                $ss=$rec_uni_dom->get_nodes("s",$fs[$i]);
340                                                if (is_array($ss)) {
341                                                        for ($j=0; $j<count($ss); $j++) {
342                                                                $usubfield=$ss[$j]["ATTRIBS"]["c"];
343                                                                $value=$rec_uni_dom->get_datas($ss[$j]);
344                                                                $subfield_order=$j;
345                                                                $requete="insert into entrepot_source_".$source_id." (connector_id,source_id,ref,date_import,ufield,usubfield,field_order,subfield_order,value,i_value,recid, search_id) values(
346                                                                '".addslashes($this->get_id())."',".$source_id.",'".addslashes($ref)."','".addslashes($date_import)."',
347                                                                '".addslashes($ufield)."','".addslashes($usubfield)."',".$field_order.",".$subfield_order.",'".addslashes($value)."',
348                                                                ' ".addslashes(strip_empty_words($value))." ',$recid, '$search_id')";
349                                                                mysql_query($requete);
350                                                        }
351                                                } else {
352                                                        $value=$rec_uni_dom->get_datas($fs[$i]);
353                                                        $requete="insert into entrepot_source_".$source_id." (connector_id,source_id,ref,date_import,ufield,usubfield,field_order,subfield_order,value,i_value,recid, search_id) values(
354                                                        '".addslashes($this->get_id())."',".$source_id.",'".addslashes($ref)."','".addslashes($date_import)."',
355                                                        '".addslashes($ufield)."','".addslashes($usubfield)."',".$field_order.",".$subfield_order.",'".addslashes($value)."',
356                                                        ' ".addslashes(strip_empty_words($value))." ',$recid, '$search_id')";
357                                                        mysql_query($requete);
358                                                }
359                                        }
360                                }
361                                $this->n_recu++;
362                        }
363                }
364        }
365               
366        function cancel_maj($source_id) {
367                return false;
368        }
369       
370        function break_maj($source_id) {
371                return false;
372        }
373       
374        function form_pour_maj_entrepot($source_id,$sync_form="sync_form") {
375                global $quoi_synchro;
376               
377                $form = "";
378               
379                $form .= "<script>";
380                $form .= "
381                function unckeckall() {
382                        for (i=0, count=document.".$sync_form.".elements.length; i<count; i++) {
383                                if (document.".$sync_form.".elements[i].value.substr(0, 21) == 'synchro_noticecaddie_') {
384                                        document.".$sync_form.".elements[i].checked = false;
385                                }
386                                if (document.".$sync_form.".elements[i].value.substr(0, 19) == 'synchro_explcaddie_') {
387                                        document.".$sync_form.".elements[i].checked = false;
388                                }
389                        }
390                }
391
392                function clear_the_radio_button() {
393                        document.getElementById('quoi_synchro_synchro_base').checked = false;
394                }";             
395                $form .= "</script>";
396               
397                $form .= $this->msg["aliga_syncbase"];
398                $form .= '<blockquote>';
399                $form .= '<input type="radio" onclick="unckeckall();" name="quoi_synchro[]" value="synchro_base" id="quoi_synchro_synchro_base" '.(((!$quoi_synchro) || ($quoi_synchro['synchro_base']))  ? 'checked' : '').'><label for="quoi_synchro_synchro_base">'.$this->msg["aliga_syncbase"].'</label>';
400                $form .= '</blockquote>';
401
402                $form .= $this->msg["aliga_sync_noticecaddie"];
403                $form .= '<blockquote>';
404                $caddies = caddie::get_cart_list("NOTI");
405                foreach ($caddies as $caddie) {
406                        $form .= '<input type="checkbox" onclick="clear_the_radio_button()" name="quoi_synchro[]" value="synchro_noticecaddie_'.$caddie["idcaddie"].'" id="quoi_synchro_synchro_noticecaddie_'.$caddie["idcaddie"].'" '.($quoi_synchro['synchro_noticecaddie_'.$caddie["idcaddie"].''] ? 'checked' : '').'><label for="quoi_synchro_synchro_noticecaddie_'.$caddie["idcaddie"].'">'.$caddie["name"].'</label><i> ('.($caddie["nb_item_base"]).' '.$this->msg["aliga_caddie_element"].')</i><br />';                     
407                }
408                $form .= '</blockquote>';
409               
410               
411                $form .= $this->msg["aliga_sync_explcaddie"];
412                $form .= '<blockquote>';
413                $caddies = caddie::get_cart_list("EXPL");
414                foreach ($caddies as $caddie) {
415                        $form .= '<input type="checkbox" onclick="clear_the_radio_button()" name="quoi_synchro[]" value="synchro_explcaddie_'.$caddie["idcaddie"].'" id="quoi_synchro_synchro_explcaddie_'.$caddie["idcaddie"].'" '.($quoi_synchro['synchro_explcaddie_'.$caddie["idcaddie"].''] ? 'checked' : '').'><label for="quoi_synchro_synchro_explcaddie_'.$caddie["idcaddie"].'">'.$caddie["name"].' <i>('.($caddie["nb_item_base"]).' '.$this->msg["aliga_caddie_element"].')</i></label><br />';
416                }                               
417                $form .= '</blockquote>';
418                $form .= "<br /><br />";
419                return $form;
420        }
421
422        //Nécessaire pour passer les valeurs obtenues dans form_pour_maj_entrepot au javascript asynchrone
423        function get_maj_environnement($source_id) {
424                global $quoi_synchro;
425                $envt=array();
426                foreach ($quoi_synchro as $synchro) {
427                        $envt["quoi_synchro"][$synchro]=$synchro;                       
428                }
429                return $envt;
430        }
431               
432        function get_image_information($isbn, $download_images) {
433                global $charset;
434                //Récupération et traitement des images et des zones associées.
435                $bypass_testvalidity = true;
436                $images_status = array(
437                        "thumb" => "",
438                        "front" => "",
439                        "back" => ""
440                );
441                if ($download_images) {
442                        $images_status = $this->fetch_and_record_images($isbn);
443                }
444                if (!$images_status["thumb"] && $this->image_thumb_url) {
445                        if ($bypass_testvalidity || $this->test_image_validity($isbn, $this->image_thumb_url)) {
446                                $url = str_replace("!!isbn!!", $isbn, $this->image_thumb_url);
447                                $images_status["thumb"] = $url;
448                        }
449                }
450                if (!$images_status["front"] && $this->image_front) {
451                        if ($bypass_testvalidity || $this->test_image_validity($isbn, $this->image_front)) {
452                                $url = str_replace("!!isbn!!", $isbn, $this->image_front);
453                                $images_status["front"] = $url;
454                        }
455                }
456                if (!$images_status["back"] && $this->image_back) {
457                        if ($bypass_testvalidity || $this->test_image_validity($isbn, $this->image_back)) {
458                                $url = str_replace("!!isbn!!", $isbn, $this->image_back);
459                                $images_status["back"] = $url;
460                        }
461                }
462               
463                $image_information = "";
464                if ($images_status["thumb"]) {
465                        $image_information .= '<f c="896">';
466                        $image_information .=   '<s c="a">';
467                        $image_information .=     htmlspecialchars($images_status["thumb"],ENT_NOQUOTES,$charset);
468                        $image_information .=   '</s>';
469                        $image_information .= '</f>';
470                }
471                if ($images_status["front"]) {
472                        $image_information .= '<f c="897">';
473                        $image_information .=   '<s c="a">';
474                        $image_information .=     htmlspecialchars($images_status["front"],ENT_NOQUOTES,$charset);
475                        $image_information .=   '</s>';
476                        $image_information .=   '<s c="b">';
477                        $image_information .=     htmlspecialchars($this->msg["aliga_cover_front"],ENT_NOQUOTES,$charset);
478                        $image_information .=   '</s>';
479                        $image_information .= '</f>';
480                }
481                if ($images_status["back"]) {
482                        $image_information .= '<f c="897">';
483                        $image_information .=   '<s c="a">';
484                        $image_information .=     htmlspecialchars($images_status["back"],ENT_NOQUOTES,$charset);
485                        $image_information .=   '</s>';
486                        $image_information .=   '<s c="b">';
487                        $image_information .=     htmlspecialchars($this->msg["aliga_cover_back"],ENT_NOQUOTES,$charset);
488                        $image_information .=   '</s>';
489                        $image_information .= '</f>';
490                }
491               
492                return $image_information;
493        }
494       
495        function fetch_and_record_notice($isbn, $xsl) {
496                if (!$isbn)
497                        return;
498       
499                $parameters = array(
500                        "LOG" => $this->username,
501                        "PASS" => $this->password,
502                        "GcdFab" => $isbn
503                );
504                $base_url = $this->url;
505               
506                $arequest = new aligastore_request($base_url, $parameters);
507                $arequest->aligastore_response();
508                if ($arequest->data) {
509                        $arequest->data = $this->apply_xsl_to_xml($arequest->data, $xsl);
510                       
511                        $images_are_present = preg_match("<!--!!!__IMAGEINFO_YES__!!!-->", $arequest->data);
512                        if ($images_are_present)
513                                $image_info = $this->get_image_information($isbn, $this->fetchimages);
514                        else $image_info = "";
515
516                        $arequest->data = str_replace("<!--!!!__IMAGEINFO_YES__!!!-->", "", $arequest->data);
517                        $arequest->data = str_replace("<!--!!!__IMAGEINFO_NO__!!!-->", "", $arequest->data);
518                               
519                        $arequest->data = str_replace("<!--!!!__thumbnail_information__!!!-->", $image_info, $arequest->data);
520                        $this->rec_record($arequest->data, $this->source_id, $this->search_id);
521                }
522        }
523       
524        function fetch_and_record_images($isbn) {
525                if (!is_dir($this->image_folder))
526                        return;
527
528                $result = array(
529                        "thumb" => "",
530                        "front" => "",
531                        "back" => ""
532                );
533               
534                $ch = curl_init();
535                curl_setopt($ch, CURLOPT_HEADER, 0);
536                curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
537                $folder = $this->image_folder;
538                $folder_url = $this->image_folder_url;
539               
540                configurer_proxy_curl($ch);
541
542                if (!file_exists($folder."/".$isbn."_thumb.jpg")) {
543                        $url = str_replace("!!isbn!!", $isbn, $this->image_thumb_url);
544                        curl_setopt($ch, CURLOPT_URL, $url);
545                        $buffer = curl_exec($ch);
546                        if (!curl_error($ch)) {
547                                file_put_contents($folder."/".$isbn."_thumb.jpg", $buffer);
548                                $result['thumb'] = $folder_url."/".$isbn."_thumb.jpg";
549                        }
550                }
551                else
552                        $result['thumb'] = $folder_url."/".$isbn."_thumb.jpg";
553               
554                if (!file_exists($folder."/".$isbn."_front.jpg")) {
555                        $url = str_replace("!!isbn!!", $isbn, $this->image_front);
556                        curl_setopt($ch, CURLOPT_URL, $url);
557                        $buffer = curl_exec($ch);
558                        if (!curl_error($ch)) {
559                                file_put_contents($folder."/".$isbn."_front.jpg", $buffer);
560                                $result['front'] = $folder_url."/".$isbn."_front.jpg";
561                        }
562               
563                }
564                else
565                        $result['front'] = $folder_url."/".$isbn."_front.jpg";
566
567                if (!file_exists($folder."/".$isbn."_back.jpg")) {
568                        $url = str_replace("!!isbn!!", $isbn, $this->image_back);
569                        curl_setopt($ch, CURLOPT_URL, $url);
570                        $buffer = curl_exec($ch);
571                        if (!curl_error($ch)) {
572                                file_put_contents($folder."/".$isbn."_back.jpg", $buffer);
573                                $result['back'] = $folder_url."/".$isbn."_back.jpg";
574                        }
575                }
576                else
577                        $result['back'] = $folder_url."/".$isbn."_back.jpg";
578       
579                curl_close($ch);
580                return $result;
581        }
582       
583        function get_blank_image($url_thumb) {
584                $ch = curl_init();
585                curl_setopt($ch, CURLOPT_HEADER, 0);
586                curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
587                $url = str_replace("!!isbn!!", "", $url_thumb);
588                curl_setopt($ch, CURLOPT_URL, $url);
589                $buffer = curl_exec($ch);
590                curl_close($ch);
591                return $buffer;
592        }
593       
594        function test_image_validity($isbn, $url) {
595                if (!$this->blank_image) {
596                        $this->blank_image = $this->get_blank_image($url);
597                }
598               
599                $ch = curl_init();
600                curl_setopt($ch, CURLOPT_HEADER, 0);
601                curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
602                $url = str_replace("!!isbn!!", $isbn, $url);
603                curl_setopt($ch, CURLOPT_URL, $url);
604                $image = curl_exec($ch);
605                curl_close($ch);
606               
607                return !($image == $this->blank_image);
608        }
609       
610        function maj_entrepot($source_id,$callback_progress="",$recover=false,$recover_env="") {
611                global $dbh, $charset;
612                @set_time_limit(0);
613                //Allons chercher plein d'informations utiles et amusantes
614                $params=$this->get_source_params($source_id);
615                $this->fetch_global_properties();
616                if ($params["PARAMETERS"]) {
617                        //Affichage du formulaire avec $params["PARAMETERS"]
618                        $vars=unserialize($params["PARAMETERS"]);
619                        foreach ($vars as $key=>$val) {
620                                global $$key;
621                                $$key=$val;
622                        }       
623                }
624                if (!isset($url))
625                        $url = "";
626                if (!isset($username))
627                        $username = "";
628                if (!isset($password))
629                        $password = "";
630                if (!isset($fetch_images))
631                        $fetch_images = 0;
632                if (!isset($image_folder))
633                        $image_folder = 0;
634                if (!isset($image_folder_public))
635                        $image_folder_public = 0;
636                if (!isset($image_thumb_url))
637                        $image_thumb_url = 0;
638                if (!isset($image_front))
639                        $image_front = 0;
640                if (!isset($image_back))
641                        $image_back = 0;
642
643                $this->url = $url;
644                $this->username = $username;
645                $this->password = $password;
646                $this->source_id = $source_id;
647                $this->search_id = 0;
648                $this->image_thumb_url = $image_thumb_url;
649                $this->image_front = $image_front;
650                $this->image_back = $image_back;
651                $this->image_folder = $image_folder;
652                $this->image_folder_url = $image_folder_public;
653                $this->fetchimages = $fetch_images;
654               
655                if ($recover) {
656                        $envt=unserialize($recover_env);
657                        $start_notice_id = $envt["current_notice_id"];
658                        $count_lu=$envt["already_read_count"];
659                }
660                else {
661                        $start_notice_id = 0;
662                        $count_lu = 0;
663                }
664
665                //Obtenons une liste d'ISBN à synchroniser
666                        //Toute la base
667                $isbns = array();
668                global $quoi_synchro;
669                if (!$quoi_synchro)
670                        $quoi_synchro = array("synchro_base");
671                       
672                foreach($quoi_synchro as $quoi_synchru) {
673                        if ($quoi_synchru == "synchro_base") {
674                                $sql_local = "SELECT code, notice_id FROM notices WHERE code != '' AND notice_id > ".addslashes($start_notice_id)." ORDER BY notice_id";
675                                $res = mysql_query($sql_local);
676                                while($row = mysql_fetch_row($res)) {
677                                        if (isISBN($row[0])) {
678                                                $isbns[] = array("isbn" => $row[0], "notice_id" => $row[1]);
679                                        }
680                                }                       
681                        }
682                                //Panier de notice
683                        else if (substr($quoi_synchru, 0, 21) == "synchro_noticecaddie_") { 
684                                $caddie_id = substr($quoi_synchru, 21);
685                                $caddie_content_sql = "SELECT notices.code, notices.notice_id FROM caddie_content LEFT JOIN notices ON (caddie_content.object_id = notices.notice_id) WHERE caddie_content.caddie_id = ".addslashes($caddie_id).' AND notices.code != \'\'';
686                                $res = mysql_query($caddie_content_sql, $dbh);
687                                while ($row=mysql_fetch_row($res)) {
688                                        if (isISBN($row[0])) {
689                                                $isbns[] = array("isbn" => $row[0], "notice_id" => $row[1]);
690                                        }
691                                }
692                        }
693                                //Panier d'exemplaires
694                        else if (substr($quoi_synchru, 0, 19) == "synchro_explcaddie_") { 
695                                $caddie_id = substr($quoi_synchru, 19);
696                                $caddie_content_sql = "SELECT notices.code, notices.notice_id FROM caddie_content, exemplaires, notices  WHERE caddie_content.object_id = exemplaires.expl_id AND exemplaires.expl_notice = notices.notice_id AND caddie_content.caddie_id = ".addslashes($caddie_id).' AND notices.code != \'\'';
697                                $res = mysql_query($caddie_content_sql, $dbh);
698                                while ($row=mysql_fetch_row($res)) {
699                                        if (isISBN($row[0])) {
700                                                $isbns[] = array("isbn" => $row[0], "notice_id" => $row[1]);
701                                        }
702                                }
703                        }                       
704                }
705
706       
707                //Et on dédoublonne
708                $isbns = array_unique_more($isbns);
709
710                //Allons chercher la feuille de conversion aliga->pmbunimarc
711                global $base_path;
712                $xsl_transform = file_get_contents($base_path."/admin/connecteurs/in/aligastore/xslt/aligatopmbunimarx.xsl");
713               
714                //Et c'est parti
715                $count_total = count($isbns)+$count_lu;
716                $latest_percent = floor(100 * $count_lu / $count_total);
717                foreach ($isbns as $isbn) {
718                        //Si on veut des images, il nous faut un isbn 13
719                        $isbn["isbn"] = formatISBN($isbn["isbn"], 13);
720                        $isbn["isbn"] = preg_replace('/-|\.| /', '', $isbn["isbn"]);
721                       
722                        //Fetch!
723                        $this->fetch_and_record_notice($isbn["isbn"], $xsl_transform);
724                       
725                        if (floor(100 * $count_lu / $count_total) > $latest_percent) {
726                                //Mise à jour de source_sync pour reprise en cas d'erreur
727                                $envt["current_notice_id"]=$isbn["notice_id"];
728                                $envt["already_read_count"]=$count_lu;
729                                $requete="update source_sync set env='".addslashes(serialize($envt))."' where source_id=".$source_id;
730                                mysql_query($requete);
731                                               
732                                //Inform
733                                call_user_func($callback_progress,$count_lu/$count_total,$count_lu,$count_total);
734//                              $callback_progress($count_lu / $count_total, $count_lu, $count_total);
735                                $latest_percent = floor(100 * $count_lu / $count_total);
736                                flush();
737                                ob_flush();             
738                        }
739                        $count_lu++;
740                }
741               
742                return $count_lu;
743        }
744       
745        function apply_xsl_to_xml($xml, $xsl) {
746                global $charset;
747                $xh = xslt_create();
748                xslt_set_encoding($xh, $charset);
749                $arguments = array(
750                  '/_xml' => $xml,
751                  '/_xsl' => $xsl
752                );
753                $result = xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments);
754                xslt_free($xh);
755                return $result;         
756        }
757       
758        //Fonction de recherche
759        function search($source_id,$query,$search_id) {
760                $params=$this->get_source_params($source_id);
761                $this->fetch_global_properties();
762                if ($params["PARAMETERS"]) {
763                        //Affichage du formulaire avec $params["PARAMETERS"]
764                        $vars=unserialize($params["PARAMETERS"]);
765                        foreach ($vars as $key=>$val) {
766                                global $$key;
767                                $$key=$val;
768                        }       
769                }
770                if (!isset($url))
771                        $url = "";
772                if (!isset($username))
773                        $username = "";
774                if (!isset($password))
775                        $password = "";
776                if (!isset($fetch_images))
777                        $fetch_images = 0;
778                if (!isset($image_folder))
779                        $image_folder = 0;
780                if (!isset($image_folder_public))
781                        $image_folder_public = 0;
782                if (!isset($image_thumb_url))
783                        $image_thumb_url = 0;
784                if (!isset($image_front))
785                        $image_front = 0;
786                if (!isset($image_back))
787                        $image_back = 0;
788
789                $this->url = $url;
790                $this->username = $username;
791                $this->password = $password;
792                $this->source_id = $source_id;
793                $this->search_id = 0;
794                $this->image_thumb_url = $image_thumb_url;
795                $this->image_front = $image_front;
796                $this->image_back = $image_back;
797                $this->image_folder = $image_folder;
798                $this->image_folder_url = $image_folder_public;
799                $this->fetchimages = $fetch_images;
800
801                $isbns = array();
802                foreach($query as $amterm) {
803                        if ($amterm->ufield == '010$a') {
804                                $isbns[] = $amterm->values[0];
805                        }
806                }
807               
808                global $base_path;
809                $xsl_transform = file_get_contents($base_path."/admin/connecteurs/in/aligastore/xslt/aligatopmbunimarx.xsl");
810               
811                foreach($isbns as $isbn) {
812                        //Si on veut des images, il nous faut un isbn 13
813                        $isbn = formatISBN($isbn, 13);
814                        $isbn = preg_replace('/-|\.| /', '', $isbn);
815                       
816                        $this->fetch_and_record_notice($isbn, $xsl_transform);
817                }
818
819        }
820       
821        function enrichment_is_allow(){
822                return true;
823        }
824       
825        function getEnrichmentHeader(){
826                $header= array();
827                $header[]= "<!-- Script d'enrichissement pour Alligastore-->";
828                return $header;
829        }
830       
831        function getTypeOfEnrichment($source_id){
832                $type['type'] = array(
833                        "resume",
834                        "sommaire",
835                        "bio"
836                );             
837                $type['source_id'] = $source_id;
838                return $type;           
839        }
840       
841        function getEnrichment($notice_id,$source_id,$type="",$enrich_params=array(),$page=1){
842                $enrichment= array();
843                $infos = $this->getNoticeInfos($notice_id,$source_id);
844                //on renvoi ce qui est demandé... si on demande rien, on renvoi tout..
845                switch ($type){
846                        case "resume" :
847                                if($infos['resume']) $enrichment['resume']['content'] = $infos['resume'];
848                                else $enrichment['resume']['content'] = $this->msg['aliga_enrichment_no_resume'];
849                                break;
850                        case "sommaire" :
851                                if($infos['sommaire']) $enrichment['sommaire']['content'] = $infos['sommaire'];
852                                else $enrichment['sommaire']['content'] = $this->msg['aliga_enrichment_no_sommaire'];
853                                break;
854                        case "bio" :
855                                if($infos['bio']) $enrichment['bio']['content'] = $infos['bio'];
856                                else $enrichment['bio']['content'] = $this->msg['aliga_enrichment_no_bio'];
857                                break;
858                        default :
859                                if($infos['resume']) $enrichment['resume']['content'] = $infos['resume'];
860                                else $enrichment['resume']['content'] = $this->msg['aliga_enrichment_no_resume'];
861                                if($infos['sommaire']) $enrichment['sommaire']['content'] = $infos['sommaire'];
862                                else $enrichment['sommaire']['content'] = $this->msg['aliga_enrichment_no_sommaire'];
863                                if($infos['bio']) $enrichment['bio']['content'] = $infos['bio'];
864                                else $enrichment['bio']['content'] = $this->msg['aliga_enrichment_no_bio'];
865                                break;
866                }               
867               
868                $enrichment['source_label']=$this->msg['aliga_enrichment_source'];     
869                return $enrichment;
870        }
871       
872        function getNoticeInfos($notice_id,$source_id){
873                global $base_path,$charset;
874                $this->initSource($source_id);
875                $return = array();
876                $rqt = "select code from notices where notice_id = '".$notice_id."'";
877                $res = mysql_query($rqt);
878                if(mysql_num_rows($res)){
879                        $code = mysql_result($res,0,0);
880                        $code = preg_replace('/-|\.| /', '', $code);
881                        if($code != ""){
882                                $parameters = array(
883                                        "LOG" => $this->username,
884                                        "PASS" => $this->password,
885                                        "GcdFab" => $code
886                                );
887                                $arequest = new aligastore_request($this->url, $parameters);
888                                $arequest->aligastore_response();
889                        //      $xsl_transform = file_get_contents($base_path."/admin/connecteurs/in/aligastore/xslt/aligatopmbunimarx.xsl");
890                                $xsl_transform = file_get_contents($base_path."/admin/connecteurs/in/aligastore/xslt/aligaEnrichment.xsl");
891                                if ($arequest->data){
892                                        file_put_contents("/home/arenou/public_html/alligastore.xml",$arequest->data);
893                                        $arequest->data = $this->apply_xsl_to_xml($arequest->data, $xsl_transform);
894                                        file_put_contents("/home/arenou/public_html/alligastore-convert.xml",$arequest->data);
895                                        $dom=new xml_dom_aligastore($arequest->data,$charset, false);
896                                        $return['resume'] = $dom->get_value("enrichment/resume");
897                                        $return['bio'] = $dom->get_value("enrichment/biographie");
898                                        $return['sommaire'] = $dom->get_value("enrichment/sommaire");
899                                } 
900                        }
901                }
902                return $return;
903        }
904       
905        function initSource($source_id){
906                $params=$this->get_source_params($source_id);
907                $this->fetch_global_properties();
908                if ($params["PARAMETERS"]) {
909                        //Affichage du formulaire avec $params["PARAMETERS"]
910                        $vars=unserialize($params["PARAMETERS"]);
911                        foreach ($vars as $key=>$val) {
912                                global $$key;
913                                $$key=$val;
914                        }       
915                }
916                if (!isset($url))
917                        $url = "";
918                if (!isset($username))
919                        $username = "";
920                if (!isset($password))
921                        $password = "";
922                if (!isset($fetch_images))
923                        $fetch_images = 0;
924                if (!isset($image_folder))
925                        $image_folder = 0;
926                if (!isset($image_folder_public))
927                        $image_folder_public = 0;
928                if (!isset($image_thumb_url))
929                        $image_thumb_url = 0;
930                if (!isset($image_front))
931                        $image_front = 0;
932                if (!isset($image_back))
933                        $image_back = 0;
934
935                $this->url = $url;
936                $this->username = $username;
937                $this->password = $password;
938                $this->source_id = $source_id;
939                $this->search_id = 0;
940                $this->image_thumb_url = $image_thumb_url;
941                $this->image_front = $image_front;
942                $this->image_back = $image_back;
943                $this->image_folder = $image_folder;
944                $this->image_folder_url = $image_folder_public;
945                $this->fetchimages = $fetch_images;
946        }
947}
948?>
Note: See TracBrowser for help on using the repository browser.