Browse Source

Permettre de dupliquer seulement une arborescence (sans ses articles)

On ajoute un pipeline en fin de duplication de rubrique

On refait un peu le code ($rubrique => $id_rubrique, pareil pour les articles)
v1
kent1@arscenic.info 9 years ago
parent
commit
9aec1b76ae
  1. 96
      inc/duplicator.php
  2. 1
      paquet.xml

96
inc/duplicator.php

@ -10,19 +10,14 @@ function trim_value(&$value){$value = trim($value);}
* - Conserve les logos de l'article source
* - Conserve le statut de publication de l'article source
*/
function dupliquer_article($article,$rubrique){
function dupliquer_article($id_article,$rubrique){
include_spip('action/editer_article');
include_spip('inc/modifier_article');
include_spip('inc/modifier');
include_spip('inc/config');
// On lit l'article qui va etre dupliqué
$champs = array('*');
$from = 'spip_articles';
$where = array(
"id_article=".$article
);
$infos = sql_allfetsel($champs, $from, $where);
$infos = sql_fetsel("*", 'spip_articles', "id_article=".intval($id_article));
// On choisi les champs que l'on veut conserver
$champs_dupliques = explode(",", lire_config('duplicator/config/art_champs'));
@ -35,13 +30,13 @@ function dupliquer_article($article,$rubrique){
$champs_dupliques[] = 'composition';
$champs_dupliques[] = 'composition_lock';
}
foreach ($champs_dupliques as $key => $value) {
$infos_de_l_article[$value] = $infos[0][$value];
$infos_de_l_article[$value] = $infos[$value];
}
// On cherche ses mots clefs
$mots_clefs_de_l_article = lire_les_mots_clefs($article,'article');
$mots_clefs_de_l_article = lire_les_mots_clefs($id_article,'article');
//////////////
// ON DUPLIQUE
@ -57,17 +52,16 @@ function dupliquer_article($article,$rubrique){
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);
dupliquer_logo($id_article,$id_article,'article',false);
dupliquer_logo($id_article,$id_article,'article',true);
/////////////////////////////////////
// Duplication des url dans spip_url
/////////////////////////////////////
$where = array(
"id_objet=".$article,
"id_objet=".intval($id_article),
"type='article'",
);
// $infos_url = sql_allfetsel('*', 'spip_urls', $where, );
$infos_url = sql_fetsel('*', 'spip_urls', $where, 'date', 'date DESC');
$infos_url['id_objet'] = $id_article;
@ -86,18 +80,23 @@ function dupliquer_article($article,$rubrique){
* - Conserve le contenu de la rubrique source
* - Conserve les mots clefs de la rubrique source
* - Conserve les articles de la rubrique source
*
* @param int $id_rubrique
* Identifiant numérique de la rubrique à dupliquer
* @param int $cible null
* Identifiant numérique de la rubrique dans laquelle insérer la copie
* @param string $titre ' (copie)'
* Chaîne de texte qui sera ajouté au titre de la rubrique copiée
* @param bool $articles true
* Doit on dupliquer également les articles (true/false)
*/
function dupliquer_rubrique($rubrique,$cible=null,$titre=' (copie)'){
function dupliquer_rubrique($id_rubrique,$cible=null,$titre=' (copie)',$articles = true){
include_spip('action/editer_rubrique');
include_spip('inc/config');
// On lit la rubrique qui va etre dupliquée
$champs = array('*');
$from = 'spip_rubriques';
$where = array(
"id_rubrique=".$rubrique
);
$infos = sql_allfetsel($champs, $from, $where);
$infos = sql_fetsel('*', 'spip_rubriques', "id_rubrique=".intval($id_rubrique));
// On choisi les champs que l'on veut conserver
$champs_dupliques = explode(",", lire_config('duplicator/config/rub_champs'));
array_walk($champs_dupliques, 'trim_value');
@ -112,30 +111,17 @@ function dupliquer_rubrique($rubrique,$cible=null,$titre=' (copie)'){
}
foreach ($champs_dupliques as $key => $value) {
$infos_de_la_rubrique[$value] = $infos[0][$value];
$infos_de_la_rubrique[$value] = $infos[$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);
$mots_clefs_de_la_rubrique = lire_les_mots_clefs($id_rubrique,'rubrique');
// 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);
$rubriques_de_la_rubrique = sql_allfetsel('id_rubrique', 'spip_rubriques', "id_parent=".intval($id_rubrique));
//////////////
// ON DUPLIQUE
@ -149,7 +135,7 @@ function dupliquer_rubrique($rubrique,$cible=null,$titre=' (copie)'){
// Duplication des url dans spip_url
/////////////////////////////////////
$where = array(
"id_objet=".$rubrique,
"id_objet=".intval($id_rubrique),
"type='rubrique'",
);
$infos_url = sql_fetsel('*', 'spip_urls', $where, 'date', 'date DESC');
@ -162,23 +148,27 @@ function dupliquer_rubrique($rubrique,$cible=null,$titre=' (copie)'){
else $infos_url['url'] = $u.'-'.$id_nouvelle_rubrique;
sql_insertq('spip_urls', $infos_url);
// 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);
if($articles){
// On cherche ses articles
$articles_de_la_rubrique = sql_allfetsel('id_article', 'spip_articles', "id_rubrique=".intval($id_rubrique));
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);
dupliquer_logo($id_rubrique,$id_nouvelle_rubrique,'rubrique',false);
dupliquer_logo($id_rubrique,$id_nouvelle_rubrique,'rubrique',true);
pipeline('duplicator',array('objet'=>'rubrique','id_objet_origine' => $id_rubrique,'id_objet'=>$id_nouvelle_rubrique));
// 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,'');
$id_rubrique = $valeur['id_rubrique'];
$nouvelle_sous_rubrique = dupliquer_rubrique($id_rubrique,$id_nouvelle_rubrique,'',$articles);
}
return $id_nouvelle_rubrique;
@ -188,7 +178,7 @@ function lire_les_mots_clefs($id,$type){
$champs = array('id_mot');
$from = 'spip_mots_liens';
$where = array(
"id_objet=".$id,
"id_objet=".intval($id),
"objet=".sql_quote($type)
);
$mots_clefs = sql_allfetsel($champs, $from, $where);
@ -196,14 +186,14 @@ function lire_les_mots_clefs($id,$type){
return $mots_clefs;
}
function remettre_les_mots_clefs($mots,$id,$type){
function remettre_les_mots_clefs($mots = array(),$id,$type){
foreach($mots as $champ => $valeur){
$n = sql_insertq(
'spip_mots_liens',
array(
'id_mot' => $valeur['id_mot'],
'id_objet' => $id,
'objet' => $type
'id_objet' => intval($id),
'objet' => $type
)
);
}
@ -218,8 +208,7 @@ function dupliquer_logo($id_source, $id_destination, $type='article', $bsurvol =
include_spip('action/iconifier');
global $formats_logos;
if ( $bsurvol == true )
{
if ( $bsurvol == true ){
$logo_type = 'off'; // logo survol
} else $logo_type = 'on'; // logo
@ -240,3 +229,4 @@ function dupliquer_logo($id_source, $id_destination, $type='article', $bsurvol =
action_spip_image_ajouter_dist(substr($type,0,3). $logo_type .$id_destination, 'local', $source );
return true;
}

1
paquet.xml

@ -19,6 +19,7 @@
<pipeline nom="boite_infos" inclure="duplicator_pipelines.php" />
<pipeline nom="jqueryui_plugins" inclure="duplicator_pipelines.php" />
<pipeline nom="duplicator" inclure="" />
<!-- <menu nom="configurer_duplicator" titre="duplicator:configuration_duplicator" parent="menu_configuration" icone="theme/img/duplicator.png" /> -->
</paquet>

Loading…
Cancel
Save