[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / prive / formulaires / traduire.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2017 *
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 /**
14 * Gestion du formulaire de traduction
15 *
16 * @package SPIP\Core\Formulaires
17 **/
18
19 if (!defined('_ECRIRE_INC_VERSION')) {
20 return;
21 }
22
23 include_spip('inc/actions');
24 include_spip('inc/editer');
25
26 /**
27 * Charger les données de #FORMULAIRE_TRADUIRE
28 *
29 * @param string $objet
30 * Type d'objet
31 * @param int $id_objet
32 * Identifiant de l'objet
33 * @param string $retour
34 * URL de retour
35 * @param bool $traduire
36 * Permet de désactiver la gestion de traduction sur un objet ayant id_trad
37 * @return array|bool
38 * False si l'identifiant n'est pas numérique ou si l'objet n'a pas de langue
39 * Contexte à transmettre au squelette du formulaire sinon
40 */
41 function formulaires_traduire_charger_dist($objet, $id_objet, $retour = '', $traduire = true) {
42 if (!intval($id_objet)) {
43 return false;
44 }
45 $valeurs = formulaires_editer_objet_charger($objet, $id_objet, null, 0, $retour, '');
46 // verifier que l'objet indique possede bien des champs id_trad et lang
47 // attention, charger renomme lang => langue pour ne pas perturber la langue d'affichage du squelette
48 if (!isset($valeurs['langue'])) {
49 return false;
50 }
51
52 $valeurs['editable'] = autoriser('changerlangue', $objet, $id_objet);
53 $valeurs['_langue'] = '';
54 $langue_parent = '';
55 $id_parent = '';
56 if (isset($valeurs['id_rubrique'])) {
57 $id_parent = $valeurs['id_rubrique'];
58 }
59 if (isset($valeurs['id_parent'])) {
60 $id_parent = $valeurs['id_parent'];
61 }
62 if ($id_parent) {
63 $langue_parent = sql_getfetsel('lang', 'spip_rubriques', 'id_rubrique=' . intval($id_parent));
64 }
65
66 if (!$langue_parent) {
67 $langue_parent = $GLOBALS['meta']['langue_site'];
68 }
69 if ($valeurs['editable']
70 and in_array(table_objet_sql($objet), explode(',', $GLOBALS['meta']['multi_objets']))
71 ) {
72 $valeurs['_langue'] = $valeurs['langue'];
73 }
74 $valeurs['langue_parent'] = $langue_parent;
75
76 $valeurs['_objet'] = $objet;
77 $valeurs['_id_objet'] = $id_objet;
78 $valeurs['changer_lang'] = '';
79
80
81 $valeurs['_traduisible'] = autoriser('changertraduction', $objet, $id_objet);
82 $valeurs['_traduire'] = '';
83 if (isset($valeurs['id_trad'])) {
84 $valeurs['_traduire'] = ($traduire ? ' ' : '');
85 if ($valeurs['_traduisible']) {
86 $valeurs['_vue_traductions'] = 'prive/objets/liste/' . (trouver_fond(
87 $f = table_objet($objet) . '-trad',
88 'prive/objets/liste'
89 ) ? $f : 'objets-trad');
90 // pour afficher la liste des trad sur la base de l'id_trad en base
91 // independamment d'une saisie en cours sur id_trad
92 $valeurs['_lister_id_trad'] = $valeurs['id_trad'];
93 $valeurs['_id_parent'] = $id_parent;
94 }
95 }
96
97 $valeurs['_saisie_en_cours'] = (!_request('annuler') and (_request('changer_lang') !== null
98 or _request('changer_id_trad') !== null));
99 $valeurs['_pipeline'] = array('traduire', array('type' => $objet, 'id' => $id_objet));
100
101 return $valeurs;
102 }
103
104 /**
105 * Vérifier les saisies des valeurs du #FORMULAIRE_TRADUIRE
106 *
107 * @param string $objet
108 * Type d'objet
109 * @param int $id_objet
110 * Identifiant de l'objet
111 * @param string $retour
112 * URL de retour
113 * @param bool $traduire
114 * Permet de désactiver la gestion de traduction sur un objet ayant id_trad
115 * @return array
116 * Erreurs des saisies
117 */
118 function formulaires_traduire_verifier_dist($objet, $id_objet, $retour = '', $traduire = true) {
119 $erreurs = array();
120
121 if (null !== _request('changer_lang')) {
122 $erreurs = formulaires_editer_objet_verifier($objet, $id_objet, array('changer_lang'));
123 }
124
125 // si id_trad fourni, verifier que cela ne conflicte pas avec un id_trad existant
126 // et que ca reference bien un objet existant
127 if ($id_trad = _request('id_trad')) {
128 $table_objet_sql = table_objet_sql($objet);
129 $_id_table_objet = id_table_objet($objet);
130 if (sql_getfetsel(
131 'id_trad',
132 $table_objet_sql,
133 "$_id_table_objet=" . intval($id_objet)
134 )) {
135 // ne devrait jamais arriver sauf concurence de saisie
136 $erreurs['id_trad'] = _L('Une traduction est deja referencee');
137 } elseif (!sql_getfetsel($_id_table_objet, $table_objet_sql, "$_id_table_objet=" . intval($id_trad))) {
138 $erreurs['id_trad'] = _L('Indiquez un contenu existant');
139 }
140 }
141
142 return $erreurs;
143 }
144
145
146 /**
147 * Enregistrer en base les saisies du #FORMULAIRE_TRADUIRE
148 *
149 * @param string $objet
150 * Type d'objet
151 * @param int $id_objet
152 * Identifiant de l'objet
153 * @param string $retour
154 * URL de retour
155 * @param bool $traduire
156 * Permet de désactiver la gestion de traduction sur un objet ayant id_trad
157 * @return array
158 * Retour des traitements
159 */
160 function formulaires_traduire_traiter_dist($objet, $id_objet, $retour = '', $traduire = true) {
161 $res = array();
162 if (!_request('annuler') and autoriser('changerlangue', $objet, $id_objet)) {
163 // action/editer_xxx doit traiter la modif de changer_lang
164 $res = formulaires_editer_objet_traiter($objet, $id_objet, 0, 0, $retour);
165 }
166 if (!_request('annuler') and autoriser('changertraduction', $objet, $id_objet)) {
167 if ($id_trad = _request('id_trad') or _request('supprimer_trad')) {
168 $referencer_traduction = charger_fonction('referencer_traduction', 'action');
169 $referencer_traduction($objet, $id_objet, intval($id_trad)); // 0 si supprimer_trad
170 } elseif ($new_id_trad = _request('changer_reference_trad')
171 and $new_id_trad = array_keys($new_id_trad)
172 and $new_id_trad = reset($new_id_trad)
173 ) {
174 $table_objet_sql = table_objet_sql($objet);
175 $_id_table_objet = id_table_objet($objet);
176 if ($id_trad = sql_getfetsel('id_trad', $table_objet_sql, "$_id_table_objet=" . intval($id_objet))) {
177 $referencer_traduction = charger_fonction('referencer_traduction', 'action');
178 $referencer_traduction($objet, $id_trad, $new_id_trad);
179 }
180 }
181 }
182 $res['editable'] = true;
183 if (!isset($res['message_erreur'])) {
184 set_request('annuler', 'annuler');
185 } // provoquer la fermeture du forumlaire
186
187 return $res;
188 }