Browse Source

Report de http://core.spip.org/projects/spip/repository/revisions/20197 (cerdic) : objet_dupliquer_liens prend 2 arguments optionnels supplementaires qui permet de lister les types des objets lies a prendre en compte ou a exclure. Par defaut il copie tous les liens, et l'on peut donc se limiter a certain types de liens ou au contraire exclure certains types de lien. La valeur null pour chacun des deux arguments supplementaires est ignorée.

v1
marcimat@rezo.net 10 years ago
parent
commit
2002abbfb0
  1. 37
      action/editer_liens.php
  2. 2
      paquet.xml

37
action/editer_liens.php

@ -215,34 +215,44 @@ function objet_optimiser_liens($objets_source,$objets_lies){
}
/**
* Dupliquer tous les liens entrant ou sortants d'un objet
* vers un autre (meme type d'objet, mais id different)
* si $types est fourni, seuls les liens depuis/vers les types listes seront copies
* si $exclure_types est fourni, les liens depuis/vers les types listes seront ignores
*
* @api
* @param string $objet
* @param int $id_source
* @param int $id_cible
* @param array $types
* @param array $exclure_types
* @return int
* Nombre de liens copiés
*/
function objet_dupliquer_liens($objet,$id_source,$id_cible){
function objet_dupliquer_liens($objet,$id_source,$id_cible,$types=null,$exclure_types=null){
include_spip('base/objets');
$tables = lister_tables_objets_sql();
$n = 0;
foreach($tables as $table_sql => $infos){
if (objet_associable($infos['type'])){
$liens = (($infos['type']==$objet)?
objet_trouver_liens(array($objet=>$id_source),'*')
:
objet_trouver_liens(array($infos['type']=>'*'),array($objet=>$id_source)));
foreach($liens as $lien){
$n++;
if ($infos['type']==$objet){
objet_associer(array($objet=>$id_cible),array($lien['objet']=>$lien[$lien['objet']]),$lien);
}
else {
objet_associer(array($infos['type']=>$lien[$infos['type']]),array($objet=>$id_cible),$lien);
if (
(is_null($types) OR in_array($infos['type'],$types))
AND (is_null($exclure_types) OR !in_array($infos['type'],$exclure_types))
){
if (objet_associable($infos['type'])){
$liens = (($infos['type']==$objet)?
objet_trouver_liens(array($objet=>$id_source),'*')
:
objet_trouver_liens(array($infos['type']=>'*'),array($objet=>$id_source)));
foreach($liens as $lien){
$n++;
if ($infos['type']==$objet){
objet_associer(array($objet=>$id_cible),array($lien['objet']=>$lien[$lien['objet']]),$lien);
}
else {
objet_associer(array($infos['type']=>$lien[$infos['type']]),array($objet=>$id_cible),$lien);
}
}
}
}
@ -250,6 +260,7 @@ function objet_dupliquer_liens($objet,$id_source,$id_cible){
return $n;
}
/**
* Fonctions techniques
* ne pas les appeler directement

2
paquet.xml

@ -1,7 +1,7 @@
<paquet
prefix="roles"
categorie="outil"
version="1.1.1"
version="1.2.0"
etat="dev"
compatibilite="[3.0.0-dev;3.1.*]"
logo="prive/themes/spip/images/roles-64.png"

Loading…
Cancel
Save