Browse Source

Nécessiter declarerparent + utilisation de l'API pour trouver le parent dans l'autorisation + corrections dans la fonction d'API de duplication pour enlever la clé primaire + finalisation de l'action pour appeler la fonction d'API et rediriger après. Reste à faire la duplication des enfants en cascade…

svn/root/tags/v2.0.8
rastapopoulos@spip.org 5 years ago
parent
commit
78dea438ac
  1. 35
      action/dupliquer_objet.php
  2. 13
      duplicator_autoriser.php
  3. 54
      duplicator_pipelines.php
  4. 10
      lang/duplicator_fr.php
  5. 5
      paquet.xml

35
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')) {

13
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;

54
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;
}

10
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 ","<br/><em>Laisser vide pour sélectionner tous les champs principaux.</em>',
'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&nbsp;?',
'autorisations_rubriques' => 'Qui peut dupliquer des rubriques&nbsp;?',
'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',

5
paquet.xml

@ -14,9 +14,10 @@
<auteur lien="http://demo.apsulis.com">Apsulis</auteur>
<auteur lien="http://poivron-robotique.fr">Keuronde</auteur>
<auteur lien="https://www.ldd.fr">Les Développements Durables</auteur>
<licence lien="http://www.gnu.org/licenses/gpl-3.0.html">GPL 3</licence>
<necessite nom="declarerparent" compatibilite="[1.3.0;]" />
<pipeline nom="duplicator" action="" />
<pipeline nom="autoriser" inclure="duplicator_autoriser.php" />
<pipeline nom="boite_infos" inclure="duplicator_pipelines.php" />

Loading…
Cancel
Save