Browse Source
- Petite correction pour SPIP 3, car les liens de rubriques ont changé dans le BO par rapport à la v2 (bien vu Chourak)v0

commit
f5e0da86fd
14 changed files with 450 additions and 0 deletions
@ -0,0 +1,14 @@
|
||||
* text=auto !eol |
||||
/a_faire.txt -text |
||||
action/dupliquer.php -text |
||||
/duplicator_pipeline.php -text |
||||
formulaires/duplicator_article_confirm.html -text |
||||
formulaires/duplicator_article_confirm.php -text |
||||
formulaires/duplicator_confirm.html -text |
||||
formulaires/duplicator_confirm.php -text |
||||
images/apsulis.png -text |
||||
images/duplicator.gif -text |
||||
lang/duplicator_fr.php -text |
||||
/plugin.xml -text |
||||
prive/exec/duplicator.html -text |
||||
prive/exec/duplicator_article.html -text |
@ -0,0 +1,4 @@
|
||||
- Rajouter des logs (spip_log) c’est sûrement plus propre |
||||
- Restreindre aux administrateurs |
||||
- Faire le distingo dupli article/rubrique (ouvrir la possibilité de ne copier QUE un article, dans ce cas changer le titrage dans colonne de gauche) |
||||
- Prendre en charge les traductions qui ne sont pas dans le même dossier (en cas de rubricage racine : langue1/langue2, suivre les liens entre articles pour dupliquer les rubriques "liées"). |
@ -0,0 +1,187 @@
|
||||
<?php |
||||
/***************************************************************************\ |
||||
* Plugin Duplicator pour Spip 2.0 |
||||
* Licence GPL (c) 2010 - Apsulis |
||||
* Duplication de rubriques et d'articles |
||||
* |
||||
\***************************************************************************/ |
||||
|
||||
/** |
||||
* Duplique un article dans la rubrique cible |
||||
* - Conserve le contenu de l'article source |
||||
* - Conserve les logos de l'article source |
||||
* - Conserve le statut de publication de l'article source |
||||
*/ |
||||
function dupliquer_article($article,$rubrique){ |
||||
include_spip('action/editer_article'); |
||||
include_spip('inc/modifier_article'); |
||||
include_spip('inc/modifier'); |
||||
|
||||
// On lit l'article qui va etre dupliqué |
||||
$champs = array('*'); |
||||
$from = 'spip_articles'; |
||||
$where = array( |
||||
"id_article=".$article |
||||
); |
||||
$infos = sql_allfetsel($champs, $from, $where); |
||||
// On choisi les champs que l'on veut conserver |
||||
// TODO éventuellement passer cette variable en CFG pour choisir depuis SPIP les champs à conserver ? |
||||
$champs_dupliques = array( |
||||
'surtitre','titre','soustitre','descriptif','chapo','texte','ps','accepter_forum','lang','langue_choisie','nom_site','url_site' |
||||
); |
||||
foreach ($champs_dupliques as $key => $value) { |
||||
$infos_de_l_article[$value] = $infos[0][$value]; |
||||
} |
||||
|
||||
// On cherche ses mots clefs |
||||
$mots_clefs_de_l_article = lire_les_mots_clefs($article,'article'); |
||||
|
||||
////////////// |
||||
// ON DUPLIQUE |
||||
////////////// |
||||
// On le clone avec les champs choisis ci-dessus, il sera NON publié par défaut |
||||
$id_article = insert_article($rubrique); |
||||
revision_article($id_article, $infos_de_l_article); |
||||
|
||||
// On lui rend son statut |
||||
$maj_statut_article = sql_updateq("spip_articles", array('statut' => $infos[0]['statut']), "id_article=".$id_article); |
||||
|
||||
// On lui remet ses mots clefs |
||||
remettre_les_mots_clefs($mots_clefs_de_l_article,$id_article,'article'); |
||||
|
||||
// On lui copie ses logos |
||||
dupliquer_logo($article,$id_article,'article',false); |
||||
dupliquer_logo($article,$id_article,'article',true); |
||||
|
||||
return $id_article; |
||||
} |
||||
|
||||
/** |
||||
* Duplique une rubrique dans la rubrique qui la contient |
||||
* - Conserve le contenu de la rubrique source |
||||
* - Conserve les mots clefs de la rubrique source |
||||
* - Conserve les articles de la rubrique source |
||||
*/ |
||||
function dupliquer_rubrique($rubrique,$cible=null,$titre=' (copie)'){ |
||||
include_spip('action/editer_rubrique'); |
||||
|
||||
// On lit la rubrique qui va etre dupliqué |
||||
$champs = array('*'); |
||||
$from = 'spip_rubriques'; |
||||
$where = array( |
||||
"id_rubrique=".$rubrique |
||||
); |
||||
$infos = sql_allfetsel($champs, $from, $where); |
||||
// On choisi les champs que l'on veut conserver |
||||
// TODO éventuellement passer cette variable en CFG pour choisir depuis SPIP les champs à conserver ? |
||||
$champs_dupliques = array( |
||||
'id_parent','titre','descriptif','texte','lang','langue_choisie' |
||||
); |
||||
foreach ($champs_dupliques as $key => $value) { |
||||
$infos_de_la_rubrique[$value] = $infos[0][$value]; |
||||
} |
||||
// Si une cible est spécifiée, on ecrase le champ id_parent |
||||
if($cible) $infos_de_la_rubrique['id_parent'] = $cible; |
||||
$infos_de_la_rubrique['titre'] .= $titre; |
||||
|
||||
// On cherche ses mots clefs |
||||
$mots_clefs_de_la_rubrique = lire_les_mots_clefs($rubrique,'rubrique'); |
||||
|
||||
// On cherche ses articles |
||||
$champs = array('id_article'); |
||||
$from = 'spip_articles'; |
||||
$where = array( |
||||
"id_rubrique=".$rubrique |
||||
); |
||||
$articles_de_la_rubrique = sql_allfetsel($champs, $from, $where); |
||||
|
||||
// On cherche ses sous-rubriques |
||||
$champs = array('id_rubrique'); |
||||
$from = 'spip_rubriques'; |
||||
$where = array( |
||||
"id_parent=".$rubrique |
||||
); |
||||
$rubriques_de_la_rubrique = sql_allfetsel($champs, $from, $where); |
||||
|
||||
////////////// |
||||
// ON DUPLIQUE |
||||
////////////// |
||||
$id_nouvelle_rubrique = insert_rubrique($infos_de_la_rubrique['id_parent']); |
||||
revisions_rubriques($id_nouvelle_rubrique,$infos_de_la_rubrique); |
||||
// On la publie (pour activer l'aperçu) |
||||
$maj_statut_rubrique = sql_updateq("spip_rubriques", array('statut' => 'publie'), "id_rubrique=".$id_nouvelle_rubrique); |
||||
|
||||
// On lui remet ses mots clefs |
||||
remettre_les_mots_clefs($mots_clefs_de_la_rubrique,$id_nouvelle_rubrique,'rubrique'); |
||||
|
||||
// On lui remet ses articles |
||||
foreach($articles_de_la_rubrique as $champ => $valeur){ |
||||
$id_article = dupliquer_article($valeur['id_article'],$id_nouvelle_rubrique); |
||||
} |
||||
|
||||
// On lui copie ses logos |
||||
dupliquer_logo($rubrique,$id_nouvelle_rubrique,'rubrique',false); |
||||
dupliquer_logo($rubrique,$id_nouvelle_rubrique,'rubrique',true); |
||||
|
||||
// On lui remet ses sous-rubrique (+ mots clefs + articles + sous rubriques) |
||||
foreach($rubriques_de_la_rubrique as $champ => $valeur){ |
||||
$rubrique = $valeur['id_rubrique']; |
||||
$nouvelle_sous_rubrique = dupliquer_rubrique($rubrique,$id_nouvelle_rubrique,''); |
||||
} |
||||
|
||||
return $id_nouvelle_rubrique; |
||||
} |
||||
|
||||
function lire_les_mots_clefs($id,$type){ |
||||
$champs = array('id_mot'); |
||||
$from = 'spip_mots_'.$type.'s'; |
||||
$where = array( |
||||
"id_$type=".$id |
||||
); |
||||
$mots_clefs = sql_allfetsel($champs, $from, $where); |
||||
|
||||
return $mots_clefs; |
||||
} |
||||
function remettre_les_mots_clefs($mots,$id,$type){ |
||||
foreach($mots as $champ => $valeur){ |
||||
$n = sql_insertq( |
||||
'spip_mots_'.$type.'s', |
||||
array( |
||||
'id_mot' => $valeur['id_mot'], |
||||
'id_'.$type => $id |
||||
) |
||||
); |
||||
} |
||||
|
||||
return true; |
||||
} |
||||
|
||||
/* FONCTION HONTEUSEMENT ADAPTEE DE DOCUCOPIEUR ==> http://www.spip-contrib.net/DocuCopieur */ |
||||
/* cette fonction realise la copie d'un logo d'article/rubrique et de son logo de survol */ |
||||
/* vers le nouvel article/rubrique. */ |
||||
function dupliquer_logo($id_source, $id_destination, $type='article', $bsurvol = false ){ |
||||
include_spip('action/iconifier'); |
||||
global $formats_logos; |
||||
|
||||
if ( $bsurvol == true ) |
||||
{ |
||||
$logo_type = 'off'; // logo survol |
||||
} else $logo_type = 'on'; // logo |
||||
|
||||
$chercher_logo = charger_fonction('chercher_logo', 'inc'); |
||||
|
||||
$logo_source = $chercher_logo($id_source, 'id_'.$type, $logo_type ); |
||||
$logo_source = $logo_source[0]; |
||||
if ( !file_exists($logo_source) ) return false; |
||||
|
||||
$size = @getimagesize($logo_source); |
||||
$mime = !$size ? '': $size['mime']; |
||||
$source['name'] = basename($logo_source); |
||||
$source['type'] = $mime; |
||||
$source['tmp_name'] = $logo_source; |
||||
$source['error'] = 0; |
||||
$source['size'] = @filesize($logo_source); |
||||
|
||||
action_spip_image_ajouter_dist(substr($type,0,3). $logo_type .$id_destination, 'local', $source ); |
||||
return true; |
||||
} |
@ -0,0 +1,21 @@
|
||||
<?php |
||||
|
||||
/***************************************************************************\ |
||||
* Plugin Duplicator pour Spip 2.0 |
||||
* Licence GPL (c) 2010 - Apsulis |
||||
* Duplication de rubriques et d'articles |
||||
* |
||||
\***************************************************************************/ |
||||
|
||||
|
||||
function duplicator_boite_infos($flux){ |
||||
$type = $flux['args']['type']; |
||||
if(autoriser("webmestre")){ |
||||
if (($id = intval($flux['args']['id'])) && ($type=='rubrique')) |
||||
$flux['data'] .= icone_horizontale(_T('duplicator:icone_dupliquer'), generer_url_ecrire('duplicator',"id_objet=$id&type=$type"), "",_DIR_PLUGIN_DUPLICATOR."/images/duplicator.gif", false); |
||||
if (($id = intval($flux['args']['id'])) && ($type=='article')) |
||||
$flux['data'] .= icone_horizontale(_T('duplicator:icone_dupliquer_article'), generer_url_ecrire('duplicator_article',"id_objet=$id&type=$type"), "",_DIR_PLUGIN_DUPLICATOR."/images/duplicator.gif", false); |
||||
} |
||||
return $flux; |
||||
} |
||||
?> |
@ -0,0 +1,24 @@
|
||||
[<div style='color:red; text-align: center;padding:10px; border: 1px solid red; font-weight: bold'> |
||||
<p><strong>(#ENV*{message_ok}|table_valeur{message})</strong></p> |
||||
<p><a href="[(#URL_ECRIRE{articles}|parametre_url{'id_article',[(#ENV*{message_ok}|table_valeur{cible})]})]" title="Rafraichir">[(#ENV*{message_ok}|table_valeur{type_retour})]</a></p> |
||||
<p><small>Utilisiez-vous SPIP Sondages ? <a href="[(#URL_ECRIRE{admin_plugin})]">Pensez à le réactiver !</a></small></p> |
||||
</div>] |
||||
|
||||
[(#EDITABLE) |
||||
<div style='color:red; text-align: center;padding:10px; border: 1px solid red; font-weight: bold'> |
||||
<h2>/!\ ATTENTION /!\</h2> |
||||
[(#PLUGIN{sondages}|oui) |
||||
<p>Cette fonctionnalité n'est pas compatible avec le plugin SPIP Sondages !</p> |
||||
<p><a href="[(#URL_ECRIRE{admin_plugin})]">Vous devez le désactiver</a> le temps de réaliser votre duplication.</p> |
||||
] |
||||
[(#PLUGIN{sondages}|non) |
||||
<p>L'article et ses mots clefs seront dupliqués dans la même rubrique.</p> |
||||
<p>Cette opération ne peut être annulée.</p> |
||||
|
||||
<form action="[(#ENV{action})]" method="post" accept-charset="utf-8"> |
||||
#ACTION_FORMULAIRE{#ENV{action}} |
||||
<input type="submit" value="<:duplicator:message_annuler:>" name='annuler' /> <input type="submit" value="<:duplicator:message_confirmer:>" name='confirmer' /> |
||||
</form> |
||||
] |
||||
</div> |
||||
] |
@ -0,0 +1,56 @@
|
||||
<?php |
||||
/***************************************************************************\ |
||||
* Plugin Duplicator pour Spip 2.0 |
||||
* Licence GPL (c) 2010 - Apsulis |
||||
* Duplication de rubriques et d'articles |
||||
* |
||||
\***************************************************************************/ |
||||
|
||||
function formulaires_duplicator_article_confirm_charger_dist(){ |
||||
$valeurs = array(); |
||||
|
||||
return $valeurs; |
||||
} |
||||
|
||||
function formulaires_duplicator_article_confirm_verifier_dist($article){ |
||||
$erreurs = array(); |
||||
|
||||
if (!$article) |
||||
$erreurs['message_erreur'] = 'Une erreur est survenue.'; |
||||
|
||||
return $erreurs; |
||||
} |
||||
|
||||
function formulaires_duplicator_article_confirm_traiter_dist($article){ |
||||
|
||||
if(_request('confirmer')){ |
||||
include_spip('action/dupliquer'); |
||||
|
||||
// On duplique l article |
||||
$champs = array('id_rubrique'); |
||||
$where = array( |
||||
'id_article='.$article |
||||
); |
||||
$res = sql_select($champs, "spip_articles", $where); |
||||
$r = sql_fetch($res); |
||||
$rubrique = $r['id_rubrique']; |
||||
spip_log("ID RUBRIQUE : $rubrique"); |
||||
spip_log("ID ARTICLE : $article"); |
||||
$nouvel_article = dupliquer_article(intval($article),intval($rubrique)); |
||||
|
||||
$message = array('message_ok'=>array( |
||||
'message'=>_T('duplicator:operation_executee'), |
||||
'cible'=>$nouvel_article, |
||||
'type_retour'=>_T('duplicator:operation_retour_ok_article') |
||||
)); |
||||
} |
||||
if(_request('annuler')){ |
||||
$message = array('message_ok'=>array( |
||||
'message'=>_T('duplicator:operation_annulee'), |
||||
'cible'=>$article, |
||||
'type_retour'=>_T('duplicator:operation_retour_ko_article') |
||||
)); |
||||
} |
||||
|
||||
return $message; |
||||
} |
@ -0,0 +1,24 @@
|
||||
[<div style='color:red; text-align: center;padding:10px; border: 1px solid red; font-weight: bold'> |
||||
<p><strong>(#ENV*{message_ok}|table_valeur{message})</strong></p> |
||||
<p><a href="[(#URL_ECRIRE{naviguer}|parametre_url{'id_rubrique',[(#ENV*{message_ok}|table_valeur{cible})]})]" title="Rafraichir">[(#ENV*{message_ok}|table_valeur{type_retour})]</a></p> |
||||
<p><small>Utilisiez-vous SPIP Sondages ? <a href="[(#URL_ECRIRE{admin_plugin})]">Pensez à le réactiver !</a></small></p> |
||||
</div>] |
||||
|
||||
[(#EDITABLE) |
||||
<div style='color:red; text-align: center;padding:10px; border: 1px solid red; font-weight: bold'> |
||||
<h2>/!\ ATTENTION /!\</h2> |
||||
[(#PLUGIN{sondages}|oui) |
||||
<p>Cette fonctionnalité n'est pas compatible avec le plugin SPIP Sondages !</p> |
||||
<p><a href="[(#URL_ECRIRE{admin_plugin})]">Vous devez le désactiver</a> le temps de réaliser votre duplication.</p> |
||||
] |
||||
[(#PLUGIN{sondages}|non) |
||||
<p>Ses sous-rubriques, articles et mots clefs seront également dupliqués.</p> |
||||
<p>Cette opération ne peut être annulée.</p> |
||||
|
||||
<form action="[(#ENV{action})]" method="post" accept-charset="utf-8"> |
||||
#ACTION_FORMULAIRE{#ENV{action}} |
||||
<input type="submit" value="<:duplicator:message_annuler:>" name='annuler' /> <input type="submit" value="<:duplicator:message_confirmer:>" name='confirmer' /> |
||||
</form> |
||||
] |
||||
</div> |
||||
] |
@ -0,0 +1,47 @@
|
||||
<?php |
||||
/***************************************************************************\ |
||||
* Plugin Duplicator pour Spip 2.0 |
||||
* Licence GPL (c) 2010 - Apsulis |
||||
* Duplication de rubriques et d'articles |
||||
* |
||||
\***************************************************************************/ |
||||
|
||||
function formulaires_duplicator_confirm_charger_dist(){ |
||||
$valeurs = array(); |
||||
|
||||
return $valeurs; |
||||
} |
||||
|
||||
function formulaires_duplicator_confirm_verifier_dist($rubrique){ |
||||
$erreurs = array(); |
||||
|
||||
if (!$rubrique) |
||||
$erreurs['message_erreur'] = 'Une erreur est survenue.'; |
||||
|
||||
return $erreurs; |
||||
} |
||||
|
||||
function formulaires_duplicator_confirm_traiter_dist($rubrique){ |
||||
|
||||
if(_request('confirmer')){ |
||||
include_spip('action/dupliquer'); |
||||
|
||||
// On duplique la rubrique |
||||
$nouvelle_rubrique = dupliquer_rubrique($rubrique); |
||||
|
||||
$message = array('message_ok'=>array( |
||||
'message'=>_T('duplicator:operation_executee'), |
||||
'cible'=>$nouvelle_rubrique, |
||||
'type_retour'=>_T('duplicator:operation_retour_ok') |
||||
)); |
||||
} |
||||
if(_request('annuler')){ |
||||
$message = array('message_ok'=>array( |
||||
'message'=>_T('duplicator:operation_annulee'), |
||||
'cible'=>$rubrique, |
||||
'type_retour'=>_T('duplicator:operation_retour_ko') |
||||
)); |
||||
} |
||||
|
||||
return $message; |
||||
} |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 4.3 KiB |
@ -0,0 +1,26 @@
|
||||
<?php |
||||
/***************************************************************************\ |
||||
* Plugin Duplicator pour Spip 2.0 |
||||
* Licence GPL (c) 2010 - Apsulis |
||||
* Duplication de rubriques et d'articles |
||||
* |
||||
\***************************************************************************/ |
||||
|
||||
// Ceci est un fichier langue de SPIP -- This is a SPIP language file |
||||
|
||||
$GLOBALS[$GLOBALS['idx_lang']] = array( |
||||
'icone_dupliquer' => 'Dupliquer la rubrique', |
||||
|
||||
'message_annuler' => 'Annuler', |
||||
'message_confirmer' => 'Confirmer', |
||||
|
||||
'operation_executee' => "L'opération a bien été exécutée.", |
||||
'operation_annulee' => "L'opération a été annulée.", |
||||
'operation_retour_ok' => "Se rendre dans la rubrique copiée.", |
||||
'operation_retour_ko' => "Retour aux rubriques.", |
||||
|
||||
'icone_dupliquer_article' => "Dupliquer l'article", |
||||
|
||||
'operation_retour_ok_article' => "Se rendre dans l'article dupliqué.", |
||||
'operation_retour_ko_article' => "Retour aux articles." |
||||
); |
@ -0,0 +1,29 @@
|
||||
<plugin> |
||||
<nom>Duplicator</nom> |
||||
<slogan>Dupliquer une rubrique et son contenu</slogan> |
||||
<icon>images/apsulis.png</icon> |
||||
<auteur>[Apsulis->http://demo.apsulis.com]</auteur> |
||||
<licence>GPL © 2010</licence> |
||||
<version>0.2.0</version> |
||||
|
||||
<etat>test</etat> |
||||
<description>Ce plugin permet de dupliquer une rubrique et son contenu depuis l'espace privé en ajoutant un bouton dans la navigation de gauche dans l'espace privé des rubriques. |
||||
|
||||
La duplication reprend : |
||||
-* les logos |
||||
-* les articles (leur contenu, leur statut, leurs mots clefs et logos) |
||||
-* les sous-rubriques (n niveaux), les mots clefs liés, ses articles (contenu + statut + mots clefs) et ses logos |
||||
|
||||
La nouvelle rubrique est créée au même niveau que la rubrique copiée. |
||||
</description> |
||||
<lien>http://www.spip-contrib.net/Plugin-Duplicator</lien> |
||||
<prefix>duplicator</prefix> |
||||
|
||||
<pipeline> |
||||
<nom>boite_infos</nom> |
||||
<inclure>duplicator_pipeline.php</inclure> |
||||
</pipeline> |
||||
|
||||
<categorie>edition</categorie> |
||||
<necessite id="SPIP" version='[2.0.0;2.1.99]' /> |
||||
</plugin> |
@ -0,0 +1,9 @@
|
||||
#SET{tri,#ENV{tri}|sinon{nom}} |
||||
#SET{ordre,#ENV{ordre}|sinon{''}} |
||||
|
||||
<h1 class="grostitre">Dupliquer une rubrique</h1> |
||||
|
||||
|
||||
<h2>Duplication de la rubrique [(#ENV{id_objet})] (<BOUCLE_NomRub(RUBRIQUES){id_rubrique=#ENV{id_objet}}>#TITRE</BOUCLE_NomRub>)</h2> |
||||
|
||||
<div class="ajax">#FORMULAIRE_DUPLICATOR_CONFIRM{#ENV{id_objet}}</div> |
@ -0,0 +1,9 @@
|
||||
#SET{tri,#ENV{tri}|sinon{nom}} |
||||
#SET{ordre,#ENV{ordre}|sinon{''}} |
||||
|
||||
<h1 class="grostitre">Dupliquer un article</h1> |
||||
|
||||
|
||||
<h2>Duplication de l'article [(#ENV{id_objet})] (<BOUCLE_NomArt(ARTICLES){id_article=#ENV{id_objet}}{statut IN prop,prepa,publie,refuse,poubelle}>#TITRE</BOUCLE_NomArt>)</h2> |
||||
|
||||
<div class="ajax">#FORMULAIRE_DUPLICATOR_ARTICLE_CONFIRM{#ENV{id_objet}}</div> |
Loading…
Reference in new issue