[SPIP] ~2.1.12 -->2.1.25
[velocampus/web/www.git] / www / ecrire / exec / articles_versions.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2014 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
12
13 if (!defined('_ECRIRE_INC_VERSION')) return;
14
15 // http://doc.spip.org/@exec_articles_versions_dist
16 function exec_articles_versions_dist()
17 {
18 exec_articles_versions_args(intval(_request('id_article')),
19 intval(_request('id_version')),
20 intval(_request('id_diff'))); // code mort ?
21 }
22
23 // http://doc.spip.org/@exec_articles_versions_args
24 function exec_articles_versions_args($id_article, $id_version, $id_diff)
25 {
26 global $spip_lang_left, $spip_lang_right;
27
28 if (!autoriser('voirrevisions', 'article', $id_article)
29 OR !$row = sql_fetsel("*", "spip_articles", "id_article=".sql_quote($id_article))){
30 include_spip('inc/minipres');
31 echo minipres();
32 return;
33 }
34
35 include_spip('inc/suivi_versions');
36 include_spip('inc/presentation');
37 include_spip('inc/revisions');
38
39 // recuperer les donnees actuelles de l'article
40 $id_article = $row["id_article"];
41 $id_rubrique = $row["id_rubrique"];
42 $titre = $row["titre"];
43 $statut_article = $row["statut"];
44 $lang = $row["lang"];
45
46 // Afficher le debut de la page (y compris rubrique)
47 $commencer_page = charger_fonction('commencer_page', 'inc');
48 echo $commencer_page(_T('info_historique')." &laquo; $titre &raquo;", "naviguer", "articles", $id_rubrique);
49
50 echo debut_grand_cadre(true);
51
52 echo afficher_hierarchie($id_rubrique);
53
54 echo fin_grand_cadre(true);
55
56
57 //////////////////////////////////////////////////////
58 // Affichage de la colonne de gauche
59 //
60
61 echo debut_gauche('', true);
62
63 echo bloc_des_raccourcis(icone_horizontale(_T('icone_retour_article'), generer_url_ecrire("articles","id_article=$id_article"), "article-24.gif","rien.gif", false) .
64 icone_horizontale(_T('icone_suivi_revisions'), generer_url_ecrire("suivi_revisions",""), "historique-24.gif","rien.gif", false));
65
66
67
68 //////////////////////////////////////////////////////
69 // Affichage de la colonne de droite
70 //
71
72 echo debut_droite('', true);
73
74 $lang_dir = lang_dir(changer_typo($lang));
75
76
77
78 //
79 // recuperer les donnees versionnees
80 //
81 $last_version = false;
82 if (!$id_version) {
83 $id_version = $row['id_version'];
84 $last_version = true;
85 }
86 $textes = revision_comparee($id_article, $id_version, 'complet', $id_diff);
87
88 unset($id_rubrique); # on n'en n'aura besoin que si on affiche un diff
89
90
91 //
92 // Titre, surtitre, sous-titre
93 //
94
95 $debut = $corps = '';
96
97 if (is_array($textes))
98 foreach ($textes as $var => $t) {
99 switch ($var) {
100 case 'id_rubrique':
101 $debut .= "<div dir='$lang_dir' class='arial1 spip_x-small'>"
102 . $t
103 . "</div>\n";
104 break;
105
106 case 'surtitre':
107 case 'soustitre':
108 $debut .= "<div dir='$lang_dir' class='arial1 spip_medium'><b>" . propre_diff($t) . "</b></div>\n";
109 break;
110
111 case 'titre':
112 $debut .= gros_titre(propre_diff($t),
113 puce_statut($statut_article, " style='vertical-align: center'"), false);
114 break;
115
116 // trois champs a affichage combine
117 case 'descriptif':
118 case 'url_site':
119 case 'nom_site':
120 if (!$vudesc++) {
121 $debut .= "<div style='text-align: $spip_lang_left; padding: 5px; border: 1px dashed #aaaaaa; background-color: #e4e4e4;' dir='$lang_dir'>";
122 $texte_case = ($textes['descriptif']) ? "{{"._T('info_descriptif')."}} ".$textes['descriptif']."\n\n" : '';
123 $texte_case .= ($textes['nom_site'].$textes['url_site']) ? "{{"._T('info_urlref')."}} [".$textes['nom_site']."->".$textes['url_site']."]" : '';
124 $debut .= "<span class='verdana1 spip_small'>"
125 . propre($texte_case). "</span>";
126 $debut .= "</div>";
127 }
128 break;
129
130 default:
131 $corps .= "<div dir='$lang_dir' class='champ contenu_$var'>"
132 . "<div class='label'>$var</div>"
133 . "<div class='$var'>"
134 . propre_diff($t)
135 . "</div></div>\n";
136 break;
137 }
138 }
139
140 echo '<div id="contenu">';
141
142 echo debut_cadre_relief('', true);
143
144 echo "\n<table id='diff' cellpadding='0' cellspacing='0' border='0' width='100%'>";
145 echo "<tr><td style='width: 100%' valign='top'>";
146 echo $debut;
147 echo "</td><td>";
148
149 // Icone de modification
150 if (autoriser('modifier', 'article', $id_article))
151 echo icone_inline(
152 _T('icone_modifier_article').'<br />('._T('version')." $id_version)",
153 generer_url_ecrire("articles_edit",
154 "id_article=$id_article".((!$last_version)?"&id_version=$id_version":"")),
155 "article-24.gif",
156 "edit.gif",
157 $spip_lang_right
158 );
159
160 echo "</td>";
161
162 echo "</tr></table>";
163
164 echo fin_cadre_relief(true);
165
166
167 //////////////////////////////////////////////////////
168 // Affichage des versions
169 //
170 $result = sql_select("id_version, titre_version, date, id_auteur",
171 "spip_versions",
172 "id_article=".sql_quote($id_article)." AND id_version>0",
173 "", "id_version DESC");
174
175 echo debut_cadre_relief('', true);
176
177 $zapn = 0;
178 $lignes = array();
179 $points = '...';
180 $tranches = 10;
181 while ($row = sql_fetch($result)) {
182
183 $res = '';
184 // s'il y en a trop on zappe a partir de la 10e
185 // et on s'arrete juste apres celle cherchee
186 if ($zapn++ > $tranches
187 AND abs($id_version - $row['id_version']) > $tranches<<1) {
188 if ($points) {
189 $lignes[]= $points;
190 $points = '';
191 }
192 if ($id_version > $row['id_version']) break;
193 continue;
194 }
195
196 $date = affdate_heure($row['date']);
197 $version_aff = $row['id_version'];
198 $titre_version = typo($row['titre_version']);
199 $titre_aff = $titre_version ? $titre_version : $date;
200 if ($version_aff != $id_version) {
201 $lien = parametre_url(self(), 'id_version', $version_aff);
202 $lien = parametre_url($lien, 'id_diff', '');
203 $res .= "<a href='".($lien.'#diff')."' title=\""._T('info_historique_affiche')."\">$titre_aff</a>";
204 } else {
205 $res .= "<b>$titre_aff</b>";
206 }
207
208 if (is_numeric($row['id_auteur'])
209 AND $t = sql_getfetsel('nom', 'spip_auteurs', "id_auteur=" . intval($row['id_auteur']))) {
210 $res .= " (".typo($t).")";
211 } else {
212 $res .= " (".$row['id_auteur'].")"; #IP edition anonyme
213 }
214
215 if ($version_aff != $id_version) {
216 $res .= " <span class='verdana2'>";
217 if ($version_aff == $id_diff) {
218 $res .= "<b>("._T('info_historique_comparaison').")</b>";
219 } else {
220 $lien = parametre_url(self(), 'id_version', $id_version);
221 $lien = parametre_url($lien, 'id_diff', $version_aff);
222 $res .= "(<a href='".($lien.'#diff').
223 "'>"._T('info_historique_comparaison')."</a>)";
224 }
225 $res .= "</span>";
226 }
227 $lignes[]= $res;
228 }
229 if ($lignes) {
230 echo "<ul class='verdana3'><li>\n";
231 echo join("\n</li><li>\n", $lignes);
232 echo "</li></ul>\n";
233 }
234
235 //////////////////////////////////////////////////////
236 // Corps de la version affichee
237 //
238 echo "\n\n<div id='wysiwyg' style='text-align: justify;'>$corps";
239
240 // notes de bas de page
241 if (strlen($GLOBALS['les_notes']))
242 echo "<div class='champ contenu_notes'>
243 <div class='label'>"._T('info_notes')."</div>
244 <div class='notes' dir='$lang_dir'>"
245 .$GLOBALS['les_notes']
246 ."</div></div>\n";
247
248 echo "</div>\n";
249
250 echo fin_cadre_relief(true);
251
252 echo '</div>'; // /#contenu
253
254
255 echo fin_gauche(), fin_page();
256
257 }
258
259 ?>