Browse Source

mise a jour avec report des corrections du core, unification avec version core SPIP 3.1

v1
cedric@yterium.com 8 years ago
parent
commit
3ba4b93b38
  1. 66
      action/editer_liens.php
  2. 2
      paquet.xml

66
action/editer_liens.php

@ -3,7 +3,7 @@
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2012 *
* Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
@ -24,7 +24,7 @@
* une colonne spécifique doit être présente dans la table de liens
* et l'unicité est alors assurée sur le quatuor (id_x, objet, id_objet, role)
* et la clé primaire adaptée en conséquence.
*
*
* @package SPIP\Liens\API
*/
@ -71,15 +71,10 @@ function objet_associable($objet){
* et pour lesquels une table spip_xxx_liens existe
* (auteurs, documents, mots)
*
* On peut passer optionnellement une qualification du (des) lien(s) qui sera
* alors appliquée dans la foulée. Lorsqu'une des qualification concerne
* un champ de rôle déclaré, la liaison se crée avec ce rôle. Si un champ de
* rôle est déclaré pour ce type de liaison, mais qu'il n'est pas présent
* dans cette qualification, on affecte automatiquement le rôle défini
* par défaut.
*
* En cas de lot de liens, c'est la même qualification qui est appliquée à tous
*
* on peut passer optionnellement une qualification du (des) lien(s) qui sera
* alors appliquee dans la foulee.
* En cas de lot de liens, c'est la meme qualification qui est appliquee a tous
*
* @api
* @param array $objets_source
* @param array|string $objets_lies
@ -114,7 +109,7 @@ function objet_associer($objets_source, $objets_lies, $qualif = null){
* sur la colonne du rôle n'est transmise, on ne supprime que les liens
* avec le rôle par défaut. Si on veut supprimer tous les rôles,
* il faut spécifier $cond => array('role' => '*')
*
*
* @api
* @param array $objets_source
* @param array|string $objets_lies
@ -260,7 +255,6 @@ function objet_dupliquer_liens($objet,$id_source,$id_cible,$types=null,$exclure_
return $n;
}
/**
* Fonctions techniques
* ne pas les appeler directement
@ -346,7 +340,7 @@ function objet_traiter_liaisons($operation,$objets_source,$objets_lies, $set = n
* @internal
* @param string $objet_source Objet source de l'insertion (celui qui a la table de liaison)
* @param string $primary Nom de la clé primaire de cet objet
* @param sgring $table_lien Nom de la table de lien de cet objet
* @param string $table_lien Nom de la table de lien de cet objet
* @param int $id Identifiant de l'objet sur lesquels on va insérer des liaisons
* @param array $objets Liste des liaisons à faire, de la forme array($objet=>$id_objets)
* @param array $qualif
@ -399,15 +393,7 @@ function lien_insert($objet_source,$primary,$table_lien,$id,$objets,$qualif) {
'data' => $id_objet
)
);
/* [todo] POUR la 3.1
// Envoyer aux plugins
$insertions = pipeline('pre_edition_lien',
array(
'args' => $args,
'data' => $insertions
)
);
*/
$args['id_objet'] = $id_objet;
$where = lien_where($primary, $id, $objet, $id_objet, $cond);
@ -496,11 +482,11 @@ function lien_where($primary, $id_source, $objet, $id_objet, $cond=array()){
* supprime que les liaisons avec le role déclaré par défaut si rien n'est
* précisé dans $cond. Il faut alors passer $cond=array('role'=>'*') pour
* supprimer tous les roles, ou array('role'=>'un_role') pour un role précis.
*
*
* @internal
* @param string $objet_source
* @param string $primary
* @param sgring $table_lien
* @param string $table_lien
* @param int $id
* @param array $objets
* @param array|null $cond
@ -549,6 +535,7 @@ function lien_delete($objet_source,$primary,$table_lien,$id,$objets,$cond=null){
'data' => $l['id_objet']
)
);
$args['id_objet'] = $id_o;
/* [TODO] pour SPIP 3.1
// Envoyer aux plugins
@ -614,7 +601,7 @@ function lien_delete($objet_source,$primary,$table_lien,$id,$objets,$cond=null){
* @internal
* @param string $objet_source
* @param string $primary
* @param sgring $table_lien
* @param string $table_lien
* @param int $id
* @param array $objets
* @return bool|int
@ -635,11 +622,13 @@ function lien_optimise($objet_source,$primary,$table_lien,$id,$objets){
$spip_table_objet = table_objet_sql($type);
$id_table_objet = id_table_objet($type);
$res = sql_select("L.$primary AS id,L.id_objet",
// la condition de jointure inclue L.objet='xxx' pour ne joindre que les bonnes lignes
// du coups toutes les lignes avec un autre objet ont un id_xxx=NULL puisque LEFT JOIN
// il faut les eliminier en repetant la condition dans le where L.objet='xxx'
"$table_lien AS L
LEFT JOIN $spip_table_objet AS O
ON O.$id_table_objet=L.id_objet",
"L.objet=".sql_quote($type)." AND O.$id_table_objet IS NULL");
ON (O.$id_table_objet=L.id_objet AND L.objet=".sql_quote($type).")",
"L.objet=".sql_quote($type)." AND O.$id_table_objet IS NULL");
// sur une cle primaire composee, pas d'autres solutions que de virer un a un
while ($row = sql_fetch($res)){
$e = sql_delete($table_lien, array("$primary=".$row['id'],"id_objet=".$row['id_objet'],"objet=".sql_quote($type)));
@ -681,12 +670,12 @@ function lien_optimise($objet_source,$primary,$table_lien,$id,$objets){
* @internal
* @param string $objet_source Objet source de l'insertion (celui qui a la table de liaison)
* @param string $primary Nom de la clé primaire de cet objet
* @param sgring $table_lien Nom de la table de lien de cet objet
* @param string $table_lien Nom de la table de lien de cet objet
* @param int $id Identifiant de l'objet sur lesquels on va insérer des liaisons
* @param array $objets Liste des liaisons à faire, de la forme array($objet=>$id_objets)
* @param array $qualif
* Liste des qualifications à appliquer.
*
*
* Si l'objet dispose d'un champ rôle, on extrait des qualifications
* le rôle s'il est présent, sinon on applique les qualifications
* sur le rôle par défaut.
@ -734,6 +723,8 @@ function lien_set($objet_source,$primary,$table_lien,$id,$objets,$qualif){
'data' => $id_objet,
)
);
$args['id_objet'] = $id_objet;
/* [TODO] pour la 3.1
// Envoyer aux plugins
$qualif = pipeline('pre_edition_lien',
@ -748,7 +739,8 @@ function lien_set($objet_source,$primary,$table_lien,$id,$objets,$qualif){
if ($e===false) {
$echec = true;
} else {
}
else {
// Envoyer aux plugins
pipeline('post_edition_lien',
array(
@ -776,18 +768,18 @@ function lien_set($objet_source,$primary,$table_lien,$id,$objets,$qualif){
* Le tableau de condition peut avoir un index 'role' indiquant de
* chercher un rôle précis, ou * pour tous les roles (alors équivalent
* à l'absence de l'index)
*
*
* @internal
* @param string $objet_source
* @param string $primary
* @param sgring $table_lien
* @param string $table_lien
* @param int $id
* @param array $objets
* @param array|null $cond
* Condition du where par défaut
*
*
* On peut passer un index 'role' pour sélectionner uniquement
* le role défini dedans (et '*' pour tous les rôles).
* le role défini dedans (et '*' pour tous les rôles).
* @return array
*/
function lien_find($objet_source,$primary,$table_lien,$id,$objets,$cond=null){
@ -816,7 +808,7 @@ function lien_find($objet_source,$primary,$table_lien,$id,$objets,$cond=null){
* @param string $objet
* @param array|int $ids
*/
function lien_propage_date_modif($objet,$ids) {
function lien_propage_date_modif($objet,$ids){
static $done = array();
$hash = md5($objet . serialize($ids));

2
paquet.xml

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

Loading…
Cancel
Save