From 292175e492398daff3fa30f42aadfbe1bf17c158 Mon Sep 17 00:00:00 2001 From: "Committo,Ergo:sum" <esj@rezo.net> Date: Mon, 14 Aug 2006 21:20:32 +0000 Subject: [PATCH] =?UTF-8?q?Gestion=20en=20dehors=20de=20articles.php=20des?= =?UTF-8?q?=202=20modifs=20de=20id=5Ftrad.=20Le=20test=20de=20traduction?= =?UTF-8?q?=20redondante=20ne=20marche=20pas,=20mais=20il=20semble=20que?= =?UTF-8?q?=20cela=20remonte=20=C3=A0=20loin=20(la=20faute=20de=20syntaxe?= =?UTF-8?q?=20dans=20les=20attributs=20en=20cas=20de=20message=20d'erreur?= =?UTF-8?q?=20en=20est=20un=20autre=20indice).=20A=20noter=20aussi=20que?= =?UTF-8?q?=20le=20petit=20triangle=20donnant=20aux=20formulaires=20sur=20?= =?UTF-8?q?les=20traductions=20ne=20tourne=20pas.=20Mais=20on=20n'est=20pa?= =?UTF-8?q?s=20loin=20de=20la=20mise=20en=20Ajax=20de=20tout=20le=20bloc?= =?UTF-8?q?=20sur=20les=20traductions.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitattributes | 1 + ecrire/action/editer_article.php | 69 ++++++++++++--- ecrire/action/referencer_traduction.php | 32 +++++++ ecrire/exec/articles.php | 110 ++++++++---------------- 4 files changed, 123 insertions(+), 89 deletions(-) create mode 100644 ecrire/action/referencer_traduction.php diff --git a/.gitattributes b/.gitattributes index 8b0002f3f1..8fe6c94022 100644 --- a/.gitattributes +++ b/.gitattributes @@ -43,6 +43,7 @@ ecrire/action/petitionner.php -text ecrire/action/poster.php -text ecrire/action/purger.php -text ecrire/action/redirect.php -text +ecrire/action/referencer_traduction.php -text ecrire/action/supprimer.php -text ecrire/action/supprimer_traduction.php -text ecrire/action/test_dirs.php -text diff --git a/ecrire/action/editer_article.php b/ecrire/action/editer_article.php index da51bc3a64..7064b68617 100644 --- a/ecrire/action/editer_article.php +++ b/ecrire/action/editer_article.php @@ -14,6 +14,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return; function action_editer_article_dist() { + include_spip('inc/actions'); $var_f = charger_fonction('controler_action_auteur', 'inc'); $var_f(); @@ -25,17 +26,21 @@ function action_editer_article_dist() { if (!$id_article = intval($arg)) { if ($arg != 'oui') redirige_par_entete('./'); $id_article = insert_article($id_parent); - } + } + + $err = false; + + // Enregistre l'envoi dans la BD et positionne $err si pb + + articles_set($id_article, $id_parent, $lier_trad, $arg=='oui'); // id_article_bloque, globale dans inc/presentation - $redirect = _request('redirect') - . "&id_article=$id_article&id_article_bloque=$id_article" - . ($arg=='oui' ? '&new=oui' : '') - . ($lier_trad ? "&lier_trad=$lier_trad" : '') ; - articles_set($id_article, $id_parent, $arg=='oui'); + $redirect = urldecode(_request('redirect')) + . "&id_article=$id_article&id_article_bloque=$id_article" + . ($GLOBALS['err'] ? '&trad_err=1' : ''); - redirige_par_entete(urldecode($redirect)); + redirige_par_entete($redirect); } function insert_article($id_parent) @@ -63,23 +68,30 @@ function insert_article($id_parent) return $id_article; } -function articles_set($id_article, $id_rubrique, $new) +function articles_set($id_article, $id_rubrique, $lier_trad, $new) { - include_spip('inc/filtres'); include_spip('inc/rubriques'); - if (!strlen($titre_article=corriger_caracteres($_POST['titre']))) - $titre_article = _T('info_sans_titre'); - revisions_articles($id_article, $id_rubrique, $titre_article, $new); + $row = spip_fetch_array(spip_query("SELECT id_trad FROM spip_articles WHERE id_article=$id_article")); + + $id_trad = (!$lier_trad) ? 0 : article_referent ($id_article, $row['id_trad'], $lier_trad); + + if (_request('titre')) // retour de articles_edit.php + revisions_articles($id_article, $id_rubrique, $id_trad, $new); + else // retour articles.php + spip_query("UPDATE spip_articles SET id_trad = $id_trad WHERE id_article = $id_article"); } -function revisions_articles ($id_article, $id_rubrique, $titre_article) { +function revisions_articles ($id_article, $id_rubrique, $id_trad) { { global $flag_revisions, $champs_extra; $id_auteur = _request('id_auteur'); $texte = trop_longs_articles(_request('texte_plus')) . _request('texte'); + if (!strlen($titre_article=corriger_caracteres(_request('titre')))) + $titre_article = _T('info_sans_titre'); + $champs = array( 'surtitre' => corriger_caracteres(_request('surtitre')), 'titre' => $titre_article, @@ -114,7 +126,10 @@ function revisions_articles ($id_article, $id_rubrique, $titre_article) { $champs_extra = extra_recup_saisie("articles", _request('id_secteur')); } - spip_query("UPDATE spip_articles SET surtitre=" . spip_abstract_quote($champs['surtitre']) . ", titre=" . spip_abstract_quote($champs['titre']) . ", soustitre=" . spip_abstract_quote($champs['soustitre']) . ", id_rubrique=" . intval($id_rubrique) . ", descriptif=" . spip_abstract_quote($champs['descriptif']) . ", chapo=" . spip_abstract_quote($champs['chapo']) . ", texte=" . spip_abstract_quote($champs['texte']) . ", ps=" . spip_abstract_quote($champs['ps']) . ", url_site=" . spip_abstract_quote($champs['url_site']) . ", nom_site=" . spip_abstract_quote($champs['nom_site']) . ", date_modif=NOW() " . ($champs_extra ? (", extra = " . spip_abstract_quote($champs_extra)) : '') . " WHERE id_article=$id_article"); + spip_query("UPDATE spip_articles SET id_trad = $id_trad WHERE id_article = $id_article"); + + + spip_query("UPDATE spip_articles SET id_rubrique=$id_rubrique, id_trad=$id_trad, surtitre=" . spip_abstract_quote($champs['surtitre']) . ", titre=" . spip_abstract_quote($champs['titre']) . ", soustitre=" . spip_abstract_quote($champs['soustitre']) . ", descriptif=" . spip_abstract_quote($champs['descriptif']) . ", chapo=" . spip_abstract_quote($champs['chapo']) . ", texte=" . spip_abstract_quote($champs['texte']) . ", ps=" . spip_abstract_quote($champs['ps']) . ", url_site=" . spip_abstract_quote($champs['url_site']) . ", nom_site=" . spip_abstract_quote($champs['nom_site']) . ", date_modif=NOW() " . ($champs_extra ? (", extra = " . spip_abstract_quote($champs_extra)) : '') . " WHERE id_article=$id_article"); // Stockage des versions if (($GLOBALS['meta']["articles_versions"]=='oui') && $flag_revisions) { @@ -164,4 +179,30 @@ function trop_longs_articles($texte_plus) return $texte_ajout; } +function article_referent ($id_article, $id_trad, $lier_trad) +{ + global $err; // pour avertir l'appelant + + $row = spip_fetch_array(spip_query("SELECT id_trad FROM spip_articles WHERE id_article=$lier_trad")); + + $id_lier = $row['id_trad']; + + spip_log("$id_article, $id_trad, $lier_trad, $id_lier"); +// Si l'article vise n'a pas deja de traduction, creer nouveau id_trad + if ($id_lier == 0) { + $nouveau_trad = $lier_trad; + spip_query("UPDATE spip_articles SET id_trad = $lier_trad WHERE id_article = $lier_trad"); + } else { + // insuffisant pour prevenir les traductions redondantes a mon avis + if ($id_lier == $id_trad) $err = true; + $nouveau_trad = $id_lier; + spip_query("UPDATE spip_articles SET id_trad = $id_lier WHERE id_trad = $id_lier"); + } + + if ($id_trad > 0) + spip_query("UPDATE spip_articles SET id_trad = $nouveau_trad WHERE id_trad = $id_trad"); + + return $nouveau_trad; +} + ?> diff --git a/ecrire/action/referencer_traduction.php b/ecrire/action/referencer_traduction.php new file mode 100644 index 0000000000..84c6bae218 --- /dev/null +++ b/ecrire/action/referencer_traduction.php @@ -0,0 +1,32 @@ +<?php + +/***************************************************************************\ + * SPIP, Systeme de publication pour l'internet * + * * + * Copyright (c) 2001-2006 * + * 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. * +\***************************************************************************/ + +if (!defined("_ECRIRE_INC_VERSION")) return; + +include_spip('inc/filtres'); + + +function action_referencer_traduction_dist() { + + include_spip('inc/actions'); + $var_f = charger_fonction('controler_action_auteur', 'inc'); + $var_f(); + + $arg = _request('arg'); + + if (!preg_match(",^(\d+)\D(\d+)$,", $arg, $r)) { + spip_log("action_referencer_traduction_dist $arg pas compris"); + } else { + spip_query("UPDATE spip_articles SET id_trad = " . $r[2] . " WHERE id_trad =" . $r[1]); + } +} +?> diff --git a/ecrire/exec/articles.php b/ecrire/exec/articles.php index a041a5a340..481c2d8f57 100644 --- a/ecrire/exec/articles.php +++ b/ecrire/exec/articles.php @@ -25,11 +25,10 @@ include_spip('base/abstract_sql'); function exec_articles_dist() { - global $cherche_auteur, $ids, $cherche_mot, $debut, $id_article, $id_article_bloque, $id_parent, $id_rubrique_old, $id_trad_new, $lier_trad, $new, $nom_select, $nouv_mot, $supp_mot; + global $cherche_auteur, $ids, $cherche_mot, $debut, $id_article, $nouv_mot, $supp_mot, $trad_err; + global $connect_id_auteur, $connect_statut, $options, $spip_display, $spip_lang_left, $spip_lang_right, $dir_lang; - $id_parent = intval($id_parent); - $lier_trad = intval($lier_trad); $supp_mot = intval($supp_mot); $id_article= intval($id_article); @@ -235,7 +234,7 @@ if ($options == 'avancees' AND $GLOBALS['meta']["articles_mots"] != 'non') { if (($GLOBALS['meta']['multi_articles'] == 'oui') OR (($GLOBALS['meta']['multi_rubriques'] == 'oui') AND ($GLOBALS['meta']['gerer_trad'] == 'oui'))) { - langues_articles($id_article, $flag_editable, $id_rubrique, $id_trad, $dir_lang, $nom_select, $lier_trad, $id_trad_new); + langues_articles($id_article, $flag_editable, $id_rubrique, $id_trad, $trad_err); } echo pipeline('affiche_milieu',array('args'=>array('exec'=>'articles','id_article'=>$id_article),'data'=>'')); @@ -651,10 +650,10 @@ function dates_articles($id_article, $id_rubrique, $flag_editable, $statut_artic } -function langues_articles($id_article, $flag_editable, $id_rubrique, $id_trad, $dir_lang, $nom_select, $lier_trad, $id_trad_new) +function langues_articles($id_article, $flag_editable, $id_rubrique, $id_trad, $trad_err) { - global $connect_statut, $couleur_claire, $options, $connect_toutes_rubriques, $spip_lang_right; + global $connect_statut, $couleur_claire, $options, $connect_toutes_rubriques, $spip_lang_right, $dir_lang; $langue_article = spip_fetch_array(spip_query("SELECT lang FROM spip_articles WHERE id_article=$id_article")); @@ -690,27 +689,14 @@ function langues_articles($id_article, $flag_editable, $id_rubrique, $id_trad, $ echo fin_block(); } - // Gerer les groupes de traductions - if ($GLOBALS['meta']['gerer_trad'] == 'oui') { - - // Changer article de reference de la trad - if ($id_trad_new = intval($id_trad_new) - AND $id_trad_old = intval(_request('id_trad_old')) # bizarre - AND $connect_statut=='0minirezo' - AND $connect_toutes_rubriques) { - spip_query("UPDATE spip_articles SET id_trad = $id_trad_new WHERE id_trad = $id_trad_old"); - $id_trad = $id_trad_new; - } - - if ($flag_editable AND $lier_trad > 0) { // Lier a un groupe de trad - $id_trad = article_referent ($id_article, $id_trad, $lier_trad); - } + if ($trad_err) + echo "<div><font color='red' size='2' face='verdana,arial,helvetica,sans-serif'>"._T('trad_deja_traduit'). "</font></div>"; // Afficher la liste des traductions - $table = !$id_trad ? array() : articles_traduction($id_article, $id_trad); + $table = !$id_trad ? array() : articles_traduction($id_article, $id_trad); // bloc traductions - if (count($table) > 0) { + if (count($table) > 0) { echo "<div class='liste'>"; bandeau_titre_boite2(_T('trad_article_traduction'),''); @@ -721,78 +707,52 @@ function langues_articles($id_article, $flag_editable, $id_rubrique, $id_trad, $ echo afficher_liste ($largeurs, $table, $styles); echo "</table>"; echo "</div>"; - } + } - // changer les globales $dir_lang etc - changer_typo($langue_article); + // changer les globales $dir_lang etc + changer_typo($langue_article); - echo debut_block_invisible('lier_traductions'); + echo debut_block_invisible('lier_traductions'); + + echo "<table width='100%'><tr>"; - echo "<table width='100%'><tr>"; - if ($flag_editable AND $options == "avancees" AND !$table) { + if ($flag_editable AND $options == "avancees" AND !$table) { // Formulaire pour lier a un article echo "<td class='arial2' width='60%'>"; - echo "<form action='" . generer_url_ecrire("articles","id_article=$id_article") . "' method='post' style='margin:0px; padding:0px;'>"; - echo _T('trad_lier'); - echo "<div align='$spip_lang_right'><input type='text' class='fondl' name='lier_trad' size='5'> <INPUT TYPE='submit' VALUE='"._T('bouton_valider')."' CLASS='fondl'></div>"; - echo "</form>"; + echo redirige_action_auteur("editer_article", + $id_article, + 'articles', + "id_article=$id_article", + (_T('trad_lier') . + "<div align='$spip_lang_right'>\n<input type='text' class='fondl' name='lier_trad' size='5' />\n<input type='submit' VALUE='"._T('bouton_valider')."' CLASS='fondl' /></div>"), + " method='post' style='margin:0px; padding:0px;'"); + echo "</td>\n"; echo "<td background='' width='10'> </td>"; echo "<td background='" . _DIR_IMG_PACK . "tirets-separation.gif' width='2'>". http_img_pack('rien.gif', " ", "width='2' height='2'") . "</td>"; echo "<td background='' width='10'> </td>"; - } - echo "<td>"; - icone_horizontale(_T('trad_new'), generer_url_ecrire("articles_edit","new=oui&lier_trad=$id_article&id_rubrique=$id_rubrique"), "traductions-24.gif", "creer.gif"); - echo "</td>"; - if ($flag_editable AND $options == "avancees" AND $table) { + } + + echo "<td>"; + icone_horizontale(_T('trad_new'), generer_url_ecrire("articles_edit","new=oui&lier_trad=$id_article&id_rubrique=$id_rubrique"), "traductions-24.gif", "creer.gif"); + echo "</td>"; + if ($flag_editable AND $options == "avancees" AND $table) { echo "<td background='' width='10'> </td>"; echo "<td background='" . _DIR_IMG_PACK . "tirets-separation.gif' width='2'>". http_img_pack('rien.gif', " ", "width='2' height='2'") . "</td>"; echo "<td background='' width='10'> </td>"; echo "<td>"; icone_horizontale(_T('trad_delier'), redirige_action_auteur("supprimer_traduction","$id_article-$id_trad",'articles', "id_article=$id_article"), "traductions-24.gif", "supprimer.gif"); echo "</td>\n"; - } + } - echo "</tr></table>"; + echo "</tr></table>"; - echo fin_block(); - } + echo fin_block(); fin_cadre_enfonce(); } -function article_referent ($id_article, $id_trad, $lier_trad) -{ - $row = spip_fetch_array(spip_query("SELECT id_trad FROM spip_articles WHERE id_article=$lier_trad")); - - if (!$row) - $err .= "<div>"._T('trad_article_inexistant')."</div>"; - else { - $id_lier = $row['id_trad']; - -// Si l'article vise n'a pas deja de traduction, creer nouveau id_trad - if ($id_lier == 0) { - $nouveau_trad = $lier_trad; - spip_query("UPDATE spip_articles SET id_trad = $lier_trad WHERE id_article = $lier_trad"); - } else { - if ($id_lier == $id_trad) $err = "<div>"._T('trad_deja_traduit')."</div>"; - $nouveau_trad = $id_lier; - spip_query("UPDATE spip_articles SET id_trad = $id_lier WHERE id_trad = $id_lier"); - } - - spip_query("UPDATE spip_articles SET id_trad = $nouveau_trad WHERE id_article = $id_article"); - - if ($id_trad > 0) - spip_query("UPDATE spip_articles SET id_trad = $nouveau_trad WHERE id_trad = $id_trad"); - - $id_trad = $nouveau_trad; - } - - if ($err) echo "<font color='red' size=2' face='verdana,arial,helvetica,sans-serif'>$err</font>"; - - return $id_trad; -} function articles_traduction($id_article, $id_trad) { @@ -816,11 +776,11 @@ function articles_traduction($id_article, $id_trad) $vals[] = http_img_pack("puce-".puce_statut($statut_trad).'.gif', "", "width='7' height='7' border='0' NAME='statut'"); if ($id_article_trad == $id_trad) { - $vals[] = http_img_pack('langues-12.gif', "", "width='12' height='12' border='0'"); + $vals[] = http_img_pack('langues-12.gif', "", "width='12' height='12' border='0'"); $titre_trad = "<b>$titre_trad</b>"; } else { if ($connect_toutes_rubriques) - $vals[] = "<a href='" . generer_url_ecrire("articles","id_article=$id_article&id_trad_old=$id_trad&id_trad_new=$id_article_trad&id_rubrique=$id_rubrique_trad") . "'>". + $vals[] = "<a href='" . redirige_action_auteur("referencer_traduction", "$id_trad,$id_article_trad", 'articles', "id_article=$id_article") . "'>". http_img_pack('langues-off-12.gif', _T('trad_reference'), "width='12' height='12' border='0'", _T('trad_reference')) . "</a>"; else $vals[] = http_img_pack('langues-off-12.gif', "", "width='12' height='12' border='0'"); } -- GitLab