diff --git a/.gitattributes b/.gitattributes index 42cdecfaf3fd8b2b2bbda6a32560eee75258ff47..2b9343cf3ecc4f4e721fbcb2329ac03b44008fa4 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 0000000000000000000000000000000000000000..7bb588963dcd97cb45a0d4f0b55ecb7e9415851c --- /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 110bd29a93bca17e3f77f9cd030cf2cca803ddcf..5146556cad0385c8d2b9d49b18be217e3880932a 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');