Browse Source

retour ligne

master
Maïeul 9 months ago
parent
commit
176ac4df09
  1. 72
      action/dupliquer_objet.php
  2. 4
      duplicator_autoriser.php
  3. 4
      duplicator_pipelines.php
  4. 26
      formulaires/configurer_duplicator.php
  5. 54
      inc/duplicator.php

72
action/dupliquer_objet.php

@ -28,7 +28,7 @@ function action_dupliquer_objet_dist($objet = null, $id_objet = null) {
$arg = $securiser_action();
list($objet, $id_objet, $enfants) = array_pad(explode("/", $arg), 3, null);
}
if ($objet and $id_objet) {
include_spip('inc/config');
include_spip('base/objets');
@ -36,34 +36,34 @@ function action_dupliquer_objet_dist($objet = null, $id_objet = null) {
$objet = objet_type($objet); // assurance
$modifications = array();
$options = array();
// S'il y a des champs précis à dupliquer pour cet objet, on rajoute aux options
if (isset($config[$objet]['champs']) and $champs = $config[$objet]['champs']) {
$options['champs'] = $champs;
}
// S'il y a un statut forcé pour cet objet
if (isset($config[$objet]['statut']) and $statut = $config[$objet]['statut']) {
$modifications['statut'] = $statut;
}
// Si on demande à dupliquer aussi les enfants
if ($enfants) {
$options['dupliquer_enfants'] = true;
// On cherche si seulement certains enfants sont acceptés à dupliquer pour cet objet
if (isset($config[$objet]['enfants']) and $enfants = $config[$objet]['enfants']) {
$options['enfants'] = array_map('objet_type', $config[$objet]['enfants']);
}
// Dans ce cas on passe aussi le tableau de toutes les options, avec "champs" et "enfants" qui seront pris en compte
$options['options_objets'] = $config;
}
// Si on a réussi à dupliquer
if ($id_objet_duplicata = intval(objet_dupliquer($objet, $id_objet, $modifications, $options))) {
include_spip('inc/headers');
// S'il y avait une demande de redirection
if ($redirect = _request('redirect')) {
redirige_par_entete(
@ -82,12 +82,12 @@ function action_dupliquer_objet_dist($objet = null, $id_objet = null) {
/**
* Duplique un objet, ses liaisons et ses enfants
*
*
* @param $objet
* Type de l'objet à dupliquer
* @param $id_objet
* @param $id_objet
* Identifiant de l'objet à dupliquer
* @param $modifications
* @param $modifications
* Tableau de champ=>valeur avec les modifications à apporter sur le contenu dupliqué
* @param $options
* Tableau d'options :
@ -110,11 +110,11 @@ function objet_dupliquer($objet, $id_objet, $modifications=array(), $options=arr
$id_objet_duplicata = false;
$cle_objet = id_table_objet($objet);
$id_objet = intval($id_objet);
// On cherche la liste des champs à dupliquer, par défaut tout
if (isset($options['champs']) and is_array($options['champs'])) {
$champs = $options['champs'];
// On s'assure qu'il y a toujours le statut quand même
if (
$declaration_statut = objet_info($objet, 'statut')
@ -127,26 +127,26 @@ function objet_dupliquer($objet, $id_objet, $modifications=array(), $options=arr
else {
$champs = '*';
}
// On récupère les infos à dupliquer
$infos_a_dupliquer = sql_fetsel($champs, table_objet_sql($objet), "$cle_objet = $id_objet");
// On retire la clé primaire
unset($infos_a_dupliquer[$cle_objet]);
// Si on a demandé à ajouter une chaine après le titre
// TODO : on n'a toujours rien pour trouver uniquement le champ de titre SEUL
if (isset($options['ajout_titre']) and isset($infos_a_dupliquer['titre'])) {
$infos_a_dupliquer['titre'] .= $options['ajout_titre'];
}
// On applique des modifications s'il y en a
if ($modifications and is_array($modifications)) {
$infos_a_dupliquer = array_merge($infos_a_dupliquer, $modifications);
}
// On commence la duplication de l'objet lui-même
$id_objet_duplicata = objet_inserer($objet, 0, $infos_a_dupliquer);
// Si on a bien notre nouvel objet
if ($id_objet_duplicata = intval($id_objet_duplicata)) {
// Si on duplique bien les liens
@ -159,10 +159,10 @@ function objet_dupliquer($objet, $id_objet, $modifications=array(), $options=arr
if (isset($options['liens_exclus']) and is_array($options['liens_exclus'])) {
$liens_exclus = $options['liens_exclus'];
}
// On duplique les liens
objet_dupliquer_liens($objet, $id_objet, $id_objet_duplicata, $liens, $liens_exclus);
// Cas particulier de ces satanées rubriques poly qui ne suivent pas l'API des liens !
if (test_plugin_actif('polyhier')) {
include_spip('inc/polyhier');
@ -170,18 +170,18 @@ function objet_dupliquer($objet, $id_objet, $modifications=array(), $options=arr
polyhier_set_parents($id_objet_duplicata, $objet, $id_parents);
}
}
// On duplique les logos
logo_dupliquer($objet, $id_objet, $id_objet_duplicata, 'on');
logo_dupliquer($objet, $id_objet, $id_objet_duplicata, 'off');
// On continue de lancer l'ancien pipeline
pipeline('duplicator', array(
'objet' => $objet,
'id_objet_origine' => $id_objet,
'id_objet' => $id_objet_duplicata,
));
// On duplique peut-être aussi tous les enfants
if (
isset($options['dupliquer_enfants'])
@ -206,16 +206,16 @@ function objet_dupliquer($objet, $id_objet, $modifications=array(), $options=arr
foreach ($ids as $id_enfant) {
$modifications_enfant = array();
$options_enfant = $options;
// On enlève des options qui n'ont pas à venir du parent de départ
unset($options_enfant['champs']);
unset($options_enfant['ajout_titre']);
// S'il existe des options d'objets, on utilise
if (isset($options['options_objets'][$objet_enfant])) {
$options_enfant = array_merge($options_enfant, $options['options_objets'][$objet_enfant]);
}
// Les modifications nécessaires pour mettre le bon parent suivant la méthode
if (isset($enfants_methodes[$objet_enfant]['champ'])) {
$modifications_enfant[$enfants_methodes[$objet_enfant]['champ']] = $id_objet_duplicata;
@ -223,30 +223,30 @@ function objet_dupliquer($objet, $id_objet, $modifications=array(), $options=arr
if (isset($enfants_methodes[$objet_enfant]['champ_type'])) {
$modifications_enfant[$enfants_methodes[$objet_enfant]['champ_type']] = $objet;
}
$id_enfant_duplicata = objet_dupliquer($objet_enfant, $id_enfant, $modifications_enfant, $options_enfant);
}
}
}
}
}
return $id_objet_duplicata;
}
if (!function_exists('logo_dupliquer')) {
/**
* Dupliquer un logo entre deux contenus
*
*
* Cette fonction est destinée à être remplacé par une plus moderne dans le plugin Rôles de documents, qui gère alors aussi les logos en documents.
*
* @param $objet
*
* @param $objet
* Type de l'objet dont on veut dupliquer le logo
* @param $id_source
* @param $id_source
* Identifiant de l'objet dont on veut dupliquer le logo
* @param $id_cible
* @param $id_cible
* Identifiant de l'objet sur lequel mettre le logo dupliqué
* @param $etat
* @param $etat
* État du logo (on ou off)
* @return
* Retourne le chemin du nouveau logo si tout s'est déroulé correctement
@ -255,12 +255,12 @@ function logo_dupliquer($objet, $id_source, $id_cible, $etat='on') {
include_spip('action/editer_logo');
$chercher_logo = charger_fonction('chercher_logo', 'inc');
$cle_objet = id_table_objet($objet);
// Si on trouve le logo pour la source
if ($logo_source = $chercher_logo($id_source, $cle_objet, $etat)) {
return logo_modifier($objet, $id_cible, $etat, $logo_source[0]);
}
return false;
}
}

4
duplicator_autoriser.php

@ -8,7 +8,7 @@ function duplicator_autoriser(){}
function autoriser_dupliquer_dist($faire, $quoi='', $id=0, $qui=null, $options=null) {
include_spip('inc/config');
// S'il y a une autorisation explicite dans la configuration, on l'utilise
if ($autorisation = lire_config("duplicator/$quoi/autorisation")) {
if ($autorisation == 'webmestre') {
@ -35,6 +35,6 @@ function autoriser_dupliquer_dist($faire, $quoi='', $id=0, $qui=null, $options=n
return autoriser('creer', $quoi);
}
}
return false;
}

4
duplicator_pipelines.php

@ -11,7 +11,7 @@ function duplicator_boite_infos($flux){
$objet = $flux['args']['type'];
$id_objet = intval($flux['args']['id']);
$table = table_objet_sql($objet);
// Si on a accepté de dupliquer cet objet et que la personne en cours a bien le droit
if (
$objets = lire_config('duplicator/objets')
@ -38,6 +38,6 @@ function duplicator_boite_infos($flux){
);
}
}
return $flux;
}

26
formulaires/configurer_duplicator.php

@ -13,7 +13,7 @@ function formulaires_configurer_duplicator_saisies_dist() {
$textes_objets = array_map('_T', $textes_objets);
array_multisort($textes_objets, SORT_ASC, $declaration_objets);
$config = lire_config('duplicator');
$saisies = array(
array(
'saisie' => 'choisir_objets',
@ -25,7 +25,7 @@ function formulaires_configurer_duplicator_saisies_dist() {
),
),
);
// Pour chaque objet déjà choisi, on ajoute des options
if (isset($config['objets'])) {
// Une explication de pourquoi l'ensemble des objets
@ -36,11 +36,11 @@ function formulaires_configurer_duplicator_saisies_dist() {
'texte' => _T('duplicator:configurer_explication_objets_texte'),
),
);
// On boucle sur tous les objets possibles
foreach ($declaration_objets as $table_objet_sql=>$declaration_objet) {
$objet = objet_type($table_objet_sql);
$groupe_objet = array(
'saisie' => 'fieldset',
'options' => array(
@ -51,14 +51,14 @@ function formulaires_configurer_duplicator_saisies_dist() {
),
'saisies' => array(),
);
// Si l'objet a des champs
if (isset($declaration_objet['field']) and $champs = $declaration_objet['field']) {
// On cherche et vire le champ statut, car il y a une config pour ça ensuite
if (isset($declaration_objet['statut'][0]['champ']) and $champ_statut = $declaration_objet['statut'][0]['champ']) {
unset($champs[$champ_statut]);
}
foreach ($champs as $champ=>$sql) {
$champs[$champ] = $champ;
}
@ -81,7 +81,7 @@ function formulaires_configurer_duplicator_saisies_dist() {
),
);
}
// S'il y a des statuts
if (isset($declaration_objet['statut_textes_instituer']) and $statuts = $declaration_objet['statut_textes_instituer']) {
foreach ($statuts as $statut=>$lang) {
@ -98,7 +98,7 @@ function formulaires_configurer_duplicator_saisies_dist() {
),
);
}
// Les autorisations
$groupe_objet['saisies'][] = array(
'saisie' => 'selection',
@ -114,7 +114,7 @@ function formulaires_configurer_duplicator_saisies_dist() {
'defaut' => isset($config[$objet]['autorisation']) ? $config[$objet]['autorisation'] : '',
),
);
// Les enfants à dupliquer
if ($enfants_possibles = type_objet_info_enfants($objet)) {
$enfants_possibles = array_map('table_objet_sql', array_keys($enfants_possibles));
@ -139,12 +139,12 @@ function formulaires_configurer_duplicator_saisies_dist() {
),
);
}
$saisies[] = $groupe_objet;
}
}
return $saisies;
}
@ -173,6 +173,6 @@ function formulaires_configurer_duplicator_verifier_dist() {
// On remet dans la course
set_request($objet, $config_objet);
}
return array();
}

54
inc/duplicator.php

@ -15,16 +15,16 @@ function trim_value(&$value){$value = trim($value);}
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';
@ -46,7 +46,7 @@ function dupliquer_article($id_article,$rubrique){
// 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']);
@ -55,11 +55,11 @@ function dupliquer_article($id_article,$rubrique){
// 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
@ -71,12 +71,12 @@ function dupliquer_article($id_article,$rubrique){
$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(
$where = array(
"id_objet=".intval($id_article),
"type='article'",
);
@ -103,7 +103,7 @@ function dupliquer_article($id_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
@ -116,23 +116,23 @@ function dupliquer_article($id_article,$rubrique){
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));
@ -140,10 +140,10 @@ function dupliquer_rubrique($id_rubrique,$cible=null,$titre=' (copie)',$articles
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));
@ -153,7 +153,7 @@ function dupliquer_rubrique($id_rubrique,$cible=null,$titre=' (copie)',$articles
$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
@ -165,16 +165,16 @@ function dupliquer_rubrique($id_rubrique,$cible=null,$titre=' (copie)',$articles
$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(
$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']
@ -182,7 +182,7 @@ function dupliquer_rubrique($id_rubrique,$cible=null,$titre=' (copie)',$articles
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');
@ -205,19 +205,19 @@ function dupliquer_rubrique($id_rubrique,$cible=null,$titre=' (copie)',$articles
$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(
$where = array(
"id_objet=".intval($id),
"objet=".sql_quote($type)
);
$mots_clefs = sql_allfetsel($champs, $from, $where);
return $mots_clefs;
}
@ -232,7 +232,7 @@ function remettre_les_mots_clefs($mots = array(),$id,$type){
)
);
}
return true;
}
@ -245,7 +245,7 @@ function dupliquer_logo($id_source, $id_destination, $type='article', $bsurvol =
if ( $bsurvol == true ){
$logo_type = 'off'; // logo survol
} else $logo_type = 'on'; // logo
} else $logo_type = 'on'; // logo
$chercher_logo = charger_fonction('chercher_logo', 'inc');

Loading…
Cancel
Save