From e7bfd7a4ebdd8db52e99f933ee1e9ca7c14edcf7 Mon Sep 17 00:00:00 2001
From: Matthieu Marcillaud <marcimat@rezo.net>
Date: Fri, 5 May 2017 08:37:01 +0000
Subject: [PATCH] =?UTF-8?q?Ticket=20#3877=20:=20Lors=20de=20la=20cr=C3=A9a?=
 =?UTF-8?q?tion=20d'une=20traduction,=20prendre=20en=20compte=20les=20logo?=
 =?UTF-8?q?s=20(les=20recopier)=20et=20un=20=C3=A9ventuel=20champ=20'virtu?=
 =?UTF-8?q?el'=20des=20redirections.=20On=20passe=20par=20un=20appel=20?=
 =?UTF-8?q?=C3=A0=20objet=5Fmodifier=5Fchamps=20avec=20une=20nouvelle=20ac?=
 =?UTF-8?q?tion=20'completer=5Ftraduction'=20qui=20permet=20=C3=A0=20d'?=
 =?UTF-8?q?=C3=A9ventuels=20plugins=20d=E2=80=99ajouter=20des=20champs=20?=
 =?UTF-8?q?=C3=A0=20compl=C3=A9ter=20au=20moment=20d=E2=80=99une=20cr?=
 =?UTF-8?q?=C3=A9ation=20de=20traduction,=20ou=20de=20faire=20d=E2=80=99au?=
 =?UTF-8?q?tres=20actions=20=C3=A0=20ce=20m=C3=AAme=20moment,=20en=20utili?=
 =?UTF-8?q?sant=20les=20pipelines=20pre=5Fedition=20ou=20post=5Fedition.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .gitattributes                      |  1 +
 ecrire/inc/completer_traduction.php | 77 +++++++++++++++++++++++++++++
 ecrire/inc/editer.php               | 11 +++--
 3 files changed, 85 insertions(+), 4 deletions(-)
 create mode 100644 ecrire/inc/completer_traduction.php

diff --git a/.gitattributes b/.gitattributes
index 42cdecfaf3..2b9343cf3e 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -92,6 +92,7 @@ ecrire/inc/charger_php_extension.php -text
 ecrire/inc/chercher_logo.php -text
 ecrire/inc/chercher_rubrique.php -text
 ecrire/inc/commencer_page.php -text
+ecrire/inc/completer_traduction.php -text
 ecrire/inc/cookie.php -text
 ecrire/inc/couleurs.php -text
 ecrire/inc/csv.php -text
diff --git a/ecrire/inc/completer_traduction.php b/ecrire/inc/completer_traduction.php
new file mode 100644
index 0000000000..7bb588963d
--- /dev/null
+++ b/ecrire/inc/completer_traduction.php
@@ -0,0 +1,77 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2016                                                *
+ *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
+ *                                                                         *
+ *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
+ *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
+\***************************************************************************/
+
+/**
+ * Post-traitement des formulaires d'édition d'objets, lors d'une création d’une nouvelle traduction
+ *
+ * @package SPIP\Core\Objets
+ **/
+
+if (!defined('_ECRIRE_INC_VERSION')) {
+	return;
+}
+
+/**
+ * Compléter une nouvelle traduction avec des éléments utiles.
+ *
+ * @param string $objet Objet
+ * @param int $id_objet Identifiant du nouvel objet
+ * @param int $id_trad Identifiant de l’objet qu'on a traduit
+ * @return string Erreur éventuelle
+ */
+function inc_completer_traduction_dist($objet, $id_objet, $id_trad) {
+	// dupliquer tous les liens sauf les auteurs : le nouvel auteur est celui qui traduit
+	// cf API editer_liens
+	include_spip('action/editer_liens');
+	objet_dupliquer_liens($objet, $id_trad, $id_objet, null, array('auteur'));
+	$_id_table = id_table_objet($objet);
+
+	// recuperer le logo
+	$chercher_logo = charger_fonction('chercher_logo','inc');
+	include_spip('action/editer_logo');
+	foreach (array('on', 'off') as $etat) {
+		$logo = $chercher_logo($id_trad, $_id_table, $etat);
+		if ($logo AND $file = reset($logo)) {
+			logo_modifier($objet, $id_objet, $etat, $file);
+		}
+	}
+
+	// dupliquer certains champs
+	$trouver_table = charger_fonction('trouver_table','base');
+	$desc = $trouver_table(table_objet_sql($objet));
+	$champs = $set = array();
+
+	// un éventuel champ 'virtuel' (redirections)
+	if (!empty($desc['field']['virtuel'])) {
+		$champs[] = 'virtuel';
+	}
+
+	if ($champs) {
+		$set = sql_fetsel($champs, $desc['table'], $_id_table . '=' . intval($id_trad));
+	}
+
+	/*
+	 * Le pipeline 'pre_edition' sera appelé avec l'action 'completer_traduction'.
+	 * Des plugins pourront ainsi compléter les champs d'un objet traduit lors d'une nouvelle traduction.
+	 */
+	$err = objet_modifier_champs(
+		$objet,
+		$id_objet,
+		array(
+			'data' => $set,
+			'action' => 'completer_traduction',
+		),
+		$set
+	);
+
+	return $err;
+}
\ No newline at end of file
diff --git a/ecrire/inc/editer.php b/ecrire/inc/editer.php
index 110bd29a93..5146556cad 100644
--- a/ecrire/inc/editer.php
+++ b/ecrire/inc/editer.php
@@ -88,10 +88,13 @@ function formulaires_editer_objet_traiter(
 			// referencer la traduction
 			$referencer_traduction = charger_fonction('referencer_traduction', 'action');
 			$referencer_traduction($type, $id, $lier_trad);
-			// dupliquer tous les liens sauf les auteurs : le nouvel auteur est celui qui traduit
-			// cf API editer_liens
-			include_spip('action/editer_liens');
-			objet_dupliquer_liens($type, $lier_trad, $id, null, array('auteur'));
+			// actions de recopie de champs / liens sur le nouvel objet créé
+			$completer_traduction = charger_fonction('completer_traduction', 'inc');
+			$err = $completer_traduction($type, $id, $lier_trad);
+			if ($err) {
+				$res['message_erreur'] = $err;
+				return $res;
+			}
 		}
 
 		$res['message_ok'] = _T('info_modification_enregistree');
-- 
GitLab