source: spip-zone/_plugins_/wp_import/trunk/formulaires/import_wordpress.php @ 110140

Last change on this file since 110140 was 110140, checked in by peetdu@…, 3 years ago

Oups…le nom du fichier d’import était en dur

  • Property svn:executable set to *
File size: 14.5 KB
Line 
1<?php
2
3if (!defined('_ECRIRE_INC_VERSION')) {
4        return;
5}
6
7include_spip('inc/wp_import_api');
8
9
10
11
12
13// A utiliser en DEV pour importer uniquement les NB_ARTICLES
14// define("NB_ARTICLES", 20);
15
16function formulaires_import_wordpress_charger_dist() {
17
18$valeurs['mes_saisies'] = array(
19       
20        array(
21                'saisie' => 'input',
22                'options' => array(
23                        'nom' => 'document_xml',
24                        'label' => _T('wp_import:document_xml_label'),
25                        'explication' => _T('wp_import:document_xml_explication'),
26                        'obligatoire' => 'oui'
27                )),
28        array(
29                'saisie' => 'case',
30                'options' => array(
31                        'nom' => 'auteurs',
32                        'label' => _T('wp_import:auteurs_label'),
33                        'explication' => _T('wp_import:auteurs_explication')
34                )),
35        // array(
36        //      'saisie' => 'case',
37        //      'options' => array(
38        //              'nom' => 'rubriques',
39        //              'label' => _T('wp_import:rubriques_label'),
40        //              'explication' => _T('wp_import:rubriques_explication')
41        //      )),
42        // array(
43        //      'saisie' => 'input',
44        //      'options' => array(
45        //              'nom' => 'id_parent',
46        //              'label' => _T('wp_import:id_parent_label'),
47        //              'explication' => _T('wp_import:id_parent_explication'),
48        //              'defaut' => 0
49        //      )),
50        array(
51                'saisie' => 'case',
52                'options' => array(
53                        'nom' => 'documents',
54                        'label' => _T('wp_import:documents_label'),
55                        'explication' => _T('wp_import:documents_explication')
56                )),
57        array(
58                'saisie' => 'case',
59                'options' => array(
60                        'nom' => 'motcle',
61                        'label' => _T('wp_import:motcle_label'),
62                        'explication' => _T('wp_import:motcle_explication')
63                )),
64        array(
65                'saisie' => 'case',
66                'options' => array(
67                        'nom' => 'articles',
68                        'label' => _T('wp_import:articles_label'),
69                        'explication' => _T('wp_import:articles_explication')
70                )),
71        array(
72                'saisie' => 'case',
73                'options' => array(
74                        'nom' => 'forum',
75                        'label' => _T('wp_import:forum_label'),
76                        'explication' => _T('wp_import:forum_explication')
77                )),
78        // array(
79        //      'saisie' => 'radio',
80        //      'options' => array(
81        //              'nom' => 'forum_config',
82        //              'label' => _T('wp_import:forum_config_label'),
83        //              'explication' => _T('wp_import:forum_config_explication'),
84        //              'afficher_si' =>  '@forum@=="on"'
85        //      )),
86       
87       
88    );
89
90    return $valeurs;
91}
92
93
94// function formulaires_import_wordpress_verifier_dist() {
95//      $erreurs = array();
96//      $fichier = _DIR_TMP . _request('document_xml');
97
98//      $fichiers = "../tmp/afap.wordpress.2018-04-06.xml";
99//      if (_request('document_xml')) {
100//              if (!file_exists($fichier)) {
101//                      $erreurs['document_xml'] = _T('wp_import:erreur_fichier', array('fichier' => "$fichier"));
102//                      $erreurs['message_erreur'] = _T('wp_import:erreur_generale');
103//              }
104//      }
105//      else {
106//              $erreurs['document_xml'] = _T('wp_import:erreur_fichier_vide');
107//      }
108//      return $erreurs;
109// }
110
111
112// https://code.spip.net/@inc_editer_mot_dist
113function formulaires_import_wordpress_traiter_dist() {
114
115        // Lancer l'importation
116    list($message, $erreurs) = wp_import_import_wordpress();
117
118    $retour['editable'] = true;
119    if (count($erreurs) == 0) {
120        $retour['message_ok'] = $message;
121    }
122    else {
123        $retour['message_erreur'] = implode('<br />', $erreurs);
124    }
125    return $retour;
126}
127
128function wp_import_import_wordpress() {
129
130        $chemin_temp = sous_repertoire(_DIR_TMP, 'wordpress');
131        $chemin_fichier = _DIR_TMP . _request('document_xml');
132       
133
134        if (file_exists($chemin_fichier)) {
135
136                include_spip('inc/xml');
137                include_spip('sale_fonctions');
138                include_spip('inc/getdocument');
139       
140
141                $tab_document = array();
142
143                $arbre = spip_xml_load($chemin_fichier);
144                $arbre = array_shift($arbre);
145                $arbre = $arbre[0]['channel'][0];
146
147                // On commence par les auteurs, rubriques, documents, mot-clés
148                if (_request('auteurs') or _request('rubriques') or _request('motcle')) {
149                        foreach ($arbre as $type => $a) {
150                                // spip_log("Type : $type  ", "wp_import" . _LOG_INFO_IMPORTANTE);
151
152                                switch ($type) {
153
154                                        // Importation des auteurs
155                                        case 'wp:author':
156                                                if (!_request("auteurs")) {
157                                                        break; //sortir de suite si l'on n'a pas coché l'importation des auteurs
158                                                }
159                                                wp_import_auteurs($a);
160                                                break;
161
162                                        // Importation des rubriques
163                                        case "wp:category":
164                                                if (!_request("rubriques")) {
165                                                        break; // sortir de suite si l'on n'a pas coché l'importation des rubriques
166                                                }
167                                                wp_import_rubriques($a);
168                                                break;
169
170                                        case "wp:term":
171                                                //sortir de suite si l'on n'a pas coché l'importation des mots-clés
172                                                if (!_request("motcle")) {
173                                                        break;
174                                                }
175                                                wp_import_mots_cles($item);
176                                                break;
177                                       
178                                        // case "item":
179                                        //      foreach ($a as $item) {
180                                        //              spip_log("post_type : " . $item['wp:post_type'][0], "wp_import" . _LOG_INFO_IMPORTANTE);
181                                        //              $objet = wp_import_twp($item['wp:post_type']['0']);
182
183                                        //              switch ($objet) {
184                                        //                      case 'attachment':
185                                        //                              wp_import_documents($item);
186                                        //                              break;
187                                        //              }
188                                        //      }
189                                        //      break;
190                                }
191                        }
192                }
193
194                // On continue avec les articles (puisqu'on a maintenant les documents dans la médiathèque)
195                if (_request("articles")) {
196               
197                        foreach ($arbre as $type => $a) {
198                                // spip_log("Type : $type  ", "wp_import" . _LOG_INFO_IMPORTANTE);
199
200                                switch ($type) {
201                                        // Importation des articles, pages, documents, sujets de forums et réponses asscosiés.
202                                        case "item":
203
204                                                foreach ($a as $item) {
205                                                        // spip_log("post_type : " . $item['wp:post_type'][0], "wp_import" . _LOG_INFO_IMPORTANTE);
206                                                        $objet = wp_import_twp($item['wp:post_type']['0']);
207
208                                                        switch ($objet) {
209                                                                case 'post':    // articles de blog, mais des fois traiter dans WP comme actus
210                                                                //case 'page':  // articles (peut être transformé en Page Uniques (voir plugin éponyme))
211                                                                case 'topic':   // articles aux sens SPIP, mais en fait ce sont des Sujets de Forum
212                                                                        wp_import_articles($item, $objet);
213                                                                        break;
214                                                        }
215                                                }
216                                                break;
217                                }
218                        }
219                }
220
221                // finir avec les forums (puisqu'on a maintenant les articles)
222                if (_request("forum")) {
223                        // faire le tableau des correspondances parent_wp <-> id_article
224                        // $res = sql_allfetsel('id_article, accepter_forum ', 'spip_articles', "accepter_forum != 'non'");
225                        // foreach ($res as $key => $value) {
226                        //      $correspondance[$value['accepter_forum']] = $value['id_article'];
227                        // }
228                       
229                        // debug($correspondance);
230
231                        foreach ($arbre as $type => $a) {
232                                if ($type == 'item') {
233                                        foreach ($a as $item) {
234                                                $objet = wp_import_twp($item['wp:post_type']['0']);
235                                                if ($objet == 'reply') {
236                                                        wp_import_forum($item, $correspondance);
237                                                }
238                                        }
239                                }
240                        }
241                }
242        }
243
244    if (empty($erreurs)) {
245        $message = "Le contenu de votre site Wordpress a bien été importé";
246    }
247
248    return array($message, $erreurs);
249}
250
251/**
252 * Import des auteurs (wp_author - auteurs spip)
253 *
254 * @authors xml : l'ensemble des authors WP
255 * @return string : le nombre d'auteurs enregistrés
256 */
257function wp_import_auteurs($authors) {
258        include_spip('action/editer_auteur');
259
260        foreach ($authors as $auteur) {
261                $nom = wp_import_twp($auteur['wp:author_display_name'][0]);
262                $nom = empty($nom) ? $auteur['wp:author_login'][0] : $nom;
263                $data_auteur = array(
264                        'login'         => wp_import_twp($auteur['wp:author_login'][0]),
265                        'email'         => wp_import_twp($auteur['wp:author_email'][0]),
266                        'statut'        => '1comite',
267                        'nom'           => $nom
268                );
269                $id_auteur = auteur_inserer();
270                auteur_modifier($id_auteur, $data_auteur);
271                $tab_auteur[$auteur['wp:author_login'][0]] = $id_auteur;
272                spip_log("Auteur $id_auteur créé ( " . $auteur['wp:author_login'][0] . " ) ", "wp_import" . _LOG_INFO_IMPORTANTE);
273                $cpt_auteurs++;
274        }
275}
276
277/**
278 * Import des category (wp_category -> rubriques spip)
279 * Attention : cette logique [category = rubrique] n'est pas toujours respectée
280 *
281 * @authors xml : l'ensemble des authors WP
282 * @return string : le nombre d'auteurs enregistrés
283 */
284function wp_import_rubriques($category) {
285        include_spip('action/editer_rubrique');
286        $id_parent_rubrique = _request("id_parent");
287        foreach ($a as &$cat) {
288                $data_rub = array(
289                'titre' => wp_import_twp($cat['wp:cat_name'][0]),
290                'id_parent' => "$id_parent_rubrique"
291                );
292                $id_rub = rubrique_inserer($id_parent_rubrique);
293                spip_log("Création rubrique $id_rub (id_parent : $id_parent_rubrique) (" . wp_import_twp($cat['wp:cat_name'][0]) . ") ", "wp_import" . _LOG_INFO_IMPORTANTE);
294                $cat["id"] = $id_rub;
295                $tab_cat[$cat['wp:category_nicename'][0]] = $id_rub;
296                rubrique_modifier($id_rub, $data_rub);
297        }
298        foreach ($a as $cat) {
299                $id_parent = $tab_cat[wp_import_twp($cat['wp:category_nicename'][0])] + 0;
300                spip_log("Modif rubrique parent $id_parent ) ", "wp_import" . _LOG_INFO_IMPORTANTE);
301
302                $data_rub = array('id_parent' => $id_parent);
303                rubrique_modifier($cat["id"], $data_rub);
304        }
305}
306
307/**
308 * Import des articles (item[post, page, topic] -> article spip)
309 *
310 * @article_wp xml : un article WP
311 * @objet string : soit un post, une page, un topic
312 * @return string : le nombre d'auteurs enregistrés
313 */
314function wp_import_articles($article_wp, $objet) {
315        include_spip('action/editer_article');
316        include_spip('action/editer_auteur');
317
318        static $compteur_post = 0;
319        static $compteur_page = 0;
320        static $compteur_topic = 0;
321
322        // récuperation des données
323        $set_article = array(
324                'titre'                 => $article_wp['title'][0],
325                'descriptif'    => wp_import_twp($article_wp['description'][0]),
326                'texte'                 => sale(wp_import_twp($article_wp['content:encoded'][0]), $tab_document),
327                'date'                  => wp_import_twp($article_wp['wp:post_date'][0]),
328                'date_modif'    => wp_import_twp($article_wp['wp:post_date'][0]),
329                'accepter_forum' => 'non',
330                'statut' => 'prepa',
331        );
332
333        // Gestion du rubriquage
334        switch ($objet) {
335                case 'post':
336                        $set_article['id_rubrique'] = 1;
337                        $set_article['id_secteur'] = 1;
338                        $compteur_post++;
339                        break;
340                case 'page':
341                        $set_article['id_rubrique'] = 2;
342                        $set_article['id_secteur'] = 2;
343                        $compteur_page++;
344                        break;
345                case 'topic':
346                        $set_article['id_rubrique'] = 3;
347                        $set_article['id_secteur'] = 3;
348                        $compteur_topic++;
349                        break;
350        }
351       
352        // gestion du statut
353        $status_wp = wp_import_twp($article_wp['wp:status'][0]);
354        if ($status_wp == 'publish') {
355                $set_article['statut'] = 'publie';
356        }
357        else {
358                $set_article['statut'] = 'prepa';
359        }
360
361        // On insère…
362        $id_article = sql_insertq('spip_articles', $set_article);
363        //article_modifier($id_article, $set_article);
364
365        // gestion des forums : creer un table de correspondance si récupération des forums demandée
366        global $tab_forum;
367        if ($objet == 'topic') {
368                $id_wp_parent = $article_wp['wp:post_id'][0];
369                $tab_forum[$id_wp_parent] = $id_article;
370        }
371       
372        // Lier l'auteur : on se base sur le login car avec SPIP, on est sûr de l'unicité de ce champ
373        $login_auteur = wp_import_twp($article_wp['dc:creator'][0]);
374        $id_auteur = sql_getfetsel('id_auteur', 'spip_auteurs', 'login='.sql_quote($login_auteur ));
375        $res = auteur_associer($id_auteur, array('article' => $id_article));
376
377        $message_retour = 'à faire';
378        return $message_retour;
379       
380}
381
382/**
383 * Import des réponses aux sujets posés (item[reply] -> forum spip)
384 * Il s'agit ici de lier les réponses aux articles identifiés comme étant des sujets
385 *
386 * @reply_wp : un item[reply] WP
387 *
388 * @return string : le nombre de reply enregistré
389 */
390function wp_import_forum($reply_wp, $correspondance) {
391        include_spip('inc/forum');
392        global $tab_forum;
393
394        $id_wp_parent = $reply_wp['wp:post_parent'][0];
395        $id_article = $tab_forum[$id_wp_parent];
396
397        // récupérer les infos de l'auteur
398        $login_auteur = wp_import_twp($reply_wp['dc:creator'][0]);
399        $auteur = sql_fetsel('id_auteur, nom, email', 'spip_auteurs', 'login='.sql_quote($login_auteur));
400
401        // recuperer la date
402        $date =  wp_import_twp($reply_wp['wp:post_date'][0]);
403
404        // récuperation des données
405        $set_forum = array(
406                'id_objet' => $id_article,
407                'objet' => 'article',
408                'date_heure' => $date,
409                'date_thread' => $date,
410                'titre' => $reply_wp['title'][0],
411                'texte' => sale(wp_import_twp($reply_wp['content:encoded'][0]), $tab_document),
412                'auteur' => $auteur['nom'],
413                'email_auteur' => $auteur['email'],
414                'statut' => 'publie',
415                'id_auteur' => $auteur['id_auteur'],
416        );
417
418        // Insertion des forums
419        $id_forum = sql_insertq('spip_forum', $set_forum);
420
421        // mise à jour de la valeur id_thread = id_forum
422        $res = sql_updateq('spip_forum', array('id_thread' => $id_forum), 'id_forum='.intval($id_forum));
423
424}
425
426
427/**
428 * Import des documents (images, fichiers pdf, etc.)
429 *
430 * @attachement_wp : un item[attachement] WP
431 *
432 * @return string : le nombre de document enregistré jusque là
433 */
434function wp_import_documents($attachement_wp) {
435        include_spip("action/ajouter_documents");
436
437        $data_document = array(
438                'titre'                 => $attachement_wp['title'][0],
439                'descriptif'    => wp_import_twp($attachement_wp['description'][0]),
440                'date'                  => $attachement_wp['post_date'][0]
441        );
442
443        $fichier = $attachement_wp['wp:attachment_url'][0];
444        $result = array();
445        $path_parts = pathinfo($attachement_wp['wp:attachment_url'][0]);
446        $e = $path_parts['extension'];
447        $mode = strpos($GLOBALS['meta']['formats_graphiques'], $e) === false ? 'document' : 'image';
448
449        $tmp_name               = basename($attachement_wp['wp:attachment_url'][0]);
450        $nom_fichier    = basename($attachement_wp['wp:attachment_url'][0]);
451        $chemin_temp_document = sous_repertoire($chemin_temp, 'uploads');
452        if (file_exists($chemin_temp_document . $nom_fichier)) {
453                $tmp_name = $chemin_temp_document . $nom_fichier;
454        }
455        else {
456                $tmp_name = $attachement_wp['wp:attachment_url'][0];
457        }
458
459        $file = array('tmp_name' => $tmp_name,
460                'name' => $nom_fichier,
461                'titrer' => true,
462                'distant' => false,
463                'mode' => 'document'
464        );
465
466        $ajouter_un_document = charger_fonction('ajouter_un_document', 'action');
467        $id_document = $ajouter_un_document(0, $file, '', 0, 'document');
468        document_modifier($id_document, $data_document);
469
470        $tab_document[basename($attachement_wp['wp:attachment_url'][0])] = $id_document;
471}
472
473function wp_import_mots_cles($term_wp) {
474        include_spip("action/editer_mot");
475        include_spip("action/editer_groupe_mots");
476        include_spip("action/editer_objet");
477
478        foreach ($a as &$term) {
479                $id_groupe = 0;
480                $titre_groupe = $term['wp:term_taxonomy'][0];
481                if ($sql_groupe_mot = sql_fetsel('id_groupe', "spip_groupes_mots", "titre=" . sql_quote($titre_groupe))) {
482                        $id_groupe = $sql_groupe_mot['id_groupe'];
483                } 
484                else {
485                        //Création du groupe de mot
486                        $data = array('titre' => $titre_groupe);
487                        //$id_groupe = groupe_mots_inserer( $data);
488                        $id_groupe = objet_inserer("groupe_mots");
489                        groupe_mots_modifier($id_groupe, $data);
490                        spip_log("Création groupe_mot $id_groupe ( $titre_groupe)  ", "wp_import" . _LOG_INFO_IMPORTANTE);
491                }
492        }
493
494        //Création du mot
495        $data = array(
496        'titre' => wp_import_twp($term['wp:term_name'][0]),
497        'id_groupe' => $id_groupe);
498
499        $id_mot = mot_inserer($id_groupe);
500        mot_modifier($id_mot, $data);
501        spip_log("Création mot $id_mot (" . wp_import_twp($term['wp:term_name'][0]) . ")  ", "wp_import" . _LOG_INFO_IMPORTANTE);
502
503}
Note: See TracBrowser for help on using the repository browser.