Browse Source

Enfin la config des enfants en cascade qui est gérée, et donc quand on duplique avec les enfants, ça prend en compte ce qu'on a décidé pour chaque objet. Ça marche MAIS, en fait, je m'aperçois qu'à l'utilisation ce n'est pas super, et qu'il faudrait arrêter d'utiliser des boutons uniques. Le mieux serait plutôt d'avoir un unique formulaire, pas dans la boite info mais plus bas dans son bloc dédié, et dedans on y cocherait des options directement pour CETTE duplication qu'on s'apprête à lancer. Et du coup ça enlèverait des configs que j'ai rajouté, puisqu'on déciderait de certaines choses lors du lancement. Mais en attendant ça marche !

svn/root/tags/v2.0.8
rastapopoulos@spip.org 5 years ago
parent
commit
8e1aefdcfc
  1. 40
      action/dupliquer_objet.php
  2. 8
      duplicator_administrations.php
  3. 22
      duplicator_pipelines.php
  4. 47
      formulaires/configurer_duplicator.php
  5. 2
      lang/duplicator_fr.php
  6. 1
      paquet.xml

40
action/dupliquer_objet.php

@ -32,23 +32,32 @@ function action_dupliquer_objet_dist($objet = null, $id_objet = null) {
if ($objet and $id_objet) {
include_spip('inc/config');
include_spip('base/objets');
$table_objet = table_objet($objet);
$config = lire_config('duplicator', array());
$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 ($champs = lire_config("duplicator/$table_objet/champs", array())) {
if (isset($config[$objet]['champs']) and $champs = $config[$objet]['champs']) {
$options['champs'] = $champs;
}
// S'il y a un statut forcé
if ($statut = lire_config("duplicator/$table_objet/statut", null)) {
// 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
@ -85,9 +94,13 @@ function action_dupliquer_objet_dist($objet = null, $id_objet = null) {
* - champs : liste des champs à dupliquer, sinon * par défaut
* - ajout_titre : ajouter une chaine à la fin du titre
* - dupliquer_liens : booléen précisant si on duplique les liens ou pas, par défaut oui
* - dupliquer_enfants : booléen précisant si on duplique les enfants ou pas, par défaut non
* - liens : liste d'objets liables dont on veut dupliquer les liens
* - liens_exclus : liste d'objets liables dont on ne veut pas dupliquer les liens
* - dupliquer_enfants : booléen précisant si on duplique les enfants ou pas, par défaut non
* - enfants : liste d'objets d'enfants acceptés pour la duplication en cascade
* - options_objets : tableau indexé par objet, avec pour chacun un tableau des options précédentes
* Cela permet de passer en cascade aux enfants certaines options qui ne sont pas forcément les mêmes que dans l'appel de départ
* 'article' => array('champs'=>array(…), 'enfants'=>array(…))
* @return int
* Retourne l'identifiant du duplicata
*/
@ -168,8 +181,18 @@ function objet_dupliquer($objet, $id_objet, $modifications=array(), $options=arr
and include_spip('base/objets_parents')
and $enfants_methodes = type_objet_info_enfants($objet)
and $enfants = objet_trouver_enfants($objet, $id_objet)
// S'il n'y a pas de config d'enfants alors tous, sinon seulement les enfants autorisés
and (
!isset($options['enfants'])
or $options['enfants'] == 'tous'
or (
$enfants_autorises = ($options['enfants'] ? $options['enfants'] : array())
and $enfants_autorises = array_flip(array_map('objet_type', $enfants_autorises))
and $enfants = array_intersect_key($enfants, $enfants_autorises)
)
)
) {
// On parcourt tous les types d'enfants
// On parcourt tous les types d'enfants autorisés
foreach ($enfants as $objet_enfant => $ids) {
if (is_array($ids)) {
foreach ($ids as $id_enfant) {
@ -180,6 +203,11 @@ function objet_dupliquer($objet, $id_objet, $modifications=array(), $options=arr
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;

8
duplicator_administrations.php

@ -62,22 +62,22 @@ function duplicator_maj_1_0_0() {
if (isset($config['rub_champs']) and $champs = $config['rub_champs']) {
$champs = explode(',', $champs);
$champs = array_map('trim', $champs);
$nouvelle_config['rubriques']['champs'] = $champs;
$nouvelle_config['rubrique']['champs'] = $champs;
}
if (isset($config['art_champs']) and $champs = $config['art_champs']) {
$champs = explode(',', $champs);
$champs = array_map('trim', $champs);
$nouvelle_config['articles']['champs'] = $champs;
$nouvelle_config['article']['champs'] = $champs;
}
// Config des autorisations : non on prend par défaut plutôt, qui n'existait pas avant, donc ça on ne le migre pas
// Config du statut
if (isset($config['duplic_article_etat_pub']) and $config['duplic_article_etat_pub'] == 'oui') {
$nouvelle_config['articles']['statut'] = '';
$nouvelle_config['article']['statut'] = '';
}
else {
$nouvelle_config['articles']['statut'] = 'prepa';
$nouvelle_config['article']['statut'] = 'prepa';
}
// Et on enregistre

22
duplicator_pipelines.php

@ -46,27 +46,5 @@ function duplicator_boite_infos($flux){
}
}
//~ if(autoriser("dupliquer", "rubrique")){
//~ if (($id = intval($flux['args']['id'])) && ($type=='rubrique')){
//~ $contexte = array('id_objet'=>$id,'objet'=>$type);
//~ $flux["data"] .= recuperer_fond("noisettes/bouton_duplicator", $contexte);
//~ }
//~ }
//~ if(autoriser("dupliquer", "article")){
//~ if (($id = intval($flux['args']['id'])) && ($type=='article')){
//~ $contexte = array('id_objet'=>$id,'objet'=>$type);
//~ $flux["data"] .= recuperer_fond("noisettes/bouton_duplicator", $contexte);
//~ }
//~ }
return $flux;
}
function duplicator_jqueryui_plugins($plugins){
if (test_espace_prive()){
$plugins[] = "jquery.ui.dialog";
}
return $plugins;
}

47
formulaires/configurer_duplicator.php

@ -39,13 +39,12 @@ function formulaires_configurer_duplicator_saisies_dist() {
// On boucle sur tous les objets possibles
foreach ($declaration_objets as $table_objet_sql=>$declaration_objet) {
$table_objet = table_objet($table_objet_sql);
$objet = objet_type($table_objet);
$objet = objet_type($table_objet_sql);
$groupe_objet = array(
'saisie' => 'fieldset',
'options' => array(
'nom' => "groupe_$table_objet",
'nom' => "groupe_$objet",
'label' => _T($declaration_objet['texte_objets']),
'pliable' => 'oui',
'plie' => 'oui',
@ -66,19 +65,19 @@ function formulaires_configurer_duplicator_saisies_dist() {
$groupe_objet['saisies'][] = array(
'saisie' => 'case',
'options' => array(
'nom' => "${table_objet}[personnaliser_champs]",
'nom' => "${objet}[personnaliser_champs]",
'label_case' => _T('duplicator:configurer_personnaliser_champs_label'),
'valeur_forcee' => (isset($config[$table_objet]['champs']) and $config[$table_objet]['champs']) ? 'on' : '',
'valeur_forcee' => (isset($config[$objet]['champs']) and $config[$objet]['champs']) ? 'on' : '',
),
);
$groupe_objet['saisies'][] = array(
'saisie' => 'checkbox',
'options' => array(
'nom' => "${table_objet}[champs]",
'nom' => "${objet}[champs]",
'label' => _T('duplicator:configurer_champs_label'),
'data' => $champs,
'defaut' => isset($config[$table_objet]['champs']) ? $config[$table_objet]['champs'] : array(),
'afficher_si' => "@${table_objet}[personnaliser_champs]@ == 'on'",
'defaut' => isset($config[$objet]['champs']) ? $config[$objet]['champs'] : array(),
'afficher_si' => "@${objet}[personnaliser_champs]@ == 'on'",
),
);
}
@ -91,11 +90,11 @@ function formulaires_configurer_duplicator_saisies_dist() {
$groupe_objet['saisies'][] = array(
'saisie' => 'selection',
'options' => array(
'nom' => "${table_objet}[statut]",
'nom' => "${objet}[statut]",
'label' => _T('duplicator:configurer_statut_label'),
'option_intro' => _T('duplicator:configurer_statut_option_intro'),
'data' => $statuts,
'defaut' => isset($config[$table_objet]['statut']) ? $config[$table_objet]['statut'] : '',
'defaut' => isset($config[$objet]['statut']) ? $config[$objet]['statut'] : '',
),
);
}
@ -104,7 +103,7 @@ function formulaires_configurer_duplicator_saisies_dist() {
$groupe_objet['saisies'][] = array(
'saisie' => 'selection',
'options' => array(
'nom' => "${table_objet}[autorisation]",
'nom' => "${objet}[autorisation]",
'label' => _T('duplicator:configurer_autorisation_label'),
'option_intro' => _T('duplicator:configurer_autorisation_option_intro'),
'data' => array(
@ -112,7 +111,7 @@ function formulaires_configurer_duplicator_saisies_dist() {
'administrateur' => _T('duplicator:configurer_autorisation_choix_administrateur'),
'redacteur' => _T('duplicator:configurer_autorisation_choix_redacteur'),
),
'defaut' => isset($config[$table_objet]['autorisation']) ? $config[$table_objet]['autorisation'] : '',
'defaut' => isset($config[$objet]['autorisation']) ? $config[$objet]['autorisation'] : '',
),
);
@ -124,19 +123,19 @@ function formulaires_configurer_duplicator_saisies_dist() {
$groupe_objet['saisies'][] = array(
'saisie' => 'case',
'options' => array(
'nom' => "${table_objet}[personnaliser_enfants]",
'nom' => "${objet}[personnaliser_enfants]",
'label_case' => _T('duplicator:configurer_personnaliser_enfants_label'),
'valeur_forcee' => (isset($config[$table_objet]['objets_enfants']) and $config[$table_objet]['objets_enfants']) ? 'on' : '',
'defaut' => isset($config[$objet]['personnaliser_enfants']) ? $config[$objet]['personnaliser_enfants'] : '',
),
);
$groupe_objet['saisies'][] = array(
'saisie' => 'choisir_objets',
'options' => array(
'nom' => "${table_objet}[objets_enfants]",
'nom' => "${objet}[enfants]",
'exclus' => $enfants_exclus,
'label' => _T('duplicator:configurer_objets_enfants_label'),
'defaut' => isset($config[$table_objet]['objets_enfants']) ? $config[$table_objet]['objets_enfants'] : array(),
'afficher_si' => "@${table_objet}[personnaliser_enfants]@ == 'on'",
'label' => _T('duplicator:configurer_enfants_label'),
'defaut' => isset($config[$objet]['enfants']) ? $config[$objet]['enfants'] : array(),
'afficher_si' => "@${objet}[personnaliser_enfants]@ == 'on'",
),
);
}
@ -153,8 +152,8 @@ function formulaires_configurer_duplicator_verifier_dist() {
// Pour chaque type d'objets
$declaration_objets = lister_tables_objets_sql();
foreach ($declaration_objets as $table_objet_sql=>$declaration_objet) {
$table_objet = table_objet($table_objet_sql);
$config_objet = _request($table_objet);
$objet = objet_type($table_objet_sql);
$config_objet = _request($objet);
// Si on a décoché la personnalisation des champs, on vide la config des champs
if (!$config_objet['personnaliser_champs']) {
@ -163,11 +162,15 @@ function formulaires_configurer_duplicator_verifier_dist() {
// Si on a décoché la personnalisation des enfants, on vide la config des enfants
if (!$config_objet['personnaliser_enfants']) {
unset($config_objet['objets_enfants']);
$config_objet['enfants'] = 'tous';
}
else {
// Le hidden pourri dans la saisie inc-choisir-enfants qu'il faut virer
$config_objet['enfants'] = array_filter($config_objet['enfants']);
}
// On remet dans la course
set_request($table_objet, $config_objet);
set_request($objet, $config_objet);
}
return array();

2
lang/duplicator_fr.php

@ -23,8 +23,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'configurer_autorisation_label' => 'Autorisation minimale',
'configurer_autorisation_option_intro' => 'Autorisation par défaut',
'configurer_champs_label' => 'Champs à dupliquer',
'configurer_enfants_label' => 'Quels contenus enfants seront dupliqués ?',
'configurer_explication_objets_texte' => 'Même si seulement les contenus ci-dessus seront proposés dans l’interface, tous les types de contenus peuvent potentiellement être dupliqués s’ils sont enfants d’autres contenus. On permet donc de configurer en permanence l’ensemble des types de contenus, et non seulement ceux choisis pour les boutons.',
'configurer_objets_enfants_label' => 'Quels contenus enfants seront dupliqués ?',
'configurer_objets_explication' => 'Le plugin va ajouter des boutons sur la page d’admin de ces contenus pour permettre de les dupliquer et parfois de dupliquer aussi leurs enfants s’il y en a.',
'configurer_objets_label' => 'Contenus à dupliquer dans l’interface',
'configurer_personnaliser_champs_label' => 'Personnaliser les champs à dupliquer pour ces contenus',

1
paquet.xml

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

Loading…
Cancel
Save