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 - + + +