Carnet Wiki

Conversion Breves Articles

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>";

?>

Retour à la version courante

Toutes les versions

  • 1 - JLuc, Mars 2011