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