From e9900a75aefa848ab9dcd5b625e294a2d4817b84 Mon Sep 17 00:00:00 2001 From: Fil <fil@rezo.net> Date: Tue, 30 Oct 2007 12:17:01 +0000 Subject: [PATCH] enregistrement et affichage des deplacements d'articles (corrige #848) --- ecrire/exec/articles_versions.php | 67 +++++++++++++++++++++---------- ecrire/inc/revisions.php | 18 ++++----- ecrire/inc/suivi_versions.php | 40 ++++++++++++++---- ecrire/inc/urls.php | 14 +++---- 4 files changed, 94 insertions(+), 45 deletions(-) diff --git a/ecrire/exec/articles_versions.php b/ecrire/exec/articles_versions.php index bc7695eb88..2e1bc133de 100644 --- a/ecrire/exec/articles_versions.php +++ b/ecrire/exec/articles_versions.php @@ -25,17 +25,18 @@ function exec_articles_versions_args($id_article, $id_version, $id_diff) { global $les_notes, $champs_extra, $spip_lang_left, $spip_lang_right; - $row = sql_fetsel("*", "spip_articles", "id_article=$id_article"); - if (!autoriser('voirrevisions', 'article', $id_article) - OR !$row) { + OR !$row = sql_fetsel("*", "spip_articles", "id_article="._q($id_article))){ include_spip('inc/minipres'); echo minipres(); - } else { + return; + } + include_spip('inc/suivi_versions'); include_spip('inc/presentation'); include_spip('inc/revisions'); - $commencer_page = charger_fonction('commencer_page', 'inc'); + + // recuperer les donnees actuelles de l'article $id_article = $row["id_article"]; $id_rubrique = $row["id_rubrique"]; $titre_defaut = $titre = $row["titre"]; @@ -57,20 +58,8 @@ function exec_articles_versions_args($id_article, $id_version, $id_diff) $id_trad = $row["id_trad"]; $lang = $row["lang"]; - $last_version = false; - if (!$id_version) { - $id_version = $row['id_version']; - $last_version = true; - } - - $textes = revision_comparee($id_article, $id_version, 'complet', $id_diff); - if (is_array($textes)) foreach ($textes as $var => $t) - { - // cles de $textes = array('surtitre', 'titre', 'soustitre', 'descriptif', 'nom_site', 'url_site', 'chapo', 'texte', 'ps'); - // defini dans suivi_versions. - // Suicidaire. A reerire. - $$var = $t;} - + // Afficher le debut de la page (y compris rubrique) + $commencer_page = charger_fonction('commencer_page', 'inc'); echo $commencer_page(_T('info_historique')." « $titre »", "naviguer", "articles", $id_rubrique); echo debut_grand_cadre(true); @@ -101,15 +90,46 @@ function exec_articles_versions_args($id_article, $id_version, $id_diff) echo debut_cadre_relief('', true); + +// +// recuperer les donnees versionnees +// + $last_version = false; + if (!$id_version) { + $id_version = $row['id_version']; + $last_version = true; + } + $textes = revision_comparee($id_article, $id_version, 'complet', $id_diff); + + unset($id_rubrique); # on n'en n'aura besoin que si on affiche un diff + + if (is_array($textes)) foreach ($textes as $var => $t) + { + // cles de $textes = array('surtitre', 'titre', 'soustitre', 'descriptif', 'nom_site', 'url_site', 'chapo', 'texte', 'ps'); + // defini dans suivi_versions. + // Suicidaire. A reerire. + $$var = $t; + } + + + + // // Titre, surtitre, sous-titre // echo "\n<table id='diff' cellpadding='0' cellspacing='0' border='0' width='100%'>"; echo "<tr><td style='width: 100%' valign='top'>"; + + if (isset($id_rubrique)) { + echo "<div dir='$lang_dir' class='arial1 spip_x-small'>", + $id_rubrique, + "</div>\n"; + } + if ($surtitre) { echo "<span dir='$lang_dir'><span class='arial1 spip_medium'><b>", propre_diff($surtitre), "</b></span></span>\n"; -} + } echo gros_titre(propre_diff($titre), puce_statut($statut_article, " style='vertical-align: center'") . " ", false); if ($soustitre) { @@ -149,7 +169,10 @@ function exec_articles_versions_args($id_article, $id_version, $id_diff) // - $result = sql_select("id_version, titre_version, date, id_auteur ", "spip_versions", "id_article=$id_article", "", "id_version DESC"); + $result = sql_select("id_version, titre_version, date, id_auteur", + "spip_versions", + "id_article="._q($id_article)." AND id_version>0", + "", "id_version DESC"); $zap = sql_count($result); @@ -268,7 +291,7 @@ echo fin_cadre_relief(true); echo fin_gauche(), fin_page(); - } + } ?> diff --git a/ecrire/inc/revisions.php b/ecrire/inc/revisions.php index b1057a5346..a4e804c262 100644 --- a/ecrire/inc/revisions.php +++ b/ecrire/inc/revisions.php @@ -28,22 +28,22 @@ function separer_paras($texte, $paras = "") { // http://doc.spip.org/@replace_fragment function replace_fragment($id_article, $version_min, $version_max, $id_fragment, $fragment) { - global $flag_gz; - $fragment = serialize($fragment); $compress = 0; - /* pour le portage en PG il faut l'equivalente au mysql_escape_string - et deporter son appel dans les fonctions d'abstraction. A revoir. - if ($flag_gz) { + + // pour le portage en PG il faut l'equivalente au mysql_escape_string + // et deporter son appel dans les fonctions d'abstraction. + if ($GLOBALS['flag_gz'] + AND $GLOBALS['connexions'][0]['type'] == 'mysql') { $s = gzcompress($fragment); if (strlen($s) < strlen($fragment)) { - //spip_log("gain gz: ".(100 - 100 * strlen($s) / strlen($fragment))); + # spip_log("gain gz: ".intval(100 - 100 * strlen($s) / strlen($fragment))); $compress = 1; $fragment = $s; } - // Attention a bien echapper le $fragment qui est en binaire - } */ + } + // Attention a echapper $fragment, binaire potentiellement gz return array( 'id_article' => intval($id_article), 'id_fragment' => intval($id_fragment), @@ -588,7 +588,7 @@ function propre_diff($texte) { function liste_champs_versionnes($table) { if ($table == 'spip_articles') return array('surtitre', 'titre', 'soustitre', 'descriptif', - 'nom_site', 'url_site', 'chapo', 'texte', 'ps'); + 'nom_site', 'url_site', 'chapo', 'texte', 'ps', 'id_rubrique'); else return array(); } diff --git a/ecrire/inc/suivi_versions.php b/ecrire/inc/suivi_versions.php index 16d35034cb..94fd22cc4c 100644 --- a/ecrire/inc/suivi_versions.php +++ b/ecrire/inc/suivi_versions.php @@ -30,6 +30,19 @@ function afficher_para_modifies ($texte, $court = false) { return $texte; } + +// Retourne le titre de la rubrique demandee, pour affichage de la chaine +// "deplace de XX vers YY" +// http://doc.spip.org/@titre_rubrique +function titre_rubrique($id_rubrique) { + if (!$id = intval($id_rubrique)) + return _T('info_sans_titre'); + + $t = sql_fetsel('titre', 'spip_rubriques', "id_rubrique=$id"); + return typo($t['titre']); +} + + // http://doc.spip.org/@afficher_suivi_versions function afficher_suivi_versions ($debut = 0, $id_secteur = 0, $uniq_auteur = false, $lang = "", $court = false, $rss = false) { @@ -212,7 +225,7 @@ function revision_comparee($id_article, $id_version, $format='diff', $id_diff=NU // Mode "complet": on veut afficher tous les champs switch ($format) { case 'complet': - $champs = array('surtitre', 'titre', 'soustitre', 'descriptif', 'nom_site', 'url_site', 'chapo', 'texte', 'ps'); + $champs = liste_champs_versionnes('spip_articles'); break; case 'diff': case 'apercu': @@ -242,13 +255,26 @@ function revision_comparee($id_article, $id_version, $format='diff', $id_diff=NU // si on a les deux, le diff nous interesse, plus ou moins court if (isset($new[$champ]) AND isset($old[$champ])) { - $diff = new Diff(new DiffTexte); - $n = preparer_diff($new[$champ]); - $o = preparer_diff($old[$champ]); - $textes[$champ] = afficher_diff($diff->comparer($n,$o)); + // cas particulier : id_rubrique + if (in_array($champ, array('id_rubrique'))) { + $textes[$champ] = _L("Déplacé de <b>« " + . titre_rubrique($old[$champ]) + . " »</b> vers <b>« " + . titre_rubrique($new[$champ]) + . " »</b>." + ); + } + + // champs textuels + else { + $diff = new Diff(new DiffTexte); + $n = preparer_diff($new[$champ]); + $o = preparer_diff($old[$champ]); + $textes[$champ] = afficher_diff($diff->comparer($n,$o)); - if ($format == 'diff' OR $format == 'apercu') - $textes[$champ] = afficher_para_modifies($textes[$champ], ($format == 'apercu')); + if ($format == 'diff' OR $format == 'apercu') + $textes[$champ] = afficher_para_modifies($textes[$champ], ($format == 'apercu')); + } } } } diff --git a/ecrire/inc/urls.php b/ecrire/inc/urls.php index 81a9734098..d94a9b7d52 100644 --- a/ecrire/inc/urls.php +++ b/ecrire/inc/urls.php @@ -24,7 +24,7 @@ function generer_url_ecrire_article($id, $suite='', $ancre='', $statut='', $conn } if ($suite) $a .= "&$suite"; if ($statut == 'publie') { - $a .= "&ancre=" . $ancre; + if (strlen($ancre)) $a .= "&ancre=" . $ancre; return generer_url_action('redirect', $a); } else return generer_url_ecrire('articles', $a) . ($ancre ? "#$ancre" : ''); } @@ -38,7 +38,7 @@ function generer_url_ecrire_rubrique($id, $suite='', $ancre='', $statut='', $con } if ($suite) $a .= "&$suite"; if ($statut == 'publie') { - $a .= "&ancre=" . $ancre; + if (strlen($ancre)) $a .= "&ancre=" . $ancre; return generer_url_action('redirect', $a); } else return generer_url_ecrire('naviguer',$a) . ($ancre ? "#$ancre" : ''); } @@ -52,7 +52,7 @@ function generer_url_ecrire_breve($id, $suite='', $ancre='', $statut='', $connec } if ($suite) $a .= "&$suite"; if ($statut == 'publie') { - $a .= "&ancre=" . $ancre; + if (strlen($ancre)) $a .= "&ancre=" . $ancre; return generer_url_action('redirect', $a); } else return generer_url_ecrire('breves_voir',$a) . ($ancre ? "#$ancre" : ''); } @@ -62,7 +62,7 @@ function generer_url_ecrire_mot($id, $suite='', $ancre='', $statut='', $connect= $a = "id_mot=" . intval($id); if ($suite) $a .= "&$suite"; if (!$statut) { - $a .= "&ancre=" . $ancre; + if (strlen($ancre)) $a .= "&ancre=" . $ancre; return generer_url_action('redirect', $a); } else return generer_url_ecrire('mots_edit',$a) . ($ancre ? "#$ancre" : ''); } @@ -72,7 +72,7 @@ function generer_url_ecrire_site($id, $suite='', $ancre='', $statut='', $connect $a = "id_syndic=" . intval($id); if ($suite) $a .= "&$suite"; if (!$statut) { - $a .= "&ancre=" . $ancre; + if (strlen($ancre)) $a .= "&ancre=" . $ancre; return generer_url_action('redirect', $a); } else return generer_url_ecrire('sites',$a) . ($ancre ? "#$ancre" : ''); } @@ -82,7 +82,7 @@ function generer_url_ecrire_auteur($id, $suite='', $ancre='', $statut='', $conne $a = "id_auteur=" . intval($id); if ($suite) $a .= "&$suite"; if (!$statut) { - $a .= "&ancre=" . $ancre; + if (strlen($ancre)) $a .= "&ancre=" . $ancre; return generer_url_action('redirect', $a); } else return generer_url_ecrire('auteur_infos',$a) . ($ancre ? "#$ancre" : ''); } @@ -91,7 +91,7 @@ function generer_url_ecrire_auteur($id, $suite='', $ancre='', $statut='', $conne function generer_url_ecrire_forum($id, $suite='', $ancre='', $statut='', $connect='') { $a = "id_forum=" . intval($id); if ($suite) $a .= "&$suite"; - $a .= "&ancre=" . $ancre; + if (strlen($ancre)) $a .= "&ancre=" . $ancre; return generer_url_action('redirect', $a); } -- GitLab