Browse Source

On passe en dev, et on commence avec un début de nouvelle fonction d'API objet_dupliquer() qui a vocation à intégrer le noyau plus tard dans action/editer_objet avec objet_modifier() etc. Pour l'instant cette fonction duplique l'objet demandé et ses liens et logos. Pas encore ses enfants, à trouver…

svn/root/tags/v2.0.8
rastapopoulos@spip.org 5 years ago
parent
commit
f2e4ef70a9
  1. 1
      .gitattributes
  2. 111
      action/dupliquer_objet.php
  3. 11
      paquet.xml

1
.gitattributes vendored

@ -1,6 +1,7 @@
* text=auto !eol
/a_faire.txt -text
action/duplicator.php -text
action/dupliquer_objet.php -text
/duplicator_autoriser.php -text
/duplicator_pipelines.php -text
formulaires/configurer_duplicator.html -text

111
action/dupliquer_objet.php

@ -0,0 +1,111 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
include_spip('base/objets');
include_spip('action/editer_objet');
/**
* Point d'entrée pour dupliquer un objet
*
* On ne peut entrer que par un appel en fournissant $id et $objet
* ou avec un argument d'action sécurisée de type "objet/id"
*
* @param string $objet
* Type de l'objet à dupliquer
* @param int $id
* Identifiant de l'objet à dupliquer
* @param array $modifications
* 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"
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);
}
if ($objet and $id_objet) {
$id_objet_duplicata = objet_dupliquer($objet, $id_objet, $modifications);
}
return $id_objet_duplicata;
}
/**
* Duplique un objet, ses liaisons et ses enfants
*
* @param $objet
* Type de l'objet à dupliquer
* @param $id_objet
* Identifiant de l'objet à dupliquer
* @param $modifications
* Tableau de champ=>valeur avec les modifications à apporter sur le contenu dupliqué
* @param $options
* Tableau d'options :
* - 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_exclus : liste d'objets liables dont on ne veut pas dupliquer les liens
* @return int
* Retourne l'identifiant du duplicata
*/
function objet_dupliquer($objet, $id_objet, $modifications=array(), $options=array()) {
$cle_objet = id_table_objet($objet);
$id_objet = intval($id_objet);
// On cherche la liste des champs à dupliquer, par défaut tout
$champs = lire_config("duplicator/$objet/champs", array());
if (empty($champs)) {
$champs = '*';
}
// On récupère les infos à dupliquer
$infos_a_dupliquer = sql_fetsel($champs, table_objet_sql($objet), "$cle_objet = $id_objet");
// 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)) {
// On cherche quels liens
$liens = $liens_exclus = null;
if (isset($options['liens'])) {
$liens = $options['liens'];
}
if (isset($options['liens_exclus'])) {
$liens_exclus = $options['liens_exclus'];
}
// On duplique les liens
objet_dupliquer_liens($objet, $id_objet, $id_objet_duplicata, $liens, $liens_exclus);
// 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' => 'rubrique',
'id_objet_origine' => $id_rubrique,
'id_objet' => $id_nouvelle_rubrique
));
}
}
if (!function_exists('logo_dupliquer')) {
function logo_dupliquer($objet, $id_source, $id_cible, $etat='on') {
$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;
}
}

11
paquet.xml

@ -1,20 +1,18 @@
<paquet
prefix="duplicator"
categorie="edition"
version="1.5.9"
etat="test"
version="2.0.0-dev"
etat="dev"
compatibilite="[3.0.0;3.2.*]"
logo="prive/themes/spip/images/duplicator.png"
documentation="https://contrib.spip.net/?article3354"
>
<nom>Duplicator</nom>
<!-- Dupliquer une rubrique et son contenu -->
<auteur lien="http://demo.apsulis.com">Apsulis</auteur>
<auteur lien="http://poivron-robotique.fr">Keuronde</auteur>
<copyright>2010-2014</copyright>
<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>
@ -22,7 +20,6 @@
<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