Version 1 — Mars 2011 — JLuc
A défaut de plugin, voici un script :
<?php
//
// Auteur : Didier, www.ouhpla.net
//
// Licence GPL
//
//
// Transforme les brèves de tout le site en articles,
// les met dans une même rubrique
// et leur attribue optionnellement un même auteur
define ('RUBRIQUE_DES_BREVES', 52);
define ('SECTEUR_DES_BREVES', 52);
define ('AUTEUR_DES_BREVES', 11099);
define ('BREVE_POUR_TEST', 299); // ou 317
function breve2art($id_breve) {
$nouvel_article = array(); // array('colonne'=>'valeur')
if($resultats = sql_select('*', 'spip_breves', 'id_breve='.$id_breve)) {
$res = sql_fetch($resultats);
// Si on a deja fait le process sur la breve, en phase de test par exemple, alors on saute.
if($res['statut'] == 'refuse') {
echo 'Breve deja traitée:'.$id_breve.'<br>';
return ;
}
// Une breve = > date_heure titre texte lien_titre lien_url statut id_rubrique
// Un article => surtitre titre soustitre id_rubrique descriptif chapo texte ps date statut id_secteur
// maj export date_redac visites referers popularite accepter_forum date_modif
// lang langue_choisie id_trad nom_site url_site
$nouvel_article['titre'] = $res['titre'];
$nouvel_article['texte'] = $res['texte'];
$nouvel_article['date'] = $res['date_heure'];
$nouvel_article['date_modif'] = $res['date_heure'];
$nouvel_article['date_redac'] = $res['date_heure'];
$nouvel_article['nom_site'] = $res['lien_titre'];
$nouvel_article['url_site'] = $res['lien_url'];
$nouvel_article['statut'] = $res['statut'];
$nouvel_article['id_rubrique'] = RUBRIQUE_DES_BREVES;
$nouvel_article['id_secteur'] = SECTEUR_DES_BREVES;
// Recherche du titre du secteur de la breve
$secteur = sql_getfetsel('titre', 'spip_rubriques', 'id_rubrique='.$res['id_rubrique']);
$nouvel_article['surtitre'] = $secteur;
// Champs par defaut sur la création d'un article
$nouvel_article['accepter_forum'] = 'pos';
$nouvel_article['lang'] = 'fr';
$nouvel_article['langue_choisie'] = 'oui';
$nouvel_article['id_trad'] = '0';
$nouvel_article['id_version'] = '1';
$nouvel_article['export'] = 'oui';
}
else
echo 'Erreur sur sql_select, avec n°breve:'.$id_breve.sql_error();
$id_article = sql_insertq('spip_articles', $nouvel_article);
echo 'Breve insérée comme article avec id_article='.$id_article.'<br>';
// Relation article <=> auteur
if (defined('AUTEUR_DES_BREVES'))
sql_insertq('spip_auteurs_articles', array('id_auteur' => AUTEUR_DES_BREVES, 'id_article' => $id_article));
// On s'occupe du logo
$path = "/home/passerelleco/www/IMG";
$logobr = $path."/breveon".$id_breve;
$logoart = $path."/arton".$id_article;
$ext = "";
if(file_exists($logobr.".jpg")) $ext = ".jpg";
else if(file_exists($logobr.".png")) $ext = ".png";
else if(file_exists($logobr.".gif")) $ext = ".gif";
else echo 'Impossible de trouver le logo pour la breve :'.$id_breve.'<br>';
if($ext!="") if(!rename($logobr.$ext, $logoart.$ext)) echo "Impossible de renommer:".$logobr.$ext."<br>";
// On s'occupe des mots clés
$mots = sql_select('id_mot', 'spip_mots_breves', 'id_breve='.$id_breve);
while($motscles = sql_fetch($mots)) {
sql_insertq('spip_mots_articles', array('id_mot' => $motscles['id_mot'], 'id_article' => $id_article));
}
// on s'occupe des forums : OK
$forumss = sql_select('id_forum', 'spip_forum', 'id_breve='.$id_breve);
while($forum = sql_fetch($forumss)) {
sql_updateq('spip_forum', array('id_breve' => '', 'id_article' => $id_article), 'id_forum='.$forum['id_forum']);
}
// Suppresion de la breve ?? et son association avec mots cles et forum
// On met le statut à 'refuse'
sql_updateq('spip_breves', array('statut' => 'refuse'), 'id_breve='.$id_breve);
}
if($_GET['lance_boucle'] == 'OK') {
if($les_breves = sql_select('id_breve', 'spip_breves')) {
while($une_breve = sql_fetch($les_breves)) {
breve2art($une_breve['id_breve']);
}
}
else
echo 'Erreur sur sql_select dans boucle sur les breves'.sql_error();
}
else if($_GET['lance_test'] == 'OK') {
breve2art(BREVE_POUR_TEST); // Test sur une breve
}
else echo "Lancer la conversion sur <a href='".$_SERVER['PHP_SELF']."&lance_boucle=OK'>toutes les breves</a> ; <a href='".$_SERVER['PHP_SELF']."&lance_test=OK'>ou TEST sur une seule breve</a>";
?>