Browse Source

Gros nettoyage de chaines de langue et de fichiers qui sont morts.

Cela correspondait au temps où l'on avait pas un mécanisme générique
quelque soit le type d'objet, mais des fonctions spécifiques pour les
articles et les rubriques.
master
Maïeul 7 months ago
parent
commit
47af27b9d9
  1. 53
      action/duplicator.php
  2. 278
      inc/duplicator.php
  3. 40
      lang/duplicator_fr.php
  4. 56
      noisettes/bouton_duplicator.html

53
action/duplicator.php

@ -1,53 +0,0 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
include_spip('inc/charsets'); # pour le nom de fichier
/**
* Dupliquer le contenu d'un objet
*
* @param null $id_objet
* @return void
*/
function action_duplicator_dist($args=null) {
if (is_null($args)){
$securiser_action = charger_fonction('securiser_action', 'inc');
$args = $securiser_action();
}
include_spip('inc/duplicator');
list($objet, $id_objet, $articles) = array_pad(explode(':', $args), 3, null);
if ( ($objet=="rubrique") && ($id=intval($id_objet)) ){
// On duplique la rubrique
spip_log("Duplication de la rubrique : $id.",'duplicator');
$dup_articles = true;
if ($articles) {
$dup_articles = false;
}
$nouvelle_rubrique = dupliquer_rubrique($id,null,' (cible)',$dup_articles);
spip_log("Nouvelle rubrique créée : id_rubrique $nouvelle_rubrique.",'duplicator');
include_spip('inc/headers');
if ($redirect = _request('redirect'))
redirige_par_entete(str_replace('&amp;','&',$redirect));
redirige_par_entete(generer_url_ecrire("rubrique","id_rubrique=".$nouvelle_rubrique, "&"));
}
if ( ($objet=="article") && ($id=intval($id_objet)) ){
// On duplique l article
$rub = sql_getfetsel('id_rubrique', 'spip_articles', 'id_article='. $id);
spip_log("Duplication de l'article : $id dans la rubrique $rub.",'duplicator');
$nouvel_article = dupliquer_article(intval($id),intval($rub));
spip_log("Nouvel article créé dans la rubrique $rub : id_article $nouvel_article.",'duplicator');
include_spip('inc/headers');
if ($redirect = _request('redirect'))
redirige_par_entete(str_replace('&amp;','&',$redirect));
redirige_par_entete(generer_url_ecrire("article","id_article=".$nouvel_article, "&"));
}
}

278
inc/duplicator.php

