[SPIP] ~maj 3.0.10 --> 3.0.14
[lhc/web/www.git] / www / ecrire / action / referencer_traduction.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2014 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
12
13 if (!defined('_ECRIRE_INC_VERSION')) return;
14
15 /**
16 * Definir le lien de traduction ver sun objet de reference
17 * si id_trad=0 : dereference le lien de traduction de id_objet
18 * si id_trad=NN : reference le lien de traduction de id_objet vers NN
19 * si id_objet=id_trad actuel et id_trad=new_id_trad : modifie la reference de tout le groupe de traduction
20 *
21 * @param string $objet
22 * @param int $id_objet
23 * @param int $id_trad
24 * @return bool
25 */
26 function action_referencer_traduction_dist($objet, $id_objet, $id_trad) {
27
28 // ne rien faire si id_trad est ambigu
29 if (!is_numeric($id_trad)) return false;
30
31 $table_objet_sql = table_objet_sql($objet);
32 $id_table_objet = id_table_objet($objet);
33
34 // on a fourni un id_trad : affectation ou modification du groupe de trad
35 if ($id_trad) {
36 // selectionner l'objet cible, qui doit etre different de nous-meme,
37 // et quitter s'il n'existe pas
38 $id_lier = sql_getfetsel('id_trad', $table_objet_sql, "$id_table_objet=".intval($id_trad)." AND NOT($id_table_objet=".intval($id_objet).")");
39 if ($id_lier === NULL){
40 spip_log("echec lien de trad vers objet $objet/$id_objet incorrect ($id_trad)");
41 return false;
42 }
43
44 // $id_lier est le numero du groupe de traduction
45 // Si l'objet vise n'est pas deja traduit, son identifiant devient
46 // le nouvel id_trad de ce nouveau groupe et on l'affecte aux deux
47 // objets
48 if ($id_lier == 0) {
49 sql_updateq($table_objet_sql, array("id_trad" => $id_trad), "$id_table_objet IN ($id_trad, $id_objet)");
50 }
51 // si id_lier = id_objet alors on veut changer la reference de tout le groupe de trad
52 elseif ($id_lier == $id_objet) {
53 sql_updateq($table_objet_sql, array("id_trad" => $id_trad), "id_trad = $id_lier");
54 }
55 // sinon ajouter notre objet dans le groupe
56 else {
57 sql_updateq($table_objet_sql, array("id_trad" => $id_lier), "$id_table_objet=".intval($id_objet));
58 }
59 }
60 // on a fourni un id_trad nul : sortir id_objet du groupe de trad
61 else {
62 $old_id_trad = sql_getfetsel('id_trad',$table_objet_sql,"$id_table_objet=".intval($id_objet));
63 // supprimer le lien de traduction
64 sql_updateq($table_objet_sql, array("id_trad" => 0), "$id_table_objet=".intval($id_objet));
65
66 // Verifier si l'ancien groupe ne comporte plus qu'un seul objet. Alors mettre a zero.
67 $cpt = sql_countsel($table_objet_sql, "id_trad=".intval($old_id_trad));
68 if ($cpt == 1)
69 sql_updateq($table_objet_sql, array("id_trad" => 0), "id_trad=".intval($old_id_trad));
70 }
71
72 return true;
73 }
74
75
76 ?>