Line 1... |
Line 1... |
1 |
<?php
|
1 |
<?php
|
2 |
// Encodage : UTF-8
|
- |
|
3 |
// +-------------------------------------------------------------------------------------------------------------------+
|
- |
|
- |
|
2 |
|
4 |
/**
|
3 |
/**
|
5 |
* Migration des utilisateurs vers wordpress
|
4 |
* Permet de migrer tout un tas de trucs vers le nouveau site
|
6 |
*
|
5 |
*
|
7 |
* Description : classe permettant de migrer les profils de l'annuaire vers les profils wordpress
|
- |
|
8 |
* Utilisation : php cli.php migrationwp -a tous
|
- |
|
9 |
* /usr/local/bin/php -d memory_limit=4000M cli.php migrationwp -a tous
|
- |
|
10 |
* vérifier le nom de la base et le préfixe des tables définis dans $basewp
|
6 |
* Genre les utilisateurs, les actus, les évènements, etc
|
11 |
*
|
7 |
*
|
12 |
//Auteur original :
|
- |
|
13 |
* @author Aurélien PERONNET <jpm@tela-botanica.org>
|
8 |
* /!\ BEWARE OF THE CODE /!\ (Naughty code inside)
|
14 |
* @copyright Tela-Botanica 1999-2014
|
9 |
* Ce script a été écrit à la sueur de vieux pied
|
15 |
* @licence GPL v3 & CeCILL v2
|
- |
|
16 |
* @version $Id$
|
- |
|
17 |
*/
|
10 |
*
|
18 |
|
- |
|
19 |
class Migrationwp extends Script {
|
- |
|
20 |
private $basewp = "wordpress.site_";
|
11 |
* *****************************************
|
21 |
private $table = "site_";
|
- |
|
22 |
private $doc_loc = array();
|
- |
|
23 |
|
- |
|
24 |
public function executer() {
|
- |
|
25 |
$this->bdd = new Bdd();
|
12 |
* UTILISATION :
|
26 |
//$this->bdd->setAttribute(MYSQL_ATTR_USE_BUFFERED_QUERY, true);
|
- |
|
27 |
// évite les erreurs 2006 "MySQL has gone away"
|
- |
|
28 |
$this->bdd->executer("SET wait_timeout=300");
|
13 |
* *****************************************
|
29 |
|
14 |
*
|
30 |
$cmd = $this->getParametre('a');
|
15 |
* $ php migration.php <<commande>>
|
31 |
$this->mode_verbeux = $this->getParametre('v');
|
- |
|
32 |
|
16 |
*
|
33 |
$retour = array();
|
17 |
* ou
|
34 |
|
18 |
*
|
35 |
switch($cmd) {
|
- |
|
36 |
case "tous":
|
- |
|
37 |
$retour = $this->migrerUtilisateur();
|
- |
|
38 |
$retour = $this->migrerUtilisateurMeta();
|
- |
|
39 |
$retour = $this->migrerUtilisateurProfil();
|
- |
|
40 |
$retour = $this->migrerUtilisateurActivite();
|
19 |
* $ /usr/local/bin/php -d memory_limit=4000M cli.php migrationwp -a tous
|
41 |
break;
|
20 |
*
|
42 |
case "utilisateur": //liste wordpress
|
- |
|
43 |
$retour = $this->migrerUtilisateur();
|
21 |
* @WARNING Bien vérifier le config.php
|
44 |
break;
|
22 |
*
|
45 |
case "meta": //role
|
- |
|
46 |
$retour = $this->migrerUtilisateurMeta();
|
- |
|
47 |
break;
|
23 |
*
|
48 |
case "profil":
|
- |
|
49 |
$retour = $this->migrerUtilisateurProfil();
|
24 |
* *****************************************
|
50 |
break;
|
25 |
* TODOS
|
51 |
case "activite": // obligatoire pour affichage
|
26 |
* *****************************************
|
52 |
$retour = $this->migrerUtilisateurActivite();
|
- |
|
53 |
break;
|
- |
|
54 |
case "actualiteTout" :
|
- |
|
55 |
$retour = $this->migrerActualites();
|
- |
|
56 |
$retour .= $this->migrerActualitesRubrique();
|
- |
|
57 |
$retour .= $this->migrerActualitesCommentaires();
|
- |
|
58 |
break;
|
- |
|
59 |
case "actualite" :
|
- |
|
60 |
$retour = $this->migrerActualites();
|
- |
|
61 |
break;
|
- |
|
62 |
case "actualiteRubrique" :
|
- |
|
63 |
$retour = $this->migrerActualitesRubrique();
|
- |
|
64 |
break;
|
- |
|
65 |
case "actualiteComm" :
|
- |
|
66 |
$retour = $this->migrerActualitesCommentaires();
|
- |
|
67 |
break;
|
- |
|
68 |
default: break;
|
- |
|
69 |
}
|
- |
|
70 |
|
27 |
*
|
71 |
if($this->mode_verbeux) {
|
28 |
* Liste de @TODO (censée être exhaustive)
|
72 |
// echo pour que bash capte la sortie et stocke dans le log
|
29 |
* - méthode de nettoyage (voir logique) pour rendre le script i(de)mpotent
|
73 |
//echo 'Identifiants des mails traites : '.implode(',', $retour)."--";
|
30 |
* - gérer proprement les erreurs (là ça chie des exceptions dès que ça peut) en vue d'une automatisation
|
74 |
}
|
- |
|
75 |
}
|
- |
|
76 |
|
- |
|
77 |
private function migrerUtilisateur() {
|
31 |
* - trouver un équivalent à un gros try-catch autour de chaque méthode permettant de restaurer les tables en cas de plantage
|
78 |
$requete = "INSERT INTO ".$this->basewp."users
|
32 |
* - sauvegarder les tables proprement à chaque lancement ou ne pas lancer
|
79 |
(`ID`, `user_login`, `user_pass`, `user_nicename`, `user_email`, `user_url`, `user_registered`, `user_status`, `display_name`)
|
33 |
* - méthode All permettant de tout lancer à la suite en vue d'une automatisation
|
80 |
SELECT `U_ID`, `U_MAIL`, `U_PASSWD`,concat(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(lower(concat(`U_SURNAME`,'-',`U_NAME`,'-')),' ',''),'\'',''),'é','e'),'è','e'),'ï','i'),'ü','u'),'ø',''),'œ','oe'),'ë','e'),'ç','c'),cast(`U_ID` as char)),
|
34 |
* - vérifier les différentes meta ayant pu changer pendant le dev (évènements et leurs champs ACF, meta utilisateurs (mapping des IDs différent entre test et preprod))
|
81 |
`U_MAIL` as mail, '' as user_url, `U_DATE`, '0', concat(`U_SURNAME`,' ',`U_NAME`) FROM tela_prod_v4.`annuaire_tela`";
|
35 |
* - vérifier les correspondances entre la réalité et les tables de correspondances (surtout les catégories avec les IDs et slugs pouvant différer d'une instance à l'autre)
|
82 |
$retour = $this->bdd->executer($requete);
|
36 |
* - voir les différents @todo du script
|
83 |
echo 'Il y a '.count($retour).' utilisateurs migrés '."--";
|
37 |
* - à compléter :) (Killian, avant ses vacances (et pas vous) le 21/07/2017)
|
84 |
return $retour;
|
- |
|
85 |
}
|
38 |
*
|
86 |
|
39 |
*/
|
Line 249... |
Line 525... |
249 |
return $retour;
|
525 |
}
|
- |
|
526 |
}
|
- |
|
527 |
|
- |
|
528 |
echo '-- ' . $compteur . '/' . count($utilisateurs) . ' activités d\'utilisateur migrés. ' . PHP_EOL;
|
- |
|
529 |
}
|
- |
|
530 |
|
- |
|
531 |
function migrerUtilisateursProfil() {
|
- |
|
532 |
global $prefixe_tables_wp;
|
- |
|
533 |
global $bdTelaProd;
|
- |
|
534 |
global $bdWordpress;
|
- |
|
535 |
global $modeBourrin;
|
- |
|
536 |
|
- |
|
537 |
$codes_langues = [
|
- |
|
538 |
'30842'=>'Anglais',
|
- |
|
539 |
'30843'=>'Allemand',
|
- |
|
540 |
'30844'=>'Italien',
|
- |
|
541 |
'30845'=>'Espagnol',
|
- |
|
542 |
'30846'=>'Arabe',
|
- |
|
543 |
'30847'=>'Chinois',
|
- |
|
544 |
'30848'=>'Russe'
|
- |
|
545 |
];
|
- |
|
546 |
|
- |
|
547 |
$departements = [
|
- |
|
548 |
'01' => 'Ain',
|
- |
|
549 |
'02' => 'Aisne',
|
- |
|
550 |
'03' => 'Allier',
|
- |
|
551 |
'04' => 'Alpes-de-Haute-Provence',
|
- |
|
552 |
'05' => 'Hautes-Alpes',
|
- |
|
553 |
'06' => 'Alpes-Maritimes',
|
- |
|
554 |
'07' => 'Ardèche',
|
- |
|
555 |
'08' => 'Ardennes',
|
- |
|
556 |
'09' => 'Arièges',
|
- |
|
557 |
'10' => 'Aube',
|
- |
|
558 |
'11' => 'Aude',
|
- |
|
559 |
'12' => 'Aveyron',
|
- |
|
560 |
'13' => 'Bouches-du-Rhône',
|
- |
|
561 |
'14' => 'Calvados',
|
- |
|
562 |
'15' => 'Cantal',
|
- |
|
563 |
'16' => 'Charente',
|
- |
|
564 |
'17' => 'Charente-Maritime',
|
- |
|
565 |
'18' => 'Cher',
|
- |
|
566 |
'19' => 'Corrèze',
|
- |
|
567 |
'201' => 'Corse-du-Sud',
|
- |
|
568 |
'202' => 'Haute-Corse',
|
- |
|
569 |
'21' => 'Côte d\'Or',
|
- |
|
570 |
'22' => 'Côtes-d\'Armor',
|
- |
|
571 |
'23' => 'Creuse',
|
- |
|
572 |
'24' => 'Dordogne',
|
- |
|
573 |
'25' => 'Doubs',
|
- |
|
574 |
'26' => 'Drôme',
|
- |
|
575 |
'27' => 'Eure',
|
- |
|
576 |
'28' => 'Eure-et-Loir',
|
- |
|
577 |
'29' => 'Finistère',
|
- |
|
578 |
'30' => 'Gard',
|
- |
|
579 |
'31' => 'Haute-Garonne',
|
- |
|
580 |
'32' => 'Gers',
|
- |
|
581 |
'33' => 'Gironde',
|
- |
|
582 |
'34' => 'Hérault',
|
- |
|
583 |
'35' => 'Ille-et-Vilaine',
|
- |
|
584 |
'36' => 'Indre',
|
- |
|
585 |
'37' => 'Indre-et-Loire',
|
- |
|
586 |
'38' => 'Isère',
|
- |
|
587 |
'39' => 'Jura',
|
- |
|
588 |
'40' => 'Landes',
|
- |
|
589 |
'41' => 'Loir-et-Cher',
|
- |
|
590 |
'42' => 'Loire',
|
- |
|
591 |
'43' => 'Haute-Loire',
|
- |
|
592 |
'44' => 'Loire-Atlantique',
|
- |
|
593 |
'45' => 'Loiret',
|
- |
|
594 |
'46' => 'Lot',
|
- |
|
595 |
'47' => 'Lot-et-Garonne',
|
- |
|
596 |
'48' => 'Lozère',
|
- |
|
597 |
'49' => 'Maine-et-Loire',
|
- |
|
598 |
'50' => 'Manche',
|
- |
|
599 |
'51' => 'Marne',
|
- |
|
600 |
'52' => 'Haute-Marne',
|
- |
|
601 |
'53' => 'Mayenne',
|
- |
|
602 |
'54' => 'Meurthe-et-Moselle',
|
- |
|
603 |
'55' => 'Meuse',
|
- |
|
604 |
'56' => 'Morbihan',
|
- |
|
605 |
'57' => 'Moselle',
|
- |
|
606 |
'58' => 'Nièvre',
|
- |
|
607 |
'59' => 'Nord',
|
- |
|
608 |
'60' => 'Oise',
|
- |
|
609 |
'61' => 'Orne',
|
- |
|
610 |
'62' => 'Pas-de-Calais',
|
- |
|
611 |
'63' => 'Puy-de-Dôme',
|
- |
|
612 |
'64' => 'Pyrénées-Atlantiques',
|
- |
|
613 |
'65' => 'Hautes-Pyrénées',
|
- |
|
614 |
'66' => 'Pyrénées-Orientales',
|
- |
|
615 |
'67' => 'Bas-Rhin',
|
- |
|
616 |
'68' => 'Haut-Rhin',
|
- |
|
617 |
'69' => 'Rhône',
|
- |
|
618 |
'70' => 'Haute-Saône',
|
- |
|
619 |
'71' => 'Saône-et-Loire',
|
- |
|
620 |
'72' => 'Sarthe',
|
- |
|
621 |
'73' => 'Savoie',
|
- |
|
622 |
'74' => 'Haute-Savoie',
|
- |
|
623 |
'75' => 'Paris',
|
- |
|
624 |
'76' => 'Seine-Maritime',
|
- |
|
625 |
'77' => 'Seine-et-Marne',
|
- |
|
626 |
'78' => 'Yvelines',
|
- |
|
627 |
'79' => 'Deux-Sèvres',
|
- |
|
628 |
'80' => 'Somme',
|
- |
|
629 |
'81' => 'Tarn',
|
- |
|
630 |
'82' => 'Tarn-et-Garonne',
|
- |
|
631 |
'83' => 'Var',
|
- |
|
632 |
'84' => 'Vaucluse',
|
- |
|
633 |
'85' => 'Vendée',
|
- |
|
634 |
'86' => 'Vienne',
|
- |
|
635 |
'87' => 'Haute-Vienne',
|
- |
|
636 |
'88' => 'Vosges',
|
- |
|
637 |
'89' => 'Yonne',
|
- |
|
638 |
'90' => 'Territoire de Belfort',
|
- |
|
639 |
'91' => 'Essonne',
|
- |
|
640 |
'92' => 'Hauts-de-Seine',
|
- |
|
641 |
'93' => 'Seine-Saint-Denis',
|
- |
|
642 |
'94' => 'Val-de-Marne',
|
- |
|
643 |
'95' => 'Val-d\'Oise',
|
- |
|
644 |
'971' => 'Guadeloupe',
|
- |
|
645 |
'972' => 'Martinique',
|
- |
|
646 |
'973' => 'Guyane',
|
- |
|
647 |
'974' => 'La Réunion',
|
- |
|
648 |
'976' => 'Mayotte',
|
- |
|
649 |
];
|
- |
|
650 |
|
- |
|
651 |
// Export des meta de buddypress :
|
- |
|
652 |
// INSERT INTO `bp_xprofile_fields` (`id`, `group_id`, `parent_id`, `type`, `name`, `description`, `is_required`, `is_default_option`, `field_order`, `option_order`, `order_by`, `can_delete`)
|
- |
|
653 |
// (1, 1, 0, 'textbox', 'Pseudo', '', 1, 0, 0, 0, '', 0),
|
- |
|
654 |
// (2, 3, 0, 'datebox', 'Date de naissance', '', 0, 0, 1, 0, '', 1),
|
- |
|
655 |
// (3, 1, 0, 'selectbox', 'Pays', '', 1, 0, 4, 0, 'custom', 1),
|
- |
|
656 |
// (4, 1, 0, 'textbox', 'Ville', '', 1, 0, 6, 0, '', 1),
|
- |
|
657 |
// (9, 1, 0, 'textbox', 'Nom', '', 1, 0, 3, 0, '', 1),
|
- |
|
658 |
// (10, 1, 0, 'textbox', 'Prénom', '', 0, 0, 2, 0, '', 1),
|
- |
|
659 |
// (12, 2, 0, 'selectbox', 'Expérience botanique', '', 1, 0, 0, 0, 'custom', 1),
|
- |
|
660 |
// (63, 2, 0, 'textbox', 'Espèce d''intérêt', 'Pour préciser votre famille, genre voire espèce de spécialisation ou noter votre plante préférée', 0, 0, 2, 0, 'custom', 1),
|
- |
|
661 |
// (61, 2, 0, 'checkbox', 'Zones géographiques d''intérêt', 'Pour préciser vos zones phytogéographiques et altitudes de prédilection.', 0, 0, 3, 0, 'custom', 1),
|
- |
|
662 |
// (26, 3, 0, 'selectbox', 'Métier', '', 0, 0, 3, 0, 'custom', 1),
|
- |
|
663 |
// (46, 1, 0, 'selectbox', 'Compte', 'Merci de préciser si votre compte est un compte personnel ou professionnel (utilisé par une personne) ou de structure (partagé par plusieurs personnes)', 1, 0, 1, 0, 'custom', 1),
|
- |
|
664 |
// (69, 2, 0, 'selectbox', 'Membre d''une association naturaliste', '', 0, 0, 1, 0, 'custom', 1),
|
- |
|
665 |
// (51, 1, 0, 'textbox', 'Adresse', 'Votre adresse ne sera pas communiquée mais nous est utile pour éditer les reçus fiscaux si vous nous faites un don.', 0, 0, 8, 0, '', 1),
|
- |
|
666 |
// (52, 3, 0, 'url', 'Site web', 'Si vous avez un site web personnel', 0, 0, 2, 0, '', 1),
|
- |
|
667 |
// (53, 3, 0, 'textarea', 'Présentation', '', 0, 0, 0, 0, '', 1),
|
- |
|
668 |
// (54, 1, 0, 'checkbox', 'Inscription à la lettre d''actualité', '', 0, 0, 9, 0, 'custom', 1),
|
- |
|
669 |
// (59, 1, 0, 'checkbox', 'Conditions d''utilisation', 'Lire les <a href="https://www.tela-botanica.org/mentions-legales/#conditions-d-utilisation"> conditions d''utilisation du site</a>', 1, 0, 10, 0, 'custom', 1),
|
250 |
}
|
670 |
// (592, 1, 0, 'selectbox', 'Département', '', 0, 0, 5, 0, 'custom', 1),
|
- |
|
671 |
|
- |
|
672 |
// Correspondances entre les anciennes meta et celles de BP :
|
- |
|
673 |
// nom du champ ; id actuel ; id BP ; valeurs
|
- |
|
674 |
// prenom ; 7 ; 10
|
- |
|
675 |
// experience bota ; 4 ; 12 (également présent dans la table annuaire_tela.U_NIV mais n'est jamais mis à jour)
|
- |
|
676 |
// departement (ou cp) ; 13 ; 592 ; pas trouvé d'exemple (faut utiliser annuaire_tela.U_ZIP_CODE)
|
- |
|
677 |
// conditions d'utilisation ; 15 ; 59 sur test (1035 sur preprod) ; 1
|
- |
|
678 |
// lettre d'actu ; 14 ; 54 ; pas trouvé d'exemple
|
- |
|
679 |
// presentation ; 125 ; 53 ; juste du texte
|
- |
|
680 |
// site web ; 134 ; 52 (n'est pas rempli, c'est la valeur de annuaire_tela.U_WEB qui est utilisée en vrai)
|
- |
|
681 |
// adresse ; 132 ; 51 ; pas trouvé d'exemple
|
- |
|
682 |
// membre asso natur ; 133 ; 69 ; [30833, 30834, 30811, 30812, 30813]
|
- |
|
683 |
// compte ; pas d'équivalent ; 46
|
- |
|
684 |
// metier ; pas d'équivalent ; 26
|
- |
|
685 |
// zone geo d'interet ; 120 ; 61 ; [30806] ex: 30805;;30806;;30807
|
- |
|
686 |
// espece d'interet ; pas forcément ça 8 ; 63 ; [30829]
|
- |
|
687 |
|
- |
|
688 |
// l'index c'est l'identifiant actuel (amv_ce_colonne), et la valeur c'est celle coté bp
|
- |
|
689 |
$correspondance_categories = [
|
- |
|
690 |
'99' => '1', // pseudo
|
- |
|
691 |
'2' => '137', // langues
|
- |
|
692 |
'13' => '592', // code postal
|
- |
|
693 |
'137' => '2', // date naissance
|
- |
|
694 |
'12' => '3', // pays
|
- |
|
695 |
'103' => '4', // ville
|
- |
|
696 |
'1' => '9', // nom
|
- |
|
697 |
'7' => '10', // prenom
|
- |
|
698 |
'4' => '12', // niveau bota
|
- |
|
699 |
'8' => '63', // espece d'interet
|
- |
|
700 |
'120' => '61', // zones géo
|
- |
|
701 |
'133' => '69', // membre asso natur
|
- |
|
702 |
'132' => '51', // adresse
|
- |
|
703 |
'134' => '52', // site web
|
- |
|
704 |
'125' => '53', // presentation
|
- |
|
705 |
'14' => '54', // lettre d'actu
|
- |
|
706 |
'15' => '59', // conditions d'utilisation
|
- |
|
707 |
];
|
- |
|
708 |
|
- |
|
709 |
// expériences pour déterminer les metas utilisées de cotre coté
|
- |
|
710 |
// résultat de la requête
|
- |
|
711 |
// SELECT amc_abreviation, amv_valeur FROM `annu_meta_valeurs`JOIN annu_meta_colonne ON `amv_ce_colonne` = amc_id_champ WHERE `amv_ce_colonne` IN (99, 2, 13, 137, 12, 103, 1, 7, 4, 8, 120, 133, 132, 134, 125, 14, 15) AND amv_valeur != '' AND `amv_cle_ligne` = 41014;
|
- |
|
712 |
// experience_bota 30787
|
- |
|
713 |
// conditions_utilisation 1
|
- |
|
714 |
// pseudo KillianPseudoTest
|
- |
|
715 |
// date_naissance 02/01/1990
|
- |
|
716 |
// presentation J'ai commencé la botanique hier, après avoir fait ...
|
- |
|
717 |
// specialite_bota_groupes 30829;;30837
|
- |
|
718 |
// specialite_bota_geo 30806;;30807
|
- |
|
719 |
// langues 30842;;30847
|
- |
|
720 |
// mon_blog http://lolilol.lol
|
- |
|
721 |
// membre_asso_bota 30833
|
- |
|
722 |
//
|
- |
|
723 |
// On voit que nombre de correspondances ne sont en fait pas
|
- |
|
724 |
|
- |
|
725 |
$correspondances_niveau_bota = [
|
- |
|
726 |
'30786' => 'Débutant',
|
- |
|
727 |
'30787' => 'Ayant une bonne pratique',
|
- |
|
728 |
'30788' => 'Confirmé',
|
- |
|
729 |
'30790' => 'Ne se prononce pas'
|
- |
|
730 |
];
|
- |
|
731 |
|
- |
|
732 |
$correspondances_membre_asso_naturaliste = [
|
- |
|
733 |
'30833' => 'Oui',
|
- |
|
734 |
'30834' => 'Non',
|
- |
|
735 |
'30811' => 'Ne se prononce pas',
|
- |
|
736 |
'30812' => 'Oui',
|
- |
|
737 |
'30813' => 'Non'
|
- |
|
738 |
];
|
- |
|
739 |
|
- |
|
740 |
// a:8:{i:0;s:14:"Zones polaires";i:1;s:17:"Zones tempérées";i:2;s:16:"Zones tropicales";i:3;s:24:"Zones méditerranéennes";i:4;s:6:"Plaine";i:5;s:13:"Basses terres";i:6;s:13:"Hautes terres";i:7;s:8:"Montagne";}
|
- |
|
741 |
$correspondances_zones_geo = [
|
- |
|
742 |
'30805' => 'Zones tempérées', // Zones géographiques : tempérées et boréales
|
- |
|
743 |
'30806' => 'Zones méditerranéennes', // Zone géographique : Méditerranéenne
|
- |
|
744 |
'30807' => 'Zones tropicales' // Zones géographiques : subtropicales à tropicales
|
- |
|
745 |
];
|
- |
|
746 |
|
- |
|
747 |
// correspondance espèces d'interet
|
- |
|
748 |
|
- |
|
749 |
sauvegardeLaTable($bdWordpress, $prefixe_tables_wp . 'bp_xprofile_data');
|
- |
|
750 |
|
- |
|
751 |
$requete_supp = "SELECT * FROM `annu_meta_valeurs` WHERE `amv_ce_colonne` in (99, 2, 137, 12, 103, 1, 7, 4, 8, 120, 133, 132, 134, 125, 14, 15) AND (amv_valeur != '' AND amv_valeur != 0)";
|
- |
|
752 |
$infos_supp = $bdTelaProd->query($requete_supp)->fetchAll(PDO::FETCH_ASSOC);
|
- |
|
753 |
|
- |
|
754 |
foreach ($infos_supp as $infos) {
|
- |
|
755 |
switch ($infos['amv_ce_colonne']) {
|
- |
|
756 |
case 2: // langues
|
- |
|
757 |
//exemple a:3:{i:0;s:7:"Anglais";i:1;s:8:"Espagnol";i:2;s:7:"Italien";}
|
- |
|
758 |
$langues = explode(';;', $infos['amv_valeur']);
|
- |
|
759 |
if (count($langues)) {
|
- |
|
760 |
$supp[$infos['amv_cle_ligne']][$infos['amv_ce_colonne']] = serialize($langues);
|
- |
|
761 |
}
|
- |
|
762 |
|
- |
|
763 |
break;
|
- |
|
764 |
case 4: // niveau bota
|
- |
|
765 |
$supp[$infos['amv_cle_ligne']][$infos['amv_ce_colonne']] = $correspondances_niveau_bota[$infos['amv_valeur']];
|
- |
|
766 |
|
- |
|
767 |
break;
|
- |
|
768 |
case 133: // asso naturalistes
|
- |
|
769 |
$supp[$infos['amv_cle_ligne']][$infos['amv_ce_colonne']] = $correspondances_membre_asso_naturaliste[$infos['amv_valeur']];
|
- |
|
770 |
|
- |
|
771 |
break;
|
- |
|
772 |
case 15: // conditions d'utilisation
|
- |
|
773 |
if (1 == $infos['amv_valeur']) {
|
- |
|
774 |
$supp[$infos['amv_cle_ligne']][$infos['amv_ce_colonne']] = serialize("J\'accepte les conditions d\'utilisation");
|
- |
|
775 |
}
|
- |
|
776 |
|
- |
|
777 |
break;
|
- |
|
778 |
case 120: // zones géo
|
- |
|
779 |
// exemple: a:3:{i:0;s:16:"Zones tropicales";i:1;s:24:"Zones méditerranéennes";i:2;s:8:"Montagne";}
|
- |
|
780 |
$zones_geo = explode(';;', $infos['amv_valeur']);
|
- |
|
781 |
if (count($zones_geo)) {
|
- |
|
782 |
$supp[$infos['amv_cle_ligne']][$infos['amv_ce_colonne']] = serialize($zones_geo);
|
- |
|
783 |
}
|
- |
|
784 |
|
- |
|
785 |
break;
|
- |
|
786 |
default:
|
- |
|
787 |
$supp[$infos['amv_cle_ligne']][$infos['amv_ce_colonne']] = $infos['amv_valeur'];
|
- |
|
788 |
|
- |
|
789 |
break;
|
- |
|
790 |
}
|
- |
|
791 |
}
|
- |
|
792 |
|
- |
|
793 |
$requete = "SELECT `U_ID`, `U_NAME`, `U_SURNAME`, U_WEB, `U_CITY`, `U_COUNTRY`, pays, `LABEL_NIV`, `U_ZIP_CODE` FROM `annuaire_tela`
|
- |
|
794 |
LEFT JOIN (SELECT `amo_nom` AS pays, `amo_abreviation` FROM `annu_meta_ontologie` WHERE `amo_ce_parent` = 1074) liste_pays ON `amo_abreviation` = `U_COUNTRY`";
|
- |
|
795 |
$utilisateurs = $bdTelaProd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
|
- |
|
796 |
|
- |
|
797 |
$compteur = 0;
|
- |
|
798 |
foreach ($utilisateurs as $utilisateur) {
|
- |
|
799 |
// on va essayer de trouver le département à partir du code postal
|
- |
|
800 |
if (preg_match('@(?:^(\d{2})(\d)\d{2}.*$)|(?:^(\d{2})\s.*$)@', $utilisateur['U_ZIP_CODE'], $matches)) {
|
- |
|
801 |
$numero_departement = $matches[1];
|
- |
|
802 |
$numero_complementaire = $matches[2]; // pour la corse (201/202) ou les // DOM (97X) et TOM (98X)
|
- |
|
803 |
|
- |
|
804 |
switch ($numero_departement) {
|
- |
|
805 |
case 975: // Saint-Pierre-et-Miquelon
|
- |
|
806 |
case 98: // TOM (98X)
|
- |
|
807 |
// on ne gère pas ces cas, considérés comme des pays à part dans le formulaire d'inscription
|
- |
|
808 |
break;
|
- |
|
809 |
case 97: // DOM (97X)
|
- |
|
810 |
case 20: // Corse (201/202)
|
- |
|
811 |
if (isset($departements[$numero_departement . $numero_complementaire])) {
|
- |
|
812 |
$utilisateur['U_ZIP_CODE'] = $departements[$numero_departement . $numero_complementaire];
|
- |
|
813 |
}
|
- |
|
814 |
break;
|
- |
|
815 |
default:
|
- |
|
816 |
if (isset($departements[$numero_departement])) {
|
- |
|
817 |
$utilisateur['U_ZIP_CODE'] = $departements[$numero_departement];
|
- |
|
818 |
}
|
- |
|
819 |
break;
|
- |
|
820 |
}
|
- |
|
821 |
}
|
- |
|
822 |
|
- |
|
823 |
$requeteInsert = "INSERT INTO " . $prefixe_tables_wp . "bp_xprofile_data (`field_id`, `user_id`, `value`, `last_updated`) VALUES
|
- |
|
824 |
('3', {$utilisateur['U_ID']}, {$bdWordpress->quote($utilisateur['pays'])}, '2017-05-19 15:06:16'),
|
- |
|
825 |
('4', {$utilisateur['U_ID']}, {$bdWordpress->quote($utilisateur['U_CITY'])}, '2017-05-19 15:06:16'),
|
- |
|
826 |
('9', {$utilisateur['U_ID']}, {$bdWordpress->quote($utilisateur['U_NAME'])}, '2017-05-19 15:06:16'),
|
- |
|
827 |
('10', {$utilisateur['U_ID']}, {$bdWordpress->quote($utilisateur['U_SURNAME'])}, '2017-05-19 15:06:16'),
|
- |
|
828 |
('592', {$utilisateur['U_ID']}, {$bdWordpress->quote($utilisateur['U_ZIP_CODE'])}, '2017-05-19 15:06:16'),
|
- |
|
829 |
('21', {$utilisateur['U_ID']}, {$bdWordpress->quote($utilisateur['U_WEB'])}, '2017-05-19 15:06:16')";
|
- |
|
830 |
if (isset($supp[$utilisateur['U_ID']])) {
|
- |
|
831 |
foreach ($supp[$utilisateur['U_ID']] as $num => $val){
|
- |
|
832 |
$requeteInsert .= ",({$correspondance_categories[$num]}, {$utilisateur['U_ID']}, {$bdWordpress->quote($val)}, '2017-05-19 15:06:16')";
|
- |
|
833 |
}
|
- |
|
834 |
}
|
- |
|
835 |
$requeteInsert .= "
|
- |
|
836 |
ON DUPLICATE KEY UPDATE `field_id`=VALUES(`field_id`), `user_id`=VALUES(`user_id`), `value`=VALUES(`value`), `last_updated`=VALUES(`last_updated`);";
|
- |
|
837 |
|
- |
|
838 |
try {
|
- |
|
839 |
$bdWordpress->exec($requeteInsert);
|
- |
|
840 |
|
- |
|
841 |
$compteur++;
|
- |
|
842 |
} catch(Exception $e) {
|
- |
|
843 |
echo "-- ECHEC " . __FUNCTION__ . " REQUÊTE: [$requeteInsert]" . PHP_EOL;
|
- |
|
844 |
|
- |
|
845 |
if (true !== $modeBourrin) {
|
- |
|
846 |
restaureLaTable($bdWordpress, $prefixe_tables_wp . 'bp_xprofile_data');
|
- |
|
847 |
|
- |
|
848 |
die(var_dump($e->errorInfo));
|
- |
|
849 |
}
|
- |
|
850 |
}
|
- |
|
851 |
}
|
- |
|
852 |
|
- |
|
853 |
echo '-- ' . $compteur . '/' . count($utilisateurs) . ' profils d\'utilisateur migrés. ' . PHP_EOL;
|
- |
|
854 |
}
|
- |
|
855 |
|
- |
|
856 |
function migrerEvenements() {
|
- |
|
857 |
global $prefixe_tables_wp;
|
- |
|
858 |
global $bdTelaProd;
|
- |
|
859 |
global $bdWordpress;
|
- |
|
860 |
global $modeBourrin;
|
- |
|
861 |
|
- |
|
862 |
sauvegardeLaTable($bdWordpress, $prefixe_tables_wp . 'posts');
|
- |
|
863 |
|
- |
|
864 |
$requeteEvenements = "SELECT `bf_id_fiche`+10000 AS `ID`, `bf_ce_utilisateur` AS `post_author`, `bf_date_creation_fiche` AS `post_date`, `bf_date_creation_fiche` AS `post_date_gmt`, '' AS `post_content`, `bf_titre` AS `post_title`, '' AS `post_excerpt`, 'publish' AS `post_status`, 'open' AS `comment_status`, 'open' AS `ping_status`, '' AS `post_password`, `bf_id_fiche`+10000 AS `post_name`, '' AS `to_ping`, '' AS `pinged`, `bf_date_maj_fiche` AS `post_modified`, `bf_date_maj_fiche` AS `post_modified_gmt`, '' AS `post_content_filtered`, 0 AS `post_parent`, `bf_id_fiche`+10000 AS `guid`, 0 AS `menu_order`, 'post' AS `post_type`, '' AS `post_mime_type`, 0 AS `comment_count` FROM `bazar_fiche` WHERE year(`bf_date_debut_validite_fiche`) >= 2017;";
|
- |
|
865 |
|
- |
|
866 |
$evenements = $bdTelaProd->query($requeteEvenements)->fetchAll(PDO::FETCH_ASSOC);
|
- |
|
867 |
|
- |
|
868 |
$compteur = 0;
|
- |
|
869 |
foreach ($evenements as $evenement) {
|
- |
|
870 |
// gestion des dates normales et dates en GMT
|
- |
|
871 |
$date = new DateTime($evenement['post_date'], new DateTimeZone('Europe/Paris'));
|
- |
|
872 |
$evenement['post_date_gmt'] = $date->setTimezone(new DateTimeZone('GMT'))->format('Y-m-d H:i:s');
|
- |
|
873 |
$date = new DateTime($evenement['post_modified'], new DateTimeZone('Europe/Paris'));
|
- |
|
874 |
$evenement['post_modified_gmt'] = $date->setTimezone(new DateTimeZone('GMT'))->format('Y-m-d H:i:s');
|
251 |
|
875 |
|
- |
|
876 |
$requete = 'INSERT INTO ' . $prefixe_tables_wp . 'posts (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES'
|
252 |
private function transformerNumEnUrl($matches) {
|
877 |
. '(' . implode(', ', array_map(array($bdWordpress, 'quote'), $evenement)) . ')'
|
- |
|
878 |
. 'ON DUPLICATE KEY UPDATE `ID`=VALUES(`ID`), `post_author`=VALUES(`post_author`), `post_date`=VALUES(`post_date`), `post_date_gmt`=VALUES(`post_date_gmt`), `post_content`=VALUES(`post_content`), `post_title`=VALUES(`post_title`), `post_excerpt`=VALUES(`post_excerpt`), `post_status`=VALUES(`post_status`), `comment_status`=VALUES(`comment_status`), `ping_status`=VALUES(`ping_status`), `post_password`=VALUES(`post_password`), `post_name`=VALUES(`post_name`), `to_ping`=VALUES(`to_ping`), `pinged`=VALUES(`pinged`), `post_modified`=VALUES(`post_modified`), `post_modified_gmt`=VALUES(`post_modified_gmt`), `post_content_filtered`=VALUES(`post_content_filtered`), `post_parent`=VALUES(`post_parent`), `guid`=VALUES(`guid`), `menu_order`=VALUES(`menu_order`), `post_type`=VALUES(`post_type`), `post_mime_type`=VALUES(`post_mime_type`), `comment_count`=VALUES(`comment_count`);'
|
- |
|
879 |
;
|
- |
|
880 |
|
- |
|
881 |
try {
|
- |
|
882 |
$bdWordpress->exec($requete);
|
- |
|
883 |
|
- |
|
884 |
$compteur++;
|
- |
|
885 |
} catch(Exception $e) {
|
- |
|
886 |
echo "-- ECHEC " . __FUNCTION__ . " REQUÊTE: [$requete]" . PHP_EOL;
|
- |
|
887 |
|
- |
|
888 |
if (true !== $modeBourrin) {
|
- |
|
889 |
restaureLaTable($bdWordpress, $prefixe_tables_wp . 'posts');
|
- |
|
890 |
|
- |
|
891 |
die(var_dump($e->errorInfo));
|
- |
|
892 |
}
|
- |
|
893 |
}
|
- |
|
894 |
|
- |
|
895 |
// collecte les infos pour l'enregistrement des redirections 301 des articles
|
- |
|
896 |
$ancienne_url = 'http://www.tela-botanica.org/page:evenements?action=8&id_fiche=' . $evenement['ID'] - 10000;
|
- |
|
897 |
$insert_redirection[] = '(' . $article['ID'] . ', ' . $bdWordpress->quote($ancienne_url) . ')';
|
- |
|
898 |
|
- |
|
899 |
$requeteInsertRedirection = 'INSERT INTO ' . $prefixe_tables_wp . 'slug_history (`post_id`, `url`)
|
- |
|
900 |
VALUES ' . implode(', ', $insert_redirection) . '
|
- |
|
901 |
ON DUPLICATE KEY UPDATE `post_id`=VALUES(`post_id`), `url`=VALUES(`url`);';
|
- |
|
902 |
|
- |
|
903 |
try {
|
- |
|
904 |
$bdWordpress->exec($requeteInsertRedirection);
|
- |
|
905 |
} catch(Exception $e) {
|
- |
|
906 |
echo "-- ECHEC " . __FUNCTION__ . " REQUÊTE: [$requeteInsertRedirection]" . PHP_EOL;
|
- |
|
907 |
|
- |
|
908 |
if (true !== $modeBourrin) {
|
- |
|
909 |
restaureLaTable($bdWordpress, $prefixe_tables_wp . 'posts');
|
- |
|
910 |
restaureLaTable($bdWordpress, $prefixe_tables_wp . 'slug_history');
|
- |
|
911 |
|
- |
|
912 |
die(var_dump($e->errorInfo));
|
- |
|
913 |
}
|
- |
|
914 |
}
|
- |
|
915 |
}
|
- |
|
916 |
|
- |
|
917 |
echo '-- ' . $compteur . '/' . count($evenements) . ' évènements migrés. ' . PHP_EOL;
|
- |
|
918 |
}
|
- |
|
919 |
/*
|
- |
|
920 |
* @todo vérifier que les metas sont bien synchros avec l'actuel
|
- |
|
921 |
*/
|
- |
|
922 |
function migrerEvenementsMeta() {
|
- |
|
923 |
global $prefixe_tables_wp;
|
- |
|
924 |
global $bdTelaProd;
|
- |
|
925 |
global $bdWordpress;
|
- |
|
926 |
global $modeBourrin;
|
- |
|
927 |
|
- |
|
928 |
sauvegardeLaTable($bdWordpress, $prefixe_tables_wp . 'postmeta');
|
- |
|
929 |
|
- |
|
930 |
$fin = 'AS meta_value FROM `bazar_fiche` WHERE year(`bf_date_debut_validite_fiche`) >= 2017';
|
- |
|
931 |
|
- |
|
932 |
$requeteEvenementsChampsACF = "SELECT `bf_id_fiche`+10000 AS post_id, '_edit_lock' AS meta_key, CONVERT(CONVERT('1476892394:1' USING utf8) USING utf8) $fin UNION
|
- |
|
933 |
SELECT `bf_id_fiche`+10000 AS post_id, '_edit_last' AS meta_key, CONVERT('1' USING utf8) $fin UNION
|
- |
|
934 |
SELECT `bf_id_fiche`+10000 AS post_id, '_alp_processed' AS meta_key, CONVERT('1476891070' USING utf8) $fin UNION
|
- |
|
935 |
|
- |
|
936 |
SELECT `bf_id_fiche`+10000 AS post_id, '_place' AS meta_key, CONVERT('field_580366d5a9e01' USING utf8) $fin UNION
|
- |
|
937 |
SELECT `bf_id_fiche`+10000 AS post_id, 'place' AS meta_key, CONVERT('a:3:{s:7:\"address\";s:47:\"53 Bd Bonne Nouvelle, 34000 Montpellier, France\";s:3:\"lat\";s:17:\"43.61335152461514\";s:3:\"lng\";s:17:\"3.880716562271118\";}' USING utf8) $fin UNION
|
- |
|
938 |
|
- |
|
939 |
SELECT `bf_id_fiche`+10000 AS post_id, '_contact_0_description' AS meta_key, CONVERT('field_580e45789024f' USING utf8) $fin UNION
|
- |
|
940 |
SELECT `bf_id_fiche`+10000 AS post_id, 'contact_0_description' AS meta_key, CONVERT(bf_nom_contact USING utf8) $fin UNION
|
- |
|
941 |
|
- |
|
942 |
SELECT `bf_id_fiche`+10000 AS post_id, '_prices' AS meta_key, CONVERT('field_5803a6059a5d1' USING utf8) $fin UNION
|
- |
|
943 |
SELECT `bf_id_fiche`+10000 AS post_id, 'prices' AS meta_key, CONVERT(bf_tarif_individuel USING utf8) $fin UNION
|
- |
|
944 |
SELECT `bf_id_fiche`+10000 AS post_id, '_is_free' AS meta_key, CONVERT('field_5803a5d09a5d0' USING utf8) $fin UNION
|
- |
|
945 |
SELECT `bf_id_fiche`+10000 AS post_id, 'is_free' AS meta_key, CONVERT('0' USING utf8) $fin UNION
|
- |
|
946 |
|
- |
|
947 |
SELECT `bf_id_fiche`+10000 AS post_id, '_image' AS meta_key, CONVERT('field_5803a65a08014' USING utf8) $fin UNION
|
- |
|
948 |
SELECT `bf_id_fiche`+10000 AS post_id, 'image' AS meta_key, CONVERT('7669' USING utf8) $fin UNION
|
- |
|
949 |
SELECT `bf_id_fiche`+10000 AS post_id, '_contact' AS meta_key, CONVERT('field_580e45279024d' USING utf8) $fin UNION
|
- |
|
950 |
SELECT `bf_id_fiche`+10000 AS post_id, 'contact' AS meta_key, CONVERT('1' USING utf8) $fin UNION
|
- |
|
951 |
|
- |
|
952 |
SELECT `bf_id_fiche`+10000 AS post_id, '_description' AS meta_key, CONVERT('field_580366bfa9e00' USING utf8) $fin UNION
|
- |
|
953 |
SELECT `bf_id_fiche`+10000 AS post_id, 'description' AS meta_key, CONVERT(bf_description USING utf8) $fin UNION
|
- |
|
954 |
|
- |
|
955 |
SELECT `bf_id_fiche`+10000 AS post_id, '_date' AS meta_key, CONVERT('field_580364c892ee1' USING utf8) $fin UNION
|
- |
|
956 |
SELECT `bf_id_fiche`+10000 AS post_id, 'date' AS meta_key, CONVERT(date_format(bf_date_fin_evenement, '%Y%m%d') USING utf8) $fin UNION
|
- |
|
957 |
SELECT `bf_id_fiche`+10000 AS post_id, '_date_end' AS meta_key, CONVERT('field_5803659792ee5' USING utf8) $fin UNION
|
- |
|
958 |
SELECT `bf_id_fiche`+10000 AS post_id, 'date_end' AS meta_key, CONVERT(date_format(bf_date_debut_evenement, '%Y%m%d') USING utf8) $fin;";
|
- |
|
959 |
|
- |
|
960 |
$evenementsChampsACF = $bdTelaProd->query($requeteEvenementsChampsACF)->fetchAll(PDO::FETCH_ASSOC);
|
- |
|
961 |
|
- |
|
962 |
$compteur = 0;
|
- |
|
963 |
foreach ($evenementsChampsACF as $champACF) {
|
- |
|
964 |
$requete = 'INSERT INTO ' . $prefixe_tables_wp . 'postmeta (`post_id`, `meta_key`, `meta_value`) VALUES'
|
- |
|
965 |
. '(' . implode(', ', array_map(array($bdWordpress, 'quote'), $champACF)) . ')'
|
- |
|
966 |
. 'ON DUPLICATE KEY UPDATE `post_id`=VALUES(`post_id`), `meta_key`=VALUES(`meta_key`), `meta_value`=VALUES(`meta_value`);'
|
- |
|
967 |
;
|
- |
|
968 |
|
- |
|
969 |
try {
|
- |
|
970 |
$bdWordpress->exec($requete);
|
- |
|
971 |
|
- |
|
972 |
$compteur++;
|
- |
|
973 |
} catch(Exception $e) {
|
- |
|
974 |
echo "-- ECHEC " . __FUNCTION__ . " REQUÊTE: [$requete]" . PHP_EOL;
|
- |
|
975 |
|
- |
|
976 |
if (true !== $modeBourrin) {
|
- |
|
977 |
restaureLaTable($bdWordpress, $prefixe_tables_wp . 'postmeta');
|
- |
|
978 |
|
- |
|
979 |
die(var_dump($e->errorInfo));
|
- |
|
980 |
}
|
- |
|
981 |
}
|
- |
|
982 |
}
|
- |
|
983 |
|
- |
|
984 |
echo '-- ' . $compteur . '/' . count($evenementsChampsACF) . ' meta d\'évènements migrées. ' . PHP_EOL;
|
- |
|
985 |
}
|
- |
|
986 |
|
- |
|
987 |
// private function migrerEvenementsRubrique() {
|
- |
|
988 |
// $requete = "INSERT INTO ".$this->basewp."term_relationships (`object_id`, `term_taxonomy_id`)
|
- |
|
989 |
// SELECT `bf_id_fiche` +10000, replace( replace( replace( replace( `bf_ce_nature` , '3', '39' ) , '4', '38' ) , '2', '37' ) , '1', '40' )
|
- |
|
990 |
// FROM `bazar_fiche`
|
- |
|
991 |
// WHERE year( `bf_date_debut_validite_fiche` ) =2016
|
- |
|
992 |
// UNION SELECT `bf_id_fiche` +10000, 36 AS cat_evnt
|
- |
|
993 |
// FROM `bazar_fiche`
|
- |
|
994 |
// WHERE year( `bf_date_debut_validite_fiche` ) =2016";
|
- |
|
995 |
// $retour = $this->bdd->executer($requete);
|
- |
|
996 |
// echo 'Il y a '.count($retour).' actualités migrées '."--";
|
- |
|
997 |
// }
|
- |
|
998 |
|
- |
|
999 |
|
- |
|
1000 |
/**
|
- |
|
1001 |
* Explication des champs de la table wp_posts : https://deliciousbrains.com/tour-wordpress-database/#wp_posts
|
- |
|
1002 |
*
|
- |
|
1003 |
* @todo : revoir la méthode d'ajout, là c'est un peu violent, ça écrase les menus, le footer, toussa
|
- |
|
1004 |
* (wai les menus c'est stocké dans la table posts, deal with it)
|
- |
|
1005 |
* Vérifier l'auto-incrément de la table Posts, 20000 ids sont censés être réservés aux articles importés
|
- |
|
1006 |
* Voir : https://wordpress.stackexchange.com/a/78317
|
- |
|
1007 |
*/
|
- |
|
1008 |
function migrerActualites() {
|
- |
|
1009 |
global $prefixe_tables_wp;
|
- |
|
1010 |
global $bdSpip;
|
- |
|
1011 |
global $bdWordpress;
|
- |
|
1012 |
global $modeBourrin;
|
- |
|
1013 |
global $doc_loc;
|
- |
|
1014 |
|
- |
|
1015 |
sauvegardeLaTable($bdWordpress, $prefixe_tables_wp . 'posts');
|
- |
|
1016 |
sauvegardeLaTable($bdWordpress, $prefixe_tables_wp . 'slug_history');
|
- |
|
1017 |
|
- |
|
1018 |
$requete_doc = "SELECT d.`id_document`, `fichier`, `id_article` FROM `spip_documents` d LEFT JOIN spip_documents_articles da ON da.`id_document` = d.`id_document`";
|
- |
|
1019 |
$documents = $bdSpip->query($requete_doc)->fetchAll(PDO::FETCH_ASSOC);
|
- |
|
1020 |
|
- |
|
1021 |
foreach ($documents as $doc) {
|
- |
|
1022 |
$doc_loc[$doc['id_document']] = $doc['fichier'];
|
- |
|
1023 |
}
|
- |
|
1024 |
|
- |
|
1025 |
/*INSERT INTO `wp4_posts`
|
- |
|
1026 |
SELECT spip_articles.`id_article` as ID, `id_auteur` as post_author, `date` as post_date, `date` as post_date_gmt,
|
- |
|
1027 |
replace(replace(replace(replace(replace(replace(replace(replace(replace(convert( convert( texte USING latin1 ) USING utf8 ),'{{{{',''), '}}}}', '<!--more-->'), '{{{','<h2>'), '}}}', '</h2>'), '{{', '<strong>'), '}}', '</strong>'), '{', '<em>'), '}', '</em>'), '_ ', '') as post_content,
|
253 |
$remplace = "";
|
1028 |
`titre` as post_title, "" as post_excerpt, replace(replace(replace(replace(replace(`statut`,'poubelle', 'trash'),'publie', 'publish'), 'prepa', 'private'), 'prop', 'pending'), 'refuse', 'trash') as post_status, "open" as comment_status, "open" as ping_status, "" as post_password, spip_articles.`id_article` as post_name, "" as to_ping, "" as pinged, `date_modif` as post_modified,`date_modif` as post_modified_gmt, "" as post_content_filtered, "" as post_parent,
|
- |
|
1029 |
concat("http://tela-botanica.net/wpsite/actu",spip_articles.`id_article`) as guid, "0" as menu_order, "post" as post_type, "" as post_mime_type, "" as comment_count FROM tela_prod_spip_actu.`spip_articles` left join tela_prod_spip_actu.spip_auteurs_articles on spip_auteurs_articles.`id_article` = spip_articles.`id_article` WHERE id_rubrique in (22,54,70,30,19,51)
|
- |
|
1030 |
*/
|
- |
|
1031 |
$requete = "SELECT spip_articles.`id_article` AS ID, `id_auteur` AS post_author, `date` AS post_date, `date` AS post_date_gmt,
|
- |
|
1032 |
replace(replace(replace(replace(replace(replace(replace(replace(replace(convert( convert( texte USING latin1 ) USING utf8 ),'{{{{',''), '}}}}', '<!--more-->'), '{{{','<h2>'), '}}}', '</h2>'), '{{', '<strong>'), '}}', '</strong>'), '{', '<em>'), '}', '</em>'), '_ ', '') AS post_content,
|
- |
|
1033 |
`titre` AS post_title, \"\" AS post_excerpt, replace(replace(replace(replace(replace(`statut`,'poubelle', 'trash'),'publie', 'publish'), 'prepa', 'private'), 'prop', 'pending'), 'refuse', 'trash') AS post_status, \"open\" AS comment_status, \"open\" AS ping_status, \"\" AS post_password, concat(\"article\",spip_articles.`id_article`) AS post_name, \"\" AS to_ping, \"\" AS pinged, `date_modif` AS post_modified,`date_modif` AS post_modified_gmt, \"\" AS post_content_filtered, \"\" AS post_parent,
|
- |
|
1034 |
concat(\"http://tela-botanica.org/?p=\",spip_articles.`id_article`) AS guid, \"0\" AS menu_order, \"post\" AS post_type, \"\" AS post_mime_type, \"\" AS comment_count FROM `spip_articles` LEFT JOIN spip_auteurs_articles ON spip_auteurs_articles.`id_article` = spip_articles.`id_article` WHERE id_rubrique in ( " . _rubriquesSpipAMigrer() . " )";
|
- |
|
1035 |
$articles = $bdSpip->query($requete)->fetchAll(PDO::FETCH_ASSOC);
|
- |
|
1036 |
|
- |
|
1037 |
$i = 0;
|
- |
|
1038 |
$compteurSucces = 0;
|
- |
|
1039 |
$length = count($articles);
|
- |
|
1040 |
foreach ($articles as $article) {
|
- |
|
1041 |
|
- |
|
1042 |
$article['post_content'] = preg_replace("/\[([^\[]*)\-\>([^\[]*)\]/", '<a href="\2">\1</a>', $article['post_content']);
|
- |
|
1043 |
//$images = preg_grep("\<img([0-9]*)\|[a-z]*\>", $article['post_content']);
|
- |
|
1044 |
$article['post_content'] = preg_replace_callback("/\<img([0-9]*)\|[a-z]*\>/", 'transformerNumEnUrl', $article['post_content']);
|
- |
|
1045 |
|
- |
|
1046 |
// gestion des dates normales et dates en GMT
|
- |
|
1047 |
$date = new DateTime($article['post_date'], new DateTimeZone('Europe/Paris'));
|
- |
|
1048 |
$article['post_date_gmt'] = $date->setTimezone(new DateTimeZone('GMT'))->format('Y-m-d H:i:s');
|
- |
|
1049 |
$date = new DateTime($article['post_modified'], new DateTimeZone('Europe/Paris'));
|
- |
|
1050 |
$article['post_modified_gmt'] = $date->setTimezone(new DateTimeZone('GMT'))->format('Y-m-d H:i:s');
|
- |
|
1051 |
|
- |
|
1052 |
$insert[] = '(' . implode(', ', array_map(array($bdWordpress, 'quote'), $article)) . ')';
|
- |
|
1053 |
|
- |
|
1054 |
// collecte les infos pour l'enregistrement des redirections 301 des articles
|
- |
|
1055 |
$ancienne_url = 'http://www.tela-botanica.org/actu/article' . $article['ID'] . '.html';
|
- |
|
1056 |
$insert_redirection[] = '(' . $article['ID'] . ', ' . $bdWordpress->quote($ancienne_url) . ')';
|
- |
|
1057 |
|
- |
|
1058 |
$i++;
|
- |
|
1059 |
|
- |
|
1060 |
// Permet de d'insérer par lot de 50 ou bien à la fin
|
- |
|
1061 |
if (0 === $i % 50 || $i === $length -1) {
|
254 |
if (isset($matches[1])) {
|
1062 |
$requeteInsert = 'INSERT INTO ' . $prefixe_tables_wp . 'posts (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES ' . implode(', ', $insert) . '
|
- |
|
1063 |
ON DUPLICATE KEY UPDATE `ID`=VALUES(`ID`), `post_author`=VALUES(`post_author`), `post_date`=VALUES(`post_date`), `post_date_gmt`=VALUES(`post_date_gmt`), `post_content`=VALUES(`post_content`), `post_title`=VALUES(`post_title`), `post_excerpt`=VALUES(`post_excerpt`), `post_status`=VALUES(`post_status`), `comment_status`=VALUES(`comment_status`), `ping_status`=VALUES(`ping_status`), `post_password`=VALUES(`post_password`), `post_name`=VALUES(`post_name`), `to_ping`=VALUES(`to_ping`), `pinged`=VALUES(`pinged`), `post_modified`=VALUES(`post_modified`), `post_modified_gmt`=VALUES(`post_modified_gmt`), `post_content_filtered`=VALUES(`post_content_filtered`), `post_parent`=VALUES(`post_parent`), `guid`=VALUES(`guid`), `menu_order`=VALUES(`menu_order`), `post_type`=VALUES(`post_type`), `post_mime_type`=VALUES(`post_mime_type`), `comment_count`=VALUES(`comment_count`);';
|
- |
|
1064 |
try {
|
- |
|
1065 |
$bdWordpress->exec($requeteInsert);
|
- |
|
1066 |
|
- |
|
1067 |
$compteurSucces += count($insert);
|
- |
|
1068 |
} catch(Exception $e) {
|
- |
|
1069 |
echo "-- ECHEC " . __FUNCTION__ . " REQUÊTE: [$requeteInsert]" . PHP_EOL;
|
- |
|
1070 |
|
- |
|
1071 |
if (true !== $modeBourrin) {
|
- |
|
1072 |
restaureLaTable($bdWordpress, $prefixe_tables_wp . 'posts');
|
- |
|
1073 |
restaureLaTable($bdWordpress, $prefixe_tables_wp . 'slug_history');
|
- |
|
1074 |
|
- |
|
1075 |
die(var_dump($e->errorInfo));
|
- |
|
1076 |
}
|
- |
|
1077 |
}
|
- |
|
1078 |
$insert = array();
|
- |
|
1079 |
|
- |
|
1080 |
$requeteInsertRedirection = 'INSERT INTO ' . $prefixe_tables_wp . 'slug_history (`post_id`, `url`)
|
- |
|
1081 |
VALUES ' . implode(', ', $insert_redirection) . '
|
- |
|
1082 |
ON DUPLICATE KEY UPDATE `post_id`=VALUES(`post_id`), `url`=VALUES(`url`);';
|
- |
|
1083 |
try {
|
- |
|
1084 |
$bdWordpress->exec($requeteInsertRedirection);
|
- |
|
1085 |
} catch(Exception $e) {
|
- |
|
1086 |
echo "-- ECHEC " . __FUNCTION__ . " REQUÊTE: [$requeteInsertRedirection]" . PHP_EOL;
|
- |
|
1087 |
|
- |
|
1088 |
if (true !== $modeBourrin) {
|
- |
|
1089 |
restaureLaTable($bdWordpress, $prefixe_tables_wp . 'posts');
|
- |
|
1090 |
restaureLaTable($bdWordpress, $prefixe_tables_wp . 'slug_history');
|
- |
|
1091 |
|
- |
|
1092 |
die(var_dump($e->errorInfo));
|
- |
|
1093 |
}
|
- |
|
1094 |
}
|
255 |
$remplace = '<img src="http://www.tela-botanica.org/actu/'.$this->doc_loc[$matches[1]].'" \/\>';
|
1095 |
$insert_redirection = array();
|
256 |
}
|
- |
|
257 |
return $remplace;
|
1096 |
}
|
258 |
}
|
1097 |
}
|
259 |
|
- |
|
260 |
private function migrerActualitesRubrique() {
|
- |
|
261 |
$requete = "INSERT INTO ".$this->basewp."term_relationships (`object_id`, `term_taxonomy_id`)
|
- |
|
262 |
SELECT `id_article`, replace(replace(replace(replace(replace(replace(`id_rubrique`, 22, 20), 54, 21), 30, 23), 19, 24), 51, 25), 70, 22)
|
- |
|
263 |
FROM tela_prod_spip_actu.`spip_articles` WHERE id_rubrique in (22,54,70,30,19,51)";
|
- |
|
264 |
$retour = $this->bdd->executer($requete);
|
1098 |
|
265 |
echo 'Il y a '.count($retour).' actualités migrées '."--";
|
- |
|
266 |
return $retour;
|
1099 |
echo '-- ' . $compteurSucces . '/' . count($articles) . ' actualités migrées. ' . PHP_EOL;
|
267 |
}
|
1100 |
}
|
268 |
|
1101 |
|
269 |
private function migrerActualitesCommentaires() {
|
1102 |
function transformerNumEnUrl($matches) {
|
270 |
$requete = "INSERT INTO ".$this->basewp.'comments (`comment_ID`, `comment_post_ID`, `comment_author`, `comment_author_email`, `comment_author_url`, `comment_author_IP`, `comment_date`, `comment_date_gmt`, `comment_content`, `comment_karma`, `comment_approved`, `comment_agent`, `comment_type`, `comment_parent`, `user_id`)
|
- |
|
271 |
SELECT `id_forum` , `id_article` , `auteur` , `email_auteur` , "" AS url, `ip` , `date_heure` , `date_heure` AS gmt, `texte` , "0" AS karma, replace(`statut`, "publie", "1") , "" AS agent, "" AS
|
- |
|
272 |
TYPE , `id_parent` , `id_auteur`
|
- |
|
273 |
FROM tela_prod_spip_actu.`spip_forum`
|
- |
|
274 |
WHERE id_article in (SELECT `id_article` FROM tela_prod_spip_actu.`spip_articles` WHERE id_rubrique in (22,54,70,30,19,51))';
|
1103 |
global $doc_loc;
|
275 |
|
- |
|
276 |
$retour = $this->bdd->executer($requete);
|
- |
|
277 |
echo 'Il y a '.count($retour).' actualités migrées '."--";
|
1104 |
|
278 |
return $retour;
|
- |
|
279 |
}
|
- |
|
280 |
|
1105 |
$remplace = '';
|
281 |
private function migrerActualitesLogo() {
|
1106 |
if (isset($matches[1])) {
|
282 |
$requete = "INSERT INTO ".$this->basewp."term_relationships`(`object_id`, `term_taxonomy_id`)
|
- |
|
283 |
SELECT `id_article`, replace(replace(replace(replace(replace(replace(`id_rubrique`, 22, 20), 54, 21), 30, 23), 19, 24), 51, 25), 70, 22)
|
- |
|
284 |
FROM `spip_articles` WHERE id_rubrique in (22,54,70,30,19,51)";
|
- |
|
285 |
|
- |
|
286 |
$retour = $this->bdd->executer($requete);
|
- |
|
287 |
echo 'Il y a '.count($retour).' actualités migrées '."--";
|
- |
|
288 |
return $retour;
|
1107 |
$remplace = '<img src="http://www.tela-botanica.org/actu/'.$doc_loc[$matches[1]].'" \/\>';
|
289 |
}
|
1108 |
}
|
- |
|
1109 |
|
290 |
|
1110 |
return $remplace;
|
- |
|
1111 |
}
|
- |
|
1112 |
|
- |
|
1113 |
// Retourne les id des rubriques SPIP à migrer
|
- |
|
1114 |
function _rubriquesSpipAMigrer() {
|
- |
|
1115 |
global $correspondanceCategorieRubriques;
|
- |
|
1116 |
|
- |
|
1117 |
$rubriquesAMigrer = [];
|
- |
|
1118 |
foreach ($correspondanceCategorieRubriques as $correspondance) {
|
- |
|
1119 |
$rubriquesAMigrer[] = implode(',', $correspondance['rubrique-a-migrer']);
|
- |
|
1120 |
}
|
- |
|
1121 |
|
- |
|
1122 |
return implode(',', $rubriquesAMigrer);
|
- |
|
1123 |
}
|
- |
|
1124 |
|
- |
|
1125 |
/**
|
- |
|
1126 |
* Ça c'est fait pour que les articles importés avant se retrouvent dans la bonne catégorie
|
- |
|
1127 |
* (Du coup faut gerer les correspondances et tout, folie!)
|
- |
|
1128 |
* Là dans l'état faut créer les catégories correctement coté Wordpress avant de lancer le script, puis corriger les noms/slugs toussa
|
- |
|
1129 |
*
|
- |
|
1130 |
* @todo revoir l'insertion, ça défonce les menus là... Voir : https://wordpress.stackexchange.com/a/78317
|
- |
|
1131 |
* @todo vérifier que les évènements sont aussi migrés ou alors créer la fonction de migration équivalente pour eux
|
- |
|
1132 |
*/
|
- |
|
1133 |
function migrerRubriques() {
|
- |
|
1134 |
global $prefixe_tables_wp;
|
- |
|
1135 |
global $bdSpip;
|
- |
|
1136 |
global $bdWordpress;
|
- |
|
1137 |
global $modeBourrin;
|
- |
|
1138 |
global $correspondanceCategorieRubriques;
|
- |
|
1139 |
|
- |
|
1140 |
// Contient la table de correspondances rubrique(SPIP)-categorie(WP), indexée par rubrique
|
- |
|
1141 |
$rubriqueCategorie = [];
|
- |
|
1142 |
foreach ($correspondanceCategorieRubriques as $correspondance) {
|
- |
|
1143 |
$requeteCategorie = 'SELECT term_id FROM ' . $prefixe_tables_wp . 'terms WHERE name = ' . $bdWordpress->quote($correspondance['titre']) . ' AND slug = ' . $bdWordpress->quote($correspondance['slug']) . ';';
|
- |
|
1144 |
|
- |
|
1145 |
$categorie = $bdWordpress->query($requeteCategorie)->fetchAll(PDO::FETCH_ASSOC);
|
- |
|
1146 |
|
- |
|
1147 |
if (0 === count($categorie)) {
|
- |
|
1148 |
var_dump($correspondance);
|
- |
|
1149 |
die('catégorie inéxistante, est-elle bien créée coté wordpress ? est-ce le bon slug ?');
|
- |
|
1150 |
} elseif (1 < count($categorie)) {
|
- |
|
1151 |
die('catégorie multiple, je suis censé deviner laquelle est la bonne ? merci de faire le ménage :)');
|
- |
|
1152 |
}
|
- |
|
1153 |
|
- |
|
1154 |
// On fait correspondre à chaque rubrique à migrer sa catégorie
|
- |
|
1155 |
foreach ($correspondance['rubrique-a-migrer'] as $rubrique) {
|
- |
|
1156 |
$rubriqueCategorie[$rubrique] = $categorie[0]['term_id'];
|
- |
|
1157 |
}
|
- |
|
1158 |
|
- |
|
1159 |
// Initialisation des compteurs
|
- |
|
1160 |
$compteur[$categorie[0]['term_id']] = 0;
|
- |
|
1161 |
}
|
- |
|
1162 |
|
- |
|
1163 |
sauvegardeLaTable($bdWordpress, $prefixe_tables_wp . 'term_relationships');
|
- |
|
1164 |
sauvegardeLaTable($bdWordpress, $prefixe_tables_wp . 'term_taxonomy');
|
- |
|
1165 |
|
- |
|
1166 |
$requeteActualitesRubriques = 'SELECT `id_article`, `id_rubrique`
|
- |
|
1167 |
FROM `spip_articles` WHERE id_rubrique IN (' . _rubriquesSpipAMigrer() . ');' ;
|
- |
|
1168 |
|
- |
|
1169 |
$actualites = $bdSpip->query($requeteActualitesRubriques)->fetchAll(PDO::FETCH_ASSOC);
|
- |
|
1170 |
|
- |
|
1171 |
$compteur = 0;
|
- |
|
1172 |
foreach ($actualites as $actualite) {
|
- |
|
1173 |
$requete = 'INSERT INTO ' . $prefixe_tables_wp . 'term_relationships (`object_id`, `term_taxonomy_id`)
|
- |
|
1174 |
VALUES(' . $actualite['id_article'] . ', ' . $rubriqueCategorie[$actualite['id_rubrique']] . ')
|
- |
|
1175 |
ON DUPLICATE KEY UPDATE `object_id`=VALUES(`object_id`), `term_taxonomy_id`=VALUES(`term_taxonomy_id`);';
|
- |
|
1176 |
|
- |
|
1177 |
$updateCompteur = 'INSERT INTO ' . $prefixe_tables_wp . 'term_taxonomy (`term_id`, `taxonomy`, `count`) '
|
- |
|
1178 |
. 'VALUES(' . $rubriqueCategorie[$actualite['id_rubrique']] . ', "category", 1)'
|
- |
|
1179 |
. 'ON DUPLICATE KEY UPDATE `term_id`=VALUES(`term_id`), `taxonomy`=VALUES(`taxonomy`), `count`=`count`+1'
|
- |
|
1180 |
;
|
- |
|
1181 |
|
- |
|
1182 |
try {
|
- |
|
1183 |
$bdWordpress->exec($requete);
|
- |
|
1184 |
$bdWordpress->exec($updateCompteur);
|
- |
|
1185 |
|
- |
|
1186 |
$compteur++;
|
- |
|
1187 |
} catch(Exception $e) {
|
- |
|
1188 |
echo "-- ECHEC " . __FUNCTION__ . " REQUÊTE: [$requete]" . PHP_EOL;
|
- |
|
1189 |
|
- |
|
1190 |
if (true !== $modeBourrin) {
|
- |
|
1191 |
restaureLaTable($bdWordpress, $prefixe_tables_wp . 'term_relationships');
|
- |
|
1192 |
restaureLaTable($bdWordpress, $prefixe_tables_wp . 'term_taxonomy');
|
- |
|
1193 |
|
- |
|
1194 |
die(var_dump($e->errorInfo));
|
- |
|
1195 |
}
|
- |
|
1196 |
}
|
- |
|
1197 |
}
|
- |
|
1198 |
|
- |
|
1199 |
echo '-- ' . $compteur . '/' . count($actualites) . ' rubriques d\'actualités migrées. ' . PHP_EOL;
|
- |
|
1200 |
}
|
- |
|
1201 |
|
- |
|
1202 |
function migrerActualitesCommentaires() {
|
- |
|
1203 |
global $prefixe_tables_wp;
|
- |
|
1204 |
global $bdSpip;
|
- |
|
1205 |
global $bdWordpress;
|
- |
|
1206 |
global $modeBourrin;
|
- |
|
1207 |
|
- |
|
1208 |
sauvegardeLaTable($bdWordpress, $prefixe_tables_wp . 'comments');
|
- |
|
1209 |
sauvegardeLaTable($bdWordpress, $prefixe_tables_wp . 'posts');
|
- |
|
1210 |
|
- |
|
1211 |
$requeteActualitesCommentaires = 'SELECT `id_forum` , `id_article` , `auteur` , `email_auteur` , "" AS url, `ip` , `date_heure` , `date_heure` AS gmt, `texte` , "0" AS karma, replace(`statut`, "publie", "1") , "" AS agent, "" AS TYPE , `id_parent` , `id_auteur`
|
- |
|
1212 |
FROM `spip_forum`
|
- |
|
1213 |
WHERE id_article IN (SELECT `id_article` FROM `spip_articles` WHERE id_rubrique IN (' . _rubriquesSpipAMigrer() . ')) AND statut = "publie"';
|
- |
|
1214 |
|
- |
|
1215 |
$actualitesCommentaires = $bdSpip->query($requeteActualitesCommentaires)->fetchAll(PDO::FETCH_ASSOC);
|
- |
|
1216 |
|
- |
|
1217 |
$compteur = 0;
|
- |
|
1218 |
foreach ($actualitesCommentaires as $actualiteCommentaire) {
|
- |
|
1219 |
$requete = 'INSERT INTO ' . $prefixe_tables_wp . 'comments (`comment_ID`, `comment_post_ID`, `comment_author`, `comment_author_email`, `comment_author_url`, `comment_author_IP`, `comment_date`, `comment_date_gmt`, `comment_content`, `comment_karma`, `comment_approved`, `comment_agent`, `comment_type`, `comment_parent`, `user_id`) '
|
- |
|
1220 |
. 'VALUES(' . implode(', ', array_map(array($bdWordpress, 'quote'), $actualiteCommentaire)) . ')
|
- |
|
1221 |
ON DUPLICATE KEY UPDATE `comment_ID`=VALUES(`comment_ID`), `comment_post_ID`=VALUES(`comment_post_ID`), `comment_author`=VALUES(`comment_author`), `comment_author_email`=VALUES(`comment_author_email`), `comment_author_url`=VALUES(`comment_author_url`), `comment_author_IP`=VALUES(`comment_author_IP`), `comment_date`=VALUES(`comment_date`), `comment_date_gmt`=VALUES(`comment_date_gmt`), `comment_content`=VALUES(`comment_content`), `comment_karma`=VALUES(`comment_karma`), `comment_approved`=VALUES(`comment_approved`), `comment_agent`=VALUES(`comment_agent`), `comment_type`=VALUES(`comment_type`), `comment_parent`=VALUES(`comment_parent`), `user_id`=VALUES(`user_id`);';
|
- |
|
1222 |
|
- |
|
1223 |
$updateCompteurCommentaires = 'UPDATE ' . $prefixe_tables_wp . 'posts SET comment_count = comment_count + 1 WHERE ID = ' . $actualiteCommentaire['id_article'] . ';';
|
- |
|
1224 |
|
- |
|
1225 |
try {
|
- |
|
1226 |
$bdWordpress->exec($requete);
|
- |
|
1227 |
$bdWordpress->exec($updateCompteurCommentaires);
|
- |
|
1228 |
|
- |
|
1229 |
$compteur++;
|
- |
|
1230 |
} catch(Exception $e) {
|
- |
|
1231 |
echo "-- ECHEC " . __FUNCTION__ . " REQUÊTE: [$requete]" . PHP_EOL;
|
- |
|
1232 |
|
- |
|
1233 |
if (true !== $modeBourrin) {
|
- |
|
1234 |
restaureLaTable($bdWordpress, $prefixe_tables_wp . 'comments');
|
- |
|
1235 |
restaureLaTable($bdWordpress, $prefixe_tables_wp . 'posts');
|
- |
|
1236 |
|
- |
|
1237 |
die(var_dump($e->errorInfo));
|
- |
|
1238 |
}
|
- |
|
1239 |
}
|
- |
|
1240 |
}
|
- |
|
1241 |
|
- |
|
1242 |
echo '-- ' . $compteur . '/' . count($actualitesCommentaires) . ' commentaires d\'actualité migrés. ' . PHP_EOL;
|
- |
|
1243 |
}
|
- |
|
1244 |
|
- |
|
1245 |
function migrerActualitesImageDeCouverture() {
|
- |
|
1246 |
global $prefixe_tables_wp;
|
- |
|
1247 |
global $wordpress_dir;
|
- |
|
1248 |
global $bdWordpress;
|
- |
|
1249 |
global $bdSpip;
|
- |
|
1250 |
global $modeBourrin;
|
- |
|
1251 |
|
- |
|
1252 |
|
- |
|
1253 |
// On vérifie qu'on peut bosser
|
- |
|
1254 |
// Faut être au bon endroit, le repertoire de wordpress
|
- |
|
1255 |
// Et avoir wp-cli installé
|
- |
|
1256 |
// Un peu plus loin on va charger les images depuis un dossier spécifique
|
- |
|
1257 |
$old_path = getcwd();
|
- |
|
1258 |
chdir($wordpress_dir);
|
- |
|
1259 |
|
- |
|
1260 |
echo '-- exécution de "wp --info"' . PHP_EOL;
|
- |
|
1261 |
exec('wp --info', $output, $exit_code);
|
- |
|
1262 |
if (0 !== $exit_code) {
|
- |
|
1263 |
die('Faut lancer la commande depuis le repertoire de wordpress (et avoir wp-cli installé)');
|
- |
|
1264 |
} else {
|
- |
|
1265 |
var_dump($output);
|
- |
|
1266 |
}
|
- |
|
1267 |
|
- |
|
1268 |
echo '-- recherche du dossier d\'images' . PHP_EOL;
|
- |
|
1269 |
if (!file_exists($wordpress_dir . '/IMG')) {
|
- |
|
1270 |
die('Faut rsync les images dans wordpress/IMG avant de commencer');
|
- |
|
1271 |
}
|
- |
|
1272 |
|
- |
|
1273 |
// chdir($old_path); // commenté car inutile de rechanger de répertoire avant la fin du script
|
- |
|
1274 |
|
- |
|
1275 |
sauvegardeLaTable($bdWordpress, $prefixe_tables_wp . 'posts');
|
- |
|
1276 |
sauvegardeLaTable($bdWordpress, $prefixe_tables_wp . 'postmeta');
|
- |
|
1277 |
|
- |
|
1278 |
$requete = sprintf('SELECT spip_articles.`id_article` AS ID, `date`, titre FROM `spip_articles` WHERE id_rubrique in ( %s ) ORDER BY id_article', _rubriquesSpipAMigrer());
|
- |
|
1279 |
$articles = $bdSpip->query($requete)->fetchAll(PDO::FETCH_ASSOC);
|
- |
|
1280 |
|
- |
|
1281 |
$i = 0;
|
- |
|
1282 |
$compteurSucces = 0;
|
- |
|
1283 |
$compteurEchecs = 0;
|
- |
|
1284 |
$compteurAbusay = 0;
|
- |
|
1285 |
$length = count($articles);
|
- |
|
1286 |
foreach ($articles as $article) {
|
- |
|
1287 |
|
- |
|
1288 |
|
- |
|
1289 |
$wpcli_meta = 'wp post meta list ' . $article['ID'] . ' --format=json';
|
- |
|
1290 |
|
- |
|
1291 |
exec($wpcli_meta, $wpcli_meta_command_output, $exit_code);
|
- |
|
1292 |
|
- |
|
1293 |
// die(var_dump($wpcli_meta_command_output));
|
- |
|
1294 |
|
- |
|
1295 |
// on va commencer par vérifier si l'article n'a pas déjà une image de couv
|
- |
|
1296 |
// [comme la sortie de "wp post meta get ID" est merdique (toujours à 1 et vide) on va ruser]
|
- |
|
1297 |
// cas 1 : le post n'existe pas ; code de sortie 1, tableau vide
|
- |
|
1298 |
// cas 2 : listes des metas à gérer
|
- |
|
1299 |
if (0 === $exit_code) {
|
- |
|
1300 |
$metas = json_decode($wpcli_meta_command_output[0], true);
|
- |
|
1301 |
unset($wpcli_meta_command_output);
|
- |
|
1302 |
|
- |
|
1303 |
// on va fouiller les metas, si on trouve une image de couverture (_thumbnail_id), on passe à la suite
|
- |
|
1304 |
foreach ($metas as $meta) {
|
- |
|
1305 |
if ($meta['meta_key'] === '_thumbnail_id') {
|
- |
|
1306 |
echo 'han!! le post ' . $article['ID'] . ' bah il a déjà une image, trop abusééééééé' . PHP_EOL;
|
- |
|
1307 |
// echo 'id du post de l\'image ' . $meta['meta_value'] . PHP_EOL;
|
- |
|
1308 |
$compteurAbusay++;
|
- |
|
1309 |
|
- |
|
1310 |
continue 2; // y'a déjà une couverture, on passe au prochain article
|
- |
|
1311 |
}
|
- |
|
1312 |
}
|
- |
|
1313 |
} else {
|
- |
|
1314 |
// cas d'erreur, genre le post existe pas, on arrète tout (ou pas)
|
- |
|
1315 |
echo $wpcli_meta . PHP_EOL;
|
- |
|
1316 |
var_dump($wpcli_meta_command_output);
|
- |
|
1317 |
var_dump($exit_code);
|
- |
|
1318 |
$compteurEchecs++;
|
- |
|
1319 |
// die('Erreur à l\'exécution de la commande');
|
- |
|
1320 |
echo('Erreur à l\'exécution de la commande (17)');
|
- |
|
1321 |
echo('Faut resynchroniser les actus, merci');
|
- |
|
1322 |
}
|
- |
|
1323 |
|
- |
|
1324 |
// on va pas aller télécharger les images sur le site, on les mets
|
- |
|
1325 |
// dans un dossier exprès
|
- |
|
1326 |
// genre :
|
- |
|
1327 |
// rsync -avz root@sequoia:/home/telabotap/www/actu/IMG/arton* wp-content/uploads/2017/03/
|
- |
|
1328 |
//
|
- |
|
1329 |
// on recherche l'image de couverture dans le dossier
|
- |
|
1330 |
$images = glob('IMG/arton' . $article['ID'] . '.*');
|
- |
|
1331 |
if (!empty($images)) {
|
- |
|
1332 |
$imageChemin = $images[0]; // normalement y'a qu'une image correspondant au filtre
|
- |
|
1333 |
|
- |
|
1334 |
if (file_exists($imageChemin)) {
|
- |
|
1335 |
$imageNom = strtolower(pathinfo($imageChemin, PATHINFO_FILENAME));
|
- |
|
1336 |
|
- |
|
1337 |
$wpcli_commande = 'wp media import ' . $imageChemin . ' --featured_image'
|
- |
|
1338 |
. ' --post_id=' . $article['ID']
|
- |
|
1339 |
. ' --title="image de couverture de l\'article ' . $article['ID'] . '"'
|
- |
|
1340 |
. ' --alt="image de couverture"'
|
- |
|
1341 |
. ' --desc="image de couverture de l\'article ' . $article['ID'] . '"' // post_content field
|
- |
|
1342 |
. ' --caption="image de couverture de l\'article ' . $article['ID'] . '"' // post_except field
|
- |
|
1343 |
;
|
- |
|
1344 |
|
- |
|
1345 |
exec($wpcli_commande, $command_output, $exit_code);
|
- |
|
1346 |
|
- |
|
1347 |
if (0 === $exit_code) {
|
- |
|
1348 |
foreach ($command_output as $message) {
|
- |
|
1349 |
echo $message;
|
- |
|
1350 |
}
|
- |
|
1351 |
echo PHP_EOL;
|
- |
|
1352 |
|
- |
|
1353 |
$compteurSucces++;
|
- |
|
1354 |
|
- |
|
1355 |
unset($command_output);
|
- |
|
1356 |
} else {
|
- |
|
1357 |
echo 'commande en échec : "' . $wpcli_commande . '"' . PHP_EOL;
|
- |
|
1358 |
echo PHP_EOL;
|
- |
|
1359 |
var_dump($command_output);
|
- |
|
1360 |
|
- |
|
1361 |
die('Erreur à l\'exécution de la commande (42)');
|
- |
|
1362 |
}
|
- |
|
1363 |
} else {
|
- |
|
1364 |
echo 'Image manquante : ' . $article['ID'];
|
- |
|
1365 |
}
|
- |
|
1366 |
}
|
- |
|
1367 |
// foreach ($imagesPaths as $path) {
|
- |
|
1368 |
// if (file_exists($path) && is_file($path)) {
|
- |
|
1369 |
// $imageChemin = $path;
|
- |
|
1370 |
// break;
|
- |
|
1371 |
// }
|
- |
|
1372 |
// }
|
- |
|
1373 |
|
- |
|
1374 |
|
- |
|
1375 |
// Si la méthode avec wp-cli fonctionne pas voir plus bas
|
- |
|
1376 |
// En mode sql dessous :
|
- |
|
1377 |
|
- |
|
1378 |
|
- |
|
1379 |
// vérifier si artonID.ext
|
- |
|
1380 |
// comment gérer les ids supplémentaires ? Y'avait une marge de 10k pour les articles, pareil pour les évènement, c'est bien ça ?
|
- |
|
1381 |
//
|
- |
|
1382 |
//
|
- |
|
1383 |
// Description de la table
|
- |
|
1384 |
//
|
- |
|
1385 |
// post_author sera admin "1"
|
- |
|
1386 |
// post_content sera une description, genre : image de couverture / titre de l'article
|
- |
|
1387 |
// post_title c'est le nom de l'image en minuscules sans l'extension
|
- |
|
1388 |
// post_excerpt c'est la légende
|
- |
|
1389 |
// post_status "inherit" avec post_parent à "0"
|
- |
|
1390 |
// comment_status "open"
|
- |
|
1391 |
// ping_status "closed"
|
- |
|
1392 |
// post_password vide
|
- |
|
1393 |
// post_name c'est comme post_title
|
- |
|
1394 |
// to_ping / pinged vides
|
- |
|
1395 |
// post_content_filtered vide
|
- |
|
1396 |
// post_parent c koi ?
|
- |
|
1397 |
// guid c koi ? dans mon exemple c'est l'url absolue de l'image
|
- |
|
1398 |
// menu_order à 0
|
- |
|
1399 |
// post_type attachment
|
- |
|
1400 |
// post_mime_type image/[gif,png,jpeg]
|
- |
|
1401 |
// comment_count à 0
|
- |
|
1402 |
//
|
- |
|
1403 |
//
|
- |
|
1404 |
// une image dans la galerie ça consiste en :
|
- |
|
1405 |
// - un post de type attachment comme vu au dessus
|
- |
|
1406 |
// - des meta, à savoir (exemples) :
|
291 |
}
|
1407 |
// - _wp_attached_file 2017/03/acab-11219026_10208737059251108_4677167688813950172_n.jpg
|
- |
|
1408 |
// - _wp_attachment_metadata a:4:{s:5:"width";i:800;s:6:"height";i:815;s:4:"file";s:65:"2017/03/acab-11219026_10208737059251108_4677167688813950172_n.jpg";s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}
|
- |
|
1409 |
// - Dans cette dernière meta les seules choses importantes (sauf erreur) c'est les dimensions et l'emplacement du fichier, donc image_meta = osef
|
- |
|
1410 |
//
|
- |
|
1411 |
// getimagesize() avec GD pour les tailles, ou mieux suivant ce qu'on a dans le serveur
|
- |
|
1412 |
//
|
- |
|
1413 |
// et une image de la galerie attachée à un article en tant qu'image à la une ça consite en :
|
- |
|
1414 |
// une ligne de meta sur le post avec _thumbnail_id qui pointe sur l'ID du post de l'image ex: _thumbnail_id 7870
|
- |
|
1415 |
|
- |
|
1416 |
// $image = array(
|
- |
|
1417 |
// 'post_author' => 1,
|
- |
|
1418 |
// 'post_date' => $article['date'],
|
- |
|
1419 |
// 'post_date_gmt' => $article['date'],
|
- |
|
1420 |
// 'post_content' => 'Image à la une de l\'article ' . $article['titre'],
|
- |
|
1421 |
// 'post_title' => $imagesNom,
|
- |
|
1422 |
// 'post_excerpt' => 'Image à la une de l\'article ' . $article['titre'],
|
- |
|
1423 |
// 'post_status' => 'inherit',
|
- |
|
1424 |
// 'comment_status' => 'open',
|
- |
|
1425 |
// 'ping_status' => 'closed',
|
- |
|
1426 |
// 'post_password' => '',
|
- |
|
1427 |
// 'post_name' => $imagesNom,
|
- |
|
1428 |
// 'to_ping' => '',
|
- |
|
1429 |
// 'pinged' => '',
|
- |
|
1430 |
// 'post_modified' => $article['date'],
|
- |
|
1431 |
// 'post_modified_gmt' => $article['date'],
|
- |
|
1432 |
// 'post_content_filtered' => '',
|
- |
|
1433 |
// 'post_parent' => 0,
|
- |
|
1434 |
// 'guid' => 'https://www.tela-botanica.org/wp-content/uploads/2017/03/' . basename($imageChemin),
|
- |
|
1435 |
// 'menu_order' => 0,
|
- |
|
1436 |
// 'post_type' => 'attachment',
|
- |
|
1437 |
// 'post_mime_type' => mime_content_type($imageChemin),
|
- |
|
1438 |
// 'comment_count' => 0
|
- |
|
1439 |
// );
|
- |
|
1440 |
|
- |
|
1441 |
// $i++;
|
- |
|
1442 |
|
- |
|
1443 |
|
- |
|
1444 |
// // gestion des dates normales et dates en GMT
|
- |
|
1445 |
// $date = new DateTime($image['post_date'], new DateTimeZone('Europe/Paris'));
|
- |
|
1446 |
// $image['post_date_gmt'] = $date->setTimezone(new DateTimeZone('GMT'))->format('Y-m-d H:i:s');
|
- |
|
1447 |
// $date = new DateTime($image['post_modified'], new DateTimeZone('Europe/Paris'));
|
- |
|
1448 |
// $image['post_modified_gmt'] = $date->setTimezone(new DateTimeZone('GMT'))->format('Y-m-d H:i:s');
|
- |
|
1449 |
|
- |
|
1450 |
// $requeteInsertAttachment = 'INSERT INTO ' . $prefixe_tables_wp . 'posts (`post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES ' . implode(', ', array_map(array($bdWordpress, 'quote'), $image)) . '
|
- |
|
1451 |
// ON DUPLICATE KEY UPDATE `ID`=VALUES(`ID`), `post_author`=VALUES(`post_author`), `post_date`=VALUES(`post_date`), `post_date_gmt`=VALUES(`post_date_gmt`), `post_content`=VALUES(`post_content`), `post_title`=VALUES(`post_title`), `post_excerpt`=VALUES(`post_excerpt`), `post_status`=VALUES(`post_status`), `comment_status`=VALUES(`comment_status`), `ping_status`=VALUES(`ping_status`), `post_password`=VALUES(`post_password`), `post_name`=VALUES(`post_name`), `to_ping`=VALUES(`to_ping`), `pinged`=VALUES(`pinged`), `post_modified`=VALUES(`post_modified`), `post_modified_gmt`=VALUES(`post_modified_gmt`), `post_content_filtered`=VALUES(`post_content_filtered`), `post_parent`=VALUES(`post_parent`), `guid`=VALUES(`guid`), `menu_order`=VALUES(`menu_order`), `post_type`=VALUES(`post_type`), `post_mime_type`=VALUES(`post_mime_type`), `comment_count`=VALUES(`comment_count`);'
|
- |
|
1452 |
// ;
|
- |
|
1453 |
|
- |
|
1454 |
// $attachmentMetas = array(
|
- |
|
1455 |
// 'post_id' => article['ID'],
|
- |
|
1456 |
// 'meta_key' => '_thumbnail_id',
|
- |
|
1457 |
// 'meta_value' => $artucle['ID'] + 10000;
|
- |
|
1458 |
// );
|
- |
|
1459 |
|
- |
|
1460 |
// $requeteInsertPostmeta = 'INSERT INTO ' . $prefixe_tables_wp . 'postmeta (`post_id`, `meta_key`, `meta_value`) VALUES'
|
- |
|
1461 |
// . '(' . implode(', ', array_map(array($bdWordpress, 'quote'), $attachmentMetas)) . ')'
|
- |
|
1462 |
// . 'ON DUPLICATE KEY UPDATE `post_id`=VALUES(`post_id`), `meta_key`=VALUES(`meta_key`), `meta_value`=VALUES(`meta_value`);'
|
- |
|
1463 |
// ;
|
- |
|
1464 |
|
- |
|
1465 |
// $postMetas = array(
|
- |
|
1466 |
// 'post_id' => article['ID'],
|
- |
|
1467 |
// 'meta_key' => '_thumbnail_id',
|
- |
|
1468 |
// 'meta_value' => $artucle['ID'] + 10000;
|
- |
|
1469 |
// );
|
- |
|
1470 |
|
- |
|
1471 |
// $requeteInsertPostmeta = 'INSERT INTO ' . $prefixe_tables_wp . 'postmeta (`post_id`, `meta_key`, `meta_value`) VALUES'
|
- |
|
1472 |
// . '(' . implode(', ', array_map(array($bdWordpress, 'quote'), $postMetas)) . ')'
|
- |
|
1473 |
// . 'ON DUPLICATE KEY UPDATE `post_id`=VALUES(`post_id`), `meta_key`=VALUES(`meta_key`), `meta_value`=VALUES(`meta_value`);'
|
- |
|
1474 |
// ;
|
- |
|
1475 |
|
- |
|
1476 |
// try {
|
- |
|
1477 |
// $bdWordpress->exec($requeteInsertAttachment);
|
- |
|
1478 |
|
- |
|
1479 |
// $compteurSucces += count($insert);
|
- |
|
1480 |
// } catch(Exception $e) {
|
- |
|
1481 |
// echo "-- ECHEC " . __FUNCTION__ . " REQUÊTE: [$requeteInsert]" . PHP_EOL;
|
- |
|
1482 |
|
- |
|
1483 |
// if (true !== $modeBourrin) {
|
- |
|
1484 |
// restaureLaTable($bdWordpress, $prefixe_tables_wp . 'posts');
|
- |
|
1485 |
// restaureLaTable($bdWordpress, $prefixe_tables_wp . 'postmeta');
|
- |
|
1486 |
|
- |
|
1487 |
// die(var_dump($e->errorInfo));
|
- |
|
1488 |
// }
|
- |
|
1489 |
// }
|
- |
|
1490 |
}
|
- |
|
1491 |
|
- |
|
1492 |
echo '-- ' . $compteurSucces . ' images de couverture actualités migrées. ' . PHP_EOL;
|
- |
|
1493 |
echo '-- ' . $compteurEchecs . ' erreurs rencontrées pendant la migration (mais rien de grave). ' . PHP_EOL;
|
- |
|
1494 |
echo '-- ' . $compteurAbusay . ' images déjà migrées ' . PHP_EOL;
|
- |
|
1495 |
echo '-- ' . $length . ' articles au total ' . PHP_EOL;
|
- |
|
1496 |
}
|
- |
|
1497 |
|
- |
|
1498 |
// @wphints : https://stackoverflow.com/questions/28643654/where-is-the-post-featured-image-link-stored-in-the-wordpress-database
|
- |
|
1499 |
// @wphints : https://deliciousbrains.com/tour-wordpress-database/#wp_posts
|
- |
|
1500 |
//
|
- |
|
1501 |
// Une photo éligible en couverture est stockée dans la table *_posts avec un post_type = attachment.
|
- |
|
1502 |
// Pour lier une image à un article il faut une ligne dans *_postmeta avec un type _thumbnail_id.
|
- |
|
1503 |
//
|
- |
|
1504 |
// Dans spip : l'image correspond à IMG/arton<<numarticle>>.png exemple : IMG/arton7965.png
|
- |
|
1505 |
//
|
- |
|
1506 |
// @TODO trouver une solution ? (ça marche pas car l'image doit être présente "dans" wordpress, connue de son gestionnaire de docs)
|
- |
|
1507 |
// function migrerActualitesLogo() {
|
- |
|
1508 |
// global $prefixe_tables_wp;
|
- |
|
1509 |
// global $bdSpip;
|
- |
|
1510 |
// global $bdWordpress;
|
- |
|
1511 |
// global $modeBourrin;
|
- |
|
1512 |
|
- |
|
1513 |
// sauvegardeLaTable($bdWordpress, $prefixe_tables_wp . 'term_relationships');
|
- |
|
1514 |
|
- |
|
1515 |
// $requeteActualitesLogo = 'SELECT `id_article`, replace(replace(replace(replace(replace(replace(`id_rubrique`, 22, 20), 54, 21), 30, 23), 19, 24), 51, 25), 70, 22)
|
- |
|
1516 |
// FROM `spip_articles` WHERE id_rubrique in (22,54,70,30,19,51)';
|
- |
|
1517 |
|
- |
|
1518 |
// $actualitesLogo = $bdSpip->query($requeteActualitesLogo)->fetchAll(PDO::FETCH_ASSOC);
|
- |
|
1519 |
|
- |
|
1520 |
// $compteur = 0;
|
- |
|
1521 |
// foreach ($actualitesLogo as $actualiteLogo) {
|
- |
|
1522 |
// $requete = 'INSERT INTO ' . $prefixe_tables_wp . 'term_relationships (`object_id`, `term_taxonomy_id`) '
|
- |
|
1523 |
// . 'VALUES(' . implode(', ', array_map(array($bdWordpress, 'quote'), $actualiteLogo)) . ');';
|
- |
|
1524 |
|
- |
|
1525 |
// try {
|
- |
|
1526 |
// $bdWordpress->exec($requete);
|
- |
|
1527 |
|
- |
|
1528 |
// $compteur++;
|
- |
|
1529 |
// } catch(Exception $e) {
|
- |
|
1530 |
// echo "-- ECHEC " . __FUNCTION__ . " REQUÊTE: [$requete]" . PHP_EOL;
|
- |
|
1531 |
|
- |
|
1532 |
// if (true !== $modeBourrin) {
|
- |
|
1533 |
// restaureLaTable($bdWordpress, $prefixe_tables_wp . 'term_relationships');
|
- |
|
1534 |
|
- |
|
1535 |
// die(var_dump($e->errorInfo));
|
- |
|
1536 |
// }
|
- |
|
1537 |
// }
|
- |
|
1538 |
// }
|
- |
|
1539 |
|
- |
|
1540 |
// echo '-- ' . $compteur . '/' . count($actualitesLogo) . ' logos d\'actualité migrés. ' . PHP_EOL;
|
- |
|
1541 |
// }
|
- |
|
1542 |
|
- |
|
1543 |
function supprimerLesTablesSauvegardees($table = false) {
|
- |
|
1544 |
global $modeBourrin;
|
- |
|
1545 |
global $prefixe_tables_wp;
|
- |
|
1546 |
global $bdWordpress;
|
- |
|
1547 |
|
- |
|
1548 |
if (true === $modeBourrin) {
|
- |
|
1549 |
if (false !== $table) {
|
- |
|
1550 |
$tables = [$table];
|
- |
|
1551 |
} else {
|
- |
|
1552 |
$tables = array(
|
- |
|
1553 |
$prefixe_tables_wp . 'users',
|
- |
|
1554 |
$prefixe_tables_wp . 'usermeta',
|
- |
|
1555 |
$prefixe_tables_wp . 'bp_activity',
|
- |
|
1556 |
$prefixe_tables_wp . 'bp_xprofile_data',
|
- |
|
1557 |
$prefixe_tables_wp . 'posts',
|
- |
|
1558 |
$prefixe_tables_wp . 'postmeta',
|
- |
|
1559 |
$prefixe_tables_wp . 'slug_history',
|
- |
|
1560 |
$prefixe_tables_wp . 'term_relationships',
|
- |
|
1561 |
$prefixe_tables_wp . 'term_taxonomy',
|
- |
|
1562 |
$prefixe_tables_wp . 'comments'
|
- |
|
1563 |
);
|
- |
|
1564 |
}
|
- |
|
1565 |
|
- |
|
1566 |
foreach ($tables as $table) {
|
- |
|
1567 |
$requeteSuppressionTable = 'DROP TABLE IF EXISTS ' . $table . 'SAV;';
|
- |
|
1568 |
try {
|
- |
|
1569 |
$bdWordpress->exec($requeteSuppressionTable);
|
- |
|
1570 |
} catch(Exception $e) {
|
- |
|
1571 |
echo "-- ECHEC " . __FUNCTION__ . " REQUÊTE: [$requeteSuppressionTable]" . PHP_EOL;
|
- |
|
1572 |
throw $e;
|
- |
|
1573 |
}
|
- |
|
1574 |
}
|
- |
|
1575 |
|
- |
|
1576 |
echo '-- tables SAV supprimées' . PHP_EOL;
|
- |
|
1577 |
}
|
- |
|
1578 |
}
|