source: spip-zone/_plugins_/bouquinerie/action/importer_catalogue.php @ 30253

Last change on this file since 30253 was 30253, checked in by gilles.vincent@…, 12 years ago

[30252] suite : split est deprecie en 5.3.0

File size: 13.4 KB
Line 
1<?php
2
3/*
4 *  Plugin Bouquinerie pour SPIP
5 *  Copyright (C) 2008  Polez Kévin
6 *
7 *    This program is free software: you can redistribute it and/or modify
8 *    it under the terms of the GNU General Public License as published by
9 *    the Free Software Foundation, either version 3 of the License, or
10 *    (at your option) any later version.
11 *
12 *    This program is distributed in the hope that it will be useful,
13 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
14 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 *    GNU General Public License for more details.
16 *
17 *    You should have received a copy of the GNU General Public License
18 *    along with this program.  If not, see <http://www.gnu.org/licenses/>.
19 *
20 */
21
22if (!defined("_ECRIRE_INC_VERSION")) return;
23
24include_spip('inc/ajouter_documents'); // pour l'ajout de documents
25
26function action_importer_catalogue_dist() {
27        global $_FILES, $HTTP_POST_FILES;
28
29        $securiser_action = charger_fonction('securiser_action', 'inc');
30        $arg = $securiser_action();
31
32        // recuperer paramètres
33        $id_catalogue = _request('id_catalogue');
34        $format = _request('type');
35        $import_image = _request('import_image');
36        $motscles = _request('MotsCles');
37        $doublons = array ('total' => _request('total'), 'titre' => _request('DoublonTitre'),'isbn' => _request('DoublonIsbn'));
38
39
40        // compatibilité php < 4.1
41        if (!$_FILES) $_FILES = $GLOBALS['HTTP_POST_FILES'];
42
43        // récupération des variables
44        $fichier = $_FILES['fichier']['name'];
45        $size = $_FILES['fichier']['size'];
46        $tmp = $_FILES['fichier']['tmp_name'];
47        $type = $_FILES['fichier']['type'];
48        $error = $_FILES['fichier']['error'];
49
50        $rapport = '';
51
52        // Intercepter une erreur a l'envoi
53        if (check_upload_error($error)) {
54                $rapport .= _T('bouq:erreur_upload');
55        }
56        else {
57
58                // verification si extention OK
59                $tableau = explode('.', $fichier);
60                $type_ext = $tableau[1];
61
62                if ($type_ext == 'ods') {
63               
64                       
65                        $f = stock_fichier($tmp,$fichier);
66
67                        if ($id_catalogue == "new") { // si demande de création d'un catalogue pour l'occas
68                                include_spip('action/editer_catalogue');
69                                $id_catalogue = insert_catalogue();
70                                revision_catalogue($id_catalogue, array(
71                                        'titre' => 'Nouveau catalogue',
72                                        'descriptif'=> filtrer_entites(_T('bouq:importe_le').date("d-m-Y")._T('bouq:a'). date("H:i"))
73                                        ));
74                        }
75
76                        if ($format == "priceminister") {
77
78                                if (!traiter_fichier_priceminister($f['path'].'/content.xml',$id_catalogue,$doublons,$import_image,$motscles))
79                                        $rapport .= _T('bouq:erreur_traitement_fichier');
80                                $rapport .= _T('bouq:importation_reussie');
81                        }
82
83                        if ($format == "bouquinerie") {
84                                if (!traiter_fichier_bouquinerie($f['path'].'/content.xml',$id_catalogue,$doublons))
85                                        $rapport .= _T('bouq:erreur_traitement_fichier');
86                                $rapport .= _T('bouq:importation_reussie');
87                        }
88
89
90                        // supprimer le fichier temporaire
91                        efface_fichier($f);
92                }
93                else {
94                        $rapport .= _T('bouq:erreur_extension');
95                }
96
97        }
98
99        $redirect = parametre_url(urldecode(generer_url_ecrire('admin_bouquinerie')),
100                                'rapport', $rapport, '&');
101        redirige_par_entete($redirect);
102}
103
104//nouveau_nom stock_fichier(fichier_temporaire,nom_du_fichier);
105function stock_fichier($tmp,$fichier) {
106        $uid = uniqid();
107        $f =_DIR_TMP .$uid.'_'.$fichier; 
108        $source = deplacer_fichier_upload($tmp, $f);
109        $path = _DIR_TMP.'bouq_'.$uid;
110
111        // unzip du fichier
112        @exec('unzip '.escapeshellarg($f).' -d '.escapeshellarg($path) , $r, $e);
113
114        $fichier = array();
115        $fichier['path'] = $path;
116        $fichier['file'] = $f;
117        return $fichier;
118}
119
120function efface_fichier($fichier) {
121        @unlink($fichier['file']);
122        @exec('rm -R '. escapeshellarg($fichier['path']));
123        return;
124}
125
126// reçoit une structure livre de type bouquinerie
127// pour l'ajouter dans la BD en tant qu'objet livre
128
129function ajouter_livre_bouquinerie($cell, $id_catalogue, $doublons) {
130
131        include_spip('action/editer_livre');
132
133        if ($cell[1]['type'] == "null") return; // on ajoute seulement si il y a un titre ...
134
135        // critères discriminants
136
137        if ($doublons['total'] == "oui") {
138                if ($doublons['titre'] == "oui") {
139                        $q = sql_select('titre','spip_livres','titre = '.sql_quote($cell[1]['value']));
140                        while ($r = sql_fetch($q)) if ($r['titre'] == $cell[1]['value']) return;
141                }
142
143                if (($doublons['isbn'] == "oui") && ($cell[4]['value'] != '')) {
144                        $q = sql_select('isbn','spip_livres','isbn = '.sql_quote($cell[6]['value']));
145                        while ($r = sql_fetch($q)) if ($r['isbn'] == $cell[6]['value']) return;
146                }
147        }
148        else {
149                if ($doublons['titre'] == "oui") {
150                        $q = sql_select('titre','spip_livres','titre = '.sql_quote($cell[1]['value']).' AND id_catalogue = '.$id_catalogue);
151                        while ($r = sql_fetch($q)) if ($r['titre'] == $cell[1]['value']) return;
152                }
153
154                if (($doublons['isbn'] == "oui") && ($cell[4]['value'] != '')) {
155                        $q = sql_select('isbn','spip_livres','isbn = '.sql_quote($cell[6]['value']).' AND id_catalogue = '.$id_catalogue);
156                        while ($r = sql_fetch($q)) if ($r['isbn'] == $cell[6]['value']) return;
157                }
158        }
159
160        $livre = array();
161
162        $id_livre = insert_livre();
163
164
165        $livre['titre'] = $cell[1]['value']; 
166        $livre['auteur'] = $cell[2]['value'];
167        $livre['illustrateur'] = $cell[3]['value']; 
168        $livre['edition'] = $cell[4]['value']; 
169        $livre['prix_vente'] = $cell[5]['value'];
170        $livre['isbn'] = $cell[6]['value'];
171        $livre['id_catalogue'] = $id_catalogue;
172        $livre['type_import'] = "bouquinerie";
173        $livre['etat_livre'] = $cell[9]['value'];
174        $livre['etat_jaquette'] = $cell[10]['value'];
175        $livre['format'] = $cell[11]['value'];
176        $livre['reliure'] = $cell[12]['value'];
177        $livre['type_livre'] = $cell[13]['value'];
178        $livre['lieu_edition'] = $cell[14]['value'];
179        $livre['annee_edition'] = $cell[15]['value'];
180        $livre['num_edition'] = $cell[16]['value'];
181        $livre['inscription'] = $cell[17]['value'];
182        $livre['remarque'] = $cell[18]['value'];
183        $livre['commentaire'] = $cell[19]['value'];
184        $livre['prix_achat'] = $cell[20]['value'];
185        $livre['lieu'] = $cell[21]['value'];
186        $livre['num_facture'] = $cell[22]['value'];
187
188        $update = array();
189        foreach ($livre as $key => $val)
190                $update[] = $key . '=' . sql_quote($val);
191
192        if (!count($update)) return;
193
194        sql_query("UPDATE spip_livres SET ".join(', ', $update)." WHERE id_livre=$id_livre");
195        sql_insertq("spip_livres_catalogues",array('id_livre' => $id_livre, 'id_catalogue' => $id_catalogue));
196
197}
198
199// reçoit une structure livre de type priceminister
200// pour l'ajouter dans la BD en tant qu'objet livre
201
202function ajouter_livre_priceminister($cell, $id_catalogue,$doublons, $import_image,$motscles) {
203
204        include_spip('action/editer_livre');
205
206        if ($cell[5]['type'] == "null") return; // on ajoute seulement si il y a un titre ...
207
208        // critères discriminants
209
210        if ($doublons['total'] == "oui") {
211                if ($doublons['titre'] == "oui") {
212                        $q = sql_select('titre','spip_livres','titre = '.sql_quote($cell[5]['value']));
213                        while ($r = sql_fetch($q)) if ($r['titre'] == $cell[5]['value']) return;
214                }
215
216                if (($doublons['isbn'] == "oui") && ($cell[4]['value'] != '')) {
217                        $q = sql_select('isbn','spip_livres','isbn = '.sql_quote($cell[4]['value']));
218                        while ($r = sql_fetch($q)) if ($r['isbn'] == $cell[4]['value']) return;
219                }
220        }
221        else {
222                if ($doublons['titre'] == "oui") {
223                        $q = sql_select('titre','spip_livres','titre = '.sql_quote($cell[5]['value']).' AND id_catalogue = '.$id_catalogue);
224                        while ($r = sql_fetch($q)) if ($r['titre'] == $cell[5]['value']) return;
225                }
226
227                if (($doublons['isbn'] == "oui") && ($cell[4]['value'] != '')) {
228                        $q = sql_select('isbn','spip_livres','isbn = '.sql_quote($cell[4]['value']).' AND id_catalogue = '.$id_catalogue);
229                        while ($r = sql_fetch($q)) if ($r['isbn'] == $cell[4]['value']) return;
230                }
231        }
232
233        $livre = array();
234
235        $id_livre = insert_livre();
236
237        $livre['id_reference'] = $cell[0]['value']; // PRODUCT_ID
238        // $cell[1]['value']; // ADVERT_ID
239        // $cell[2]['value']; // SELLER_REF
240        // $cell[3]['value']; // EAN
241        $livre['isbn'] = $cell[4]['value']; // ISBN
242        $livre['titre'] = $cell[5]['value']; // TITLE
243        $livre['auteur'] = $cell[6]['value']; // Auteur
244        $livre['edition'] = $cell[7]['value']; // Editeur
245        // $cell[8]['value']; // Description
246        // $cell[9]['value']; // code type
247        // $cell[10]['value']; // code support
248        $livre['prix_vente'] = $cell[11]['value']; // prix
249        // $cell[12]['value']; // quantite
250        $livre['etat_livre'] = $cell[13]['value']; // qualite
251        $livre['commentaire'] = $cell[14]['value']; // commentaire
252        $livre['type_livre'] = $cell[15]['value']; // livre/taille
253        $livre['lieu_edition'] = $cell[16]['value']; // lieu de parution
254        // $cell[17]['value']; // livre/periode
255        // $cell[18]['value']; // livre/langue
256        // $cell[19]['value']; // taux de tva
257        // $cell[20]['value']; // livre/categorie prix
258        // $cell[21]['value']; // livre/tome
259        // $cell[22]['value']; // livre/longueur
260        // $cell[23]['value']; // livre/largeur
261        // $cell[24]['value']; // livre/epaisseur
262        // $cell[25]['value']; // livre/traducteur
263        // $cell[26]['value']; // livre/langue d'origine
264
265        // gestion des images liés
266        if (($cell[27]['type'] != 'null') && ($cell[28]['type'] != 'null')) { // url image/ secondaire; // url image/ principale
267                if ($import_image != 'non') {
268                        $url_price = 'http://www.priceminister.com/offer/buy/'.$livre['id_reference'].'/';
269                        if ($page = file_get_contents($url_price)) {
270
271                                if (preg_match('#<div id="fp_pix">#',$page,$match, PREG_OFFSET_CAPTURE) > 0) {
272                                        $tab = preg_split('#<div id="fp_pix">#',$page);
273                                        $tab_2 = preg_split('#</div>#',$tab[1]);
274
275                                        if (preg_match('#src="(.+?)"#',$tab_2[0],$m) > 0 ) {
276                                                $livre['url_image'] = $m[1];
277                                                if ($import_image == 'oui') $mode = "image";
278                                                else if ($import_image == 'distant') $mode = "distant";
279
280                                                if ($import_image != 'url') {
281                                                        $fichier = 'img_'.$titre.'.jpg';
282
283                                                        $ajouter_document = charger_fonction('ajouter_documents','inc');
284                                                        $ajouter_document($m[1],$fichier,"livre",$id_livre,$mode,$id_document,$documents_actifs);
285                                                }
286                                        }
287                                }
288                        }
289                }
290        }
291
292        // $cell[27]['value']; // url image/ principale
293        // $cell[28]['value']; // url image/ secondaire
294
295        // $cell[29]['value']; // classification decitre 1
296        // $cell[30]['value']; // classification decitre 2
297        // $cell[31]['value']; // classification decitre 3
298        $livre['format'] = $cell[32]['value']; // livre/format
299        // $cell[33]['value']; // proprietaire
300        // $cell[34]['value']; // livre/collection
301        // $cell[35]['value']; // livre n° de collection
302        // $cell[36]['value']; // livre/nombre de page
303
304        // gestion des mots-cle
305
306        if (($cell[37]['type'] != "null") && ($motscles == 'oui')) {  // classification Tilelive primaire
307
308                // création du groupe_mot si necessaire
309                $id_groupe = sql_fetsel("id_groupe, titre","spip_groupes_mots",'titre = '.sql_quote($cell[37]['value']));
310                if (!intval($id_groupe['id_groupe'])) {
311                        $groupe = array();
312                        $groupe['titre'] = $cell[37]['value'];
313                        $groupe['unseul'] = "non";
314                        $groupe['obligatoire'] = "non";
315                        $groupe['articles'] = "oui";
316                        $groupe['breves'] = "oui";
317                        $groupe['syndic'] = "oui";
318                        $groupe['minirezo'] = "oui";
319                        $groupe['comite'] = "oui";
320                        $groupe['forum'] = "non";
321                        sql_insertq("spip_groupes_mots",$groupe);
322                        $ret = sql_fetsel(
323                                array('MAX(id_groupe) as id_groupe'),
324                                array('spip_groupes_mots')
325                        );
326                        $id_groupe = $ret['id_groupe'];
327                } else $id_groupe = $id_groupe['id_groupe'];
328
329                if ($cell[38]['type'] != "null"){ // classification Tilelive secondaire
330                        // création des mots si necessaires
331                        $mots = explode(" / ", $cell[38]['value']);
332                        foreach ($mots as $mot) {
333                                $id_mot = sql_fetsel("id_mot, titre","spip_mots",'titre = '.sql_quote($mot));
334                                if (!intval($id_mot['id_mot'])) {
335                                        $m = array();
336                                        $m['id_groupe'] = $id_groupe;
337                                        $m['titre']  = $mot;
338                                        sql_insertq("spip_mots",$m);
339                                        $ret = sql_fetsel(
340                                        array('MAX(id_mot) as id_mot'),
341                                        array('spip_mots')
342                                        );
343                                        $id_mot = $ret['id_mot'];
344                                } else $id_mot = $id_mot['id_mot'];
345                                sql_insertq("spip_mots_livres",array('id_livre' => $id_livre, 'id_mot' => $id_mot));
346                        }
347                }
348        }
349
350        $livre['statut'] = "a_vendre";
351        $livre['etat_jaquette'] = "";
352        $livre['reliure'] = "";
353        $livre['annee_edition'] = '';
354        $livre['num_edition'] = '';
355        $livre['inscription'] = '';
356        $livre['remarque'] = '';
357        $livre['prix_achat'] = '';
358        $livre['lieu'] = '';
359        $livre['num_facture'] = '';
360
361        $livre['id_auteur'] = $GLOBALS['auteur_session']['id_auteur'];
362        $livre['id_catalogue'] = $id_catalogue;
363        $livre['type_import'] = "priceminister";
364
365        $update = array();
366        foreach ($livre as $key => $val)
367                $update[] = $key . '=' . sql_quote($val);
368
369        if (!count($update)) return;
370
371        sql_query("UPDATE spip_livres SET ".join(', ', $update)." WHERE id_livre=$id_livre");
372        sql_insertq("spip_livres_catalogues",array('id_livre' => $id_livre, 'id_catalogue' => $id_catalogue));
373}
374
375
376
377function traiter_fichier_priceminister($fichier, $id_catalogue, $doublons,$import_image,$motscles) {
378
379        include_spip('inc/ods_xml');
380
381        if ($ods = ods_xml_load($fichier)) {
382
383                $rows = array();
384
385                foreach ($ods['sheets'] as $sheets) {
386
387                        $rows = $sheets['rows'];
388                        array_shift($rows); // suppression premiere ligne (les titres de colonnes)
389
390                        foreach ($rows as $row) {
391                                if (is_array($row['cells'])) {
392                                        ajouter_livre_priceminister($row['cells'],$id_catalogue,$doublons,$import_image,$motscles);
393                                }
394                        }
395                }
396        } else return false;
397
398        return true;
399}
400
401function traiter_fichier_bouquinerie($fichier, $id_catalogue, $doublons) {
402        include_spip('inc/ods_xml');
403
404        if ($ods = ods_xml_load($fichier)) {
405
406                $rows = array();
407
408                foreach ($ods['sheets'] as $sheets) {
409
410                        $rows = $sheets['rows'];
411                        array_shift($rows); // suppression premiere ligne (les titres de colonnes)
412
413                        foreach ($rows as $row) {
414                                if (is_array($row['cells'])) {
415                                        ajouter_livre_bouquinerie($row['cells'],$id_catalogue,$doublons);
416                                }
417                        }
418                }
419        } else return false;
420
421        return true;
422}
423?>
Note: See TracBrowser for help on using the repository browser.