@ -1,278 +0,0 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function trim_value(&$value){$value = trim($value);}
/**
* 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($id_article,$rubrique){
include_spip('action/editer_article');
include_spip('inc/config');
// On lit l'article qui va etre dupliqué
$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'));
array_walk($champs_dupliques, 'trim_value');
if ($champs_dupliques[0]==''){ $champs_dupliques = array( 'surtitre','titre','soustitre','descriptif','chapo','texte','ps','accepter_forum','lang','langue_choisie','nom_site','url_site' ); }
// Si le plugin composition est présent
if (test_plugin_actif('compositions')) {
$champs_dupliques[] = 'composition';
$champs_dupliques[] = 'composition_lock';
}
foreach ($champs_dupliques as $key => $value) {
$infos_de_l_article[$value] = $infos[$value];
}
// On cherche ses mots clefs
$mots_clefs_de_l_article = lire_les_mots_clefs($id_article,'article');
//////////////
// ON DUPLIQUE
//////////////
//Sauvegarde de l'ancien id_article
$id_article_ori = $id_article;
// 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);
// Suivant la configuration, on lui rend son statut ou on le laisse en brouillon
if (strcmp(lire_config('duplicator/config/duplic_article_etat_pub'),"oui") == 0) {
$c = array('statut' => $infos['statut']);
article_instituer($id_article, $c);
}
// 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($id_article_ori,$id_article,'article',false);
dupliquer_logo($id_article_ori,$id_article,'article',true);
//On verifie qu'on a bien associé les documents
$n = 0;
if($docs = sql_select("*", "spip_documents_liens", "objet = 'article' AND id_objet = ".intval($id_article_ori))){ //Documents liés à l'article d'origine
while ($doc = sql_fetch($docs)) {
$test = sql_select("id_document", "spip_documents_liens", "id_document = ".$doc['id_document']." AND objet = 'article' AND id_objet = ".intval($id_article));//Document lié à l'article dupliqué (ou pas)
$n = sql_count($test);
if($n == 0){
//La liaison a échoué pour une raison inconnue. On la refait.
$id_document = sql_insertq('spip_documents_liens', array('id_document'=> $doc['id_document'], 'id_objet' => $id_article, 'objet' => 'article', 'vu' => $doc['vu']));
}
}
}
/////////////////////////////////////
// Duplication des url dans spip_url
/////////////////////////////////////
$where = array(
"id_objet=".intval($id_article),
"type='article'",
);
$infos_url = sql_fetsel('*', 'spip_urls', $where, 'date', 'date DESC');
if ($infos_url) {
$infos_url['id_objet'] = $id_article;
$url = $infos_url['url'];
//$infos_url['url']
$u = preg_replace('/(.*)(-|,)\d*$/', '$1', $url, -1, $c); // supprimer le numéro à la fin
if ($c == 0) {
$infos_url['url'] = $url.'-'.$id_article; // Ajoute le numéro de l'article
} else {
$infos_url['url'] = $u.'-'.$id_article;
}
sql_insertq('spip_urls', $infos_url);
}
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
*
* @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($id_rubrique,$cible=null,$titre=' (copie)',$articles = true){
include_spip('action/editer_rubrique');
include_spip('inc/config');
// On choisi les champs que l'on veut conserver
$champs_dupliques = explode(",", lire_config('duplicator/config/rub_champs'));
array_walk($champs_dupliques, 'trim_value');
if ($champs_dupliques[0]=="") $champs_dupliques = array('titre','descriptif','texte','lang','langue_choisie');
// Si le plugin composition est présent
if (test_plugin_actif('compositions')) {
$champs_dupliques[] = 'composition';
$champs_dupliques[] = 'composition_lock';
$champs_dupliques[] = 'composition_branche_lock';
}
if(isset($champs_dupliques['id_parent']))
unset($champs_dupliques['id_parent']);
// On lit la rubrique qui va etre dupliquée
$infos_de_la_rubrique = sql_fetsel($champs_dupliques, 'spip_rubriques', "id_rubrique=".intval($id_rubrique));
// Si une cible est spécifiée, on ecrase le champ id_parent
if(!$cible) $cible = 0;
$infos_de_la_rubrique['titre'] .= $titre;
// On cherche ses mots clefs
$mots_clefs_de_la_rubrique = lire_les_mots_clefs($id_rubrique,'rubrique');
// On cherche ses sous-rubriques
$rubriques_de_la_rubrique = sql_allfetsel('id_rubrique', 'spip_rubriques', "id_parent=".intval($id_rubrique));
//////////////
// ON DUPLIQUE
//////////////
$id_nouvelle_rubrique = rubrique_inserer($cible);
rubrique_modifier($id_nouvelle_rubrique,$infos_de_la_rubrique);
//On verifie qu'on a bien associé les documents
$n = 0;
if($docs = sql_select("*", "spip_documents_liens", "objet = 'rubrique' AND id_objet = ".intval($id_rubrique))){ //Documents liés à la rubrique d'origine
while ($doc = sql_fetch($docs)) {
$test = sql_select("id_document", "spip_documents_liens", "id_document = ".$doc['id_document']." AND objet = 'rubrique' AND id_objet = ".intval($id_nouvelle_rubrique));//Document lié à la rubrique dupliquée (ou pas)
$n = sql_count($test);
if($n == 0){
//La liaison a échoué pour une raison inconnue. On la refait.
$id_document = sql_insertq('spip_documents_liens', array('id_document'=> $doc['id_document'], 'id_objet' => $id_nouvelle_rubrique, 'objet' => 'rubrique', 'vu' => $doc['vu']));
}
}
}
/////////////////////////////////////
// Duplication des url dans spip_url
/////////////////////////////////////
$where = array(
"id_objet=".intval($id_rubrique),
"type='rubrique'",
);
$infos_url = sql_fetsel('*', 'spip_urls', $where, 'date', 'date DESC');
$infos_url['id_objet'] = $id_nouvelle_rubrique;
$url = $infos_url['url'];
//$infos_url['url']
$u = preg_replace('/(.*)(-|,)\d*$/', '$1', $url, -1, $c); // supprimer le numéro à la fin
if ($c == 0) $infos_url['url'] = $url.'-'.$id_nouvelle_rubrique; // Ajoute le numéro de l'article
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
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($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){
$id_rubrique = $valeur['id_rubrique'];
$nouvelle_sous_rubrique = dupliquer_rubrique($id_rubrique,$id_nouvelle_rubrique,'',$articles);
}
return $id_nouvelle_rubrique;
}
function lire_les_mots_clefs($id,$type){
$champs = array('id_mot');
$from = 'spip_mots_liens';
$where = array(
"id_objet=".intval($id),
"objet=".sql_quote($type)
);
$mots_clefs = sql_allfetsel($champs, $from, $where);
return $mots_clefs;
}
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' => intval($id),
'objet' => $type
)
);
}
return true;
}
/* FONCTION HONTEUSEMENT ADAPTEE DE DOCUCOPIEUR ==> https://contrib.spip.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 );
if (!$logo_source) {
return false;
}
$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);
include_spip('action/editer_logo');
// Version SPIP 3.1
if (function_exists('logo_modifier')) {
return logo_modifier($type, $id_destination, 'on', $logo_source);
}
action_spip_image_ajouter_dist(substr($type,0,3). $logo_type .$id_destination, 'local', $source );
return true;
}

40
lang/duplicator_fr.php

@ -9,14 +9,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'action_dupliquer_contenu' => 'Dupliquer ce contenu',
'action_dupliquer_contenu_enfants' => 'Dupliquer ce contenu et ses enfants',
'action_dupliquer_contenu_enfants_confirmer' => 'Êtes-vous sûrs de vouloir dupliquer ce contenu et tous ses enfants ?',
// B
'bouton_confirmer' => 'Confirmer',
'bouton_confirmer_rub' => "Tout dupliquer (arborescence+articles)",
'bouton_confirmer_arbo' => "Dupliquer seulement l'arborescence (pas les articles)",
// C
'choix_type' => 'Sélectionner le ou les mode(s) de duplication',
'configurer_autorisation_choix_administrateur' => 'Administrateur',
'configurer_autorisation_choix_redacteur' => 'Rédacteur',
'configurer_autorisation_choix_webmestre' => 'Webmestre uniquement',
@ -33,38 +28,5 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'configurer_statut_label' => 'Statut après duplication',
'configurer_statut_option_intro' => 'Garder le même',
// D
'dupli_art' => "Duplication sur les articles",
'dupli_art_etat_pub' => "Etat des articles publiés&nbsp;:",
'dupli_art_etat_pub_expl' => "Status des articles dupliqués. Par défaut, les nouveaux articles sont \"en cours de rédaction\"",
'dupli_art_etat_pub_label' => "Les articles dupliqués sont publiés en ligne si l'original est publié",
'dupli_rub' => "Duplication sur les rubriques",
// E
'etat_article' => "Choix du status des articles dupliqués",
// I
'icone_dupliquer' => 'Dupliquer la rubrique',
// L
'label_art_champs' => 'Liste des champs à dupliquer pour chaque article :',
'label_rub_champs' => 'Liste des champs à dupliquer pour chaque rubrique :',
// M
'message_annuler' => 'Annuler',
'message_avertissement_article' => 'Êtes-vous sûr de vouloir dupliquer cet article&nbsp;?',
'message_avertissement_rubrique' => 'Êtes-vous sûr de vouloir dupliquer cette rubrique&nbsp;?',
'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.",
'texte_duplicator' => "Appliquer la duplication aux rubriques et/ou articles"
);

56
noisettes/bouton_duplicator.html

@ -1,56 +0,0 @@
<script>
jQuery(function() {
jQuery(document).on('click','.dupliquer a', function(e) {
var lien = jQuery(this).attr('href'),
lien_arbo = jQuery(this).data('lien_ss_articles'),
message = jQuery(this).attr('data-descaction');
jQuery('<div></div>')
.html('<p><span class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 20px 0;"></span>'+message+'</p>')
.dialog({
resizable: false,
modal: true,
buttons: {
[(#OBJET|=={rubrique}|oui)
"<:duplicator:bouton_confirmer_rub:>": function() {
window.location.href = lien;
jQuery(this).dialog( "close" );
},
"<:duplicator:bouton_confirmer_arbo:>": function() {
window.location.href = lien_arbo;
jQuery(this).dialog( "close" );
},
"<:bouton_annuler:>": function() {
jQuery(this).dialog( "close" );
}
]
[(#OBJET|=={article}|oui)
"<:duplicator:bouton_confirmer:>": function() {
window.location.href = lien;
jQuery(this).dialog( "close" );
},
"<:bouton_annuler:>": function() {
jQuery(this).dialog( "close" );
}
]
}
});
e.preventDefault();
});
});
</script>
[(#OBJET|=={rubrique}|oui)
<span class="icone s24 horizontale dupliquer">
<a
href="[(#URL_ACTION_AUTEUR{duplicator,#OBJET:#ID_OBJET})]"
data-lien_ss_articles="[(#URL_ACTION_AUTEUR{duplicator,#OBJET:#ID_OBJET:false})]"
data-descaction="<:duplicator:message_avertissement_rubrique|attribut_html:>">[(#CHEMIN_IMAGE{duplicator-24.png}|balise_img)]<b><:duplicator:action_dupliquer_rubrique:></b>
</a>
</span>
]
[(#OBJET|=={article}|oui)
<span class="icone s24 horizontale dupliquer">
<a href="[(#URL_ACTION_AUTEUR{duplicator,#OBJET:#ID_OBJET})]" data-descaction="<:duplicator:message_avertissement_article|attribut_html:>">[(#CHEMIN_IMAGE{duplicator-24.png}|balise_img)]<b><:duplicator:action_dupliquer_article:></b></a>
</span>]
</span>
Loading…
Cancel
Save