Valider 2827c6c3 rédigé par RastaPopoulos's avatar RastaPopoulos
Parcourir les fichiers

Après avoir nettoyé les anciennes branches afin que tout reste bien...

Après avoir nettoyé les anciennes branches afin que tout reste bien disponible, voici une nouvelle branche de travail repartant entièrement de zéro afin de ne plus dépendre du web et de ses timeouts. L'idée quand on fait une migration est donc de toujours faire depuis une commande spip-cli. Voici d'abord seulement la structure générale : une commande lance une liste de traitements (importer_auteurs, importer_categories, etc), cette liste peut être complétée par un pipeline, par exemple si vous devez migrer d'autres choses peu courantes, venant d'un plugin WP super précis, qui ne sera pas intégré directement dans les trucs fournis par le plugin (si vous pensez que c'est courant alors rajoutez le au plugin plutôt). Chaque traitement est lancée par une fonction qui va regarder la version WP trouvée et lancer des fonctions précises à la version si elles existent, sinon une générique. Autrement dit si on pense que la manière d'importer telle chose vaut pour la majorité des versions, alors on fait une fonction wp2spip_montraitement(). Mais si c'est propre à une version, on peut faire wp2spip_montraitement_3() ou wp2spip_montraitement_3_9(). Suivant la branche WP X ou X.Y donc. Avec cette structure générale, ça devrait déjà permettre pas mal de souplesse dans le même plugin, en permettant de gérer la migration de plusieurs branches de WP dans la même version du plugin. Maintenant : il faut remplir chacun des traitements !
parent 0ac32f1d
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+10 −14
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<paquet
	prefix="wp2spip"
	categorie="divers"
	version="1.0.0"
	etat="test"
	compatibilite="[3.0.0;3.1.*]"
	logo="prive/themes/spip/images/wp2spip.png"
	documentation="https://contrib.spip.net/Wordpress-2-SPIP"
	version="2.0.0"
	etat="dev"
	compatibilite="[3.2.0;3.2.*]"
	logo="wp2spip.svg"
	documentation=""
>

	<nom>Wordpress2SPIP</nom>
	<nom>Wordpress vers SPIP</nom>
	<!-- Importer un blog Wordpress dans un site SPIP local vide -->

	<auteur lien="http://www.anic.fr">Daniel Anic</auteur>

	<necessite nom="dump_xml" compatibilite="[1.0.1;]" />
	<utilise nom="pages" compatibilite="[0.3.7;[" />
	<utilise nom="polyhier" compatibilite="[1.0.0;[" />
	<auteur lien="https://www.mukt.fr">Mukt</auteur>

	<menu nom="wp2spip" titre="wp2spip:titre_page_migration" parent="menu_configuration" icone="images/wp2spip-16.png" />
	<menu nom="wp2spip_fin" titre="wp2spip:titre_post_import" parent="menu_configuration" icone="images/wp2spip-16.png" />
	<necessite nom="sale" compatibilite="[0.1.5;]" />
	<necessite nom="pages" compatibilite="[1.5.3;[" />
	<necessite nom="polyhier" compatibilite="[3.6.14;[" />
</paquet>
+90 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<?php

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;

class WordpressImporter extends Command {
	public $input = null;
	public $output = null;
	public $wp_version = '';
	
	protected function configure() {
		$this
			->setName('wordpress:importer')
			->setDescription('Importe un site Wordpress dans un site SPIP')
			->setHelp('spip wordpress:importer ../site_wordpress')
			->addArgument(
				'dir_wordpress',
				InputArgument::REQUIRED,
				'Chemin vers le dossier d’installation du Wordpress'
			)
		;
	}

	protected function execute(InputInterface $input, OutputInterface $output) {
		global $spip_racine;
		global $spip_loaded;
		
		// Facilité
		$this->input = $input;
		$this->output = $output;
		
		// Si on est bien dans un dossier SPIP
		if ($spip_loaded) {
			$dir_wordpress = rtrim($input->getArgument('dir_wordpress'), '/') . '/';
			
			// On va chercher la version de Wordpress dont il s'agit
			include_once $dir_wordpress . 'wp-includes/version.php';
			$this->wp_version = $wp_version;
			
			$traitements = array(
				'importer_auteurs',
				'importer_categories',
				'importer_tags',
				'importer_documents',
				'importer_articles',
			);
			$traitements = pipeline('w2spip_traitements', $traitements);
			
			foreach ($traitements as $traitement) {
				$this->appliquer_traitement($traitement);
			}
		}
		else{
			$output->writeln('<error>Vous devez lancer la commande depuis un site SPIP pour importer le contenu Wordpress.</error>');
		}
	}
	
	protected function appliquer_traitement($traitement) {
		$decoupe_version = explode('.', $this->wp_version);
		$version_X = $decoupe_version[0];
		$version_Y = $decoupe_version[1];
		
		$fonction = '';
		// S'il existe une fonction wp2spip_$fonction_X_Y
		if ($f = charger_fonction("{$version_X}_{$version_Y}", "wp2spip/$traitement", true)) {
			$fonction = $f;
		}
		// S'il existe une fonction wp2spip_$fonction_X
		elseif ($f = charger_fonction("$version_X", "wp2spip/$traitement", true)) {
			$fonction = $f;
		}
		// Sinon une fonction générique wp2spip_$fonction qui vaudrait pour toutes les versions
		elseif ($f = charger_fonction("$traitement", "wp2spip", true)) {
			$fonction = $f;
		}
		// Sinon rien, on peut pas faire cette opération
		else {
			$this->output->writeln("<error>Aucune fonction implémentée pour le traitement « $traitement ».</error>");
		}
		
		// On lance le traitement trouvé
		if ($fonction) {
			$this->output->writeln("<info>Lancement du traitement « $traitement »…</info>");
			$fonction($this);
		}
	}
}

wp2spip.svg

0 → 100644
+6 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" xml:space="preserve" height="500" width="500" version="1.0" viewBox="0 0 5.5555557 5.5555555">
	<g transform="matrix(1.0755 0 0 1.0755 -3.5103 -1.6684)">
		<path fill="#464342" d="m5.8465 1.9131c0.57932 0 1.1068 0.222 1.5022 0.58547-0.1938-0.0052-0.3872 0.11-0.3952 0.3738-0.0163 0.5333 0.6377 0.6469 0.2853 1.7196l-0.2915 0.8873-0.7939-2.3386c-0.0123-0.0362 0.002-0.0568 0.0465-0.0568h0.22445c0.011665 0 0.021201-0.00996 0.021201-0.022158v-0.13294c0-0.012193-0.00956-0.022657-0.021201-0.022153-0.42505 0.018587-0.8476 0.018713-1.2676 0-0.0117-0.0005-0.0212 0.01-0.0212 0.0222v0.13294c0 0.012185 0.00954 0.022158 0.021201 0.022158h0.22568c0.050201 0 0.064256 0.016728 0.076091 0.049087l0.3262 0.8921-0.4907 1.4817-0.8066-2.3758c-0.01-0.0298 0.0021-0.0471 0.0308-0.0471h0.25715c0.011661 0 0.021197-0.00996 0.021197-0.022158v-0.13294c0-0.012193-0.00957-0.022764-0.021197-0.022153-0.2698 0.014331-0.54063 0.017213-0.79291 0.019803 0.39589-0.60984 1.0828-1.0134 1.8639-1.0134l-0.0000029-0.0000062zm1.9532 1.1633c0.17065 0.31441 0.26755 0.67464 0.26755 1.0574 0 0.84005-0.46675 1.5712-1.1549 1.9486l0.6926-1.9617c0.1073-0.3036 0.2069-0.7139 0.1947-1.0443h-0.000004zm-1.2097 3.1504c-0.2325 0.0827-0.4827 0.1278-0.7435 0.1278-0.2247 0-0.4415-0.0335-0.6459-0.0955l0.68415-1.9606 0.70524 1.9284v-1e-7zm-1.6938-0.0854c-0.75101-0.35617-1.2705-1.1213-1.2705-2.0075 0-0.32852 0.071465-0.64038 0.19955-0.92096l1.071 2.9285 0.000003-0.000003zm0.95023-4.4367c1.3413 0 2.4291 1.0878 2.4291 2.4291s-1.0878 2.4291-2.4291 2.4291-2.4291-1.0878-2.4291-2.4291 1.0878-2.4291 2.4291-2.4291zm0-0.15354c1.4261 0 2.5827 1.1566 2.5827 2.5827s-1.1566 2.5827-2.5827 2.5827-2.5827-1.1566-2.5827-2.5827 1.1566-2.5827 2.5827-2.5827z"/>
	</g>
</svg>
 No newline at end of file
+9 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<?php

if (!defined('_ECRIRE_INC_VERSION')) {
	return;
}

function wp2spip_importer_auteurs_dist($command) {
	$command->output->writeln('<error>test</error>');
}