From 1350eeef95ec2ba16fdcbc5ed282477ff3e659b3 Mon Sep 17 00:00:00 2001
From: kent1 <kent1@arscenic.info>
Date: Wed, 13 Apr 2016 19:07:46 +0000
Subject: [PATCH] =?UTF-8?q?Chaque=20table=20ayant=20un=20champ=20"lang"=20?=
 =?UTF-8?q?n'est=20pas=20oblig=C3=A9=20d'avoir=20de=20champ=20langue=5Fcho?=
 =?UTF-8?q?isie=20(cas=20de=20spip=5Fsyndic=5Farticles=20du=20plugin=20sit?=
 =?UTF-8?q?es).?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Du coup la fonction instituer_langue_objet provoquait des erreurs Mysql du type :

:Pri:ERREUR: Erreur 1054 de mysql: Unknown column 'langue_choisie' in 'field list'
in /blahblah/ecrire/action/instituer_langue_objet.php L39 [sql_updateq(),action_instituer_langue_objet_dist(),objet_modifier_champs(),inserer_article_syndique(),syndic_a_jour(),queue_start_job(),queue_schedule(),action_syndiquer_site_dist(),traiter_appels_actions()]
UPDATE `blablah`.spip_syndic_articles
SET lang='fr',langue_choisie='oui'
WHERE id_syndic_article=32583

Cette fonction n'est utilisée qu'une seule fois dans le core, au lieu de l'alourdir en passant à nouveau par trouver_table, on change sa signature, c'est objet_modifier_champs (où est son seul appel et qui fait déjà un trouver_table) qui stipule si oui ou non on change le champ langue_choisie.
---
 ecrire/action/instituer_langue_objet.php | 19 +++++++++++++------
 ecrire/inc/modifier.php                  |  2 +-
 2 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/ecrire/action/instituer_langue_objet.php b/ecrire/action/instituer_langue_objet.php
index 6dd8a328f4..76b12f7cee 100644
--- a/ecrire/action/instituer_langue_objet.php
+++ b/ecrire/action/instituer_langue_objet.php
@@ -27,16 +27,20 @@ if (!defined('_ECRIRE_INC_VERSION')) {
  * @param int $id
  * @param int $id_rubrique
  * @param string $changer_lang
+ * @param bool $langue_choisie : la table à modifier dispose-t-elle d'un champ 'langue_choisie'
  * @return string
  */
-function action_instituer_langue_objet_dist($objet, $id, $id_rubrique, $changer_lang) {
+function action_instituer_langue_objet_dist($objet, $id, $id_rubrique, $changer_lang, $langue_choisie = true) {
 	if ($changer_lang) {
 		$table_objet_sql = table_objet_sql($objet);
 		$id_table_objet = id_table_objet($objet);
-
+		
 		if ($changer_lang != "herit") {
-			sql_updateq($table_objet_sql, array('lang' => $changer_lang, 'langue_choisie' => 'oui'),
-				"$id_table_objet=" . intval($id));
+			$champs = array('lang' => $changer_lang);
+			if ($langue_choisie) {
+				$champs['langue_choisie'] = 'oui';
+			}
+			sql_updateq($table_objet_sql, $champs, "$id_table_objet=" . intval($id));
 			include_spip('inc/rubriques');
 			if ($table_objet_sql == 'spip_rubriques') {
 				calculer_langues_rubriques();
@@ -48,8 +52,11 @@ function action_instituer_langue_objet_dist($objet, $id, $id_rubrique, $changer_
 			if (!$langue_parent) {
 				$langue_parent = $GLOBALS['meta']['langue_site'];
 			}
-			sql_updateq($table_objet_sql, array('lang' => $langue_parent, 'langue_choisie' => 'non'),
-				"$id_table_objet=" . intval($id));
+			$champs = array('lang' => $langue_parent);
+			if ($langue_choisie) {
+				$champs['langue_choisie'] = 'non';
+			}
+			sql_updateq($table_objet_sql, $champs, "$id_table_objet=" . intval($id));
 			$changer_lang = $langue_parent;
 			if ($table_objet_sql == 'spip_rubriques') {
 				include_spip('inc/rubriques');
diff --git a/ecrire/inc/modifier.php b/ecrire/inc/modifier.php
index 51d7dfb0fb..ae368fe0aa 100644
--- a/ecrire/inc/modifier.php
+++ b/ecrire/inc/modifier.php
@@ -202,7 +202,7 @@ function objet_modifier_champs($objet, $id_objet, $options, $c = null, $serveur
 					$id_rubrique = sql_getfetsel($parent, $spip_table_objet, "$id_table_objet=" . intval($id_objet));
 				}
 				$instituer_langue_objet = charger_fonction('instituer_langue_objet', 'action');
-				$champs['lang'] = $instituer_langue_objet($objet, $id_objet, $id_rubrique, $changer_lang);
+				$champs['lang'] = $instituer_langue_objet($objet, $id_objet, $id_rubrique, $changer_lang, isset($desc['langue_choisie']));
 			}
 			// on laisse 'lang' dans $champs,
 			// ca permet de passer dans le pipeline post_edition et de journaliser
-- 
GitLab