diff --git a/action/dupliquer_objet.php b/action/dupliquer_objet.php
index 715a2f4..dbc2818 100644
--- a/action/dupliquer_objet.php
+++ b/action/dupliquer_objet.php
@@ -21,19 +21,37 @@ include_spip('action/editer_objet');
* Tableau de champ=>valeur avec les modifications à apporter sur le contenu dupliqué
* @return array
*/
-function action_dupliquer_objet_dist($objet = null, $id_objet = null, $modifications = null) {
- // appel direct depuis une url avec arg = "objet/id"
+function action_dupliquer_objet_dist($objet = null, $id_objet = null, $modifications = array(), $options=array()) {
+ // appel direct depuis une url avec arg = "objet/id/enfants"
if (is_null($id_objet) or is_null($objet)) {
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
- list($objet, $id_objet) = array_pad(explode("/", $arg, 2), 2, null);
+ list($objet, $id_objet, $enfants) = array_pad(explode("/", $arg), 3, null);
}
if ($objet and $id_objet) {
- $id_objet_duplicata = objet_dupliquer($objet, $id_objet, $modifications);
+ if ($enfants) {
+ $options['dupliquer_enfants'] = true;
+ }
+
+ // Si on a réussi à dupliquer
+ if ($id_objet_duplicata = intval(objet_dupliquer($objet, $id_objet, $modifications))) {
+ include_spip('inc/headers');
+
+ // S'il y avait une demande de redirection
+ if ($redirect = _request('redirect')) {
+ redirige_par_entete(
+ str_replace('&', '&', $redirect)
+ );
+ }
+ // Sinon on redirige sur la page de l'objet (TODO choix à configurer ?)
+ else {
+ redirige_par_entete(
+ str_replace('&', '&', generer_url_entite($id_objet_duplicata, $objet))
+ );
+ }
+ }
}
-
- return $id_objet_duplicata;
}
/**
@@ -54,6 +72,7 @@ function action_dupliquer_objet_dist($objet = null, $id_objet = null, $modificat
* Retourne l'identifiant du duplicata
*/
function objet_dupliquer($objet, $id_objet, $modifications=array(), $options=array()) {
+ $id_objet_duplicata = false;
$cle_objet = id_table_objet($objet);
$id_objet = intval($id_objet);
@@ -65,6 +84,8 @@ function objet_dupliquer($objet, $id_objet, $modifications=array(), $options=arr
// 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]);
// On applique des modifications s'il y en a
$infos_a_dupliquer = array_merge($infos_a_dupliquer, $modifications);
@@ -97,6 +118,8 @@ function objet_dupliquer($objet, $id_objet, $modifications=array(), $options=arr
'id_objet' => $id_nouvelle_rubrique
));
}
+
+ return $id_objet_duplicata;
}
if (!function_exists('logo_dupliquer')) {
diff --git a/duplicator_autoriser.php b/duplicator_autoriser.php
index e110c24..5498506 100644
--- a/duplicator_autoriser.php
+++ b/duplicator_autoriser.php
@@ -30,8 +30,17 @@ function autoriser_dupliquer($faire, $quoi='', $id=0, $qui=null, $options=null)
}
// Sinon on cherche une autorisation logique par défaut, de création ou de création dans un parent
else {
- // TODO ici une recherche du parent et appel d'autorisation de "creerpatatedans"
- return true;
+ include_spip('base/objets_parents');
+
+ // Si on trouve un parent pour ce type d'objet
+ if ($parent = objet_trouver_parent($quoi, $id)) {
+ // On construit le nom de la fonction
+ return autoriser("creer${quoi}dans", $parent['objet'], $parent['id_objet']);
+ }
+ // Sinon c'est juste la création tout court
+ else {
+ return autoriser('creer', $quoi);
+ }
}
return false;
diff --git a/duplicator_pipelines.php b/duplicator_pipelines.php
index 6a9e7b8..d5cc698 100755
--- a/duplicator_pipelines.php
+++ b/duplicator_pipelines.php
@@ -12,21 +12,48 @@ if (!defined('_ECRIRE_INC_VERSION')) {
}
function duplicator_boite_infos($flux){
- $type = $flux['args']['type'];
- 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);
- }
- }
+ include_spip('inc/config');
+ include_spip('base/objets');
+ include_spip('inc/autoriser');
+ $objet = $flux['args']['type'];
+ $id_objet = intval($flux['args']['id']);
+ $table = table_objet_sql($objet);
- 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);
- }
-
+ // Si on a accepté de dupliquer cet objet et que la personne en cours a bien le droit
+ if (
+ $objets = lire_config('duplicator/objets')
+ and in_array($table, $objets)
+ and autoriser('dupliquer', $objet, $id_objet)
+ ) {
+ include_spip('inc/filtres');
+ include_spip('inc/actions');
+
+ $flux["data"] .= bouton_action(
+ _T('duplicator:action_dupliquer_contenu'),
+ generer_action_auteur('dupliquer_objet', "$objet/$id_objet")
+ );
+
+ $flux["data"] .= bouton_action(
+ _T('duplicator:action_dupliquer_contenu_enfants'),
+ generer_action_auteur('dupliquer_objet', "$objet/$id_objet/enfants"),
+ '',
+ _T('duplicator:action_dupliquer_contenu_enfants_confirmer')
+ );
}
+
+ //~ 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;
}
@@ -35,5 +62,6 @@ function duplicator_jqueryui_plugins($plugins){
if (test_espace_prive()){
$plugins[] = "jquery.ui.dialog";
}
+
return $plugins;
}
diff --git a/lang/duplicator_fr.php b/lang/duplicator_fr.php
index 6eb384d..edb5cf0 100755
--- a/lang/duplicator_fr.php
+++ b/lang/duplicator_fr.php
@@ -6,13 +6,9 @@ if (!defined('_ECRIRE_INC_VERSION')) {
$GLOBALS[$GLOBALS['idx_lang']] = array(
// A
- 'aide_choix_champs' => 'Liste des noms des champs SQL séparés par des ","
Laisser vide pour sélectionner tous les champs principaux.',
- 'action_dupliquer_article' => "Dupliquer cet article",
- 'action_dupliquer_rubrique' => "Dupliquer cette rubrique",
- 'action_dupliquer_rubrique_arbo' => 'Dupliquer l\'arborescence de la rubrique',
- 'autorisations' => 'Autorisations',
- 'autorisations_article' => 'Qui peut dupliquer des articles ?',
- 'autorisations_rubriques' => 'Qui peut dupliquer des rubriques ?',
+ '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',
diff --git a/paquet.xml b/paquet.xml
index 07f43f9..4d486a9 100755
--- a/paquet.xml
+++ b/paquet.xml
@@ -14,9 +14,10 @@
Apsulis
Keuronde
Les Développements Durables
-
GPL 3
-
+
+
+